laforge has submitted this change. (
https://gerrit.osmocom.org/c/onomondo-ipa/+/43062?usp=email )
(
10 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the submitted
one.
)Change subject: V1.2: Change of IpaEuiccDataRequest and results
......................................................................
V1.2: Change of IpaEuiccDataRequest and results
Section 2.11.1.2
* Changed tags, added tag
* Two search criteria: searchCriteriaNotification,
searchCriteriaEuiccPackageResult
Both search criteria of the eUICC Data Request are converted into search
criteria of Retrieve Notifications List Request.
The tags have not only changed, but also a new tag for requesting eUICC
Package Results has been added. This request cannot be emulated,
because a non IoT eUICC does not store these results. In case of
emulation, the eUICC Result Data includes an empty eUICC Package Result
List.
Related: SYS#8101
Change-Id: I411111c71787ce27615b6b66fc8b19488883d15b
---
M asn1/SGP32Definitions.asn
M src/ipa/libasn/IpaEuiccDataRequest.c
M src/ipa/libasn/IpaEuiccDataRequest.h
M src/ipa/libipa/es10b_retr_notif_from_lst.c
M src/ipa/libipa/es10b_retr_notif_from_lst.h
M src/ipa/libipa/proc_euicc_data_req.c
6 files changed, 203 insertions(+), 82 deletions(-)
Approvals:
Jenkins Builder: Verified
dexter: Looks good to me, approved
diff --git a/asn1/SGP32Definitions.asn b/asn1/SGP32Definitions.asn
index 786ebe5..6a29c31 100644
--- a/asn1/SGP32Definitions.asn
+++ b/asn1/SGP32Definitions.asn
@@ -117,8 +117,10 @@
euiccCiPKIdentifierToBeUsed OCTET STRING OPTIONAL, -- CI Public Key
Identifier (possibly truncated) supported on the eUICC for signature creation
searchCriteriaNotification [1] CHOICE {
seqNumber [0] INTEGER,
- profileManagementOperation [1] NotificationEvent,
- euiccPackageResults [2] NULL
+ profileManagementOperation [1] NotificationEvent
+ } OPTIONAL,
+ searchCriteriaEuiccPackageResult [2] CHOICE {
+ seqNumber [0] INTEGER
} OPTIONAL,
eimTransactionId [3] TransactionId OPTIONAL -- Tag '83'
}
diff --git a/src/ipa/libasn/IpaEuiccDataRequest.c
b/src/ipa/libasn/IpaEuiccDataRequest.c
index fa1924d..9e2852d 100644
--- a/src/ipa/libasn/IpaEuiccDataRequest.c
+++ b/src/ipa/libasn/IpaEuiccDataRequest.c
@@ -11,7 +11,15 @@
{ 0, 0 },
-1};
static asn_per_constraints_t asn_PER_type_searchCriteriaNotification_constr_4
CC_NOTUSED = {
- { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...)
*/,
+ { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...)
*/,
+ { APC_UNCONSTRAINED, -1, -1, 0, 0 },
+ 0, 0 /* No PER value map */
+};
+static asn_oer_constraints_t
asn_OER_type_searchCriteriaEuiccPackageResult_constr_8 CC_NOTUSED = {
+ { 0, 0 },
+ -1};
+static asn_per_constraints_t
asn_PER_type_searchCriteriaEuiccPackageResult_constr_8 CC_NOTUSED = {
+ { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...)
*/,
{ APC_UNCONSTRAINED, -1, -1, 0, 0 },
0, 0 /* No PER value map */
};
@@ -34,20 +42,10 @@
0, 0, /* No default value */
"profileManagementOperation"
},
- { ATF_NOFLAGS, 0, offsetof(struct
IpaEuiccDataRequest__searchCriteriaNotification, choice.euiccPackageResults),
- (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
- -1, /* IMPLICIT tag at current level */
- &asn_DEF_NULL,
- 0,
- { 0, 0, 0 },
- 0, 0, /* No default value */
- "euiccPackageResults"
- },
};
static const asn_TYPE_tag2member_t
asn_MAP_searchCriteriaNotification_tag2el_4[] = {
{ (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* seqNumber */
- { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /*
profileManagementOperation */
- { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* euiccPackageResults */
+ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /*
profileManagementOperation */
};
static asn_CHOICE_specifics_t asn_SPC_searchCriteriaNotification_specs_4 = {
sizeof(struct IpaEuiccDataRequest__searchCriteriaNotification),
@@ -55,9 +53,9 @@
offsetof(struct IpaEuiccDataRequest__searchCriteriaNotification,
present),
sizeof(((struct IpaEuiccDataRequest__searchCriteriaNotification
*)0)->present),
asn_MAP_searchCriteriaNotification_tag2el_4,
- 3, /* Count of tags in the map */
+ 2, /* Count of tags in the map */
0, 0,
- 3 /* Extensions start */
+ 2 /* Extensions start */
};
static /* Use -fall-defs-global to expose */
asn_TYPE_descriptor_t asn_DEF_searchCriteriaNotification_4 = {
@@ -70,10 +68,49 @@
0, /* No tags (count) */
{ &asn_OER_type_searchCriteriaNotification_constr_4,
&asn_PER_type_searchCriteriaNotification_constr_4, CHOICE_constraint },
asn_MBR_searchCriteriaNotification_4,
- 3, /* Elements count */
+ 2, /* Elements count */
&asn_SPC_searchCriteriaNotification_specs_4 /* Additional specs */
};
+static asn_TYPE_member_t asn_MBR_searchCriteriaEuiccPackageResult_8[] = {
+ { ATF_NOFLAGS, 0, offsetof(struct
IpaEuiccDataRequest__searchCriteriaEuiccPackageResult, choice.seqNumber),
+ (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+ -1, /* IMPLICIT tag at current level */
+ &asn_DEF_NativeInteger,
+ 0,
+ { 0, 0, 0 },
+ 0, 0, /* No default value */
+ "seqNumber"
+ },
+};
+static const asn_TYPE_tag2member_t
asn_MAP_searchCriteriaEuiccPackageResult_tag2el_8[] = {
+ { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* seqNumber */
+};
+static asn_CHOICE_specifics_t asn_SPC_searchCriteriaEuiccPackageResult_specs_8
= {
+ sizeof(struct IpaEuiccDataRequest__searchCriteriaEuiccPackageResult),
+ offsetof(struct IpaEuiccDataRequest__searchCriteriaEuiccPackageResult,
_asn_ctx),
+ offsetof(struct IpaEuiccDataRequest__searchCriteriaEuiccPackageResult,
present),
+ sizeof(((struct IpaEuiccDataRequest__searchCriteriaEuiccPackageResult
*)0)->present),
+ asn_MAP_searchCriteriaEuiccPackageResult_tag2el_8,
+ 1, /* Count of tags in the map */
+ 0, 0,
+ 1 /* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_searchCriteriaEuiccPackageResult_8 = {
+ "searchCriteriaEuiccPackageResult",
+ "searchCriteriaEuiccPackageResult",
+ &asn_OP_CHOICE,
+ 0, /* No effective tags (pointer) */
+ 0, /* No effective tags (count) */
+ 0, /* No tags (pointer) */
+ 0, /* No tags (count) */
+ { &asn_OER_type_searchCriteriaEuiccPackageResult_constr_8,
&asn_PER_type_searchCriteriaEuiccPackageResult_constr_8, CHOICE_constraint },
+ asn_MBR_searchCriteriaEuiccPackageResult_8,
+ 1, /* Elements count */
+ &asn_SPC_searchCriteriaEuiccPackageResult_specs_8 /* Additional
specs */
+};
+
asn_TYPE_member_t asn_MBR_IpaEuiccDataRequest_1[] = {
{ ATF_NOFLAGS, 0, offsetof(struct IpaEuiccDataRequest, tagList),
(ASN_TAG_CLASS_APPLICATION | (28 << 2)),
@@ -84,7 +121,7 @@
0, 0, /* No default value */
"tagList"
},
- { ATF_POINTER, 3, offsetof(struct IpaEuiccDataRequest,
euiccCiPKIdentifierToBeUsed),
+ { ATF_POINTER, 4, offsetof(struct IpaEuiccDataRequest,
euiccCiPKIdentifierToBeUsed),
(ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
0,
&asn_DEF_OCTET_STRING,
@@ -93,7 +130,7 @@
0, 0, /* No default value */
"euiccCiPKIdentifierToBeUsed"
},
- { ATF_POINTER, 2, offsetof(struct IpaEuiccDataRequest,
searchCriteriaNotification),
+ { ATF_POINTER, 3, offsetof(struct IpaEuiccDataRequest,
searchCriteriaNotification),
(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+1, /* EXPLICIT tag at current level */
&asn_DEF_searchCriteriaNotification_4,
@@ -102,6 +139,15 @@
0, 0, /* No default value */
"searchCriteriaNotification"
},
+ { ATF_POINTER, 2, offsetof(struct IpaEuiccDataRequest,
searchCriteriaEuiccPackageResult),
+ (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+ +1, /* EXPLICIT tag at current level */
+ &asn_DEF_searchCriteriaEuiccPackageResult_8,
+ 0,
+ { 0, 0, 0 },
+ 0, 0, /* No default value */
+ "searchCriteriaEuiccPackageResult"
+ },
{ ATF_POINTER, 1, offsetof(struct IpaEuiccDataRequest,
eimTransactionId),
(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
-1, /* IMPLICIT tag at current level */
@@ -112,7 +158,7 @@
"eimTransactionId"
},
};
-static const int asn_MAP_IpaEuiccDataRequest_oms_1[] = { 1, 2, 3 };
+static const int asn_MAP_IpaEuiccDataRequest_oms_1[] = { 1, 2, 3, 4 };
static const ber_tlv_tag_t asn_DEF_IpaEuiccDataRequest_tags_1[] = {
(ASN_TAG_CLASS_CONTEXT | (82 << 2)),
(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
@@ -121,16 +167,17 @@
{ (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 1, 0, 0 }, /*
euiccCiPKIdentifierToBeUsed */
{ (ASN_TAG_CLASS_APPLICATION | (28 << 2)), 0, 0, 0 }, /* tagList */
{ (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /*
searchCriteriaNotification */
- { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* eimTransactionId */
+ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 3, 0, 0 }, /*
searchCriteriaEuiccPackageResult */
+ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 4, 0, 0 } /* eimTransactionId */
};
asn_SEQUENCE_specifics_t asn_SPC_IpaEuiccDataRequest_specs_1 = {
sizeof(struct IpaEuiccDataRequest),
offsetof(struct IpaEuiccDataRequest, _asn_ctx),
asn_MAP_IpaEuiccDataRequest_tag2el_1,
- 4, /* Count of tags in the map */
+ 5, /* Count of tags in the map */
asn_MAP_IpaEuiccDataRequest_oms_1, /* Optional members */
- 3, 0, /* Root/Additions */
- 4, /* First extension addition */
+ 4, 0, /* Root/Additions */
+ 5, /* First extension addition */
};
asn_TYPE_descriptor_t asn_DEF_IpaEuiccDataRequest = {
"IpaEuiccDataRequest",
@@ -144,7 +191,7 @@
/sizeof(asn_DEF_IpaEuiccDataRequest_tags_1[0]), /* 2 */
{ 0, 0, SEQUENCE_constraint },
asn_MBR_IpaEuiccDataRequest_1,
- 4, /* Elements count */
+ 5, /* Elements count */
&asn_SPC_IpaEuiccDataRequest_specs_1 /* Additional specs */
};
diff --git a/src/ipa/libasn/IpaEuiccDataRequest.h
b/src/ipa/libasn/IpaEuiccDataRequest.h
index c4f0a87..b3f0347 100644
--- a/src/ipa/libasn/IpaEuiccDataRequest.h
+++ b/src/ipa/libasn/IpaEuiccDataRequest.h
@@ -16,7 +16,6 @@
#include "TransactionId.h"
#include <NativeInteger.h>
#include "NotificationEvent.h"
-#include <NULL.h>
#include <constr_CHOICE.h>
#include <constr_SEQUENCE.h>
@@ -28,11 +27,16 @@
typedef enum IpaEuiccDataRequest__searchCriteriaNotification_PR {
IpaEuiccDataRequest__searchCriteriaNotification_PR_NOTHING, /* No
components present */
IpaEuiccDataRequest__searchCriteriaNotification_PR_seqNumber,
-
IpaEuiccDataRequest__searchCriteriaNotification_PR_profileManagementOperation,
- IpaEuiccDataRequest__searchCriteriaNotification_PR_euiccPackageResults
+
IpaEuiccDataRequest__searchCriteriaNotification_PR_profileManagementOperation
/* Extensions may appear below */
} IpaEuiccDataRequest__searchCriteriaNotification_PR;
+typedef enum IpaEuiccDataRequest__searchCriteriaEuiccPackageResult_PR {
+ IpaEuiccDataRequest__searchCriteriaEuiccPackageResult_PR_NOTHING,
/* No components present */
+ IpaEuiccDataRequest__searchCriteriaEuiccPackageResult_PR_seqNumber
+ /* Extensions may appear below */
+
+} IpaEuiccDataRequest__searchCriteriaEuiccPackageResult_PR;
/* IpaEuiccDataRequest */
typedef struct IpaEuiccDataRequest {
@@ -43,7 +47,6 @@
union IpaEuiccDataRequest__searchCriteriaNotification_u {
long seqNumber;
NotificationEvent_t profileManagementOperation;
- NULL_t euiccPackageResults;
/*
* This type is extensible,
* possible extensions are below.
@@ -53,6 +56,19 @@
/* Context for parsing across buffer boundaries */
asn_struct_ctx_t _asn_ctx;
} *searchCriteriaNotification;
+ struct IpaEuiccDataRequest__searchCriteriaEuiccPackageResult {
+ IpaEuiccDataRequest__searchCriteriaEuiccPackageResult_PR
present;
+ union IpaEuiccDataRequest__searchCriteriaEuiccPackageResult_u {
+ long seqNumber;
+ /*
+ * This type is extensible,
+ * possible extensions are below.
+ */
+ } choice;
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+ } *searchCriteriaEuiccPackageResult;
TransactionId_t *eimTransactionId /* OPTIONAL */;
/*
* This type is extensible,
@@ -66,7 +82,7 @@
/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_IpaEuiccDataRequest;
extern asn_SEQUENCE_specifics_t asn_SPC_IpaEuiccDataRequest_specs_1;
-extern asn_TYPE_member_t asn_MBR_IpaEuiccDataRequest_1[4];
+extern asn_TYPE_member_t asn_MBR_IpaEuiccDataRequest_1[5];
#ifdef __cplusplus
}
diff --git a/src/ipa/libipa/es10b_retr_notif_from_lst.c
b/src/ipa/libipa/es10b_retr_notif_from_lst.c
index bd90b3a..ae2cc8e 100644
--- a/src/ipa/libipa/es10b_retr_notif_from_lst.c
+++ b/src/ipa/libipa/es10b_retr_notif_from_lst.c
@@ -66,6 +66,12 @@
}
}
+static void empty_euicc_package_result_list(struct
ipa_es10b_retr_notif_from_lst_res *res)
+{
+ res->sgp32_res = IPA_ALLOC_ZERO(struct
SGP32_RetrieveNotificationsListResponse);
+ res->sgp32_res->present =
SGP32_RetrieveNotificationsListResponse_PR_euiccPackageResultList;
+}
+
/*! Free a converted notificationList (RetrieveNotificationsListResponse). */
void free_converted_notification_list(PendingNotificationList_t *lst)
{
@@ -155,31 +161,32 @@
struct RetrieveNotificationsListRequest__searchCriteria search_criteria
= { 0 };
struct ipa_buf *es10b_req = NULL;
- if (req->dr_search_criteria) {
- /* Convert from foreigen searchCriteria (see comment in header
file) */
- switch (req->dr_search_criteria->present) {
- case
IpaEuiccDataRequest__searchCriteriaNotification_PR_seqNumber:
- search_criteria.present =
RetrieveNotificationsListRequest__searchCriteria_PR_seqNumber;
- search_criteria.choice.seqNumber =
req->dr_search_criteria->choice.seqNumber;
- break;
- case
IpaEuiccDataRequest__searchCriteriaNotification_PR_profileManagementOperation:
- search_criteria.present =
-
RetrieveNotificationsListRequest__searchCriteria_PR_profileManagementOperation;
- search_criteria.choice.profileManagementOperation =
-
req->dr_search_criteria->choice.profileManagementOperation;
- break;
- case
IpaEuiccDataRequest__searchCriteriaNotification_PR_euiccPackageResults:
- IPA_LOGP_ES10X("RetrieveNotificationsList", LERROR,
- "unsupported euiccPackageResults
searchCriteria in IpaEuiccDataRequest!\n");
- search_criteria.present =
RetrieveNotificationsListRequest__searchCriteria_PR_NOTHING;
- break;
- default:
- IPA_LOGP_ES10X("RetrieveNotificationsList", LERROR,
- "empty searchCriteria in
IpaEuiccDataRequest!\n");
+ switch (req->dr_tag) {
+ case 0xA0:
+ if (!req->dr_search_criteria_notification) {
+ IPA_LOGP_ES10X("RetrieveNotificationsList", LDEBUG,
+ "no searchCriteria in
IpaEuiccDataRequest, requesting all notifiactions.\n");
search_criteria.present =
RetrieveNotificationsListRequest__searchCriteria_PR_NOTHING;
break;
}
- } else {
+ switch (req->dr_search_criteria_notification->present) {
+ case
IpaEuiccDataRequest__searchCriteriaNotification_PR_seqNumber:
+ search_criteria.present =
RetrieveNotificationsListRequest__searchCriteria_PR_seqNumber;
+ search_criteria.choice.seqNumber =
req->search_criteria.choice.seqNumber;
+ break;
+ case
IpaEuiccDataRequest__searchCriteriaNotification_PR_profileManagementOperation:
+ search_criteria.present =
RetrieveNotificationsListRequest__searchCriteria_PR_profileManagementOperation;
+ search_criteria.choice.profileManagementOperation =
+
req->search_criteria.choice.profileManagementOperation;
+ break;
+ default:
+ IPA_LOGP_ES10X("RetrieveNotificationsList", LDEBUG,
+ "empty searchCriteria in
IpaEuiccDataRequest, requesting all notifiactions.\n");
+ search_criteria.present =
RetrieveNotificationsListRequest__searchCriteria_PR_NOTHING;
+ break;
+ }
+ break;
+ default:
/* Use native search_criteria as provided by caller */
search_criteria.present = req->search_criteria.present;
switch (req->search_criteria.present) {
@@ -215,32 +222,55 @@
struct SGP32_RetrieveNotificationsListRequest__searchCriteria
search_criteria = { 0 };
struct ipa_buf *es10b_req = NULL;
- if (req->dr_search_criteria) {
- /* Convert from foreigen searchCriteria (see comment in header
file) */
- switch (req->dr_search_criteria->present) {
+ switch (req->dr_tag) {
+ case 0xA0:
+ if (!req->dr_search_criteria_notification) {
+ IPA_LOGP_ES10X("RetrieveNotificationsList", LDEBUG,
+ "no searchCriteria in
IpaEuiccDataRequest, requesting all notifiactions.\n");
+ search_criteria.present =
SGP32_RetrieveNotificationsListRequest__searchCriteria_PR_NOTHING;
+ break;
+ }
+ switch (req->dr_search_criteria_notification->present) {
case
IpaEuiccDataRequest__searchCriteriaNotification_PR_seqNumber:
search_criteria.present =
SGP32_RetrieveNotificationsListRequest__searchCriteria_PR_seqNumber;
- search_criteria.choice.seqNumber =
req->dr_search_criteria->choice.seqNumber;
+ search_criteria.choice.seqNumber =
req->dr_search_criteria_notification->choice.seqNumber;
break;
case
IpaEuiccDataRequest__searchCriteriaNotification_PR_profileManagementOperation:
search_criteria.present =
SGP32_RetrieveNotificationsListRequest__searchCriteria_PR_profileManagementOperation;
search_criteria.choice.profileManagementOperation =
-
req->dr_search_criteria->choice.profileManagementOperation;
- break;
- case
IpaEuiccDataRequest__searchCriteriaNotification_PR_euiccPackageResults:
- search_criteria.present =
-
SGP32_RetrieveNotificationsListRequest__searchCriteria_PR_euiccPackageResults;
- search_criteria.choice.euiccPackageResults =
- req->dr_search_criteria->choice.euiccPackageResults;
+
req->dr_search_criteria_notification->choice.profileManagementOperation;
break;
default:
- IPA_LOGP_ES10X("RetrieveNotificationsList", LERROR,
- "empty searchCriteria in
IpaEuiccDataRequest!\n");
- search_criteria.present =
RetrieveNotificationsListRequest__searchCriteria_PR_NOTHING;
+ IPA_LOGP_ES10X("RetrieveNotificationsList", LDEBUG,
+ "empty searchCriteria in
IpaEuiccDataRequest, requesting all notifiactions.\n");
+ search_criteria.present =
+
SGP32_RetrieveNotificationsListRequest__searchCriteria_PR_NOTHING;
break;
}
- } else {
+ break;
+ case 0xA2:
+ if (!req->dr_search_criteria_epr) {
+ IPA_LOGP_ES10X("RetrieveNotificationsList", LDEBUG,
+ "no searchCriteria in
IpaEuiccDataRequest, requesting all eUICC Package Results.\n");
+ search_criteria.present =
+
SGP32_RetrieveNotificationsListRequest__searchCriteria_PR_euiccPackageResults;
+ break;
+ }
+ switch (req->dr_search_criteria_epr->present) {
+ case
IpaEuiccDataRequest__searchCriteriaEuiccPackageResult_PR_seqNumber:
+ search_criteria.present =
+
SGP32_RetrieveNotificationsListRequest__searchCriteria_PR_seqNumber;
+ search_criteria.choice.seqNumber =
+
req->dr_search_criteria_notification->choice.seqNumber;
+ break;
+ default:
+ search_criteria.present =
+
SGP32_RetrieveNotificationsListRequest__searchCriteria_PR_euiccPackageResults;
+ break;
+ }
+ break;
+ default:
/* Use native search_criteria as provided by caller */
search_criteria = req->search_criteria;
}
@@ -265,10 +295,17 @@
struct ipa_es10b_retr_notif_from_lst_res *res = IPA_ALLOC_ZERO(struct
ipa_es10b_retr_notif_from_lst_res);
int rc;
- if (ctx->cfg->iot_euicc_emu_enabled)
+ if (ctx->cfg->iot_euicc_emu_enabled) {
+ if (req->dr_tag == 0xA2) {
+ IPA_LOGP_ES10X("RetrieveNotificationsList", LINFO,
+ "IoT eUICC emulation active, provide
empty euiccPackageResult list.\n");
+ empty_euicc_package_result_list(res);
+ return res;
+ }
es10b_req = enc_retr_notif_from_lst_req(req);
- else
+ } else {
es10b_req = enc_retr_notif_from_lst_req_sgp32(req);
+ }
if (!es10b_req) {
IPA_LOGP_ES10X("RetrieveNotificationsList", LERROR, "unable to
encode ES10b request\n");
goto error;
diff --git a/src/ipa/libipa/es10b_retr_notif_from_lst.h
b/src/ipa/libipa/es10b_retr_notif_from_lst.h
index 2773356..33aaf5d 100644
--- a/src/ipa/libipa/es10b_retr_notif_from_lst.h
+++ b/src/ipa/libipa/es10b_retr_notif_from_lst.h
@@ -19,7 +19,9 @@
/* When the caller has access to a search searchCriteria that
originates from an IpaEuiccDataRequest, the
* pointer to it may be passed here. The function will then
atomatically convert the searchCriteria into
* the native RetrieveNotificationsListRequest format. */
- const struct IpaEuiccDataRequest__searchCriteriaNotification
*dr_search_criteria;
+ const struct IpaEuiccDataRequest__searchCriteriaNotification
*dr_search_criteria_notification;
+ const struct IpaEuiccDataRequest__searchCriteriaEuiccPackageResult
*dr_search_criteria_epr;
+ uint16_t dr_tag;
};
struct ipa_es10b_retr_notif_from_lst_res {
diff --git a/src/ipa/libipa/proc_euicc_data_req.c
b/src/ipa/libipa/proc_euicc_data_req.c
index 41cd592..d099694 100644
--- a/src/ipa/libipa/proc_euicc_data_req.c
+++ b/src/ipa/libipa/proc_euicc_data_req.c
@@ -105,7 +105,8 @@
struct ipa_es10b_get_certs_req get_certs_req = { 0 };
struct ipa_es10b_get_certs_res *get_certs_res = NULL;
struct ipa_es10b_retr_notif_from_lst_req retr_notif_from_lst_req = { 0
};
- struct ipa_es10b_retr_notif_from_lst_res *retr_notif_from_lst_res =
NULL;
+ struct ipa_es10b_retr_notif_from_lst_res *retr_notif_from_lst_res_a0 =
NULL;
+ struct ipa_es10b_retr_notif_from_lst_res *retr_notif_from_lst_res_a2 =
NULL;
struct ipa_esipa_prvde_eim_pkg_rslt_req prvde_eim_pkg_rslt_req = { 0 };
struct ipa_esipa_prvde_eim_pkg_rslt_res *prvde_eim_pkg_rslt_res = NULL;
@@ -114,7 +115,7 @@
/* Collect requested data */
tag_list = IPA_BUF_FROM_ASN(&pars->ipa_euicc_data_request->tagList);
- if (ipa_tag_in_taglist(0x80, tag_list)) {
+ if (ipa_tag_in_taglist(0x81, tag_list)) {
IPA_LOGP(SIPA, LINFO, "eIM asks for Default SM-DP+ address\n");
euicc_cfg_addr = ipa_es10a_get_euicc_cfg_addr(ctx);
if (euicc_cfg_addr && euicc_cfg_addr->res->defaultDpAddress)
@@ -180,7 +181,7 @@
}
}
- if (ipa_tag_in_taglist(0x88, tag_list)) {
+ if (ipa_tag_in_taglist(0xA8, tag_list)) {
IPA_LOGP(SIPA, LINFO, "eIM asks for IPA Capabilities\n");
ipa_euicc_data_response.choice.ipaEuiccData.ipaCapabilities =
make_ipa_capabilties();
} else {
@@ -194,15 +195,29 @@
ipa_euicc_data_response.choice.ipaEuiccData.deviceInfo = NULL;
}
- if (ipa_tag_in_taglist(0xBF2B, tag_list)) {
- IPA_LOGP(SIPA, LINFO, "eIM asks for List of Notifications
and/or eUICC Package Results\n");
+ if (ipa_tag_in_taglist(0xA0, tag_list)) {
+ IPA_LOGP(SIPA, LINFO, "eIM asks for List of Notifications\n");
- retr_notif_from_lst_req.dr_search_criteria =
pars->ipa_euicc_data_request->searchCriteriaNotification;
- retr_notif_from_lst_res = ipa_es10b_retr_notif_from_lst(ctx,
&retr_notif_from_lst_req);
- if (retr_notif_from_lst_res &&
retr_notif_from_lst_res->sgp32_res &&
- retr_notif_from_lst_res->sgp32_res->present ==
SGP32_RetrieveNotificationsListResponse_PR_notificationList) {
+ retr_notif_from_lst_req.dr_search_criteria_notification =
pars->ipa_euicc_data_request->searchCriteriaNotification;
+ retr_notif_from_lst_req.dr_tag = 0xA0;
+ retr_notif_from_lst_res_a0 = ipa_es10b_retr_notif_from_lst(ctx,
&retr_notif_from_lst_req);
+ if (retr_notif_from_lst_res_a0 &&
retr_notif_from_lst_res_a0->sgp32_res &&
+ retr_notif_from_lst_res_a0->sgp32_res->present ==
SGP32_RetrieveNotificationsListResponse_PR_notificationList) {
ipa_euicc_data_response.choice.ipaEuiccData.notificationsList =
- (struct PendingNotificationList
*)&retr_notif_from_lst_res->sgp32_res->choice.notificationList;
+
&retr_notif_from_lst_res_a0->sgp32_res->choice.notificationList;
+ }
+ }
+
+ if (ipa_tag_in_taglist(0xA2, tag_list)) {
+ IPA_LOGP(SIPA, LINFO, "eIM asks for eUICC Package Results\n");
+
+ retr_notif_from_lst_req.dr_search_criteria_epr =
pars->ipa_euicc_data_request->searchCriteriaEuiccPackageResult;
+ retr_notif_from_lst_req.dr_tag = 0xA2;
+ retr_notif_from_lst_res_a2 = ipa_es10b_retr_notif_from_lst(ctx,
&retr_notif_from_lst_req);
+ if (retr_notif_from_lst_res_a2 &&
retr_notif_from_lst_res_a2->sgp32_res &&
+ retr_notif_from_lst_res_a2->sgp32_res->present ==
SGP32_RetrieveNotificationsListResponse_PR_euiccPackageResultList) {
+
ipa_euicc_data_response.choice.ipaEuiccData.euiccPackageResultList =
+
&retr_notif_from_lst_res_a2->sgp32_res->choice.euiccPackageResultList;
}
}
@@ -226,7 +241,8 @@
ipa_es10b_get_euicc_info_free(euicc_info_2);
ipa_es10b_get_eim_cfg_data_free(eim_cfg_data);
ipa_es10b_get_certs_res_free(get_certs_res);
- ipa_es10b_retr_notif_from_lst_res_free(retr_notif_from_lst_res);
+ ipa_es10b_retr_notif_from_lst_res_free(retr_notif_from_lst_res_a0);
+ ipa_es10b_retr_notif_from_lst_res_free(retr_notif_from_lst_res_a2);
ipa_esipa_prvde_eim_pkg_rslt_free(prvde_eim_pkg_rslt_res);
return 0;
error:
@@ -236,7 +252,8 @@
ipa_es10b_get_euicc_info_free(euicc_info_2);
ipa_es10b_get_eim_cfg_data_free(eim_cfg_data);
ipa_es10b_get_certs_res_free(get_certs_res);
- ipa_es10b_retr_notif_from_lst_res_free(retr_notif_from_lst_res);
+ ipa_es10b_retr_notif_from_lst_res_free(retr_notif_from_lst_res_a0);
+ ipa_es10b_retr_notif_from_lst_res_free(retr_notif_from_lst_res_a2);
ipa_esipa_prvde_eim_pkg_rslt_free(prvde_eim_pkg_rslt_res);
IPA_LOGP(SIPA, LINFO, "IPA get EUICC data failed!\n");
return -EINVAL;
--
To view, visit https://gerrit.osmocom.org/c/onomondo-ipa/+/43062?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged
Gerrit-Project: onomondo-ipa
Gerrit-Branch: master
Gerrit-Change-Id: I411111c71787ce27615b6b66fc8b19488883d15b
Gerrit-Change-Number: 43062
Gerrit-PatchSet: 13
Gerrit-Owner: jolly <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: dexter <[email protected]>
Gerrit-Reviewer: laforge <[email protected]>