jolly has uploaded this change for review. ( https://gerrit.osmocom.org/c/onomondo-ipa/+/43049?usp=email )
Change subject: V1.2: Add SGP.32-custom StoreMetadata ......................................................................
V1.2: Add SGP.32-custom StoreMetadata
Add new StoreMetadata, which overrides and expands StoreMetadata from SGP.22. There is no impact on IPA process, because it is optional and not used.
Reference: SGP.32 Section 5.5
Related: SYS#8101 Change-Id: Icfbc141dda82f091bcc9a1d7177e9fdb5b424750 --- M asn1/SGP32Definitions.asn M src/ipa/libasn/AuthenticateClientOkDPEsipa.c M src/ipa/libasn/AuthenticateClientOkDPEsipa.h M src/ipa/libasn/CMakeLists.txt A src/ipa/libasn/SGP32-StoreMetadataRequest.c A src/ipa/libasn/SGP32-StoreMetadataRequest.h 6 files changed, 452 insertions(+), 5 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/onomondo-ipa refs/changes/49/43049/1
diff --git a/asn1/SGP32Definitions.asn b/asn1/SGP32Definitions.asn index e9e9c46..aea5a52 100644 --- a/asn1/SGP32Definitions.asn +++ b/asn1/SGP32Definitions.asn @@ -419,6 +419,25 @@ } -- ASN1STOP
+-- Section 5.5 +-- ASN1START +SGP32-StoreMetadataRequest ::= [37] SEQUENCE { -- Tag 'BF25' + iccid Iccid, + serviceProviderName [17] UTF8String (SIZE(0..32)), -- Tag '91' + profileName [18] UTF8String (SIZE(0..64)), -- Tag '92' (corresponds to 'Short Description' defined in SGP.21 [2]) + iconType [19] IconType OPTIONAL, -- Tag '93' (JPG or PNG) + icon [20] OCTET STRING (SIZE(0..1024)) OPTIONAL, -- Tag '94' (Data of the icon. Size 64 x 64 pixel. This field SHALL only be present if iconType is present) + profileClass [21] ProfileClass DEFAULT operational, -- Tag '95' + notificationConfigurationInfo [22] SEQUENCE OF NotificationConfigurationInformation OPTIONAL, + profileOwner [23] OperatorId OPTIONAL, -- Tag 'B7' + profilePolicyRules [25] PprIds OPTIONAL, -- Tag '99' + serviceSpecificDataStoredInEuicc [34] VendorSpecificExtension OPTIONAL, -- Tag 'BF22' + serviceSpecificDataNotStoredInEuicc [35] VendorSpecificExtension OPTIONAL, -- Tag ‘BF23’ + ecallIndication [123] BOOLEAN OPTIONAL, -- Tag '9F7B' + fallbackAllowed [103] BOOLEAN OPTIONAL -- Tag '9F67' +} +-- ASN1STOP + -- Section 5.9.2 -- ASN1START SGP32-EUICCInfo2 ::= [34] SEQUENCE { -- Tag 'BF22' @@ -869,7 +888,7 @@ } AuthenticateClientOkDPEsipa ::= SEQUENCE { transactionId [0] TransactionId OPTIONAL, - profileMetaData [37] StoreMetadataRequest OPTIONAL, + profileMetaData [37] SGP32-StoreMetadataRequest OPTIONAL, smdpSigned2 SmdpSigned2, -- Signed information smdpSignature2 [APPLICATION 55] OCTET STRING, -- Tag '5F37' smdpCertificate Certificate, -- CERT.DPpb.ECDSA diff --git a/src/ipa/libasn/AuthenticateClientOkDPEsipa.c b/src/ipa/libasn/AuthenticateClientOkDPEsipa.c index 9ec34be..0b9b281 100644 --- a/src/ipa/libasn/AuthenticateClientOkDPEsipa.c +++ b/src/ipa/libasn/AuthenticateClientOkDPEsipa.c @@ -20,7 +20,7 @@ { ATF_POINTER, 1, offsetof(struct AuthenticateClientOkDPEsipa, profileMetaData), (ASN_TAG_CLASS_CONTEXT | (37 << 2)), -1, /* IMPLICIT tag at current level */ - &asn_DEF_StoreMetadataRequest, + &asn_DEF_SGP32_StoreMetadataRequest, 0, { 0, 0, 0 }, 0, 0, /* No default value */ diff --git a/src/ipa/libasn/AuthenticateClientOkDPEsipa.h b/src/ipa/libasn/AuthenticateClientOkDPEsipa.h index 3094af8..5d8e656 100644 --- a/src/ipa/libasn/AuthenticateClientOkDPEsipa.h +++ b/src/ipa/libasn/AuthenticateClientOkDPEsipa.h @@ -24,12 +24,12 @@ #endif
/* Forward declarations */ -struct StoreMetadataRequest; +struct SGP32_StoreMetadataRequest;
/* AuthenticateClientOkDPEsipa */ typedef struct AuthenticateClientOkDPEsipa { TransactionId_t *transactionId /* OPTIONAL */; - struct StoreMetadataRequest *profileMetaData /* OPTIONAL */; + struct SGP32_StoreMetadataRequest *profileMetaData /* OPTIONAL */; SmdpSigned2_t smdpSigned2; OCTET_STRING_t smdpSignature2; Certificate_t smdpCertificate; @@ -53,7 +53,7 @@ #endif
/* Referred external types */ -#include "StoreMetadataRequest.h" +#include "SGP32-StoreMetadataRequest.h"
#endif /* _AuthenticateClientOkDPEsipa_H_ */ #include <asn_internal.h> diff --git a/src/ipa/libasn/CMakeLists.txt b/src/ipa/libasn/CMakeLists.txt index 0eb5264..cb1999c 100644 --- a/src/ipa/libasn/CMakeLists.txt +++ b/src/ipa/libasn/CMakeLists.txt @@ -854,6 +854,8 @@ SGP32-SetDefaultDpAddressRequest.h SGP32-SetDefaultDpAddressResponse.c SGP32-SetDefaultDpAddressResponse.h +SGP32-StoreMetadataRequest.c +SGP32-StoreMetadataRequest.h SkipCerts.c SkipCerts.h SmdpSigned2.c diff --git a/src/ipa/libasn/SGP32-StoreMetadataRequest.c b/src/ipa/libasn/SGP32-StoreMetadataRequest.c new file mode 100644 index 0000000..e42d4a8 --- /dev/null +++ b/src/ipa/libasn/SGP32-StoreMetadataRequest.c @@ -0,0 +1,347 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "SGP32Definitions" + * found in "../../../asn1/SGP32Definitions.asn" + * `asn1c -fcompound-names -no-gen-example` + */ + +#include "SGP32-StoreMetadataRequest.h" + +static int +memb_serviceProviderName_constraint_1(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 <= 32)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_profileName_constraint_1(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 <= 64)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_icon_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_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 = st->size; + + if((size <= 1024)) { + /* 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_serviceProviderName_constr_3 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +static asn_per_constraints_t asn_PER_memb_serviceProviderName_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_memb_profileName_constr_4 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..MAX)) */}; +static asn_per_constraints_t asn_PER_memb_profileName_constr_4 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_memb_icon_constr_6 CC_NOTUSED = { + { 0, 0 }, + -1 /* (SIZE(0..1024)) */}; +static asn_per_constraints_t asn_PER_memb_icon_constr_6 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 11, 11, 0, 1024 } /* (SIZE(0..1024)) */, + 0, 0 /* No PER value map */ +}; +static int asn_DFL_7_cmp_2(const void *sptr) { + const ProfileClass_t *st = sptr; + + if(!st) { + return -1; /* No value is not a default value */ + } + + /* Test default value 2 */ + return (*st != 2); +} +static int asn_DFL_7_set_2(void **sptr) { + ProfileClass_t *st = *sptr; + + if(!st) { + st = (*sptr = CALLOC(1, sizeof(*st))); + if(!st) return -1; + } + + /* Install default value 2 */ + *st = 2; + return 0; +} +static asn_TYPE_member_t asn_MBR_notificationConfigurationInfo_8[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_NotificationConfigurationInformation, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_notificationConfigurationInfo_tags_8[] = { + (ASN_TAG_CLASS_CONTEXT | (22 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_notificationConfigurationInfo_specs_8 = { + sizeof(struct SGP32_StoreMetadataRequest__notificationConfigurationInfo), + offsetof(struct SGP32_StoreMetadataRequest__notificationConfigurationInfo, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_notificationConfigurationInfo_8 = { + "notificationConfigurationInfo", + "notificationConfigurationInfo", + &asn_OP_SEQUENCE_OF, + asn_DEF_notificationConfigurationInfo_tags_8, + sizeof(asn_DEF_notificationConfigurationInfo_tags_8) + /sizeof(asn_DEF_notificationConfigurationInfo_tags_8[0]) - 1, /* 1 */ + asn_DEF_notificationConfigurationInfo_tags_8, /* Same as above */ + sizeof(asn_DEF_notificationConfigurationInfo_tags_8) + /sizeof(asn_DEF_notificationConfigurationInfo_tags_8[0]), /* 2 */ + { 0, 0, SEQUENCE_OF_constraint }, + asn_MBR_notificationConfigurationInfo_8, + 1, /* Single element */ + &asn_SPC_notificationConfigurationInfo_specs_8 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_SGP32_StoreMetadataRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SGP32_StoreMetadataRequest, iccid), + (ASN_TAG_CLASS_APPLICATION | (26 << 2)), + 0, + &asn_DEF_Iccid, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iccid" + }, + { ATF_NOFLAGS, 0, offsetof(struct SGP32_StoreMetadataRequest, serviceProviderName), + (ASN_TAG_CLASS_CONTEXT | (17 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UTF8String, + 0, + { &asn_OER_memb_serviceProviderName_constr_3, &asn_PER_memb_serviceProviderName_constr_3, memb_serviceProviderName_constraint_1 }, + 0, 0, /* No default value */ + "serviceProviderName" + }, + { ATF_NOFLAGS, 0, offsetof(struct SGP32_StoreMetadataRequest, profileName), + (ASN_TAG_CLASS_CONTEXT | (18 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UTF8String, + 0, + { &asn_OER_memb_profileName_constr_4, &asn_PER_memb_profileName_constr_4, memb_profileName_constraint_1 }, + 0, 0, /* No default value */ + "profileName" + }, + { ATF_POINTER, 10, offsetof(struct SGP32_StoreMetadataRequest, iconType), + (ASN_TAG_CLASS_CONTEXT | (19 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_IconType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "iconType" + }, + { ATF_POINTER, 9, offsetof(struct SGP32_StoreMetadataRequest, icon), + (ASN_TAG_CLASS_CONTEXT | (20 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, + { &asn_OER_memb_icon_constr_6, &asn_PER_memb_icon_constr_6, memb_icon_constraint_1 }, + 0, 0, /* No default value */ + "icon" + }, + { ATF_POINTER, 8, offsetof(struct SGP32_StoreMetadataRequest, profileClass), + (ASN_TAG_CLASS_CONTEXT | (21 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProfileClass, + 0, + { 0, 0, 0 }, + &asn_DFL_7_cmp_2, /* Compare DEFAULT 2 */ + &asn_DFL_7_set_2, /* Set DEFAULT 2 */ + "profileClass" + }, + { ATF_POINTER, 7, offsetof(struct SGP32_StoreMetadataRequest, notificationConfigurationInfo), + (ASN_TAG_CLASS_CONTEXT | (22 << 2)), + 0, + &asn_DEF_notificationConfigurationInfo_8, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "notificationConfigurationInfo" + }, + { ATF_POINTER, 6, offsetof(struct SGP32_StoreMetadataRequest, profileOwner), + (ASN_TAG_CLASS_CONTEXT | (23 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OperatorId, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "profileOwner" + }, + { ATF_POINTER, 5, offsetof(struct SGP32_StoreMetadataRequest, profilePolicyRules), + (ASN_TAG_CLASS_CONTEXT | (25 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PprIds, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "profilePolicyRules" + }, + { ATF_POINTER, 4, offsetof(struct SGP32_StoreMetadataRequest, serviceSpecificDataStoredInEuicc), + (ASN_TAG_CLASS_CONTEXT | (34 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_VendorSpecificExtension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "serviceSpecificDataStoredInEuicc" + }, + { ATF_POINTER, 3, offsetof(struct SGP32_StoreMetadataRequest, serviceSpecificDataNotStoredInEuicc), + (ASN_TAG_CLASS_CONTEXT | (35 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_VendorSpecificExtension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "serviceSpecificDataNotStoredInEuicc" + }, + { ATF_POINTER, 2, offsetof(struct SGP32_StoreMetadataRequest, ecallIndication), + (ASN_TAG_CLASS_CONTEXT | (123 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ecallIndication" + }, + { ATF_POINTER, 1, offsetof(struct SGP32_StoreMetadataRequest, fallbackAllowed), + (ASN_TAG_CLASS_CONTEXT | (103 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "fallbackAllowed" + }, +}; +static const int asn_MAP_SGP32_StoreMetadataRequest_oms_1[] = { 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; +static const ber_tlv_tag_t asn_DEF_SGP32_StoreMetadataRequest_tags_1[] = { + (ASN_TAG_CLASS_CONTEXT | (37 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SGP32_StoreMetadataRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_APPLICATION | (26 << 2)), 0, 0, 0 }, /* iccid */ + { (ASN_TAG_CLASS_CONTEXT | (17 << 2)), 1, 0, 0 }, /* serviceProviderName */ + { (ASN_TAG_CLASS_CONTEXT | (18 << 2)), 2, 0, 0 }, /* profileName */ + { (ASN_TAG_CLASS_CONTEXT | (19 << 2)), 3, 0, 0 }, /* iconType */ + { (ASN_TAG_CLASS_CONTEXT | (20 << 2)), 4, 0, 0 }, /* icon */ + { (ASN_TAG_CLASS_CONTEXT | (21 << 2)), 5, 0, 0 }, /* profileClass */ + { (ASN_TAG_CLASS_CONTEXT | (22 << 2)), 6, 0, 0 }, /* notificationConfigurationInfo */ + { (ASN_TAG_CLASS_CONTEXT | (23 << 2)), 7, 0, 0 }, /* profileOwner */ + { (ASN_TAG_CLASS_CONTEXT | (25 << 2)), 8, 0, 0 }, /* profilePolicyRules */ + { (ASN_TAG_CLASS_CONTEXT | (34 << 2)), 9, 0, 0 }, /* serviceSpecificDataStoredInEuicc */ + { (ASN_TAG_CLASS_CONTEXT | (35 << 2)), 10, 0, 0 }, /* serviceSpecificDataNotStoredInEuicc */ + { (ASN_TAG_CLASS_CONTEXT | (103 << 2)), 12, 0, 0 }, /* fallbackAllowed */ + { (ASN_TAG_CLASS_CONTEXT | (123 << 2)), 11, 0, 0 } /* ecallIndication */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SGP32_StoreMetadataRequest_specs_1 = { + sizeof(struct SGP32_StoreMetadataRequest), + offsetof(struct SGP32_StoreMetadataRequest, _asn_ctx), + asn_MAP_SGP32_StoreMetadataRequest_tag2el_1, + 13, /* Count of tags in the map */ + asn_MAP_SGP32_StoreMetadataRequest_oms_1, /* Optional members */ + 10, 0, /* Root/Additions */ + 13, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SGP32_StoreMetadataRequest = { + "SGP32-StoreMetadataRequest", + "SGP32-StoreMetadataRequest", + &asn_OP_SEQUENCE, + asn_DEF_SGP32_StoreMetadataRequest_tags_1, + sizeof(asn_DEF_SGP32_StoreMetadataRequest_tags_1) + /sizeof(asn_DEF_SGP32_StoreMetadataRequest_tags_1[0]) - 1, /* 1 */ + asn_DEF_SGP32_StoreMetadataRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_SGP32_StoreMetadataRequest_tags_1) + /sizeof(asn_DEF_SGP32_StoreMetadataRequest_tags_1[0]), /* 2 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SGP32_StoreMetadataRequest_1, + 13, /* Elements count */ + &asn_SPC_SGP32_StoreMetadataRequest_specs_1 /* Additional specs */ +}; + diff --git a/src/ipa/libasn/SGP32-StoreMetadataRequest.h b/src/ipa/libasn/SGP32-StoreMetadataRequest.h new file mode 100644 index 0000000..8f4e536 --- /dev/null +++ b/src/ipa/libasn/SGP32-StoreMetadataRequest.h @@ -0,0 +1,79 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "SGP32Definitions" + * found in "../../../asn1/SGP32Definitions.asn" + * `asn1c -fcompound-names -no-gen-example` + */ + +#ifndef _SGP32_StoreMetadataRequest_H_ +#define _SGP32_StoreMetadataRequest_H_ + + +#include <asn_application.h> + +/* Including external dependencies */ +#include "Iccid.h" +#include <UTF8String.h> +#include "IconType.h" +#include <OCTET_STRING.h> +#include "ProfileClass.h" +#include "PprIds.h" +#include <BOOLEAN.h> +#include <asn_SEQUENCE_OF.h> +#include <constr_SEQUENCE_OF.h> +#include <constr_SEQUENCE.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct OperatorId; +struct VendorSpecificExtension; +struct NotificationConfigurationInformation; + +/* SGP32-StoreMetadataRequest */ +typedef struct SGP32_StoreMetadataRequest { + Iccid_t iccid; + UTF8String_t serviceProviderName; + UTF8String_t profileName; + IconType_t *iconType /* OPTIONAL */; + OCTET_STRING_t *icon /* OPTIONAL */; + ProfileClass_t *profileClass /* DEFAULT 2 */; + struct SGP32_StoreMetadataRequest__notificationConfigurationInfo { + A_SEQUENCE_OF(struct NotificationConfigurationInformation) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *notificationConfigurationInfo; + struct OperatorId *profileOwner /* OPTIONAL */; + PprIds_t *profilePolicyRules /* OPTIONAL */; + struct VendorSpecificExtension *serviceSpecificDataStoredInEuicc /* OPTIONAL */; + struct VendorSpecificExtension *serviceSpecificDataNotStoredInEuicc /* OPTIONAL */; + BOOLEAN_t *ecallIndication /* OPTIONAL */; + BOOLEAN_t *fallbackAllowed /* OPTIONAL */; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SGP32_StoreMetadataRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SGP32_StoreMetadataRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_SGP32_StoreMetadataRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_SGP32_StoreMetadataRequest_1[13]; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "OperatorId.h" +#include "VendorSpecificExtension.h" +#include "NotificationConfigurationInformation.h" + +#endif /* _SGP32_StoreMetadataRequest_H_ */ +#include <asn_internal.h>