Просмотр исходного кода

refactor(inet parse): refactor inet parse

zhouzb 5 лет назад
Родитель
Сommit
b25dedccc9

+ 12 - 14
apps/emqx_auth_http/src/emqx_auth_http_app.erl

@@ -61,20 +61,7 @@ translate_env(EnvName) ->
                                             _ -> 80
                                         end),
             Path = path(Path0),
-            Host = case inet:parse_address(Host0) of
-                       {ok, {_,_,_,_} = Addr} -> Addr;
-                       {ok, {_,_,_,_,_,_,_,_} = Addr} -> Addr;
-                       {error, einval} -> Host0
-                   end,
-            Inet = case Host of
-                       {_,_,_,_} -> inet;
-                       {_,_,_,_,_,_,_,_} -> inet6;
-                       _ ->
-                           case inet:getaddr(Host, inet6) of
-                               {error, _} -> inet;
-                               {ok, _} -> inet6
-                           end
-                   end,
+            {Inet, Host} = parse_host(Host0),
             MoreOpts = case Scheme of
                         "http" ->
                             [{transport_opts, [Inet]}];
@@ -152,6 +139,17 @@ unload_hooks() ->
     ehttpc_sup:stop_pool('emqx_auth_http/acl_req'),
     ok.
 
+parse_host(Host) ->
+    case inet:parse_address(Host) of
+        {ok, Addr} when size(Addr) =:= 4 -> {inet, Addr};
+        {ok, Addr} when size(Addr) =:= 8 -> {inet6, Addr};
+        {error, einval} ->
+            case inet:getaddr(Host, inet6) of
+                {ok, _} -> {inet6, Host};
+                {error, _} -> {inet, Host}
+            end
+    end.
+
 to_lower(Headers) ->
     [{string:to_lower(K), V} || {K, V} <- Headers].
 

+ 12 - 14
apps/emqx_web_hook/src/emqx_web_hook_actions.erl

@@ -340,20 +340,7 @@ pool_opts(Params = #{<<"url">> := URL}) ->
                                   end),
     PoolSize = maps:get(<<"pool_size">>, Params, 32),
     ConnectTimeout = timer:seconds(maps:get(<<"connect_timeout">>, Params, 5)),
-    Host = case inet:parse_address(Host0) of
-                       {ok, {_,_,_,_} = Addr} -> Addr;
-                       {ok, {_,_,_,_,_,_,_,_} = Addr} -> Addr;
-                       {error, einval} -> Host0
-                   end,
-    Inet = case Host of
-               {_,_,_,_} -> inet;
-               {_,_,_,_,_,_,_,_} -> inet6;
-               _ ->
-                   case inet:getaddr(Host, inet6) of
-                       {error, _} -> inet;
-                       {ok, _} -> inet6
-                   end
-           end,
+    {Inet, Host} = parse_host(Host0),
     MoreOpts = case Scheme of
                    "http" ->
                        [{transport_opts, [Inet]}];
@@ -388,3 +375,14 @@ pool_opts(Params = #{<<"url">> := URL}) ->
 
 pool_name(ResId) ->
     list_to_atom("webhook:" ++ str(ResId)).
+
+parse_host(Host) ->
+    case inet:parse_address(Host) of
+        {ok, Addr} when size(Addr) =:= 4 -> {inet, Addr};
+        {ok, Addr} when size(Addr) =:= 8 -> {inet6, Addr};
+        {error, einval} ->
+            case inet:getaddr(Host, inet6) of
+                {ok, _} -> {inet6, Host};
+                {error, _} -> {inet, Host}
+            end
+    end.

+ 13 - 15
apps/emqx_web_hook/src/emqx_web_hook_app.erl

@@ -58,20 +58,7 @@ translate_env() ->
                                       _ -> 80
                                   end),
     Path = path(Path0),
-    Host = case inet:parse_address(Host0) of
-                       {ok, {_,_,_,_} = Addr} -> Addr;
-                       {ok, {_,_,_,_,_,_,_,_} = Addr} -> Addr;
-                       {error, einval} -> Host0
-                   end,
-    Inet = case Host of
-                       {_,_,_,_} -> inet;
-                       {_,_,_,_,_,_,_,_} -> inet6;
-                       _ ->
-                           case inet:getaddr(Host, inet6) of
-                               {error, _} -> inet;
-                               {ok, _} -> inet6
-                           end
-                   end,
+    {Inet, Host} = parse_host(Host0),
     PoolSize = application:get_env(?APP, pool_size, 32),
     MoreOpts = case Scheme of
                    "http" ->
@@ -118,4 +105,15 @@ path(Path) ->
 
 set_content_type(Headers) ->
     NHeaders = proplists:delete(<<"Content-Type">>, proplists:delete(<<"content-type">>, Headers)),
-    [{<<"content-type">>, <<"application/json">>} | NHeaders].
+    [{<<"content-type">>, <<"application/json">>} | NHeaders].
+
+parse_host(Host) ->
+    case inet:parse_address(Host) of
+        {ok, Addr} when size(Addr) =:= 4 -> {inet, Addr};
+        {ok, Addr} when size(Addr) =:= 8 -> {inet6, Addr};
+        {error, einval} ->
+            case inet:getaddr(Host, inet6) of
+                {ok, _} -> {inet6, Host};
+                {error, _} -> {inet, Host}
+            end
+    end.