pespin has submitted this change. (
https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/34730?usp=email )
Change subject: epdg_diameter_swx: parse the result code of the MAA
......................................................................
epdg_diameter_swx: parse the result code of the MAA
Parse error cases on both the Result-Code and the Experimental-Result-Code
of an Media Authentication Answer.
Change-Id: I8d2c99f12df3de1df5529d03ffccab07b14337df
---
M src/epdg_diameter_swx.erl
1 file changed, 44 insertions(+), 2 deletions(-)
Approvals:
Jenkins Builder: Verified
pespin: Looks good to me, approved
diff --git a/src/epdg_diameter_swx.erl b/src/epdg_diameter_swx.erl
index 6ae0c1f..9909446 100644
--- a/src/epdg_diameter_swx.erl
+++ b/src/epdg_diameter_swx.erl
@@ -104,6 +104,7 @@
gen_server:start_link({local, ?SERVER}, ?MODULE, [], []).
peer_down(API, SvcName, {PeerRef, _} = Peer) ->
+ % fixme: why do we still have ets here?
(catch ets:delete(?MODULE, {API, PeerRef})),
gen_server:cast(?SERVER, {peer_down, SvcName, Peer}),
ok.
@@ -131,7 +132,32 @@
gen_server:call(?SERVER,
{sar, {IMSI, Type, APN}}).
+result_code_success(2001) -> ok;
+result_code_success(2002) -> ok;
+result_code_success(_) -> invalid_result_code.
+
% TODO Sync failure
+
+-define (MAA_Errors(), #{
+ invalid_result_code => #{error => "Unknown result code"},
+ invalid_exp_result => #{error => "Unknown experimental result
code"},
+ unknown_user => #{error => "User is not known by HSS"}
+}).
+
+-spec parse_mar(#'MAA'{}) -> map().
+parse_mar(#'MAA'{'Result-Code' = [ResultCode]} = Maa) ->
+ Success = result_code_success(ResultCode),
+ {Success, ResultCode};
+
+parse_mar(#'MAA'{'Experimental-Result' = [#{'Vendor-Code' :=
?VENDOR_ID_3GPP, 'ExpResultCode' := 5001}]} = Maa) ->
+ {unknown_user, 5001};
+parse_mar(#'MAA'{'Experimental-Result' = [#{'Vendor-Code' :=
?VENDOR_ID_3GPP, 'ExpResultCode' := ResultCode}]} = Maa) ->
+ {invalid_exp_result, ResultCode};
+parse_mar(Maa) ->
+ {unknown_err, []}.
+
+% parse_mar(#'MAA'{'Experimental-Result-Code' = [ResultCode] = MAA)
->
+
handle_call({mar, {IMSI, NumAuthItems, AuthScheme, RAT, CKey, IntegrityKey}}, _From,
State) ->
SessionId = diameter:session_id(application:get_env(?SERVER, origin_host,
"aaa.example.org")),
MAR = #'MAR'{'Vendor-Specific-Application-Id' =
#'Vendor-Specific-Application-Id'{
@@ -168,8 +194,12 @@
},
Ret = diameter:call(?SVC_NAME, ?APP_ALIAS, SAR, []),
case Ret of
- {ok, SAA} ->
- {reply, {ok, SAA}, State};
+ {ok, Maa} ->
+ SuccessCode = parse_mar(Maa),
+ case SuccessCode of
+ {ok, _} -> {reply, {ok, Maa}, State};
+ {Err, Info} -> {reply, {error, {Err, Info, Maa}}, State}
+ end;
{error, Err} ->
lager:error("Error: ~w~n", [Err]),
{reply, {error, Err}, State}
--
To view, visit
https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/34730?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: I8d2c99f12df3de1df5529d03ffccab07b14337df
Gerrit-Change-Number: 34730
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
Gerrit-MessageType: merged