@@ -155,8 +155,8 @@ defmodule Mongo.UrlParser do
155
155
{ :ok , { _ , _ , _ , _ , _ , srv_record } } <-
156
156
:inet_res . getbyname ( ~c" _mongodb._tcp." ++ url_char , :srv ) ,
157
157
{ :ok , host } <- get_host_srv ( srv_record ) ,
158
- { :ok , { _ , _ , _ , _ , _ , txt_record } } <- :inet_res . getbyname ( url_char , :txt ) ,
159
- txt <- " #{ orig_options } & #{ txt_record } &ssl=true" do
158
+ { :ok , txt_record } <- resolve_txt_record ( url_char ) ,
159
+ txt <- build_params ( orig_options , txt_record ) do
160
160
frags
161
161
|> Map . put ( "seeds" , host )
162
162
|> Map . put ( "options" , txt )
@@ -167,6 +167,24 @@ defmodule Mongo.UrlParser do
167
167
168
168
defp resolve_srv_url ( frags ) , do: frags
169
169
170
+ defp build_params ( orig_options , nil ) do
171
+ "#{ orig_options } &ssl=true"
172
+ end
173
+
174
+ defp build_params ( orig_options , txt_record ) do
175
+ "#{ orig_options } &#{ txt_record } &ssl=true"
176
+ end
177
+
178
+ defp resolve_txt_record ( url_char ) do
179
+ case :inet_res . lookup ( url_char , :in , :txt ) do
180
+ [ [ txt_record ] | _ ] ->
181
+ { :ok , txt_record }
182
+
183
+ _other ->
184
+ { :ok , nil }
185
+ end
186
+ end
187
+
170
188
@ spec get_host_srv ( [ { term , term , term , term } ] ) :: { :ok , String . t ( ) }
171
189
defp get_host_srv ( srv ) when is_list ( srv ) do
172
190
hosts = Enum . map_join ( srv , "," , fn { _ , _ , port , host } -> "#{ host } :#{ port } " end )
0 commit comments