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]>

Reply via email to