From b25dedccc929579af8a7b70f3186e5cbbcc74356 Mon Sep 17 00:00:00 2001 From: zhouzb Date: Mon, 18 Jan 2021 09:17:24 +0800 Subject: [PATCH] refactor(inet parse): refactor inet parse --- .../emqx_auth_http/src/emqx_auth_http_app.erl | 26 ++++++++--------- .../src/emqx_web_hook_actions.erl | 26 ++++++++--------- apps/emqx_web_hook/src/emqx_web_hook_app.erl | 28 +++++++++---------- 3 files changed, 37 insertions(+), 43 deletions(-) diff --git a/apps/emqx_auth_http/src/emqx_auth_http_app.erl b/apps/emqx_auth_http/src/emqx_auth_http_app.erl index 487201e8e..e857fc681 100644 --- a/apps/emqx_auth_http/src/emqx_auth_http_app.erl +++ b/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]. diff --git a/apps/emqx_web_hook/src/emqx_web_hook_actions.erl b/apps/emqx_web_hook/src/emqx_web_hook_actions.erl index cc585d1f1..7e7a901c9 100644 --- a/apps/emqx_web_hook/src/emqx_web_hook_actions.erl +++ b/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. diff --git a/apps/emqx_web_hook/src/emqx_web_hook_app.erl b/apps/emqx_web_hook/src/emqx_web_hook_app.erl index 2c0697c81..2ec8ebf42 100644 --- a/apps/emqx_web_hook/src/emqx_web_hook_app.erl +++ b/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]. \ No newline at end of file + [{<<"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. \ No newline at end of file