fixeria has submitted this change. ( https://gerrit.osmocom.org/c/erlang/osmo-s1gw/+/40015?usp=email ) Change subject: sctp_{client,server}: add and use sctp_common:parse_addr/1 ...................................................................... sctp_{client,server}: add and use sctp_common:parse_addr/1 Change-Id: Ibc7b3e519e4b94499bf8a2c45b64fa62b2d08d1e --- M src/sctp_client.erl M src/sctp_common.erl M src/sctp_server.erl 3 files changed, 27 insertions(+), 22 deletions(-) Approvals: osmith: Looks good to me, but someone else must approve Jenkins Builder: Verified laforge: Looks good to me, approved diff --git a/src/sctp_client.erl b/src/sctp_client.erl index de3fefb..731174f 100644 --- a/src/sctp_client.erl +++ b/src/sctp_client.erl @@ -86,24 +86,16 @@ connect({any, localhost}). -spec connect(loc_rem_addr()) -> connect_result(). -connect(LocRemAddr) -> - connect(LocRemAddr, ?S1AP_PORT). +connect({LAddr, RAddr}) -> + connect({LAddr, RAddr}, ?S1AP_PORT). -spec connect(loc_rem_addr(), inet:port_number()) -> connect_result(). -connect({LocAddrStr, RemAddr}, Port) when is_list(LocAddrStr) -> - {ok, LocAddr} = inet:parse_address(LocAddrStr), - connect({LocAddr, RemAddr}, Port); - -connect({LocAddr, RemAddrStr}, Port) when is_list(RemAddrStr) -> - {ok, RemAddr} = inet:parse_address(RemAddrStr), - connect({LocAddr, RemAddr}, Port); - -connect({LocAddr, RemAddr}, Port) -> - {ok, Sock} = gen_sctp:open([{ip, LocAddr}, +connect({LAddr, RAddr}, RPort) -> + {ok, Sock} = gen_sctp:open([{ip, sctp_common:parse_addr(LAddr)}, {type, seqpacket}, {sctp_nodelay, true}, {active, true}]), - gen_sctp:connect_init(Sock, RemAddr, Port, []), + gen_sctp:connect_init(Sock, sctp_common:parse_addr(RAddr), RPort, []), {ok, Sock}. diff --git a/src/sctp_common.erl b/src/sctp_common.erl index 0d28f81..296dbff 100644 --- a/src/sctp_common.erl +++ b/src/sctp_common.erl @@ -34,7 +34,8 @@ -module(sctp_common). --export([send_data/2, +-export([parse_addr/1, + send_data/2, shutdown/1]). -include_lib("kernel/include/logger.hrl"). @@ -51,6 +52,22 @@ %% public API %% ------------------------------------------------------------------ +-spec parse_addr(AddrStr :: string()) -> Addr :: inet:ip_address(); + (Addr) -> Addr when Addr :: any | localhost | inet:ip_address(). +parse_addr(AddrStr) when is_list(AddrStr) -> + {ok, Addr} = inet:parse_address(AddrStr), + Addr; + +parse_addr(Addr) -> + case Addr of + any -> any; + localhost -> localhost; + _ -> + true = inet:is_ip_address(Addr), + Addr + end. + + -spec send_data(sock_aid(), binary()) -> ok | {error, term()}. send_data({Sock, Aid}, Data) -> gen_sctp:send(Sock, #sctp_sndrcvinfo{stream = ?S1AP_SCTP_STREAM, diff --git a/src/sctp_server.erl b/src/sctp_server.erl index e9066ac..898882d 100644 --- a/src/sctp_server.erl +++ b/src/sctp_server.erl @@ -101,19 +101,15 @@ %% gen_server API %% ------------------------------------------------------------------ -init([BindAddrStr, BindPort, Handler, Priv]) when is_list(BindAddrStr) -> - {ok, BindAddr} = inet:parse_address(BindAddrStr), - init([BindAddr, BindPort, Handler, Priv]); - -init([BindAddr, BindPort, Handler, Priv]) -> +init([LAddr, LPort, Handler, Priv]) -> process_flag(trap_exit, true), - {ok, Sock} = gen_sctp:open([{ip, BindAddr}, - {port, BindPort}, + {ok, Sock} = gen_sctp:open([{ip, sctp_common:parse_addr(LAddr)}, + {port, LPort}, {type, seqpacket}, {reuseaddr, true}, {sctp_nodelay, true}, {active, true}]), - ?LOG_INFO("SCTP server listening on ~w:~w", [BindAddr, BindPort]), + ?LOG_INFO("SCTP server listening on ~p:~p", [LAddr, LPort]), ok = gen_sctp:listen(Sock, true), {ok, #server_state{sock = Sock, clients = dict:new(), -- To view, visit https://gerrit.osmocom.org/c/erlang/osmo-s1gw/+/40015?usp=email To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email Gerrit-MessageType: merged Gerrit-Project: erlang/osmo-s1gw Gerrit-Branch: master Gerrit-Change-Id: Ibc7b3e519e4b94499bf8a2c45b64fa62b2d08d1e Gerrit-Change-Number: 40015 Gerrit-PatchSet: 1 Gerrit-Owner: fixeria <vyanitskiy@sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de> Gerrit-Reviewer: laforge <laforge@osmocom.org> Gerrit-Reviewer: osmith <osmith@sysmocom.de>