theenbyperor has uploaded this change for review.
translate AUTS field in UTRAN as well as E-UTRAN requests
Change-Id: Ie3ecfc668cff50ebdbc190e8384e891e05e7ad27
---
M src/server_cb.erl
1 file changed, 38 insertions(+), 15 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/erlang/osmo_dia2gsup refs/changes/96/43096/1
diff --git a/src/server_cb.erl b/src/server_cb.erl
index f51bb5c..851f396 100644
--- a/src/server_cb.erl
+++ b/src/server_cb.erl
@@ -74,13 +74,13 @@
#'E-UTRAN-Vector'{'Item-Number'=Idx, 'RAND'=Rand, 'XRES'=Res , 'AUTN'=Autn,
'KASME'=compute_kasme(Ck, Ik, Vplmn, Autn)}.
--spec gsup_tuple2dia_utran('GSUPAuthTuple'()) -> #'UTRAN-Vector'{}.
-gsup_tuple2dia_utran(#{autn:=Autn, ck:=Ck, ik:=Ik, rand:=Rand, res:=Res}) ->
- #'UTRAN-Vector'{'RAND'=Rand, 'XRES'=Res, 'AUTN'=Autn, 'Confidentiality-Key'=Ck, 'Integrity-Key'=Ik}.
+-spec gsup_tuple2dia_utran('GSUPAuthTuple'(), integer()) -> #'UTRAN-Vector'{}.
+gsup_tuple2dia_utran(#{autn:=Autn, ck:=Ck, ik:=Ik, rand:=Rand, res:=Res}, Idx) ->
+ #'UTRAN-Vector'{'Item-Number'=Idx, 'RAND'=Rand, 'XRES'=Res, 'AUTN'=Autn, 'Confidentiality-Key'=Ck, 'Integrity-Key'=Ik}.
--spec gsup_tuple2dia_geran('GSUPAuthTuple'()) -> #'GERAN-Vector'{}.
-gsup_tuple2dia_geran(#{rand:=Rand, sres:=Sres, kc:=Kc}) ->
- #'GERAN-Vector'{'RAND'=Rand, 'SRES'=Sres, 'Kc'=Kc}.
+-spec gsup_tuple2dia_geran('GSUPAuthTuple'(), integer()) -> #'GERAN-Vector'{}.
+gsup_tuple2dia_geran(#{rand:=Rand, sres:=Sres, kc:=Kc}, Idx) ->
+ #'GERAN-Vector'{'Item-Number'=Idx, 'RAND'=Rand, 'SRES'=Sres, 'Kc'=Kc}.
-spec gsup_tuples2dia_eutran(['GSUPAuthTuple'()], binary()) -> [#'E-UTRAN-Vector'{}].
gsup_tuples2dia_eutran(List, Vplmn) -> gsup_tuples2dia_eutran(List, Vplmn, [], 1).
@@ -89,6 +89,20 @@
Dia = gsup_tuple2dia_eutran(Head, Vplmn, Ctr),
gsup_tuples2dia_eutran(Tail, Vplmn, [Dia|Out], Ctr+1).
+-spec gsup_tuples2dia_utran(['GSUPAuthTuple'()]) -> [#'UTRAN-Vector'{}].
+gsup_tuples2dia_utran(List) -> gsup_tuples2dia_utran(List, [], 1).
+gsup_tuples2dia_utran([], Out, _Idx) -> Out;
+gsup_tuples2dia_utran([Head|Tail], Out, Ctr) ->
+ Dia = gsup_tuple2dia_utran(Head, Ctr),
+ gsup_tuples2dia_utran(Tail, [Dia|Out], Ctr+1).
+
+-spec gsup_tuples2dia_geran(['GSUPAuthTuple'()]) -> [#'GERAN-Vector'{}].
+gsup_tuples2dia_geran(List) -> gsup_tuples2dia_geran(List, [], 1).
+gsup_tuples2dia_geran([], Out, _Idx) -> Out;
+gsup_tuples2dia_geran([Head|Tail], Out, Ctr) ->
+ Dia = gsup_tuple2dia_geran(Head, Ctr),
+ gsup_tuples2dia_geran(Tail, [Dia|Out], Ctr+1).
+
-type int_or_false() :: false | integer().
-spec gsup_tuples2dia(['GSUPAuthTuple'()], binary(), int_or_false(), int_or_false(), int_or_false()) -> #'Authentication-Info'{}.
gsup_tuples2dia(Tuples, Vplmn, NumEutran, NumUtran, NumGeran) ->
@@ -100,12 +114,12 @@
case NumUtran of
false -> UtranVecs = [];
0 -> UtranVecs = [];
- _ -> UtranVecs = lists:map(fun gsup_tuple2dia_utran/1, lists:sublist(Tuples,NumUtran))
+ _ -> UtranVecs = gsup_tuples2dia_utran(lists:sublist(Tuples,NumUtran))
end,
case NumGeran of
false -> GeranVecs = [];
0 -> GeranVecs = [];
- _ -> GeranVecs = lists:map(fun gsup_tuple2dia_geran/1, lists:sublist(Tuples,NumGeran))
+ _ -> GeranVecs = gsup_tuples2dia_geran(lists:sublist(Tuples,NumGeran))
end,
#'Authentication-Info'{'E-UTRAN-Vector'=EutranVecs, 'UTRAN-Vector'=UtranVecs,
'GERAN-Vector'=GeranVecs}.
@@ -251,16 +265,25 @@
% construct GSUP request to HLR and transceive it
GsupTx1 = #{message_type => send_auth_info_req, imsi => list_to_binary(UserName),
supported_rat_types => [rat_eutran_sgs], current_rat_type => rat_eutran_sgs},
- ResyncInfo = req_resynchronization_info(ReqEU),
- case ResyncInfo of
+ ResyncInfoEU = req_resynchronization_info(ReqEU),
+ ResyncInfoUG = req_resynchronization_info(ReqUG),
+ case ResyncInfoEU of
false ->
GsupTx2 = #{};
- ValidResyncInfo ->
- lager:info("ResyncInfo is valid ~p", [ResyncInfo]),
- GsupTx2 = #{rand => binary:part(ValidResyncInfo, 0, 16),
- auts => binary:part(ValidResyncInfo, 16, 14)}
+ ValidResyncInfoEU ->
+ lager:info("ResyncInfo is valid ~p", [ResyncInfoEU]),
+ GsupTx2 = #{rand => binary:part(ValidResyncInfoEU, 0, 16),
+ auts => binary:part(ValidResyncInfoEU, 16, 14)}
end,
- GsupTx = maps:merge(GsupTx1, GsupTx2),
+ case ResyncInfoUG of
+ false ->
+ GsupTx3 = #{};
+ ValidResyncInfoUG ->
+ lager:info("ResyncInfo is valid ~p", [ResyncInfoUG]),
+ GsupTx3 = #{rand => binary:part(ValidResyncInfoUG, 0, 16),
+ auts => binary:part(ValidResyncInfoUG, 16, 14)}
+ end,
+ GsupTx = maps:merge(GsupTx1, maps:merge(GsupTx2, GsupTx3)),
GsupRx = gen_server:call(gsup_client, {transceive_gsup, GsupTx, send_auth_info_res, send_auth_info_err}),
lager:info("GsupRx: ~p~n", [GsupRx]),
% construct DIAMETER AIA response
To view, visit change 43096. To unsubscribe, or for help writing mail filters, visit settings.