dexter has uploaded this change for review. ( https://gerrit.osmocom.org/c/onomondo-eim/+/42948?usp=email )
Change subject: esipa: supply eimTransactionId in profileDownloadTriggerRequest ......................................................................
esipa: supply eimTransactionId in profileDownloadTriggerRequest
When we supply an eimTransactionId in profileDownloadTriggerRequest, the IPAd will echo the same eimTransactionId in the initiateAuthenticationRequestEsipa message. This allows the eIM to distinguish to which transaction (work) the received initiateAuthenticationRequestEsipa belongs. This was not possible before. The eIM had to rely soly on the PID of the sub process which is handling the HTTP connection.
Change-Id: I822d6b2bb51498713739671804b173260e9a28a3 Related: SYS#8100 --- M src/esipa_asn1_handler.erl 1 file changed, 10 insertions(+), 5 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/onomondo-eim refs/changes/48/42948/1
diff --git a/src/esipa_asn1_handler.erl b/src/esipa_asn1_handler.erl index 94389c7..1815499 100644 --- a/src/esipa_asn1_handler.erl +++ b/src/esipa_asn1_handler.erl @@ -19,7 +19,8 @@
%GSMA SGP.32, section 6.3.2.1 handle_asn1(Pid, {initiateAuthenticationRequestEsipa, EsipaReq}) -> - {_, _, WorkState} = mnesia_db_work:pickup(Pid, none), + EimTransactionId = maps:get(eimTransactionId, EsipaReq, none), + {_, _, WorkState} = mnesia_db_work:pickup(Pid, EimTransactionId), BaseUrl = maps:get(smdpAddress, EsipaReq), NewWorkState = WorkState#{smdpAddress => BaseUrl}, mnesia_db_work:update(Pid, NewWorkState), @@ -284,12 +285,16 @@ EsipaResp = case Work of {download, Order} -> - % The first time we see a TransactionId is in the SMDP+ response to the - % initiateAuthenticationRequest - {[{<<"download">>, {[{<<"activationCode">>, ActivationCode}]}}]} = Order, + % The first time we see a transactionId from the SM-DP+ is in the SM-DP+ response to the + % initiateAuthenticationRequest. Until this point we will use an eimTransactionId as a + % temporary identifier. + EimTransactionId = rand:bytes(16), + mnesia_db_work:bind(Pid, EimTransactionId), mnesia_db_work:update(Pid, #{}), + {[{<<"download">>, {[{<<"activationCode">>, ActivationCode}]}}]} = Order, {profileDownloadTriggerRequest, #{ - profileDownloadData => {activationCode, ActivationCode} + profileDownloadData => {activationCode, ActivationCode}, + eimTransactionId => EimTransactionId }}; {psmo, Order} -> EimTransactionId = rand:bytes(16),