jolly has uploaded this change for review. ( https://gerrit.osmocom.org/c/onomondo-ipa/+/43072?usp=email )
Change subject: WIP: Add eimId to GetEimConfigurationDataRequest ......................................................................
WIP: Add eimId to GetEimConfigurationDataRequest
Add search criteria eimId to GetEimConfigurationDataRequest. The IoT eUICC emulation does not require this, because it returns an empty result anyway.
Reference: SGP.23 Section: 5.9.18
Related: SYS#8101 Change-Id: Ia8aacd9d5b8ec7a9d524a446114557efdb0614f5 --- M asn1/SGP32Definitions.asn M src/ipa/libasn/GetEimConfigurationDataRequest.c M src/ipa/libasn/GetEimConfigurationDataRequest.h 3 files changed, 135 insertions(+), 5 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/onomondo-ipa refs/changes/72/43072/1
diff --git a/asn1/SGP32Definitions.asn b/asn1/SGP32Definitions.asn index d7155c8..b9746ea 100644 --- a/asn1/SGP32Definitions.asn +++ b/asn1/SGP32Definitions.asn @@ -644,6 +644,9 @@ -- Section 5.9.18 -- ASN1START GetEimConfigurationDataRequest ::= [85] SEQUENCE { -- Tag 'BF55' + searchCriteria CHOICE { + eimId [0] UTF8String (SIZE(1..128)) + } OPTIONAL } -- ASN1STOP -- ASN1START diff --git a/src/ipa/libasn/GetEimConfigurationDataRequest.c b/src/ipa/libasn/GetEimConfigurationDataRequest.c index b321df9..d33b8fb 100644 --- a/src/ipa/libasn/GetEimConfigurationDataRequest.c +++ b/src/ipa/libasn/GetEimConfigurationDataRequest.c @@ -7,17 +7,120 @@
#include "GetEimConfigurationDataRequest.h"
+static int +memb_eimId_constraint_2(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const UTF8String_t *st = (const UTF8String_t *)sptr; + size_t size; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = UTF8String_length(st); + if((ssize_t)size < 0) { + ASN__CTFAIL(app_key, td, sptr, + "%s: UTF-8: broken encoding (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((size >= 1 && size <= 128)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_oer_constraints_t asn_OER_memb_eimId_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +static asn_per_constraints_t asn_PER_memb_eimId_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_oer_constraints_t asn_OER_type_searchCriteria_constr_2 CC_NOTUSED = { + { 0, 0 }, + -1}; +static asn_per_constraints_t asn_PER_type_searchCriteria_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_searchCriteria_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct GetEimConfigurationDataRequest__searchCriteria, choice.eimId), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UTF8String, + 0, + { &asn_OER_memb_eimId_constr_3, &asn_PER_memb_eimId_constr_3, memb_eimId_constraint_2 }, + 0, 0, /* No default value */ + "eimId" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_searchCriteria_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* eimId */ +}; +static asn_CHOICE_specifics_t asn_SPC_searchCriteria_specs_2 = { + sizeof(struct GetEimConfigurationDataRequest__searchCriteria), + offsetof(struct GetEimConfigurationDataRequest__searchCriteria, _asn_ctx), + offsetof(struct GetEimConfigurationDataRequest__searchCriteria, present), + sizeof(((struct GetEimConfigurationDataRequest__searchCriteria *)0)->present), + asn_MAP_searchCriteria_tag2el_2, + 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_searchCriteria_2 = { + "searchCriteria", + "searchCriteria", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { &asn_OER_type_searchCriteria_constr_2, &asn_PER_type_searchCriteria_constr_2, CHOICE_constraint }, + asn_MBR_searchCriteria_2, + 1, /* Elements count */ + &asn_SPC_searchCriteria_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_GetEimConfigurationDataRequest_1[] = { + { ATF_POINTER, 1, offsetof(struct GetEimConfigurationDataRequest, searchCriteria), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_searchCriteria_2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "searchCriteria" + }, +}; +static const int asn_MAP_GetEimConfigurationDataRequest_oms_1[] = { 0 }; static const ber_tlv_tag_t asn_DEF_GetEimConfigurationDataRequest_tags_1[] = { (ASN_TAG_CLASS_CONTEXT | (85 << 2)), (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; +static const asn_TYPE_tag2member_t asn_MAP_GetEimConfigurationDataRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* searchCriteria */ +}; static asn_SEQUENCE_specifics_t asn_SPC_GetEimConfigurationDataRequest_specs_1 = { sizeof(struct GetEimConfigurationDataRequest), offsetof(struct GetEimConfigurationDataRequest, _asn_ctx), - 0, /* No top level tags */ - 0, /* No tags in the map */ - 0, 0, 0, /* Optional elements (not needed) */ - -1, /* First extension addition */ + asn_MAP_GetEimConfigurationDataRequest_tag2el_1, + 1, /* Count of tags in the map */ + asn_MAP_GetEimConfigurationDataRequest_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 1, /* First extension addition */ }; asn_TYPE_descriptor_t asn_DEF_GetEimConfigurationDataRequest = { "GetEimConfigurationDataRequest", @@ -30,7 +133,8 @@ sizeof(asn_DEF_GetEimConfigurationDataRequest_tags_1) /sizeof(asn_DEF_GetEimConfigurationDataRequest_tags_1[0]), /* 2 */ { 0, 0, SEQUENCE_constraint }, - 0, 0, /* No members */ + asn_MBR_GetEimConfigurationDataRequest_1, + 1, /* Elements count */ &asn_SPC_GetEimConfigurationDataRequest_specs_1 /* Additional specs */ };
diff --git a/src/ipa/libasn/GetEimConfigurationDataRequest.h b/src/ipa/libasn/GetEimConfigurationDataRequest.h index 385ea6e..ab0c3f2 100644 --- a/src/ipa/libasn/GetEimConfigurationDataRequest.h +++ b/src/ipa/libasn/GetEimConfigurationDataRequest.h @@ -12,14 +12,37 @@ #include <asn_application.h>
/* Including external dependencies */ +#include <UTF8String.h> +#include <constr_CHOICE.h> #include <constr_SEQUENCE.h>
#ifdef __cplusplus extern "C" { #endif
+/* Dependencies */ +typedef enum GetEimConfigurationDataRequest__searchCriteria_PR { + GetEimConfigurationDataRequest__searchCriteria_PR_NOTHING, /* No components present */ + GetEimConfigurationDataRequest__searchCriteria_PR_eimId + /* Extensions may appear below */ + +} GetEimConfigurationDataRequest__searchCriteria_PR; + /* GetEimConfigurationDataRequest */ typedef struct GetEimConfigurationDataRequest { + struct GetEimConfigurationDataRequest__searchCriteria { + GetEimConfigurationDataRequest__searchCriteria_PR present; + union GetEimConfigurationDataRequest__searchCriteria_u { + UTF8String_t eimId; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *searchCriteria; /* * This type is extensible, * possible extensions are below.