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(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: osmith <osmith(a)sysmocom.de>