diff --git a/apps/emqx_management/src/emqx_mgmt_util.erl b/apps/emqx_management/src/emqx_mgmt_util.erl index b81b39b07..c266dce1b 100644 --- a/apps/emqx_management/src/emqx_mgmt_util.erl +++ b/apps/emqx_management/src/emqx_mgmt_util.erl @@ -61,10 +61,8 @@ kmg(Byte) -> kmg(F, S) -> iolist_to_binary(io_lib:format("~.2f~ts", [F, S])). -ntoa({0, 0, 0, 0, 0, 16#ffff, AB, CD}) -> - inet_parse:ntoa({AB bsr 8, AB rem 256, CD bsr 8, CD rem 256}); -ntoa(IP) -> - inet_parse:ntoa(IP). +ntoa(Ip) -> + emqx_utils:ntoa(Ip). merge_maps(Default, New) -> maps:fold( diff --git a/apps/emqx_rule_engine/src/emqx_rule_events.erl b/apps/emqx_rule_engine/src/emqx_rule_events.erl index ac9e077eb..367afc654 100644 --- a/apps/emqx_rule_engine/src/emqx_rule_events.erl +++ b/apps/emqx_rule_engine/src/emqx_rule_events.erl @@ -1039,9 +1039,10 @@ reason({shutdown, Reason}) when is_atom(Reason) -> Reason; reason({Error, _}) when is_atom(Error) -> Error; reason(_) -> internal_error. -ntoa(undefined) -> undefined; -ntoa({IpAddr, Port}) -> iolist_to_binary([inet:ntoa(IpAddr), ":", integer_to_list(Port)]); -ntoa(IpAddr) -> iolist_to_binary(inet:ntoa(IpAddr)). +ntoa(undefined) -> + undefined; +ntoa(IpOrIpPort) -> + iolist_to_binary(emqx_utils:ntoa(IpOrIpPort)). event_name(?BRIDGE_HOOKPOINT(_) = Bridge) -> Bridge; event_name(<<"$events/client_connected">>) -> 'client.connected'; diff --git a/apps/emqx_utils/src/emqx_utils.erl b/apps/emqx_utils/src/emqx_utils.erl index 1d43cc56c..abdd5f79a 100644 --- a/apps/emqx_utils/src/emqx_utils.erl +++ b/apps/emqx_utils/src/emqx_utils.erl @@ -64,7 +64,8 @@ tcp_keepalive_opts/4, format/1, format_mfal/1, - call_first_defined/1 + call_first_defined/1, + ntoa/1 ]). -export([ @@ -1031,6 +1032,15 @@ flatcomb(Ys = [_ | _], Zs = [_ | _]) -> flatcomb(Y, Zs) -> [Y | Zs]. +%% @doc Format IP address tuple or {IP, Port} tuple to string. +ntoa({IP, Port}) -> + ntoa(IP) ++ ":" ++ integer_to_list(Port); +ntoa({0, 0, 0, 0, 0, 16#ffff, AB, CD}) -> + %% v6 piggyback v4 + inet_parse:ntoa({AB bsr 8, AB rem 256, CD bsr 8, CD rem 256}); +ntoa(IP) -> + inet_parse:ntoa(IP). + -ifdef(TEST). -include_lib("eunit/include/eunit.hrl").