jolly has uploaded this change for review.

View Change

WIP: Change of IpaEuiccDataRequest

Section 2.11.1.2

* Changed tags
* Two search criteria: searchCriteriaNotification, searchCriteriaEuiccPackageResult

This patch is totally wrong. The filter cannot work, because it reads
from the wrong choice. If eIM asks for eUICC Package Results, we need to
return that result.

We have to generade the list in convert_notification_list() with the
correct choice. Do we have all the required information?

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, 205 insertions(+), 85 deletions(-)

git pull ssh://gerrit.osmocom.org:29418/onomondo-ipa refs/changes/62/43062/1
diff --git a/asn1/SGP32Definitions.asn b/asn1/SGP32Definitions.asn
index 0e210f0..b6cd8a5 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..9096884 100644
--- a/src/ipa/libipa/es10b_retr_notif_from_lst.c
+++ b/src/ipa/libipa/es10b_retr_notif_from_lst.c
@@ -155,31 +155,34 @@
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");
+ switch (req->dr_tag) {
+ case 0xA0:
+ if (req->dr_search_criteria_notification) {
+ switch (req->dr_search_criteria_notification->present) {
+ case IpaEuiccDataRequest__searchCriteriaNotification_PR_seqNumber:
+ search_criteria.choice.seqNumber = req->search_criteria.choice.seqNumber;
+ break;
+ case IpaEuiccDataRequest__searchCriteriaNotification_PR_profileManagementOperation:
+ search_criteria.choice.profileManagementOperation =
+ req->search_criteria.choice.profileManagementOperation;
+ break;
+ default:
+ IPA_LOGP_ES10X("RetrieveNotificationsList", LERROR,
+ "unsupported euiccPackageResults searchCriteria!\n");
+ search_criteria.present = RetrieveNotificationsListRequest__searchCriteria_PR_NOTHING;
+ break;
+ }
+ } else {
search_criteria.present = RetrieveNotificationsListRequest__searchCriteria_PR_NOTHING;
- break;
- default:
- IPA_LOGP_ES10X("RetrieveNotificationsList", LERROR,
- "empty searchCriteria in IpaEuiccDataRequest!\n");
- search_criteria.present = RetrieveNotificationsListRequest__searchCriteria_PR_NOTHING;
- break;
}
- } else {
+ break;
+ case 0xA2:
+ /* There is not support for searchCriteria in IpaEuiccDataRequest.
+ * We emulate it by filtering the response.
+ */
+ search_criteria.present = RetrieveNotificationsListRequest__searchCriteria_PR_NOTHING;
+ break;
+ default:
/* Use native search_criteria as provided by caller */
search_criteria.present = req->search_criteria.present;
switch (req->search_criteria.present) {
@@ -215,32 +218,36 @@
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) {
- case IpaEuiccDataRequest__searchCriteriaNotification_PR_seqNumber:
- search_criteria.present = SGP32_RetrieveNotificationsListRequest__searchCriteria_PR_seqNumber;
- search_criteria.choice.seqNumber = req->dr_search_criteria->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;
- break;
- default:
- IPA_LOGP_ES10X("RetrieveNotificationsList", LERROR,
- "empty searchCriteria in IpaEuiccDataRequest!\n");
- search_criteria.present = RetrieveNotificationsListRequest__searchCriteria_PR_NOTHING;
- break;
+ switch (req->dr_tag) {
+ case 0xA0:
+ if (req->dr_search_criteria_notification) {
+ 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_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_notification->choice.profileManagementOperation;
+ break;
+ default:
+ IPA_LOGP_ES10X("RetrieveNotificationsList", LERROR,
+ "empty searchCriteria in IpaEuiccDataRequest!\n");
+ search_criteria.present = RetrieveNotificationsListRequest__searchCriteria_PR_NOTHING;
+ break;
+ }
+ } else {
+ search_criteria.present = RetrieveNotificationsListRequest__searchCriteria_PR_NOTHING;
}
- } else {
+ break;
+ case 0xA2:
+ search_criteria.present = SGP32_RetrieveNotificationsListRequest__searchCriteria_PR_euiccPackageResults;
+ break;
+ default:
/* Use native search_criteria as provided by caller */
search_criteria = req->search_criteria;
}
@@ -253,6 +260,35 @@
return es10b_req;
}

+void ipa_es10b_retr_notif_from_lst_filter(struct SGP32_RetrieveNotificationsListResponse *sgp32_res,
+ const struct ipa_es10b_retr_notif_from_lst_req *req)
+{
+ long seq_number;
+ struct EuiccPackageResult *euicc_package_result_item;
+ int i;
+
+ /* No list to filter. */
+ if (sgp32_res->present != SGP32_RetrieveNotificationsListResponse_PR_euiccPackageResultList)
+ return;
+
+ /* No search criteria with sequence number given. */
+ if (!req->dr_search_criteria_epr ||
+ req->dr_search_criteria_epr->present != IpaEuiccDataRequest__searchCriteriaEuiccPackageResult_PR_seqNumber)
+ return;
+
+ seq_number = req->dr_search_criteria_epr->choice.seqNumber;
+
+ /* Remove all items that do not have the requested sequence number. */
+ for (i = 0; i < sgp32_res->choice.euiccPackageResultList.list.count;) {
+ euicc_package_result_item = sgp32_res->choice.euiccPackageResultList.list.array[i];
+ if (euicc_package_result_item->present == EuiccPackageResult_PR_euiccPackageResultSigned &&
+ euicc_package_result_item->choice.euiccPackageResultSigned.euiccPackageResultDataSigned.seqNumber == seq_number)
+ i++;
+ else
+ asn_sequence_del(&sgp32_res->choice.euiccPackageResultList.list, i, 1);
+ }
+}
+
/*! Function (ES10b): RetrieveNotificationsList.
* \param[inout] ctx pointer to ipa_context.
* \param[in] req pointer to struct that holds the function parameters.
@@ -290,6 +326,9 @@
if (rc < 0)
goto error;

+ if (req->dr_tag == 0xA2)
+ ipa_es10b_retr_notif_from_lst_filter(res->sgp32_res, req);
+
IPA_FREE(es10b_req);
IPA_FREE(es10b_res);
return res;
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 0fa8ad0..2a9417d 100644
--- a/src/ipa/libipa/proc_euicc_data_req.c
+++ b/src/ipa/libipa/proc_euicc_data_req.c
@@ -114,7 +114,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 +180,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 +194,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_req.dr_search_criteria_notification = pars->ipa_euicc_data_request->searchCriteriaNotification;
+ retr_notif_from_lst_req.dr_tag = 0xA0;
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) {
ipa_euicc_data_response.choice.ipaEuiccData.notificationsList =
- (struct PendingNotificationList *)&retr_notif_from_lst_res->sgp32_res->choice.notificationList;
+ &retr_notif_from_lst_res->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 = 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_euiccPackageResultList) {
+ ipa_euicc_data_response.choice.ipaEuiccData.euiccPackageResultList =
+ &retr_notif_from_lst_res->sgp32_res->choice.euiccPackageResultList;
}
}


To view, visit change 43062. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-MessageType: newchange
Gerrit-Project: onomondo-ipa
Gerrit-Branch: master
Gerrit-Change-Id: I411111c71787ce27615b6b66fc8b19488883d15b
Gerrit-Change-Number: 43062
Gerrit-PatchSet: 1
Gerrit-Owner: jolly <andreas@eversberg.eu>