pespin has submitted this change. (
https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/35887?usp=email )
Change subject: Fix all sets() lookup functions
......................................................................
Fix all sets() lookup functions
Previous logic was wrong, since the accumulator function was not really
matching properly as the parameter was shadowed and didn't include the
value from the outer function.
The lookup is fixed here by passing the input lookup key (eg Imsi) as part
of the default/initial value of the fold() function.
Change-Id: I3a4a473b45fa54e857c2092d8d2b1e68ff9535e1
---
M src/aaa_diameter_swm.erl
M src/epdg_diameter_swm.erl
M src/epdg_gtpc_s2b.erl
M src/gsup_server.erl
4 files changed, 47 insertions(+), 27 deletions(-)
Approvals:
Jenkins Builder: Verified
pespin: Looks good to me, approved
diff --git a/src/aaa_diameter_swm.erl b/src/aaa_diameter_swm.erl
index 9458383..d425ed6 100644
--- a/src/aaa_diameter_swm.erl
+++ b/src/aaa_diameter_swm.erl
@@ -148,12 +148,13 @@
% returns swm_session if found, undefined if not
find_swm_session_by_imsi(Imsi, State) ->
- sets:fold(
- fun(UEsIt = #swm_session{imsi = Imsi}, _AccIn) -> UEsIt;
- (_, AccIn) -> AccIn
- end,
- undefined,
- State#swm_state.ues).
+ {Imsi, Res} = sets:fold(
+ fun(UEsIt = #swm_session{imsi = LookupImsi}, {LookupImsi, _AccIn}) -> {LookupImsi,
UEsIt};
+ (_, AccIn) -> AccIn
+ end,
+ {Imsi, undefined},
+ State#swm_state.ues),
+ Res.
find_or_new_swm_session(Imsi, State) ->
UE = find_swm_session_by_imsi(Imsi, State),
diff --git a/src/epdg_diameter_swm.erl b/src/epdg_diameter_swm.erl
index bfb8f2d..2e4d738 100644
--- a/src/epdg_diameter_swm.erl
+++ b/src/epdg_diameter_swm.erl
@@ -163,12 +163,13 @@
% returns Sess if found, undefined it not
find_swm_session_by_imsi(Imsi, State) ->
- sets:fold(
- fun(SessIt = #swm_session{imsi = Imsi}, _AccIn) -> SessIt;
+ {Imsi, Res} = sets:fold(
+ fun(SessIt = #swm_session{imsi = LookupImsi}, {LookupImsi, _AccIn}) -> {LookupImsi,
SessIt};
(_, AccIn) -> AccIn
end,
- undefined,
- State#swm_state.sessions).
+ {Imsi, undefined},
+ State#swm_state.sessions),
+ Res.
find_or_new_swm_session(Imsi, Pid, State) ->
Sess = find_swm_session_by_imsi(Imsi, State),
diff --git a/src/epdg_gtpc_s2b.erl b/src/epdg_gtpc_s2b.erl
index 712e484..bc1a076 100644
--- a/src/epdg_gtpc_s2b.erl
+++ b/src/epdg_gtpc_s2b.erl
@@ -219,12 +219,13 @@
% returns Sess if found, undefined it not
find_gtp_session_by_imsi(Imsi, State) ->
- sets:fold(
- fun(SessIt = #gtp_session{imsi = Imsi}, _AccIn) -> SessIt;
- (_, AccIn) -> AccIn
- end,
- undefined,
- State#gtp_state.sessions).
+ {Imsi, Res} = sets:fold(
+ fun(SessIt = #gtp_session{imsi = LookupImsi}, {LookupImsi, _AccIn})
-> {LookupImsi, SessIt};
+ (_, AccIn) -> AccIn
+ end,
+ {Imsi, undefined},
+ State#gtp_state.sessions),
+ Res.
find_or_new_gtp_session(Imsi, Pid, State) ->
Sess = find_gtp_session_by_imsi(Imsi, State),
@@ -289,12 +290,13 @@
% returns Sess if found, undefined it not
find_gtp_session_by_local_teic(LocalControlTei, State) ->
- sets:fold(
- fun(SessIt = #gtp_session{local_control_tei = LocalControlTei}, _AccIn) ->
SessIt;
- (_, AccIn) -> AccIn
+ {LocalControlTei, Res} = sets:fold(
+ fun(SessIt = #gtp_session{local_control_tei = LookupLTEIC}, {LookupLTEIC,
_AccIn}) -> {LookupLTEIC, SessIt};
+ (_, AccIn) -> AccIn
end,
- undefined,
- State#gtp_state.sessions).
+ {LocalControlTei, undefined},
+ State#gtp_state.sessions),
+ Res.
%% connect/2
connect(Name, {Socket, RemoteAddr, RemotePort}) ->
diff --git a/src/gsup_server.erl b/src/gsup_server.erl
index 8659c95..5c536fc 100644
--- a/src/gsup_server.erl
+++ b/src/gsup_server.erl
@@ -381,12 +381,13 @@
% returns gsups_ue if found, undefined it not
find_gsups_ue_by_imsi(Imsi, State) ->
- sets:fold(
- fun(UEsIt = #gsups_ue{imsi = Imsi}, _AccIn) -> UEsIt;
- (_, AccIn) -> AccIn
- end,
- undefined,
- State#gsups_state.ues).
+ {Imsi, Res} = sets:fold(
+ fun(SessIt = #gsups_ue{imsi = LookupImsi}, {LookupImsi, _AccIn}) -> {LookupImsi,
SessIt};
+ (_, AccIn) -> AccIn
+ end,
+ {Imsi, undefined},
+ State#gsups_state.ues),
+ Res.
find_or_new_gsups_ue(Imsi, State) ->
UE = find_gsups_ue_by_imsi(Imsi, State),
--
To view, visit
https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/35887?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: erlang/osmo-epdg
Gerrit-Branch: master
Gerrit-Change-Id: I3a4a473b45fa54e857c2092d8d2b1e68ff9535e1
Gerrit-Change-Number: 35887
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
Gerrit-MessageType: merged