fixeria has submitted this change. (
https://gerrit.osmocom.org/c/erlang/osmo-s1gw/+/38789?usp=email )
Change subject: sctp_server: pass #server_state to client_{add,del}()
......................................................................
sctp_server: pass #server_state to client_{add,del}()
Prepare for a follow-up patch, in which functions client_{add,del}()
will need to access more fields from the #server_state.
Change-Id: I5f784617745a9ecec2cfa998dc70e176311d24b1
---
M src/sctp_server.erl
1 file changed, 15 insertions(+), 13 deletions(-)
Approvals:
pespin: Looks good to me, but someone else must approve
Jenkins Builder: Verified
laforge: Looks good to me, but someone else must approve
fixeria: Looks good to me, approved
diff --git a/src/sctp_server.erl b/src/sctp_server.erl
index 938b02a..2617375 100644
--- a/src/sctp_server.erl
+++ b/src/sctp_server.erl
@@ -160,23 +160,22 @@
sctp_recv({FromAddr, FromPort, [],
#sctp_assoc_change{state = ConnState,
assoc_id = Aid}},
- #server_state{priv = Priv} = S) ->
+ #server_state{} = S) ->
case ConnState of
comm_up ->
?LOG_NOTICE("eNB connection (id=~p, ~p:~p) established", [Aid,
FromAddr, FromPort]),
- Clients = client_add(S#server_state.clients, Aid, FromAddr, FromPort, Priv);
+ client_add(Aid, FromAddr, FromPort, S);
shutdown_comp ->
?LOG_NOTICE("eNB connection (id=~p, ~p:~p) closed", [Aid, FromAddr,
FromPort]),
- Clients = client_del(S#server_state.clients, Aid);
+ client_del(Aid, S);
comm_lost ->
?LOG_NOTICE("eNB connection (id=~p, ~p:~p) lost", [Aid, FromAddr,
FromPort]),
- Clients = client_del(S#server_state.clients, Aid);
+ client_del(Aid, S);
_ ->
?LOG_NOTICE("eNB connection (id=~p, ~p:~p) state ~p",
[Aid, FromAddr, FromPort, ConnState]),
- Clients = S#server_state.clients
- end,
- S#server_state{clients = Clients};
+ S
+ end;
%% Handle an #sctp_sndrcvinfo event (incoming data)
sctp_recv({FromAddr, FromPort,
@@ -203,24 +202,27 @@
%% Add a new client to the list, spawning a proxy process
-client_add(Clients, Aid, FromAddr, FromPort, Priv) ->
+client_add(Aid, FromAddr, FromPort,
+ #server_state{clients = Clients,
+ priv = Priv} = S) ->
{ok, Pid} = sctp_proxy:start_link(Aid, Priv),
- NewClient = #client_state{addr_port = {FromAddr, FromPort}, pid = Pid},
s1gw_metrics:gauge_inc(?S1GW_GAUGE_S1AP_ENB_NUM_SCTP_CONNECTIONS),
- dict:store(Aid, NewClient, Clients).
+ NewClient = #client_state{addr_port = {FromAddr, FromPort}, pid = Pid},
+ S#server_state{clients = dict:store(Aid, NewClient, Clients)}.
%% Delete an existing client from the list, stopping the proxy process
-client_del(Clients, Aid) ->
+client_del(Aid,
+ #server_state{clients = Clients} = S) ->
case dict:find(Aid, Clients) of
{ok, Client} ->
%% the proxy process might be already dead, so we guard
%% against exceptions like noproc or {nodedown,Node}.
catch sctp_proxy:shutdown(Client#client_state.pid),
s1gw_metrics:gauge_dec(?S1GW_GAUGE_S1AP_ENB_NUM_SCTP_CONNECTIONS),
- dict:erase(Aid, Clients);
+ S#server_state{clients = dict:erase(Aid, Clients)};
error ->
- Clients
+ S
end.
--
To view, visit
https://gerrit.osmocom.org/c/erlang/osmo-s1gw/+/38789?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: I5f784617745a9ecec2cfa998dc70e176311d24b1
Gerrit-Change-Number: 38789
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: pespin <pespin(a)sysmocom.de>