From f50ac285805a9186edb776662e783492d28f89b7 Mon Sep 17 00:00:00 2001 From: sandeepindia Date: Thu, 1 Dec 2022 23:32:41 +0530 Subject: [PATCH] EPIC-ID: RICAPP-201 upgrading E2SM KPM to 2.0 and adding feature to create a RAN-cell map Signed-off-by: sandeepindia Change-Id: Ibc48fc0a34277dfbe0701da1c86b706a9159829c --- Dockerfile | 8 +- bin/rmr-dev_4.8.0_amd64.deb | Bin 0 -> 125750 bytes bin/rmr_4.8.0_amd64.deb | Bin 0 -> 241726 bytes control/control.go | 1814 +- control/e2ap.go | 34 + control/e2sm.go | 6 +- control/types.go | 328 +- deploy/config.json | 18 +- e2ap/wrapper.c | 119 + e2ap/wrapper.h | 4 +- e2sm/headers/AMF-UE-NGAP-ID.h | 44 + e2sm/headers/AMFPointer.h | 44 + e2sm/headers/AMFRegionID.h | 44 + e2sm/headers/AMFSetID.h | 44 + e2sm/headers/ANY.h | 65 + e2sm/headers/BMPString.h | 39 + e2sm/headers/BOOLEAN.h | 45 + e2sm/headers/CGI.h | 61 + e2sm/headers/CoreCPID.h | 58 + e2sm/headers/E-UTRA-ARFCN.h | 44 + e2sm/headers/E-UTRA-PCI.h | 44 + e2sm/headers/E-UTRA-TAC.h | 43 + e2sm/headers/E2SM-KPM-ActionDefinition-Format1.h | 50 + e2sm/headers/E2SM-KPM-ActionDefinition-Format2.h | 46 + e2sm/headers/E2SM-KPM-ActionDefinition-Format3.h | 50 + e2sm/headers/E2SM-KPM-ActionDefinition.h | 41 +- .../E2SM-KPM-EventTriggerDefinition-Format1.h | 24 +- e2sm/headers/E2SM-KPM-EventTriggerDefinition.h | 44 +- e2sm/headers/E2SM-KPM-IndicationHeader-Format1.h | 40 +- e2sm/headers/E2SM-KPM-IndicationHeader.h | 44 +- e2sm/headers/E2SM-KPM-IndicationMessage-Format1.h | 27 +- e2sm/headers/E2SM-KPM-IndicationMessage-Format2.h | 48 + e2sm/headers/E2SM-KPM-IndicationMessage.h | 33 +- e2sm/headers/E2SM-KPM-RANfunction-Description.h | 45 +- e2sm/headers/EN-GNB-ID.h | 56 + e2sm/headers/ENB-ID.h | 14 +- e2sm/headers/ENB-UE-X2AP-ID-Extension.h | 44 + e2sm/headers/ENB-UE-X2AP-ID.h | 44 + e2sm/headers/ENUMERATED.h | 40 + e2sm/headers/EUTRA-CGI.h | 46 + e2sm/headers/EUTRACellIdentity.h | 44 + e2sm/headers/FiveGS-TAC.h | 43 + e2sm/headers/FiveQI.h | 44 + e2sm/headers/FreqBandNrItem.h | 42 + e2sm/headers/GNB-CU-CP-UE-E1AP-ID.h | 45 + e2sm/headers/GNB-CU-UE-F1AP-ID.h | 45 + e2sm/headers/GNB-CU-UP-ID.h | 14 +- e2sm/headers/GNB-DU-ID.h | 14 +- e2sm/headers/GNB-ID.h | 56 + e2sm/headers/GUAMI.h | 50 + e2sm/headers/GUMMEI.h | 48 + e2sm/headers/GeneralString.h | 36 + e2sm/headers/GeneralizedTime.h | 80 + e2sm/headers/GlobalENB-ID.h | 16 +- e2sm/headers/GlobalGNB-ID.h | 46 + e2sm/headers/GlobalNGRANNodeID.h | 61 + e2sm/headers/GlobalNgENB-ID.h | 46 + e2sm/headers/GlobalenGNB-ID.h | 20 +- e2sm/headers/GranularityPeriod.h | 45 + e2sm/headers/GraphicString.h | 36 + e2sm/headers/GroupID.h | 56 + e2sm/headers/IA5String.h | 40 + e2sm/headers/ISO646String.h | 37 + e2sm/headers/IndexToRFSP.h | 43 + e2sm/headers/Interface-MessageID.h | 55 + e2sm/headers/InterfaceID-E1.h | 46 + e2sm/headers/InterfaceID-F1.h | 46 + e2sm/headers/InterfaceID-NG.h | 44 + e2sm/headers/InterfaceID-S1.h | 44 + e2sm/headers/InterfaceID-W1.h | 46 + e2sm/headers/InterfaceID-X2.h | 70 + e2sm/headers/InterfaceID-Xn.h | 44 + e2sm/headers/InterfaceIdentifier.h | 73 + e2sm/headers/InterfaceType.h | 57 + e2sm/headers/LabelInfoItem.h | 44 + e2sm/headers/LabelInfoList.h | 44 + e2sm/headers/MME-Code.h | 44 + e2sm/headers/MME-Group-ID.h | 44 + e2sm/headers/MME-UE-S1AP-ID.h | 45 + e2sm/headers/MatchingCondItem.h | 61 + e2sm/headers/MatchingCondList.h | 44 + e2sm/headers/MatchingUEidItem.h | 44 + e2sm/headers/MatchingUEidList.h | 44 + e2sm/headers/MeasurementCondItem.h | 46 + e2sm/headers/MeasurementCondList.h | 44 + e2sm/headers/MeasurementCondUEidItem.h | 50 + e2sm/headers/MeasurementCondUEidList.h | 44 + e2sm/headers/MeasurementData.h | 44 + e2sm/headers/MeasurementDataItem.h | 55 + e2sm/headers/MeasurementInfo-Action-Item.h | 46 + e2sm/headers/MeasurementInfo-Action-List.h | 44 + e2sm/headers/MeasurementInfoItem.h | 46 + e2sm/headers/MeasurementInfoList.h | 44 + e2sm/headers/MeasurementLabel.h | 124 + e2sm/headers/MeasurementRecord.h | 44 + e2sm/headers/MeasurementRecordItem.h | 63 + e2sm/headers/MeasurementType.h | 59 + e2sm/headers/MeasurementTypeID.h | 44 + e2sm/headers/MeasurementTypeName.h | 44 + e2sm/headers/NG-RANnodeUEXnAPID.h | 45 + e2sm/headers/NGENB-CU-UE-W1AP-ID.h | 45 + e2sm/headers/NGENB-DU-ID.h | 44 + e2sm/headers/NR-ARFCN.h | 44 + e2sm/headers/NR-CGI.h | 46 + e2sm/headers/NR-PCI.h | 44 + e2sm/headers/NRCellIdentity.h | 14 +- e2sm/headers/NRFrequencyBand-List.h | 44 + e2sm/headers/NRFrequencyBandItem.h | 46 + e2sm/headers/NRFrequencyInfo.h | 46 + e2sm/headers/NRFrequencyShift7p5khz.h | 54 + e2sm/headers/NULL.h | 45 + e2sm/headers/NativeReal.h | 48 + e2sm/headers/NgENB-ID.h | 60 + e2sm/headers/NumericString.h | 37 + e2sm/headers/OBJECT_IDENTIFIER.h | 156 + e2sm/headers/ObjectDescriptor.h | 35 + e2sm/headers/PLMNIdentity.h | 44 + e2sm/headers/QCI.h | 44 + e2sm/headers/QoSID.h | 56 + e2sm/headers/QosFlowIdentifier.h | 44 + e2sm/headers/RANUEID.h | 44 + e2sm/headers/RANfunction-Name.h | 16 +- e2sm/headers/REAL.h | 67 + e2sm/headers/RELATIVE-OID.h | 53 + e2sm/headers/RIC-EventTriggerStyle-Item.h | 48 + e2sm/headers/RIC-Format-Type.h | 14 +- e2sm/headers/RIC-ReportStyle-Item.h | 52 + e2sm/headers/RIC-Style-Name.h | 14 +- e2sm/headers/RIC-Style-Type.h | 14 +- e2sm/headers/RRC-MessageID.h | 68 + e2sm/headers/RRCclass-LTE.h | 64 + e2sm/headers/RRCclass-NR.h | 60 + e2sm/headers/S-NSSAI.h | 46 + e2sm/headers/SD.h | 44 + e2sm/headers/SST.h | 44 + e2sm/headers/ServingCell-ARFCN.h | 58 + e2sm/headers/ServingCell-PCI.h | 56 + e2sm/headers/SubscriberProfileIDforRFP.h | 43 + e2sm/headers/SupportedSULBandList.h | 44 + e2sm/headers/SupportedSULFreqBandItem.h | 44 + e2sm/headers/T61String.h | 36 + e2sm/headers/TeletexString.h | 36 + e2sm/headers/TestCond-Expression.h | 57 + e2sm/headers/TestCond-Type.h | 108 + e2sm/headers/TestCond-Value.h | 70 + e2sm/headers/TestCondInfo.h | 48 + e2sm/headers/TimeStamp.h | 44 + e2sm/headers/UEID-EN-GNB.h | 56 + e2sm/headers/UEID-ENB.h | 54 + e2sm/headers/UEID-GNB-CU-CP-E1AP-ID-Item.h | 44 + e2sm/headers/UEID-GNB-CU-CP-E1AP-ID-List.h | 44 + e2sm/headers/UEID-GNB-CU-CP-F1AP-ID-Item.h | 44 + e2sm/headers/UEID-GNB-CU-F1AP-ID-List.h | 44 + e2sm/headers/UEID-GNB-CU-UP.h | 46 + e2sm/headers/UEID-GNB-DU.h | 46 + e2sm/headers/UEID-GNB.h | 60 + e2sm/headers/UEID-NG-ENB-DU.h | 44 + e2sm/headers/UEID-NG-ENB.h | 56 + e2sm/headers/UEID.h | 76 + e2sm/headers/UTCTime.h | 50 + e2sm/headers/UTF8String.h | 63 + e2sm/headers/UniversalString.h | 38 + e2sm/headers/VideotexString.h | 36 + e2sm/headers/VisibleString.h | 38 + e2sm/headers/asn_constant.h | 25 +- e2sm/headers/constr_SET.h | 87 + e2sm/lib/AMF-UE-NGAP-ID.c | 67 + e2sm/lib/AMFPointer.c | 67 + e2sm/lib/AMFRegionID.c | 67 + e2sm/lib/AMFSetID.c | 67 + e2sm/lib/ANY.c | 450 + e2sm/lib/BMPString.c | 233 + e2sm/lib/BOOLEAN.c | 492 + e2sm/lib/CGI.c | 64 + e2sm/lib/CoreCPID.c | 64 + e2sm/lib/E-UTRA-ARFCN.c | 61 + e2sm/lib/E-UTRA-PCI.c | 61 + e2sm/lib/E-UTRA-TAC.c | 62 + e2sm/lib/E2SM-KPM-ActionDefinition-Format1.c | 73 + e2sm/lib/E2SM-KPM-ActionDefinition-Format2.c | 60 + e2sm/lib/E2SM-KPM-ActionDefinition-Format3.c | 73 + e2sm/lib/E2SM-KPM-ActionDefinition.c | 89 +- e2sm/lib/E2SM-KPM-EventTriggerDefinition-Format1.c | 127 +- e2sm/lib/E2SM-KPM-EventTriggerDefinition.c | 77 +- e2sm/lib/E2SM-KPM-IndicationHeader-Format1.c | 397 +- e2sm/lib/E2SM-KPM-IndicationHeader.c | 77 +- e2sm/lib/E2SM-KPM-IndicationMessage-Format1.c | 121 +- e2sm/lib/E2SM-KPM-IndicationMessage-Format2.c | 72 + e2sm/lib/E2SM-KPM-IndicationMessage.c | 84 +- e2sm/lib/E2SM-KPM-RANfunction-Description.c | 185 +- e2sm/lib/EN-GNB-ID.c | 88 + e2sm/lib/ENB-ID.c | 31 +- e2sm/lib/ENB-UE-X2AP-ID-Extension.c | 61 + e2sm/lib/ENB-UE-X2AP-ID.c | 61 + e2sm/lib/ENUMERATED.c | 180 + e2sm/lib/EUTRA-CGI.c | 60 + e2sm/lib/EUTRACellIdentity.c | 67 + e2sm/lib/FiveGS-TAC.c | 62 + e2sm/lib/FiveQI.c | 61 + e2sm/lib/FreqBandNrItem.c | 80 + e2sm/lib/GNB-CU-CP-UE-E1AP-ID.c | 57 + e2sm/lib/GNB-CU-UE-F1AP-ID.c | 57 + e2sm/lib/GNB-CU-UP-ID.c | 11 +- e2sm/lib/GNB-DU-ID.c | 11 +- e2sm/lib/GNB-ID.c | 88 + e2sm/lib/GUAMI.c | 80 + e2sm/lib/GUMMEI.c | 70 + e2sm/lib/GeneralString.c | 58 + e2sm/lib/GeneralizedTime.c | 833 + e2sm/lib/GlobalENB-ID.c | 14 +- e2sm/lib/GlobalGNB-ID.c | 60 + e2sm/lib/GlobalNGRANNodeID.c | 64 + e2sm/lib/GlobalNgENB-ID.c | 60 + e2sm/lib/GlobalenGNB-ID.c | 16 +- e2sm/lib/GranularityPeriod.c | 66 + e2sm/lib/GraphicString.c | 58 + e2sm/lib/GroupID.c | 62 + e2sm/lib/IA5String.c | 97 + e2sm/lib/ISO646String.c | 62 + e2sm/lib/IndexToRFSP.c | 61 + e2sm/lib/Interface-MessageID.c | 110 + e2sm/lib/InterfaceID-E1.c | 60 + e2sm/lib/InterfaceID-F1.c | 60 + e2sm/lib/InterfaceID-NG.c | 50 + e2sm/lib/InterfaceID-S1.c | 50 + e2sm/lib/InterfaceID-W1.c | 60 + e2sm/lib/InterfaceID-X2.c | 106 + e2sm/lib/InterfaceID-Xn.c | 50 + e2sm/lib/InterfaceIdentifier.c | 119 + e2sm/lib/InterfaceType.c | 65 + e2sm/lib/LabelInfoItem.c | 50 + e2sm/lib/LabelInfoList.c | 50 + e2sm/lib/MME-Code.c | 62 + e2sm/lib/MME-Group-ID.c | 62 + e2sm/lib/MME-UE-S1AP-ID.c | 57 + e2sm/lib/MatchingCondItem.c | 64 + e2sm/lib/MatchingCondList.c | 50 + e2sm/lib/MatchingUEidItem.c | 50 + e2sm/lib/MatchingUEidList.c | 50 + e2sm/lib/MeasurementCondItem.c | 60 + e2sm/lib/MeasurementCondList.c | 50 + e2sm/lib/MeasurementCondUEidItem.c | 73 + e2sm/lib/MeasurementCondUEidList.c | 50 + e2sm/lib/MeasurementData.c | 50 + e2sm/lib/MeasurementDataItem.c | 108 + e2sm/lib/MeasurementInfo-Action-Item.c | 62 + e2sm/lib/MeasurementInfo-Action-List.c | 50 + e2sm/lib/MeasurementInfoItem.c | 60 + e2sm/lib/MeasurementInfoList.c | 50 + e2sm/lib/MeasurementLabel.c | 787 + e2sm/lib/MeasurementRecord.c | 50 + e2sm/lib/MeasurementRecordItem.c | 143 + e2sm/lib/MeasurementType.c | 62 + e2sm/lib/MeasurementTypeID.c | 61 + e2sm/lib/MeasurementTypeName.c | 106 + e2sm/lib/NG-RANnodeUEXnAPID.c | 57 + e2sm/lib/NGENB-CU-UE-W1AP-ID.c | 57 + e2sm/lib/NGENB-DU-ID.c | 67 + e2sm/lib/NR-ARFCN.c | 80 + e2sm/lib/NR-CGI.c | 60 + e2sm/lib/NR-PCI.c | 61 + e2sm/lib/NRCellIdentity.c | 11 +- e2sm/lib/NRFrequencyBand-List.c | 50 + e2sm/lib/NRFrequencyBandItem.c | 90 + e2sm/lib/NRFrequencyInfo.c | 72 + e2sm/lib/NRFrequencyShift7p5khz.c | 55 + e2sm/lib/NULL.c | 299 + e2sm/lib/NativeReal.c | 781 + e2sm/lib/NgENB-ID.c | 180 + e2sm/lib/NumericString.c | 121 + e2sm/lib/OBJECT_IDENTIFIER.c | 656 + e2sm/lib/ObjectDescriptor.c | 58 + e2sm/lib/PLMNIdentity.c | 62 + e2sm/lib/QCI.c | 61 + e2sm/lib/QoSID.c | 62 + e2sm/lib/QosFlowIdentifier.c | 61 + e2sm/lib/RANUEID.c | 62 + e2sm/lib/RANfunction-Name.c | 21 +- e2sm/lib/REAL.c | 1028 + e2sm/lib/RELATIVE-OID.c | 336 + e2sm/lib/RIC-EventTriggerStyle-Item.c | 70 + e2sm/lib/RIC-Format-Type.c | 6 +- e2sm/lib/RIC-ReportStyle-Item.c | 100 + e2sm/lib/RIC-Style-Name.c | 11 +- e2sm/lib/RIC-Style-Type.c | 6 +- e2sm/lib/RRC-MessageID.c | 114 + e2sm/lib/RRCclass-LTE.c | 75 + e2sm/lib/RRCclass-NR.c | 67 + e2sm/lib/S-NSSAI.c | 62 + e2sm/lib/SD.c | 62 + e2sm/lib/SST.c | 62 + e2sm/lib/ServingCell-ARFCN.c | 63 + e2sm/lib/ServingCell-PCI.c | 62 + e2sm/lib/SubscriberProfileIDforRFP.c | 61 + e2sm/lib/SupportedSULBandList.c | 50 + e2sm/lib/SupportedSULFreqBandItem.c | 80 + e2sm/lib/T61String.c | 58 + e2sm/lib/TeletexString.c | 194 + e2sm/lib/TestCond-Expression.c | 61 + e2sm/lib/TestCond-Type.c | 378 + e2sm/lib/TestCond-Value.c | 102 + e2sm/lib/TestCondInfo.c | 70 + e2sm/lib/TimeStamp.c | 62 + e2sm/lib/UEID-EN-GNB.c | 103 + e2sm/lib/UEID-ENB.c | 93 + e2sm/lib/UEID-GNB-CU-CP-E1AP-ID-Item.c | 50 + e2sm/lib/UEID-GNB-CU-CP-E1AP-ID-List.c | 50 + e2sm/lib/UEID-GNB-CU-CP-F1AP-ID-Item.c | 50 + e2sm/lib/UEID-GNB-CU-F1AP-ID-List.c | 50 + e2sm/lib/UEID-GNB-CU-UP.c | 62 + e2sm/lib/UEID-GNB-DU.c | 62 + e2sm/lib/UEID-GNB.c | 126 + e2sm/lib/UEID-NG-ENB-DU.c | 50 + e2sm/lib/UEID-NG-ENB.c | 104 + e2sm/lib/UEID.c | 119 + e2sm/lib/UTCTime.c | 277 + e2sm/lib/UTF8String.c | 294 + e2sm/lib/UniversalString.c | 243 + e2sm/lib/VideotexString.c | 58 + e2sm/lib/VisibleString.c | 99 + e2sm/lib/asn_internal.c | 3 +- e2sm/lib/constr_SET.c | 1149 + e2sm/lib/cscope.out | 116022 ++++++++++++++++++ e2sm/lib/per_support.c | 9 +- e2sm/wrapper.c | 199 +- e2sm/wrapper.h | 146 +- kpimon.go | 10 + testfile1.txt | 4 + testfile2.txt | 4 + 329 files changed, 142518 insertions(+), 1828 deletions(-) create mode 100644 bin/rmr-dev_4.8.0_amd64.deb create mode 100644 bin/rmr_4.8.0_amd64.deb create mode 100644 e2sm/headers/AMF-UE-NGAP-ID.h create mode 100644 e2sm/headers/AMFPointer.h create mode 100644 e2sm/headers/AMFRegionID.h create mode 100644 e2sm/headers/AMFSetID.h create mode 100644 e2sm/headers/ANY.h create mode 100644 e2sm/headers/BMPString.h create mode 100644 e2sm/headers/BOOLEAN.h create mode 100644 e2sm/headers/CGI.h create mode 100644 e2sm/headers/CoreCPID.h create mode 100644 e2sm/headers/E-UTRA-ARFCN.h create mode 100644 e2sm/headers/E-UTRA-PCI.h create mode 100644 e2sm/headers/E-UTRA-TAC.h create mode 100644 e2sm/headers/E2SM-KPM-ActionDefinition-Format1.h create mode 100644 e2sm/headers/E2SM-KPM-ActionDefinition-Format2.h create mode 100644 e2sm/headers/E2SM-KPM-ActionDefinition-Format3.h create mode 100644 e2sm/headers/E2SM-KPM-IndicationMessage-Format2.h create mode 100644 e2sm/headers/EN-GNB-ID.h create mode 100644 e2sm/headers/ENB-UE-X2AP-ID-Extension.h create mode 100644 e2sm/headers/ENB-UE-X2AP-ID.h create mode 100644 e2sm/headers/ENUMERATED.h create mode 100644 e2sm/headers/EUTRA-CGI.h create mode 100644 e2sm/headers/EUTRACellIdentity.h create mode 100644 e2sm/headers/FiveGS-TAC.h create mode 100644 e2sm/headers/FiveQI.h create mode 100644 e2sm/headers/FreqBandNrItem.h create mode 100644 e2sm/headers/GNB-CU-CP-UE-E1AP-ID.h create mode 100644 e2sm/headers/GNB-CU-UE-F1AP-ID.h create mode 100644 e2sm/headers/GNB-ID.h create mode 100644 e2sm/headers/GUAMI.h create mode 100644 e2sm/headers/GUMMEI.h create mode 100644 e2sm/headers/GeneralString.h create mode 100644 e2sm/headers/GeneralizedTime.h create mode 100644 e2sm/headers/GlobalGNB-ID.h create mode 100644 e2sm/headers/GlobalNGRANNodeID.h create mode 100644 e2sm/headers/GlobalNgENB-ID.h create mode 100644 e2sm/headers/GranularityPeriod.h create mode 100644 e2sm/headers/GraphicString.h create mode 100644 e2sm/headers/GroupID.h create mode 100644 e2sm/headers/IA5String.h create mode 100644 e2sm/headers/ISO646String.h create mode 100644 e2sm/headers/IndexToRFSP.h create mode 100644 e2sm/headers/Interface-MessageID.h create mode 100644 e2sm/headers/InterfaceID-E1.h create mode 100644 e2sm/headers/InterfaceID-F1.h create mode 100644 e2sm/headers/InterfaceID-NG.h create mode 100644 e2sm/headers/InterfaceID-S1.h create mode 100644 e2sm/headers/InterfaceID-W1.h create mode 100644 e2sm/headers/InterfaceID-X2.h create mode 100644 e2sm/headers/InterfaceID-Xn.h create mode 100644 e2sm/headers/InterfaceIdentifier.h create mode 100644 e2sm/headers/InterfaceType.h create mode 100644 e2sm/headers/LabelInfoItem.h create mode 100644 e2sm/headers/LabelInfoList.h create mode 100644 e2sm/headers/MME-Code.h create mode 100644 e2sm/headers/MME-Group-ID.h create mode 100644 e2sm/headers/MME-UE-S1AP-ID.h create mode 100644 e2sm/headers/MatchingCondItem.h create mode 100644 e2sm/headers/MatchingCondList.h create mode 100644 e2sm/headers/MatchingUEidItem.h create mode 100644 e2sm/headers/MatchingUEidList.h create mode 100644 e2sm/headers/MeasurementCondItem.h create mode 100644 e2sm/headers/MeasurementCondList.h create mode 100644 e2sm/headers/MeasurementCondUEidItem.h create mode 100644 e2sm/headers/MeasurementCondUEidList.h create mode 100644 e2sm/headers/MeasurementData.h create mode 100644 e2sm/headers/MeasurementDataItem.h create mode 100644 e2sm/headers/MeasurementInfo-Action-Item.h create mode 100644 e2sm/headers/MeasurementInfo-Action-List.h create mode 100644 e2sm/headers/MeasurementInfoItem.h create mode 100644 e2sm/headers/MeasurementInfoList.h create mode 100644 e2sm/headers/MeasurementLabel.h create mode 100644 e2sm/headers/MeasurementRecord.h create mode 100644 e2sm/headers/MeasurementRecordItem.h create mode 100644 e2sm/headers/MeasurementType.h create mode 100644 e2sm/headers/MeasurementTypeID.h create mode 100644 e2sm/headers/MeasurementTypeName.h create mode 100644 e2sm/headers/NG-RANnodeUEXnAPID.h create mode 100644 e2sm/headers/NGENB-CU-UE-W1AP-ID.h create mode 100644 e2sm/headers/NGENB-DU-ID.h create mode 100644 e2sm/headers/NR-ARFCN.h create mode 100644 e2sm/headers/NR-CGI.h create mode 100644 e2sm/headers/NR-PCI.h create mode 100644 e2sm/headers/NRFrequencyBand-List.h create mode 100644 e2sm/headers/NRFrequencyBandItem.h create mode 100644 e2sm/headers/NRFrequencyInfo.h create mode 100644 e2sm/headers/NRFrequencyShift7p5khz.h create mode 100644 e2sm/headers/NULL.h create mode 100644 e2sm/headers/NativeReal.h create mode 100644 e2sm/headers/NgENB-ID.h create mode 100644 e2sm/headers/NumericString.h create mode 100644 e2sm/headers/OBJECT_IDENTIFIER.h create mode 100644 e2sm/headers/ObjectDescriptor.h create mode 100644 e2sm/headers/PLMNIdentity.h create mode 100644 e2sm/headers/QCI.h create mode 100644 e2sm/headers/QoSID.h create mode 100644 e2sm/headers/QosFlowIdentifier.h create mode 100644 e2sm/headers/RANUEID.h create mode 100644 e2sm/headers/REAL.h create mode 100644 e2sm/headers/RELATIVE-OID.h create mode 100644 e2sm/headers/RIC-EventTriggerStyle-Item.h create mode 100644 e2sm/headers/RIC-ReportStyle-Item.h create mode 100644 e2sm/headers/RRC-MessageID.h create mode 100644 e2sm/headers/RRCclass-LTE.h create mode 100644 e2sm/headers/RRCclass-NR.h create mode 100644 e2sm/headers/S-NSSAI.h create mode 100644 e2sm/headers/SD.h create mode 100644 e2sm/headers/SST.h create mode 100644 e2sm/headers/ServingCell-ARFCN.h create mode 100644 e2sm/headers/ServingCell-PCI.h create mode 100644 e2sm/headers/SubscriberProfileIDforRFP.h create mode 100644 e2sm/headers/SupportedSULBandList.h create mode 100644 e2sm/headers/SupportedSULFreqBandItem.h create mode 100644 e2sm/headers/T61String.h create mode 100644 e2sm/headers/TeletexString.h create mode 100644 e2sm/headers/TestCond-Expression.h create mode 100644 e2sm/headers/TestCond-Type.h create mode 100644 e2sm/headers/TestCond-Value.h create mode 100644 e2sm/headers/TestCondInfo.h create mode 100644 e2sm/headers/TimeStamp.h create mode 100644 e2sm/headers/UEID-EN-GNB.h create mode 100644 e2sm/headers/UEID-ENB.h create mode 100644 e2sm/headers/UEID-GNB-CU-CP-E1AP-ID-Item.h create mode 100644 e2sm/headers/UEID-GNB-CU-CP-E1AP-ID-List.h create mode 100644 e2sm/headers/UEID-GNB-CU-CP-F1AP-ID-Item.h create mode 100644 e2sm/headers/UEID-GNB-CU-F1AP-ID-List.h create mode 100644 e2sm/headers/UEID-GNB-CU-UP.h create mode 100644 e2sm/headers/UEID-GNB-DU.h create mode 100644 e2sm/headers/UEID-GNB.h create mode 100644 e2sm/headers/UEID-NG-ENB-DU.h create mode 100644 e2sm/headers/UEID-NG-ENB.h create mode 100644 e2sm/headers/UEID.h create mode 100644 e2sm/headers/UTCTime.h create mode 100644 e2sm/headers/UTF8String.h create mode 100644 e2sm/headers/UniversalString.h create mode 100644 e2sm/headers/VideotexString.h create mode 100644 e2sm/headers/VisibleString.h create mode 100644 e2sm/headers/constr_SET.h create mode 100644 e2sm/lib/AMF-UE-NGAP-ID.c create mode 100644 e2sm/lib/AMFPointer.c create mode 100644 e2sm/lib/AMFRegionID.c create mode 100644 e2sm/lib/AMFSetID.c create mode 100644 e2sm/lib/ANY.c create mode 100644 e2sm/lib/BMPString.c create mode 100644 e2sm/lib/BOOLEAN.c create mode 100644 e2sm/lib/CGI.c create mode 100644 e2sm/lib/CoreCPID.c create mode 100644 e2sm/lib/E-UTRA-ARFCN.c create mode 100644 e2sm/lib/E-UTRA-PCI.c create mode 100644 e2sm/lib/E-UTRA-TAC.c create mode 100644 e2sm/lib/E2SM-KPM-ActionDefinition-Format1.c create mode 100644 e2sm/lib/E2SM-KPM-ActionDefinition-Format2.c create mode 100644 e2sm/lib/E2SM-KPM-ActionDefinition-Format3.c create mode 100644 e2sm/lib/E2SM-KPM-IndicationMessage-Format2.c create mode 100644 e2sm/lib/EN-GNB-ID.c create mode 100644 e2sm/lib/ENB-UE-X2AP-ID-Extension.c create mode 100644 e2sm/lib/ENB-UE-X2AP-ID.c create mode 100644 e2sm/lib/ENUMERATED.c create mode 100644 e2sm/lib/EUTRA-CGI.c create mode 100644 e2sm/lib/EUTRACellIdentity.c create mode 100644 e2sm/lib/FiveGS-TAC.c create mode 100644 e2sm/lib/FiveQI.c create mode 100644 e2sm/lib/FreqBandNrItem.c create mode 100644 e2sm/lib/GNB-CU-CP-UE-E1AP-ID.c create mode 100644 e2sm/lib/GNB-CU-UE-F1AP-ID.c create mode 100644 e2sm/lib/GNB-ID.c create mode 100644 e2sm/lib/GUAMI.c create mode 100644 e2sm/lib/GUMMEI.c create mode 100644 e2sm/lib/GeneralString.c create mode 100644 e2sm/lib/GeneralizedTime.c create mode 100644 e2sm/lib/GlobalGNB-ID.c create mode 100644 e2sm/lib/GlobalNGRANNodeID.c create mode 100644 e2sm/lib/GlobalNgENB-ID.c create mode 100644 e2sm/lib/GranularityPeriod.c create mode 100644 e2sm/lib/GraphicString.c create mode 100644 e2sm/lib/GroupID.c create mode 100644 e2sm/lib/IA5String.c create mode 100644 e2sm/lib/ISO646String.c create mode 100644 e2sm/lib/IndexToRFSP.c create mode 100644 e2sm/lib/Interface-MessageID.c create mode 100644 e2sm/lib/InterfaceID-E1.c create mode 100644 e2sm/lib/InterfaceID-F1.c create mode 100644 e2sm/lib/InterfaceID-NG.c create mode 100644 e2sm/lib/InterfaceID-S1.c create mode 100644 e2sm/lib/InterfaceID-W1.c create mode 100644 e2sm/lib/InterfaceID-X2.c create mode 100644 e2sm/lib/InterfaceID-Xn.c create mode 100644 e2sm/lib/InterfaceIdentifier.c create mode 100644 e2sm/lib/InterfaceType.c create mode 100644 e2sm/lib/LabelInfoItem.c create mode 100644 e2sm/lib/LabelInfoList.c create mode 100644 e2sm/lib/MME-Code.c create mode 100644 e2sm/lib/MME-Group-ID.c create mode 100644 e2sm/lib/MME-UE-S1AP-ID.c create mode 100644 e2sm/lib/MatchingCondItem.c create mode 100644 e2sm/lib/MatchingCondList.c create mode 100644 e2sm/lib/MatchingUEidItem.c create mode 100644 e2sm/lib/MatchingUEidList.c create mode 100644 e2sm/lib/MeasurementCondItem.c create mode 100644 e2sm/lib/MeasurementCondList.c create mode 100644 e2sm/lib/MeasurementCondUEidItem.c create mode 100644 e2sm/lib/MeasurementCondUEidList.c create mode 100644 e2sm/lib/MeasurementData.c create mode 100644 e2sm/lib/MeasurementDataItem.c create mode 100644 e2sm/lib/MeasurementInfo-Action-Item.c create mode 100644 e2sm/lib/MeasurementInfo-Action-List.c create mode 100644 e2sm/lib/MeasurementInfoItem.c create mode 100644 e2sm/lib/MeasurementInfoList.c create mode 100644 e2sm/lib/MeasurementLabel.c create mode 100644 e2sm/lib/MeasurementRecord.c create mode 100644 e2sm/lib/MeasurementRecordItem.c create mode 100644 e2sm/lib/MeasurementType.c create mode 100644 e2sm/lib/MeasurementTypeID.c create mode 100644 e2sm/lib/MeasurementTypeName.c create mode 100644 e2sm/lib/NG-RANnodeUEXnAPID.c create mode 100644 e2sm/lib/NGENB-CU-UE-W1AP-ID.c create mode 100644 e2sm/lib/NGENB-DU-ID.c create mode 100644 e2sm/lib/NR-ARFCN.c create mode 100644 e2sm/lib/NR-CGI.c create mode 100644 e2sm/lib/NR-PCI.c create mode 100644 e2sm/lib/NRFrequencyBand-List.c create mode 100644 e2sm/lib/NRFrequencyBandItem.c create mode 100644 e2sm/lib/NRFrequencyInfo.c create mode 100644 e2sm/lib/NRFrequencyShift7p5khz.c create mode 100644 e2sm/lib/NULL.c create mode 100644 e2sm/lib/NativeReal.c create mode 100644 e2sm/lib/NgENB-ID.c create mode 100644 e2sm/lib/NumericString.c create mode 100644 e2sm/lib/OBJECT_IDENTIFIER.c create mode 100644 e2sm/lib/ObjectDescriptor.c create mode 100644 e2sm/lib/PLMNIdentity.c create mode 100644 e2sm/lib/QCI.c create mode 100644 e2sm/lib/QoSID.c create mode 100644 e2sm/lib/QosFlowIdentifier.c create mode 100644 e2sm/lib/RANUEID.c create mode 100644 e2sm/lib/REAL.c create mode 100644 e2sm/lib/RELATIVE-OID.c create mode 100644 e2sm/lib/RIC-EventTriggerStyle-Item.c create mode 100644 e2sm/lib/RIC-ReportStyle-Item.c create mode 100644 e2sm/lib/RRC-MessageID.c create mode 100644 e2sm/lib/RRCclass-LTE.c create mode 100644 e2sm/lib/RRCclass-NR.c create mode 100644 e2sm/lib/S-NSSAI.c create mode 100644 e2sm/lib/SD.c create mode 100644 e2sm/lib/SST.c create mode 100644 e2sm/lib/ServingCell-ARFCN.c create mode 100644 e2sm/lib/ServingCell-PCI.c create mode 100644 e2sm/lib/SubscriberProfileIDforRFP.c create mode 100644 e2sm/lib/SupportedSULBandList.c create mode 100644 e2sm/lib/SupportedSULFreqBandItem.c create mode 100644 e2sm/lib/T61String.c create mode 100644 e2sm/lib/TeletexString.c create mode 100644 e2sm/lib/TestCond-Expression.c create mode 100644 e2sm/lib/TestCond-Type.c create mode 100644 e2sm/lib/TestCond-Value.c create mode 100644 e2sm/lib/TestCondInfo.c create mode 100644 e2sm/lib/TimeStamp.c create mode 100644 e2sm/lib/UEID-EN-GNB.c create mode 100644 e2sm/lib/UEID-ENB.c create mode 100644 e2sm/lib/UEID-GNB-CU-CP-E1AP-ID-Item.c create mode 100644 e2sm/lib/UEID-GNB-CU-CP-E1AP-ID-List.c create mode 100644 e2sm/lib/UEID-GNB-CU-CP-F1AP-ID-Item.c create mode 100644 e2sm/lib/UEID-GNB-CU-F1AP-ID-List.c create mode 100644 e2sm/lib/UEID-GNB-CU-UP.c create mode 100644 e2sm/lib/UEID-GNB-DU.c create mode 100644 e2sm/lib/UEID-GNB.c create mode 100644 e2sm/lib/UEID-NG-ENB-DU.c create mode 100644 e2sm/lib/UEID-NG-ENB.c create mode 100644 e2sm/lib/UEID.c create mode 100644 e2sm/lib/UTCTime.c create mode 100644 e2sm/lib/UTF8String.c create mode 100644 e2sm/lib/UniversalString.c create mode 100644 e2sm/lib/VideotexString.c create mode 100644 e2sm/lib/VisibleString.c create mode 100644 e2sm/lib/constr_SET.c create mode 100644 e2sm/lib/cscope.out create mode 100644 testfile1.txt create mode 100644 testfile2.txt diff --git a/Dockerfile b/Dockerfile index 17eb316..7346578 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,15 +20,18 @@ RUN cd e2ap && \ # "COMPILING E2SM Wrapper" RUN cd e2sm && \ gcc -c -fPIC -Iheaders/ lib/*.c wrapper.c && \ - gcc *.o -shared -o libe2smwrapper.so && \ + gcc *.o -shared -o libe2smwrapper.so&& \ cp libe2smwrapper.so /usr/local/lib/ && \ mkdir /usr/local/include/e2sm && \ cp wrapper.h headers/*.h /usr/local/include/e2sm && \ ldconfig + # Setup running environment COPY control/ control/ COPY ./go.mod ./go.mod COPY ./kpimon.go ./kpimon.go +COPY testfile1.txt testfile1.txt +COPY testfile2.txt testfile2.txt RUN wget -nv --no-check-certificate https://dl.google.com/go/go1.18.linux-amd64.tar.gz \ && tar -xf go1.18.linux-amd64.tar.gz \ @@ -43,5 +46,6 @@ COPY config-file.yaml . ENV CFG_FILE=/opt/config-file.yaml COPY routes.txt . ENV RMR_SEED_RT=/opt/routes.txt +ENV RMR_SRC_ID=service-ricxapp-kpimon-go-rmr.ricxapp:4560 -ENTRYPOINT ["env","LD_LIBRARY_PATH=/usr/local/lib","./kpimon"] \ No newline at end of file +ENTRYPOINT ["env","LD_LIBRARY_PATH=/usr/local/lib","./kpimon"] diff --git a/bin/rmr-dev_4.8.0_amd64.deb b/bin/rmr-dev_4.8.0_amd64.deb new file mode 100644 index 0000000000000000000000000000000000000000..863e2e981c32913d8da30053030f6c5412fa2709 GIT binary patch literal 125750 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 Wp&!%sDWszVB;VN`j#G^+r~U^_HTy9D literal 0 HcmV?d00001 diff --git a/bin/rmr_4.8.0_amd64.deb b/bin/rmr_4.8.0_amd64.deb new file mode 100644 index 0000000000000000000000000000000000000000..6017f588f64dc0a5b2d29a1dcfe1e21c832d34ac GIT binary patch literal 241726 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 >-NPZ^i4xifH2qZ)+yys( z3$goA(D}vSOJ1uU^eN4wV}H2c=#UVsdkj@Z5=VvNnPWqiwh1e4P+=(GyQQ7Ox=VFA z2f!BKKC0<7j;CRg$<8T?k3Wu$b0LFU4T7^1fC-iU5|~c?h<4~W$c0lm+ni$BG%E}4 zvCG&m;t0+d*?M!}TF>P=I=erO`yh`Xj&;DDbaMYy4=O+i4Mu^XkawFj2ZPR0uPA%4 z&$Z#54S>9s_Pc7rOO$}Eg1~1asBUk--*oKP46rFufNr*0^AS`6J%AHr3viuZlrXB6 zfT#_OT{a8DR6+{h+)r_-IWEq=%2rE&8$oKz&98vjmo*@#4|1@4Rh-JSAwEnBy!Ga) zLtFS!pz;Rwo)oe+PfZ9EUuq0{3^R4-oxs8S0=sz+OF)8=WOE*z{FTr+nrjCIqaCE| zPEzxTud|JTgLzXZ@J zmL=$Xy7SxvpBSe;n!CBLB#jb8Q(Q&7GY ztw9L*>#M(6ylY;<@(S9*zULK&2_S4C-8Z0f`OM9pa~u^mZAT$qYfUHptxI?8@ZLJ+n1-`EF z1&!y`6efI47jC1PJe{}pi>--|DURm>_aNOHe!0&@4kCx7*@9{ocMdBXx=EqWwoT3_ zb}+;s0*H_C*sigXn47U$B%cVUYNPi3t2gw?X6!OwIA@E>D+mQLJ>_D!l>#^7T8Qg# zd7E|d0S9sd=+TSvsk)*B_eA&_o3{PO>o8><*R{Las%V*a2jd{ZB-w*fVkO?(bAx(} zbzhu|VJmuy{v=S;;--BGQu@C*_f<-3t*8;8LhaS=UpuRZlOVOl9m1av?y5}`&@9Ib zae^erG7+Vu$#Fs75^x{q! zOA;?&YvYZ#X_kcP-tf(uIyuDMxRnS>`sE%aWDE8F4j}QFk+$-q+$JjQFypj!RtU_f z6@qzkY07%(bIPW;yiPT){KXQ?I3&prxqGy3SC9{`DUv{hN&sGvjb8$3f&tK0?eR-D za&be50Ai4C!ur|o8F8?LaeucH4OCeR_5=zhfU7q$y^pC~cU;y|yG z%i_bbPgaQCe;MEqp4%UFCvbCHbuyQakCrQ+aqbO)=QBICnh#qrk^4ZhtpaR6O6d7Q zM$6uWQzY zN5mHZq-SZn=kq=#w93V~CtzIwTAjAv4iB!2aG@etZDw?th}yJm8rtjJU{pEYqgNd) zP$!F(Y#K#bk{Ap&MZRxY`dsnSCQ)B-=DxfatPNMzgA#ya{8B^nY6A}5Tq7In;%qlBfYJvw zo|61|7w*)nE?D3Q+FAkk-rT1}%yp2v9tX+;;j}vmrhmwvL^&%g1o54_gowBCOf!;wyix&)pFN;x*AUb1)tR19%gw0djbsM^ggK2-3NX?1r>gAeG2*` z1?Jq?ynx}}{W#m4eSvAjqU!q=JwKEoLa%&UI9dHbrj3oy5Bmt`nrN`tE|L5swm_sP(Yl-q85bWic;*3Kj#&M>GYFd zRdP@O@ugvSwE)qKcnL}IHxTN243#GaezK%0RrDo;+2(h?D2|-atp^8u%=9^db|Aq+ z-so5Jg5v*z!VReBEa&#-kpjGhe1GospcVrg2Al`!WJ)aUzb3;I<{lA)MGAI9cI68XUuK}qVyXTOt}kR(Wni&=Oo6oF`c^0 zjBb%$bk?V$Z8GmeE`FWYb%*6E=lxT>cN#&IiiKwaXD&qdB{~$fG3LHG!vx(^m-p_Q zGd<8YjilF8Q{wZi8B;RX=od2VT{qFFMnSgyx^Ml4g6m`3{bb_9+veC3dr(L0X-}dd zQl7;A{{x0B{C~kvRmh^Ag~*1seX(ub^~TIUM76rLW%Nf01tj+OlLd`zFOwAe67 z1hJny1>^fK$fkDc()%5-UANt;iqT%8Bu-cu3VB|)1$(~>nEzWbl3$&OkaDFuY72nQ z^b&_PgyNGncqmLk;++`3vTTQ`I^KFf{n|Y`r~X(%p!66q`OmM_n-5J{!Yd~= z=-B=iW)=n0t<{*b%{QNx;POfjniHn)x)HgBonk+s%+s|6z7&3*6A7}OKCuv1+PVUz1`)Qh>3Xm9 z2=Flz&hQlNCXxx;C_WjQf-(aKRQ^}wMCLfNAWj&q zjb6%Q46Vg~|cpUe^53-jWJqjs2ehoozxN?UXqoHyP;{%FpOe0+G8V z9z}BI)kNMh1dZg>AmOHLgsg$mk9!t7;0Ey(PYaB`xH(Q*qV?$tE_V>s; z=)Y9_gb(N)jJW$k;!dbKJY!g4Z2y3mO6r~|N%`3$BoTcSw_La}5h(hylb3G>EItb+ zJ3kSnPIIx|GKf8E_^ryuc9C_B+NNw0pai(&$H(v0b9J9lW~yzY;gzEI5RAwB;)b0t z-Q&fYiy@cOmLXZuq1-_9z+S0+o+{ZGF*gH@RM)<>9($kBhUH`y5TZ%q6^mVHfL~Fg zWmeo4=VQZApM+6fA)B1_PRTSVpwBX!!EX*8k!}51>R4o!I`x6Y}xA!V^Q*4mEeGC?m*aqUZ<2ed&nSbIo9>}zt$;fJ(Uv^d$ z=>5YYq9D{>ChiM*WKvu(O$h)L63S&zJvd-agIvhM*^0~J4g3+_8vFE$4$efc5Ps#= zZi=6#!(4mnTPV%lDy8Fc7Ct!5v>rN=iskp)jTKEbN0g?x^Nt!hC5own5-3Niw$5BR zXIxAJ9V11O^X%vKT}An0x2HtVJ34q?-c^K$q-WT}*P9Bu?rV(JMaUXSzmO|uLg?dp$c8fNF2t7fQKfByN zsm$H*)}f4<<$p*`!*05gWYv6kw?dCIw}ak450JjHTKLo*DZ0XNIN$rdA$t?0NB#V%3Zpg1hX8Xc817`Xb-4Z4EUqPRuWF{A`VAne*!r zaBun!YWfl4bI0_jp?dnQgiPLygYOl@E);%HCr^%IzPF+n6fbK6X11vOO^^p-(be_w z#a!ou#l1S>aLs1gMi;BW6+@Rh?v&$ocE4lB68c3JF|FBj-nY)|W?)hbZ5vf^>zD}h z5Kk^Kke#E5WFr~!jlkHKl*!kr8O#Y)nOew+Zu54 z?OCbp%$Mdnk!_l1r$l91yh0$>cW)JKG$oK@qA8-|&JU;+yxEaEKz#|_5e*XnXOcix zWXI$gVWm3kH=PLuXF~|2N6brf{?B5#0yDD-_%ev(UBqGLI#>91V@LVdoq$oXk5YVV zvrpVaE`x|>>rS~`PFMn#Ld?e^>bu4R%)hDo!iV|d-$l9ig2^tJIGFTkgNDAOtwh@j zfBzYCk48v(NkbuDqa*t%G%9lB0)j(AdvT`jX=Tr-mA}2j3i^d^pBDVq6TuNz)@I{{ z_pcS{w=YkAPU@qPaMF;W!CJb}r6+n@?>}}AH<>G(bRDeghf6su1=&d^e;f0d(b1CJ zL~KZ=2b8F+3Kx9M14h_r|5xxqq+n_jf~ykStRpK}{11G`^DAoP zH(cE7!hcPNVS4+v{AW-gm#nu898<1oSC z3Shf1-C$9E(-t1w_ijX1d$@DKfUs07xR6n2+2KEuC}zOIwK%7FNB;F6ljw*yn=|`& ztDO7!{IPis4Mx6`e7LW*T#&0NxCwr2@irR;YUaF;c=i4Dr@xCLlDY`u&O_gedy^y2 z_6;v-zGV+6N7@@rq|}e*-~E<_-t)MQ3}+SGha37{W$9@M7WfDdg7yBUf(-o*Or`od zt_LzMnLL2M<=7%c`Mu!h*==9a-vDFh%BC@b8$LcYr&jw`%i<4j&-f9;Qmc{rdAZ~J z68R>2z=bZ2Ttr_)3V#06A;*ewGX1FLQ)TY)qRWN6kvV(c(iMX5GH|G4NT`)Ee$hS| z$=BihBeM0Gpm3{E@?#{+Z>DWQLmtcqmpd0J3CRnM2?o*{FS9EjPM9 zfE#M;EjU9>O`y*%Ay+agsB*2Q9_pf;F@bHyHMO|hrw&A3)a4N|hxjB7H+CLWNvVE0 z4>@1WJx3Uv6$75X2n1sz{{A|R%4LW8vh#JDC^{CgpL}h%a(4yaF(i#b?Hv5)n=>Na z@dc(he?!A37He7M4GTQ+=hBqlu!jeIv6U|3a=2;Pe$fQ3fHBN~Uf+_+)+ zV*m&jC+lCUl&Ee@ZfQlxGj$$x(@Qjy6m@@6zpsBr&#?#ofP+{`eTn%3DbntMcr#iSWAtV^8<+O z!|Z$p^v7Zm++hpI`C}$`J&Cdg$kbjpVE>Gp(*3NA|L!(A))|1?5;PwiQFlt@CDW7Bno_!s z7W_2npLWnEc0l)DBI-S**x>*!|IZoEPhNP2=tn|~nGNa@pDcE0R45#!r-kY<`!D#f z^YFy7hs@!mJ9lK7GaRHtwPpVwyNhT_0RTtAAA>9KCVutp`TfUs1w#c%{ikArRL&Z{ zALbE(4}-l)90T zA5n|Wx#&1Ih$0TiVwUPc3&SH-OolK_W>NbD8mP^I-xa%KuwuydRy>A~S{yDhh6bEJ zTU{zG3Efe7HvjUhOWxBa`qUU0Gp%dsTXd>qb!LNUTNk@%F1XeLIR4e^mgtOeU>vud z(&GQNZO>2-r)Cf;>|~bZ%s{bOHSG5N6u@tRD1_AV#y8m_(2MQURdAmhZREHUVf{K5 zQB6Zv{PtSMz)sT(FnP zZ%HfJa3s_4XG6G;{c!zA9QT!s_5!8Sr<3~lVU%ASKkc?WEhgaY9Ag*Ayzx}+^T#Elniu&_UQA+zaJi!^Wf>g1VF3D9Urey4kalwgu`d@F0%BMxwpQ z#2o@97{(}!33IWurxsYmmZP8|u?jdTh$XAG8!?kf24jGsL+}zZTL2{h1L{ zWaJilbZeir8~<#XeNmlU${8f>pICa3U}v4xmZhjzp1t#cYdZFlIa~Czz(lHMG%1+ zWnovw$!na6uOZA4oLuXD>3u#U=bS3cMVU&E1d2bTQYxw^rp@w$`*n|=1{jDjOMry= z5ycjCoO*xb5Lrj9z?pSQiOXgyj5%27-09+Dkily;OT#~yc4B2mm3ne~){)o!-0v;h za5b)_WeYRY%>?88x`$bA_&zhr`259AF~R4Sqm)%~jm<8Z1<~JpXItvlHp5MO#64cI zOSMIn{VliLpRDxPwuqZR4B)3y8jbifW^%XAQkkCEMMm6chNh-8BywD;uf*M*&i-vg z*^w(Z&kBfPgXEd1p}<8Fy??2%Rh7)w`lCiZ4l;% z6+H|7UQL4J)M4(^Q{=y+$Rwv?1;R=^uLQhm*=T&HT~e8a&7Rc!O6nsAII<78ds*YDbE<$s^sJURzBK2 zFNBI&4R_w}fHSsIPFGPssO8V0GuE`|av4R}BJTaEL6y^}mF|KxOv(lwSokJ7Bmc;W z+U8kv!sL|8bfgpcWQ5|ak^5}OG+<8l?%%*L{3C!98#1aPbrt&}1nxu|#7!LZ1l^*# zp;hQ9izS84pwy?v2c3#qZpt@Db8kH0ZOywZHNAY@R$sTMFkY3sPT7TO|80^YLfRs( z*e|^~3#ZsrE25o$wD{amjp$?`!QkM_D{o*y@!_u=6CFG8)zF&8g&#&Fc}uWVe>v9X z0y^nA&DUHe^wTf+0py5K&xk5+@WtnYP{4HrAq_ zR3L*+fX=@7O=@AnqRgSvv!(lAcLD1u$lgXMY=Q$L*vIo_EVb~2jfbkswc~U8ymC## zjLe}zrEy9CLRsRg2ra3r&Isqx&tx^K%O9%jti*wt{Y}UJlyoE!)cKr+8&fli26Aq*Y`Klm?%e?TaxL`llg!@|(Vq7bP3umYdtJ3si~8@e;3%Apg&=qH4; z)Q}k%dsW|~qa++s?3HW36&3${629Uq`@x0xc;I(0-N0{rMutV1Kx9U@b}DEw)#qx) zIxT80P+Qe^*qk+D9YYy@&R|R#h6N#Vy@pu5EQ>(DTk<3gLP{Q(PRdLp@1t4fM=C$F zwh^;+zOdQc>bWQUfpKs8vKJVl+#!#YtH@l*U?{6?zB=H|5%STF-Awn)9Ez#5^V-4aIwr`U$g z7s~M6NiojCS28_dF-47xErwW00?7FU3a-S5{)Wk;dkLa1W?X}`e_VFzPo)l@^;SJ7 zw%%DOOX|JPVb2+ymdblSYo1x~o8&q2qr-BwYu#<9@%8+*FBb~@OPcJ^J57=gZ^uEa zNq=i)4(U4jna0XK{tZToU`X1D6M6^c&Mv!N86NOO|}%Kqc0;43&mCdi*sJ>pPlxqb*bWGwS2HBVzgR&uJdeqk`NrPVuh~ zMx!b2_||0!mSusKkTRhYcP)NTr1ZEDa&3ixoAn>?xE5#?cE)Zo@Gmql zlyRqSg~cdln%u3P+^x11dv~n3Rofs;UKWJ#Js7gZ+cjS?(;sFNzlns{i2meAER`AN zCC;I-V${igsRzXK14c|0tX%3|n&j?^MrrsHByqSE$fa>9deN-TkD@e{&-81&(pTKz zRg_ldwdNPsxbzw#)K9~S-4$qCZV5vBkFn%JtOGKIA|{{E2OnH4IA_w?(Cb}dsE$jG_N6KA`6MC zkz=TN*t5?3p*1u3=GRpUIL&G`O!dcay<@)I(yJjCt^^mnj+o;(#wGM_jGeZhd52upL>@n-=x5 z-ta*5jU~NDvbh4=$#?S-Fnx3d2E2C4BKMwuxJ22`hz#R2E4DQ5GkSPXh+NjTq==Yw*kczWWSu z3JwjY{+0!lnxkBZf;qJX>-+Ls%s8ok4n||s+uH3Wd|$H>krLaCC&%*AB0f_3@iNGt z6%0>&Vbe+d08F>sBbgW|MJTkD2xI5IRh#Ddb{9+WXBW~(CY1T0FoWyMYPP4h#3kY| z?@mDL!FH$UFn>Yx6L&)=H$s@ngKXI*N02y%4cw0A<;-x@Fme&U-^X^nL(6y#QH@S3 zQqV0JXevk#q#zZvz7ro>o-RIn_l*Cdp=UZlT}_zNr>eH(MkJZ?oHluMGr4U-$vQqd z#*!BKj0Tgzl+9dz&3Si5Phu9LAvy5bMDj{ZFX5+b|nKVDap;?HJ9 zx(?zYQb^--+Ql(3v8ywW(6UJo>~Y)WGn`m(S5y?ycT!ahFVBcBIW;Jpb;bYdFAm&% zzt?zkGotfX>V3lDu(=$bQM9L{9@7G#OZhNlx^ab@@6;k@DLB_k_5RuKKc4&3o>#vjqC8X zjz?$=#px{sl^Xqyx=3aq%i~ovy3xC1{Z+c_&T{gSk5Xe?S3&5Tuehj(^RmmQSS zT+N!+CODFvjo4=w7*mz0Vk+6tO*XlzIM$7Wu=EtXG91aZ=2+iHcf8%_6>k91qERe>{k!lG%|IfdBC&=fO6!Fh{4P&PH}@`{ zk&5_-&O+j9WQ^+dT6c7R{yE_>`!DavTF?v{{Sx$cr#9^&p5v%)?4DecC#{$Na%i5y z@sC(0u$g^>jNC(rT1V;VMMbLbA!TISYNXsRwNXSl@`DJ&M=wTaR1po}UZy&-CUA&2 z#lRo}YUW*hN=8=J&YQL}s03*Wu5jbgL*)5x%pDgsR&eIDuhAzFkE=ZO3&MO_Db8>S zSFL}USIRTt+fNArAL0VGp@i{ckbWRR5Qrgos?~k_PBw8Bz8p|t8#O_t7^Bw((k}Kg|Ko{UmlTJ!iFB__~`$G-nJJ zD=gG5vnInC`> zS4*QU#!|OD&F!G3I;nwEg2$k--HG2sjSnO?!$kOgv?jwICU45#6`DzVbCdlUQxaj( zT4nvzor$1l{!qbUTtQ~wM89K95Mnma;lAUk@pA)|unW)L1;Z{Y@8EgPitJJ=j%jN3 zbPUd6>e>R-AoZ)UxV+Q;OGin(=NlOu62JEr?^Tk5CuWN?gLt-%;a`jh7l}7&NvHP6 zz)5kqNcwkGJi1H@M|s{_s7QLZ1?Kv9FUQ9$ZinmMRW^&GPfLgqdyJ8;2MGnT#VxWI zIhF5Piv<<_NEA0z_*voYDjBCm|Hf?V*JRuNFmal%jP2ozB`~vx6ve5T2l?j;&WlVk zm^!Xt&9Y3vw%b(?5Mm>D#n7@a(?PX(L!SxN?bwlh>H%NTU&aWJ4_ih^gKA|4KYcBQ z(k%u=GJ0O+ps(^rM2t6t3JO165f}4$5TF@nkNO57vQDwaVv(X*S`l_9n;j^}PO|2I zQgP;{!M-EZ5Y^BVs4?j=7)|^wagwO;(GC z1Kog#;+WfP_qk=Psyi0S_n!6Mwdlj|MQ`esu`FB}2)}XvlZut-F5vcUtyry)0^14g z5Sx0YUNqsz_?1)dM`0>amUg4X^wktMoqdTP^5t%KLN;j9A{o-jSIISC(E#1jDdFs# zt6ro(meq|$e&X|9^3z=3cVTwINIHiKH%d12{UAxkrGS=4?A3h?3*=&#(JfEcK`O1Q z61qt+IqXh+@7Iw*@ctRoif-Wt!0Od(;%BAxgbBJEc<##UBy{_%Xt zEF27+E>J@5$L;9VgkwVW<#I>VOV9(IWQ*%^{DW2E!s^;|x*PDve zy5X29gCW!6nU|~i-alta^kP$;C(o?BF{fhDy}*<&L zeFbCiY;Zb#W>{cL7^NnOF!aD z()&#$m;TyQ+FocNZMw?X7>4M`OwWW z?E`X^U+zwRd1z6@2PngYL1OsQ)sJBV{!4Gv4Ez=;{a%V&{@YR9_{0iJ75LmvpdMF; zjJp3qi89gR$Ds|}np+}IWe>e(o{KLLbsjZVyj>c45e;YA9SEo-`9T2}Habfz>NZK# zGwosZ44S@(SiNCV=9+D2spw`o>Il5bMH7`qn>^2Nnb#}d`!zRA362pmWwNR7IgO6% z>!Y$O<#5`1Bo&kc$VurK*DZM6l=V(K3Hb8pzYQnplowey4Yf+Sv$HcGhux}2G1+w+m{4hJ)YfY$VY*`XeEiaqD%k&hkm~#UGg^|B z`|w~x&UDUPWvee+QYX>4&7iGvdF0A3%%5I6p1l5)M}t;@K-#_r&Q0Lt<<#AS3GWE~90|{vROydf(3ro5n*dvn(i* zPW+}yX6TYjIx`+2*4%hqc&r@di6zuIvf9jts+}}(GDV@TUuu$hyv=!M#*9_5SRn@A z&ra&7IuVxovThTrCw_6Tr?Bnnedu6WEZrHpdY;Vq6^|a9&W&x97nY%M`*r5q!Rlq% zFQQzgDbe)haic0HCa1o}kmj+-k6*G$#+B6)z(lRi&3i-NbeVI}k}T&I1Ke!4-5IVX z`$9T^14{v_MZ#J)HSaKu`Uxi$I3|{vPGZ|IExR+d#dRtJgef*U62-hOqH@lDf~*Qy zy$s>+TSe7oT}rHz5k19eNbid$n0xyP!H6G<{4i0>qiaXJ5UcAal21)iA}C`0$l_cK z;f1JnkgU%yGwGe-@9V|=dsGDH=KKjI84;g41;30lxe^stOJj)Jg9m-0nQaKQS}MU6 zY(hU0hp1COT>!T1VQEDzQlFKV)#1PKw+nK5pUs|#u<}w(KMPYc-KgJwiP506UM5<$ zr5YkUD1BEL`jc0d^f_+;MT+^KM}$Vx3iT)BXh!fBKjd;uol^OsZN#1T0E)~7G`!DF zi!A?4J?5Aa&nP0>#N}5fi zW}mBp$4F7~VS|00TNK0j_plrBmWpB^`neB}S;+Vd0fg$viAkOJ{CL2oSfc zVC&au3D4SL27byQu*+83y=zsWwDi(NuF^<2iahOa@8SylwGwyEEaX_x>1FX`IrL%W z&Ca9c(DkN)QRIifzAW>`3Y5YIjPz}q+GAdh=B7paMvjZKLO{VH@5KMgF7>x^U5vw72P^R8$xt(6_xHjg#^iJj4Y;tZKnTO2mg(Q((Y_CWzQR*ugPE6#Z*`&k4F9M}Y}>im{l_7%xVw&5N+IiZsg)nY*b z$&VP}NQdJem$vSe@oPJsADl6`}DFdmB5+68lWs z@<$wd3{&wsp1D7?^~+Q>F_M7qY~4`AH27`~jvg*QjzTa;&Ax~)q!o+oH<4hz*H_hl zP1akO`=y^c7o3wP=JHwT&FBG@)%)=`!9C{1PE8p4R7>etwZcmdXGnRmm7}#K(6&~S zSem9QU30Ig+7e8pDo1D81^9BMx1+9BO+ePYRb_PsA89nqtNUy+#n#;Q=b=(@GV6*& zRHR7ykT_euaCz&Eez}cK%RAZc$BkUDX897X7klp_v7sxb2ygsfyZf*590^_KiG3S! z@sB6P16-Z(iDN3I|8eyWK#~Q`+VIZo*tTt(JGO1xGds3zd&jnIYsa>2>+gNvKkkkD zMO5c=vMTebIvstgyHD1sjGN!)2BgXTS~~i$BXx|Jquic+xAjiKXz>d5dnt`&g7NVm z5gNkI-#e6b5a8a6X7bUqL*ysfL~#}&VlQMFTHZ)_vgr~z7P!td`H0aix{=J-G@syL zHmT>7%h>xUSj{p~I1 zk!cS#we~I9G~;JK9Hlh-T0=&Wce3Wy8850}1WG%M_SDFP4{mA9vVa&$3yhFKxI#R9 zYi=UI)4FB%nuSA|hv_9&bYSR9g8ok2wt_!4q=HUhGTGC|TZ1 z4qOkUpf#()6(R?pDF)H?W`7bT6`LH_e4yn;iSKx+o7U;;kC7?&!7DCa?%`E_-D54p z{nbY`ob3ybuBR~i{fimbOM4DlQWO7b-|^#GEgf7IU!X||AYmD_u1Fp0Tck?9h0>(+ z2d-2!Sv6zEiqb+@o=XZH8B?+&kGfKE*Ljw5mh=){(rn3( zK!)VLgZ;Ts=i(PQNNtC1sRy|%&4!+)x7Ap)3?9PE_;EA3Cy1MGNo1*J9t_60DRL4F z(07F6?@dlAkYKhdz2M z)G$lD`PgV`9-yNR z4~LJsOUz;aT>TbO^-G5kZJzQ3eY)cO)gLZL@s8OvtHfwCI6@rkrM zB3Q4S*o1J7(^RKW#bBlGd)b5fgyv}WM_HTVY9NL`H@5XtPYx$p@-KMh2f~{xs6FEfdKT&A?F6 zeJ@rsf#D@6IIJRe8Vqxm!jZ#y^Ot@>KA8}&-sp9XeVs3!1vi=I$}hTxx0A*CH&(>O zn($H|8R17OqH;ZCjZcl;#atU@{+f`m^8J&z&AXie6H|I^5VZD=leRqKaJHc+mFZ$~ zvG~y3Ae$Ps1*4L172rGWZ@~e(Eoe7>H~MH2z#1ne#nAqhGylm z3(WcpYwL(|Y7y$pq@tIdD9xy-VN&a4Q!5VcAp=@UMhtn`z2$Z<_VLc~Dt-~|L$=$i z-TQj|R)bS`;F{kKu9NbWb9jLW9VAuGbdVn~rXZZXKP?#Kdfu8%=QwqZDnVNL82BOOyv@uQTxtSuzwqjv{o25so!KSIu|mQR-rQ`7VcpL9J% ztUv%^3$qV^<41JkE*tX%LBM}b)g`}e^53aG`$5oA>WtGNBnF_9|EvX7^0ru0>-aM*}vl7K(lK={mv$m@0-6%JekCMhNYbAw?3I)eJHSD zisp<9zsJUWu6%>?E+ymD#HkP-(_dxG5oReP7C~prJa3=w`x{f4@pSwI)NIFcmWzaz zJJ9pJF8JZtOUDsME+Z$Pp|pV$)Q4Z4r#jTIEdzeJf~h*Lm1I0+CJ-RmGAF=Og;!;F z1+6cX6#;x7C8}L8WMg%q zADUs@o0Yuai>P7WYwv$a)^q4-1*TWr8Lw$Q#^k?3iI#?Jy`#QraZB?9FzE`!xsLLJ zMN5)mt?S&r*!mGmiFkZaLdfm!f@nvgUi+sdIG`{2uT%WTh@g^J z_74e8y5RPk<;>Xq`K0bwfv}U}gnm`K|IG@z97$FwaBQulq`EhzAt!&jzL3P9Ke}3K z>z5O^DWM)Ys$(gMSMLoL|GtpqV$2O5uVXpxA!q89_EI% zc<~KVFQ+J5f7$;$CU5cUFCok#e9^AOe->TI=o=LbGFwR@(DvskYPJnR&+EFkxz)F4 z>`!i{DWsn&&QZ5`$LXIy(6t&^jzdZz)|ScAaek}eA@X>Ky@mJ%VLJoUnl9&3yx5sqw$ASw+kP*$Yjj@ z)3mjG`=gqhoq91258W)x;4z{-kt>fF9in#0)&w#hT85-qxAd zS*IA7u4feH-!JRo&w`J4;r1#N=Bauqo--w%tr+Nva z_CWV)3@Dw*1hbt^2euWR>mAu*vHvUGGnxFWr>khZ@gkyN>t6`q}s&9xd&~2hXZ= zu(z&h72%%iVjh@kWfLfOF_FRsi+=7sfnD6}h(9+ms<#!gySRjm8{C?xsHeD#!d)ZW zXAw+Y1+KxagLVq&TZnj)*AN2Lp?Z-3XLjM>PU1rBEyR9ovk5<x%#=^a!%8vzwun9znrfj zqS-nN*egdKW4^|_3Sg3cF(gV7mh9pR@Xc`x{=JE5U8(<~y*}ZdCA@~%-FFu=uK^79 zL!hg`*Z$f(1GI;K&wznzDgcqqZ|BnpxW32gO3()g4)j?Dth=`>Ae7zY9yJ(f7nP@x zGSgG)=kxuEcV_)8$^L1M3@2_n3a%G}W-9{c2KFl8FORpW(zL~>SIKVlf#FZJu5+wY zpM#C)h$}QX-&)Gh4!UQI7+8nz0Sb#-I}^qGZ56;i8iLCN%aW@ZTtnutvK&x8HHcd} z&UD`|(@jK6Sp%DS=Ry0<4z?}%y7bu$q`qJ$bV5Qf;3XqT2?%3MeQWkLrH1JUV>!Bn zNUsmOx`YXb@Q!NNhJ^9+Jp)FI`D4_=MbsjZGYEA~POZf4ii4`qvsFlSO%Zdz?4qj{ z?3;Cfv7@$Jg4g z)}Cha4ZXlFrcYL!Hm6~nS&Y`fNDbM8=ciiamCxk zl6)fOE6ZWAQ%yT5@s5mFpWOa%o%V3O60i>Q9Yfn8gEExbewDeiU5Dz8{K2hN{RHxS z-3mO=({OxG@WJgl+S3sFABco}b!8;{rXy>FLBT#s9JEjr7@A9@gS0@2RC zK=FJeOZP{sz!2;Nlci2bbdqGC_McD-SPFSov^gEKkNWwhlsMR4UmOP66g^x&p%wH?4aKTtWkWiB z!AwWQxzoX;`K<_UDDIVu+H<~<6*W&t>5_Q#Iio{lfn#>S{ZWUu(_#$BHV>r+?~C3^ z07LsMomI@7vv?pqsPW@Y0h*f^QET?!ftgKSHpA$~Z`f^q2vW2~w4M;Shhm`-nB5Zf zp9!pVK?Frs(+yJ_U-fvCu_?%<%&JZ#HSr2JtQO5rXSrmC$O+P)?z#b10*}s8ayyYQ zxKXuNqyQ{wKCqEc(gp8<0li;qedoa6P1LtYyR;irQ)DdFwyF^JSiR1#TTV1Jp%{@# z9~Y$i&MhdK$W1FE%I^3GpLa{^_?Wg&-F6;^mTv#3W=P#`qFS|W{itTXX4dghTl6lT zxYqR68$EQb@=s5o>p8E)={UXX=m)g5PFzE|zUu7K^-ymdx@K#c!#lm|yn?cw+H@2X zQ)v6B<@Ndkhyau-Aa&5G+a~QF=8g8RIt@!}g%j6Qi0v?dmiB4W_78~uLowOiyN;t@ zd;#HY5KyVxtg(@>0N%+%*WkAQP@o>&b)fC&7XbXB5z+qJL@VeS3>aNhEuc~=HI1&v zY87ez(3Mt?NaqWXwW9B?ZNe7`K5*8;b63*kbLJc;B6(^Lp0ggWcJA`3FcbljM^TtZ zJk0?J(Xd<+UUmr&SZb=!m0p-l4cYCZ!3pk+cX)F!1P6{T&#OP(Aq=N8p3blq_ro7-m%DN1-h%Kg8 z6-FsvY%b1K1iQkgPx#pde89NeA>KkF`KMie`x8!O8vgwfG04HsIp-URwtjv z#Q_p-05C(`F4=<<$UjAZ$plbTD(@DL{QxuzpIRIhk<2oK`d0{0Pvk*E$^Xm}tqCPy=MYS#5yk`F5VCr0d6 zGvy~;A_iT}Bo4e*+*Si6@>;>P|L~1bhde=(wkUg~(u8&#hjHT2X1Ke#J{cc;X^vuE z%<4s zTcAu_GOX>fi5G8ghPematwz5S#%IGHqYaa$VmC)#{r_8b_B-(qWFU%FpSmgSskQb} zJw~`yf4)&~BhGtsdgpk6N@gj(=O7gw-Mv$ahDXUBOtJsH)nu+2O{Kq6xi3Js?A9)x zd2p##TL5kw{gp8#;OdkB*}fh3=RB2$hYX#8jxHNyQ{pc`$Wfh;#S7N07&Il#U9==3 zhIuEswj0X*A+L+Q4HI!d}0PAg4EC#H1$s(YF z)R4XtuAid&^$Sw47}1%-1303%IHI6rL&rV(@%9M(pP=3C@X`_R1BEXP{{c7T#GCQ3 zU#TygEf@&s{Ld*AKXvww2`9CUiS`HnlJddm?EU|MzJX}+N9sc`2(*1LG*9Y-$e!*m zsSjg6@c&rI{B}>TdEFDqJzyb_>=X8^+=@q9ds=)`E2+Lt${f`6Jw(YWrt1v8KG)4^ zMg=kL?3M9x)}%KSAre(;LVr=V(W!_0(IWoiBnjVh+X&HDjy`uoBm4iB&!DTyn4dW4 zPWRkEfGZjqP!lB_jMU!g#@9uWgH1 z5@Mk(FZoaR-pik_I3(c5&?JOX{=%SNxCTEL5ZMH95s?=V8UG*fcH$_td)5E*1++ci z!-unAw=DaR!zVui;w&sJFE$7Oz8|IVIPeSXp})MHFiPz>;Yw?EU*18Y__^+$?BxO9 zMauV=pOAmL$zc`%D=XjdWFI_#1PBqzZv#d^3jijd1z(xl-#}-Ogz{n$j2+y;0~bPI zll32=FlpXBt2zhLx4AQqJ~EotQlb2*N&3D|Bg2hTd~ZfZYo`1!`E(^VPeQ*W8D%^f z52$V|)~+8Bd<VZY=06n`#AtSn6wIewvR`_V@6%-T z5qOLsWV<)Pugq+6=TVz!)E<5Yumc&xATv)GOh>%`P~upbGWzFO+TXHd-+By)JUW52 zRr|8;_N3=xT6*weq{Ljx>Z^9u`XtZSoy(b!G7v3h>z9>wgP%m2r!Bl{dbY%@TF184jSJ z_$p1IaobqTk3A}mEQ%Piu@B9cmWru-$wYrOS!idC7&p2@<&Enpa}p~T=Lh_jN99Mb zrI4)h$ZWZkW;wx7Un%M)v)jX;j{@73&0olkEC~=WT*;Z(2cs$K3g&(bB^g04+0`06 zvmIL)Z`>|;z+3$>y&qVAGSFqAH#pD**jg;}iFdH4%u)K!(`Lwt5R+#16W80RR()`? zg|G0#I#av$*k8o$vHcDcDOu)@VyZRsG1)Do{M3M&UHJz#pi)Zh)u<9`k%p_JDN9u* zMS8Utt^3BT0qz75G`hJ*`|PF37R5Ha#}+V`R{bsOUe%c&I7 znP0o}i()DY98=aRnNt*AZ$YZre0eG*a^{Pe@l~3btK}+)Rb0&VDk`QGOkV+RKs9f) zBKD6#tM!BoBUMuVB=&iw9e*z#4$uX9tG}Lf6eu1JnZ2^K8z=F~a_fd`2YMqCgJw{z zxk=XR6>f(yl$qFxzGAtJScdz0#R(}m!@ZJ-JzlO8i06OM0=B!~OTt4+QZ>DW^A?XPAE(*M zh7aGuxtcmGI3t{W_4Ful;PjG;5V*Oq2?T#QbOk}SYUnsaeKer#vgp+7u{zP3UZfbV zf$q?~bIn`5S`Y8pcw_RQ8+Nv`{j_GD%R28v?mHW5%ULxo)Ev`_k*wajY5s$vx$<7H zx>r#odlWEV0ej>|Tpj;LiRD%W@`JPnO*pez>iDa6?C4HC&|HaQmP~>rGSMP|OiOvz z+FZ(qGc0G~I3mG5Rf3}>8*hxw#Nm=p4eR*Ztcdf|F8W z1~oB(J3S7V0rI;eda{MAm>?r9z}yfjKm0VD%#6tJEpLJ|G|l`bJoBk25@GN{u)`m` zF0OPlN*|?R637*v*w91|@!=)wrvWsX&|6;-it!B$ZQB~d48->|*bDQT*3?q)rS%1`JML{1qpm9dXB`;R)A4dGck=`d>v*5@iFD`LAX#j8y zLC(RTVE8YX^Anl$39f$?PC99&17ap@L^vFgO`(t_N3G^=^utX$DQ%cI`8JJ$5fI9W z0yK);j;{Ty1w?Z885InrW#;N=V#ARdDqiSJop{J3X;eW6vH|vWAb7XKM)`vY3!)L$ z|5%GkU#eICG1VzMql#2V0IFmZ8Yrsh@sLSV@(eYu{?V%YN67uMiv+YyDb6OW?*V!k z;$cDnbU?iu|Nc)c;;APGc(7@8WfH-U06I9b-+KBFmLGDFNkRhn*Y{t9!(so#|2ri> z2nTS2&B#+G|1{oXYQy{oq}+M!ADezp{x)UUs{igV+P-k4;f zsBk2${sC3CU-9OZ$96b+K+a>Id2qNQqRTQ z?p|jQS~b8k-MqmMyezSf|G~cCM6-B{4DPMqfeC>jug(7!O{E$lv#xE(%yZ z89^YwqY$kp(C_VT1zi9A>*%2w7*foV8SePz_YoO4+teoxx z2gYI~5?+^iVsZs3E*cWk&U$ z)9?fX=`&vE*SI}UoIjEK_2kZpKq`Er#8j!qBSj9;6mT}mPT?rxE% zb3Wab(s3LbSKmh>Fq}LC1rssgv#SgarVY@58VvkPlveaN`iX|Pw`sB$3R4fF0mZ;M zw1X{$-T@w{*SO6e97sAPbNL3S1}KdNo)~G0o---ZKmo$41bMNvY@MDdIC}h!$5!k(Y%>mz5!m#s}6~I z=lx?{m&7UpcTzjNj_wJ_5cy)pCotc^5H}Efh-;V_BElJFr`Rx8v?msWbRYFy8Va9b zZ#Kf4E;yHcFV8v3VNrXeHNn*ag^6>J3k;77AOdDDI9ZI@tGyyLzBwz^b;R5-=5KJ& z|JIBtgV8+I{jNgAtH*TN9s<|+LBIRpudl(^~Qg9PNg47rN{K}mtX+E zmw+aP3HSQHl8A>G2;x#+Sy&SJhdNxc*b(`UJX}D`mka=CcpB+Hf?R|F69ouC7D*e`5gi1ev}$cf!IuMLi*aR9qoXLhT<< znI*SKb$=QE5TnQtWOp}!i&$vrw#y2cK@=DCjGc0z8Bk@E!X+5Lj^s0X8!QHf1fWC0 zYoiCSP#nhd0=f;=9+&8s=qZzP@q6X6mB*QCtyUa$ z0_LcuapBPrS_!wC>%!H?ld3XbKKax zUL-*<&OC(!TkJ{+oRO z$02TD9550c@q{K3XCKqhs+7pb10MnG>pHSfzUT&#msTuW*|7wZ3GDI%SpvqfGQ%ZG z*#i){Sr>Wk`A+z%L#pexgqU3TB5$b)U3f#U7_yg_yN>pJa7^zupSLJqeEs~jn*lfQ z2tIR9DnY(sH}lOvLAk$PFzI}bV-dcJro?UzdHl-Zs9eIp1?XZdh`wBjyVYl}$T^(& zSYa!iA*V4=^@^q4{t8&sQPCtN*t20_jfjCL6=y}H2@Q!FvUp}0r=ZyYv5}^FB_|Yr z@xlq_mUGWiD&>m%xfO3+3$B)p7z)^)Z3&-@E+||)s>pi(FghN8ShNS7Q@erxksA^n z@j#{@fi$5#kKY%akt&~mZmhoF>N>X5W=bfonjtyqYErzvH|lT(y37JH#^1DODQkdS zhp;oQ(`U2CW;m1_Td!mtEKdK6WBuvfZR6}!#i!$STfmHOS<#Z%a>krE+)}Poei{8f zNbbf+zNv$>%1id#R=}#se4keo8+s|=j&{Zb zs=Opk`Fo_$Bhor|=O*R+z&Q^Tz2G2u-gxXfjWl%-i?oJCDj=8IM51pdIUpB0ISX4L zl-rlxRN8tSmW%;kVC9^C`mXU*i6|tp=8e`^qcL>wOh4>G zt5jBfC9gMb7t3typA<)Fy!a3w{=&ErX4aS4wUfV6;1g^w33Id|GXgc}Prf&%jS6zS`ZoI9E6~3aOgEP88h} zY`k?CAdng8zj`*Q)THEzo{aK9kL^jL;`oSI?Vac~r_O=yE^l}dL%B+LtOh;oP$`Io z4utf2#do)JhSH>-yeDdajI7TYJ?0d)>s(}uHm^B)9V2U!v$D9OIKyJi?kV-Pd2bwE z5*6W<8U|l$IM(lavPMmM`1-tD^(<>U({#p+<)7z`o|)$-F0-?m`Qqf-#lhU3&-p|> z={Ga^Xnq1bjDT`H{xWdcZv@(exiMBB7UUES;+O{A6GU%RazmC&o?4ok_W2g;R-mU8 zFb*VmY6}OXUOTFQps;%u$9X1b1n! zV@W|V_}MGn-+|0~j`fZkkO9LZ&JpdNpl0shM?8Cm zu{+=3nfI;Y_$Wx;j`x!deM7p4-lh$4`zf65nufIy%+}lj|KLT%JuG19!{bJj>hhrG7gLet3GAOiE|sUf$TI%T)Cl^Cx(caODn#opBnqL@Iii(CqeT>_+a1 zUb)xgR>W)$x#}Z+{sliL%Oj(Qz|l4Uf#d{pU;ZwLy#!2#x|u_HzikOAiGM!B$=sqF z^9>3q#gF79=n`B;%BtSl#yVu3F~5o3)k_a9AAS{nfBWjt-3?`0?}PlF3?#7abW5a_ z{U!8Ol!yFxO*i0mrLxBFefwC*p=5X6saZ&T8j(J0oF0(A5&s1^`-rAjqXD~&Qwhm1 zmo_#5zaSF#P~cV)u{mOXkXq!pA8UATfLWYnx;XEpO(74EZ%tMxiRm^uUq<1GTExXx zr669STQMl~E|~}fbKk^ghTqo_L;6eM_p}DYH)O)1wcW21U)>*>MxJ211*6kR>MI*{ z2tpS&R7r^M&rB4WWDuRiVczh;TZe-eBI0VwH@0=T!c8OPR4+zP(6_?-a>Zdl0n9_g zc}@tdTh4;*x7En~2G?8~tLw@>XP>Vt8rc=mvr6y3`0A}Tl-IwbT4Ijw!-l@Fc{r2B z(g2Ty^C86!uB8&z|Kdh9n)iVuf^I^?nQJ!NRVjjs#&+~X&!O2{oczihk80MUdQg@X|wB)Tg*e(~L{_Jq;jE}DOA4pYymT>L!KGNIM)S>uu z&o@u)i7my1Q*GCo`t!j%lZi8B`-LsH5#D)d9R z=WVjs;Q819)Ny?e%}nm@y4~}g zPg`_uH1>W^q&w6@Cj3YKU-sQO8;U9TDD3J!z`j>-mCi7wqxSsd-%Cf*olJCh=bvKi zW=Cj2`Mzseuj?Q357ASYI?e}qG+>w$oHvL6mfM1YBkZ+~B zi1oYAR7m*NAM9&dZH$Ur_s;gB+9=!;I&Y}v8I|NmkwKCck7!ql_PmNZmoI|z2041?LR@?#X6^H)x; z5wNjB-j7jF6Hwnc**-R7 zZ`lKD>T)}CXRMdG>ciDdaVVzWh>A;>iPUM1x)%4Kqey`jQ_XJ9WeTv8NO9uDoMeQbq=dg5!_B8^gpHCG$|Zzzgb)5# z#4;0oXYU^ie<)t3+2!9>zV2bzd%U2>EOXfw2Vk;0j_L?w0>0f+BnO|dGKWBo93|TN zKxQ%gN;68)IIBman1JP z4;GYAzYL6v^PDLacv!z3tEAt0Oa<;p!6?oZx@4P&a@wJfM| zDiHC7T2cw%bDa{3lO6Teb1ovNkjEPkmRB1(J7f?jr!|j0rO z9-2xBD+wtm#@~fiS{xeOrH!`{S(Knxh{_;78VidcOv9KkW3;Onf0*GCf#9xU=E>Ga z_=K~)1#2vbFhXGE*G>Hi7>qJJ2I@S*SS7BD=S4zaC61Ag9mM8M(0>rmpCy(+UhL&m zfYm-}I9RCVlM08nQn0iHkyG01ZzrVfEGZFv`pso0m2}HOTuHldAWdb#H<4hRkC09_ zHmYh`lJ-F@8AFMm!GEQ6Vpvc!5&V`#oM_7VndT;dAmifO(@Zc?~s8JX)6N4k+LJ7Dkg;>P>fg-cSF?b1KnLa+dY*hIrJN32Lqk&N5YfriN{Ev|>N zhh|iB*Y!z@sex2LB)c{4pydP1jcAMd5I0*J1Tz>8<64MVD}n{&S%?@0iRrIC05OOu z+G~K}{}L`rV33c<5wi=|0#R)r8HdAJuS6u~Vp(r&1a+E{fM$VGoFm^cPu%3GSoobH zPG0%~l4lweJ2NRx9fxW`T%287P)}?l1t|^_CkVDp2wM}TMqL2 zs`2J32WxfnG=4MN;I}JTJ2!QGM@g5QtC^UKtE@5nvFMZi7UY!M7i9TM;nQ8Xm`UMz zBGT2{-!z(oxeTNs?8KBxlwxl;-uG@Hx_V-#Z7o?~HQhqKtX4f}B32WR*6f$Y$5-Dq zB)R-eU(w<8{>c4%*nzyvq<1mGXUO^U=Qm6;p?N{?1m0D0{B-7Qhb+vTleAi&H{)?$ z$G%?FE!eT$%{Zi0*s}OdhM|)X76{8d!4b#~LgIRCrr6B*5a9#A^e4!nkOjz!0Mnn^ z@psaE{%MLtMd?_SO_cF#Sx=Ctdn4n2Q@@#o>^vrNFnNw#+{7UY0^S_~SP@`nHV4o-C&!OTya}08dHCX35Bs*q=ilC*U92 zf|n9lMdg9kg`f?JoFx(~=I#+cQW6%*<%zhQgfJ_{R3pnykX<=t)fSLtaPVmpcaVEE z4E$lr%VmmrKiI}k6x_L9-E{kAv>4?Xj&rwu5s!ezmxu}Hecr0WTqO?A!;@h07!1dA z;3V($Uil#dx$P$oyX}{T)V&|a=Ad9!Ubm5GTM5#2O%R21p%EYGt$Cmi_?TXBUK@ow z5vx$pD^lJOKNjxDgWp7BnZEI>n>n*0&CbLj}$Iiudnr#(L z?t$Nn+6M-|vAx!pkMp+%x=F}M$cZf%n#v?OLTB-YVLwYGseCuc+*umeb$9aB*|DcS?rO%&W}J>29A{nbWK? z`08GEIub2jtust)UQugo?>&am2zL+a=zVX|lwcGQi+lfQC*6w9ju!qDGKVptExR_i zIyYxOSEHzEZm2NwHgez%8m6YU9ribjZOO~43-2c}(DQ^Ap|n;&aV=;mnAg(Uo?WD1 zLPDp-HO0g$w9bjnSsSjdR;4oMIlo)i==G-u9QbEm_{ zUX*pI9>`4`#E*D&|FfcTL~p_wxaLLvd3NmaXxLn<-3wpr8P}pGnOelrF+D>e~`j7O!ll zM>gl0^IRcczTZ(DKemB{$1BE%X7QzN{CB=hY@HCT6U4wMZ zUa){t?hIP}5h875h?p!F*d#qI{;Z#WjJu{}L?o=tz#%6-k%8=$uQx-8nYG^)2ci^X3)D`M0m`s6c<<8!@K4M=*0QMDrfd)cBEIxG3RqFY%5;c zJY^;#=PG9%8_|$a;H{V#RXO2^5-URoOBpREG3s=VoV@5sbsZ}!VM1owdXfucp?weh z+btwX#{Q7ig@MUpQe(`=IFqOhb4+Ig5UZ~KH$uG*SF}$nb|_hv%%q9+jYV~_e%tDE zOY1aLRnHPPq%nAiw|)v2d0$qR-@$+cR`F;D1U*>`Z3f;!{xMJkex>0UKd7Q@oU^C$ zD9AO}fjQ$`=T}x|*CYip4UR4ay_~O};NXR=i{lo!J2czRI|+nk1$i}z&a5wNt)JOg zF{;X$-E0N5c!=O@3p(WuM`#{ztALjFGh0S@d&|Lo_7SWzt@W4+Q@etBLQtjENXF9g zF`*$Gy`L{3sijQXxQ?LuakgkYgJf8T}I8&htj~@M64wZ+B00(a_+Vc&-cNYYuU| zXQ9_z1*sLJfZ|sb#uQ`=x>!FUN1Ig-s5AaB5qepab!uNlb8(A`mRGU;bed5)YeRU` z0$K5KNy(i9PjedVnVwNitc5fedr(a&lpD+Gs5$T&OJE}o2L0fMcw~nd^#TFhEqhx& z&2uW1Y(WKoZ}%2^gNv!bEJOo%Iu zy|Sv{@SvwXtz-E)q;q;PxM>=qUM3p7N>Z+&&QkeGO5{tXo?z>#RGE7%frYN{T2v2U z;Qrow|GWW-sq3TSty9lTemK(|@1y&Hxr)M%kNO3dcxG}-7J;4Z~Xc5BoL@s zMe7uY*kgE}Q?@Fp1F0nvuC~742Y;{q_?$^(d$j(sZ0PeM%+^TF0#u^r3auMRZ7f)| zc^8C+Lqh*xf6}GSftKIawx?Slv+Arn*ke*~Grnr1!P3TK4%^(HZ4(kVFNf(xlO!u! z4_kZcuaP>k=asYSm=m~!nuw}#gQW;0SVL-$grsbgs?~i$j5z+$sn6VB=be6uE@KWO z)=Fb(YMJ6&SAibYBSUut+v*eKuL|^fOK%<4CM#j?)yH2$KQH{67a%QCq5w(VhouEI z!>x?7T8W181%4%?`#v=}TSH>Q*NsM0DbJ3Au4!Ynnb3r7mHxdxrCstZrP0nOH&J@e zFBKel+N5*i(H6lF{(7cV>y;-qMPYq~QgQaUvh``c9T_PWNSlABzW zsxTj!`1_rDMrwX=;)?n;03`&26^(ifk5WybWxG)MSfD&|O|{@!v586L`|!vTs*dba zEwe)7Ft&-w&uqKYcdcgu2heQqv#^EDP_CG@n%`4`6G|3BC`4za!iH zOdkt5K1cWu{GzL3z=4i83O!M=pb-9Ox3+hPN!r~r;1C6>$4D*;$dW5(7$Vy4D(J`3d!WoVVL7Ltyi>btWGX z1ySz@svL?5QT%ZJ+qLuy9y$q}z4rDtS0>k!<{>RdexPh~Ay$P30|N%66|>rKeKo$k zEwDF$RpoFbMk-Fzs2+c_ru#$1!oK4udUC+&lOePmymK zl>=V_8SvvL)Nz=e^X3_-zs#H1w6+^lVDX-k>m2roX4ntN_qfwC&EYpbj8H25pplPF zgxaS(Nf5TI`0jKa!(%r$19w1+;I==MhqPT()kAOoq+}X9x3mI+n^&?_cqua@8qXZ} z(G9Rt#(X5nNI5BI&A~=mlZA}21=l9^iZz31cy!7ixMZQffX{23j zf3NW|F&^f3_{T#&u%lkt-8uHHVf$^Pgi^eX$%SU>Y4j-DE674eMK$KvslXx@Z5KOl^(FN=WmH>D6E5yhplGooMGLe*ae`|p?%LwT z-Jy7Kceet?N^uRrrMP==hhQaykbJyf{%p?9v(L=zy=U*;Id^CN{3@ny|7UKcPnEsR zI40VJO7Q?Fd;StN=-)~Gt-M!yLr2mWIXN8xip~eK(iv{X#Kmt5^y_e20)1}RL^iW_=N1*OXrnxK{X{Nq_&X7^Tx z9|(BQj+I^;)^PDnh@?x>9ag{-7ejc(LTrar$*5mo(uo?I^Ll)7<$G!b23YZgp@#uiH8zOAoCpRVJ~qXXIkx?AlIIJC*Rr; zOW=^ZRGSiYQ7G4k6(%z^U@qMSO)E)D=mkupcaIUfJX40{%W`?tV$z9J>YQJ6!s3Je_6DE75ssbIJeq)l? z?v$@J&uLe6ZKk5^w-23n$t;#!w^|f*$7`lCUKNF(kkSW0`8ZzpGp;>re~lka0V5N_ zQ(p$N8jQ_z<~8WMZk$3_uVmDSl=8#w4p$G@B=}_0M-p}tv58ic|{Pk|Ge{@?3@_s>XC3)(mq}6N{)v_tPzOJg1biIi0 zOz?-Cn?N%Ww`HTYnRw!r?g=3}VG@hmW%cZCYeQ`&R=dx-!wg%d(x0`~x4cCQvkp=D zsuG$&=F5M2?N}lQ8)rAp$?RxBnhtuu739N0zPM3d{+i`$Y53|E=wJ5l5mh1>3{H4q zU5V&DBBYLU=~7WN{s9XRC~M{Jn;+MEMB^`hel^#1=fm;q}Y(c;gjfyk#S54T^bbWT{7bnL8bC5zl(67o+#>Q3snx zwG6DNmgdg)1#))ohfz3uL7`Wsz1B;=^wr5q{&qT-GNrOy3bQ&J9UB`9__l3tVJY=( z4_Enz_S8$y3^sU7D((3a)df zWTHu`}%ZfO~N4YN;_48sw)w^b36FsTJ&Lp)4=)eu3H?qu=k(eS<`flJ>1h zAYW7#-W}zot_(325h+?3qk{wen)m^|u(FgOo>=qnrKxvTx&uhN%!9YrhS^DQg1Tq2 zz}i>J7WbigG?C=O-W?l1%5HC;VF{ZIz>DjcO^e-jcX|8q7@*N(DnmxU!g&AEv_X?x z(0}5Po{H$gQm5xi609FzVA$o1KRJLBYV#qXrfG%&$MT!O;gU$9K4;i9fRSAY8Z8sp*QTODCCl~ za_BQX41;;;5}PKxxAC1;VE5C!8iDrox(FK`T3{*p`{_^A*8IhOyj^#6?m1W^`KgE% zF%)-E#O3>0&@(dEaQk2Iidqov!D*S2W!2D24!jA@Tf0pQOtLLWyw^46Ec7G zCdYi*BCH$2e@^r`(QUkEHhN_)Zh;_}x7rBuYKox6cBq_PtDmh9BdIJVKchQ!y@%Q# zr0Cl#0FBJkO2*`7;itnLj3#U$Fpi(8|l zzB+j;hv~{|%R_8V@nyA=pEPo#x8CH$D*M2`-0dEzl+1lz!B>2|7MeVkS6m9ABM5h8`GVm= z)q+1y!QdF%9Ye{Xr~ip7Y6)Bsl5%+cpy2!uQyVCRPMLPWoj)%vANX$>?ns)93@WJI97M4jw4H zt2do@Ps8>P*A#}=Mm5FW-JNz)Z@5tmE>HhhKNOnW9P;-Hd>E3nx9IlnBkc3{N=D`f z;yPqBwXK~RT1|X0A_RBHIpqDI{D-mlWO(s>p6mU79sBF|FG5}%{P?NCnrTme{3R5L zwy`<0nQ#G<^@Lx>CGhC2q*{oM>S9LSW|>G`^X}niObh=05^luIb>v{l@^to)y7Il? zH-tw*d~sZUgn-7%LQNxiMttun5hF1PZ}zVyN86^uw%<)(g`P9D_;Rh|6@RcBzk)>C zV`7JTd0{t~&atbU)rvwuPeEA7yNlj`FT^;!kq`!VyT<$tL#Yopo$OtGzJDuf6}{%P z+;r+cHjG@*z700zUUX=L32GlT3>r$!+VkJI(bBAnpA@PhK*lz~kmvFAEJ*wBI`~B3 zzftg1v|D-$GJob4`X5Ze2^pt1&e3WdFy=3qydz zMtnxP=TdV{dUKo6YOY9M$(scy*QEu2BazkEtw#D_Jr}8rSdg z*MWcC69~Y|q)U3oFK=pbH}uPI4C!fJ`zPID4CIgpOvLZOoDHM_XnueD6t+W8O1l)T zO7fJPz;%o7FTROC95?5y{~Y?KmarWzatG%w`&@2$zWndPn*8WzwuuXu5S!%OWc&gV zpqqAUbNOcUzFVi zhc{cl`;M`mPIWUxm6!QOT6SMRs9BMo7?Dj{`Fp|``dgAk@IxYVR|2 z@3$%A4l)p0VtRdOg{G-{cK>`|i}*==vE_%^R4MzO5FgjkfFCqzYyT&@{_$+-SJ!JL zdzbKcA|#fL!^2VSAK{^*)n*T}b}~L@-V1?3T2P|aFxE*&gaMYBhqjkXh=|u+fkoi% zF32+wl=9|8E^t?8F9DNKBPHlcT3j$!l-~PVs!mOW9yw2aJ0B=?bCB42Iph0@W18_U zxxvZI+sw>+D}&f!UicwD|Jc%M)nIhh;4{F8 zpV}O4D8?c+ohzQyKjU!X3)8Y=$M=baC6n^PE|mM*RVIqxLrP(8)_JqbkJnjC%k z9Zs;_A;3Q1V~g+UB9dpBuD>sQQ#K6K5~=#Fmxs)g(w@4bkjM1zt5}MK#f_c?CU=9C z>6dTNMPFK$&-zmefBeg_Tw+yEMeV92nS0UKz7r<1ZE)+QTif|(+(5NZ2r=-d_V0Oh z_Bi*IBb8fY5Q~Qgt#a{YAEzlwkQ+PWhQ0W!O2)hEWbZSZ5cBDY7W_uy10uRFv5}l( z^rx>^5!`vk|GuwV*tln$t<93sJo-wlAbN@!URy*CVGaS;{A7Ep+EO$ zJi-vJnF{sk>44HeB*zYD?k7i zQsph0NIJ}-k!R0sy~JCks@tzo?Li;;RT~m?z=MO{Y`pZA<;;c5sCXDpksX}mb{_0j zgK+L4u4wXV+jw_=5sZAN>8H80PfkTqci-H!!%`_n8Ad<(SWda%{o%?N?MX1kZ(;jg z%`Z98K|8K7=k>95u0+H>dL)`Rru=a*7S_6Zb8O18N5-Y#=G7U!W#H;z9#^*GjP-Ui z{*&gvvJ3r@E&b_h?Sd@;v@4r7JHCc)EGMaUjlFQHJHIncZC3?H`B355Kj2pWY0Jmx zgY<+%NoMZWqq6y$pP81UiOu*U>I9Y#*3|W7d&5wy=Qdr!oe-}lO=Tk;*2%!Q$IQbga;fgdVd|En3n?>6RZ1B2cv*i#5o5INVdu<~;ha)8=TmY{z+@?Nu!ByBf# zINseX?W}ZhBXs8M!L(juTZxThSBfw zgy{O4ug| z*eo}hI6WFaaYg_GfqxlX%V0#-)?h?&^tU&aA38!5Q9I`)e`9f9scV zVZn%vGl-P#`?2d4s_NkO9|*H6hlNHRv$=!vl;d`JRcn+3&N=J1vCU2k`gsXYP4u4) zw^n<%n2@sXF>7IN!m`Mg|* zuZRl&#oxg0;N;)c(nKh?@Rus8vF@^1?+6ARYU1w5Aap$Q68qwto6Ea)aP{AZyK}ok zST1+jC%N_i9B9w2QM_GT<_}q2aOemzp98l3f&rf&h82!J%pF^^_;|co`9WN}Ji6HM zPRchRIc#uiLG7W1%xe^25c4%4R|8=1#Hli)Y)ejJ$-?v)-jB@llm*7+SFy(ISFElk z{QPNHui1HWW@wD9wRU{2*>SSU{{8gtH}Q#EtSwQA-5TVWsjhBDpz_uF&g_|iqp6v{ zMMPI(REej_-2@pk)Zk{U(Wbr8MxfTjQ{*W{dfrT=y0N-nrSJHN5##v8*867FdMRTj zt}`TDe|$H~rM~`#pQAR7DHjP{oq-HRIt2V}!!w@0Zok{7J>On|H08=_E|tuGY;OA4 z;vJqN(_QWGl64)LmN|9WZ5`qBS5&s@+}80smslCO<55s~U2}73PsRv4t;F?{Sl3H| z=M+2KbjA(e?w%i{wGvlF71e`lBjs2N3=QgUiS!Rh;vAGM>`f{v8l>#1*Lv4vZiNZd zOuS2zP)2KGmz08)!qSEa^52=f2K`Fbi>WW~*1htzoo6qzO4GaYT59p9Mk4EHIfiBp zWd=69v}N!{t6MS*+3F-hp-MT-axxOq_%BbRe5y^Ap!@FP&j*b-PV!Z(^h!9>xa%ug zaLxo;yjzoUG%AaoEbL=DSE_viPVJ433~ZuU1CBWU0K{Wf0Cy9fCj1xEbTjTpzgK@Q zinQ8%498ocJ{47VY;6lrK2g;NN?I}S!qloRkJ_5bleL@d1F`Pj-D!5uUfAan%!P>= z>q%Oe3a@Hio-(@6oY>nFRlV24)sjKU3H3OY1hVDCR_O!OfFp=EQ&B?of_131TFq5~cr$^x~KOW+nJ!?(1*QS?i z=LH|T;>%d4gUxKvMw6)nsHnH3(NNo0r@IV4V7>0zS>>>FylHE9@;gntdqNtR>0HY1~}ARIV&y=qlGCD9GL zwNlpVclgGiz{`2}`qWj)(BDK)%L1)z=bxAH>hcAOgoaVhNkDBldw!pMOzwn`8LiXi zVRLhD^@BQ7Qyzk3Jb%89ZaVbSn+=f@zZBj}jADL*o|cw)+$tk)lj<4bdA~TTIE57| z*}C$ox{M`RCNd&1W@YM7-m#6^_>K5l+$GcUy6*f}RRz)o@|#JkZ%u3R!L9L4V=_<6 z8#pG%XMH1%bvN@Zj%AU=M6@QxYU$SM$tu3un4eA z`c5HUuC+(#E-vRxQpFVZr%QM`MJ1Z=?d81h`J?>u!sCF=k(;ohHB+`vj-*XLrNFr} zosP23GPUa5Cvx1sTC6qY>u1CBet0)Gzw|yDCeMm8RI^d(Ovb$wS30)i#E_wz zdnbfQwg4yo+C_T9D&-cKa6SGx?ppfkg;^5DtJ>-wBSIMqP*$!7S4W1mmY467cq4jFua4av* zylA$oBYTULgWcfSUo&f_iF=V)WFjto*xBV&U~m+gxrU?JsB5ZY!KwtihTSzgwkc{H ze|sa{%uk&&s2(OI{aujExT&}{ZB=eE<;Q%hX20Sx|EqRY1t#<4@?y}-(&VFvPhSRw zQtvkMq%>_&2fcc^w7cn%7BrT64I&Y5Sm_0Sr@xzh=_9u$gyCEew0Lv3iTKk98fwu@7S2r^jh~ZIL9%nx7FiqK~w6?0Fh^Iz9^}D!7N-@p52fz1^3Qx zM*f;ZeY29h3~Q)1r0<0~M>QKtV-43N5^k+|vop?EGma04U!QmRF!sIUJLL_h3#7=p zGW=fwUn4%&exK%CXi6BWsRo7@-?Y-dc1bUNc8K}13(2(B7)UP`s^kRMpYG8*2aV*_THAF}D65M~ZJWRMs&4#pR#$xtCPrH0M>OU6719 z8!@eQBQE1dMjJwG+w&(OLn?+rc-QRuAGf4$RrvNt^=hcdj-+!1jmS8}FO0vD(gI|k z)z!>}c%mY6a8wC@R+lto9k{0!!N~aHQUATXxpBv9FJK0TqNXv3M9tzOmb)HT zuArDQPnW%B{4*@3{VRrDqa^K`g%?%BX_J5f7)bP2i;v zp!2B8UTz3^&Hu*Ny=F!+`^BFNk9#&YBXgLC1$7H{{Mf&3$`dVp)6e;t>#ymyr+HOb zUDH#1hu;jCy+O6KvH}$^SP?mgqS4V%Y4w`89us^MY_5tXIN zW3+6Sw2X(?iYd^){=Q}Z!GG^L%B>GRp(}iKE91C!eF2g-C;TkHH4#=2J12RP=F4{- z15)ax=*7@?f7z9zZ0>nui}@W6N=tl4F35C)(cE6{lAs}h_f02aaPB)-Mk42n4a&$G z#(gZbcTR5vz&oFseEeJ`?3v;%2j^@%`g@4>u*#*drq~!84YTy3&k0sD6r5Tr-`{fe zc&s?rDJK7@)G=tr#nm9(-;=LIsno1B&w7_&AxH#X9?430aXrF3cPn-kS42Dtcn&0Q zXFf8RfX8QR*>3e-?Jg_u_>8^EDv)Y1373^uovEG921yX2vQrKO8Jl7x^|gziFm(zw z+P)R?BEc^?vfiI)$$iW4-8AhWOtPNyi#^)ShYxb?$^kW+4h80UjE_lE78JMoO=)fX zC^^je@vjy5SLdDbp1;t>UwnaeqWo>b&1<44`)RD;)vS5{1*VY_wd{bF`Ao<~NRo=r zSKNGZJqPn?*?tqrT_S%>vG3ZG<;NV*B7RsA2+Jr#3K#EyM%(+N&dVkJ5v&$Nbk;ED zHy_X+YBG}u<&>NXwy2vi30Sm+SL7{!;J;0vz^M6RTeAGR;<=Kk9%j7Fva*=v9JW!h zaKBtT3!m)~3q__0t=G&vuj4;fxBY3bG}BJwKB=U{H*+Vlyk#=IgWZ9;a1I^pCWC=; zc>{^Mah>VVH=d8i0{RxaA${8-1_pNJ5+&e(qLV>Aendektgb~G5s>hDRn$w!PCS3&SvJ`1lyznUjkx4mPErA=3gn*Q*vIYh}nvkdc5q-LM9Q&#~f78R4b+6OZ90fm$`tRtZ){o`$ z3aThO z8|)hgEuj0pcTJ19`#d&87;&nAo6a{@BJjo@cjC;AQ{~#lRPG_#B7NsWy|-Hn5i9oM z8^ZW>`^Xr{HtU}++_-R4xtEyv-k%zBwhoP0Zi|baUUPP(dYTR==ASkH;*(G9-_Hpj z`qV_CIzk7CuBu8Gt6R*9&S`sV@A>!IPC#=>in!bOOg;)S!6TWQ zk!_4K;zAvi8c+cKL>;T!Mrj;q+`2Q9*;A?>XV2C)R<`lQ9IO>Y94Fi^W)hNSWq!hm zYEE7uv1!d@7tLNN|sS$E|XEY)#TP&J)O zvKix!&e@h!j?R-GejYC+{+*{c{^j%ci>N>RNzhi}3g1L&CnprA;#c^vc-)<~CnbyR zrMC2cI-tT^t$OScOEQ}@+ai`8obVS~dJc=TsDO))UqqO`>%v;UXbk>Pqs|qKmoU3q zOZzH^XY@jM&aX_McI@j;s62;-wUdDz)!#wadm6c$wcl?ws#AwTWe#`>t-(&p$8pj$ z@^%#`tsJ_jY_Yy?GQ_drMhV?Ff*jgkuiwU(lO2AY7v-WmoNe0%%~iYoPW@1rqa_`C zkK7&fmGF1YkW3v^&I7&5NP9e_WLflc2qO0D8Cbpjo`DvpYAP|AaKrJ%P>Xq-E)`4$ zGjFt%2ULW2HSWxoh(UU;ZM}GuUa@4;RIi8$w(7$$Z(7(Rj*D%aAE<&P)P~0MH!s=J5VP zM79;*{Br{8-fS{BTBE3WG#31L{~KChWL~A2V(c?13 z^&@ZE!zNHLjof0ZWEMoV{?)V`Dogw~-$-A>TKf+W?P2DUwF0R5hg$CFWP48CBJw)) zZG66lVzr?Di&>^jbldS!^dQW4Z{A)*ZnUfrf8c+zp>YrTxNiC->z1`7Iq4rcnW+#d zGe}2=F3+<9RKZ)Mx(;AS~T&smyx=q6b zf5mvlz1E`$>UW(Hqc=9t{cI{gPhTFq4zlNQ>}4-a_1AL|_M^A^bQ8|q`F(ouN+ z&zF*7vEBKaoxK5~K$X1vb=#kE=&AuC9-q!S*hlYJlMsz%jp_RptQD7*1+|FF)_O)z z9k(|?hN-m>(>$0xt?vci_9SY&A`Q;d;0KV?h5u$Fmsn7YjRw5I9fp#cK;DPTLwmTP zsV0yL*===0oFVW0&tgqnwl_2Kv86|)7=;IH9fja=S}0ysoOUU2M5=kx)-NF=IC|RP zyofJqR-ttlmjY4vQsl(F%^d?-1ICK|fr*Qt4=sEP-NFmX$9t-cNeKAxUJG)GyU7DZ z(cIn$4K4%pOQM(?;p4@Vj)0V47O(-Xsau@J%_v$J033^$ue>$a%0 zP7?@^*~o8Ml-JJe!bBEOT+k&+z_lEHF!L=_s54oY>?GAA#@5Z(NVL$zSPOW&ATL}L zLR!2!YB1Xg+l!WK`~&oP#%haIu1PuqtmW6D3SB4e*7n$(84!R*7Ef=jLR!NWA@`r z+@7eTbnPkqH_%~~@Vb$k`cObs-1hhBdeVUNT706^+coqpeGp_TJSY{+8If!iiqwY$ zZQr~B1+zmfQ1Po>4*{V>I6XR${Fq6uNF9I(HShyrkX($+mL{n_Q6M3lDy63tEx2I$ z!TXRmKo%l{vBivEz;jK-ayu+~^ob;(1)PeG)L@)D&Krhc9(#M!4nq01%zd6T;Qpm) zk7MWfJR~B6p~yAO$V&=17l?xUi%%1;M=sbb2{YNrc^)?i2v#W%q$dfGsvXgQs9^_f zisO&}{wBr=t-#>f_*+RDkm*l_NL`L{3=MW^pC*PmO{GN6S>PiXJiL@(&IOiGDkWq@TBki}|JRH7OAKU%4Q0mm z3RDRa9}3Wgn3Qb*$l*d&OEaMWEs<$Lr9uwqB|6VWuWd5y=U8tR$9eACHG`hRr*HcesxCoqt8kljbk z6CUUW_c7276nq(q9K|S{X8DN7;@(jk8!VkYkMH3=p7H<{UWU>igifWnEu33@z^B|r z53UCz-$A28>qQ1!c4N5U=%-QK6IPqR&fWAp~dy z38aNag-?FPLMVaiUv;(J4N+4BrETagZE}%xT@$G!Sa;0d(5a zWiTsvO&{KjC3efB*T9mgDG&i%O!I9;@HK<4;Pl|?p;(^J=Hc#LN5PD{3qB1ia)izu zVB~%%avcL1kGJV4(Nnluo!Rik=@uqmb9-3k(!Dw-+--QFbQBYu7@y;Pe;jjLx+MNN z`F7Ixo}o{nzCVspWagB438jakjujj5&G*zAv=v0XJJ?076P}1@)t;^9nN!4Wa}Czp zdkfpbd!_;YRwBiN2)PMGbM0y`*A1(s_J zN&l`E8^UuD0zLBl)mgs&izBk06hTi8ZzjOs;yNxQ3#jHY4`3%~H-%6cQRxObhkMZja*rZ`u{z!!1pPj3(3AVcK!Ue`0&est z>81y4MhX|8=j9sL99j!SYLjpPTMZyn%Ayk7&>vt?ON>iT5JeI~p?>Qk^VS)!uoPpf zyEAsZBQ{_U^{YTZ0gI34%6Ri^&oQ^hP$$^g4Wx(twA;z|gr@2AN2L=kHCyfPq&ME? z-ih~w#S%DZgI~RWT!9|k#KqOk4Q=N3pf-Wf7jB6`P1aN#rw3W&d_EqFu z7M`RaP?fe86UUz#!HwwkPPlqryUL)7AExHJ!BneMl8pL>9@$2aK}*k z<@g7Uo6}B{qneak&^!F`57`=rDF{_1fF%5%3I0kkNbjI4bewNugm3U>R~w$qQL)2#Khs3R1rP=R^@i zmw8)=4M4tv<8dE*w}AoPAo`cE*g=LW-;SBoD`d>BTYBK>3g18IG6iIKfYzB=c+bUa zYI)z3>(*UvifrP2s9vFH?z?{+SjYB{24h4#Nw-_wV-R|lz;>`Rd7!A??ABZ8&FALC z#BuccI*|u`$hZkKcohQ~GrdwW6lk|a8;S&5%8y*PHjGD15-XW;BMMF^6zFM1pX?Oe zVOkMApMde8P(8C1YVPY%5;(=q!!J)TCkC?XR#ZU3^ib2Oz0B;$c9dZmht@Bu{3@FUJRZs$??=xG3skC1z`*}X5=Qsy(`P{wBYF&UO zf(w%$5F*Kk!Ny0d%mpZEjas8^_~B;>ik&#x_(pS(RC1=}JZ`b?7Cpx}XFxhbrVK zR!(sIOSsP0OiSMx2#&;q8NN4Zcg~*X1wI9w-WYP<4lZ;9IgE@bFaSrCbP9Pez%}L1`nr*TPq&V7;3dUJ4&dpD#n(iwRz;X9U3Oxn zry|HEW+THJobBoH!MqPmEe^})Q{aA+$Uu`BlAwWqx!n{Go`I}Q2iTIdLzo_b6D8X zYqzFx>|6WFv#ahFu+Q)v6U>SZR?Z2tQq&N9r*wPS`=+0V^6W=ivzc}|ce$&vbV(Gp zXy~ou6~u6)(YH8kcaj{3U_ly4t0$P9`PTN$_9_eIjNtupz4^@L`Rrx)40p+F-6!69 zEVs?R?H|d5cx;%2wESWwbz8lMQbRSz-~TGoe=`xW2AcPE{lw9bUD=bjN`buu5jb&wS&i=t5@NBFoXc z{ixLqpGL&PC6bKWxpPgSvz^1Mrje@0c~kAnW|x4=(eGOjW_}Kx5P#sZOFwS?LaD~N zYlvUmPx2Y-p|4f8?3~P_?;J+rRvJod|4x(hT}$E3fM4Jn#bHL|x)jBdC4gA-D zEpW9dpAY>=it^Oc_b*PpKUIjYEd?I`Z)S4q_GHll>t1Y&R^tQ{&kutn!cO4d zTUVsCpDa7ir7_&~qfQ*92(4wy8!=a@ZVl4QJ+e1E6a;XeY#qnPX#dPuw9*js)6C=Y z@Lmj!2^>i)2;qpl8^j<)A_GHq0P23p|tFbk^)YQ&_%sERjyXX<%#}giaXJW z`qIt)7`I~`USed+);LS_cAR#FWT^hew<9 zkv8s=RotQmij;>OJ--}EhMk(;9uH^!F_!`3qYAEyRL`fsspNIC6wbgafP542ipkq(VixT1tr$L;Av@_1HVQX) zx`<2pqe+Zr2nikg5MA*TH*;#n@7mm7zc$DY&4gY>5OYp72PW`NW9e|2v77nxfD>Qa zx1$RAC6E_qG9TmLpi=T>8(yXNYqY~`nm`iG-$!51T&-F}F&vT;{l2qmD_^{9JTftl z1oYq5`22 zxGA9?r`E+(J}OQ~z^Vg#p^L9b8fewp*J1O!gtx=~VE>RpL}7|b?AMUu84qWIa!kI2 zNRK|P3e$@$9Bqs?! zj#2&~9`qrYm%PC7<+Yt+tI=lg#J~Ht%HM@)#Ne`qx4^e}8GKFDTIj-}l|QWM8h^4x z_2ob;&`Siqq%&T>L%-mh!xR{bMz=Rozr(z6Nd-)z@0a}N?Uhjl=O}QCU;@&p2rd~c z0M>1Ul{tYDlZeg^PUMarQp^yc{m?zcdvvPD0gRc_25Rk|?+foo9VUnhAarOdU^=eG zF-W0do=6#*nd@pFwY%znRUL|SHcwZ1x}oxFgAqAEI{$}B7*7T~6Q^cJVZqs*f)nZb z{(AR)U?L<6IWGc)c}8Z6tO1TjoUN0#(i8C66Sf{{9(2}!!92$}N3R}}n1HKOIzYX< zhSoN|u79qq$P=1$xR-mG_ac(2e=~UD0rl?jacgBx^zVgYW#( z_?q4??S>w(eRyLAj(!I;MQ+2do-7WRf-S;fud9X|!QUc~{LssHOshd9fi6F?5Vh2x z<$K!P=+B5m*HHjcdB}8UBl|zh&du@Ad|)OB z-Y(qreh&DCy`bdxnNEs}i@PnRAXHMJ=eHb*prEvyl(@@<`|02*YImnA%j&&VY;{zCh56+Clr9(7^VoO_r5&p0R(z# zukCfczptk@dwBJ;dv!X%f;&r*AqaY3yqsA$0+euVn3^#@kEUh4Em!f&vmWk4PGAIQ zvVII|QGt3!H`I?pq@oiHaNDj} zt=$?NUR-lFfmXQ`-(Y3l)^fusxjp1Nz^OYHyHDKv+^+2RUe8;Sjx^B`46{S&L%Gab zQDdm@76xD~mScd!9rV|{<4MpL;TRqTpN>zcKnjGzVD%ib;sC7&~Oh-%>n#=~% z4ttvlBdt2hrd&@cB30U-{qEn~O_2bVuj83OOiZBJXQ9E*Z}5?LPd(4F)}7%nD>Kym zh}%MOtDPPNnYH>`$NHm5#MBfA_MUwkj>7aR04ny{bZkC6uJ(tW;HGijmpRi)x zsv0>~8*bU9O|Y+Eq&ccSg6LL%rD<`W6ovHEA1}K%Iy$a+x$J{wZl&-y(e_Mi#u5}F zY_#`^Bma_=@2V+OPcdHibQE7k8HnaA%IA3{fJ8v0v|4U?5xpoxND8%9jiI^5H$a^0 zTsEMqA@x)J9busJ-MWs-jKDAa$W%79yfEdi48Uh=6gn9F6zMD&*c&~#ab&HKZS7ZN z*_9$Sp_RbHeG#p@x92lNtKy=!>y5hQJyqDj&>Dt*p?XOgAB%zD>sI5H$NRfKn7v>1 zknl(A1Ocid?CRL!9sRQOYP~Hfcp)ejwp6x#$0?R85Ren;JOhD|1j+W>*g?Gr0J{C& zw$N&Uu0P|^gm6X!;E*FvV6Ag>v)0?|=YSY5{x><;c0Q?(4eSP4P zoljt5nQ1?L`Sxpp03w2||LC=I1-gPFzQsl^)vL$bJ_9ODp2toS5;(sGQ0PM~1UynA zFKf58_ygz(3V&_iO=t5H)L+)#EkUZNC7z+J8H95XSnYFm5YsK#)w713g4*pnBb5qU zpQpvyDr$r_fmzwMC$Pr2{}iE}9tkk%=b44T7C|Hg!9OGG7a-3bkv)$^)vwyV>rU69 zM$ixd4f~0vA)eF-V*<1K?Ws9PJate}r1LD~&>m|2>`8x%EmVqHqGX$oKcF)bDEZ%P zfT%b1ZMUOrkC+Jn+Wi%_P&|QvUy<}bx99lbE(BX<{m)j+3Ba)l0H6BJYPR_V;EDv7 zbC671r~^T8Rb=5anE+gyAUHen*}P19s2c%5xnIu?Izt_l97$igooVY+_@BAE{BT@? z;D|`Gs_kKWsLr$HZbr4+_4EIk%kiJNjRIZue$FX8X;4)SK);^WW#XyBwT`oj-@*}% z+s$o|{9!iVw)1sWHYA+aM0sU(76&<*7s*Q)QLBn>7R5_=UVDeGCQBJLu(*JpC_@?5 zx0sG@_AC#nZALc>=OqlRjm4gnq+D@)#|othcdfL~SBBVO@4j5hQH4Zfm*UOjD7oK@{5-RS0xoh>P=0O2#x6q~3B zM!HVB?fz`)^I*E?zCzp=bc)Zq{llj!VDvx#DG25N-#4NX7%7~%kLsCZOAdAD$7U#65Y>T7<$Cp1tV7|HAXk z8~c(@_5Yr|f5uHoEi2p!9;@mNx5Y_q#S!$lr}9AC>;2UH|Lt9E50F0k;G4A_?si|< z?CF_Ti9FJbUfP_gNRYL?n0H}F+Qnlf3^m(=5Sl?$kT~YJTN5@~%Qr)l8OLa;YWuNy z&H-e#MHn)OuqYtz$88B5y5@8UAbViQQs@rs>um9ku|A?b@z0u-LhEEQP7o_=K25Me`Xo2xq@}kMn zIVh>Lx77K_l4M(of0EPfR)r7Ht6PK$aPnHnOejO8T3&y{W%iU&O@82?3ovq$c-XJH zv!*1F(f;8a!L$A-Fq^AR@F!H0kZP2NilQ*n*nNVh{6=TVpTY6^C+uXTe1VqY?N&Qx z4AG*@4z=#kK+mv$oVs)#4-n_O2;Om*;%_=w8J8Rui9y=Z~FW3`=>LH91+{ln#ZItx;6$*gt6 zZ~EoES0g8+SQCr3qSViYJ}fHT-xzl%`^5kO^N;PhFsfn~VjWlE9`rX|E^%+ev5v|1 zjS>a)BIG|Tf}JNg0?fLJgX4PRC9hz)%U)%6ExS%dln-4pIL;C#4Dp{vbS94tP6^NTIZP^aHXF1p|lIns5h6g zJPC#F2Bplzpiwi?GgK`|@!|;R$l@TW-6t`WQytSVPtt}i^qTz!W~eJRE1M%N#dW9r zZiC9_ZO$tGne^E`M8VMGnFOjED7a&WeTRnR=06_3c$yHD#e>DZdO3517E@05$&UER zvM)(fE2`V$;nUC(JH|TB%E#jUkG|E*HU|zPpV+{khh7RJ-lm1)x#N~d={tv}Ix&D2 zT+i*bnpP{|iX5hDe}eNLOkij@FYF@vbaZ#oxB6Pzq1=tx<-ISDRNYiBh4vV_MwEdF zR_a2wrL{zZ_C5hszvn$w5jFTK&=3v#_#}Z2<@eh-8mV|*=ZIP`Zlb}Ry0x^Y!WXv* z2E1}5ftF^ekp?@k2asE}9GZWYi%(JT^w`#$-;=k%;7@6O`M}_|`g;nt zc!G~;Awv1}%FHe(r$hN$xgErebn?@-qQF)Y!IaER56Xv`g^WFNiarUc0@drlyHTEn zM`=NM+yIJO7M`)^OlL3Jo>vV5@!C^WB+>f712JTh@qYkEK)Aokj|6S1sh^X&$&)1a zz(=kG;ej^5yI^*TBr!e0wBY=`)${in3%gT|TJZ+$%~)XMtM9NrK(u;(hY^t1|Dhi4 z?P$pCZOEgqAv0BbPE*g*8#3egDf#8>IKl)|7&NLQp6NmF{^Xav`-gk?&P%8++3NwX zmbsiB#0JK6nF+}+*MmC-L->}Kcofpa?^w05tYCH${bDBor976A4UxCL?d&9O+eT?* zEGK}onEfjm#HvXv?R$r`w%bG<4D2zbO@iqYdH7p2X}FlcGQ!)(L*6~rEpaefT`A?I zA&Xfo*>JmFi8MWhht*^=%b2g z0uVixwWD`+qeqFLH=g}4w#QaC6o9`_YXpCa2>@;HH#BijOqefI@nwJOWt#pn4PPFm zUcz(dUUIHX7BYc_MtyeCF$lVfw-M(V$eCyx{2J4TZ&eb_AcKo3n3pO9u&ON{fKD-A zL4kj7M%alI0K4+%Rj064Ot)9c#9()AFkFyiY zOaN*X-RY(3P7xe0!V_BXvTGc?poFC?E-W!A`Q@D5zAc}}EAN@6o>6aj2-XFXqO<(* zH!|f51vuih$Z^XmYo2C4A)yk)s0F*N1Ke{MA+(PXjLg=n6 zl6I61K*P8C&yMvjf!@u#R3)7bs-B^jm!g-K2(^l|e~rC$sM%ZZVoo6unG-33?2TtD z&C`Q%f|qjHi~%A=aeY0j%79h1>Qpm{PV9hfoD?Z z3kF(X{tl9z&@?^>YELWzsp|RdhJTjy1nHX>QHK`BJDBfKc3&>q0G|%Jd3eZ#ZXRQE zqLN5t-fplI1A&ufUnr*q)naTAXi8$ko_NYGNbKmHzrf=HJCDaWcx)TsR`hF0wxU1z zSY+*!3Ssq{v$PCr>=_>aMB_E<+N^7`a zP2vb;%WvisUKFZjaEcFqM}?~Ta`JQ@rB3`>nfiLHL}#FOk~es8LXeh_!b1*q1*Q^A zrvADM=LFl*eBr|8>$7gix-sjftX$KD$TkI;3ni8Py(`$)Pnaz4l*r zwbg#yN4TQMwXd_9I5~zIg8rR}D+O$|5%g_|qy@cuxk;%nhN@K3P+)H;CxZJYS7!we zW(C_713^0j^&eABQyc?U_56qtI0=$3vnRg?TWb=!JSeQlzKFOy=;5%13=b)@XSwNP z!j^Q6YIZT8DYOhn^QBRT(Y26~_R9}=Oox7ljE}Mt=*ncr*|Fb!B<_}Ou9K_+E;@qK zTPa|%y@2EGq@MbS3g~CY*8V~PXJHNEq=3`y1$@)RM#?LsFy$3rYG#XEj z>ziF{`q>?_ww*2x0LrhOOP{RE@5%QyKSY*2DMJyO(;*4~i%Q(p+PQoBL(`)wLTaDj zlFf0bK=yPCKO`|Nvtx^`+*2|4BmdP`RnwHsYw+$9F}8#j)f>26F()bH-Ph_9?_(3q zg3&cv#-k;PBzf_f9_3ai^fA<98q(tKKH%S|m|KuAn>iAcbi{C*yJgqYzc*JZ!8+mHS3Q59 z;m@|0i^B{RdbhpMQ$G+vsgx}|4LUTRp#~BluOYBfB`rh0dSC3JCOBayjx-Hkit%ai z9wu>MzfWGgSER4nBzeh43X|EF-1Ov{H$9ZR#qggR3LHiT@T02~(LfFM?K4!@mbSi7 z1R_H@he;B|^sJ@)mMA1IUg(iJWF{PEs7GE8!NJ7e1pX^HnAEWfV1jvJ-+WU9Lm`_HuxP3pGr&4O0YFp=}wrRqBTE3jmINmx<- zS|#Ga_69}SiPiIu5)jM!DIUs-H_M9KDea?_L*%^s4-8q#K_;aa)dOuT%%R&7YITRi zv_7FBuZ`_zgnGV;fBS5~zlodSZ`R7w27%C~cu}4unPgN}#oGjWG7xWlNp%yX+n?zA`w}8E zGnjZhAQ}>n8Oz5BTJfHNP+}Kmrw^Nk6l&aygNgs~^)uRTX5^vI$UO)pegsIEJrCcy zAR8DMZfD@Zcai;W)s>C~Q$aYDGN0l?H zf28Si#dXKeaJ`*!fH;J_V=NFGp~eF=L*xVz8%K6`c7n0=$t)U78uD7*;qf2eR^$th zd>dv$kq%9gUQrs9Zg+b)OH4hKD)=qkM6D6*$kHa09hDg(=dJ9cJI{DxhPKdCXrv5(jQ(RQw z7l8CMy>4_@1$s=B*)AsoQ*H6sYkm59i$2De;~0Om0&rQ?KNxt8xAXeu+iD=oE@yVK zd7Y#olRgpKHs2h?fq;*JMfj06WaFt8wIY!{)t1|$Hr0{kMQF;lzEVVyVMG-_RWIH# zb4IhDytq4$70sc{1a^L#*=*CixtS;A)R@h*?#T(aY-v5!)A&vY%}|?z<_l|~?CjlY zf&i{PEo9l>ceA}uHOs}lc(Y(o^d1N_kbP^*4*`SPZkl8XO=y>P_kV)z9-Sr?r?rwM z`x9$7`HYXP(LMEJ`!Y|u8r_3AyV!r1b%LwVT}R(2;{AkFQRXNxyBTr;Oei+Tnfma` zKh-S%L|I(m9V#`b_uj?4G-M{pf<-$GT)~v;`MZocT^qc+@Qf1zeyIE|OMGwaQsQeD z@wF?79j9tH`XjaO^B{G&T{gM2+m_+(!rJ#Bw6&bt9?IFpZKu5Q78!DnYS7$Ae?OFA zRvpvYLM{st=CR<-Q*4eslslnC+Twx+E=PoZ+uo^Nki^D1+DBZw8h(PypCur?5`IPn zYgQe!Z|&21PfhbdwI9Djo_wL2)dzXs?tR{sBrsI7Qm~t4uadF&a?`mYjGiCStCoYb z%ZNXQe-iFUP}+1!zHTA}7vL|MW^>JD?l-5=7XOZNs!EW+hVf+<{HPfx^|H0%1qB)^EoC1SgN z%nRFu4`%mhsM%(=TBAI*rh7E%m|ln}iTs)x*tqy5da95_qK`vNQ7eVk5JMg;!QA)COry@@9~qOzEh3OCZz z+K32b-#JQQvGZ3`P7f0pLA6OV5L!zcIf45KHJJ-fymFLE?|uM~gq;K6;4z z=pofdnPj>oxA(o_UbByKGU}tz=>}cFeYBsQo6*hON2&VQM;|zY`zW(#t4wHlv!z&{ zY@u`!<~71%xg8sDBMMP^_95)q8?35oJ$vy%Tf1GqJz9FU0^{o`L4>-Bi&-9g0yKV> z;$YY>aFAi=;KN44sI^=sU3*sV{8{bs1((;6`mBkeK9;Qe?bBPnPOwKYmO!v<*2{G` ztgc@q?S}^$Sv4AJc8NZ=HjxQfUavJ43#+1ERO|Q`hA1QU<29-ui?~tLls5RzdNn~g zs~!v7a|k=@8j|Nt76G;~q3|BcPYmd5#Hk%N$u5K;5ht=D2~05*Q&>*s^w+TGBXtiK zGJ>j_yz~?>7E#U7?>((KGPyZeQ`R<7XWkLB9hy~Tu^((;>)9l&P{SL|O}18OifV<= zN1{;nQY%EH71|0|D^V^>m0(p_B2F4Y`ftGAv4doJwv|WOYZOcF0h{1Pzm8&wuvj7_ z7A$+-vKTtr<6R{bJUZx$k_sp(D@Yhy0lbb4^b=+BA|NXmJh?-cB_hik2v|1F1Uw7- ztJcKrFy#E7`)yw0@>fAUhb3CJCWJGro%>mgQ{Tl=DY@pecq>75eG<(;S)0Sx(QfCr zwEG%wPlMB{%H*1fY{{A}8|=STb$wiftlV#tj75I%)UNZE;{{3nEgg(b(j8NQ=cB-8MHnhOZ6AHS})xg}d!=?kF?7r1o zJ;Ch0Z3Q;&uM_T<{*z`DV{DX@bOOtnGK~e79&{nzwU*afadxSj_w#mi;z1>}>*}DA zIrcTi817h>_rgLTv#Hag^}+|=)RNfC#ZAPK-`kWdXCpLQD)C!`!=t^_)o)U%%~I+i zRcdNfsb{@u`Z=M@i*cJ`9KH@G{`j5cA<0+_gkOF`nPABQE+oIh;|6oy(1`(J*qhkq zbIy(YXSJKqamZ)46N%wc-fZZt0r0=p~;K<10s)-(xzBgw-xiv z8Z(C*I%OfAQFMB_`2ZL5T(cC@%!ej1#jF9OzcLR0d_fykR#}}_XKE9)PI*!z`OYoY z`Q~-=bl>@@3|i5kGpsvF&datXQGZZJ?TxS4>@bBEW(i|PI!clkCqP;7u<)enj? z>Dw``0GBoBnCqGYW=n#P@)NE3|HnkJ{Z1wOo!Z)yDMf_Rd9=yQpkTv8M(kyY{Jwz) zyxks6-A=ZtTe2zy7n^=kq63borQWy#0WkSzP{RU+Z_@+6K!{ zU$zrPUyE})oUDJfIi0MHuW4mCoUBz`K6XRh$qIgEV+&D*y(|Wl5AjNu=*C;2)gH2) z`W4MmQO6gY3Dvs)8{1%#^s+5=&rhRRwejfixjt_(lQ(1z^H?S0Mt5V9+5chmZtYBr z=D#h`$-n>BpDP}w8DF$&(~M~?R^`x1`*^Rda;MeV$)h-qiQ>XcVVkGuD9G2k)l{$r z=Vfeht|_G*rJ8RIS! zEPD|ia-4LdUfam?n&niIK!WPw@yW|>p{x&eu$)!R#=Pd%(X;Rfz=zz~FNnBw_B0?m zDpZ5nLR63n6bLQn2IZlLvwDMDvVycNb1lpXTKB|9tMzs}&MZi3u^fnB~%Vo3^(kft=A>d*o}|nEdpM&^X7&+brJ& zpT)3zSzmFJcb8 zvv{j+dvYT-o}PL!N>)x&minb;%KrRul%OhmL~)@^(AB@nXbs+E>(Lu_^Y1rXV%REW zmlQwOcK_9OX~9s8pRrf}X;786Q)=7#*0!Bc+jd-S+p)E6DYb1qYumclx=!Q@kl)+3 zO|eCs(E0mdU|WNC7u!!cwW^Lk1ulW9S>l(t1GW(vHBUvA%c&@=%}@1GWjqO-J;g>u zl3c`bW|7B9N-Er9Xyp8j;)B0#(r7Uq@N>Shb@uhoTPOHCaI3iOc--&ARk@x4JRZ{i zy3yTN?QQo6dU1VVx1^1%3%DovpinU3Ho)RY`ZN!;fFu>aY}*jBgZefZ|`HD#sUIj<>;t2T^bLtmUn*&`_LBXC*h{k9qLpJGP35d)<7J2pl5k!$V3qk%>X$G?TIO zfw9Qfbr=QGL+L>4avph!N+_JI)e@)2=dLG$Q<&fsk_OI12{D4oUNBG?LI%bI^~jx6 z1l|c_7QJSjicISdg-zl3Sjt4_q0Dqk*I92I0U__yX(y|-!|fs?RMX9PZ%U;9dfjYx zw*|X&tWVbsOHU|n^9jF$Ot(BLgUru_*Ok4jDsd?vE2&NOC?l5LUrruP4KECWd`tMP zBroRVwFaFeT+;gcIPASUF_^Z&+iXx@#=c^NygRK^K6~nT0J9YY88~BF-O? zQItZ9Op%Uz8BbpAw4E@Dm~YR0nfR#X!n~`kg1vR2z+zvR0y|doe0hf)j~Mb4N}~x_ zF9Dm`+G6uO^Hy17`Auu3mhe1rZLG@GJ!DlbeeKUwZYwp!Drz#iLt*}6!=Hr(g>qIo z45PO(l(QJi#lW2W?Y=Fa!K+4EA;(x1j6Z3J^mq(Px!i?7J>cuf;G=D=XN9k)mGGQ; zrtp>`Qte&kfzfQZcUAJz={(F*<@459mCxblCC;e1lh-=>EJs5Gb0WbBd$@l}d}bwg z<`mV}dLI^DqZ4j8N=DkQ;{K$%ScJP6dJF+PGT5aRzhtjl_E_7GSW)x4UgF&sm^XZGAT5 z>qsRlCJbw7FnGMG*&F{L1u(eNDnL~)&GR#mKv|5Tp}tAHByVwdqK z%hi-t?`x(CO=#!ES5~}#KNJ=6LS!#>%I2&6nr!AhW|z%Hf3bYbf4pFKqtZ+_ik!(_ z90GwXwlIsst;7D}Jw5%2tvRoK0{%Skf;|M9_gZaH0w3!lPpawaG|1~!x@x5sWGv(MQU5SO8a(EpdB*GuVk2h4{ z)253=87_aG9LHu()J&9qFZn@$(0W;B=5CUiqJ1`hWXNHa`j2eAAhObA0Ce6kJHpc* zi!o4SEc^o!y_D4#$~xJR;K%1B>bSL-axbUKglk&Ntr5!n@PymhsX`at#jPo6+`0Zg@^xa|xV@MPLCN?FIbvAyvQxb=u!% zxzBnQukrEVL5t^<@o$$gp)z#v6@rJZ;=n{_(aU-DOVuz!ysSjfE|Nt=bO`%%7|RkehZOVyRxxS#)_DWCIeI`zBK&@K z_Fs5Vp4tX8zg%l8B*Y^_VVt1lt^>J>#kTBXixme)tDSf^L!S0XRhnrP^`NvI1%j}V z;8CMp9G)iK;ra1CHo+7$Pv*Oxd{-EuNi8p<)hWD1f@Uo3DgyC<=_W&>lR3%(8KAe- z2krN7*j`RQ$m1Dxsz8-FvI8KOc<}t{S*0)$}%v@zpA~Z^GTRI^V^6oL^J{1>TLGJazoDCrM)#HQSRpWybRz}T~n??GKmb6hU ztBpXCFANhzoc&eLUu6VNjr{v*<+S1CkL@|j>E9d-TW!seSgG#YgP+gC< z)0ldS$Lg%iM+?Zyqr4ot;e(bY+ouP+;~gOI6dIRs|AB)Tf+QJ3@aU*bOUSzm10%i7 zwNS5>thX!8Kq3tCy4O$^6SZuvPlerzmbHkM?RiF9(Izcxp{8Ul8+m}V>;fN!6D##< zVYOLB^=@JHqFk(AkHM(YcAV%%TTfdC>XY`VYQgkUrmr=Th*#&yQ3xmEaW_G z>P15C5FsyIrFs6@;=`L=x%o#D@`>U(nlwpf^}!UB6Cj6tU*bMlxO)9Izr^aCnnJn6T8;%@P!rJ_))==wup+zZ@E|V{xs(VrsYi&wYI)ADL zo5SR3PdhJC=m-Y(;nD~*b&Z`Vi3k>=kpKIqB+|4|Pe?-sssGirc0K^r`9##+4S1=S zS}>s2nj^CqRctXd6GyX}SQhH-cguiA++HRLR8f_bHxaa&ppl6HMJ|7o z<~wyqXug9#XbD1$P#H&l2V^3tKc5t-zV2-U5rwIM&~naPgZI6g7hh}wN}C4ghbTXL z)J%mHyO%_2w{goJjaotnFF2HVM>jm!m>hh@^qT&o)-24WBNF0^LttW)cx^YlLEvi2 zH0LS~>ZyK=Lc2qW6@VV@-M63zg-%}_Ow8-nPZnX&J3IDmn|F5XAFUOdl$9_AoMI(S zdD}M4h}>%>{qhl%9eVBkLp>Xl`k6~Etows6q^2`BR2#=>(|&T~f`OeuaHN708lgE~ zd&{&B&E}P<4~^CIJ9%*DyBO0bb1^bH4ZcufOIPI2yt@P% zr4gLJYdZt&eCq@^=(M-+RBTtRK~WxfqYnp1n|G9~d&Ih?kM=3d8*Dnvt4HZRl~VTk zbQ|wEV&5dg&(jAt-VnV<)=*Q>DWQJ!+VBquCFXa<7Oy%!l=ypi!u|%VG$i@}z+%ON zLO~@Cqoi|g0iB-!6^oqlFzI#??;{lv#eSgkMNzwNCxVU!6Fa)}Gury{oAAigx0Dhb zUWso%>VgWmvkR3WL&~k7`}hTi_4q9YYyBTM3?=>*Qd&`HfPNp@0Si7fl(?)5-liF* zti02W`(A?|p#%&12vs^jf@PCjLiE?UL6!cn7Vt#jq`{5NM`DO}&k-}2wVC^Tglz%- z@Cn!v2FxQ65x+2*$88F z(7UI4{x)O584M?ca`wn1Zsrc#M)lrh>@(3Nvb~dQR`4KO7c!_r27V`i+}>CRZc=#2 zlpQwvu?jEIN&Hs=nx{SUCPK%2JArS^Plo4L@fqY3dZ4rOHt;Q=fQ3C85}yDxo}g?y z3dR*reK7IQ38;GaB+%s|kp7j2umKYnBU(nD#M$`Piu<2}NkV<{B*_Zi@`Q?e7NkMy zu~afv`t3JumHrk-*ihox^xhk34RJ5G4rF}#fPNq&nH+VTy#{mIRRM$fiXGgkYYt^z z+?H7P5NR&D2`uTk_Cn`Sq4OKf!x#a%`HbxDW$(&C3^nCUuDO{FP9t7)jOueXwG&w; zY%VEf)SEW5-xpkfTFVTjBvNPT_$k(2eVU4pXsF3Nq{6m)9OB*ehME);*W1Jy@N^2{ zQq8vo=2HSZCDK#UA+sZP(C$W!k0Ty@hg3)W+jd(=%wMWH;#UbOo^>_eX-<6LMc!}V z!I%4a8=i?}Q)I@qxUDTA1+yN+9LPuYM*M3m=y4l8oC_r_IL~4+L{IDRk;FLU4VxI> z52+;dcE%evg?~9jHS-;^nF=2r@9!I0p29&D1e0kv?qd@{#|Zzcr`KN`u)PS6Ov5@~ zwu0*1pX=QJkn(Eqi5KTjfiW`f4f32QRXB0qc7lc-l3UwbEf~lm6lwc2kxgf^=_c89 zlPp4%LsIcOUhO9=lUrNPFA-XYtJLeOq#L~$k4N77V(sWJScDs4`W!eFQkNexYZW3D zLK8y|Z6np|@Q^FEGo^v|(;3&(97!Qzl|@GdFB2e_%=hN}$Bv`=PvOc=Atm(UdSs(b z33msv*-^9G?1+)|q0(zZ49Rb#l@rx$$bbFDl)# z7ZitmS8yae>b$2Z$VG<2X;zl?k$7uS%}escx19YG)TZH7tNE3T`hLIay$rAav((1m z+E9c>CbfU6)Q`Xg-Pz8dxT-gj6{<@6xrT^5uXQgNc>^QxB+MbLDJa>cYpC(b>Lo7@ z^7x%bneaH)vf1pyF|$KV=2aF7E;N%bIL{Z}h>aEsb9Z0Pl3J^kt4w=`oxSA6vy@Ng z9O}m`H-~x|=7Tvqc%YG0kFIre^yxaEbrCLY?KOD!(jd`~KiG1a$6OM{^{3#3_T-m( zElH{N?xj67j{Y<)eaXQ09d zc-(olpYA!03f3?2)=Qllyb*)=-ew)jxoA1lO5QY~K9sW!r+hwHg8t|T&&j;|V7Qjm zYP_g$!Cci2#m+m6I@BjZ%$2CbB)U5eJeYgkIx19viZhO^80)bYI!}f%X zBh2G_K=$-|ajG6MT>$F)!HvEc$Mxih8)Vu> ztxg2B%At0AHa9Jo-P`Fr?dI>JPP>t3MMu|OH*;d9v44!7+N8+TM%|2bf|ma5d(>2^ zC$nHC3>mcP*LWXx>TL34CU^4pg4)jFLvhJ3HH8T2TM@jEW+q#nLwr*8bBOg+Z=6hL z3g0pL9~TPG!zs(gD*U_FkAIiblqT$5)VUTDSr^NO`!sBY@kmBS9&Lj6@HDh-^v_YU zUr-zFvn+~EmeA2eaZ0UZhUd@!7(JufUF*05nvG2pOxu@$QJCN8S=gN{P3!RQ&65+9wvD<_qt%5D+@p8Levt+W&NJC=2tCt~ZDXdWn9I*^ zb1(_w)~6WSw0rH{IGiTn`IuT+9AyHyR?kly6MlmEq9Ky9Om&Rebo;@`YrrT(z7A9I znOr>nz_5s4Sc;_Gt1JLwf5rmzvXWeUeR9p6B;;@shX7@A;M~+h+TvQ?2B^zzdf?pR zW$Zj2P(=9!oWYKXgiFWZI^C`mo-@;-Q z!ijC`*;|8LZBwJDcTcW4#lgwXm(W*A7;BZ#dy`p0@=GMi#r3?jhwc;057&uA%$v>> z60?@_+Unth5Wk07_ zGOb9L-o_;@N4-u}z<=mXPp<_F&aSPr;j1O1yYCByS z?2HZ=6#Jc=Q{zi-LuB>jz(=2I?_r8a!JU8a;dzf!VeaFDcuO)&kYTx)w|ARO3pRie zO(x<*Z6LWSY#&IT58995ed`=Z{vNUqBnyJhf#lqvvT-lO9!Spmkq45?gW5pCKRl33 z`k8^`g4pkLcW&qrn&5VmFIBYlQe#O#jU|sLRu(O>#uEP$-CeWoo(=G+Sdj&3YO@ha z=&hc4?=c?qye(00vD^0IS2d%zTBed20H+|F_|-akTmp}~_^}oqAAg=6p`M9XaN3pd zcojdcg2#_vrpMLrIEJxx@Hl}V>#ekn)?<_P*bI+Xu9FRfaN>(~JV-Xw_+>?$)?h;f z;>}Q_UL*hIvOCE}RIwXaMZQ;tJymEqy;X;|zFlWqu1T89Zk~-UT@7PT*D?pMo5EBc zPF&s5Gx?60oiVQ9diYMqM@!U1$=X$e$q|0PZRUT{4Eor>F22wWg48nmrNg-C^-U}vllnzy&Vbo z8K;KGU+*xtXV{cg*LPc=pgTt^?&$24H%YG>XPBQ7<*#w5vo662b)$mbHNFNfeFwXG z{u*OpH(pfj-xeS8t_gZ~;mxYF*9pjTajjx2Kd1A$MIs*(^|s)#l?7cx-VMGLZ9*dz zlOPY?mJB}datkleFX|9B@1%tg^%;)|o2Q^Ccif>Pae?&qmu+iPm(5nz@g@FfPyPBS zdgULe0Xs0!M@L;o;bMxnW!6vx8!|_U(ZW+N{n3OBFag}}t|qC0tD4!Ll%=Odgtz*D zM7C^yAsz+}ui60YbBB1L_-T*q{#qdcyh65x`dQ>9TTQBF!JlVUshFD1wY(nuSLB=j zYS?gghR{tHT>AP{eW!obVl#ER6}?zV>$s6WEEaW%zzEJK8Hy}a?M`&Vky>P;hTUeU z?U4RJf0*{B(R_0*&abpLJ4Cp$PS1~%FB{8?7c84#_9(`yZA5rXkjF@95f%$n`=f@x z%BV(0tpza!!SNRC4#qxW$2KuG$k=f2cya(ds#Q`<8HKZZ2#$`JgmUVrD*-c^aw-M% zw6;TOOEBBVD1)O{CIW?Vod23!Vlrzv#eV853u*FS!2_=1i$J%t7HJT_nsSX@08tL z)pCwKU-hVZi9DyPXJ~yZ^(ZYxiuRnUo^d}eh0|sVE@DZ(LnPl}8L(l>fT7tk%(gOn zNu%_VMzb%lJBQ~pP%ZFemHCp)EN&r*evxsLP$dQMmlTv{qI^j+TTIP7={8FTTTIPN zv|~jx|FcNbOj*xsG(#s?D;q^Cp@(Iv?MC1u)5l+QXoz&zSWRH^JDGg@?be$#8{Z$? z9>sS)@Zw-PTSE!QBN5dMBSEcC-*p=`z`JYs)&;1PjSa@prcFS+DMkuGYh)j@7F2%N z^*7qvk#+W?MWnM$>?NblrvJmHv)Q)_7}of4>yhX|| zH;G|x(hYMn8Ri2o*b4l#91o5x;IcI3YH}!-=npDa;5IY0Qaegzw!q}uqy+>mt?$?PXI`yex-_n9W{Gk6L> zTo|ZqinLLRRQMFt$d-2MA1+%J3_QU~I%I*@BqWAQ1+;h_lW`CI&iO6P`3c~K$nBw4dh*s)Uo zK6AC6-l+LpwXD<$G^WzeD(>m^+|yTuWW1FQuephh4nJ)b_4In`>8rG!Ue7&!mD$r* zNl&lWdivnGn(Kw%>66}0eSNC*^c_=h8m@Pxk~rh-ox3;RTl z%(frBUP$ZJ$VvjoK(E5nGNTJSFS@W3XPN$lvzX1ZIy)sKM=cLtun(6SRvH2PCSj8` zp=h$E8BOY>*D2hb;*!IYSP*#H2G)Zj7w988MA&Z*)kukzUtB7-4%&97Xp;K zR?icG@d0y2o5I*Mzz(&rG-KvBI2QJ`-Vkq=qcm+c4(fY2X(oRKdYtd)=aJn${Z;eG z&v&B`>x{rrP?rK!9xzUkTPv;5QJBk`Pe6-}jOEw8J}b(vo8*_4wVb+44JD0z9-^8@ zd0MDrw=nrp!@VsFy34a**}Z6C_u`aqET6+?1yF&agaR9|@opN6Un^~<6CPe7l+%m> zK6S=|^8nc^@Vn}gT^k}y~6p^WZG zAo=dyM`SSvH}OWBEft536iiKhp#a+O#;jnI{fmXq?d|Mry~9w;0}YYJzA6T=64~|l zi0ru)BW$ZXjtU$fX}%R3<|vaLTr+GN9ocfL1mR8zbW#xR>RUMomvoVWaLM4zdCGPs zFRMV&NmLwEZ_6}Q9`wB&hcnRkmBE|`qoUXvMJ%hxr!&vgK##m6a{jGm*czE5?4v9B zDu&3h=DSFe;&Wv%8&B4*Y&{NdocOL>)4!F}wLp+p`9g_hAIf^^mh}VCWYa(z9$Eh+ zJ`?#W8)XzAD|ZSvnTjVsuI!P`dUP#H4Z1s~hXoD3iF zpyN>QA^%|qjSTn5bsuyFYQZ_FtyTN+J#S?(pEL=j6p0g97@29_w4GSs?lBc759^$03L3H>(Cg z{feAarnZn_wLjUZ8dwg2cWtOU@Vuzxs`KH970?rdBGfUkrtnpFgajIxQ$GT2A!!r1w zb{LLQlOyT~XD5~J6DcXNJEUpm8n!ZXSK^+SnVo)k3OqT z-R@?4`Qvh}P0lehJ3Aw{&$RK`M4H^5b@1ahKfYt*m=gj zY4DN42!2>Q#dHQDzf?JAT;Nq^JtI<2GfuHrWa}+<{zs`R@6P0Oz9jwF8wHX#`j~Cp zYpR~VFL}ZHk$Jbou8X#Rn(N~zJ*5Db=&;;$a=a6V>qj@sQm>!^^_D_45Q^A!+#G0I zorO_YoVrGzx~-CqOsWucJ~DZ1WbMsLZ=vh8zQ>VC`1-*huR|{kcFD_&&6*Qw6BCYkb_Zp6o$~K_Maayn*`F zBQ{liSwP)) z@oqAaYCBflxrxQ^N?ux_wqB5%dB^)?9<=wc9E+eswmymRQX*Kpf!_9t7{%BWWrozY z?Np1IX4|a{d}g(IyVEBR2DX9as}uF$`5$>B;M%4~9xc+mkvcjk>8%rQq{ey&$kqx8 z*D>9XCaa;@$qAeix!RVe!RV@T52nETZN~p$?pxrZsGo<#Sn8EF}rD5*}Ya)R#w($MW#h%N?p5AS#fVKZgp!2Z&8_| z8Rx&&+K+S2Fi`jVzTfxzlg-*^uf5lPt-bczYrjepNUeanI95Ku#@^Qq$1Sh^Ei=#; z>PIVF&_W&4_w8z(CR8IdA$(Q!mj?`-;=W!GAm!(o)k66pT6-h`vMALUCh5Uzgc+#D zFiZF5NxM;luu-!IVFMROu95WT4{Z93`#A>FU1r!w8GIf`Q@bR3LDHyqrtpK0Y-e%( z3}*Of(3T{-u(OPbzT>&NrmbU5TgRLBiCkUP)-}ywOAe)*9l-rmdq< z4)0K*rftEdJw;91!s_BwfTq37k5;&#h3dc0oU3cvI?=RaplPS?F*NOcO9TOG+EaF2 z)7CZL)L|aviXYmvTD4|re4{lI*y_#cz5zM9=Kh@qyF@mai*Hji z*I?~8hY~QV87I=`I$EGwrt0vzxqoPw9S94kQG#3`8e-qYuT1jeo~Rf@AN1!p-N#l>-d;G z7)K%-e-#_mFB?12G9`!CXXxa=!mPBib}ByMUcxC*-Wzrs@?O6{97IyHF>a`W5$PhD z6l&%PJhe<+YMK76#BRJJ#VR33cSsrs!zEDa8YuNa&%y(qjQuFnUy0(C{qYw%L({dWs+YH}O`tbT$ZX#k$5hw2_fbb<)I3+ufNIJ(7t;_S`(SZ3uORHQ6{9Z=tPVEw1i#Hl~F(MN!}uJ-27- zlps$=t$s@bghVZQLl`P1WxRLO#$FU=6=>W7HD&!eJgP&@i2~e5JVO;TBb{rxBwz~I ztKLOfs<>a*XMC>Pz7qT4F?QL9B&A*Uk(16k85iOGd8kIJajsE>vR30WsLEE8WwQ`h zWMFd&^$>@MX!(H#iRDZUHRkEP6)L-^keIr9hr&wl~Pn4ZY{SRC0#bqL4&i2LObo`xJGtQp>V|@PXGDGDyr^$Tb z4Fy;5u(&qDhTxn2WH8Tlog0U_J$DniV7DUbt7T$Wo45nFRjW1`>bD#GYsol*$bES| z?=-9;7NiT!4j_|@SH$(ys|I%vYB~(Z zuY~bXQ~g4L*OgcBggVQ9jIYaeQd`BJ<^eXgug@lG2Hcs75}1}y?sW8CTwfoN;A(MenMU83_{!rm^? zsc`6<2|C)2W$g`Wmd(SoE4c880e_BE`-Ym_w^$m_D!5lq&7LOqc$ze?t$u{I@*p>8 zgv6~>J@nrYT!%l@_KX1OKdEH{eMhQI1rMGHW1I?MmL8M`{OqkY^O4+7WLaD#pRxd1w{>AOR1hZBhj(-dI@zoX~RTD45azXaVhmQ9fz)`wTadfiiP(}qj}il zK7)^<$W!CLHR#qRG=6svfyvT=qjCuk2MDo*_v$vhuLrtsbBay3LAk&DK>ch%`z^yK zQWi*A0YTO-5GgZ8Ni?4OuUA~FZG4L2<+nJnugWif_2@jvPF8PVkxv#2J6XMfN3s_h z>|`Y4j+Ey23SBT*%k6U!^TjGPTjHv13WIUS_wzjc z?gP=YuYe)!+1mhmK!v{z)9FoVEC@G@y*$sK+>6=`r&?{+`qw5)qPjTUR-MtnpV=UL zz*GBi0(J^D2wdaE#q>;=Kht{~Ws4+X+P$%SKAvt0T02xDc(8#u+eq^|9nBsr^W3gh zD^@#e{R&@Mn~pIH7Ro6X^ABy{J$c?jvF^YwDeYiO$k`)MKV;#n#gKAYaKLA}9jUGx z`K`vaVzINaRkug8+J;kPpPuYrj_C1Q8@QUL53>Gv8Sw}~##8x|6BzQfOsjcXK zAyZH@u6Ay?Hqd>5hT)%>u2FIKVJwIOt5LrG(1=eDvk3g;EpGFW4+31#PUC1-N(Yh>Kl*nFvPc&5h58Az>F-`NgZ{8V6ZUs zjXM0e4=udkHkWK3Foszz+wWo7vMT%%6u-!G+W0;V${5@5hSq^>WTkA@S>8ysnQIC$5!z*se(CJjC>(&niJ@GFK$^Oqs%GGwtPGVHJw5_{IpcVSTApW zC!M4}8otZAXt(sz@s-SYioVQ$WCg+3SY?=iZA}TJ5bGbTp(kaceET!FHT7#x5Yv|A z3r86lwEWn@yr}Oj{e`bcy2kh%8QdTndaal%w#wt6`>G66j`P!u+1YfunB9`L8?PIC zekcC!+7a-^w1x}(Du?ROXE&gKRU0;o0@fS&KExmb@?bu4cLD6xNU zHZ<*1SK?LBBKMGlTNkhLXdMx?zJ!bYI#YUe^5>Yw55GZo8V~^lakqx=ZEAh0V|>_x zq7Jipckw)+2N6OkU7h?2EExH4aR4V za-RQ6dsGNVJq)O3e5>{4TMgYJc&aQY%@+QpQGn0XM|7+btI*r%RB0QcMHTF#n#+tO zjn1cD;>QN{T15)G0=qubz`u&*-vzhgt|{eq#0Vla7M((>8V7iw5vKtL}vF^?$} z)*WH1q;FI6IDug|DWUVYq{)R8E{lrq8kVCP*{e@)GSt<_Nz_SSF9Y|nSro;`a^kxn z-e~vnnhUvx*2E&1=A*2dMC_T@XknNyyG&{@|9WK^uaFEIQo%<` ztLm{d{X_s!V~R;Kutmts6;OAb;Ls-d(kv1uy6tE(N(z(ceCvou-#{{7EE?BL|eNv8ZGm zxP|_do(;$qXk|xG9M+4&vmm@g0OnGmm37?mI+$st7{JGh6)&B zt9!*g!dug~WjZ@&hp#64?w!utFma}!ySCi;{t?h^b{SIMV@%oHdCDI?CQ>#}XL8JU zsYvy3nxI)>Otogbo@R|d&5Pd(nl-7M=DVq!X0D{^GSbW$uN$yn{7cm_y>V)d`D?O2IIz{EnGtu03pkLScp@(s!Y9}Wo zZ2V}NjUADw6(+GBDaNxAIHeY6BhF3p-}rwUTjAZykH^+(J3;F40E4CKAw}4VWZ~D% zQ+3SC_7(u>+dX49Hy}jD@y1nwA zsJ&thjMBj-*sC+~>}4jNy-mm1%~jg&JRV(K#7*Vc{v-)vT~4o=hWDHA`4*ojo#xHh zbNGXdRneZhbKkvoA08i$BY>&2Flx0xs2ms4i;T})=@d_r6`8Zv`q|!Zf`DeRp9Mg7FD~BfQHc4*P(nn)nh2l;i;EMHqHkIe5g5{<{n)WK1oWY{N zddV7Y$k zdj;SAL`=!IKk-(mkv8WFW|>-e&{lnQ0&P~|rqYj+iC&Gg>f5LBg{c~8(En+wZif@+ z@LHC8W?S7##nl~}slXE^?4~cv)}ySW)yt0dgr&X)`V_i5?ryt*;%?sE=oT@& z-kRhvC>!7z!tC-ouZxK#aSHUC?&u>f>`K`LjzeI(oH} zs%mkP=!i{EGQqc-b@+q4!`Jf;f8`YH+dHYl9~2$_@65BZe5X>@#}}EzJG?v6r%u*& zaKUHk!rcL{Tt9`hfgw6}^n7h#N8e)s=(;Vw9g{I>)Qghn!Y;@UA9633#6;ypu)ZW| z=o#I30pmY_s%_IT>`TUdZ)BPDEIjSW@NFtTjaHhCVU^{lO&jBw1rmpa7TKR$PNc+h zdC=0_-<#p{E<7zB#%8vAENRuR{>Pt~*5b)HZO|clc{5Jq8*y&7xeo2dwVkU53Hl*l z_a+v8OIwO3Qc?V0X#V3=gxTe)c2wlcTAqwXRt|if`)^Le!q?WzpkQRb_A1GrfRFnc zyezvk4Su_9oW@hazJjZ=WcdnV=O-H3RpA|>A=&BShKFH1M?WPq`}6g9L-($LkHnnj zkHmNh4dMgCdaGDOe4-{R39pI9V3kKHuq)0Nbp_-84B&p#709KlNd_an=}vMs(CaYt z;7s){2C7^9NFSd}=K7iJA(+V&$32vNp(tlD&``mmV6DeZqJ9(O^GuXSo`_clFv<|* z>F!X?HxfES;ads(pQvh{7=Qz@?KYL4!Pk*C4(2soqp#^;?aub*ez>O-b@%WRVo#Ncm*W!z-5EJP+Wo0JF5hVPgQj@O zPqHKZb%7u1PqZ0wHQ6~q158Q#V)(FQi? z;pHIY>e%{ZEkAlOF%`F8&`Qomb{-1fII{8Oo9*Mo1rc}i&4zT5bUmxc{(>;oOn=aY zsde7Ef@=sZ9`Up+KA*7l5ap=BB)KBmR=uzxwT791-@}DUCi#HIBja!t`D=cNr-j{% z0{)*(z_E?C___HOM%w#iZF(3hY~VOPVSRogjllX0Vs=A!-EURsTF=JWbTvElint=3 z)#j=3l6ioN1-_ayph-v-e{HNd|K0)dN$rV;>WOEL$5HT81^GNQk_E;MDialLgGzsh z;Cpd`s){Cv9IL7Z&YEN)E)eUeE&lrQ;j#V$k2t#l6s6tu&{$QsFNgMqGX>~`uW3BJ zl7MF(HiDuSf$!FlRiz70RofE2>2xO9ypGnPKzp7xc6fH-yM3PO+CW15RGV0E`;@zQ zp~A?}rhoR!vUvjWdsU+l{8dOFAEF^cW*gc3iS z40@kug9*Jg$h*X)wD|WajU$xHjd&+G#u3*A$o{-gG{8ni-bN3 zKbaHxY#AHVh{L_(`9cqi9xVe=A38&Y!dm2uMp*IQiv4(OjM~VoVVfhg`qrqxAcvk> zx5J>c#}X1Bl}MGLCmQtMB5KwV{rhM#n>K1Mud#z5{C&q0zDy?lXG?k@t*yE`=-E6< zSLqi<>FDr25pO0=@fkDb-!t}(*1bnZo9T{DRRgUTFHr@TW=a=6BQXfmIy_38gJ$=6 zl+##fcq7BI8Sm41Rk7klYl*^8Ng+Ht_&Xc;b)w<`lCWaf6bQS~KWvQ_mXGkLSx*J= zaq?~{K1S=rN3S(NrgRL|&=Niid26KL()f1d4r97+&)MR-kg==Ks^ScqMs%tY_ zHNB>Bc(-0(nK+8VAi|^z!_dcH#j{Jkn2}no`7zGwk@_nQQ2){$prd{gNh%gvFn8dm z*oLbQ-A@Y*YTCK?2L}irP{&_slY3xcs&WmJ`NcK{ZA%!W&Bi!v&G!7rRwYQ~n~-mK z% zjnG#G9%*Pjyi(72M=zIVUhSIMSk2ipMB&C?58v4ID&D^0b2Gw1^ZSsG^@nTq%PuP~ z=Sr{g3CEwP*k@8i8CrB@z;_U%*^V^!(8R|Vf3`j8Y4yB~XP@bEHwdz0hv1aj`;QZ0>_%Ns!q)|M7h^ZI*Nxe82 zNWH)z9sf>{sz59sIb2x&Dvu%orL33lT!LZB)np6C-4=+Y8P#QCY~quuU6io#5G^Sd z&8adZ_D<&4-Ns)rmBDaZ49!PlI0}y{RUuLL2Lfl={2X7VV|WkYwJgu@%knNQv~~=D zzn+?zscW6;T{Jb-HPS9p)~Zg@92e?_yhq+_k=T1*`>wC4zOr%J z@Osh}Jg?b4_!5nmT~F9N7cjVICj~bo%HD|8B}y}UQXM)@lD&>zXz;1(2HqkQ)d6%Az* zmI|)uumh$+q6I&|v z6}45mQGtJ_4UzNOWRh`lta`YH$!6HQ#d?Hhx-r;OdWv(|XhaG0UIfeHP9fL%{tmOw zz%o~dpcheE_!UF|V?YCF<`x*H3dp;bJ*ImVA#U}b^9G@xka~$u9Z*adE zr*FPQPx+^G6hcg+*;(~}D|GP;BsCqB2TRrGtRUL59Y1DN8po&SXfcQHJn;?grQmLQ zM2pzMb2N$02~K0t6vO>X5NoI(#ojuK5zO7HosK@NF@Ua#S6wQLPu21MU}JT>K3J=c z7r?#4e}Q>-JB~g;V`&;*y$_6ikO^77+{`a;Krr zkv)YJ>>a`bvz||LSpJ0FufaGkf)3GC%7f=p7HHOf>S$_!{pD zA^KSAo#R+qw(70XCgCKVhdGO*Sx)vMvbwx+HjG>+d~e5T>!;&B8)IZi)}QlhA* zRK5X=1Dui>qDH3 ztih9!4BL}2(okR2Ak7eMDCLy#X!qRT6e}3Pdk_^?Z`uLA*~m(w`hkJi`1|n^PK9J5%BoG&;s-R=<_tJeDyAPvb zi(dsj4)5tSQdnt7&NZE~Mwdt%17We5k(!cF-`AxOCR2ESY`gj?XNSCNX^EL`AFaw} zkG$*_;=7kWKX0zQ$aj4Jf%yXrq3QYwLoe?If`yMQ)H}0UVaV#jr48MIT#m!yR52`m zIY2iFXGcrKt4;i*WAkV>L)6`L7h)S;&u{LN?;+MRl>o+T?!CFzeVkN;vJl(3h3x8+ zdu`{+8-diaKvQGA6lcwSm}R3uKeRRQp{;=rZ36>5M)o=jr?3UH2Hi;4z#C6D(ltQe z2dud2D_U$SVjob2U-YBuq%$rb^pitMwCg%Ib z)W^Gh#n5@e_eS48ULX3A5mdd49ygG{RiF%?H|^q-v{rFp(gemqL}eRvBDUa0alAGd^czkydIUMAxzW*&6igSZU`ufC&;!W#p=frm;* zq}EnUfza+bvGE%oyv397pr$wNB#;bN$sGF@UASE@Oht^%VsWn^8X_p2b3fYf!ioPZ zb$qQ}FjHC!e>Txl6^Vi&?Q4_lIIN8tuszsz>a2b`+jx7(6MR)&t5IAcR@$-Te{U=7U$+Y`MCHP+S(xQjEJHAYk^+5Cgbu4{Bde| zkp*@7_3w1L4Pm&AE2}q(`z6>$kvV;|4miD!?iQ&|b4{I~sXlY@CC6# z%;@?XdzBEFTMAQAua<3>w3}E~mYlUre(Y|MT8M0x#CyHNSZ)5xYe7XSx zU*98P#_JNb3}Veet+cvJ*W?5oP#Q^`H1ZERk|~8*BNt|kOqkVr(~h9!|AJ1K)f%T> zT$r^QgxPC1Ue}^JU*ru|;6tnacFUBy6 zny$oWU{#~g1Qvpq%M+7KN%L)Bd<7i|A9f;hLZfK|1UZGJ4%&eChPYUwc(ff8uAVSX zpW5~ql;d?KtVusPzOIelBsGb;3%yKI^5Gt;>IvQTlxD=BOs(&zJ(_d0+E3tWAJ+1R zrDD`E>8YLV4rLvxsfVFY$#9>~(S`e4cRoST)s%Y|D@Q5c2$dNNY9Qom`0KMhyok1N zfdbO=7-_Hj)FRdGo9#J|=VtVY*xKhvU%!k=f1PO zb|D5`ueDBt+NXQlTjaiFzuEAqZU!T9b#hh)wr`YvJu*hfsy@&np3tLft+++tDh&9D zA>frF;P=rOa0dkRhTaapm91*I`9$a~;G{)?UfxhAd53O@I1!oyPI_};ST~IJCeaW5 ziEeTX{gr(+v9EuzuSWLuF8lhJeZ9oK-eF%4!`F$>o7VC(@S(xr(yrRsbXw_-`!+6q zPuoRX2<*zF#ir^d>>R*K0@ZmczGm;b)H0m*XIqA6R9J>D++i8MY_Daw{h(!dVXbAj zyWTRqyiwPZRg)m>m|AbB*KJiMS7ADqJLaHeDDIj29k5*h2l zz*%MeftJcrs8*{IB-zT^AlvT4Eai`E!;jmltC5DyyNlYvOLVcAA4lS6Xo3qRMKmu0 zS4VC!qgY1cGenp~+i$d`k2Z|B=@_=L;rgQgyJo-W)Hm`ToGXP^ke_8cYFwQ)d4QIE z$0=I&F{fzRBfoakvhU9JZ`lEn#+Lm*ZpdyC)Q~Gm0yN}v5j39*(2A2H+P9*o{9H|?S)bQBQO_Q>dN&f>58)XNih*Xw48_4-NeU@{(6Pd9N{51O70+!-yF7h<+X z<0KY^8aqNB2_ssi&onvh^!m3jDBhcuc6wPL70^?+6<0kSpL` zQmM|+lNVDG9}nFM?BixB z+|;w-X3-A$fo%!VHqAyA8m{1}m$1r0pQ$;(RI}O)<<*`J(NOGRMrhR_Zj_jkc4qw@ zVzBx#3{@zf+$&N`J^83Dz?MF5m5uKf+eT$2Vc}~b?#3OK_$lqfXdLnjMZA+fE-JYE!BVT(8{lhDt zTEI5lAyCTRlli~eTaBl_ymZjY`#c&mynH`JT7~*N2D&ztc07|5>z4*ntW?oSvBhCr z?Vs5hCDiiubiSP7Psb7_lzmwhr$cyTa32hBzjg0Gs7_DP?5*{l4Cv@5E6eLl8~Ji$ z9}~B@0;Sw=-S#VYFW>PHqp7i3&Zc-5dNWMl9S8e%$p|*SGcnZeB2kT+3dCl>$(^Y!>!@e$HLDAIBHpCJtsHfBycBtvFWi;;_pf4h`$j?E5^H| z3loYSa+0c2B~-(!c<|MiAIhy(i~wDuK`v&nyhI{S_&yI39b+BRtxkSoI-X|_qU2Lp z@(5r~@jhnk`!FE^(6)UrVt(T&ZBze zITvL>LpNih>i$8T1{UOBROVnU6x-j0AM64Rbn)e4Rxl6MIgp6ubum4J(qo@hi5Pxt z5b33vSlK}#y2|byOjVP}s^$U{Dv9U##@xa6b>~*L2Dz`+hpXO|No{sI{6#hz7o++c|Mz47!fXE&w%H*}8G#dYkuo;;riHOvYkXJ&Uy%8SA|AA28Oo;LaF} ztL2HjcQLk+j8Rqlo5oW7D1_j)@j<#w7!Pa?r~EBz^;>QAdDx1E2@)(* z*);1IheO29j}sae8%bVjI~sx&l?I)EF_AxW!oV7m<}YkXJF5Ob56AM4ax$ zH#`p93QbZ~yTNMHRwa50H(N}4530s!=iPJ~H}Ci>d)1+brqV|RIFB>uR&c(|oIAjI zggK#{p+}i>FF0Rg&i&v##+(OHrZ8s>&gPgClX#ao>ojM*=4=4x2h7cY@Y| zsOjj9Gy230rZe6o{U!Qh8_I}MrUuffcGp;ADDN)9itB)GpK7=@=A-Y?4CqG}!>u!h zdm6%3QYaG(T-h3B*;1ee*o;^Jc?xVRr&&?Y0JmfJ^4;@moBnoedgaG=>#u?xE6YE% zZiqRN_Nf*9ZzTU~6k!9TYYkeZ@eQU2Tem5Ee#B0s#{wrI4R;#D@1U)-WEO;39**5K zV@mD-dmPWVTo8#i_ih)Af`Bui!0MpTF}{Z`$U;-MnCIJZp-npl+eq_iD61#!BFup+ zTL-O;@i}BRYVZjU+#+(31TtN$DjqZ0&=%;DesSEL9d7T*dQy~4+Y8~2@^zDWYQEWL z(r2etJf$R-^}H!Fpy(rMKh)&c*T%Cjm@8l1d5m~Hj|c%N6o?r5TzDD=4&Cw~JE_~k z^Iq_4TcFLXTt2h`<;q&xF2|N>c&uKAMbSUTb}>Hdc>~)u&-HaXADHLPw*DT^*~~hI zd+Y*=uK$o9{?uyZhfH5Zt3N-qwGuy6mR}sSA;!0|^^b7Fx9zw=R;zEImV$vDVp*2d zb23Xb5X@o2(lEBjjQpXERWZKz&Kbt4W-gl9iC2C@1m$S!d6M!0Ud8fNpVMWieH}Uc zGPI2806as*=P5(nCLiNV@ypO?edGCw3Vr^3t(3pUzz3^@(+@H9co*7rZ1hsqKX^Y{aSr>@fk01I>9+G});H~b zZOK7GKV0nJ_A+btQJaRC^p;7Z24&Fy zHW722R5nP%C8b%&>QuIy_HzCCbC@3Rz~t90GhY{n?|HO|v_+(WMc^5%JI6EV<5gNu zRZ6^VK8scQHB{*&|0>m2*MJVIYt6Z~Kv$lNt(8P1#`osW#*R9U)o4Qd9!OWWHy%#W zx?k__R9*KAml3oATi-wJRU6<{e}m2YX)?JLW{WYYw$lrX4i-CZ26$bG@{K0gV<`GFp7V@l%uN;ogHbb`#Zp zW`|t3|2X9Z2dAb(EDHyjg>xOHg5UBY*UdjszV_R2D>NCy_hZ;)^a^?nhFJAu8#iz{ znAp>&Bf=-)tqlfD^8_2;^UH1pl9tpMLyDI687B!}omP7oS3IOCqaLsWRuj`6#y z((1fvn@LvfB-K3wRDFE9z`ftbpV3=#1|`NGyuHnp?oHbRUe7~eW_uu1X!dnhTJA32 z!=m8o^}?-aF-Xl!^_-tg*E~!dqnnTCW5&_iiE9^oajSYQ+25!xx=izmg;Gx+{Lxa-8bL2af4M=3%@qut{(;a9c&X; z)Pv%f>It6nYxXXx_f5NfXKqP)`DE|%~Ngq>&aT$-$2pamuX4*16{4`K$q^3wM;RO z=={|pwhHp#X*QiXk#;hg54Y?Nq?0tmqq`L{{@o@X?kVdnW{Kh7iIH_#khn0X%d4tx zGd#XL2mx0#x2Yo12TdYUf;>9Lx0UlJWjow>USr&ZE~f}S@4{1T;!vZ%a;EEvw0fH1 zcF_+1@siaCzGmh`Q=6)%67+|u=KjHw2sGEF`Y65mO}*lP_@7_rhY?a2r!Jc9`8ai9 z>Vov@As=0BRTkQ+MiKQ9=WP0LEPA-@wcmn$voMXSf4i(>KCukiOd5H*=R&&Y z>XDU7ot)jUBn8MEIZI(A<_mDZsNodD`e? zY}12KISQo(vENYGpNSssQk1p!5@&vq!#ZYE;;6(3w=-+CJ;^%6X}w`&o;9z?=}Iat zDse4?PlvV8xq4)Fk=sF^#a2XE*IP%H;HS&#v}YGNa-8_Fc3DJM8P{5vRc2jfx8@g* z%*x3ru{)j2yQswK$SSn+k6f!O&u+~sE-uK=&T>J9BD%`ttocsDI^2b;>?IgB&z@D_ z%ClzY*|XPJOYAqf?M{~ya^P@HvF6xwv)ly~X-q^{$fw(BXYp6(ueCc^w(}iMmpv;7 zX=OQ``KulIj@8yIYe|+Pr>KwxNf=pT1w>JaJ;$1#%OVd4f+g1MEFvj`7vuvmPI%7T z1y)xPmKVb0OtFq1mpEx6<^?}RvOs06)$YhzRRCn1MTJoCLMkX^$6o3x$+AMLtSWNa ztwnBEvD<|dovs{vNlAo~wF;6+vSt?*7DDQfw!>~M&MJYLblFQ1oWre!`A{Io>IkKv zC_AfwnqmBeiHW?~l^bTJ&Q4!ubvsI+y`bEft)gPAacuSoWk`-fd6wa4&zU)QnZAq| zZVFa*4p!Qb9BU!8DX@(*!ayHOhZ)azlI9hy zgGSBDDT@%H5Tnt_iO}LZU0EeW09u6jcwIg)#t`QS4TB^hvk`vf7x@FOb=b41jWrw&C%G_&o^|`vJCyjEKpvYI&aQ0YiVj`ri{qaWaVS%e8*a-d)d}jS6Q(}9)joi z)rYI7$eL?kCwYUyuFZ!WsCA!Q29W4iK)?PWYBUKDH= z2;p)j4=E_fu{uk#kx09YSe@?dY!(FDkhv1_vPyDzyrNtexrRqTk?fe`4ie^n5GcvI z#$J{@Byr5df>LWCa$@q3@jwa-1kh1ZvO0OlSnLM5PAXA}OHUR%KKKFi+1ZDcVU2#G za><{(i2K$!pu#kye;ijyz8zyI`Z$Fyfq`xmD1B@T7$%F2Nue*r01UK>Y-~r7RkV-2 zu-H{5D6+pIs8k(okQPu4tU;kJpqBjtK*w`3IuVKkI;=h}j0R5D!m@iSC50s`N?h4V zLWWUa<|(0ET9=2-5FosNKh^?H&CeOh+3HG^W@+>0VZ!t;FddmF6N7#tQIKXqk{JRcWlJ5?fM2YP zupe)bqEk{-P(WG@>siE~sGyZtK~;fY5bancR0?cA(EnCY|1Hca0PTcx1JyWokTOgu z8%BOe1cH%2@7_>MH>+vZ_X|paH?e~#KvQ-{D={l$n^o@of*eK`rPK;?QRzX+0?LJ? z&LZ^@$Po4tKIY}v3+%t2e&Qs|0sisu(7_-%BoB3$^GCAJ|3G(h+EyXisDAK4vN-MICpUlmOl?P{dFZpkf=6=V0m>WNhJnllD)K;DSf(f^Deyi0$qSl=J9LF#hWOl9HuXd@Rlmy0r#zASYV*Y~E z`L-4F7O;=Bv>E6g;v9v8ex8zD1`=e2(~(t@OG5_rZp#>D>(n~Le2~Dxf zjq{w`5}3}gUJkPh5H%(3<*$yr3UG?DuBe3MCNv18Mk#5W6Cj@30n%rU6$c_@=KO3i zfDCbV8n3VjvhFX3NT5U3vv4wLr5-Z!N*$#FU;xmx^-=O2xvU zodso5YnQoniO7<;mUMd@mrppETfv$-iM5tKH=5{#Su@r-6Fj`Ke?LA}I}9i&(-Ffe z+?pUdE+6cM|6zKV6P&HH2-!Hs;q(x-Q75+{NcA*H>ZgJ)pm(D1*M;M}?HA6_jbJP` z=xjP9>zdSAU``5ia2I3264wf7r{Wb*JQS<`6VMT;{W3ifg)>)o?Dj&Zb)7wDwLM4n zYkf zZWKVb79~kcKK+~*raUiv;ghm$BVjYZJ z5(5VPqLcV63$k^xN=mZIj3kUWO(`19q7KO!4Os^D7-i64h~TuBtOemQvLrvdxWF}% zlwm#=jfA`?WXnoTPo0;sB4ZYgd-E2}zAA0SoYai80N$B%X-rI_ruOT1B;H~4D$FY? zVA>ib#sv@4!X=u?C5XnbSEZ+=&Qs>4&YqtJ6rCW>^K)SwW2(N>4T{SxR%;x~ch1~Z zHv)Ie&WVG87)m+98mF5qkaye=XB>D7I+@TQ1@^)?Y)P+!oD_>i zS1m|iF>`i$nljo|SUeh>6v)t-U++?a< zFw2@yywLM zaSn^{_nZnH*Y3J9Lb+ka!i>yi=vjH>=HLVICR2^VmTRb>19Uih2sB{<|1m+^^uk}eNge6%S4eu@~L#_`_?%9Aqa z_s;yzqXx>SULXGNL?*tovl13(l@%0a<@~Xnk76|>I)$)8{|EH^bJPJv_Gd6(6{0N- zbs$GkGFJ&O-9lFp24m7CZQi`O^O9tyQA>qsSRSaJRO{gOHyxJgO$KN=UA029rTOcN zQZ8Z?kQn*JI6W;H$%a*J!2`-`Z8vPM%PUOcz8a?~0mF9`PK=BzaAbt}FzIff)@kbF zDy(^K5Y_}S*3-JY6((pv)=+Z4qKyv-7Z;Zy1uZ%zyq?=vu)? zp(Op%BQ4tiyD%Kt!?K*h;xUCxv(DArpl3(Bvm@J1HbEHZN*uKIrj1(#SOFz4TgY;- znj~`@H^|X&0E!WfgQz{`NRHFlD`|pN=o%^Wn(ZnzjH%Ray0R4KbL%=3VKqu_T5*{_ zd-4P;%+Io@T2^IcuR$GCtiVMmS6+D~j9_V2nzcyjKyu;t8Vmlea+j0<6O*D}Qcy-F z6Byx~Yzf$&4du^w7FrYL&mL~gDYCN~cDjoRUy{96EC@|u2)m210Jf)?4JtVk#!S8< zcLHlaP`5;Gup?oD1^KH=vY;D5O;TZt(ehSED{Q$1tCLB9L)B#A5D)Z5(LXC%3MmcX z&>8k@t97h(Y~t84N}@7J8IMDxVf_?lh9yF^!HUXaYsrbF?fSXG1 zbYc7WhsYwUBB@eTUe>r)YDz$}Nm;%V<6zgcQpWTP=>Gbyu4_>3km8n`l?|hYet1u2 z`Q;)r$IgtzcB@=Yre*sG1)XGbxtuSlJ897mgwtx#zgXkR1^Hqt-vD5o@;lvBnb3x! z=2!xWqv$_fe`WOidxkTg*FKaVg_|%P1gK9CPkC9+ya)q5vW%_Da{8G8iW~(@AParA zh*ywiFX|va%%){DagY(A2;~48AGqz+ub#@F+{TFJtRqKSR~NfVbkZo71evycF4pCNJ^W{?#GzARoV*g+P)wNfV4j|@8)|d2 z3TY{a4~o!j#E8rO0>pPh?|_k>tkh2C`TLXtKY0QSi{Qy79=K_R32P97Tx{ROR!k{l*j1BANV5#BE+|?BlPzY$ zbd|WXaf8ijXl`zEgnA|$WQ3BBI}mhJc2-VjSs@e<%{j$<9o308hZJFnG2k6+wZg3n zVdVk%iYk01v0=Cj8C?A7+=PPZhxr?HVf1^zu4{!#+PXRaQSeu#--*o^B0GHGgkYQvkjSa3#R>f3&F;0N?neP2CHy>9aPq7T`5sw5g2%mo!3r zsMUx63Go4ze+lscKKK>H2iW^x5Fg-vAH)av&36zV^_|lYAK>l(hWL?+a?{UkYCJ&C z**0|sz$BBZ<^lXMNL9B2tPNJx{Q$oWQPnztc=3%7V09N&4L2)FS%j)40PKM`xdB{k zhWG%V1Gp7nmneu2@WyTsAK=pfeE_>!Abu3Y2bcixbAUF0zXHqyxHm>sw*d_5p{fS} zUeQZcPXc_Vx2m277=MYXn!72=(!Q!X0$`VZs+taP7r+95;r$^#z()Wc061s>#7F;u z5Fem22;y55#cYN60CNXJe1JJ|5Fg-O@em*2+{++7z;^+j1o-F6AwIynM?m~&MX4DD z@d2J64e(s*QTrLrvRUssj49{in9G`s5gL{G9X=mmt70_2DlX9Hh@I{ z4*+~=9^@Nf)qKb|zzYD)JrpHw5#$@-`Nfbfz`tAv`35-tddN3G>kW`^fK!)3z5$L| z2Kfefa=EJZ>|@@GF3y0<2o2s(4T^)}g9afa?IJ0Bi=h65zrj zRjmN{YO$*B1=t3#7T{$!scIv@mjEh#K>n0Ne1Lxjm;&%SfGYuZ-vIFe+5qka_%Og) zfCn}~e1ONQpx$E@W%w3VjR%+wa0bA~0pCK zA^s(b^655+4=}kJ;sZQ;2gCvO*vS$~>2e{^5 zh!5~*fH?qr+z0Uijsv(4-~#}U0Zh3c;sg8%U`RiZKMz2BfQKH0_yC7K1n~iyABOk< z2kwLT0B;6(4B%^zLVSRUk3szYQ11Za0dCt5@d3_z9O469^8~~PcsIa(08c#$@d360 z{2Jg@2O$0ckW&ET0j_!m;sd5~UpL`bL1AOSeKwbdMdmi`};3k0Pfgr8{Y!H2iW^<;Cq1Y z1FQiU`BznK0C*F?R)ANYRMq~26{YcSsyY?m*7sC(DZnp2P}TJSr<_vNJphM)tg1%< zhBN@*19Sn5k5iP*0H*@%$;VOC&GQsfX|$=Ixl8yCQt%;xC{8n7#D=sDuaUy zx-uf14xZ6IeH_L=J)K*$bV8uK<`YmaCLKO_s0l+L9-qnWQ`e@3=44Dsj6`1o$sV!&4$@LMH*2jGtZew~4SiKKrJ@N9i!bY)G@?!>k+aVDH_ zVohw@wr$(CHL)kgiEZ09Cdr9TZr<r2p6Jqocfnx;&?MOhQ$Q>}?Rl&vwjYfPOa@vvj=gh_;9nw*Lbt>^Kgy3`M z!0%7Dn)iS@=-m2rFk)E`x-{a~*O~%4KZ5g>G7uW=1Se5{N#HiF^{8>YfuJ$iZgTd< zqB;4y#btEDFDcT=4ZzHVw#wmn`y*pOq<|ae z9@&r0fX~jsR&dY&f~{3z{(nCvr6A_U}y^WlMz86&)wqdUbc{?cHd`T;w3z21NCP;P?_K?lEfzkeCN0e^>p zez*IY>rb@X@3D3H;2``Ac{aRTed%}6-sg}Pl`62$rom?z5Bys*;g?Q}BN!jyzm=zouuY)~hz^Tu_c{l-)WgIHY4a~=mst6d-p5kg=>PBD37;0Frj->kOnOC{|iHlRjih3lu!FR2uOX+{tZhP)F9!Q&EDCFY1p zemm6YA-ZMk<@KxXxrTRrW!$~^wj&&$U%VIp4P@G@Z(H8_Yt8NJZ_r;b@Uyqb#=!rC z08L{i_(S_N41b!5zCho?L4yFlB>qmQ^!f|vstT|-R|NyIJib?lFriEF$~XX0oB2sUSZ1ll+SD7(-N+^bzm0O|oPQ-?CJC5e7j++R&68$)7x3vy z1TdYRofd=>0K3@55jI4 z1PEF9wRPfOaWU4BW-oEvV%eup3BAB>-Pn}}?7w@{%^RZiXYZ1~TMz1^D=q4%`hv3F}gAeY_`^ce$t<3e>_kS1tajqL*bAWU! z>D8q@aRA=??AY68ACXUcQ2fE(j={U`+5`p|2zZuyC++qB21J7<$Kc zYOds73m|5^;{p40s8}!5Jw@Hk|7psYE%ATmi51_I@X|D+&5qBS3e zy}o$2#Q5iBddo8&y*OV}TpBpCop$gF-ixwcUa5`rkFNO%=G``+_56;*;$`QB2PjPV zwY0gQfY0o&WBmmJ)?Y{%1h48l9pEoT=P!@@3`T5B?VqCN*UMp}v=kh6cP+`aUDz#P zA6=P-dy4ZPa2odd8~1)HANcpGZ!SB&w%I8(s;Z{r?=vocVQCqdz(lY90;T^R_ds}S zl~p1sC|2vmyHDdV6bSw9QuDP+@Oxnz3l&}*eT@jV4r-%6v%ZY^Lja`_@4Ux>U(SoV zj<7tT?gAj*Q^SDC%^(!uEsx40i?2^7_9x=5@%5?4^lVdWk&dJI$h|G^ZXMJ+0P%5y z`obM-*ZULhH9pX<`)kCnd$S&dU-U94Am2lM*OTrkQaC^z%wJ9)R3&-yFSE^W`njY&hu}c(*@0f)FyvoQJSu@gO?+fUVyXw$iqZwfIgt}i}vbeY-|0h ziFz430LI;yu)8Z)XFh(B*2>SfSq@RFZI*_|IfX+ zivsXl`Ag*`9weY`)|XR$@#W{y(C^OwwNHr7H1sVX-?igiWb^}v<-PtI`;Ni`M~JUD z{or@s`2SRTBLUx;h;ZVxKG;sb~CDUft-I$s5=|^82k|ps*9}v;6di*|4e zotmVCA^F=sbCx@YpMzhJXAL=+8w9%getv&f?%gSR|NL~X7YH6A%u4C4XLQeaX|3Z3 zRt%cO#ok2+wI8PSLB8GHI0%Lhq!RAzpnOUb5X8AZNFg18_HztzKWmRX8VoH=nSvAF zdC~^-qVD2hl<&tiUyH8rISm_-*Fy*R3B|+-J_ddc`-DHdo}H(Ieh=YZtJm6Pw5bz( zGF%Pc(tcvUSncgRb`{M$*ek|;UIBQw89@Hso}!3H4rJl1Tsnh>4B^&XoBexRg#6=s z2!uo@x8%rxy<7Tl!!9y!XU>#?NW$qu2ej~Z!rCJTgm8CfAayvSgGbIlJm-7ZKoen@ zW7zf7o&qwJ6KC>(DB-bFTiU=+!tJTOV#1!@Jx64L{aXU$87JIf9vOS&a3{{hflNY% zeWvt*WO}|+5ppb;Q!Amg5a&dJ3^hod&RxLCDrPqnXap9 z5}V;3ZR@~MiypI8fB9hI!R9|Uvw;lBV)PLd^B#D75secg-Fv3=-yGt9^#VsDk{vcs_u@tJ?ykHWM{EL*0>h68 ze;)KE79`ZMn`Euvk-imz5KW?E;s33VwD1KPXIE%WOCAo=b|5q`p$4}+E9X<>M9w8F zEIcOICD`hgoc>);td3{5vw+8h|B$84ko)-F7ZwK{$0Y=O-}pp#C#)-EIN2GJM0lhq z5ODEzyxj|mE4|Qp+$gF6$FI{MKgxp-b}37L{F}%$csKPW{ZB*@qwdg;sKb78$7ttO zQ5SJ>5MFu6N7(i1sH8$sJ-drG`2xuc6V?{o@jnukJ{e%5#c(=Kzsx`8F&|`spi}ap z7@nMdq0<2~WO1#+e~Fg-0g)kdBj~JBH}wt+O@eLwE&wckG8x8x@jSe;c|$V{v$j=U z%ma~y@QF<<$&m~NcSg2@>x}yCKX>p9B)XBrzA{aF2Wk%_6sXqR@Qbul`ob9Dj~v|) z#M)D<0{vkb4#ES-4|KTZC2-P>8}C2-Vv6FskCTDSS^Q7g0=@AfubdVj7{3^{Ku86v zNyP%Du-M|Rr7VE(B;*22o4aIWe^SU6PT)HsK?@E7o@KZk_7e$r>S$?3d^nSW2L+4w zYOw?bK5a=*!cg?{?>4GUnr~O8S-w+AOBEhdSgnMIEbE6 zq$%B33}6?I*kzh77EU*%rt=e#_zrX8Q(le4ItmH9;F-2k8IpsTG0`u=`FsC))Hw}8 zI*7Ypb)fw|q((&dL||U^{#{aqSCjV@^S8dHa}TBVLn%#GYGopTh78mQW$X(dLjHtK zE)Z-&tRt5b2S!x-E#EkxjOH7^EzTVxbc7~)W;aH^2tT57(kS8ZxX+!qsXOM)QG&Ve#4q^s^n=H85jmleoU^&B z(W_VkzTGt=DG1b$LXIV zR*j;}bE1JKvelr=C+fJ6?;NGP0vKFy^zI)R4Z?i#7R-q^^QX1l2w#{#+J6A`GxFaX za8Ntbec8E5fwXTcr2m4cSLbumJrJc>sC}nh>KHr?G&#O!K_(vKpAyy9U>=vN1S3U z;}y?AWD)jPPk4-Aqw3)$7&wO&f~e-V`CsSkPHAL?HJAo;KRkF|u16rd52Gm~*WL2_ zVNT1foc6zcZ^p4{FQt^xZ1#Oh@;jYrK zzNuq48bRgv&qwgEr3pRDSuk{iiaR zq2Ndp+i$ovzY!v%jP|8f8V|>TxrzUu{_w#m)c3OiRYV z{W|~a{14my>k?ZS0sUtp@}DEqmxT$91?5{sjQ>Olk80Te<3M5@pJ&V?jYv-TCjP3{ zeljBc&o?5Gvj3R@RBVpT|7Jvy0zI}Sa=?a@|J7XZxX(s>VIJK{jp^A}0{EoRaZpbb z{5512+=ua(?Js2e@>j(vynr8#5AUKDChm5w)$pFrAtZiVN{(=^nD1~9t;bt`G8u|k zGXh>PTb-%rbrV7yc>OUO9)C-!Zz!ef0PvQ;|5r-n>qx_R2=3q!?`J_1Pk~inzCu76 zho>5lm-v@!JBIeR`~y>?lPEvJ62_MG_IF$h);8~-zsroK1)qgn$eYMx6CQ3CtkJm1 zZ+dl8yO+fTNgmW^=ewow@;|Y{g7i!m0aNy*q1kf+o0|}#hhG0UvJ=hfa#ik*0Y#s_ zbXb!LhA4a2wsGNd%NHQsav0d3loYEmX~@+eJ-F_=ETl#61L&=7OOJnr9C^|ge91oU zzwNL1qS-%`nsjl-vu!ibjY1KhT9Dw6sMCKVDG7xMe+5K{_VyI6g<@VhLFct5c0z%T z09XaB!jO3n^nUjpV|~=XQcXyf&fAJ^Vta6dbsBR%{XRHv zg=r~D(_QrDhYL3L$Pc^t<|i|)vwPlyV9&Fn!^7NOMCizE3AipM3sELFNFA{sViPakMVw_%33KOhY@@_%0VN=`x>PHH!xW zyLh$tzK5y9F+=rp!q{weaNP%nNc1K$#boe_{x&7sO!WX&hVeF=2YVVYS&}&VikX zdlw$tNt@85d(cHH@r*pKVm}9i2rHJA=f8L+bs7>yrab#2BIPPOY9O(|ZcAz{&e&>Am<5$*++F47*a zkRIGk%x&%Xut{V9v8a)&j~RZm`W=yD)6YI9xcIP#X;y^T1VA#x?gSxzkk7Ve?XO%# z4DJy|rZtA-hegFO8pEZdKt4}ZONW3j4DR%I4C=|)@J&E2TlsKJ3|=LeyhAT@J{umh zHxBoS?9usX`J_<9}gv^5aa z3ccyn>ZiI;Ic_{>b1nH}Qco#Edwq~Olx(7-hAlxer?q14c`sytI=^oX9jnj!ipN{z zEc-`#t_J2P7|KCg-MQZyM$Wc#@+5Hr`Q6JfBH6(U({BE>-q#@X%uy zo{Tf{y}iTst9|L0mwZoanbVCli8#^XoS%d>X8gsnT#uVG!eJQ0cf20#5I<4p?U{C> zufs<~4%n55j}3{Br_B9`34myb3q~Nq4`R{JWf0ZeC$kIPAJ9R4(X+P1+_eA%4c{Er zJ(lhHC&G_s3ctau6tIRr()yE3549eaQx^DS&mRI$+mKA-=jR0eX_;fJ$zzitnU`;Q zV2ufoB5VC*keV@R>cQpJfh4F*bPN>KT79W)B(!W`I`xf`6-8iz)~btY+BgnXbVbWG zWXqLHpC7rMlQNJyJs+(%Co7CCGS{Bh-6wh8UxoYi{bqRSj3=sL_8U%hNKQCvOHz8{ zUCM&&STX_HcC5qap&0wY#F{fQg1k$ep)kjZAuoWty+Uzf&ASmP>bLlqC#KC)J5L6> zvtRJ7@iiN)K-g{a^#&^FXa7uFC#oOe-igKH32)#n!u2sBwjaFccat7$3~WI#7ZJv! zf3Q<-CMVc6s^bU4C7-=11vdS`ho*`w#=@+L zcG&!OtjaaSk)NUl0nCe}-$sbQt*iz^dqzewg6DwcrjDoy`!&tQUH_+?%$ zdonJcwq&CK(|TO?F07=7WscqS%mtC%*cYhQ)!-%#AoU|1$E(J4 zx?ZD#n1BUmZMqT2?H{auy5P&z!JjiUlu}%U zdkAHXhpWN$2U%7_>$uov^(%Y42})`F@8nbLXx~68{*r9WEs8MFgkQ37vA7Hj_?Opa>VaR zTJ{pBMi+c#W?xcccC^guECu;LI9cO!j3I=oGUTdUACDLsDDi#!5^`vv%^4_ym=^&q zbjL&ydPT+Ig4!M%6d3A14pYv=*;35B@iRwa&3U^ms~JDn>9`vTMLRV(S=~V=dVx3XC#2=fRq9no z3?69pHy~CLYtj>Me3?nI>6K`Ufiko2Elqs|M3QUF$Z{Z-xOC%Og}|w z=A$Y3oMAGZSdFwX5QL|H+Obcsuz&H5;qUg20?t$JJCM-Ru{ z6nWTAx5g|SnYf|BrEZ)(t1e`PGyZfqB_<@d!f{{rLoR|n{AZRDE|@*;=S$&;#Eb>)75ret*WeneGyWn2V@R2?v{W)W>|-*1=GVp0|s9QViRS zq`Y0dakZa*d&z-S+|Z4Z#+8k(gbBwJV++b7FWlkJoADoD|9+eX^^Nu|o(vIwGE(UY zJ@hAzjiV8P6a8oL*@Z(E$1@L6^w&O=?DplK(yTX8f};8mEYrTP#e>>2iP2*IxtKgO z6*YvBNS~)df8S}C;l9CyY>$p8r-ax83E|@-SYp8C#QKT~H$?E=*{N0kS? zPVt5ZHpZX1n*CkB*%8DWzILZcz(|tGnf0Bx`3{}p!%y4r3O%8hwCP}~Wmh!=<4?q; z^+r3lvShB=$oW%O2NzNn&s12^RGjRU;3}_s2NEb{ZEh)#!#v=4y1tK@gQunSg!!AR z`8pF>Ox$?S$xvT#iy<&n5sNaCpXEKi z$^-tUb(mHC+9A3$ZlH}MKYu@TJan@Lo_isrLZzEH)EN8-a-8L$RI zK#QJph#sT(yo;Lbr~vAn#wkp#o+^9p5gK^JH}t}b`SXP@pX6nUz;w}CjomryG3?ZD zDyO(4odc$o{KKdy_ZZPJB4oulvhQs^d8*ImU-JV}O0Sr@GisB7docA;`|<9<=4@wH@anZgEAEYhUybJ~oMUSgFnFpD^VGJY;F%2uCvXQ! z=)8HVOJ0xqlqc)q*!nsevbmOPHFBN-+eMvKA6!TiQhUew6+vu)j61s&M+Y2GnDwv2 zOkm~2wKCT)ZM4@w@qo7k^-4toejm@^qa2h}Jyzq2O5+up_6f-?OF4G}_w<4FMu1`3 zTKTKQv724f)L`rPg*$rD8^)GA6K)}HR~7C*b#&BVkeCR7o<+zYh!jM`f1_cDv1 zI%qGMboiXd0K7YYK%DeB?0+<-SP@gLrOT7hTgTN~H`GnR)(KU7>50h2xD=lbVt8}$ zV;kP|GxGhDBD!>?Njc$1gD}$mA(fWOoA!`Bir_D$uF3~h;jVP?# z@x(*vJ$hUU3tBWtm)m&mRzi=hK_!JOv zleujm;m2t){1Uss_2bg&1kn?@@kOJ=K^;z4^)O~P z9}Esdl^k52>a16JxnBzeuJK_)d!|CV0j;{CMXB9bZjFWWQ**I7>Gqc>cFmD{;oQ%t zt#@kkCdCGCnT95^HO(a5S}fTHpNN}dhbxuKXmiqsLY6+Rzq&xY10A8?UJ`ART4%Yl zYZoNGWWFs@`Z<-B5ap*UqOVCbOjvajiJBb{wk;@$RYZI3wF>Pw#_iJOL~kN&Qh7mp z>r^f}N(V@asgxPx?a!nb>n$<(H)z{#tm7K3-YO9aa?3Xy^RCg24wJ?IEL}E!O0bB) zvS`BX%O(fepy?(eG>Wdm=q)eTH@46`dN6tMBsvW7Pur*O^N`6_mL-?f&C&iT%6L`u z_RLBgucZI2MO&ul1`JI99Z^xoH@PsW>f;!w3b*7$o9?jp&1Iybi(`6L3UIr7iM-E% zlR1Of+)!=vk5h9EX_W&n9F`riym3yIbcfKoxHO;TQ4}ZeATr1p7DzWwIYQQ#_&}Y; z3*Wf9>bRt2-tB-g)1q!_FNd?GS&|SJZe5H23Uy~NoBsNM=~%?1Uvd3&sGtrX#pVy= zyma)%Io0Y^@2cw~j&Umk5RZVamdrOGzIC?1aFWttE3Vp_XjhcCTIa5lMMPD%Rhpdj zo9NcG`1i_t?IN?2z3_?(!1NA$3_&r%2yXCK#bnpmeNU%n`y0v|ix( z{bTv3nBjnYgn8^<2Sj7aSAf&pqI~4Mx^|0=gl2pY;yuX|I{gs}wknr;#a7}NH=(3A z9AncT!rX0Fnk3;4m;_I#vg4HaucNuHcr15%fhSlz1(9UXD)l021~?Z`7gQUz91~I~bldbC^9rtxI#sLi zz(}{eTxgJMs4K2qt@pk7mOy^$rk$SChn}9dbAkgw}2BFQ06t`v(3a#RGtH<=1PVBISVK0G>j29YWEOP?AK!970jVB||ES z<*?QWr&GHu)v371;E>muIiXNam=o_5a@OD`sVL=;Grry|h_ehO%13=J^Jm!WD~jR~ zg$u`5a3MU&hHM1I0q){v@r<;_upd)ioM9J|Rc*OY)f=B*@t_MeAL9mf=DKS(N+XH> z5>)y8olB;g7bu=zA?L&L^3*64NH5;wo$3&ZgNE2LJHpm==te-FC0eU`cCafeU-p!c zbgU&bQ5klbo6cE59J?rau7~vf;lW4a@sb*%PorlZh3|Nj*Di?TJn^V8LI20|13$4_ z#*{dHBny5`6F!lcjv)p;L#A8AqzsE#XB^EnAMEvjhb!BA5q#vz43u zFBozBoK+yi(G`=2XR0TXY_ry49il@JE5ZziRhdLrru%%kel(uE>MVlgHAe{mmvH=2 zXb~c8ux6KM5?$P;1dH__^FFj9@jL zIs;BOj?zsZf#W6O{51bWS~m`h)n;!jnh=#b{hU>8iK?|p9=AJ^kxn!g1EY&pYdWfu zg)?Lk@-EC}(F2W#IYKq6T=~!@f!=2kQc%qr%DXU!!!n@E#ffG|LH39NQ#zUqsz$WN z4P&aby&)GH2Wu(|xhgu!OjaEr5$z?-eIwZGy}0p;&5YtnY0%cg z=hvrI+kqma!l7X2Vt@}3IN)w+GL zwMvik2X!fNEmK6vceFLRRH0Q`hRabVL-DglKw@=qX!X*1!b*Vz05piNx1Ky+a)lJt zjEP;95MQ}p=48>3ngL@HzB_pU`HriD$w=+HlM_(ZC^mHKP#7- zKVpe7oy(qKE0%6!k_Qvcl(&+M8ldmnjw*=V_mG>51V0s0*20{%Lmqh6XZSpKM@~QT;kG{&*g_-j$TftG~kG1U80ip1i^mM25~9dfAD!A{QwzW*qBQ zbGX`;2xTRe!`S6G8n1}mh3movc>#E@rKi(PyF8a4n;7ds+V>+3bH^S5I&s~O1o;iY z^MOq~hpFzS<&IqC?qjK<0X$do97yNM@*D{+r}kQY9>3K}EwzUOGVIG9y<>8nWL~*V ziB6I5H{^mZ^iDGhzD0R3rhzb5&|Dq8jY|x6wTroRg&K>$97v_MuhZ&z!LL)eEao$l zdEHm&79XtVBxv?l;cA&wc7GRB_hzMHX5+pldEKsR4`?l~M4~eaVi4g?ulj*g=8H>% zkCbz>Xi9+T(j*cGm(t=!dBUtF%K$L$vZz?>Q_r1@tHVBG-o~Key8u0UKAf;y#YuY6 z$L6L!dNw0ivyGStx-Y>@XwEq0R0d-p0~drEi?yDy7ld4-w>L#)vkrds`MUbv##@9e zKy`QXdmwoA%|Ldy9H~W zC`)HD=OL!tn&`gJwKb)9G8;7bog#n?(Q3+^2(vLR`JkOG4FqYe$xJoWB#CUV3`18L z^Q3<^w6G|h`RWwQx1{F7)3`)5GnED|jTcmo1rBt^v~`JmFD3j(BBCw&#+2@u z2~g5)tX7e^{9ZK(?gAIvt!i|bLN88USLrVCh5%Kkgn(P}sTvHmnj$a8R+qBv33g!- zR}}(3!3bSk6?(2XVI8uaDe0s`r(O^9wO_6I&1n>#;jl?+wKJt2p=7QYTer7e&G`%) zwrM0(n<+!R3bBrk6C0jfTdj@@d(3qtInA(O?rh{*+Ea5vHB%Bo;{dz(M{;No^sYgI zapP$aBp5HNm%$pL+Hpk@AeD`!$V<3Owaf;rYrZ;)F{=!4;r zmkmMNi}N_dL=DfRBZU?{X3x%Lcj)Z)^)N0y`R(159t>^6kzh}@tS`)N{JRz|YZxvP zGaar7YZ%@|AaA)=s5zcX$@xTEI6IRXGkNTP_i4M3W>c3mLPfqm`_f4rD z`xZNIPDd)bNe!b4H|9y+h2p_{WZ!^h2!ONJkZaOnU`!Q$VjJE6MKvDIDQ>M#hXZvZ zxUfli-7fUB5mK`NEo)Y9lpkOFG=ktk*`o~6t4^AR?g75Mk~ZfQ_`$pV zh|Itfh#wbb!li0jsBqWlbPgUpsCL3q<3hgpo6cQ2{T_T;>DUhnz8|aJt>N#pjJD>) zCRf&1$_}&NYRORqbWa=`9(V^Pj0fl{aB%B?qfRo}ZLbitJ(=xPb8HLB(`$6?s9kn# z3_3RzEF441$CJRRr~_@U4u{v%CS*gr6aS$zw@oSa?eqBO!9a);<{l2aM`=DIE44O2Zd)H+Kfn{sPxHulw~+~WS)4FJqPdfCwv z)gwhSQBn}?neik7TNGg%NqefR)9&!60&Nx=ojj;pm~(VGs|kt1uT13JejW(#KLmo$ ztsNG8duGZuwlF1C!^BxLQGjgO61f9Hrc`xk4#-=Ctw^kRS#f!TIaPm07`R93$4Z zuQfF07<7nP>=uDwwg(Ap;!ab~v)QG&QRQL~jSKrhv5P>=7RnhqE}}4gtJ=_aT}QY=J%46`uzL9SodL}iegmXtYP9oW zObl8cYX=4S(mT2}P0aDKrMEZ3HMOaWXpF{eNRge|24w(@b4|4*>WIaZb_!2e@$7Mp zmq0_NQa#Kw503JA%8<^mnW>5{m6T?*YxBHt^Upu)Nxw9*&I-%S%zDY;Ea>%lzKi=W9>z>(h`^I?Td(v66fmevl|-?h}Jzn(hMgmpz9vs z7Y!3v-jh$8|1Mef6vluM!}QFk$S!akB%x_d-{g$Y1MSOBlOZG)a=Wxuo$t6yMZ+9_PpNFkO~aNZVrKdwkMbbl<$7Z~f+rX}cy0T24D z^uC)rmZ5(hB$o({ME@*}j#%;VE2+6CLhIFdz+4B>j;z;k3ATO5Nks{PrV4^`Ze%2b zu#iJ%0E+5F&Tn;EFcG>Wzw_B40C*(xLgtzSsfxo9xkV$=|5)J@_74X02B%oQ;)iq9 zIS^)zEQG`%EF+_B#3aJTrXtTWvV`JD{8ue z1CpPfG5G}l$Tb$vkmqB8HB@&6pG0`c$vR^crSSM4;4p8Wx2^Xr;=ea;!8+>|__U_A zSmvw{Jd(&Vsy>qP$0fw82&yV0Za%t^;11B zQ4P|a(7A7m^PmLW)Gm%XJk67+R0E?@ly9QarLvOGt{R2p+~Dg4IlBXv_`n_301lH$ z?cXg*1{IIrXT4lXExW1gXF`WYJ-rsqd_z`FSc-yHRaLe|jtp%W=9hJ76wZIG%μ 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

W)DOxHinC~$LcBTAb5V<-ufRr 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 Q?@a#v|Ah|Q;sA~c0Q{!&g#Z8m literal 0 HcmV?d00001 diff --git a/control/control.go b/control/control.go index 6f19607..b6ce240 100644 --- a/control/control.go +++ b/control/control.go @@ -1,920 +1,894 @@ -package control - -import ( - "context" - "encoding/json" - "log" - "net/http" - "time" - - "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/clientmodel" - "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp" - influxdb2 "github.com/influxdata/influxdb-client-go" -) - -type Control struct { - RMR chan *xapp.RMRParams //channel for receiving rmr message - client influxdb2.Client //client for influxdb -} - -var ( - timeToWait = "w10ms" - subsequentActionType = "continue" - actionType = "report" - actionId = int64(1) - seqId = int64(1) - funcId = int64(0) - hPort = int64(8080) - rPort = int64(4560) - clientEndpoint = clientmodel.SubscriptionParamsClientEndpoint{Host: "service-ricxapp-xappkpimon-http.ricxapp", HTTPPort: &hPort, RMRPort: &rPort} -) - -func (c Control) Consume(msg *xapp.RMRParams) error { - id := xapp.Rmr.GetRicMessageName(msg.Mtype) - xapp.Logger.Info( - "Message received: name=%s meid=%s subId=%d txid=%s len=%d", - id, - msg.Meid.RanName, - msg.SubId, - msg.Xid, - msg.PayloadLen, - ) - c.RMR <- msg - return nil -} - -func NewControl() Control { - xapp.Logger.Info("In new control\n") - create_db() - return Control{ - make(chan *xapp.RMRParams), - influxdb2.NewClient("http://ricplt-influxdb.ricplt:8086", "client"), - } -} -func create_db() { - //Create a database named kpimon in influxDB - _, err := http.Post("http://ricplt-influxdb.ricplt:8086/query?q=create%20database%20kpimon", "", nil) - if err != nil { - xapp.Logger.Error("Create database failed!") - } -} - -func (c Control) getEnbList() ([]*xapp.RNIBNbIdentity, error) { - enbs, err := xapp.Rnib.GetListEnbIds() - if err != nil { - xapp.Logger.Error("err: %s", err) - return nil, err - } - - xapp.Logger.Info("List for connected eNBs :") - for index, enb := range enbs { - xapp.Logger.Info("%d. enbid: %s", index+1, enb.InventoryName) - } - return enbs, nil -} - -func (c *Control) getGnbList() ([]*xapp.RNIBNbIdentity, error) { - gnbs, err := xapp.Rnib.GetListGnbIds() - - if err != nil { - xapp.Logger.Error("err: %s", err) - return nil, err - } - xapp.Logger.Info("List of connected gNBs :") - for index, gnb := range gnbs { - xapp.Logger.Info("%d. gnbid : %s", index+1, gnb.InventoryName) - } - return gnbs, nil -} - -func (c *Control) getnbList() []*xapp.RNIBNbIdentity { - //Get all GnodeB and EnodeB connected to RIC - var nbs []*xapp.RNIBNbIdentity - - if enbs, err := c.getEnbList(); err == nil { - nbs = append(nbs, enbs...) - } - - if gnbs, err := c.getGnbList(); err == nil { - nbs = append(nbs, gnbs...) - } - return nbs -} - -func (c Control) sendSubscription(meid string) { - //Create Subscription message and send it to RIC platform - xapp.Logger.Info("Sending subscription request for MEID: %v", meid) - - subscritionParams := clientmodel.SubscriptionParams{ - ClientEndpoint: &clientEndpoint, - Meid: &meid, - RANFunctionID: &funcId, - SubscriptionDetails: clientmodel.SubscriptionDetailsList{ - &clientmodel.SubscriptionDetail{ - EventTriggers: clientmodel.EventTriggerDefinition{ - 1234, - }, - XappEventInstanceID: &seqId, - ActionToBeSetupList: clientmodel.ActionsToBeSetup{ - &clientmodel.ActionToBeSetup{ - ActionID: &actionId, - ActionType: &actionType, - ActionDefinition: clientmodel.ActionDefinition{ - 5678, - }, - SubsequentAction: &clientmodel.SubsequentAction{ - SubsequentActionType: &subsequentActionType, - TimeToWait: &timeToWait, - }, - }, - }, - }, - }, - } - - b, err := json.MarshalIndent(subscritionParams, "", " ") - if err != nil { - xapp.Logger.Error("Json marshaling failed: %v", err) - } - xapp.Logger.Info("*****body: %s", string(b)) - - resp, err := xapp.Subscription.Subscribe(&subscritionParams) - if err != nil { - xapp.Logger.Error("Subscription (%s) failed with error: %s", meid, err) - return - } - xapp.Logger.Info("Successfully subscription done (%s), subscriptrion id: %s", meid, *resp.SubscriptionID) -} - -func (c *Control) controlLoop() { - //Handle receiving message based on message type - for { - msg := <-c.RMR - xapp.Logger.Debug("Received message type: %d", msg.Mtype) - switch msg.Mtype { - case xapp.RIC_INDICATION: - go c.handleIndication(msg) - default: - xapp.Logger.Error("Unknown Message Type '%d', discarding", msg.Mtype) - } - } -} -func (c *Control) handleIndication(params *xapp.RMRParams) (err error) { - var e2ap *E2ap - var e2sm *E2sm - - //Decode message and put it into log - indicationMsg, err := e2ap.GetIndicationMessage(params.Payload) - if err != nil { - xapp.Logger.Error("Failed to decode RIC Indication message: %v", err) - log.Printf("Failed to decode RIC Indication message: %v", err) - return - } - - log.Printf("RIC Indication message from {%s} received", params.Meid.RanName) - log.Printf("RequestID: %d", indicationMsg.RequestID) - log.Printf("RequestSequenceNumber: %d", indicationMsg.RequestSequenceNumber) - log.Printf("FunctionID: %d", indicationMsg.FuncID) - log.Printf("ActionID: %d", indicationMsg.ActionID) - log.Printf("IndicationSN: %d", indicationMsg.IndSN) - log.Printf("IndicationType: %d", indicationMsg.IndType) - log.Printf("IndicationHeader: %x", indicationMsg.IndHeader) - log.Printf("IndicationMessage: %x", indicationMsg.IndMessage) - log.Printf("CallProcessID: %x", indicationMsg.CallProcessID) - - indicationHdr, err := e2sm.GetIndicationHeader(indicationMsg.IndHeader) - if err != nil { - xapp.Logger.Error("Failed to decode RIC Indication Header: %v", err) - log.Printf("Failed to decode RIC Indication Header: %v", err) - return - } - - var cellIDHdr string - var plmnIDHdr string - var sliceIDHdr int32 - var fiveQIHdr int64 - - //Decoding Ric Indication Header - log.Printf("-----------RIC Indication Header-----------") - if indicationHdr.IndHdrType == 1 { - log.Printf("RIC Indication Header Format: %d", indicationHdr.IndHdrType) - indHdrFormat1 := indicationHdr.IndHdr.(*IndicationHeaderFormat1) - - log.Printf("GlobalKPMnodeIDType: %d", indHdrFormat1.GlobalKPMnodeIDType) - - if indHdrFormat1.GlobalKPMnodeIDType == 1 { - globalKPMnodegNBID := indHdrFormat1.GlobalKPMnodeID.(*GlobalKPMnodegNBIDType) - - globalgNBID := globalKPMnodegNBID.GlobalgNBID - - log.Printf("PlmnID: %x", globalgNBID.PlmnID.Buf) - log.Printf("gNB ID Type: %d", globalgNBID.GnbIDType) - if globalgNBID.GnbIDType == 1 { - gNBID := globalgNBID.GnbID.(*GNBID) - log.Printf("gNB ID ID: %x, Unused: %d", gNBID.Buf, gNBID.BitsUnused) - } - - if globalKPMnodegNBID.GnbCUUPID != nil { - log.Printf("gNB-CU-UP ID: %x", globalKPMnodegNBID.GnbCUUPID.Buf) - } - - if globalKPMnodegNBID.GnbDUID != nil { - log.Printf("gNB-DU ID: %x", globalKPMnodegNBID.GnbDUID.Buf) - } - } else if indHdrFormat1.GlobalKPMnodeIDType == 2 { - globalKPMnodeengNBID := indHdrFormat1.GlobalKPMnodeID.(*GlobalKPMnodeengNBIDType) - - log.Printf("PlmnID: %x", globalKPMnodeengNBID.PlmnID.Buf) - log.Printf("en-gNB ID Type: %d", globalKPMnodeengNBID.GnbIDType) - if globalKPMnodeengNBID.GnbIDType == 1 { - engNBID := globalKPMnodeengNBID.GnbID.(*ENGNBID) - log.Printf("en-gNB ID ID: %x, Unused: %d", engNBID.Buf, engNBID.BitsUnused) - } - } else if indHdrFormat1.GlobalKPMnodeIDType == 3 { - globalKPMnodengeNBID := indHdrFormat1.GlobalKPMnodeID.(*GlobalKPMnodengeNBIDType) - - log.Printf("PlmnID: %x", globalKPMnodengeNBID.PlmnID.Buf) - log.Printf("ng-eNB ID Type: %d", globalKPMnodengeNBID.EnbIDType) - if globalKPMnodengeNBID.EnbIDType == 1 { - ngeNBID := globalKPMnodengeNBID.EnbID.(*NGENBID_Macro) - log.Printf("ng-eNB ID ID: %x, Unused: %d", ngeNBID.Buf, ngeNBID.BitsUnused) - } else if globalKPMnodengeNBID.EnbIDType == 2 { - ngeNBID := globalKPMnodengeNBID.EnbID.(*NGENBID_ShortMacro) - log.Printf("ng-eNB ID ID: %x, Unused: %d", ngeNBID.Buf, ngeNBID.BitsUnused) - } else if globalKPMnodengeNBID.EnbIDType == 3 { - ngeNBID := globalKPMnodengeNBID.EnbID.(*NGENBID_LongMacro) - log.Printf("ng-eNB ID ID: %x, Unused: %d", ngeNBID.Buf, ngeNBID.BitsUnused) - } - } else if indHdrFormat1.GlobalKPMnodeIDType == 4 { - globalKPMnodeeNBID := indHdrFormat1.GlobalKPMnodeID.(*GlobalKPMnodeeNBIDType) - - log.Printf("PlmnID: %x", globalKPMnodeeNBID.PlmnID.Buf) - log.Printf("eNB ID Type: %d", globalKPMnodeeNBID.EnbIDType) - if globalKPMnodeeNBID.EnbIDType == 1 { - eNBID := globalKPMnodeeNBID.EnbID.(*ENBID_Macro) - log.Printf("eNB ID ID: %x, Unused: %d", eNBID.Buf, eNBID.BitsUnused) - } else if globalKPMnodeeNBID.EnbIDType == 2 { - eNBID := globalKPMnodeeNBID.EnbID.(*ENBID_Home) - log.Printf("eNB ID ID: %x, Unused: %d", eNBID.Buf, eNBID.BitsUnused) - } else if globalKPMnodeeNBID.EnbIDType == 3 { - eNBID := globalKPMnodeeNBID.EnbID.(*ENBID_ShortMacro) - log.Printf("eNB ID ID: %x, Unused: %d", eNBID.Buf, eNBID.BitsUnused) - } else if globalKPMnodeeNBID.EnbIDType == 4 { - eNBID := globalKPMnodeeNBID.EnbID.(*ENBID_LongMacro) - log.Printf("eNB ID ID: %x, Unused: %d", eNBID.Buf, eNBID.BitsUnused) - } - - } - - if indHdrFormat1.NRCGI != nil { - - log.Printf("nRCGI.PlmnID: %x", indHdrFormat1.NRCGI.PlmnID.Buf) - log.Printf("nRCGI.NRCellID ID: %x, Unused: %d", indHdrFormat1.NRCGI.NRCellID.Buf, indHdrFormat1.NRCGI.NRCellID.BitsUnused) - - cellIDHdr, err = e2sm.ParseNRCGI(*indHdrFormat1.NRCGI) - if err != nil { - xapp.Logger.Error("Failed to parse NRCGI in RIC Indication Header: %v", err) - log.Printf("Failed to parse NRCGI in RIC Indication Header: %v", err) - return - } - } else { - cellIDHdr = "" - } - - if indHdrFormat1.PlmnID != nil { - log.Printf("PlmnID: %x", indHdrFormat1.PlmnID.Buf) - - plmnIDHdr, err = e2sm.ParsePLMNIdentity(indHdrFormat1.PlmnID.Buf, indHdrFormat1.PlmnID.Size) - if err != nil { - xapp.Logger.Error("Failed to parse PlmnID in RIC Indication Header: %v", err) - log.Printf("Failed to parse PlmnID in RIC Indication Header: %v", err) - return - } - } else { - plmnIDHdr = "" - } - - if indHdrFormat1.SliceID != nil { - log.Printf("SST: %x", indHdrFormat1.SliceID.SST.Buf) - - if indHdrFormat1.SliceID.SD != nil { - log.Printf("SD: %x", indHdrFormat1.SliceID.SD.Buf) - } - - sliceIDHdr, err = e2sm.ParseSliceID(*indHdrFormat1.SliceID) - if err != nil { - xapp.Logger.Error("Failed to parse SliceID in RIC Indication Header: %v", err) - log.Printf("Failed to parse SliceID in RIC Indication Header: %v", err) - return - } - } else { - sliceIDHdr = -1 - } - - if indHdrFormat1.FiveQI != -1 { - log.Printf("5QI: %d", indHdrFormat1.FiveQI) - } - fiveQIHdr = indHdrFormat1.FiveQI - - if indHdrFormat1.Qci != -1 { - log.Printf("QCI: %d", indHdrFormat1.Qci) - } - - if indHdrFormat1.UeMessageType != -1 { - log.Printf("Ue Report type: %d", indHdrFormat1.UeMessageType) - } - - if indHdrFormat1.GnbDUID != nil { - log.Printf("gNB-DU-ID: %x", indHdrFormat1.GnbDUID.Buf) - } - - if indHdrFormat1.GnbNameType == 1 { - log.Printf("gNB-DU-Name: %x", (indHdrFormat1.GnbName.(*GNB_DU_Name)).Buf) - } else if indHdrFormat1.GnbNameType == 2 { - log.Printf("gNB-CU-CP-Name: %x", (indHdrFormat1.GnbName.(*GNB_CU_CP_Name)).Buf) - } else if indHdrFormat1.GnbNameType == 3 { - log.Printf("gNB-CU-UP-Name: %x", (indHdrFormat1.GnbName.(*GNB_CU_UP_Name)).Buf) - } - - if indHdrFormat1.GlobalgNBID != nil { - log.Printf("PlmnID: %x", indHdrFormat1.GlobalgNBID.PlmnID.Buf) - log.Printf("gNB ID Type: %d", indHdrFormat1.GlobalgNBID.GnbIDType) - if indHdrFormat1.GlobalgNBID.GnbIDType == 1 { - gNBID := indHdrFormat1.GlobalgNBID.GnbID.(*GNBID) - log.Printf("gNB ID ID: %x, Unused: %d", gNBID.Buf, gNBID.BitsUnused) - } - } - - } else { - xapp.Logger.Error("Unknown RIC Indication Header Format: %d", indicationHdr.IndHdrType) - log.Printf("Unknown RIC Indication Header Format: %d", indicationHdr.IndHdrType) - return - } - - indMsg, err := e2sm.GetIndicationMessage(indicationMsg.IndMessage) - if err != nil { - xapp.Logger.Error("Failed to decode RIC Indication Message: %v", err) - log.Printf("Failed to decode RIC Indication Message: %v", err) - return - } - - var flag bool - var containerType int32 - var timestampPDCPBytes *Timestamp - var dlPDCPBytes int64 - var ulPDCPBytes int64 - var timestampPRB *Timestamp - var availPRBDL int64 - var availPRBUL int64 - //Decoding RIC Indication Message - log.Printf("-----------RIC Indication Message-----------") - log.Printf("StyleType: %d", indMsg.StyleType) - if indMsg.IndMsgType == 1 { - log.Printf("RIC Indication Message Format: %d", indMsg.IndMsgType) - - indMsgFormat1 := indMsg.IndMsg.(*IndicationMessageFormat1) - - log.Printf("PMContainerCount: %d", indMsgFormat1.PMContainerCount) - - for PMContainerCounter := 0; PMContainerCounter < indMsgFormat1.PMContainerCount; PMContainerCounter++ { - flag = false - timestampPDCPBytes = nil - dlPDCPBytes = -1 - ulPDCPBytes = -1 - timestampPRB = nil - availPRBDL = -1 - availPRBUL = -1 - - log.Printf("PMContainer[%d]: ", PMContainerCounter) - - pmContainer := indMsgFormat1.PMContainers[PMContainerCounter] - - if pmContainer.PFContainer != nil { - containerType = pmContainer.PFContainer.ContainerType - - log.Printf("PFContainerType: %d", containerType) - - if containerType == 1 { - log.Printf("oDU PF Container: ") - - oDU := pmContainer.PFContainer.Container.(*ODUPFContainerType) - - cellResourceReportCount := oDU.CellResourceReportCount - log.Printf("CellResourceReportCount: %d", cellResourceReportCount) - - for cellResourceReportCounter := 0; cellResourceReportCounter < cellResourceReportCount; cellResourceReportCounter++ { - log.Printf("CellResourceReport[%d]: ", cellResourceReportCounter) - - cellResourceReport := oDU.CellResourceReports[cellResourceReportCounter] - - log.Printf("nRCGI.PlmnID: %x", cellResourceReport.NRCGI.PlmnID.Buf) - log.Printf("nRCGI.nRCellID: %x", cellResourceReport.NRCGI.NRCellID.Buf) - - cellID, err := e2sm.ParseNRCGI(cellResourceReport.NRCGI) - if err != nil { - xapp.Logger.Error("Failed to parse CellID in DU PF Container: %v", err) - log.Printf("Failed to parse CellID in DU PF Container: %v", err) - continue - } - if cellID == cellIDHdr { - flag = true - } - - log.Printf("TotalofAvailablePRBsDL: %d", cellResourceReport.TotalofAvailablePRBs.DL) - log.Printf("TotalofAvailablePRBsUL: %d", cellResourceReport.TotalofAvailablePRBs.UL) - - if flag { - availPRBDL = cellResourceReport.TotalofAvailablePRBs.DL - availPRBUL = cellResourceReport.TotalofAvailablePRBs.UL - } - - servedPlmnPerCellCount := cellResourceReport.ServedPlmnPerCellCount - log.Printf("ServedPlmnPerCellCount: %d", servedPlmnPerCellCount) - - for servedPlmnPerCellCounter := 0; servedPlmnPerCellCounter < servedPlmnPerCellCount; servedPlmnPerCellCounter++ { - log.Printf("ServedPlmnPerCell[%d]: ", servedPlmnPerCellCounter) - - servedPlmnPerCell := cellResourceReport.ServedPlmnPerCells[servedPlmnPerCellCounter] - - log.Printf("PlmnID: %x", servedPlmnPerCell.PlmnID.Buf) - - if servedPlmnPerCell.DUPM5GC != nil { - slicePerPlmnPerCellCount := servedPlmnPerCell.DUPM5GC.SlicePerPlmnPerCellCount - log.Printf("SlicePerPlmnPerCellCount: %d", slicePerPlmnPerCellCount) - - for slicePerPlmnPerCellCounter := 0; slicePerPlmnPerCellCounter < slicePerPlmnPerCellCount; slicePerPlmnPerCellCounter++ { - log.Printf("SlicePerPlmnPerCell[%d]: ", slicePerPlmnPerCellCounter) - - slicePerPlmnPerCell := servedPlmnPerCell.DUPM5GC.SlicePerPlmnPerCells[slicePerPlmnPerCellCounter] - - log.Printf("SliceID.sST: %x", slicePerPlmnPerCell.SliceID.SST.Buf) - if slicePerPlmnPerCell.SliceID.SD != nil { - log.Printf("SliceID.sD: %x", slicePerPlmnPerCell.SliceID.SD.Buf) - } - - fQIPERSlicesPerPlmnPerCellCount := slicePerPlmnPerCell.FQIPERSlicesPerPlmnPerCellCount - log.Printf("5QIPerSlicesPerPlmnPerCellCount: %d", fQIPERSlicesPerPlmnPerCellCount) - - for fQIPERSlicesPerPlmnPerCellCounter := 0; fQIPERSlicesPerPlmnPerCellCounter < fQIPERSlicesPerPlmnPerCellCount; fQIPERSlicesPerPlmnPerCellCounter++ { - log.Printf("5QIPerSlicesPerPlmnPerCell[%d]: ", fQIPERSlicesPerPlmnPerCellCounter) - - fQIPERSlicesPerPlmnPerCell := slicePerPlmnPerCell.FQIPERSlicesPerPlmnPerCells[fQIPERSlicesPerPlmnPerCellCounter] - - log.Printf("5QI: %d", fQIPERSlicesPerPlmnPerCell.FiveQI) - log.Printf("PrbUsageDL: %d", fQIPERSlicesPerPlmnPerCell.PrbUsage.DL) - log.Printf("PrbUsageUL: %d", fQIPERSlicesPerPlmnPerCell.PrbUsage.UL) - } - } - } - - if servedPlmnPerCell.DUPMEPC != nil { - perQCIReportCount := servedPlmnPerCell.DUPMEPC.PerQCIReportCount - log.Printf("PerQCIReportCount: %d", perQCIReportCount) - - for perQCIReportCounter := 0; perQCIReportCounter < perQCIReportCount; perQCIReportCounter++ { - log.Printf("PerQCIReports[%d]: ", perQCIReportCounter) - - perQCIReport := servedPlmnPerCell.DUPMEPC.PerQCIReports[perQCIReportCounter] - - log.Printf("QCI: %d", perQCIReport.QCI) - log.Printf("PrbUsageDL: %d", perQCIReport.PrbUsage.DL) - log.Printf("PrbUsageUL: %d", perQCIReport.PrbUsage.UL) - } - } - } - } - } else if containerType == 2 { - log.Printf("oCU-CP PF Container: ") - - oCUCP := pmContainer.PFContainer.Container.(*OCUCPPFContainerType) - - if oCUCP.GNBCUCPName != nil { - log.Printf("gNB-CU-CP Name: %x", oCUCP.GNBCUCPName.Buf) - } - - log.Printf("NumberOfActiveUEs: %d", oCUCP.CUCPResourceStatus.NumberOfActiveUEs) - } else if containerType == 3 { - log.Printf("oCU-UP PF Container: ") - - oCUUP := pmContainer.PFContainer.Container.(*OCUUPPFContainerType) - - if oCUUP.GNBCUUPName != nil { - log.Printf("gNB-CU-UP Name: %x", oCUUP.GNBCUUPName.Buf) - } - - cuUPPFContainerItemCount := oCUUP.CUUPPFContainerItemCount - log.Printf("CU-UP PF Container Item Count: %d", cuUPPFContainerItemCount) - - for cuUPPFContainerItemCounter := 0; cuUPPFContainerItemCounter < cuUPPFContainerItemCount; cuUPPFContainerItemCounter++ { - log.Printf("CU-UP PF Container Item [%d]: ", cuUPPFContainerItemCounter) - - cuUPPFContainerItem := oCUUP.CUUPPFContainerItems[cuUPPFContainerItemCounter] - - log.Printf("InterfaceType: %d", cuUPPFContainerItem.InterfaceType) - - cuUPPlmnCount := cuUPPFContainerItem.OCUUPPMContainer.CUUPPlmnCount - log.Printf("CU-UP Plmn Count: %d", cuUPPlmnCount) - - for cuUPPlmnCounter := 0; cuUPPlmnCounter < cuUPPlmnCount; cuUPPlmnCounter++ { - log.Printf("CU-UP Plmn [%d]: ", cuUPPlmnCounter) - - cuUPPlmn := cuUPPFContainerItem.OCUUPPMContainer.CUUPPlmns[cuUPPlmnCounter] - - log.Printf("PlmnID: %x", cuUPPlmn.PlmnID.Buf) - - plmnID, err := e2sm.ParsePLMNIdentity(cuUPPlmn.PlmnID.Buf, cuUPPlmn.PlmnID.Size) - if err != nil { - xapp.Logger.Error("Failed to parse PlmnID in CU-UP PF Container: %v", err) - log.Printf("Failed to parse PlmnID in CU-UP PF Container: %v", err) - continue - } - - if cuUPPlmn.CUUPPM5GC != nil { - sliceToReportCount := cuUPPlmn.CUUPPM5GC.SliceToReportCount - log.Printf("SliceToReportCount: %d", sliceToReportCount) - - for sliceToReportCounter := 0; sliceToReportCounter < sliceToReportCount; sliceToReportCounter++ { - log.Printf("SliceToReport[%d]: ", sliceToReportCounter) - - sliceToReport := cuUPPlmn.CUUPPM5GC.SliceToReports[sliceToReportCounter] - - log.Printf("SliceID.sST: %x", sliceToReport.SliceID.SST.Buf) - if sliceToReport.SliceID.SD != nil { - log.Printf("SliceID.sD: %x", sliceToReport.SliceID.SD.Buf) - } - - sliceID, err := e2sm.ParseSliceID(sliceToReport.SliceID) - if err != nil { - xapp.Logger.Error("Failed to parse sliceID in CU-UP PF Container with PlmnID [%s]: %v", plmnID, err) - log.Printf("Failed to parse sliceID in CU-UP PF Container with PlmnID [%s]: %v", plmnID, err) - continue - } - - fQIPERSlicesPerPlmnCount := sliceToReport.FQIPERSlicesPerPlmnCount - log.Printf("5QIPerSlicesPerPlmnCount: %d", fQIPERSlicesPerPlmnCount) - - for fQIPERSlicesPerPlmnCounter := 0; fQIPERSlicesPerPlmnCounter < fQIPERSlicesPerPlmnCount; fQIPERSlicesPerPlmnCounter++ { - log.Printf("5QIPerSlicesPerPlmn[%d]: ", fQIPERSlicesPerPlmnCounter) - - fQIPERSlicesPerPlmn := sliceToReport.FQIPERSlicesPerPlmns[fQIPERSlicesPerPlmnCounter] - - fiveQI := fQIPERSlicesPerPlmn.FiveQI - log.Printf("5QI: %d", fiveQI) - - if plmnID == plmnIDHdr && sliceID == sliceIDHdr && fiveQI == fiveQIHdr { - flag = true - } - - if fQIPERSlicesPerPlmn.PDCPBytesDL != nil { - log.Printf("PDCPBytesDL: %x", fQIPERSlicesPerPlmn.PDCPBytesDL.Buf) - - if flag { - dlPDCPBytes, err = e2sm.ParseInteger(fQIPERSlicesPerPlmn.PDCPBytesDL.Buf, fQIPERSlicesPerPlmn.PDCPBytesDL.Size) - if err != nil { - xapp.Logger.Error("Failed to parse PDCPBytesDL in CU-UP PF Container with PlmnID [%s], SliceID [%d], 5QI [%d]: %v", plmnID, sliceID, fiveQI, err) - log.Printf("Failed to parse PDCPBytesDL in CU-UP PF Container with PlmnID [%s], SliceID [%d], 5QI [%d]: %v", plmnID, sliceID, fiveQI, err) - continue - } - } - } - - if fQIPERSlicesPerPlmn.PDCPBytesUL != nil { - log.Printf("PDCPBytesUL: %x", fQIPERSlicesPerPlmn.PDCPBytesUL.Buf) - - if flag { - ulPDCPBytes, err = e2sm.ParseInteger(fQIPERSlicesPerPlmn.PDCPBytesUL.Buf, fQIPERSlicesPerPlmn.PDCPBytesUL.Size) - if err != nil { - xapp.Logger.Error("Failed to parse PDCPBytesUL in CU-UP PF Container with PlmnID [%s], SliceID [%d], 5QI [%d]: %v", plmnID, sliceID, fiveQI, err) - log.Printf("Failed to parse PDCPBytesUL in CU-UP PF Container with PlmnID [%s], SliceID [%d], 5QI [%d]: %v", plmnID, sliceID, fiveQI, err) - continue - } - } - } - } - } - } - - if cuUPPlmn.CUUPPMEPC != nil { - cuUPPMEPCPerQCIReportCount := cuUPPlmn.CUUPPMEPC.CUUPPMEPCPerQCIReportCount - log.Printf("PerQCIReportCount: %d", cuUPPMEPCPerQCIReportCount) - - for cuUPPMEPCPerQCIReportCounter := 0; cuUPPMEPCPerQCIReportCounter < cuUPPMEPCPerQCIReportCount; cuUPPMEPCPerQCIReportCounter++ { - log.Printf("PerQCIReport[%d]: ", cuUPPMEPCPerQCIReportCounter) - - cuUPPMEPCPerQCIReport := cuUPPlmn.CUUPPMEPC.CUUPPMEPCPerQCIReports[cuUPPMEPCPerQCIReportCounter] - - log.Printf("QCI: %d", cuUPPMEPCPerQCIReport.QCI) - - if cuUPPMEPCPerQCIReport.PDCPBytesDL != nil { - log.Printf("PDCPBytesDL: %x", cuUPPMEPCPerQCIReport.PDCPBytesDL.Buf) - } - if cuUPPMEPCPerQCIReport.PDCPBytesUL != nil { - log.Printf("PDCPBytesUL: %x", cuUPPMEPCPerQCIReport.PDCPBytesUL.Buf) - } - } - } - } - } - } else { - xapp.Logger.Error("Unknown PF Container type: %d", containerType) - log.Printf("Unknown PF Container type: %d", containerType) - continue - } - } - - if pmContainer.RANContainer != nil { - log.Printf("RANContainer: %x", pmContainer.RANContainer.Timestamp.Buf) - - timestamp, _ := e2sm.ParseTimestamp(pmContainer.RANContainer.Timestamp.Buf, pmContainer.RANContainer.Timestamp.Size) - log.Printf("Timestamp=[sec: %d, nsec: %d]", timestamp.TVsec, timestamp.TVnsec) - - containerType = pmContainer.RANContainer.ContainerType - if containerType == 1 { - log.Printf("DU Usage Report: ") - - oDUUE := pmContainer.RANContainer.Container.(*DUUsageReportType) - - for CellResourceReportItemCounter := 0; CellResourceReportItemCounter < oDUUE.CellResourceReportItemCount; CellResourceReportItemCounter++ { - cellResourceReportItem := oDUUE.CellResourceReportItems[CellResourceReportItemCounter] - - log.Printf("nRCGI.PlmnID: %x", cellResourceReportItem.NRCGI.PlmnID.Buf) - log.Printf("nRCGI.NRCellID: %x, Unused: %d", cellResourceReportItem.NRCGI.NRCellID.Buf, cellResourceReportItem.NRCGI.NRCellID.BitsUnused) - - servingCellID, err := e2sm.ParseNRCGI(cellResourceReportItem.NRCGI) - if err != nil { - xapp.Logger.Error("Failed to parse NRCGI in DU Usage Report: %v", err) - log.Printf("Failed to parse NRCGI in DU Usage Report: %v", err) - continue - } - - for UeResourceReportItemCounter := 0; UeResourceReportItemCounter < cellResourceReportItem.UeResourceReportItemCount; UeResourceReportItemCounter++ { - ueResourceReportItem := cellResourceReportItem.UeResourceReportItems[UeResourceReportItemCounter] - - log.Printf("C-RNTI: %x", ueResourceReportItem.CRNTI.Buf) - - ueID, err := e2sm.ParseInteger(ueResourceReportItem.CRNTI.Buf, ueResourceReportItem.CRNTI.Size) - if err != nil { - xapp.Logger.Error("Failed to parse C-RNTI in DU Usage Report with Serving Cell ID [%s]: %v", servingCellID, err) - log.Printf("Failed to parse C-RNTI in DU Usage Report with Serving Cell ID [%s]: %v", servingCellID, err) - continue - } - - var ueMetrics UeMetricsEntry - - ueMetrics.UeID = ueID - log.Printf("UeID: %d", ueMetrics.UeID) - ueMetrics.ServingCellID = servingCellID - log.Printf("ServingCellID: %s", ueMetrics.ServingCellID) - ueMetrics.MeasPeriodRF = 20 - - if flag { - timestampPRB = timestamp - } - - ueMetrics.MeasTimestampPRB.TVsec = timestamp.TVsec - ueMetrics.MeasTimestampPRB.TVnsec = timestamp.TVnsec - - if ueResourceReportItem.PRBUsageDL != -1 { - ueMetrics.PRBUsageDL = ueResourceReportItem.PRBUsageDL - log.Printf("PRBUsageDL: %d", ueMetrics.PRBUsageDL) - } - - if ueResourceReportItem.PRBUsageUL != -1 { - ueMetrics.PRBUsageUL = ueResourceReportItem.PRBUsageUL - log.Printf("PRBUsageUL: %d", ueMetrics.PRBUsageUL) - } - c.writeUeMetrics_db(ueMetrics) - } - } - } else if containerType == 2 { - log.Printf("CU-CP Usage Report: ") - - oCUCPUE := pmContainer.RANContainer.Container.(*CUCPUsageReportType) - - for CellResourceReportItemCounter := 0; CellResourceReportItemCounter < oCUCPUE.CellResourceReportItemCount; CellResourceReportItemCounter++ { - cellResourceReportItem := oCUCPUE.CellResourceReportItems[CellResourceReportItemCounter] - - log.Printf("nRCGI.PlmnID: %x", cellResourceReportItem.NRCGI.PlmnID.Buf) - log.Printf("nRCGI.NRCellID: %x, Unused: %d", cellResourceReportItem.NRCGI.NRCellID.Buf, cellResourceReportItem.NRCGI.NRCellID.BitsUnused) - - servingCellID, err := e2sm.ParseNRCGI(cellResourceReportItem.NRCGI) - if err != nil { - xapp.Logger.Error("Failed to parse NRCGI in CU-CP Usage Report: %v", err) - log.Printf("Failed to parse NRCGI in CU-CP Usage Report: %v", err) - continue - } - - for UeResourceReportItemCounter := 0; UeResourceReportItemCounter < cellResourceReportItem.UeResourceReportItemCount; UeResourceReportItemCounter++ { - ueResourceReportItem := cellResourceReportItem.UeResourceReportItems[UeResourceReportItemCounter] - - log.Printf("C-RNTI: %x", ueResourceReportItem.CRNTI.Buf) - - ueID, err := e2sm.ParseInteger(ueResourceReportItem.CRNTI.Buf, ueResourceReportItem.CRNTI.Size) - if err != nil { - xapp.Logger.Error("Failed to parse C-RNTI in CU-CP Usage Report with Serving Cell ID [%s]: %v", err) - log.Printf("Failed to parse C-RNTI in CU-CP Usage Report with Serving Cell ID [%s]: %v", err) - continue - } - - var ueMetrics UeMetricsEntry - - ueMetrics.UeID = ueID - log.Printf("UeID: %d", ueMetrics.UeID) - ueMetrics.ServingCellID = servingCellID - log.Printf("ServingCellID: %s", ueMetrics.ServingCellID) - - ueMetrics.MeasTimeRF.TVsec = timestamp.TVsec - ueMetrics.MeasTimeRF.TVnsec = timestamp.TVnsec - - ueMetrics.MeasPeriodPDCP = 20 - ueMetrics.MeasPeriodPRB = 20 - - if ueResourceReportItem.ServingCellRF != nil { - err = json.Unmarshal(ueResourceReportItem.ServingCellRF.Buf, &ueMetrics.ServingCellRF) - log.Printf("ueMetrics.ServingCellRF: %+v", ueMetrics.ServingCellRF) - if err != nil { - xapp.Logger.Error("Failed to Unmarshal ServingCellRF in CU-CP Usage Report with UE ID [%d]: %v", ueID, err) - log.Printf("Failed to Unmarshal ServingCellRF in CU-CP Usage Report with UE ID [%d]: %v", ueID, err) - log.Printf("ServingCellRF raw data: %x", ueResourceReportItem.ServingCellRF.Buf) - continue - } - } - - if ueResourceReportItem.NeighborCellRF != nil { - err = json.Unmarshal(ueResourceReportItem.NeighborCellRF.Buf, &ueMetrics.NeighborCellsRF) - log.Printf("ueMetrics.NeighborCellsRF: %+v", ueMetrics.NeighborCellsRF) - if err != nil { - xapp.Logger.Error("Failed to Unmarshal NeighborCellRF in CU-CP Usage Report with UE ID [%d]: %v", ueID, err) - log.Printf("Failed to Unmarshal NeighborCellRF in CU-CP Usage Report with UE ID [%d]: %v", ueID, err) - log.Printf("NeighborCellRF raw data: %x", ueResourceReportItem.NeighborCellRF.Buf) - continue - } - } - c.writeUeMetrics_db(ueMetrics) - } - } - } else if containerType == 3 { - log.Printf("CU-UP Usage Report: ") - - oCUUPUE := pmContainer.RANContainer.Container.(*CUUPUsageReportType) - - for CellResourceReportItemCounter := 0; CellResourceReportItemCounter < oCUUPUE.CellResourceReportItemCount; CellResourceReportItemCounter++ { - cellResourceReportItem := oCUUPUE.CellResourceReportItems[CellResourceReportItemCounter] - - log.Printf("nRCGI.PlmnID: %x", cellResourceReportItem.NRCGI.PlmnID.Buf) - log.Printf("nRCGI.NRCellID: %x, Unused: %d", cellResourceReportItem.NRCGI.NRCellID.Buf, cellResourceReportItem.NRCGI.NRCellID.BitsUnused) - - servingCellID, err := e2sm.ParseNRCGI(cellResourceReportItem.NRCGI) - if err != nil { - xapp.Logger.Error("Failed to parse NRCGI in CU-UP Usage Report: %v", err) - log.Printf("Failed to parse NRCGI in CU-UP Usage Report: %v", err) - continue - } - - for UeResourceReportItemCounter := 0; UeResourceReportItemCounter < cellResourceReportItem.UeResourceReportItemCount; UeResourceReportItemCounter++ { - ueResourceReportItem := cellResourceReportItem.UeResourceReportItems[UeResourceReportItemCounter] - - log.Printf("C-RNTI: %x", ueResourceReportItem.CRNTI.Buf) - - ueID, err := e2sm.ParseInteger(ueResourceReportItem.CRNTI.Buf, ueResourceReportItem.CRNTI.Size) - if err != nil { - xapp.Logger.Error("Failed to parse C-RNTI in CU-UP Usage Report Serving Cell ID [%s]: %v", servingCellID, err) - log.Printf("Failed to parse C-RNTI in CU-UP Usage Report Serving Cell ID [%s]: %v", servingCellID, err) - continue - } - - var ueMetrics UeMetricsEntry - - ueMetrics.UeID = ueID - log.Printf("UeID: %d", ueMetrics.UeID) - ueMetrics.ServingCellID = servingCellID - log.Printf("ServingCellID: %s", ueMetrics.ServingCellID) - - if flag { - timestampPDCPBytes = timestamp - } - - ueMetrics.MeasTimestampPDCPBytes.TVsec = timestamp.TVsec - ueMetrics.MeasTimestampPDCPBytes.TVnsec = timestamp.TVnsec - - if ueResourceReportItem.PDCPBytesDL != nil { - ueMetrics.PDCPBytesDL, err = e2sm.ParseInteger(ueResourceReportItem.PDCPBytesDL.Buf, ueResourceReportItem.PDCPBytesDL.Size) - if err != nil { - xapp.Logger.Error("Failed to parse PDCPBytesDL in CU-UP Usage Report with UE ID [%d]: %v", ueID, err) - log.Printf("Failed to parse PDCPBytesDL in CU-UP Usage Report with UE ID [%d]: %v", ueID, err) - continue - } - } - - if ueResourceReportItem.PDCPBytesUL != nil { - ueMetrics.PDCPBytesUL, err = e2sm.ParseInteger(ueResourceReportItem.PDCPBytesUL.Buf, ueResourceReportItem.PDCPBytesUL.Size) - if err != nil { - xapp.Logger.Error("Failed to parse PDCPBytesUL in CU-UP Usage Report with UE ID [%d]: %v", ueID, err) - log.Printf("Failed to parse PDCPBytesUL in CU-UP Usage Report with UE ID [%d]: %v", ueID, err) - continue - } - } - - c.writeUeMetrics_db(ueMetrics) - } - } - } else { - xapp.Logger.Error("Unknown PF Container Type: %d", containerType) - log.Printf("Unknown PF Container Type: %d", containerType) - continue - } - } - - if flag { - var cellMetrics CellMetricsEntry - - cellMetrics.MeasPeriodPDCP = 20 - cellMetrics.MeasPeriodPRB = 20 - cellMetrics.CellID = cellIDHdr - - if timestampPDCPBytes != nil { - cellMetrics.MeasTimestampPDCPBytes.TVsec = timestampPDCPBytes.TVsec - cellMetrics.MeasTimestampPDCPBytes.TVnsec = timestampPDCPBytes.TVnsec - } - if dlPDCPBytes != -1 { - cellMetrics.PDCPBytesDL = dlPDCPBytes - } - if ulPDCPBytes != -1 { - cellMetrics.PDCPBytesUL = ulPDCPBytes - } - if timestampPRB != nil { - cellMetrics.MeasTimestampPRB.TVsec = timestampPRB.TVsec - cellMetrics.MeasTimestampPRB.TVnsec = timestampPRB.TVnsec - } - if availPRBDL != -1 { - cellMetrics.AvailPRBDL = availPRBDL - } - if availPRBUL != -1 { - cellMetrics.AvailPRBUL = availPRBUL - } - c.writeCellMetrics_db(cellMetrics) - } - } - } else { - xapp.Logger.Error("Unknown RIC Indication Message Format: %d", indMsg.IndMsgType) - log.Printf("Unkonw RIC Indication Message Format: %d", indMsg.IndMsgType) - return - } - - return nil -} - -func (c *Control) writeUeMetrics_db(ueMetrics UeMetricsEntry) { - //Write UE metrics to InfluxDB using API - writeAPI := c.client.WriteAPIBlocking("my-org", "kpimon") - ueMetricsJSON, err := json.Marshal(ueMetrics) - if err != nil { - xapp.Logger.Error("Marshal UE Metrics failed!") - } - p := influxdb2.NewPointWithMeasurement("ricIndication_UeMetrics"). - AddField("UE Metrics", ueMetricsJSON). - SetTime(time.Now()) - writeAPI.WritePoint(context.Background(), p) - xapp.Logger.Info("Wrote UE Metrics to InfluxDB") -} -func (c *Control) writeCellMetrics_db(cellMetrics CellMetricsEntry) { - //Write cell metrics to InfluxDB using API - writeAPI := c.client.WriteAPIBlocking("my-org", "kpimon") - cellMetricsJSON, er := json.Marshal(cellMetrics) - if er != nil { - xapp.Logger.Error("Marshal Cell Metrics failed!") - } - p := influxdb2.NewPointWithMeasurement("ricIndication_cellMetrics"). - AddField("Cell Metrics", cellMetricsJSON). - SetTime(time.Now()) - writeAPI.WritePoint(context.Background(), p) - xapp.Logger.Info("Wrote Cell Metrics to InfluxDB") -} -func (c Control) xAppStartCB(d interface{}) { - xapp.Logger.Info("In callback KPI monitor xApp ...") - - // Get eNodeB list - nbList := c.getnbList() - - // Send subscription request to connected NodeB - for _, nb := range nbList { - if nb.ConnectionStatus == 1 { - xapp.Logger.Info("Before send subscription request to %v", nb.InventoryName) - c.sendSubscription(nb.InventoryName) - xapp.Logger.Info("After send subscription request to %v", nb.InventoryName) - } - - } - //Call controlLoop to handle the message from e2Nodes - go c.controlLoop() - xapp.Logger.Info("End callback KPI monitor xApp ...") -} - -func (c Control) Run() { - // Setup level - xapp.Logger.SetLevel(xapp.Config.GetInt("logger.level")) - // Register callback - xapp.SetReadyCB(c.xAppStartCB, true) - // Start xApp - xapp.Run(c) -} +package control +/* +#include +#cgo LDFLAGS: -le2smwrapper -lm +#cgo CFLAGS: -I/usr/local/include/e2sm +*/ +import "C" + +import ( + "unsafe" +) + +import ( + "context" + "encoding/json" + "log" + "net/http" + "time" +// "bytes" +// "encoding/binary" + "strconv" + "encoding/base64" + "strings" + "fmt" + "reflect" + "errors" + "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/clientmodel" + "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp" + influxdb2 "github.com/influxdata/influxdb-client-go" +) + +type Control struct { + RMR chan *xapp.RMRParams //channel for receiving rmr message + client influxdb2.Client //client for influxdb +} + +var ( + timeToWait = "w10ms" + subsequentActionType = "continue" + actionType = "report" + actionId = int64(1) + seqId = int64(1) + funcId = int64(2) + hPort = int64(8080) + rPort = int64(4560) + clientEndpoint = clientmodel.SubscriptionParamsClientEndpoint{Host: "service-ricxapp-kpimon-go-http.ricxapp", HTTPPort: &hPort, RMRPort: &rPort} +) +var Glob_cell = make(map[string]bool) +func (c Control) Consume(msg *xapp.RMRParams) error { + id := xapp.Rmr.GetRicMessageName(msg.Mtype) + xapp.Logger.Info( + "Message received: name=%s meid=%s subId=%d txid=%s len=%d", + id, + msg.Meid.RanName, + msg.SubId, + msg.Xid, + msg.PayloadLen, + ) + c.RMR <- msg + return nil +} + +func NewControl() Control { + xapp.Logger.Info("In new control\n") + create_db() + xapp.Logger.Info("returning control\n") + return Control{ + make(chan *xapp.RMRParams), + influxdb2.NewClient("http://ricplt-influxdb.ricplt:8086", "client"), + } +} +func create_db() { + //Create a database named kpimon in influxDB + xapp.Logger.Info("In create_db\n") + _, err := http.Post("http://ricplt-influxdb.ricplt:8086/query?q=create%20database%20kpimon", "", nil) + if err != nil { + xapp.Logger.Error("Create database failed!") + } + xapp.Logger.Info("exiting create_db\n") +} + +func (c Control) getEnbList() ([]*xapp.RNIBNbIdentity, error) { + enbs, err := xapp.Rnib.GetListEnbIds() + if err != nil { + xapp.Logger.Error("err: %s", err) + return nil, err + } + + xapp.Logger.Info("List for connected eNBs :") + for index, enb := range enbs { + xapp.Logger.Info("%d. enbid: %s", index+1, enb.InventoryName) + } + return enbs, nil +} + +func (c *Control) getGnbList() ([]*xapp.RNIBNbIdentity, error) { + gnbs, err := xapp.Rnib.GetListGnbIds() + + if err != nil { + xapp.Logger.Error("err: %s", err) + return nil, err + } + xapp.Logger.Info("List of connected gNBs :") + for index, gnb := range gnbs { + xapp.Logger.Info("%d. gnbid : %s", index+1, gnb.InventoryName) + } + return gnbs, nil +} + +func (c *Control) getnbList() []*xapp.RNIBNbIdentity { + //Get all GnodeB and EnodeB connected to RIC + var nbs []*xapp.RNIBNbIdentity + + if enbs, err := c.getEnbList(); err == nil { + nbs = append(nbs, enbs...) + } + + if gnbs, err := c.getGnbList(); err == nil { + nbs = append(nbs, gnbs...) + } + return nbs +} + +func cellid_to_list_of_int(str string) []int64 { + l := len(str) + var ans []int64 + for i := 0; i < l; i += 2 { + output, err := strconv.ParseInt(str[i:i+2], 16, 64) + if err != nil { + fmt.Println(err) + return ans + } + ans = append(ans, output) + } + return ans +} +func plmnid_to_list_of_int(str string) []int64 { + l := len(str) + var ans []int64 + for i := 0; i < l; i += 2 { + output, err := strconv.ParseInt(str[i:i+2], 16, 64) + if err != nil { + fmt.Println(err) + return ans + } + ans = append(ans, output) + } + return ans +} +func encode_action_format1(plmn string, cellid string) clientmodel.ActionDefinition { + lol1 := plmnid_to_list_of_int(plmn) + lol2 := cellid_to_list_of_int(cellid) + var format1 []int64 + //format1=[]int64{0,1,1,8,0,19,32,0,3,1,32,0,0,32,0,4,1,32,0,0,32,0,78,1,32,0,0,32,0,79,1,32,0,0,32,0,8,1,32,0,0,32,0,7,1,32,0,0,32,0,11,1,32,0,0,32,0,12,1,32,0,0,32,0,80,1,32,0,0,32,0,81,1,32,0,0,32,0,13,1,32,0,0,32,0,14,1,32,0,0,32,0,40,1,32,0,0,32,0,41,1,32,0,0,32,0,42,1,32,0,0,32,0,82,1,32,0,0,32,0,83,1,32,0,0,32,0,84,1,32,0,0,32,0,85,1,32,0,0,32,0,86,1,32,0,0,64,39,15,0,0,31,1,18,52,92,0,16} + //0(nr) 1(eutra) 0,31,1(plmn)18,52,92,0,16(cellid) + + //for simulation-by measID (not supported in viavi 1.4) + //format1=[]int64{0,1,1,8,0,22,32,0,3,1,32,0,0,32,0,4,1,32,0,0,32,0,78,1,32,0,0,32,0,79,1,32,0,0,32,0,80,1,32,0,0,32,0,81,1,32,0,0,32,0,8,1,32,0,0,32,0,7,1,32,0,0,32,0,11,1,32,0,0,32,0,12,1,32,0,0,32,0,82,1,32,0,0,32,0,83,1,32,0,0,32,0,13,1,32,0,0,32,0,14,1,32,0,0,32,0,40,1,32,0,0,32,0,41,1,32,0,0,32,0,42,1,32,0,0,32,0,84,1,32,0,0,32,0,85,1,32,0,0,32,0,86,1,32,0,0,32,0,87,1,32,0,0,32,0,88,1,32,0,0,32,0,89,1,32,0,0,64,39,15,0}//assuming nr cells + + //for simulation-by measName(supported in Viavi 1.4) + format1=[]int64{0,1,1,8,0,22,0,160,68,82,66,46,85,69,84,104,112,68,108,1,32,0,0,0,160,68,82,66,46,85,69,84,104,112,85,108,1,32,0,0,0,176,80,69,69,46,65,118,103,80,111,119,101,114,1,32,0,0,0,144,80,69,69,46,69,110,101,114,103,121,1,32,0,0,1,144,81,111,115,70,108,111,119,46,84,111,116,80,100,99,112,80,100,117,86,111,108,117,109,101,68,108,1,32,0,0,1,144,81,111,115,70,108,111,119,46,84,111,116,80,100,99,112,80,100,117,86,111,108,117,109,101,85,108,1,32,0,0,0,160,82,82,67,46,67,111,110,110,77,97,120,1,32,0,0,0,176,82,82,67,46,67,111,110,110,77,101,97,110,1,32,0,0,0,208,82,82,85,46,80,114,98,65,118,97,105,108,68,108,1,32,0,0,0,208,82,82,85,46,80,114,98,65,118,97,105,108,85,108,1,32,0,0,0,176,82,82,85,46,80,114,98,84,111,116,68,108,1,32,0,0,0,176,82,82,85,46,80,114,98,84,111,116,85,108,1,32,0,0,0,192,82,82,85,46,80,114,98,85,115,101,100,68,108,1,32,0,0,0,192,82,82,85,46,80,114,98,85,115,101,100,85,108,1,32,0,0,0,160,86,105,97,118,105,46,71,101,111,46,120,1,32,0,0,0,160,86,105,97,118,105,46,71,101,111,46,121,1,32,0,0,0,160,86,105,97,118,105,46,71,101,111,46,122,1,32,0,0,0,192,86,105,97,118,105,46,71,110,98,68,117,73,100,1,32,0,0,0,160,86,105,97,118,105,46,78,114,67,103,105,1,32,0,0,0,160,86,105,97,118,105,46,78,114,80,99,105,1,32,0,0,1,96,86,105,97,118,105,46,82,97,100,105,111,46,97,110,116,101,110,110,97,84,121,112,101,1,32,0,0,1,32,86,105,97,118,105,46,82,97,100,105,111,46,97,122,105,109,117,116,104,1,32,0,0,1,0,86,105,97,118,105,46,82,97,100,105,111,46,112,111,119,101,114,1,32,0,0,64,39,15,0}//assuming nr cells + //for e2test + // format1=[]int64{0,1,1,8,0,42,32,0,0,1,32,0,0,32,0,1,1,32,0,0,32,0,2,1,32,0,0,32,0,3,1,32,0,0,32,0,4,1,32,0,0,32,0,5,1,32,0,0,32,0,6,1,32,0,0,32,0,7,1,32,0,0,32,0,8,1,32,0,0,32,0,9,1,32,0,0,32,0,10,1,32,0,0,32,0,11,1,32,0,0,32,0,12,1,32,0,0,32,0,13,1,32,0,0,32,0,14,1,32,0,0,32,0,15,1,32,0,0,32,0,16,1,32,0,0,32,0,17,1,32,0,0,32,0,18,1,32,0,0,32,0,19,1,32,0,0,32,0,20,1,32,0,0,32,0,21,1,32,0,0,32,0,22,1,32,0,0,32,0,23,1,32,0,0,32,0,24,1,32,0,0,32,0,25,1,32,0,0,32,0,26,1,32,0,0,32,0,27,1,32,0,0,32,0,28,1,32,0,0,32,0,29,1,32,0,0,32,0,30,1,32,0,0,32,0,31,1,32,0,0,32,0,32,1,32,0,0,32,0,33,1,32,0,0,32,0,34,1,32,0,0,32,0,35,1,32,0,0,32,0,36,1,32,0,0,32,0,37,1,32,0,0,32,0,38,1,32,0,0,32,0,39,1,32,0,0,32,0,40,1,32,0,0,32,0,41,1,32,0,0,32,0,42,1,32,0,0,64,39,15,0} + format1 = append(format1, lol1...) //appending plmn + format1 = append(format1, lol2...) //appending cellid + return format1 +} + +func encode_action_format2() clientmodel.ActionDefinition{ + var format2 []int64 + format2 = []int64{0, 1, 0, 0, 0, 20, 0, 160, 68, 82, 66, 46, 85, 69, 84, 104, 112, 68, 108, 1, 0, 0, 0, 1, 64, 68, 82, 66, 46, 85, 69, 84, 104, 112, 85, 108, 1, 0, 0, 0, 1, 0, 71, 78, 66, 45, 68, 85, 45, 73, 68, 1, 0, 0, 0, 0, 160, 78, 82, 45, 67, 71, 73, 1, 0, 0, 0, 0, 160, 78, 82, 45, 80, 67, 73, 1, 0, 0, 0, 2, 192, 81, 111, 115, 70, 108, 111, 119, 46, 80, 100, 99, 112, 80, 100, 117, 86, 111, 108, 117, 109, 101, 68, 108, 1, 0, 0, 0, 2, 192, 81, 111, 115, 70, 108, 111, 119, 46, 80, 100, 99, 112, 80, 100, 117, 86, 111, 108, 117, 109, 101, 85, 108, 1, 0, 0, 0, 1, 64, 82, 82, 67, 46, 67, 111, 110, 110, 77, 97, 120, 1, 0, 0, 0, 1, 96, 82, 82, 67, 46, 67, 111, 110, 110, 77, 101, 97, 110, 1, 0, 0, 0, 1, 160, 82, 82, 85, 46, 80, 114, 98, 65, 118, 97, 105, 108, 68, 108, 1, 0, 0, 0, 1, 160, 82, 82, 85, 46, 80, 114, 98, 65, 118, 97, 105, 108, 85, 108, 1, 0, 0, 0, 1, 32, 82, 82, 85, 46, 80, 114, 98, 84, 111, 116, 1, 0, 0, 0, 1, 96, 82, 82, 85, 46, 80, 114, 98, 84, 111, 116, 68, 108, 1, 0, 0, 0, 1, 96, 82, 82, 85, 46, 80, 114, 98, 84, 111, 116, 85, 108, 1, 0, 0, 0, 1, 128, 82, 82, 85, 46, 80, 114, 98, 85, 115, 101, 100, 68, 108, 1, 0, 0, 0, 1, 128, 82, 82, 85, 46, 80, 114, 98, 85, 115, 101, 100, 85, 108, 1, 0, 0, 0, 1, 64, 86, 105, 97, 118, 105, 46, 71, 101, 111, 46, 120, 1, 0, 0, 0, 1, 64, 86, 105, 97, 118, 105, 46, 71, 101, 111, 46, 121, 1, 0, 0, 0, 1, 64, 86, 105, 97, 118, 105, 46, 71, 101, 111, 46, 122, 1, 0, 0, 0, 2, 0, 86, 105, 97, 118, 105, 46, 82, 97, 100, 105, 111, 46, 112, 111, 119, 101, 114, 1, 0, 0, 0, 2, 64, 86, 105, 97, 118, 105, 46, 82, 97, 100, 105, 111, 46, 115, 101, 99, 116, 111, 114, 115, 1, 0, 0, 0, 0, 0} + //encode the variable part and append it to our array. + format2 = append(format2, 89) //appending variable part if necessory + return format2 +} + +func encode_action_format3() clientmodel.ActionDefinition { + var format3 []int64 + + //for simulation-by measId(not supported in Viavi 1.4) + //format3=[]int64{0,1,3,64,0,29,32,0,90,0,0,16,0,0,16,0,91,0,0,16,0,0,16,0,3,0,0,16,0,0,16,0,4,0,0,16,0,0,16,0,80,0,0,16,0,0,16,0,13,0,0,16,0,0,16,0,14,0,0,16,0,0,16,0,92,0,0,16,0,0,16,0,93,0,0,16,0,0,16,0,44,0,0,16,0,0,16,0,40,0,0,16,0,0,16,0,41,0,0,16,0,0,16,0,42,0,0,16,0,0,16,0,94,0,0,16,0,0,16,0,95,0,0,16,0,0,16,0,96,0,0,16,0,0,16,0,97,0,0,16,0,0,16,0,45,0,0,16,0,0,16,0,98,0,0,16,0,0,16,0,99,0,0,16,0,0,16,0,100,0,0,16,0,0,16,0,101,0,0,16,0,0,16,0,102,0,0,16,0,0,16,0,103,0,0,16,0,0,16,0,104,0,0,16,0,0,16,0,43,0,0,16,0,0,16,0,105,0,0,16,0,0,16,0,106,0,0,16,0,0,16,0,107,0,0,16,0,0,16,0,108,0,0,16,0,0,32,39,15} + //variable part is not presetnt in action def format 3 + + //for simulation-by measName(supported in Viavi 1.4) + format3=[]int64{0,1,3,64,0,29,0,160,68,82,66,46,85,69,67,113,105,68,108,0,0,16,0,0,0,80,68,82,66,46,85,69,67,113,105,85,108,0,0,16,0,0,0,80,68,82,66,46,85,69,84,104,112,68,108,0,0,16,0,0,0,80,68,82,66,46,85,69,84,104,112,85,108,0,0,16,0,0,0,200,81,111,115,70,108,111,119,46,84,111,116,80,100,99,112,80,100,117,86,111,108,117,109,101,68,108,0,0,16,0,0,0,96,82,82,85,46,80,114,98,85,115,101,100,68,108,0,0,16,0,0,0,96,82,82,85,46,80,114,98,85,115,101,100,85,108,0,0,16,0,0,0,80,84,66,46,84,111,116,78,98,114,68,108,0,0,16,0,0,0,80,84,66,46,84,111,116,78,98,114,85,108,0,0,16,0,0,0,96,86,105,97,118,105,46,67,101,108,108,46,105,100,0,0,16,0,0,0,80,86,105,97,118,105,46,71,101,111,46,120,0,0,16,0,0,0,80,86,105,97,118,105,46,71,101,111,46,121,0,0,16,0,0,0,80,86,105,97,118,105,46,71,101,111,46,122,0,0,16,0,0,0,96,86,105,97,118,105,46,81,111,83,46,53,113,105,0,0,16,0,0,0,120,86,105,97,118,105,46,81,111,83,46,67,101,108,108,73,100,0,0,16,0,0,0,112,86,105,97,118,105,46,81,111,83,46,68,114,98,73,100,0,0,16,0,0,0,104,86,105,97,118,105,46,81,111,83,46,71,102,98,114,0,0,16,0,0,0,104,86,105,97,118,105,46,83,108,105,99,101,46,105,100,0,0,16,0,0,0,112,86,105,97,118,105,46,85,69,46,66,101,97,109,73,100,0,0,16,0,0,0,128,86,105,97,118,105,46,85,69,46,70,114,97,109,101,67,110,116,0,0,16,0,0,0,112,86,105,97,118,105,46,85,69,46,82,115,83,105,110,114,0,0,16,0,0,0,96,86,105,97,118,105,46,85,69,46,82,115,114,112,0,0,16,0,0,0,96,86,105,97,118,105,46,85,69,46,82,115,114,113,0,0,16,0,0,0,112,86,105,97,118,105,46,85,69,46,84,99,82,110,116,105,0,0,16,0,0,0,136,86,105,97,118,105,46,85,69,46,97,110,111,109,97,108,105,101,115,0,0,16,0,0,0,80,86,105,97,118,105,46,85,69,46,105,100,0,0,16,0,0,0,184,86,105,97,118,105,46,85,69,46,115,101,114,118,105,110,103,68,105,115,116,97,110,99,101,0,0,16,0,0,0,104,86,105,97,118,105,46,85,69,46,115,112,101,101,100,0,0,16,0,0,0,208,86,105,97,118,105,46,85,69,46,116,97,114,103,101,116,84,104,114,111,117,103,104,112,117,116,68,108,0,0,16,0,0,0,208,86,105,97,118,105,46,85,69,46,116,97,114,103,101,116,84,104,114,111,117,103,104,112,117,116,85,108,0,0,16,0,0,32,39,15} + + //variable part is not presetnt in action def format 3 + + //for e2test + //format3=[]int64{0,1,3,64,0,62,32,0,43,0,0,16,0,0,16,0,44,0,0,16,0,0,16,0,45,0,0,16,0,0,16,0,3,0,0,16,0,0,16,0,4,0,0,16,0,0,16,0,13,0,0,16,0,0,16,0,14,0,0,16,0,0,16,0,46,0,0,16,0,0,16,0,47,0,0,16,0,0,16,0,48,0,0,16,0,0,16,0,49,0,0,16,0,0,16,0,50,0,0,16,0,0,16,0,51,0,0,16,0,0,16,0,52,0,0,16,0,0,16,0,53,0,0,16,0,0,16,0,54,0,0,16,0,0,16,0,55,0,0,16,0,0,16,0,56,0,0,16,0,0,16,0,57,0,0,16,0,0,16,0,58,0,0,16,0,0,16,0,59,0,0,16,0,0,16,0,60,0,0,16,0,0,16,0,61,0,0,16,0,0,16,0,62,0,0,16,0,0,16,0,63,0,0,16,0,0,16,0,64,0,0,16,0,0,16,0,65,0,0,16,0,0,16,0,66,0,0,16,0,0,16,0,67,0,0,16,0,0,16,0,68,0,0,16,0,0,16,0,69,0,0,16,0,0,16,0,70,0,0,16,0,0,16,0,71,0,0,16,0,0,16,0,72,0,0,16,0,0,16,0,73,0,0,16,0,0,16,0,74,0,0,16,0,0,16,0,75,0,0,16,0,0,16,0,76,0,0,16,0,0,16,0,77,0,0,16,0,0,16,0,27,0,0,16,0,0,16,0,19,0,0,16,0,0,16,0,26,0,0,16,0,0,16,0,39,0,0,16,0,0,16,0,15,0,0,16,0,0,16,0,16,0,0,16,0,0,16,0,17,0,0,16,0,0,16,0,18,0,0,16,0,0,16,0,20,0,0,16,0,0,16,0,21,0,0,16,0,0,16,0,22,0,0,16,0,0,16,0,23,0,0,16,0,0,16,0,28,0,0,16,0,0,16,0,29,0,0,16,0,0,16,0,30,0,0,16,0,0,16,0,31,0,0,16,0,0,16,0,32,0,0,16,0,0,16,0,33,0,0,16,0,0,16,0,34,0,0,16,0,0,16,0,35,0,0,16,0,0,16,0,36,0,0,16,0,0,16,0,40,0,0,16,0,0,16,0,41,0,0,16,0,0,16,0,42,0,0,16,0,0,32,39,15} + //variable part is not presetnt in action def format 3 + return format3 +} +func encode_actionsToBeSetup(meid string) clientmodel.ActionsToBeSetup { + var l clientmodel.ActionsToBeSetup + link:="http://service-ricplt-e2mgr-http.ricplt.svc.cluster.local:3800/v1/nodeb/" + link=link+meid + tmpr,err := http.Get(link) + if err != nil { + log.Fatalln(err) + return l + } + defer tmpr.Body.Close() + var resp E2mgrResponse + + err=json.NewDecoder(tmpr.Body).Decode(&resp) + if err != nil { + log.Fatalln(err) + return l + } + + + counter := 0 + for i := 0; i < len(resp.Gnb.NodeConfigs); i++ { + if resp.Gnb.NodeConfigs[i].E2nodeComponentInterfaceType == "f1" { + counter = i + break + } + } + tm := resp.Gnb.NodeConfigs[counter].E2nodeComponentRequestPart + base64Text := make([]byte, base64.StdEncoding.DecodedLen(len(tm))) + nl, _ := base64.StdEncoding.Decode(base64Text, []byte(tm)) + message := string(base64Text[:nl]) + + counter = 0 + for i := 0; i < len(meid); i++ { + if meid[i] == '_' { + counter++ + } + if counter == 3 { + counter = i + 1 + break + } + } + + ans := strings.ToUpper(meid[counter:len(meid)]) + l1 := int64(len(message)) + l2 := int64(len(ans)) + var cells []string + for i := int64(0); i <= l1-l2; i++ { + if strings.Contains(message[i:i+l2], ans) { + Glob_cell[message[i:i+10]]=true + cells = append(cells, message[i:i+10]) + fmt.Println(message[i : i+10]) + } + } + + var n int64 = 1 + //var ue int64 = 1 //get no of ue connected to du(if required) + + //for action def 1 + for n <= int64(len(cells)) { + var tmp int64 = n + var lol *int64 = &tmp + s := clientmodel.ActionToBeSetup{ + ActionID: lol, + ActionType: &actionType, + ActionDefinition: encode_action_format1(resp.GlobalNbId.PlmnId, cells[n-1]), + SubsequentAction: &clientmodel.SubsequentAction{ + SubsequentActionType: &subsequentActionType, + TimeToWait: &timeToWait, + }, + } + l = append(l, &s) + + n = n + 1 + } + var tmp_act_id int64 = n + /* + n = 1 + // for action def 2 + for n <= ue { + var tmp int64 = tmp_act_id + var lol *int64 = &tmp + s := clientmodel.ActionToBeSetup{ + ActionID: lol, + ActionType: &actionType, + ActionDefinition: encode_action_format2(), + SubsequentAction: &clientmodel.SubsequentAction{ + SubsequentActionType: &subsequentActionType, + TimeToWait: &timeToWait, + }, + } + l = append(l, &s) + tmp_act_id = tmp_act_id + 1 + n = n + 1 + } + */ + + //for action def 3 + var tmp int64 = tmp_act_id + var lol *int64 = &tmp + s := clientmodel.ActionToBeSetup{ + ActionID: lol, + ActionType: &actionType, + ActionDefinition: encode_action_format3(), + SubsequentAction: &clientmodel.SubsequentAction{ + SubsequentActionType: &subsequentActionType, + TimeToWait: &timeToWait, + }, + } + l = append(l, &s) + + return l + +} +func (c Control) sendSubscription(meid string) { + //Create Subscription message and send it to RIC platform + xapp.Logger.Info("Sending subscription request for MEID: %v", meid) +/* + subscritionParams := clientmodel.SubscriptionParams{ + ClientEndpoint: &clientEndpoint, + Meid: &meid, + RANFunctionID: &funcId, + SubscriptionDetails: clientmodel.SubscriptionDetailsList{ + &clientmodel.SubscriptionDetail{ + EventTriggers: clientmodel.EventTriggerDefinition{ + 8,39,15, + }, + XappEventInstanceID: &seqId, + ActionToBeSetupList: clientmodel.ActionsToBeSetup{ + &clientmodel.ActionToBeSetup{ + ActionID: &actionId, + ActionType: &actionType, + ActionDefinition: clientmodel.ActionDefinition{ + 5678, + }, + SubsequentAction: &clientmodel.SubsequentAction{ + SubsequentActionType: &subsequentActionType, + TimeToWait: &timeToWait, + }, + }, + }, + }, + }, + } + */ + + //8,39,15, for 10000 ms reporting period + subscritionParams := clientmodel.SubscriptionParams{ + ClientEndpoint: &clientEndpoint, + Meid: &meid, + RANFunctionID: &funcId, + SubscriptionDetails: clientmodel.SubscriptionDetailsList{ + &clientmodel.SubscriptionDetail{ + EventTriggers: clientmodel.EventTriggerDefinition{ + 8,39,15, + }, + XappEventInstanceID: &seqId, + ActionToBeSetupList: encode_actionsToBeSetup(meid), + }, + }, + } + + b, err := json.MarshalIndent(subscritionParams, "", " ") + if err != nil { + xapp.Logger.Error("Json marshaling failed: %v", err) + } + xapp.Logger.Info("*****body: %s", string(b)) + + resp, err := xapp.Subscription.Subscribe(&subscritionParams) + if err != nil { + xapp.Logger.Error("Subscription (%s) failed with error: %s", meid, err) + return + } + xapp.Logger.Info("Successfully subscription done (%s), subscriptrion id: %s", meid, *resp.SubscriptionID) +} + +func Test() (err error) { + var e2ap *E2ap + //var e2sm *E2sm + + //indicationMsg, err := e2ap.GetIndicationMessage(params.Payload) + indicationMsg, err := e2ap.GetIndicationM() + + if err != nil { + xapp.Logger.Error("Failed to decode RIC Indication message: %v", err) + return + } + + //log.Printf("RIC Indication message from {%s} received", params.Meid.RanName) + /* + indicationHdr, err := e2sm.GetIndicationHeader(indicationMsg.IndHeader) + if err != nil { + xapp.Logger.Error("Failed to decode RIC Indication Header: %v", err) + return + } + */ + + //Decoding message and put information into log + log.Printf("-----------RIC Indication Header-----------") + log.Printf("indicationMsg.IndHeader= %x", indicationMsg.IndHeader) +/* + buf := new(bytes.Buffer) //create my buffer + binary.Write(buf, binary.LittleEndian, indicationMsg.IndHeader) + log.Printf("binary Write buf= %x",buf ) + b := buf.Bytes() + //str := buf.String() + //log.Printf(" buf Strin()= %s",str ) + //cptr1:= unsafe.Pointer(C.CString(str)) + cptr1:= unsafe.Pointer(&b[0]) + defer C.free(cptr1) +*/ + cptr1 := unsafe.Pointer(&indicationMsg.IndHeader[0]) + decodedHdr := C.e2sm_decode_ric_indication_header(cptr1, C.size_t(len(indicationMsg.IndHeader))) + //decodedHdr := C.e2sm_decode_ric_indication_header(cptr1, C.size_t(len(str))) + //decodedHdr := C.e2sm_decode_ric_indication_header(cptr1, C.size_t(buf.Len())) + if decodedHdr == nil { + return errors.New("e2sm wrapper is unable to get IndicationHeader due to wrong or invalid input") + } + defer C.e2sm_free_ric_indication_header(decodedHdr) + IndHdrType := int32(decodedHdr.indicationHeader_formats.present) + if IndHdrType==0{ + log.Printf("No Indication Header present") + } + if IndHdrType==1{ + log.Printf("Indication Header format = %d",IndHdrType) + indHdrFormat1_C := *(**C.E2SM_KPM_IndicationHeader_Format1_t)(unsafe.Pointer(&decodedHdr.indicationHeader_formats.choice[0])) + //senderName_C := (*C.PrintableString_t)(unsafe.Pointer(indHdrFormat1_C.senderName)) + senderName_C:=indHdrFormat1_C.senderName + var senderName []byte + senderName = C.GoBytes(unsafe.Pointer(senderName_C.buf), C.int(senderName_C.size)) + log.Printf("Sender Name = %x",senderName) + + //senderType_C := (*C.PrintableString_t)(unsafe.Pointer(indHdrFormat1_C.senderType)) + senderType_C :=indHdrFormat1_C.senderType + //senderType []byte + senderType := C.GoBytes(unsafe.Pointer(senderType_C.buf), C.int(senderType_C.size)) + log.Printf("Sender Type = %x",senderType) + + //vendorName_C := (*C.PrintableString_t)(unsafe.Pointer(indHdrFormat1_C.vendorName)) + vendorName_C :=indHdrFormat1_C.vendorName + //vendorName []byte + vendorName := C.GoBytes(unsafe.Pointer(vendorName_C.buf), C.int(vendorName_C.size)) + log.Printf("Vendor Name = %x",vendorName) + + + } + + /* + indMsg, err := e2sm.GetIndicationMessage(indicationMsg.IndMessage) + if err != nil { + xapp.Logger.Error("Failed to decode RIC Indication Message: %v", err) + return + } + */ + log.Printf("-----------RIC Indication Message-----------") + log.Printf("indicationMsg.IndMessage= %x",indicationMsg.IndMessage) + cptr2 := unsafe.Pointer(&indicationMsg.IndMessage[0]) + indicationmessage := C.e2sm_decode_ric_indication_message(cptr2, C.size_t(len(indicationMsg.IndMessage))) + if indicationmessage == nil { + return errors.New("e2sm wrapper is unable to get IndicationMessage due to wrong or invalid input") + } + defer C.e2sm_free_ric_indication_message(indicationmessage) + IndMsgType := int32(indicationmessage.indicationMessage_formats.present) + if IndMsgType==1 {//parsing cell metrics + fmt.Printf(" parsing for cell metrics\n" ) + indMsgFormat1_C := *(**C.E2SM_KPM_IndicationMessage_Format1_t)(unsafe.Pointer(&indicationmessage.indicationMessage_formats.choice[0])) + no_of_cell:=int32(indMsgFormat1_C .measData.list.count) + fmt.Printf(" \n No of cell = %d\n",no_of_cell ) + //fmt.Println(no_of_cell) + for n := int32(0); n < no_of_cell; n++ { + var sizeof_MeasurementDataItem_t *C.MeasurementDataItem_t + MeasurementDataItem_C:=*(**C.MeasurementDataItem_t)(unsafe.Pointer(uintptr(unsafe.Pointer(indMsgFormat1_C.measData.list.array)) + (uintptr)(int(n))*unsafe.Sizeof(sizeof_MeasurementDataItem_t))) + no_of_cell_metrics:=int32(MeasurementDataItem_C.measRecord.list.count) + var CellM CellMetricsEntry + v := reflect.ValueOf(CellM) + fmt.Printf(" \n No of cell metrics = %d\n",no_of_cell_metrics) + values := make(map[string]interface{}, v.NumField()) + //assert no_of_cell_metrics == v.NumField() they both should be equal. + for i := int32(0); i < no_of_cell_metrics; i++ { + //fmt.Println(i) + if v.Field(int(i)).CanInterface() { + var sizeof_MeasurementRecordItem_t *C.MeasurementRecordItem_t + MeasurementRecordItem_C:=*(**C. MeasurementRecordItem_t)(unsafe.Pointer(uintptr(unsafe.Pointer(MeasurementDataItem_C.measRecord.list.array)) + (uintptr)(int(i))*unsafe.Sizeof(sizeof_MeasurementRecordItem_t))) + type_var:=int(MeasurementRecordItem_C.present) + if type_var==1{ + var cast_integer *C.long = (*C.long)(unsafe.Pointer(&MeasurementRecordItem_C.choice[0])) + values[v.Type().Field(int(i)).Name]=int32(*cast_integer) + }else if type_var==2{ + var cast_float *C.double = (*C.double)(unsafe.Pointer(&MeasurementRecordItem_C.choice[0])) + values[v.Type().Field(int(i)).Name]=float64(*cast_float) + }else{ + fmt.Printf("Wrong Data Type") + } + + }else { + fmt.Printf("sorry you have a unexported field (lower case) value you are trying to sneak past. Can not allow it: %v\n", v.Type().Field(int(i)).Name) + } + }//end of inner for loop + + + fmt.Println(values) + fmt.Printf("Parsing Cell Metric Done") + //c.writeCellMetrics_db(&values)//push cellmetrics map entry to database. + }//end of outer for loop + //end of if IndMsgType==1 , parsing cell metrics done + + } else if IndMsgType==2 { //parsing ue metrics + + fmt.Printf(" parsing for UE metrics" ) + indMsgFormat2_C := *(**C.E2SM_KPM_IndicationMessage_Format2_t)(unsafe.Pointer(&indicationmessage.indicationMessage_formats.choice[0])) + no_of_ue_metrics:=int32(indMsgFormat2_C .measData.list.count) + fmt.Printf(" \n No of ue metrics = %d\n",no_of_ue_metrics) + + var sizeof_MeasurementDataItem_t *C.MeasurementDataItem_t + MeasurementDataItem_C:=*(**C.MeasurementDataItem_t)(unsafe.Pointer(uintptr(unsafe.Pointer(indMsgFormat2_C.measData.list.array)) + (uintptr)(0)*unsafe.Sizeof(sizeof_MeasurementDataItem_t))) + + no_of_ue:=int32(MeasurementDataItem_C.measRecord.list.count) + fmt.Printf(" \n No of ue= %d\n",no_of_ue) + for n := int32(0); n < no_of_ue; n++ { + var UeM UeMetricsEntry + v := reflect.ValueOf(UeM) + values := make(map[string]interface{}, v.NumField()) + //assert no_of_ue_metrics == v.NumField() they both should be equal. + for i := int32(0); i < no_of_ue_metrics; i++ { + //fmt.Println(i) + if v.Field(int(i)).CanInterface() { + + var sizeof_MeasurementDataItem_t *C.MeasurementDataItem_t + MeasurementDataItem_C:=*(**C.MeasurementDataItem_t)(unsafe.Pointer(uintptr(unsafe.Pointer(indMsgFormat2_C.measData.list.array)) + (uintptr)(i)*unsafe.Sizeof(sizeof_MeasurementDataItem_t))) + var sizeof_MeasurementRecordItem_t *C.MeasurementRecordItem_t + MeasurementRecordItem_C:=*(**C.MeasurementRecordItem_t)(unsafe.Pointer(uintptr(unsafe.Pointer(MeasurementDataItem_C.measRecord.list.array)) + (uintptr)(n)*unsafe.Sizeof(sizeof_MeasurementRecordItem_t))) + + type_var:=int(MeasurementRecordItem_C.present) + if type_var==1{ + var cast_integer *C.long = (*C.long)(unsafe.Pointer(&MeasurementRecordItem_C.choice[0])) + values[v.Type().Field(int(i)).Name]=int32(*cast_integer) + }else if type_var==2{ + var cast_float *C.double = (*C.double)(unsafe.Pointer(&MeasurementRecordItem_C.choice[0])) + values[v.Type().Field(int(i)).Name]=float64(*cast_float) + + }else{ + fmt.Printf("Wrong Data Type") + } + + }else { + fmt.Printf("sorry you have a unexported field (lower case) value you are trying to sneak past. Can not allow it: %v\n", v.Type().Field(int(i)).Name) + } + + + } //end of inner for loop + fmt.Println(values) + fmt.Printf("Parsing UE Metric Done") + //c.writeUeMetrics_db(&values)//push UEmetrics map entry to database. + + }// end of outer for loop + //parsing ue metrics done + }else{ + fmt.Printf(" Invalid Indication message format" ) + + } + + + return nil +} + +func (c *Control) controlLoop() { + //Handle receiving message based on message type + for { + msg := <-c.RMR + xapp.Logger.Debug("Received message type: %d", msg.Mtype) + switch msg.Mtype { + case xapp.RIC_INDICATION: + go c.handleIndication(msg) + default: + xapp.Logger.Error("Unknown Message Type '%d', discarding", msg.Mtype) + } + } +} +func (c *Control) handleIndication(params *xapp.RMRParams) (err error) { + var e2ap *E2ap + //var e2sm *E2sm + + indicationMsg, err := e2ap.GetIndicationMessage(params.Payload) + if err != nil { + xapp.Logger.Error("Failed to decode RIC Indication message: %v", err) + return + } + + log.Printf("RIC Indication message from {%s} received", params.Meid.RanName) + /* + indicationHdr, err := e2sm.GetIndicationHeader(indicationMsg.IndHeader) + if err != nil { + xapp.Logger.Error("Failed to decode RIC Indication Header: %v", err) + return + } + */ + + //Decoding message and put information into log + //log.Printf("-----------RIC Indication Header-----------") + //log.Printf("indicationMsg.IndHeader= %x", indicationMsg.IndHeader) +/* + buf := new(bytes.Buffer) //create my buffer + binary.Write(buf, binary.LittleEndian, indicationMsg.IndHeader) + log.Printf("binary Write buf= %x",buf ) + b := buf.Bytes() + //str := buf.String() + //log.Printf(" buf Strin()= %s",str ) + //cptr1:= unsafe.Pointer(C.CString(str)) + cptr1:= unsafe.Pointer(&b[0]) + defer C.free(cptr1) +*/ + cptr1 := unsafe.Pointer(&indicationMsg.IndHeader[0]) + decodedHdr := C.e2sm_decode_ric_indication_header(cptr1, C.size_t(len(indicationMsg.IndHeader))) + //decodedHdr := C.e2sm_decode_ric_indication_header(cptr1, C.size_t(len(str))) + //decodedHdr := C.e2sm_decode_ric_indication_header(cptr1, C.size_t(buf.Len())) + if decodedHdr == nil { + return errors.New("e2sm wrapper is unable to get IndicationHeader due to wrong or invalid input") + } + defer C.e2sm_free_ric_indication_header(decodedHdr) + IndHdrType := int32(decodedHdr.indicationHeader_formats.present) + if IndHdrType==0{ + log.Printf("No Indication Header present") + } + if IndHdrType==1{ + log.Printf("Indication Header format = %d",IndHdrType) + /* + indHdrFormat1_C := *(**C.E2SM_KPM_IndicationHeader_Format1_t)(unsafe.Pointer(&decodedHdr.indicationHeader_formats.choice[0])) + //senderName_C := (*C.PrintableString_t)(unsafe.Pointer(indHdrFormat1_C.senderName)) + senderName_C:=indHdrFormat1_C.senderName + var senderName []byte + senderName = C.GoBytes(unsafe.Pointer(senderName_C.buf), C.int(senderName_C.size)) + //log.Printf("Sender Name = %x",senderName) + + //senderType_C := (*C.PrintableString_t)(unsafe.Pointer(indHdrFormat1_C.senderType)) + senderType_C :=indHdrFormat1_C.senderType + //senderType []byte + senderType := C.GoBytes(unsafe.Pointer(senderType_C.buf), C.int(senderType_C.size)) + //log.Printf("Sender Type = %x",senderType) + + //vendorName_C := (*C.PrintableString_t)(unsafe.Pointer(indHdrFormat1_C.vendorName)) + vendorName_C :=indHdrFormat1_C.vendorName + //vendorName []byte + vendorName := C.GoBytes(unsafe.Pointer(vendorName_C.buf), C.int(vendorName_C.size)) + //log.Printf("Vendor Name = %x",vendorName) + */ + + } + + /* + indMsg, err := e2sm.GetIndicationMessage(indicationMsg.IndMessage) + if err != nil { + xapp.Logger.Error("Failed to decode RIC Indication Message: %v", err) + return + } + */ + //log.Printf("-----------RIC Indication Message-----------") + //log.Printf("indicationMsg.IndMessage= %x",indicationMsg.IndMessage) + cptr2 := unsafe.Pointer(&indicationMsg.IndMessage[0]) + indicationmessage := C.e2sm_decode_ric_indication_message(cptr2, C.size_t(len(indicationMsg.IndMessage))) + if indicationmessage == nil { + return errors.New("e2sm wrapper is unable to get IndicationMessage due to wrong or invalid input") + } + defer C.e2sm_free_ric_indication_message(indicationmessage) + IndMsgType := int32(indicationmessage.indicationMessage_formats.present) + if IndMsgType==1 {//parsing cell metrics + fmt.Printf(" parsing for cell metrics\n" ) + indMsgFormat1_C := *(**C.E2SM_KPM_IndicationMessage_Format1_t)(unsafe.Pointer(&indicationmessage.indicationMessage_formats.choice[0])) + no_of_cell:=int32(indMsgFormat1_C .measData.list.count) + fmt.Printf(" \n No of cell = %d\n",no_of_cell ) + //fmt.Println(no_of_cell) + for n := int32(0); n < no_of_cell; n++ { + var sizeof_MeasurementDataItem_t *C.MeasurementDataItem_t + MeasurementDataItem_C:=*(**C.MeasurementDataItem_t)(unsafe.Pointer(uintptr(unsafe.Pointer(indMsgFormat1_C.measData.list.array)) + (uintptr)(int(n))*unsafe.Sizeof(sizeof_MeasurementDataItem_t))) + no_of_cell_metrics:=int32(MeasurementDataItem_C.measRecord.list.count) + var CellM CellMetricsEntry + v := reflect.ValueOf(CellM) + fmt.Printf(" \n No of cell metrics = %d\n",no_of_cell_metrics) + values := make(map[string]interface{}, v.NumField()) + //assert no_of_cell_metrics == v.NumField() they both should be equal. + if (int(no_of_cell_metrics) != v.NumField()){ + log.Printf("no_of_cell_metrics != v.NumField()") + return errors.New("no_of_cell_metrics != v.NumField()") + } + for i := int32(0); i < no_of_cell_metrics; i++ { + //fmt.Println(i) + if v.Field(int(i)).CanInterface() { + var sizeof_MeasurementRecordItem_t *C.MeasurementRecordItem_t + MeasurementRecordItem_C:=*(**C. MeasurementRecordItem_t)(unsafe.Pointer(uintptr(unsafe.Pointer(MeasurementDataItem_C.measRecord.list.array)) + (uintptr)(int(i))*unsafe.Sizeof(sizeof_MeasurementRecordItem_t))) + type_var:=int(MeasurementRecordItem_C.present) + if type_var==1{ + var cast_integer *C.long = (*C.long)(unsafe.Pointer(&MeasurementRecordItem_C.choice[0])) + values[v.Type().Field(int(i)).Name]=int32(*cast_integer) + }else if type_var==2{ + var cast_float *C.double = (*C.double)(unsafe.Pointer(&MeasurementRecordItem_C.choice[0])) + values[v.Type().Field(int(i)).Name]=float64(*cast_float) + }else{ + fmt.Printf("Wrong Data Type") + } + + }else { + fmt.Printf("sorry you have a unexported field (lower case) value you are trying to sneak past. Can not allow it: %v\n", v.Type().Field(int(i)).Name) + } + }//end of inner for loop + + + fmt.Println(values) + fmt.Printf("Parsing Cell Metric Done") + c.writeCellMetrics_db(&values)//push cellmetrics map entry to database. + }//end of outer for loop + //end of if IndMsgType==1 , parsing cell metrics done + + } else if IndMsgType==2 { //parsing ue metrics + + fmt.Printf(" parsing for UE metrics" ) + indMsgFormat2_C := *(**C.E2SM_KPM_IndicationMessage_Format2_t)(unsafe.Pointer(&indicationmessage.indicationMessage_formats.choice[0])) + no_of_ue_metrics:=int32(indMsgFormat2_C .measData.list.count) + fmt.Printf(" \n No of ue metrics = %d\n",no_of_ue_metrics) + + var sizeof_MeasurementDataItem_t *C.MeasurementDataItem_t + MeasurementDataItem_C:=*(**C.MeasurementDataItem_t)(unsafe.Pointer(uintptr(unsafe.Pointer(indMsgFormat2_C.measData.list.array)) + (uintptr)(0)*unsafe.Sizeof(sizeof_MeasurementDataItem_t))) + + no_of_ue:=int32(MeasurementDataItem_C.measRecord.list.count) + fmt.Printf(" \n No of ue= %d\n",no_of_ue) + for n := int32(0); n < no_of_ue; n++ { + var UeM UeMetricsEntry + v := reflect.ValueOf(UeM) + values := make(map[string]interface{}, v.NumField()) + //assert no_of_ue_metrics == v.NumField() they both should be equal. + if (int(no_of_ue_metrics) != v.NumField()){ + log.Printf("no_of_ue_metrics != v.NumField()") + return errors.New("no_of_ue_metrics != v.NumField()") + } + for i := int32(0); i < no_of_ue_metrics; i++ { + //fmt.Println(i) + if v.Field(int(i)).CanInterface() { + + var sizeof_MeasurementDataItem_t *C.MeasurementDataItem_t + MeasurementDataItem_C:=*(**C.MeasurementDataItem_t)(unsafe.Pointer(uintptr(unsafe.Pointer(indMsgFormat2_C.measData.list.array)) + (uintptr)(i)*unsafe.Sizeof(sizeof_MeasurementDataItem_t))) + var sizeof_MeasurementRecordItem_t *C.MeasurementRecordItem_t + MeasurementRecordItem_C:=*(**C.MeasurementRecordItem_t)(unsafe.Pointer(uintptr(unsafe.Pointer(MeasurementDataItem_C.measRecord.list.array)) + (uintptr)(n)*unsafe.Sizeof(sizeof_MeasurementRecordItem_t))) + + type_var:=int(MeasurementRecordItem_C.present) + if type_var==1{ + var cast_integer *C.long = (*C.long)(unsafe.Pointer(&MeasurementRecordItem_C.choice[0])) + values[v.Type().Field(int(i)).Name]=int32(*cast_integer) + }else if type_var==2{ + var cast_float *C.double = (*C.double)(unsafe.Pointer(&MeasurementRecordItem_C.choice[0])) + values[v.Type().Field(int(i)).Name]=float64(*cast_float) + + }else{ + fmt.Printf("Wrong Data Type") + } + + }else { + fmt.Printf("sorry you have a unexported field (lower case) value you are trying to sneak past. Can not allow it: %v\n", v.Type().Field(int(i)).Name) + } + + + } //end of inner for loop + fmt.Println(values) + fmt.Printf("Parsing UE Metric Done") + c.writeUeMetrics_db(&values)//push UEmetrics map entry to database. + + }// end of outer for loop + //parsing ue metrics done + }else{ + fmt.Printf(" Invalid Indication message format" ) + + } + + + return nil + + +} + +// func (c *Control) writeUeMetrics_db(ueMetrics UeMetricsEntry) { +// //Write metric to InfluxDB using API +// writeAPI := c.client.WriteAPIBlocking("my-org", "kpimon") +// ueMetricsJSON, err := json.Marshal(ueMetrics) +// if err != nil { +// xapp.Logger.Error("Marshal UE Metrics failed!") +// } +// p := influxdb2.NewPointWithMeasurement("ricIndication_UeMetrics"). +// AddField("UE Metrics", ueMetricsJSON). +// SetTime(time.Now()) +// writeAPI.WritePoint(context.Background(), p) +// xapp.Logger.Info("Wrote UE Metrics to InfluxDB") +// } + +// func (c *Control) writeCellMetrics_db(cellMetrics CellMetricsEntry) { +// writeAPI := c.client.WriteAPIBlocking("my-org", "kpimon") +// cellMetricsJSON, er := json.Marshal(cellMetrics) +// if er != nil { +// xapp.Logger.Error("Marshal Cell Metrics failed!") +// } +// p := influxdb2.NewPointWithMeasurement("ricIndication_cellMetrics"). +// AddField("Cell Metrics", cellMetricsJSON). +// SetTime(time.Now()) +// writeAPI.WritePoint(context.Background(), p) +// xapp.Logger.Info("Wrote Cell Metrics to InfluxDB") +// } + +/* +func (c *Control) queryUEReports() { + log.Printf("query UE") + resp, err := http.Get("http://10.244.0.68/sba/influx/query?db=RIC-Test-static&q=select+*+from+UEReports") + if err != nil { + log.Fatalln(err) + } + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + log.Fatalln(err) + } + var results ViaviMessages + er := json.Unmarshal(body, &results) + if er != nil { + panic(er) + } + // sb := string(body) + // log.Printf(sb) + c.writeUeMetrics_db(results.results.series) +} + +func (c *Control) queryCellReports() { + log.Printf("query cell") + resp, err := http.Get("http://10.244.0.68/sba/influx/query?db=RIC-Test-static&q=select+*+from+CellReports") + if err != nil { + log.Fatalln(err) + } + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + log.Fatalln(err) + } + var results ViaviMessages + er := json.Unmarshal(body, &results) + if er != nil { + panic(er) + } + c.writeCellMetrics_db(results.results.series) +} +*/ +func (c *Control) writeUeMetrics_db(ueMetrics *map[string]interface{}) { + writeAPI := c.client.WriteAPIBlocking("my-org", "kpimon") + ueMetricsJSON, err := json.Marshal(ueMetrics) + if err != nil { + xapp.Logger.Error("Marshal UE Metrics failed!") + } + p := influxdb2.NewPointWithMeasurement("UeMetrics"). + AddField("UE Metrics", ueMetricsJSON). + SetTime(time.Now()) + writeAPI.WritePoint(context.Background(), p) + xapp.Logger.Info("Wrote UE Metrics to InfluxDB") +} + +func (c *Control) writeCellMetrics_db(cellMetrics *map[string]interface{}) { + writeAPI := c.client.WriteAPIBlocking("my-org", "kpimon") + cellMetricsJSON, er := json.Marshal(cellMetrics) + if er != nil { + xapp.Logger.Error("Marshal Cell Metrics failed!") + } + p := influxdb2.NewPointWithMeasurement("cellMetrics"). + AddField("Cell Metrics", cellMetricsJSON). + SetTime(time.Now()) + + writeAPI.WritePoint(context.Background(), p) + xapp.Logger.Info("Wrote Cell Metrics to InfluxDB") +} + +func (c Control) xAppStartCB(d interface{}) { + xapp.Logger.Info("In callback KPI monitor xApp ...") + + // Get eNodeB list + nbList := c.getnbList() + + // Send subscription request to connected NodeB + for _, nb := range nbList { + if nb.ConnectionStatus == 1 { + xapp.Logger.Info("Before send subscription request to %v", nb.InventoryName) + c.sendSubscription(nb.InventoryName) + xapp.Logger.Info("After send subscription request to %v", nb.InventoryName) + } + + } + fmt.Println("len of Glob_cell= ",len(Glob_cell)) + fmt.Println("Glob_cell map = ", Glob_cell) + + go c.controlLoop() + //go c.queryUEReports() + //go c.queryCellReports() + xapp.Logger.Info("End callback KPI monitor xApp ...") +} + +func (c Control) Run() { + // Setup level + xapp.Logger.SetLevel(xapp.Config.GetInt("logger.level")) + // Register callback + xapp.Logger.Info("In Run() ...") + xapp.SetReadyCB(c.xAppStartCB, true) + // Start xApp + xapp.Run(c) +} diff --git a/control/e2ap.go b/control/e2ap.go index 867564c..7304cdf 100644 --- a/control/e2ap.go +++ b/control/e2ap.go @@ -30,6 +30,8 @@ import "C" import ( "errors" "unsafe" + "fmt" +// "log" ) type E2ap struct { @@ -251,3 +253,35 @@ func (c *E2ap) GetIndicationMessage(payload []byte) (decodedMsg *DecodedIndicati decodedMsg.CallProcessIDLength = int32(decodedCMsg.callProcessIDSize) return } + +func (c *E2ap) GetIndicationM() (decodedMsg *DecodedIndicationMessage, err error) { + decodedMsg = &DecodedIndicationMessage{} + decodedCMsg := C.e2ap_decode_ric_indication_m() + if decodedCMsg == nil { + return decodedMsg, errors.New("e2ap wrapper is unable to decode indication message due to wrong or invalid payload") + } + defer C.e2ap_free_decoded_ric_indication_message(decodedCMsg) + + decodedMsg.RequestID = int32(decodedCMsg.requestorID) + decodedMsg.RequestSequenceNumber = int32(decodedCMsg.requestSequenceNumber) + decodedMsg.FuncID = int32(decodedCMsg.ranfunctionID) + decodedMsg.ActionID = int32(decodedCMsg.actionID) + decodedMsg.IndSN = int32(decodedCMsg.indicationSN) + decodedMsg.IndType = int32(decodedCMsg.indicationType) + indhdr := unsafe.Pointer(decodedCMsg.indicationHeader) + decodedMsg.IndHeader = C.GoBytes(indhdr, C.int(decodedCMsg.indicationHeaderSize)) + fmt.Println(decodedMsg.IndHeader) + //log.Printf("decodedMsg.IndHeader= %x",decodedMsg.IndHeader) + decodedMsg.IndHeaderLength = int32(decodedCMsg.indicationHeaderSize) + indmsg := unsafe.Pointer(decodedCMsg.indicationMessage) + decodedMsg.IndMessage = C.GoBytes(indmsg, C.int(decodedCMsg.indicationMessageSize)) + fmt.Println(decodedMsg.IndMessage) + //log.Printf("decodedMsg.IndMessage= %x",decodedMsg.IndMessage) + + decodedMsg.IndMessageLength = int32(decodedCMsg.indicationMessageSize) + callproc := unsafe.Pointer(decodedCMsg.callProcessID) + decodedMsg.CallProcessID = C.GoBytes(callproc, C.int(decodedCMsg.callProcessIDSize)) + decodedMsg.CallProcessIDLength = int32(decodedCMsg.callProcessIDSize) + return +} + diff --git a/control/e2sm.go b/control/e2sm.go index d6a4157..70406e4 100644 --- a/control/e2sm.go +++ b/control/e2sm.go @@ -21,7 +21,7 @@ package control /* #include -#cgo LDFLAGS: -le2smwrapper +#cgo LDFLAGS: -le2smwrapper -lm #cgo CFLAGS: -I/usr/local/include/e2sm */ import "C" @@ -47,7 +47,7 @@ func (c *E2sm) SetEventTriggerDefinition(buffer []byte, eventTriggerCount int, R newBuffer = C.GoBytes(cptr, (C.int(size)+7)/8) return } - +/* func (c *E2sm) SetActionDefinition(buffer []byte, ricStyleType int64) (newBuffer []byte, err error) { cptr := unsafe.Pointer(&buffer[0]) size := C.e2sm_encode_ric_action_definition(cptr, C.size_t(len(buffer)), C.long(ricStyleType)) @@ -57,7 +57,6 @@ func (c *E2sm) SetActionDefinition(buffer []byte, ricStyleType int64) (newBuffer newBuffer = C.GoBytes(cptr, (C.int(size)+7)/8) return } - func (c *E2sm) GetIndicationHeader(buffer []byte) (indHdr *IndicationHeader, err error) { cptr := unsafe.Pointer(&buffer[0]) indHdr = &IndicationHeader{} @@ -789,6 +788,7 @@ func (c *E2sm) ParseNRCGI(nRCGI NRCGIType) (CellID string, err error) { return } +*/ func (c *E2sm) ParsePLMNIdentity(buffer []byte, size int) (PlmnID string, err error) { if size != 3 { diff --git a/control/types.go b/control/types.go index f8b4743..688a630 100644 --- a/control/types.go +++ b/control/types.go @@ -1,6 +1,58 @@ package control const MAX_SUBSCRIPTION_ATTEMPTS = 100 +type RanFunctions struct { + RanFunctionId int + RanFunctionDefinition string + RanFunctionRevision int + RanFunctionOid string +} + +type GlobalNbId struct { + PlmnId string + NbId string +} +type E2nodeComponentInterfaceTypeE1 struct { +} +type E2nodeComponentInterfaceTypeXn struct { +} +type E2nodeComponentInterfaceTypeF1 struct { +} + +type NodeConfigs struct { + E2nodeComponentInterfaceTypeE1 E2nodeComponentInterfaceTypeE1 `json:e2nodeComponentInterfaceTypeE1",omitempty"` + E2nodeComponentInterfaceTypeXn E2nodeComponentInterfaceTypeXn `json:e2nodeComponentInterfaceTypeXn",omitempty"` + E2nodeComponentInterfaceTypeF1 E2nodeComponentInterfaceTypeF1 `json:e2nodeComponentInterfaceTypeF1",omitempty"` + E2nodeComponentInterfaceType string + E2nodeComponentRequestPart string + E2nodeComponentResponsePart string `json:e2nodeComponentResponsePart",omitempty"` +} +type Gnb struct { + RanFunctions []RanFunctions + GnbType string + NodeConfigs []NodeConfigs +} + +/* + type E2nodeComponentInterfaceType struct { + E2nodeComponentInterfaceType string + } + + type E2nodeComponentRequestPart struct { + E2nodeComponentRequestPart string + } +*/ + +type E2mgrResponse struct { + RanName string + ConnectionStatus string + GlobalNbId GlobalNbId + NodeType string + Gnb Gnb + AssociatedE2tInstanceAddress string `json:associatedE2tInstanceAddress",omitempty"` + SetupFromNetwork bool + StatusUpdateTimeStamp string +} type DecodedIndicationMessage struct { RequestID int32 @@ -338,22 +390,109 @@ type Timestamp struct { TVsec int64 `json:"tv_sec"` TVnsec int64 `json:"tv_nsec"` } - +//VIAVI 1.4.0 E2TEST cell metrics +/* type CellMetricsEntry struct { - MeasTimestampPDCPBytes Timestamp `json:"MeasTimestampPDCPBytes"` - CellID string `json:"CellID"` - PDCPBytesDL int64 `json:"PDCPBytesDL"` - PDCPBytesUL int64 `json:"PDCPBytesUL"` - MeasTimestampPRB Timestamp `json:"MeasTimestampAvailPRB"` - AvailPRBDL int64 `json:"AvailPRBDL"` - AvailPRBUL int64 `json:"AvailPRBUL"` - MeasPeriodPDCP int64 `json:"MeasPeriodPDCPBytes"` - MeasPeriodPRB int64 `json:"MeasPeriodAvailPRB"` -} - +NR_CGI interface{} +NR_PCI interface{} +GNB_DU_ID interface{} +DRB_UEThpDl interface{} +DRB_UEThpUl interface{} +QosFlow_PdcpPduVolumeUl interface{} +QosFlow_PdcpPduVolumeDl interface{} +RRC_ConnMean interface{} +RRC_ConnMax interface{} +RRC_InactiveConnMean interface{} +RRC_InactiveConnMax interface{} +RRU_PrbAvailDl interface{} +RRU_PrbAvailUl interface{} +RRU_PrbUsedDl interface{} +RRU_PrbUsedUl interface{} +TB_TotNbrDlInitial_Qpsk interface{} +TB_TotNbrDlInitial_16Qam interface{} +TB_TotNbrDlInitial_64Qam interface{} +TB_TotNbrDlInitial_256Qam interface{} +TB_IntialErrNbrDl interface{} +TB_IntialErrNbrDl_Qpsk interface{} +TB_IntialErrNbrDl_16Qam interface{} +TB_IntialErrNbrDl_64Qam interface{} +TB_IntialErrNbrDl_256Qam interface{} +TB_TotNbrDl_X interface{} +TB_ErrToltalNbrDl_X interface{} +TB_ResidualErrNbrDl interface{} +TB_TotNbrUlInit interface{} +TB_TotNbrUlInit_Qpsk interface{} +TB_TotNbrUlInit_16Qam interface{} +TB_TotNbrUlInit_64Qam interface{} +TB_TotNbrUlInit_256Qam interface{} +TB_ErrNbrUlInitial interface{} +TB_ErrNbrUlInitial_Qpsk interface{} +TB_ErrNbrUlInitial_16Qam interface{} +TB_ErrNbrUlInitial_64Qam interface{} +TB_ErrNbrUlInitial_256Qam interface{} +TB_TotNbrUl_X interface{} +TB_ErrToltalNbrUl_X interface{} +TB_ResidualErrNbrUl interface{} +Viavi_Geo_x interface{} +Viavi_Geo_y interface{} +Viavi_Geo_z interface{} + +}*/ + +//VIAVI 1.4.0 simulation cell metrics +type CellMetricsEntry struct { + DRB_UEThpDl interface{} + DRB_UEThpUl interface{} + PEE_AvgPower interface{} + PEE_Energy interface{} + QosFlow_TotPdcpPduVolumeDl interface{} + QosFlow_TotPdcpPduVolumeUl interface{} + RRC_ConnMax interface{} + RRC_ConnMean interface{} + RRU_PrbAvailDl interface{} + RRU_PrbAvailUl interface{} + RRU_PrbTotDl interface{} + RRU_PrbTotUl interface{} + RRU_PrbUsedDl interface{} + RRU_PrbUsedUl interface{} + Viavi_Geo_x interface{} + Viavi_Geo_y interface{} + Viavi_Geo_z interface{} + Viavi_GnbDuId interface{} + Viavi_NrCgi interface{} + Viavi_NrPci interface{} + Viavi_Radio_antennaType interface{} + Viavi_Radio_azimuth interface{} + Viavi_Radio_power interface{} +} +//VIAVI 1.3 simulation cell metrics +/* +type CellMetricsEntry struct { + DRB_UEThpDl interface{} + DRB_UEThpUl interface{} + QosFlow_TotPdcpPduVolumeDl interface{} + QosFlow_TotPdcpPduVolumeUl interface{} + RRC_ConnMax interface{} + RRC_ConnMean interface{} + RRU_PrbAvailDl interface{} + RRU_PrbAvailUl interface{} + RRU_PrbTotDl interface{} + RRU_PrbTotUl interface{} + RRU_PrbUsedDl interface{} + RRU_PrbUsedUl interface{} + Viavi_Geo_x interface{} + Viavi_Geo_y interface{} + Viavi_Geo_z interface{} + Viavi_GnbDuId interface{} + Viavi_NrCgi interface{} + Viavi_NrPci interface{} + Viavi_Radio_power interface{} + Viavi_Radio_sectors interface{} +} +*/ type CellRFType struct { - RSRP int `json:"rsrp"` - RSRQ int `json:"rsrq"` + RSRP int `json:"rsrp"` + RSRQ int `json:"rsrq"` RSSINR int `json:"rssinr"` } @@ -361,20 +500,151 @@ type NeighborCellRFType struct { CellID string `json:"CID"` CellRF CellRFType `json:"CellRF"` } - +//VIAVI 1.4.0 E2TEST UE metrics +/* +type UeMetricsEntry struct { +Viavi_UE_id interface{} +Viavi_Cell_id interface{} +Viavi_Slice_id interface{} +DRB_UEThpDl interface{} +DRB_UEThpUl interface{} +RRU_PrbUsedDl interface{} +RRU_PrbUsedUl interface{} +RF_serving_id interface{} +RF_serving_RSRP interface{} +RF_serving_RSRQ interface{} +RF_serving_RSSINR interface{} +RF_nb1_id interface{} +RF_nb1_RSRP interface{} +RF_nb1_RSRQ interface{} +RF_nb1_RSSINR interface{} +RF_nb2_id interface{} +RF_nb2_RSRP interface{} +RF_nb2_RSRQ interface{} +RF_nb2_RSSINR interface{} +RF_nb3_id interface{} +RF_nb3_RSRP interface{} +RF_nb3_RSRQ interface{} +RF_nb3_RSSINR interface{} +RF_nb4_id interface{} +RF_nb4_RSRP interface{} +RF_nb4_RSRQ interface{} +RF_nb4_RSSINR interface{} +RF_nb5_id interface{} +RF_nb5_RSRP interface{} +RF_nb5_RSRQ interface{} +RF_nb5_RSSINR interface{} +RF_nb6_id interface{} +RF_nb6_RSRP interface{} +RF_nb6_RSRQ interface{} +RF_nb6_RSSINR interface{} +RF_nb7_id interface{} +RF_nb7_RSRP interface{} +RF_nb7_RSRQ interface{} +RF_nb7_RSSINR interface{} +TB_TotNbrUlInit interface{} +TB_IntialErrNbrDl interface{} +TB_ResidualErrNbrDl interface{} +TB_ResidualErrNbrUl interface{} +TB_TotNbrDlInitial_Qpsk interface{} +TB_TotNbrDlInitial_16Qam interface{} +TB_TotNbrDlInitial_64Qam interface{} +TB_TotNbrDlInitial_256Qam interface{} +TB_IntialErrNbrDl_Qpsk interface{} +TB_IntialErrNbrDl_16Qam interface{} +TB_IntialErrNbrDl_64Qam interface{} +TB_IntialErrNbrDl_256Qam interface{} +TB_TotNbrUlInit_Qpsk interface{} +TB_TotNbrUlInit_16Qam interface{} +TB_TotNbrUlInit_64Qam interface{} +TB_TotNbrUlInit_256Qam interface{} +TB_ErrNbrUlInitial interface{} +TB_ErrNbrUlInitial_Qpsk interface{} +TB_ErrNbrUlInitial_16Qam interface{} +TB_ErrNbrUlInitial_64Qam interface{} +TB_ErrNbrUlInitial_256Qam interface{} +Viavi_Geo_x interface{} +Viavi_Geo_y interface{} +Viavi_Geo_z interface{} + +}*/ + +//VIAVI 1.4.0 simulation UE metrics +type UeMetricsEntry struct { + DRB_UECqiDl interface{} + DRB_UECqiUl interface{} + DRB_UEThpDl interface{} + DRB_UEThpUl interface{} + QosFlow_TotPdcpPduVolumeDl interface{} + RRU_PrbUsedDl interface{} + RRU_PrbUsedUl interface{} + TB_TotNbrDl interface{} + TB_TotNbrUl interface{} + Viavi_Cell_id interface{} + Viavi_Geo_x interface{} + Viavi_Geo_y interface{} + Viavi_Geo_z interface{} + Viavi_QoS_5qi interface{} + Viavi_QoS_CellId interface{} + Viavi_QoS_DrbId interface{} + Viavi_QoS_Gfbr interface{} + Viavi_Slice_id interface{} + Viavi_UE_BeamId interface{} + Viavi_UE_FrameCnt interface{} + Viavi_UE_RsSinr interface{} + Viavi_UE_Rsrp interface{} + Viavi_UE_Rsrq interface{} + Viavi_UE_TcRnti interface{} + Viavi_UE_anomalies interface{} + Viavi_UE_id interface{} + Viavi_UE_servingDistance interface{} + Viavi_UE_speed interface{} + Viavi_UE_targetThroughputDl interface{} + Viavi_UE_targetThroughputUl interface{} +} +//VIAVI 1.3 simulation UE metrics +/* type UeMetricsEntry struct { - UeID int64 `json:"UEID"` - ServingCellID string `json:"ServingCellID"` - MeasTimestampPDCPBytes Timestamp `json:"MeasTimestampUEPDCPBytes"` - PDCPBytesDL int64 `json:"UEPDCPBytesDL"` - PDCPBytesUL int64 `json:"UEPDCPBytesUL"` - MeasTimestampPRB Timestamp `json:"MeasTimestampUEPRBUsage"` - PRBUsageDL int64 `json:"UEPRBUsageDL"` - PRBUsageUL int64 `json:"UEPRBUsageUL"` - MeasTimeRF Timestamp `json:"MeasTimestampRF"` - MeasPeriodRF int64 `json:"MeasPeriodRF"` - MeasPeriodPDCP int64 `json:"MeasPeriodUEPDCPBytes"` - MeasPeriodPRB int64 `json:"MeasPeriodUEPRBUsage"` - ServingCellRF CellRFType `json:"ServingCellRF"` - NeighborCellsRF []NeighborCellRFType `json:"NeighborCellRF"` + DRB_UECqiDl interface{} + DRB_UECqiUl interface{} + DRB_UEThpDl interface{} + DRB_UEThpUl interface{} + RRU_PrbUsedDl interface{} + RRU_PrbUsedUl interface{} + TB_TotNbrDl interface{} + TB_TotNbrUl interface{} + Viavi_Cell_id interface{} + Viavi_Geo_x interface{} + Viavi_Geo_y interface{} + Viavi_Geo_z interface{} + Viavi_Pdcp_kb interface{} + Viavi_Slice_gbps interface{} + Viavi_Slice_id interface{} + Viavi_UE_BeamId interface{} + Viavi_UE_FrameCnt interface{} + Viavi_UE_RsSinr interface{} + Viavi_UE_Rsrp interface{} + Viavi_UE_Rsrq interface{} + Viavi_UE_TcRnti interface{} + Viavi_UE_anomalies interface{} + Viavi_UE_id interface{} + Viavi_UE_servingDistance interface{} + Viavi_UE_speed interface{} + Viavi_UE_targetThroughputDl interface{} + Viavi_UE_targetThroughputUl interface{} +} +*/ +type ViaviMessages struct { + results ViaviMessageBody +} + +type ViaviMessageBody struct { + statement_id int + series ViaviMetrics +} + +type ViaviMetrics struct { + name string + columns string + values string } diff --git a/deploy/config.json b/deploy/config.json index 96514ba..f8addd6 100644 --- a/deploy/config.json +++ b/deploy/config.json @@ -1,13 +1,13 @@ { - "xapp_name": "xappkpimon", - "version": "1.0.0", + "xapp_name": "kpimon-go", + "version": "2.0.1", "containers": [ { - "name": "xappkpimon", + "name": "kpimon-go", "image": { - "registry": "example.com", - "name": "5gvietnam/kpimon", - "tag": "1.0.0" + "registry": "nexus3.o-ran-sc.org:10004", + "name": "o-ran-sc/ric-app-kpimon-go", + "tag": "3.9.9" } } ], @@ -15,13 +15,13 @@ "ports": [ { "name": "http", - "container": "xappkpimon", + "container": "kpimon-go", "port": 8080, "description": "http service" }, { "name": "rmr-data", - "container": "xappkpimon", + "container": "kpimon-go", "port": 4560, "rxMessages": ["RIC_SUB_RESP", "RIC_INDICATION"], "txMessages": ["RIC_SUB_REQ"], @@ -30,7 +30,7 @@ }, { "name": "rmr-route", - "container": "xappkpimon", + "container": "kpimon-go", "port": 4561, "description": "rmr route port for xappkpimon" } diff --git a/e2ap/wrapper.c b/e2ap/wrapper.c index c5edee0..7558e81 100644 --- a/e2ap/wrapper.c +++ b/e2ap/wrapper.c @@ -642,6 +642,125 @@ RICindicationMsg* e2ap_decode_ric_indication_message(void *buffer, size_t buf_si return NULL; } + +RICindicationMsg* e2ap_decode_ric_indication_m() +{ + + + FILE *fp3 = fopen("testfile1.txt", "r"); + if (fp3==NULL) + { + printf("\nFAILED TO OPEN FILE SANDY3.TXT"); + return NULL; + } + fseek(fp3, 0L, SEEK_END); + long numbytes = ftell(fp3); + fseek(fp3, 0L, SEEK_SET); + char* text = (char*)calloc(numbytes, sizeof(char)); + fread(text, sizeof(char), numbytes, fp3); + fclose(fp3); + printf(text); + E2AP_PDU_t *pdu=0; + asn_dec_rval_t lol =xer_decode(0,&asn_DEF_E2AP_PDU, (void **)&pdu,text,numbytes); + printf("\nxer decode result =%d",lol.code); + FILE *fp4 = fopen("testfile1.txt", "w"); + int r2=asn_fprint(fp4,&asn_DEF_E2AP_PDU,pdu); + fclose(fp4); + if (r2==-1) + fprintf(stderr, "failed asn_fprint r2\n"); + else + fprintf(stderr, "successfull asn_fprint r2\n"); + + + if ( pdu != NULL && pdu->present == E2AP_PDU_PR_initiatingMessage) + { + InitiatingMessage_t* initiatingMessage = pdu->choice.initiatingMessage; + if ( initiatingMessage->procedureCode == ProcedureCode_id_RICindication + && initiatingMessage->value.present == InitiatingMessage__value_PR_RICindication) + { + RICindication_t *indication = &(initiatingMessage->value.choice.RICindication); + RICindicationMsg *msg = (RICindicationMsg *)calloc(1, sizeof(RICindicationMsg)); + for (int i = 0; i < indication->protocolIEs.list.count; ++i ) + { + if (indication->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICrequestID) { + msg->requestorID = indication->protocolIEs.list.array[i]->value.choice.RICrequestID.ricRequestorID; + msg->requestSequenceNumber = indication->protocolIEs.list.array[i]->value.choice.RICrequestID.ricInstanceID; + } + else if (indication->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RANfunctionID) { + msg->ranfunctionID = indication->protocolIEs.list.array[i]->value.choice.RANfunctionID; + } + else if (indication->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICactionID) { + msg->actionID = indication->protocolIEs.list.array[i]->value.choice.RICactionID; + } + else if(indication->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICindicationSN) { + msg->indicationSN = indication->protocolIEs.list.array[i]->value.choice.RICindicationSN; + } + else if(indication->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICindicationType) { + msg->indicationType = indication->protocolIEs.list.array[i]->value.choice.RICindicationType; + } + else if(indication->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICindicationHeader) { + size_t headerSize = indication->protocolIEs.list.array[i]->value.choice.RICindicationHeader.size; + msg->indicationHeader = calloc(1, headerSize); + if (!msg->indicationHeader) { + fprintf(stderr, "alloc RICindicationHeader failed\n"); + e2ap_free_decoded_ric_indication_message(msg); + ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu); + return NULL; + } + + memcpy(msg->indicationHeader, indication->protocolIEs.list.array[i]->value.choice.RICindicationHeader.buf, headerSize); + msg->indicationHeaderSize = headerSize; + } + else if(indication->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICindicationMessage) { + size_t messsageSize = indication->protocolIEs.list.array[i]->value.choice.RICindicationMessage.size; + msg->indicationMessage = calloc(1, messsageSize); + if (!msg->indicationMessage) { + fprintf(stderr, "alloc RICindicationMessage failed\n"); + e2ap_free_decoded_ric_indication_message(msg); + ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu); + return NULL; + } + + memcpy(msg->indicationMessage, indication->protocolIEs.list.array[i]->value.choice.RICindicationMessage.buf, messsageSize); + msg->indicationMessageSize = messsageSize; + } + else if(indication->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICcallProcessID) { + size_t callProcessIDSize = indication->protocolIEs.list.array[i]->value.choice.RICcallProcessID.size; + msg->callProcessID = calloc(1, callProcessIDSize); + if (!msg->callProcessID) { + fprintf(stderr, "alloc RICcallProcessID failed\n"); + e2ap_free_decoded_ric_indication_message(msg); + ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu); + return NULL; + } + + memcpy(msg->callProcessID, indication->protocolIEs.list.array[i]->value.choice.RICcallProcessID.buf, callProcessIDSize); + msg->callProcessIDSize = callProcessIDSize; + } + } +/* + RICindicationHeader_t *hdr; + hdr=calloc(1, sizeof(RICindicationHeader_t)); + memcpy( hdr->buf,msg->indicationHeader,msg->indicationHeaderSize); + hdr->size=msg->indicationHeaderSize; + xer_fprint(stdout, &asn_DEF_RICindicationHeader,hdr); + RICindicationMessage_t *indm; + indm=calloc(1, sizeof(RICindicationMessage_t)); + memcpy(indm->buf, msg->indicationMessage,msg->indicationMessageSize); + indm->size=msg->indicationMessageSize; + xer_fprint(stdout, &asn_DEF_RICindicationMessage, indm); +*/ +// fprintf(stderr, "\nreturning msg\n"); + + return msg; + } + } + //fprintf(stderr, "\nreturning null"); + if(pdu != NULL) + ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu); + return NULL; +} + void e2ap_free_decoded_ric_indication_message(RICindicationMsg* msg) { if(msg == NULL) { return; diff --git a/e2ap/wrapper.h b/e2ap/wrapper.h index aeece6c..44d3e85 100644 --- a/e2ap/wrapper.h +++ b/e2ap/wrapper.h @@ -1,6 +1,7 @@ #ifndef _WRAPPER_H_ #define _WRAPPER_H_ - +#include +#include #include "RICsubscriptionRequest.h" #include "RICsubscriptionResponse.h" #include "RICsubscriptionDeleteRequest.h" @@ -97,6 +98,7 @@ long e2ap_get_ric_subscription_delete_failure_sequence_number(void *buffer, size /* RICindication */ RICindicationMsg* e2ap_decode_ric_indication_message(void *buffer, size_t buf_size); +RICindicationMsg* e2ap_decode_ric_indication_m(); void e2ap_free_decoded_ric_indication_message(RICindicationMsg* msg); #endif /* _WRAPPER_H_ */ diff --git a/e2sm/headers/AMF-UE-NGAP-ID.h b/e2sm/headers/AMF-UE-NGAP-ID.h new file mode 100644 index 0000000..f7c3430 --- /dev/null +++ b/e2sm/headers/AMF-UE-NGAP-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _AMF_UE_NGAP_ID_H_ +#define _AMF_UE_NGAP_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "INTEGER.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* AMF-UE-NGAP-ID */ +typedef INTEGER_t AMF_UE_NGAP_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_AMF_UE_NGAP_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_AMF_UE_NGAP_ID; +asn_struct_free_f AMF_UE_NGAP_ID_free; +asn_struct_print_f AMF_UE_NGAP_ID_print; +asn_constr_check_f AMF_UE_NGAP_ID_constraint; +ber_type_decoder_f AMF_UE_NGAP_ID_decode_ber; +der_type_encoder_f AMF_UE_NGAP_ID_encode_der; +xer_type_decoder_f AMF_UE_NGAP_ID_decode_xer; +xer_type_encoder_f AMF_UE_NGAP_ID_encode_xer; +per_type_decoder_f AMF_UE_NGAP_ID_decode_uper; +per_type_encoder_f AMF_UE_NGAP_ID_encode_uper; +per_type_decoder_f AMF_UE_NGAP_ID_decode_aper; +per_type_encoder_f AMF_UE_NGAP_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _AMF_UE_NGAP_ID_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/AMFPointer.h b/e2sm/headers/AMFPointer.h new file mode 100644 index 0000000..18c18e2 --- /dev/null +++ b/e2sm/headers/AMFPointer.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _AMFPointer_H_ +#define _AMFPointer_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* AMFPointer */ +typedef BIT_STRING_t AMFPointer_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_AMFPointer_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_AMFPointer; +asn_struct_free_f AMFPointer_free; +asn_struct_print_f AMFPointer_print; +asn_constr_check_f AMFPointer_constraint; +ber_type_decoder_f AMFPointer_decode_ber; +der_type_encoder_f AMFPointer_encode_der; +xer_type_decoder_f AMFPointer_decode_xer; +xer_type_encoder_f AMFPointer_encode_xer; +per_type_decoder_f AMFPointer_decode_uper; +per_type_encoder_f AMFPointer_encode_uper; +per_type_decoder_f AMFPointer_decode_aper; +per_type_encoder_f AMFPointer_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _AMFPointer_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/AMFRegionID.h b/e2sm/headers/AMFRegionID.h new file mode 100644 index 0000000..eb94a4b --- /dev/null +++ b/e2sm/headers/AMFRegionID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _AMFRegionID_H_ +#define _AMFRegionID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* AMFRegionID */ +typedef BIT_STRING_t AMFRegionID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_AMFRegionID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_AMFRegionID; +asn_struct_free_f AMFRegionID_free; +asn_struct_print_f AMFRegionID_print; +asn_constr_check_f AMFRegionID_constraint; +ber_type_decoder_f AMFRegionID_decode_ber; +der_type_encoder_f AMFRegionID_encode_der; +xer_type_decoder_f AMFRegionID_decode_xer; +xer_type_encoder_f AMFRegionID_encode_xer; +per_type_decoder_f AMFRegionID_decode_uper; +per_type_encoder_f AMFRegionID_encode_uper; +per_type_decoder_f AMFRegionID_decode_aper; +per_type_encoder_f AMFRegionID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _AMFRegionID_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/AMFSetID.h b/e2sm/headers/AMFSetID.h new file mode 100644 index 0000000..6d8c6aa --- /dev/null +++ b/e2sm/headers/AMFSetID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _AMFSetID_H_ +#define _AMFSetID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* AMFSetID */ +typedef BIT_STRING_t AMFSetID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_AMFSetID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_AMFSetID; +asn_struct_free_f AMFSetID_free; +asn_struct_print_f AMFSetID_print; +asn_constr_check_f AMFSetID_constraint; +ber_type_decoder_f AMFSetID_decode_ber; +der_type_encoder_f AMFSetID_encode_der; +xer_type_decoder_f AMFSetID_decode_xer; +xer_type_encoder_f AMFSetID_encode_xer; +per_type_decoder_f AMFSetID_decode_uper; +per_type_encoder_f AMFSetID_encode_uper; +per_type_decoder_f AMFSetID_decode_aper; +per_type_encoder_f AMFSetID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _AMFSetID_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/ANY.h b/e2sm/headers/ANY.h new file mode 100644 index 0000000..b30381f --- /dev/null +++ b/e2sm/headers/ANY.h @@ -0,0 +1,65 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_TYPE_ANY_H +#define ASN_TYPE_ANY_H + +#include /* Implemented via OCTET STRING type */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ANY { + uint8_t *buf; /* BER-encoded ANY contents */ + int size; /* Size of the above buffer */ + + asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */ +} ANY_t; + +extern asn_TYPE_descriptor_t asn_DEF_ANY; +extern asn_TYPE_operation_t asn_OP_ANY; +extern asn_OCTET_STRING_specifics_t asn_SPC_ANY_specs; + +asn_struct_free_f ANY_free; +asn_struct_print_f ANY_print; +ber_type_decoder_f ANY_decode_ber; +der_type_encoder_f ANY_encode_der; +xer_type_encoder_f ANY_encode_xer; +per_type_decoder_f ANY_decode_uper; +per_type_encoder_f ANY_encode_uper; +per_type_decoder_f ANY_decode_aper; +per_type_encoder_f ANY_encode_aper; + +#define ANY_free OCTET_STRING_free +#define ANY_print OCTET_STRING_print +#define ANY_compare OCTET_STRING_compare +#define ANY_constraint asn_generic_no_constraint +#define ANY_decode_ber OCTET_STRING_decode_ber +#define ANY_encode_der OCTET_STRING_encode_der +#define ANY_decode_xer OCTET_STRING_decode_xer_hex + +/****************************** + * Handy conversion routines. * + ******************************/ + +/* Convert another ASN.1 type into the ANY. This implies DER encoding. */ +int ANY_fromType(ANY_t *, asn_TYPE_descriptor_t *td, void *struct_ptr); +int ANY_fromType_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr); +ANY_t *ANY_new_fromType(asn_TYPE_descriptor_t *td, void *struct_ptr); +ANY_t *ANY_new_fromType_aper(asn_TYPE_descriptor_t *td, void *sptr); + +/* Convert the contents of the ANY type into the specified type. */ +int ANY_to_type(ANY_t *, asn_TYPE_descriptor_t *td, void **struct_ptr); +int ANY_to_type_aper(ANY_t *, asn_TYPE_descriptor_t *td, void **struct_ptr); + +#define ANY_fromBuf(s, buf, size) OCTET_STRING_fromBuf((s), (buf), (size)) +#define ANY_new_fromBuf(buf, size) OCTET_STRING_new_fromBuf( \ + &asn_DEF_ANY, (buf), (size)) + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_TYPE_ANY_H */ diff --git a/e2sm/headers/BMPString.h b/e2sm/headers/BMPString.h new file mode 100644 index 0000000..af14588 --- /dev/null +++ b/e2sm/headers/BMPString.h @@ -0,0 +1,39 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BMPString_H_ +#define _BMPString_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef OCTET_STRING_t BMPString_t; /* Implemented via OCTET STRING */ + +extern asn_TYPE_descriptor_t asn_DEF_BMPString; +extern asn_TYPE_operation_t asn_OP_BMPString; +extern asn_OCTET_STRING_specifics_t asn_SPC_BMPString_specs; + +asn_struct_print_f BMPString_print; /* Human-readable output */ +asn_constr_check_f BMPString_constraint; +xer_type_decoder_f BMPString_decode_xer; +xer_type_encoder_f BMPString_encode_xer; + +#define BMPString_free OCTET_STRING_free +#define BMPString_print BMPString_print +#define BMPString_compare OCTET_STRING_compare +#define BMPString_decode_ber OCTET_STRING_decode_ber +#define BMPString_encode_der OCTET_STRING_encode_der +#define BMPString_decode_uper OCTET_STRING_decode_uper +#define BMPString_encode_uper OCTET_STRING_encode_uper +#define BMPString_decode_aper OCTET_STRING_decode_aper +#define BMPString_encode_aper OCTET_STRING_encode_aper + +#ifdef __cplusplus +} +#endif + +#endif /* _BMPString_H_ */ diff --git a/e2sm/headers/BOOLEAN.h b/e2sm/headers/BOOLEAN.h new file mode 100644 index 0000000..620acf7 --- /dev/null +++ b/e2sm/headers/BOOLEAN.h @@ -0,0 +1,45 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BOOLEAN_H_ +#define _BOOLEAN_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * The underlying integer may contain various values, but everything + * non-zero is capped to 0xff by the DER encoder. The BER decoder may + * yield non-zero values different from 1, beware. + */ +typedef int BOOLEAN_t; + +extern asn_TYPE_descriptor_t asn_DEF_BOOLEAN; +extern asn_TYPE_operation_t asn_OP_BOOLEAN; + +asn_struct_free_f BOOLEAN_free; +asn_struct_print_f BOOLEAN_print; +asn_struct_compare_f BOOLEAN_compare; +ber_type_decoder_f BOOLEAN_decode_ber; +der_type_encoder_f BOOLEAN_encode_der; +oer_type_decoder_f BOOLEAN_decode_oer; +oer_type_encoder_f BOOLEAN_encode_oer; +per_type_decoder_f BOOLEAN_decode_uper; +per_type_encoder_f BOOLEAN_encode_uper; +per_type_decoder_f BOOLEAN_decode_aper; +per_type_encoder_f BOOLEAN_encode_aper; +xer_type_decoder_f BOOLEAN_decode_xer; +xer_type_encoder_f BOOLEAN_encode_xer; +asn_random_fill_f BOOLEAN_random_fill; + +#define BOOLEAN_constraint asn_generic_no_constraint + +#ifdef __cplusplus +} +#endif + +#endif /* _BOOLEAN_H_ */ diff --git a/e2sm/headers/CGI.h b/e2sm/headers/CGI.h new file mode 100644 index 0000000..521428d --- /dev/null +++ b/e2sm/headers/CGI.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _CGI_H_ +#define _CGI_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CGI_PR { + CGI_PR_NOTHING, /* No components present */ + CGI_PR_nR_CGI, + CGI_PR_eUTRA_CGI + /* Extensions may appear below */ + +} CGI_PR; + +/* Forward declarations */ +struct NR_CGI; +struct EUTRA_CGI; + +/* CGI */ +typedef struct CGI { + CGI_PR present; + union CGI_u { + struct NR_CGI *nR_CGI; + struct EUTRA_CGI *eUTRA_CGI; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CGI_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CGI; +extern asn_CHOICE_specifics_t asn_SPC_CGI_specs_1; +extern asn_TYPE_member_t asn_MBR_CGI_1[2]; +extern asn_per_constraints_t asn_PER_type_CGI_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _CGI_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/CoreCPID.h b/e2sm/headers/CoreCPID.h new file mode 100644 index 0000000..64ff363 --- /dev/null +++ b/e2sm/headers/CoreCPID.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _CoreCPID_H_ +#define _CoreCPID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CoreCPID_PR { + CoreCPID_PR_NOTHING, /* No components present */ + CoreCPID_PR_fiveGC, + CoreCPID_PR_ePC + /* Extensions may appear below */ + +} CoreCPID_PR; + +/* Forward declarations */ +struct GUAMI; +struct GUMMEI; + +/* CoreCPID */ +typedef struct CoreCPID { + CoreCPID_PR present; + union CoreCPID_u { + struct GUAMI *fiveGC; + struct GUMMEI *ePC; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CoreCPID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CoreCPID; + +#ifdef __cplusplus +} +#endif + +#endif /* _CoreCPID_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/E-UTRA-ARFCN.h b/e2sm/headers/E-UTRA-ARFCN.h new file mode 100644 index 0000000..2f281e9 --- /dev/null +++ b/e2sm/headers/E-UTRA-ARFCN.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _E_UTRA_ARFCN_H_ +#define _E_UTRA_ARFCN_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* E-UTRA-ARFCN */ +typedef long E_UTRA_ARFCN_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_E_UTRA_ARFCN_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_E_UTRA_ARFCN; +asn_struct_free_f E_UTRA_ARFCN_free; +asn_struct_print_f E_UTRA_ARFCN_print; +asn_constr_check_f E_UTRA_ARFCN_constraint; +ber_type_decoder_f E_UTRA_ARFCN_decode_ber; +der_type_encoder_f E_UTRA_ARFCN_encode_der; +xer_type_decoder_f E_UTRA_ARFCN_decode_xer; +xer_type_encoder_f E_UTRA_ARFCN_encode_xer; +per_type_decoder_f E_UTRA_ARFCN_decode_uper; +per_type_encoder_f E_UTRA_ARFCN_encode_uper; +per_type_decoder_f E_UTRA_ARFCN_decode_aper; +per_type_encoder_f E_UTRA_ARFCN_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_UTRA_ARFCN_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/E-UTRA-PCI.h b/e2sm/headers/E-UTRA-PCI.h new file mode 100644 index 0000000..5d09203 --- /dev/null +++ b/e2sm/headers/E-UTRA-PCI.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _E_UTRA_PCI_H_ +#define _E_UTRA_PCI_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* E-UTRA-PCI */ +typedef long E_UTRA_PCI_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_E_UTRA_PCI_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_E_UTRA_PCI; +asn_struct_free_f E_UTRA_PCI_free; +asn_struct_print_f E_UTRA_PCI_print; +asn_constr_check_f E_UTRA_PCI_constraint; +ber_type_decoder_f E_UTRA_PCI_decode_ber; +der_type_encoder_f E_UTRA_PCI_encode_der; +xer_type_decoder_f E_UTRA_PCI_decode_xer; +xer_type_encoder_f E_UTRA_PCI_encode_xer; +per_type_decoder_f E_UTRA_PCI_decode_uper; +per_type_encoder_f E_UTRA_PCI_encode_uper; +per_type_decoder_f E_UTRA_PCI_decode_aper; +per_type_encoder_f E_UTRA_PCI_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_UTRA_PCI_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/E-UTRA-TAC.h b/e2sm/headers/E-UTRA-TAC.h new file mode 100644 index 0000000..d337742 --- /dev/null +++ b/e2sm/headers/E-UTRA-TAC.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _E_UTRA_TAC_H_ +#define _E_UTRA_TAC_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* E-UTRA-TAC */ +typedef OCTET_STRING_t E_UTRA_TAC_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E_UTRA_TAC; +asn_struct_free_f E_UTRA_TAC_free; +asn_struct_print_f E_UTRA_TAC_print; +asn_constr_check_f E_UTRA_TAC_constraint; +ber_type_decoder_f E_UTRA_TAC_decode_ber; +der_type_encoder_f E_UTRA_TAC_encode_der; +xer_type_decoder_f E_UTRA_TAC_decode_xer; +xer_type_encoder_f E_UTRA_TAC_encode_xer; +per_type_decoder_f E_UTRA_TAC_decode_uper; +per_type_encoder_f E_UTRA_TAC_encode_uper; +per_type_decoder_f E_UTRA_TAC_decode_aper; +per_type_encoder_f E_UTRA_TAC_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _E_UTRA_TAC_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/E2SM-KPM-ActionDefinition-Format1.h b/e2sm/headers/E2SM-KPM-ActionDefinition-Format1.h new file mode 100644 index 0000000..c4b7690 --- /dev/null +++ b/e2sm/headers/E2SM-KPM-ActionDefinition-Format1.h @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _E2SM_KPM_ActionDefinition_Format1_H_ +#define _E2SM_KPM_ActionDefinition_Format1_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "MeasurementInfoList.h" +#include "GranularityPeriod.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CGI; + +/* E2SM-KPM-ActionDefinition-Format1 */ +typedef struct E2SM_KPM_ActionDefinition_Format1 { + MeasurementInfoList_t measInfoList; + GranularityPeriod_t granulPeriod; + struct CGI *cellGlobalID; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_ActionDefinition_Format1_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_ActionDefinition_Format1; +extern asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_ActionDefinition_Format1_specs_1; +extern asn_TYPE_member_t asn_MBR_E2SM_KPM_ActionDefinition_Format1_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_KPM_ActionDefinition_Format1_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/E2SM-KPM-ActionDefinition-Format2.h b/e2sm/headers/E2SM-KPM-ActionDefinition-Format2.h new file mode 100644 index 0000000..e145db5 --- /dev/null +++ b/e2sm/headers/E2SM-KPM-ActionDefinition-Format2.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _E2SM_KPM_ActionDefinition_Format2_H_ +#define _E2SM_KPM_ActionDefinition_Format2_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "UEID.h" +#include "E2SM-KPM-ActionDefinition-Format1.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2SM-KPM-ActionDefinition-Format2 */ +typedef struct E2SM_KPM_ActionDefinition_Format2 { + UEID_t ueID; + E2SM_KPM_ActionDefinition_Format1_t subscriptInfo; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_ActionDefinition_Format2_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_ActionDefinition_Format2; +extern asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_ActionDefinition_Format2_specs_1; +extern asn_TYPE_member_t asn_MBR_E2SM_KPM_ActionDefinition_Format2_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_KPM_ActionDefinition_Format2_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/E2SM-KPM-ActionDefinition-Format3.h b/e2sm/headers/E2SM-KPM-ActionDefinition-Format3.h new file mode 100644 index 0000000..13b928c --- /dev/null +++ b/e2sm/headers/E2SM-KPM-ActionDefinition-Format3.h @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _E2SM_KPM_ActionDefinition_Format3_H_ +#define _E2SM_KPM_ActionDefinition_Format3_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "MeasurementCondList.h" +#include "GranularityPeriod.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CGI; + +/* E2SM-KPM-ActionDefinition-Format3 */ +typedef struct E2SM_KPM_ActionDefinition_Format3 { + MeasurementCondList_t measCondList; + GranularityPeriod_t granulPeriod; + struct CGI *cellGlobalID; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_ActionDefinition_Format3_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_ActionDefinition_Format3; +extern asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_ActionDefinition_Format3_specs_1; +extern asn_TYPE_member_t asn_MBR_E2SM_KPM_ActionDefinition_Format3_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_KPM_ActionDefinition_Format3_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/E2SM-KPM-ActionDefinition.h b/e2sm/headers/E2SM-KPM-ActionDefinition.h index 096c516..0aaa3a8 100644 --- a/e2sm/headers/E2SM-KPM-ActionDefinition.h +++ b/e2sm/headers/E2SM-KPM-ActionDefinition.h @@ -1,27 +1,58 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #ifndef _E2SM_KPM_ActionDefinition_H_ #define _E2SM_KPM_ActionDefinition_H_ -#include +#include "asn_application.h" /* Including external dependencies */ #include "RIC-Style-Type.h" -#include +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" #ifdef __cplusplus extern "C" { #endif +/* Dependencies */ +typedef enum E2SM_KPM_ActionDefinition__actionDefinition_formats_PR { + E2SM_KPM_ActionDefinition__actionDefinition_formats_PR_NOTHING= 0 , /* No components present */ + E2SM_KPM_ActionDefinition__actionDefinition_formats_PR_actionDefinition_Format1, + E2SM_KPM_ActionDefinition__actionDefinition_formats_PR_actionDefinition_Format2, + E2SM_KPM_ActionDefinition__actionDefinition_formats_PR_actionDefinition_Format3 + /* Extensions may appear below */ + +} E2SM_KPM_ActionDefinition__actionDefinition_formats_PR; + +/* Forward declarations */ +struct E2SM_KPM_ActionDefinition_Format1; +struct E2SM_KPM_ActionDefinition_Format2; +struct E2SM_KPM_ActionDefinition_Format3; + /* E2SM-KPM-ActionDefinition */ typedef struct E2SM_KPM_ActionDefinition { RIC_Style_Type_t ric_Style_Type; + struct E2SM_KPM_ActionDefinition__actionDefinition_formats { + E2SM_KPM_ActionDefinition__actionDefinition_formats_PR present; + union E2SM_KPM_ActionDefinition__actionDefinition_formats_u { + struct E2SM_KPM_ActionDefinition_Format1 *actionDefinition_Format1; + struct E2SM_KPM_ActionDefinition_Format2 *actionDefinition_Format2; + struct E2SM_KPM_ActionDefinition_Format3 *actionDefinition_Format3; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } actionDefinition_formats; /* * This type is extensible, * possible extensions are below. @@ -39,4 +70,4 @@ extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_ActionDefinition; #endif #endif /* _E2SM_KPM_ActionDefinition_H_ */ -#include +#include "asn_internal.h" diff --git a/e2sm/headers/E2SM-KPM-EventTriggerDefinition-Format1.h b/e2sm/headers/E2SM-KPM-EventTriggerDefinition-Format1.h index d8d5ebd..b778335 100644 --- a/e2sm/headers/E2SM-KPM-EventTriggerDefinition-Format1.h +++ b/e2sm/headers/E2SM-KPM-EventTriggerDefinition-Format1.h @@ -1,36 +1,27 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #ifndef _E2SM_KPM_EventTriggerDefinition_Format1_H_ #define _E2SM_KPM_EventTriggerDefinition_Format1_H_ -#include +#include "asn_application.h" /* Including external dependencies */ -#include -#include -#include +#include "NativeInteger.h" +#include "constr_SEQUENCE.h" #ifdef __cplusplus extern "C" { #endif -/* Forward declarations */ -struct Trigger_ConditionIE_Item; - /* E2SM-KPM-EventTriggerDefinition-Format1 */ typedef struct E2SM_KPM_EventTriggerDefinition_Format1 { - struct E2SM_KPM_EventTriggerDefinition_Format1__policyTest_List { - A_SEQUENCE_OF(struct Trigger_ConditionIE_Item) list; - - /* Context for parsing across buffer boundaries */ - asn_struct_ctx_t _asn_ctx; - } *policyTest_List; + unsigned long reportingPeriod; /* * This type is extensible, * possible extensions are below. @@ -41,6 +32,7 @@ typedef struct E2SM_KPM_EventTriggerDefinition_Format1 { } E2SM_KPM_EventTriggerDefinition_Format1_t; /* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_reportingPeriod_2; // (Use -fall-defs-global to expose) */ extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1; extern asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_EventTriggerDefinition_Format1_specs_1; extern asn_TYPE_member_t asn_MBR_E2SM_KPM_EventTriggerDefinition_Format1_1[1]; @@ -50,4 +42,4 @@ extern asn_TYPE_member_t asn_MBR_E2SM_KPM_EventTriggerDefinition_Format1_1[1]; #endif #endif /* _E2SM_KPM_EventTriggerDefinition_Format1_H_ */ -#include +#include "asn_internal.h" diff --git a/e2sm/headers/E2SM-KPM-EventTriggerDefinition.h b/e2sm/headers/E2SM-KPM-EventTriggerDefinition.h index 6570a1c..0ed6d68 100644 --- a/e2sm/headers/E2SM-KPM-EventTriggerDefinition.h +++ b/e2sm/headers/E2SM-KPM-EventTriggerDefinition.h @@ -1,44 +1,54 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #ifndef _E2SM_KPM_EventTriggerDefinition_H_ #define _E2SM_KPM_EventTriggerDefinition_H_ -#include +#include "asn_application.h" /* Including external dependencies */ -#include +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" #ifdef __cplusplus extern "C" { #endif /* Dependencies */ -typedef enum E2SM_KPM_EventTriggerDefinition_PR { - E2SM_KPM_EventTriggerDefinition_PR_NOTHING, /* No components present */ - E2SM_KPM_EventTriggerDefinition_PR_eventDefinition_Format1 +typedef enum E2SM_KPM_EventTriggerDefinition__eventDefinition_formats_PR { + E2SM_KPM_EventTriggerDefinition__eventDefinition_formats_PR_NOTHING, /* No components present */ + E2SM_KPM_EventTriggerDefinition__eventDefinition_formats_PR_eventDefinition_Format1 /* Extensions may appear below */ -} E2SM_KPM_EventTriggerDefinition_PR; +} E2SM_KPM_EventTriggerDefinition__eventDefinition_formats_PR; /* Forward declarations */ struct E2SM_KPM_EventTriggerDefinition_Format1; /* E2SM-KPM-EventTriggerDefinition */ typedef struct E2SM_KPM_EventTriggerDefinition { - E2SM_KPM_EventTriggerDefinition_PR present; - union E2SM_KPM_EventTriggerDefinition_u { - struct E2SM_KPM_EventTriggerDefinition_Format1 *eventDefinition_Format1; - /* - * This type is extensible, - * possible extensions are below. - */ - } choice; + struct E2SM_KPM_EventTriggerDefinition__eventDefinition_formats { + E2SM_KPM_EventTriggerDefinition__eventDefinition_formats_PR present; + union E2SM_KPM_EventTriggerDefinition__eventDefinition_formats_u { + struct E2SM_KPM_EventTriggerDefinition_Format1 *eventDefinition_Format1; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } eventDefinition_formats; + /* + * This type is extensible, + * possible extensions are below. + */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; @@ -52,4 +62,4 @@ extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_EventTriggerDefinition; #endif #endif /* _E2SM_KPM_EventTriggerDefinition_H_ */ -#include +#include "asn_internal.h" diff --git a/e2sm/headers/E2SM-KPM-IndicationHeader-Format1.h b/e2sm/headers/E2SM-KPM-IndicationHeader-Format1.h index 56b0646..f2de5ef 100644 --- a/e2sm/headers/E2SM-KPM-IndicationHeader-Format1.h +++ b/e2sm/headers/E2SM-KPM-IndicationHeader-Format1.h @@ -1,46 +1,32 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #ifndef _E2SM_KPM_IndicationHeader_Format1_H_ #define _E2SM_KPM_IndicationHeader_Format1_H_ -#include +#include "asn_application.h" /* Including external dependencies */ -#include "PLMN-Identity.h" -#include -#include "UE-Report-Type.h" -#include "GNB-DU-ID.h" -#include +#include "TimeStamp.h" +#include "PrintableString.h" +#include "constr_SEQUENCE.h" #ifdef __cplusplus extern "C" { #endif -/* Forward declarations */ -struct GlobalKPMnode_ID; -struct NRCGI; -struct SNSSAI; -struct GNB_Name; -struct GlobalgNB_ID; - /* E2SM-KPM-IndicationHeader-Format1 */ typedef struct E2SM_KPM_IndicationHeader_Format1 { - struct GlobalKPMnode_ID *id_GlobalKPMnode_ID; /* OPTIONAL */ - struct NRCGI *nRCGI; /* OPTIONAL */ - PLMN_Identity_t *pLMN_Identity; /* OPTIONAL */ - struct SNSSAI *sliceID; /* OPTIONAL */ - long *fiveQI; /* OPTIONAL */ - long *qci; /* OPTIONAL */ - UE_Report_Type_t *message_Type; /* OPTIONAL */ - GNB_DU_ID_t *gNB_DU_ID; /* OPTIONAL */ - struct GNB_Name *gNB_Name; /* OPTIONAL */ - struct GlobalgNB_ID *global_GNB_ID; /* OPTIONAL */ + TimeStamp_t colletStartTime; + PrintableString_t *fileFormatversion; /* OPTIONAL */ + PrintableString_t *senderName; /* OPTIONAL */ + PrintableString_t *senderType; /* OPTIONAL */ + PrintableString_t *vendorName; /* OPTIONAL */ /* * This type is extensible, * possible extensions are below. @@ -53,11 +39,11 @@ typedef struct E2SM_KPM_IndicationHeader_Format1 { /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationHeader_Format1; extern asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_IndicationHeader_Format1_specs_1; -extern asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationHeader_Format1_1[10]; +extern asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationHeader_Format1_1[5]; #ifdef __cplusplus } #endif #endif /* _E2SM_KPM_IndicationHeader_Format1_H_ */ -#include +#include "asn_internal.h" diff --git a/e2sm/headers/E2SM-KPM-IndicationHeader.h b/e2sm/headers/E2SM-KPM-IndicationHeader.h index 7dd332b..80e5094 100644 --- a/e2sm/headers/E2SM-KPM-IndicationHeader.h +++ b/e2sm/headers/E2SM-KPM-IndicationHeader.h @@ -1,44 +1,54 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #ifndef _E2SM_KPM_IndicationHeader_H_ #define _E2SM_KPM_IndicationHeader_H_ -#include +#include "asn_application.h" /* Including external dependencies */ -#include +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" #ifdef __cplusplus extern "C" { #endif /* Dependencies */ -typedef enum E2SM_KPM_IndicationHeader_PR { - E2SM_KPM_IndicationHeader_PR_NOTHING, /* No components present */ - E2SM_KPM_IndicationHeader_PR_indicationHeader_Format1 +typedef enum E2SM_KPM_IndicationHeader__indicationHeader_formats_PR { + E2SM_KPM_IndicationHeader__indicationHeader_formats_PR_NOTHING, /* No components present */ + E2SM_KPM_IndicationHeader__indicationHeader_formats_PR_indicationHeader_Format1 /* Extensions may appear below */ -} E2SM_KPM_IndicationHeader_PR; +} E2SM_KPM_IndicationHeader__indicationHeader_formats_PR; /* Forward declarations */ struct E2SM_KPM_IndicationHeader_Format1; /* E2SM-KPM-IndicationHeader */ typedef struct E2SM_KPM_IndicationHeader { - E2SM_KPM_IndicationHeader_PR present; - union E2SM_KPM_IndicationHeader_u { - struct E2SM_KPM_IndicationHeader_Format1 *indicationHeader_Format1; - /* - * This type is extensible, - * possible extensions are below. - */ - } choice; + struct E2SM_KPM_IndicationHeader__indicationHeader_formats { + E2SM_KPM_IndicationHeader__indicationHeader_formats_PR present; + union E2SM_KPM_IndicationHeader__indicationHeader_formats_u { + struct E2SM_KPM_IndicationHeader_Format1 *indicationHeader_Format1; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } indicationHeader_formats; + /* + * This type is extensible, + * possible extensions are below. + */ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; @@ -52,4 +62,4 @@ extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationHeader; #endif #endif /* _E2SM_KPM_IndicationHeader_H_ */ -#include +#include "asn_internal.h" diff --git a/e2sm/headers/E2SM-KPM-IndicationMessage-Format1.h b/e2sm/headers/E2SM-KPM-IndicationMessage-Format1.h index 0920939..e909d8c 100644 --- a/e2sm/headers/E2SM-KPM-IndicationMessage-Format1.h +++ b/e2sm/headers/E2SM-KPM-IndicationMessage-Format1.h @@ -1,36 +1,33 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #ifndef _E2SM_KPM_IndicationMessage_Format1_H_ #define _E2SM_KPM_IndicationMessage_Format1_H_ -#include +#include "asn_application.h" /* Including external dependencies */ -#include -#include -#include +#include "MeasurementData.h" +#include "GranularityPeriod.h" +#include "constr_SEQUENCE.h" #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ -struct PM_Containers_List; +struct MeasurementInfoList; /* E2SM-KPM-IndicationMessage-Format1 */ typedef struct E2SM_KPM_IndicationMessage_Format1 { - struct E2SM_KPM_IndicationMessage_Format1__pm_Containers { - A_SEQUENCE_OF(struct PM_Containers_List) list; - - /* Context for parsing across buffer boundaries */ - asn_struct_ctx_t _asn_ctx; - } pm_Containers; + MeasurementData_t measData; + struct MeasurementInfoList *measInfoList; /* OPTIONAL */ + GranularityPeriod_t *granulPeriod; /* OPTIONAL */ /* * This type is extensible, * possible extensions are below. @@ -43,11 +40,11 @@ typedef struct E2SM_KPM_IndicationMessage_Format1 { /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationMessage_Format1; extern asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_IndicationMessage_Format1_specs_1; -extern asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationMessage_Format1_1[1]; +extern asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationMessage_Format1_1[3]; #ifdef __cplusplus } #endif #endif /* _E2SM_KPM_IndicationMessage_Format1_H_ */ -#include +#include "asn_internal.h" diff --git a/e2sm/headers/E2SM-KPM-IndicationMessage-Format2.h b/e2sm/headers/E2SM-KPM-IndicationMessage-Format2.h new file mode 100644 index 0000000..0f96d3a --- /dev/null +++ b/e2sm/headers/E2SM-KPM-IndicationMessage-Format2.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _E2SM_KPM_IndicationMessage_Format2_H_ +#define _E2SM_KPM_IndicationMessage_Format2_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "MeasurementData.h" +#include "MeasurementCondUEidList.h" +#include "GranularityPeriod.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* E2SM-KPM-IndicationMessage-Format2 */ +typedef struct E2SM_KPM_IndicationMessage_Format2 { + MeasurementData_t measData; + MeasurementCondUEidList_t measCondUEidList; + GranularityPeriod_t *granulPeriod; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E2SM_KPM_IndicationMessage_Format2_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationMessage_Format2; +extern asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_IndicationMessage_Format2_specs_1; +extern asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationMessage_Format2_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _E2SM_KPM_IndicationMessage_Format2_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/E2SM-KPM-IndicationMessage.h b/e2sm/headers/E2SM-KPM-IndicationMessage.h index e3e5c01..d54d24b 100644 --- a/e2sm/headers/E2SM-KPM-IndicationMessage.h +++ b/e2sm/headers/E2SM-KPM-IndicationMessage.h @@ -1,43 +1,44 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #ifndef _E2SM_KPM_IndicationMessage_H_ #define _E2SM_KPM_IndicationMessage_H_ -#include +#include "asn_application.h" /* Including external dependencies */ -#include "RIC-Style-Type.h" -#include -#include +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" #ifdef __cplusplus extern "C" { #endif /* Dependencies */ -typedef enum E2SM_KPM_IndicationMessage__indicationMessage_PR { - E2SM_KPM_IndicationMessage__indicationMessage_PR_NOTHING, /* No components present */ - E2SM_KPM_IndicationMessage__indicationMessage_PR_indicationMessage_Format1 +typedef enum E2SM_KPM_IndicationMessage__indicationMessage_formats_PR { + E2SM_KPM_IndicationMessage__indicationMessage_formats_PR_NOTHING, /* No components present */ + E2SM_KPM_IndicationMessage__indicationMessage_formats_PR_indicationMessage_Format1, + E2SM_KPM_IndicationMessage__indicationMessage_formats_PR_indicationMessage_Format2 /* Extensions may appear below */ -} E2SM_KPM_IndicationMessage__indicationMessage_PR; +} E2SM_KPM_IndicationMessage__indicationMessage_formats_PR; /* Forward declarations */ struct E2SM_KPM_IndicationMessage_Format1; +struct E2SM_KPM_IndicationMessage_Format2; /* E2SM-KPM-IndicationMessage */ typedef struct E2SM_KPM_IndicationMessage { - RIC_Style_Type_t ric_Style_Type; - struct E2SM_KPM_IndicationMessage__indicationMessage { - E2SM_KPM_IndicationMessage__indicationMessage_PR present; - union E2SM_KPM_IndicationMessage__indicationMessage_u { + struct E2SM_KPM_IndicationMessage__indicationMessage_formats { + E2SM_KPM_IndicationMessage__indicationMessage_formats_PR present; + union E2SM_KPM_IndicationMessage__indicationMessage_formats_u { struct E2SM_KPM_IndicationMessage_Format1 *indicationMessage_Format1; + struct E2SM_KPM_IndicationMessage_Format2 *indicationMessage_Format2; /* * This type is extensible, * possible extensions are below. @@ -46,7 +47,7 @@ typedef struct E2SM_KPM_IndicationMessage { /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; - } indicationMessage; + } indicationMessage_formats; /* * This type is extensible, * possible extensions are below. @@ -64,4 +65,4 @@ extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationMessage; #endif #endif /* _E2SM_KPM_IndicationMessage_H_ */ -#include +#include "asn_internal.h" diff --git a/e2sm/headers/E2SM-KPM-RANfunction-Description.h b/e2sm/headers/E2SM-KPM-RANfunction-Description.h index b02ca7e..afd378e 100644 --- a/e2sm/headers/E2SM-KPM-RANfunction-Description.h +++ b/e2sm/headers/E2SM-KPM-RANfunction-Description.h @@ -1,54 +1,45 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #ifndef _E2SM_KPM_RANfunction_Description_H_ #define _E2SM_KPM_RANfunction_Description_H_ -#include +#include "asn_application.h" /* Including external dependencies */ #include "RANfunction-Name.h" -#include -#include -#include +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" +#include "constr_SEQUENCE.h" #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ -struct RIC_EventTriggerStyle_List; -struct RIC_ReportStyle_List; +struct RIC_EventTriggerStyle_Item; +struct RIC_ReportStyle_Item; /* E2SM-KPM-RANfunction-Description */ typedef struct E2SM_KPM_RANfunction_Description { RANfunction_Name_t ranFunction_Name; - struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item { - struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_EventTriggerStyle_List { - A_SEQUENCE_OF(struct RIC_EventTriggerStyle_List) list; - - /* Context for parsing across buffer boundaries */ - asn_struct_ctx_t _asn_ctx; - } *ric_EventTriggerStyle_List; - struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_ReportStyle_List { - A_SEQUENCE_OF(struct RIC_ReportStyle_List) list; - - /* Context for parsing across buffer boundaries */ - asn_struct_ctx_t _asn_ctx; - } *ric_ReportStyle_List; - /* - * This type is extensible, - * possible extensions are below. - */ + struct E2SM_KPM_RANfunction_Description__ric_EventTriggerStyle_List { + A_SEQUENCE_OF(struct RIC_EventTriggerStyle_Item) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; - } e2SM_KPM_RANfunction_Item; + } *ric_EventTriggerStyle_List; + struct E2SM_KPM_RANfunction_Description__ric_ReportStyle_List { + A_SEQUENCE_OF(struct RIC_ReportStyle_Item) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *ric_ReportStyle_List; /* * This type is extensible, * possible extensions are below. @@ -66,4 +57,4 @@ extern asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_RANfunction_Description; #endif #endif /* _E2SM_KPM_RANfunction_Description_H_ */ -#include +#include "asn_internal.h" diff --git a/e2sm/headers/EN-GNB-ID.h b/e2sm/headers/EN-GNB-ID.h new file mode 100644 index 0000000..34aff92 --- /dev/null +++ b/e2sm/headers/EN-GNB-ID.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _EN_GNB_ID_H_ +#define _EN_GNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum EN_GNB_ID_PR { + EN_GNB_ID_PR_NOTHING, /* No components present */ + EN_GNB_ID_PR_en_gNB_ID + /* Extensions may appear below */ + +} EN_GNB_ID_PR; + +/* EN-GNB-ID */ +typedef struct EN_GNB_ID { + EN_GNB_ID_PR present; + union EN_GNB_ID_u { + BIT_STRING_t en_gNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} EN_GNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_EN_GNB_ID; +extern asn_CHOICE_specifics_t asn_SPC_EN_GNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_EN_GNB_ID_1[1]; +extern asn_per_constraints_t asn_PER_type_EN_GNB_ID_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _EN_GNB_ID_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/ENB-ID.h b/e2sm/headers/ENB-ID.h index 678e272..4d96e8e 100644 --- a/e2sm/headers/ENB-ID.h +++ b/e2sm/headers/ENB-ID.h @@ -1,19 +1,19 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) - * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #ifndef _ENB_ID_H_ #define _ENB_ID_H_ -#include +#include "asn_application.h" /* Including external dependencies */ -#include -#include +#include "BIT_STRING.h" +#include "constr_CHOICE.h" #ifdef __cplusplus extern "C" { @@ -58,4 +58,4 @@ extern asn_per_constraints_t asn_PER_type_ENB_ID_constr_1; #endif #endif /* _ENB_ID_H_ */ -#include +#include "asn_internal.h" diff --git a/e2sm/headers/ENB-UE-X2AP-ID-Extension.h b/e2sm/headers/ENB-UE-X2AP-ID-Extension.h new file mode 100644 index 0000000..aa64c4c --- /dev/null +++ b/e2sm/headers/ENB-UE-X2AP-ID-Extension.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _ENB_UE_X2AP_ID_Extension_H_ +#define _ENB_UE_X2AP_ID_Extension_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ENB-UE-X2AP-ID-Extension */ +typedef long ENB_UE_X2AP_ID_Extension_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ENB_UE_X2AP_ID_Extension_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ENB_UE_X2AP_ID_Extension; +asn_struct_free_f ENB_UE_X2AP_ID_Extension_free; +asn_struct_print_f ENB_UE_X2AP_ID_Extension_print; +asn_constr_check_f ENB_UE_X2AP_ID_Extension_constraint; +ber_type_decoder_f ENB_UE_X2AP_ID_Extension_decode_ber; +der_type_encoder_f ENB_UE_X2AP_ID_Extension_encode_der; +xer_type_decoder_f ENB_UE_X2AP_ID_Extension_decode_xer; +xer_type_encoder_f ENB_UE_X2AP_ID_Extension_encode_xer; +per_type_decoder_f ENB_UE_X2AP_ID_Extension_decode_uper; +per_type_encoder_f ENB_UE_X2AP_ID_Extension_encode_uper; +per_type_decoder_f ENB_UE_X2AP_ID_Extension_decode_aper; +per_type_encoder_f ENB_UE_X2AP_ID_Extension_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENB_UE_X2AP_ID_Extension_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/ENB-UE-X2AP-ID.h b/e2sm/headers/ENB-UE-X2AP-ID.h new file mode 100644 index 0000000..7e5796b --- /dev/null +++ b/e2sm/headers/ENB-UE-X2AP-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _ENB_UE_X2AP_ID_H_ +#define _ENB_UE_X2AP_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ENB-UE-X2AP-ID */ +typedef long ENB_UE_X2AP_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_ENB_UE_X2AP_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_ENB_UE_X2AP_ID; +asn_struct_free_f ENB_UE_X2AP_ID_free; +asn_struct_print_f ENB_UE_X2AP_ID_print; +asn_constr_check_f ENB_UE_X2AP_ID_constraint; +ber_type_decoder_f ENB_UE_X2AP_ID_decode_ber; +der_type_encoder_f ENB_UE_X2AP_ID_encode_der; +xer_type_decoder_f ENB_UE_X2AP_ID_decode_xer; +xer_type_encoder_f ENB_UE_X2AP_ID_encode_xer; +per_type_decoder_f ENB_UE_X2AP_ID_decode_uper; +per_type_encoder_f ENB_UE_X2AP_ID_encode_uper; +per_type_decoder_f ENB_UE_X2AP_ID_decode_aper; +per_type_encoder_f ENB_UE_X2AP_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ENB_UE_X2AP_ID_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/ENUMERATED.h b/e2sm/headers/ENUMERATED.h new file mode 100644 index 0000000..8fd04de --- /dev/null +++ b/e2sm/headers/ENUMERATED.h @@ -0,0 +1,40 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _ENUMERATED_H_ +#define _ENUMERATED_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef INTEGER_t ENUMERATED_t; /* Implemented via INTEGER */ + +extern asn_TYPE_descriptor_t asn_DEF_ENUMERATED; +extern asn_TYPE_operation_t asn_OP_ENUMERATED; + +oer_type_decoder_f ENUMERATED_decode_oer; +oer_type_encoder_f ENUMERATED_encode_oer; +per_type_decoder_f ENUMERATED_decode_uper; +per_type_encoder_f ENUMERATED_encode_uper; +per_type_decoder_f ENUMERATED_decode_aper; +per_type_encoder_f ENUMERATED_encode_aper; + +#define ENUMERATED_free ASN__PRIMITIVE_TYPE_free +#define ENUMERATED_print INTEGER_print +#define ENUMERATED_compare INTEGER_compare +#define ENUMERATED_constraint asn_generic_no_constraint +#define ENUMERATED_decode_ber ber_decode_primitive +#define ENUMERATED_encode_der INTEGER_encode_der +#define ENUMERATED_decode_xer INTEGER_decode_xer +#define ENUMERATED_encode_xer INTEGER_encode_xer +#define ENUMERATED_random_fill INTEGER_random_fill + +#ifdef __cplusplus +} +#endif + +#endif /* _ENUMERATED_H_ */ diff --git a/e2sm/headers/EUTRA-CGI.h b/e2sm/headers/EUTRA-CGI.h new file mode 100644 index 0000000..7e89c31 --- /dev/null +++ b/e2sm/headers/EUTRA-CGI.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _EUTRA_CGI_H_ +#define _EUTRA_CGI_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PLMNIdentity.h" +#include "EUTRACellIdentity.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* EUTRA-CGI */ +typedef struct EUTRA_CGI { + PLMNIdentity_t pLMNIdentity; + EUTRACellIdentity_t eUTRACellIdentity; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} EUTRA_CGI_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_EUTRA_CGI; +extern asn_SEQUENCE_specifics_t asn_SPC_EUTRA_CGI_specs_1; +extern asn_TYPE_member_t asn_MBR_EUTRA_CGI_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _EUTRA_CGI_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/EUTRACellIdentity.h b/e2sm/headers/EUTRACellIdentity.h new file mode 100644 index 0000000..fbdc8f5 --- /dev/null +++ b/e2sm/headers/EUTRACellIdentity.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _EUTRACellIdentity_H_ +#define _EUTRACellIdentity_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* EUTRACellIdentity */ +typedef BIT_STRING_t EUTRACellIdentity_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_EUTRACellIdentity_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_EUTRACellIdentity; +asn_struct_free_f EUTRACellIdentity_free; +asn_struct_print_f EUTRACellIdentity_print; +asn_constr_check_f EUTRACellIdentity_constraint; +ber_type_decoder_f EUTRACellIdentity_decode_ber; +der_type_encoder_f EUTRACellIdentity_encode_der; +xer_type_decoder_f EUTRACellIdentity_decode_xer; +xer_type_encoder_f EUTRACellIdentity_encode_xer; +per_type_decoder_f EUTRACellIdentity_decode_uper; +per_type_encoder_f EUTRACellIdentity_encode_uper; +per_type_decoder_f EUTRACellIdentity_decode_aper; +per_type_encoder_f EUTRACellIdentity_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _EUTRACellIdentity_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/FiveGS-TAC.h b/e2sm/headers/FiveGS-TAC.h new file mode 100644 index 0000000..80829ad --- /dev/null +++ b/e2sm/headers/FiveGS-TAC.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _FiveGS_TAC_H_ +#define _FiveGS_TAC_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* FiveGS-TAC */ +typedef OCTET_STRING_t FiveGS_TAC_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_FiveGS_TAC; +asn_struct_free_f FiveGS_TAC_free; +asn_struct_print_f FiveGS_TAC_print; +asn_constr_check_f FiveGS_TAC_constraint; +ber_type_decoder_f FiveGS_TAC_decode_ber; +der_type_encoder_f FiveGS_TAC_encode_der; +xer_type_decoder_f FiveGS_TAC_decode_xer; +xer_type_encoder_f FiveGS_TAC_encode_xer; +per_type_decoder_f FiveGS_TAC_decode_uper; +per_type_encoder_f FiveGS_TAC_encode_uper; +per_type_decoder_f FiveGS_TAC_decode_aper; +per_type_encoder_f FiveGS_TAC_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _FiveGS_TAC_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/FiveQI.h b/e2sm/headers/FiveQI.h new file mode 100644 index 0000000..3f878c2 --- /dev/null +++ b/e2sm/headers/FiveQI.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _FiveQI_H_ +#define _FiveQI_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* FiveQI */ +typedef long FiveQI_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_FiveQI_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_FiveQI; +asn_struct_free_f FiveQI_free; +asn_struct_print_f FiveQI_print; +asn_constr_check_f FiveQI_constraint; +ber_type_decoder_f FiveQI_decode_ber; +der_type_encoder_f FiveQI_encode_der; +xer_type_decoder_f FiveQI_decode_xer; +xer_type_encoder_f FiveQI_encode_xer; +per_type_decoder_f FiveQI_decode_uper; +per_type_encoder_f FiveQI_encode_uper; +per_type_decoder_f FiveQI_decode_aper; +per_type_encoder_f FiveQI_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _FiveQI_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/FreqBandNrItem.h b/e2sm/headers/FreqBandNrItem.h new file mode 100644 index 0000000..662b272 --- /dev/null +++ b/e2sm/headers/FreqBandNrItem.h @@ -0,0 +1,42 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _FreqBandNrItem_H_ +#define _FreqBandNrItem_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* FreqBandNrItem */ +typedef struct FreqBandNrItem { + long freqBandIndicatorNr; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FreqBandNrItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_FreqBandNrItem; + +#ifdef __cplusplus +} +#endif + +#endif /* _FreqBandNrItem_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/GNB-CU-CP-UE-E1AP-ID.h b/e2sm/headers/GNB-CU-CP-UE-E1AP-ID.h new file mode 100644 index 0000000..1f6ae68 --- /dev/null +++ b/e2sm/headers/GNB-CU-CP-UE-E1AP-ID.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _GNB_CU_CP_UE_E1AP_ID_H_ +#define _GNB_CU_CP_UE_E1AP_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GNB-CU-CP-UE-E1AP-ID */ +typedef unsigned long GNB_CU_CP_UE_E1AP_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_GNB_CU_CP_UE_E1AP_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_GNB_CU_CP_UE_E1AP_ID; +extern const asn_INTEGER_specifics_t asn_SPC_GNB_CU_CP_UE_E1AP_ID_specs_1; +asn_struct_free_f GNB_CU_CP_UE_E1AP_ID_free; +asn_struct_print_f GNB_CU_CP_UE_E1AP_ID_print; +asn_constr_check_f GNB_CU_CP_UE_E1AP_ID_constraint; +ber_type_decoder_f GNB_CU_CP_UE_E1AP_ID_decode_ber; +der_type_encoder_f GNB_CU_CP_UE_E1AP_ID_encode_der; +xer_type_decoder_f GNB_CU_CP_UE_E1AP_ID_decode_xer; +xer_type_encoder_f GNB_CU_CP_UE_E1AP_ID_encode_xer; +per_type_decoder_f GNB_CU_CP_UE_E1AP_ID_decode_uper; +per_type_encoder_f GNB_CU_CP_UE_E1AP_ID_encode_uper; +per_type_decoder_f GNB_CU_CP_UE_E1AP_ID_decode_aper; +per_type_encoder_f GNB_CU_CP_UE_E1AP_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_CU_CP_UE_E1AP_ID_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/GNB-CU-UE-F1AP-ID.h b/e2sm/headers/GNB-CU-UE-F1AP-ID.h new file mode 100644 index 0000000..0f92da8 --- /dev/null +++ b/e2sm/headers/GNB-CU-UE-F1AP-ID.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _GNB_CU_UE_F1AP_ID_H_ +#define _GNB_CU_UE_F1AP_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GNB-CU-UE-F1AP-ID */ +typedef unsigned long GNB_CU_UE_F1AP_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_GNB_CU_UE_F1AP_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_GNB_CU_UE_F1AP_ID; +extern const asn_INTEGER_specifics_t asn_SPC_GNB_CU_UE_F1AP_ID_specs_1; +asn_struct_free_f GNB_CU_UE_F1AP_ID_free; +asn_struct_print_f GNB_CU_UE_F1AP_ID_print; +asn_constr_check_f GNB_CU_UE_F1AP_ID_constraint; +ber_type_decoder_f GNB_CU_UE_F1AP_ID_decode_ber; +der_type_encoder_f GNB_CU_UE_F1AP_ID_encode_der; +xer_type_decoder_f GNB_CU_UE_F1AP_ID_decode_xer; +xer_type_encoder_f GNB_CU_UE_F1AP_ID_encode_xer; +per_type_decoder_f GNB_CU_UE_F1AP_ID_decode_uper; +per_type_encoder_f GNB_CU_UE_F1AP_ID_encode_uper; +per_type_decoder_f GNB_CU_UE_F1AP_ID_decode_aper; +per_type_encoder_f GNB_CU_UE_F1AP_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_CU_UE_F1AP_ID_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/GNB-CU-UP-ID.h b/e2sm/headers/GNB-CU-UP-ID.h index a18db14..2ed4c33 100644 --- a/e2sm/headers/GNB-CU-UP-ID.h +++ b/e2sm/headers/GNB-CU-UP-ID.h @@ -1,18 +1,18 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) - * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #ifndef _GNB_CU_UP_ID_H_ #define _GNB_CU_UP_ID_H_ -#include +#include "asn_application.h" /* Including external dependencies */ -#include +#include "INTEGER.h" #ifdef __cplusplus extern "C" { @@ -31,8 +31,6 @@ ber_type_decoder_f GNB_CU_UP_ID_decode_ber; der_type_encoder_f GNB_CU_UP_ID_encode_der; xer_type_decoder_f GNB_CU_UP_ID_decode_xer; xer_type_encoder_f GNB_CU_UP_ID_encode_xer; -oer_type_decoder_f GNB_CU_UP_ID_decode_oer; -oer_type_encoder_f GNB_CU_UP_ID_encode_oer; per_type_decoder_f GNB_CU_UP_ID_decode_uper; per_type_encoder_f GNB_CU_UP_ID_encode_uper; per_type_decoder_f GNB_CU_UP_ID_decode_aper; @@ -43,4 +41,4 @@ per_type_encoder_f GNB_CU_UP_ID_encode_aper; #endif #endif /* _GNB_CU_UP_ID_H_ */ -#include +#include "asn_internal.h" diff --git a/e2sm/headers/GNB-DU-ID.h b/e2sm/headers/GNB-DU-ID.h index 8144b44..4901345 100644 --- a/e2sm/headers/GNB-DU-ID.h +++ b/e2sm/headers/GNB-DU-ID.h @@ -1,18 +1,18 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) - * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #ifndef _GNB_DU_ID_H_ #define _GNB_DU_ID_H_ -#include +#include "asn_application.h" /* Including external dependencies */ -#include +#include "INTEGER.h" #ifdef __cplusplus extern "C" { @@ -31,8 +31,6 @@ ber_type_decoder_f GNB_DU_ID_decode_ber; der_type_encoder_f GNB_DU_ID_encode_der; xer_type_decoder_f GNB_DU_ID_decode_xer; xer_type_encoder_f GNB_DU_ID_encode_xer; -oer_type_decoder_f GNB_DU_ID_decode_oer; -oer_type_encoder_f GNB_DU_ID_encode_oer; per_type_decoder_f GNB_DU_ID_decode_uper; per_type_encoder_f GNB_DU_ID_encode_uper; per_type_decoder_f GNB_DU_ID_decode_aper; @@ -43,4 +41,4 @@ per_type_encoder_f GNB_DU_ID_encode_aper; #endif #endif /* _GNB_DU_ID_H_ */ -#include +#include "asn_internal.h" diff --git a/e2sm/headers/GNB-ID.h b/e2sm/headers/GNB-ID.h new file mode 100644 index 0000000..9ae9ee9 --- /dev/null +++ b/e2sm/headers/GNB-ID.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _GNB_ID_H_ +#define _GNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum GNB_ID_PR { + GNB_ID_PR_NOTHING, /* No components present */ + GNB_ID_PR_gNB_ID + /* Extensions may appear below */ + +} GNB_ID_PR; + +/* GNB-ID */ +typedef struct GNB_ID { + GNB_ID_PR present; + union GNB_ID_u { + BIT_STRING_t gNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GNB_ID; +extern asn_CHOICE_specifics_t asn_SPC_GNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GNB_ID_1[1]; +extern asn_per_constraints_t asn_PER_type_GNB_ID_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _GNB_ID_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/GUAMI.h b/e2sm/headers/GUAMI.h new file mode 100644 index 0000000..2c96d62 --- /dev/null +++ b/e2sm/headers/GUAMI.h @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _GUAMI_H_ +#define _GUAMI_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PLMNIdentity.h" +#include "AMFRegionID.h" +#include "AMFSetID.h" +#include "AMFPointer.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GUAMI */ +typedef struct GUAMI { + PLMNIdentity_t pLMNIdentity; + AMFRegionID_t aMFRegionID; + AMFSetID_t aMFSetID; + AMFPointer_t aMFPointer; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GUAMI_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GUAMI; +extern asn_SEQUENCE_specifics_t asn_SPC_GUAMI_specs_1; +extern asn_TYPE_member_t asn_MBR_GUAMI_1[4]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GUAMI_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/GUMMEI.h b/e2sm/headers/GUMMEI.h new file mode 100644 index 0000000..827a8c7 --- /dev/null +++ b/e2sm/headers/GUMMEI.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _GUMMEI_H_ +#define _GUMMEI_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PLMNIdentity.h" +#include "MME-Group-ID.h" +#include "MME-Code.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GUMMEI */ +typedef struct GUMMEI { + PLMNIdentity_t pLMN_Identity; + MME_Group_ID_t mME_Group_ID; + MME_Code_t mME_Code; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GUMMEI_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GUMMEI; +extern asn_SEQUENCE_specifics_t asn_SPC_GUMMEI_specs_1; +extern asn_TYPE_member_t asn_MBR_GUMMEI_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GUMMEI_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/GeneralString.h b/e2sm/headers/GeneralString.h new file mode 100644 index 0000000..fb5de1c --- /dev/null +++ b/e2sm/headers/GeneralString.h @@ -0,0 +1,36 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _GeneralString_H_ +#define _GeneralString_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef OCTET_STRING_t GeneralString_t; /* Implemented via OCTET STRING */ + +extern asn_TYPE_descriptor_t asn_DEF_GeneralString; +extern asn_TYPE_operation_t asn_OP_GeneralString; + +#define GeneralString_free OCTET_STRING_free +#define GeneralString_print OCTET_STRING_print +#define GeneralString_compare OCTET_STRING_compare +#define GeneralString_constraint asn_generic_unknown_constraint +#define GeneralString_decode_ber OCTET_STRING_decode_ber +#define GeneralString_encode_der OCTET_STRING_encode_der +#define GeneralString_decode_xer OCTET_STRING_decode_xer_hex +#define GeneralString_encode_xer OCTET_STRING_encode_xer +#define GeneralString_decode_uper OCTET_STRING_decode_uper +#define GeneralString_encode_uper OCTET_STRING_encode_uper +#define GeneralString_decode_aper OCTET_STRING_decode_aper +#define GeneralString_encode_aper OCTET_STRING_encode_aper + +#ifdef __cplusplus +} +#endif + +#endif /* _GeneralString_H_ */ diff --git a/e2sm/headers/GeneralizedTime.h b/e2sm/headers/GeneralizedTime.h new file mode 100644 index 0000000..02bffe0 --- /dev/null +++ b/e2sm/headers/GeneralizedTime.h @@ -0,0 +1,80 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _GeneralizedTime_H_ +#define _GeneralizedTime_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef OCTET_STRING_t GeneralizedTime_t; /* Implemented via OCTET STRING */ + +extern asn_TYPE_descriptor_t asn_DEF_GeneralizedTime; +extern asn_TYPE_operation_t asn_OP_GeneralizedTime; + +asn_struct_print_f GeneralizedTime_print; +asn_struct_compare_f GeneralizedTime_compare; +asn_constr_check_f GeneralizedTime_constraint; +der_type_encoder_f GeneralizedTime_encode_der; +xer_type_encoder_f GeneralizedTime_encode_xer; +asn_random_fill_f GeneralizedTime_random_fill; + +#define GeneralizedTime_free OCTET_STRING_free +#define GeneralizedTime_decode_ber OCTET_STRING_decode_ber +#define GeneralizedTime_decode_xer OCTET_STRING_decode_xer_utf8 +#define GeneralizedTime_decode_uper OCTET_STRING_decode_uper +#define GeneralizedTime_encode_uper OCTET_STRING_encode_uper +#define GeneralizedTime_decode_aper OCTET_STRING_decode_aper +#define GeneralizedTime_encode_aper OCTET_STRING_encode_aper + +/*********************** + * Some handy helpers. * + ***********************/ + +struct tm; /* */ + +/* + * Convert a GeneralizedTime structure into time_t + * and optionally into struct tm. + * If as_gmt is given, the resulting _optional_tm4fill will have a GMT zone, + * instead of default local one. + * On error returns -1 and errno set to EINVAL + */ +time_t asn_GT2time(const GeneralizedTime_t *, struct tm *_optional_tm4fill, + int as_gmt); + +/* A version of the above function also returning the fractions of seconds */ +time_t asn_GT2time_frac(const GeneralizedTime_t *, + int *frac_value, int *frac_digits, /* (value / (10 ^ digits)) */ + struct tm *_optional_tm4fill, int as_gmt); + +/* + * Another version returning fractions with defined precision + * For example, parsing of the time ending with ".1" seconds + * with frac_digits=3 (msec) would yield frac_value = 100. + */ +time_t asn_GT2time_prec(const GeneralizedTime_t *, + int *frac_value, int frac_digits, + struct tm *_optional_tm4fill, int as_gmt); + +/* + * Convert a struct tm into GeneralizedTime. + * If _optional_gt is not given, this function will try to allocate one. + * If force_gmt is given, the resulting GeneralizedTime will be forced + * into a GMT time zone (encoding ends with a "Z"). + * On error, this function returns 0 and sets errno. + */ +GeneralizedTime_t *asn_time2GT(GeneralizedTime_t *_optional_gt, + const struct tm *, int force_gmt); +GeneralizedTime_t *asn_time2GT_frac(GeneralizedTime_t *_optional_gt, + const struct tm *, int frac_value, int frac_digits, int force_gmt); + +#ifdef __cplusplus +} +#endif + +#endif /* _GeneralizedTime_H_ */ diff --git a/e2sm/headers/GlobalENB-ID.h b/e2sm/headers/GlobalENB-ID.h index 8e56fbc..01f6117 100644 --- a/e2sm/headers/GlobalENB-ID.h +++ b/e2sm/headers/GlobalENB-ID.h @@ -1,20 +1,20 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) - * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #ifndef _GlobalENB_ID_H_ #define _GlobalENB_ID_H_ -#include +#include "asn_application.h" /* Including external dependencies */ -#include "PLMN-Identity.h" +#include "PLMNIdentity.h" #include "ENB-ID.h" -#include +#include "constr_SEQUENCE.h" #ifdef __cplusplus extern "C" { @@ -22,7 +22,7 @@ extern "C" { /* GlobalENB-ID */ typedef struct GlobalENB_ID { - PLMN_Identity_t pLMN_Identity; + PLMNIdentity_t pLMNIdentity; ENB_ID_t eNB_ID; /* * This type is extensible, @@ -43,4 +43,4 @@ extern asn_TYPE_member_t asn_MBR_GlobalENB_ID_1[2]; #endif #endif /* _GlobalENB_ID_H_ */ -#include +#include "asn_internal.h" diff --git a/e2sm/headers/GlobalGNB-ID.h b/e2sm/headers/GlobalGNB-ID.h new file mode 100644 index 0000000..9b14f3a --- /dev/null +++ b/e2sm/headers/GlobalGNB-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _GlobalGNB_ID_H_ +#define _GlobalGNB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PLMNIdentity.h" +#include "GNB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalGNB-ID */ +typedef struct GlobalGNB_ID { + PLMNIdentity_t pLMNIdentity; + GNB_ID_t gNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalGNB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalGNB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalGNB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalGNB_ID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalGNB_ID_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/GlobalNGRANNodeID.h b/e2sm/headers/GlobalNGRANNodeID.h new file mode 100644 index 0000000..bb34765 --- /dev/null +++ b/e2sm/headers/GlobalNGRANNodeID.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _GlobalNGRANNodeID_H_ +#define _GlobalNGRANNodeID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum GlobalNGRANNodeID_PR { + GlobalNGRANNodeID_PR_NOTHING, /* No components present */ + GlobalNGRANNodeID_PR_gNB, + GlobalNGRANNodeID_PR_ng_eNB + /* Extensions may appear below */ + +} GlobalNGRANNodeID_PR; + +/* Forward declarations */ +struct GlobalGNB_ID; +struct GlobalNgENB_ID; + +/* GlobalNGRANNodeID */ +typedef struct GlobalNGRANNodeID { + GlobalNGRANNodeID_PR present; + union GlobalNGRANNodeID_u { + struct GlobalGNB_ID *gNB; + struct GlobalNgENB_ID *ng_eNB; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalNGRANNodeID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalNGRANNodeID; +extern asn_CHOICE_specifics_t asn_SPC_GlobalNGRANNodeID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalNGRANNodeID_1[2]; +extern asn_per_constraints_t asn_PER_type_GlobalNGRANNodeID_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalNGRANNodeID_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/GlobalNgENB-ID.h b/e2sm/headers/GlobalNgENB-ID.h new file mode 100644 index 0000000..db01dd0 --- /dev/null +++ b/e2sm/headers/GlobalNgENB-ID.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _GlobalNgENB_ID_H_ +#define _GlobalNgENB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PLMNIdentity.h" +#include "NgENB-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GlobalNgENB-ID */ +typedef struct GlobalNgENB_ID { + PLMNIdentity_t pLMNIdentity; + NgENB_ID_t ngENB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GlobalNgENB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GlobalNgENB_ID; +extern asn_SEQUENCE_specifics_t asn_SPC_GlobalNgENB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_GlobalNgENB_ID_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _GlobalNgENB_ID_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/GlobalenGNB-ID.h b/e2sm/headers/GlobalenGNB-ID.h index 7e8284b..61e4d4c 100644 --- a/e2sm/headers/GlobalenGNB-ID.h +++ b/e2sm/headers/GlobalenGNB-ID.h @@ -1,20 +1,20 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) - * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #ifndef _GlobalenGNB_ID_H_ #define _GlobalenGNB_ID_H_ -#include +#include "asn_application.h" /* Including external dependencies */ -#include "PLMN-Identity.h" -#include "ENGNB-ID.h" -#include +#include "PLMNIdentity.h" +#include "EN-GNB-ID.h" +#include "constr_SEQUENCE.h" #ifdef __cplusplus extern "C" { @@ -22,8 +22,8 @@ extern "C" { /* GlobalenGNB-ID */ typedef struct GlobalenGNB_ID { - PLMN_Identity_t pLMN_Identity; - ENGNB_ID_t gNB_ID; + PLMNIdentity_t pLMN_Identity; + EN_GNB_ID_t en_gNB_ID; /* * This type is extensible, * possible extensions are below. @@ -43,4 +43,4 @@ extern asn_TYPE_member_t asn_MBR_GlobalenGNB_ID_1[2]; #endif #endif /* _GlobalenGNB_ID_H_ */ -#include +#include "asn_internal.h" diff --git a/e2sm/headers/GranularityPeriod.h b/e2sm/headers/GranularityPeriod.h new file mode 100644 index 0000000..0c3b090 --- /dev/null +++ b/e2sm/headers/GranularityPeriod.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _GranularityPeriod_H_ +#define _GranularityPeriod_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* GranularityPeriod */ +typedef unsigned long GranularityPeriod_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_GranularityPeriod_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_GranularityPeriod; +extern const asn_INTEGER_specifics_t asn_SPC_GranularityPeriod_specs_1; +asn_struct_free_f GranularityPeriod_free; +asn_struct_print_f GranularityPeriod_print; +asn_constr_check_f GranularityPeriod_constraint; +ber_type_decoder_f GranularityPeriod_decode_ber; +der_type_encoder_f GranularityPeriod_encode_der; +xer_type_decoder_f GranularityPeriod_decode_xer; +xer_type_encoder_f GranularityPeriod_encode_xer; +per_type_decoder_f GranularityPeriod_decode_uper; +per_type_encoder_f GranularityPeriod_encode_uper; +per_type_decoder_f GranularityPeriod_decode_aper; +per_type_encoder_f GranularityPeriod_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _GranularityPeriod_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/GraphicString.h b/e2sm/headers/GraphicString.h new file mode 100644 index 0000000..19cac68 --- /dev/null +++ b/e2sm/headers/GraphicString.h @@ -0,0 +1,36 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _GraphicString_H_ +#define _GraphicString_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef OCTET_STRING_t GraphicString_t; /* Implemented via OCTET STRING */ + +extern asn_TYPE_descriptor_t asn_DEF_GraphicString; +extern asn_TYPE_operation_t asn_OP_GraphicString; + +#define GraphicString_free OCTET_STRING_free +#define GraphicString_print OCTET_STRING_print +#define GraphicString_compare OCTET_STRING_compare +#define GraphicString_constraint asn_generic_unknown_constraint +#define GraphicString_decode_ber OCTET_STRING_decode_ber +#define GraphicString_encode_der OCTET_STRING_encode_der +#define GraphicString_decode_xer OCTET_STRING_decode_xer_hex +#define GraphicString_encode_xer OCTET_STRING_encode_xer +#define GraphicString_decode_uper OCTET_STRING_decode_uper +#define GraphicString_encode_uper OCTET_STRING_encode_uper +#define GraphicString_decode_aper OCTET_STRING_decode_aper +#define GraphicString_encode_aper OCTET_STRING_encode_aper + +#ifdef __cplusplus +} +#endif + +#endif /* _GraphicString_H_ */ diff --git a/e2sm/headers/GroupID.h b/e2sm/headers/GroupID.h new file mode 100644 index 0000000..259d9cd --- /dev/null +++ b/e2sm/headers/GroupID.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _GroupID_H_ +#define _GroupID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "FiveQI.h" +#include "QCI.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum GroupID_PR { + GroupID_PR_NOTHING, /* No components present */ + GroupID_PR_fiveGC, + GroupID_PR_ePC + /* Extensions may appear below */ + +} GroupID_PR; + +/* GroupID */ +typedef struct GroupID { + GroupID_PR present; + union GroupID_u { + FiveQI_t fiveGC; + QCI_t ePC; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} GroupID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_GroupID; + +#ifdef __cplusplus +} +#endif + +#endif /* _GroupID_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/IA5String.h b/e2sm/headers/IA5String.h new file mode 100644 index 0000000..321f0c7 --- /dev/null +++ b/e2sm/headers/IA5String.h @@ -0,0 +1,40 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _IA5String_H_ +#define _IA5String_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef OCTET_STRING_t IA5String_t; /* Implemented via OCTET STRING */ + +/* + * IA5String ASN.1 type definition. + */ +extern asn_TYPE_descriptor_t asn_DEF_IA5String; +extern asn_TYPE_operation_t asn_OP_IA5String; + +asn_constr_check_f IA5String_constraint; + +#define IA5String_free OCTET_STRING_free +#define IA5String_print OCTET_STRING_print_utf8 +#define IA5String_compare OCTET_STRING_compare +#define IA5String_decode_ber OCTET_STRING_decode_ber +#define IA5String_encode_der OCTET_STRING_encode_der +#define IA5String_decode_xer OCTET_STRING_decode_xer_utf8 +#define IA5String_encode_xer OCTET_STRING_encode_xer_utf8 +#define IA5String_decode_uper OCTET_STRING_decode_uper +#define IA5String_encode_uper OCTET_STRING_encode_uper +#define IA5String_decode_aper OCTET_STRING_decode_aper +#define IA5String_encode_aper OCTET_STRING_encode_aper + +#ifdef __cplusplus +} +#endif + +#endif /* _IA5String_H_ */ diff --git a/e2sm/headers/ISO646String.h b/e2sm/headers/ISO646String.h new file mode 100644 index 0000000..cd24a68 --- /dev/null +++ b/e2sm/headers/ISO646String.h @@ -0,0 +1,37 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _ISO646String_H_ +#define _ISO646String_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef VisibleString_t ISO646String_t; /* Implemented using VisibleString */ + +extern asn_TYPE_descriptor_t asn_DEF_ISO646String; +extern asn_TYPE_operation_t asn_OP_ISO646String; + +#define ISO646String_free OCTET_STRING_free +#define ISO646String_print OCTET_STRING_print_utf8 +#define ISO646String_compare OCTET_STRING_compare +#define ISO646String_constraint VisibleString_constraint +#define ISO646String_decode_ber OCTET_STRING_decode_ber +#define ISO646String_encode_der OCTET_STRING_encode_der +#define ISO646String_decode_xer OCTET_STRING_decode_xer_utf8 +#define ISO646String_encode_xer OCTET_STRING_encode_xer_utf8 +#define ISO646String_decode_uper OCTET_STRING_decode_uper +#define ISO646String_encode_uper OCTET_STRING_encode_uper +#define ISO646String_decode_aper OCTET_STRING_decode_aper +#define ISO646String_encode_aper OCTET_STRING_encode_aper + +#ifdef __cplusplus +} +#endif + +#endif /* _ISO646String_H_ */ diff --git a/e2sm/headers/IndexToRFSP.h b/e2sm/headers/IndexToRFSP.h new file mode 100644 index 0000000..574825c --- /dev/null +++ b/e2sm/headers/IndexToRFSP.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _IndexToRFSP_H_ +#define _IndexToRFSP_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* IndexToRFSP */ +typedef long IndexToRFSP_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_IndexToRFSP; +asn_struct_free_f IndexToRFSP_free; +asn_struct_print_f IndexToRFSP_print; +asn_constr_check_f IndexToRFSP_constraint; +ber_type_decoder_f IndexToRFSP_decode_ber; +der_type_encoder_f IndexToRFSP_encode_der; +xer_type_decoder_f IndexToRFSP_decode_xer; +xer_type_encoder_f IndexToRFSP_encode_xer; +per_type_decoder_f IndexToRFSP_decode_uper; +per_type_encoder_f IndexToRFSP_encode_uper; +per_type_decoder_f IndexToRFSP_decode_aper; +per_type_encoder_f IndexToRFSP_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _IndexToRFSP_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/Interface-MessageID.h b/e2sm/headers/Interface-MessageID.h new file mode 100644 index 0000000..2a31202 --- /dev/null +++ b/e2sm/headers/Interface-MessageID.h @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _Interface_MessageID_H_ +#define _Interface_MessageID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" +#include "NativeEnumerated.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Interface_MessageID__messageType { + Interface_MessageID__messageType_initiatingMessage = 0, + Interface_MessageID__messageType_successfulOutcome = 1, + Interface_MessageID__messageType_unsuccessfulOutcome = 2 + /* + * Enumeration is extensible + */ +} e_Interface_MessageID__messageType; + +/* Interface-MessageID */ +typedef struct Interface_MessageID { + long interfaceProcedureID; + long messageType; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} Interface_MessageID_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_messageType_3; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_Interface_MessageID; + +#ifdef __cplusplus +} +#endif + +#endif /* _Interface_MessageID_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/InterfaceID-E1.h b/e2sm/headers/InterfaceID-E1.h new file mode 100644 index 0000000..07e2dbd --- /dev/null +++ b/e2sm/headers/InterfaceID-E1.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _InterfaceID_E1_H_ +#define _InterfaceID_E1_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GlobalGNB-ID.h" +#include "GNB-CU-UP-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* InterfaceID-E1 */ +typedef struct InterfaceID_E1 { + GlobalGNB_ID_t globalGNB_ID; + GNB_CU_UP_ID_t gNB_CU_UP_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} InterfaceID_E1_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InterfaceID_E1; +extern asn_SEQUENCE_specifics_t asn_SPC_InterfaceID_E1_specs_1; +extern asn_TYPE_member_t asn_MBR_InterfaceID_E1_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _InterfaceID_E1_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/InterfaceID-F1.h b/e2sm/headers/InterfaceID-F1.h new file mode 100644 index 0000000..3c751a9 --- /dev/null +++ b/e2sm/headers/InterfaceID-F1.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _InterfaceID_F1_H_ +#define _InterfaceID_F1_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GlobalGNB-ID.h" +#include "GNB-DU-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* InterfaceID-F1 */ +typedef struct InterfaceID_F1 { + GlobalGNB_ID_t globalGNB_ID; + GNB_DU_ID_t gNB_DU_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} InterfaceID_F1_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InterfaceID_F1; +extern asn_SEQUENCE_specifics_t asn_SPC_InterfaceID_F1_specs_1; +extern asn_TYPE_member_t asn_MBR_InterfaceID_F1_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _InterfaceID_F1_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/InterfaceID-NG.h b/e2sm/headers/InterfaceID-NG.h new file mode 100644 index 0000000..714961e --- /dev/null +++ b/e2sm/headers/InterfaceID-NG.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _InterfaceID_NG_H_ +#define _InterfaceID_NG_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GUAMI.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* InterfaceID-NG */ +typedef struct InterfaceID_NG { + GUAMI_t guami; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} InterfaceID_NG_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InterfaceID_NG; +extern asn_SEQUENCE_specifics_t asn_SPC_InterfaceID_NG_specs_1; +extern asn_TYPE_member_t asn_MBR_InterfaceID_NG_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _InterfaceID_NG_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/InterfaceID-S1.h b/e2sm/headers/InterfaceID-S1.h new file mode 100644 index 0000000..75e8463 --- /dev/null +++ b/e2sm/headers/InterfaceID-S1.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _InterfaceID_S1_H_ +#define _InterfaceID_S1_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GUMMEI.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* InterfaceID-S1 */ +typedef struct InterfaceID_S1 { + GUMMEI_t gUMMEI; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} InterfaceID_S1_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InterfaceID_S1; +extern asn_SEQUENCE_specifics_t asn_SPC_InterfaceID_S1_specs_1; +extern asn_TYPE_member_t asn_MBR_InterfaceID_S1_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _InterfaceID_S1_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/InterfaceID-W1.h b/e2sm/headers/InterfaceID-W1.h new file mode 100644 index 0000000..7309df3 --- /dev/null +++ b/e2sm/headers/InterfaceID-W1.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _InterfaceID_W1_H_ +#define _InterfaceID_W1_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GlobalNgENB-ID.h" +#include "NGENB-DU-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* InterfaceID-W1 */ +typedef struct InterfaceID_W1 { + GlobalNgENB_ID_t global_ng_eNB_ID; + NGENB_DU_ID_t ng_eNB_DU_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} InterfaceID_W1_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InterfaceID_W1; +extern asn_SEQUENCE_specifics_t asn_SPC_InterfaceID_W1_specs_1; +extern asn_TYPE_member_t asn_MBR_InterfaceID_W1_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _InterfaceID_W1_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/InterfaceID-X2.h b/e2sm/headers/InterfaceID-X2.h new file mode 100644 index 0000000..8c86ef4 --- /dev/null +++ b/e2sm/headers/InterfaceID-X2.h @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _InterfaceID_X2_H_ +#define _InterfaceID_X2_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum InterfaceID_X2__nodeType_PR { + InterfaceID_X2__nodeType_PR_NOTHING, /* No components present */ + InterfaceID_X2__nodeType_PR_global_eNB_ID, + InterfaceID_X2__nodeType_PR_global_en_gNB_ID + /* Extensions may appear below */ + +} InterfaceID_X2__nodeType_PR; + +/* Forward declarations */ +struct GlobalENB_ID; +struct GlobalenGNB_ID; + +/* InterfaceID-X2 */ +typedef struct InterfaceID_X2 { + struct InterfaceID_X2__nodeType { + InterfaceID_X2__nodeType_PR present; + union InterfaceID_X2__nodeType_u { + struct GlobalENB_ID *global_eNB_ID; + struct GlobalenGNB_ID *global_en_gNB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } nodeType; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} InterfaceID_X2_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InterfaceID_X2; +extern asn_SEQUENCE_specifics_t asn_SPC_InterfaceID_X2_specs_1; +extern asn_TYPE_member_t asn_MBR_InterfaceID_X2_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _InterfaceID_X2_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/InterfaceID-Xn.h b/e2sm/headers/InterfaceID-Xn.h new file mode 100644 index 0000000..976e504 --- /dev/null +++ b/e2sm/headers/InterfaceID-Xn.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _InterfaceID_Xn_H_ +#define _InterfaceID_Xn_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GlobalNGRANNodeID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* InterfaceID-Xn */ +typedef struct InterfaceID_Xn { + GlobalNGRANNodeID_t global_NG_RAN_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} InterfaceID_Xn_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InterfaceID_Xn; +extern asn_SEQUENCE_specifics_t asn_SPC_InterfaceID_Xn_specs_1; +extern asn_TYPE_member_t asn_MBR_InterfaceID_Xn_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _InterfaceID_Xn_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/InterfaceIdentifier.h b/e2sm/headers/InterfaceIdentifier.h new file mode 100644 index 0000000..5bcf1e4 --- /dev/null +++ b/e2sm/headers/InterfaceIdentifier.h @@ -0,0 +1,73 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _InterfaceIdentifier_H_ +#define _InterfaceIdentifier_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum InterfaceIdentifier_PR { + InterfaceIdentifier_PR_NOTHING, /* No components present */ + InterfaceIdentifier_PR_nG, + InterfaceIdentifier_PR_xN, + InterfaceIdentifier_PR_f1, + InterfaceIdentifier_PR_e1, + InterfaceIdentifier_PR_s1, + InterfaceIdentifier_PR_x2, + InterfaceIdentifier_PR_w1 + /* Extensions may appear below */ + +} InterfaceIdentifier_PR; + +/* Forward declarations */ +struct InterfaceID_NG; +struct InterfaceID_Xn; +struct InterfaceID_F1; +struct InterfaceID_E1; +struct InterfaceID_S1; +struct InterfaceID_X2; +struct InterfaceID_W1; + +/* InterfaceIdentifier */ +typedef struct InterfaceIdentifier { + InterfaceIdentifier_PR present; + union InterfaceIdentifier_u { + struct InterfaceID_NG *nG; + struct InterfaceID_Xn *xN; + struct InterfaceID_F1 *f1; + struct InterfaceID_E1 *e1; + struct InterfaceID_S1 *s1; + struct InterfaceID_X2 *x2; + struct InterfaceID_W1 *w1; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} InterfaceIdentifier_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InterfaceIdentifier; + +#ifdef __cplusplus +} +#endif + +#endif /* _InterfaceIdentifier_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/InterfaceType.h b/e2sm/headers/InterfaceType.h new file mode 100644 index 0000000..2c3679d --- /dev/null +++ b/e2sm/headers/InterfaceType.h @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _InterfaceType_H_ +#define _InterfaceType_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum InterfaceType { + InterfaceType_nG = 0, + InterfaceType_xn = 1, + InterfaceType_f1 = 2, + InterfaceType_e1 = 3, + InterfaceType_s1 = 4, + InterfaceType_x2 = 5, + InterfaceType_w1 = 6 + /* + * Enumeration is extensible + */ +} e_InterfaceType; + +/* InterfaceType */ +typedef long InterfaceType_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InterfaceType; +asn_struct_free_f InterfaceType_free; +asn_struct_print_f InterfaceType_print; +asn_constr_check_f InterfaceType_constraint; +ber_type_decoder_f InterfaceType_decode_ber; +der_type_encoder_f InterfaceType_encode_der; +xer_type_decoder_f InterfaceType_decode_xer; +xer_type_encoder_f InterfaceType_encode_xer; +per_type_decoder_f InterfaceType_decode_uper; +per_type_encoder_f InterfaceType_encode_uper; +per_type_decoder_f InterfaceType_decode_aper; +per_type_encoder_f InterfaceType_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _InterfaceType_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/LabelInfoItem.h b/e2sm/headers/LabelInfoItem.h new file mode 100644 index 0000000..3761f10 --- /dev/null +++ b/e2sm/headers/LabelInfoItem.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _LabelInfoItem_H_ +#define _LabelInfoItem_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "MeasurementLabel.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* LabelInfoItem */ +typedef struct LabelInfoItem { + MeasurementLabel_t measLabel; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} LabelInfoItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_LabelInfoItem; +extern asn_SEQUENCE_specifics_t asn_SPC_LabelInfoItem_specs_1; +extern asn_TYPE_member_t asn_MBR_LabelInfoItem_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _LabelInfoItem_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/LabelInfoList.h b/e2sm/headers/LabelInfoList.h new file mode 100644 index 0000000..5473fbd --- /dev/null +++ b/e2sm/headers/LabelInfoList.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _LabelInfoList_H_ +#define _LabelInfoList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct LabelInfoItem; + +/* LabelInfoList */ +typedef struct LabelInfoList { + A_SEQUENCE_OF(struct LabelInfoItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} LabelInfoList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_LabelInfoList; +extern asn_SET_OF_specifics_t asn_SPC_LabelInfoList_specs_1; +extern asn_TYPE_member_t asn_MBR_LabelInfoList_1[1]; +extern asn_per_constraints_t asn_PER_type_LabelInfoList_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _LabelInfoList_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/MME-Code.h b/e2sm/headers/MME-Code.h new file mode 100644 index 0000000..7a1c912 --- /dev/null +++ b/e2sm/headers/MME-Code.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _MME_Code_H_ +#define _MME_Code_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* MME-Code */ +typedef OCTET_STRING_t MME_Code_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_MME_Code_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_MME_Code; +asn_struct_free_f MME_Code_free; +asn_struct_print_f MME_Code_print; +asn_constr_check_f MME_Code_constraint; +ber_type_decoder_f MME_Code_decode_ber; +der_type_encoder_f MME_Code_encode_der; +xer_type_decoder_f MME_Code_decode_xer; +xer_type_encoder_f MME_Code_encode_xer; +per_type_decoder_f MME_Code_decode_uper; +per_type_encoder_f MME_Code_encode_uper; +per_type_decoder_f MME_Code_decode_aper; +per_type_encoder_f MME_Code_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _MME_Code_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/MME-Group-ID.h b/e2sm/headers/MME-Group-ID.h new file mode 100644 index 0000000..84eb3bf --- /dev/null +++ b/e2sm/headers/MME-Group-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _MME_Group_ID_H_ +#define _MME_Group_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* MME-Group-ID */ +typedef OCTET_STRING_t MME_Group_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_MME_Group_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_MME_Group_ID; +asn_struct_free_f MME_Group_ID_free; +asn_struct_print_f MME_Group_ID_print; +asn_constr_check_f MME_Group_ID_constraint; +ber_type_decoder_f MME_Group_ID_decode_ber; +der_type_encoder_f MME_Group_ID_encode_der; +xer_type_decoder_f MME_Group_ID_decode_xer; +xer_type_encoder_f MME_Group_ID_encode_xer; +per_type_decoder_f MME_Group_ID_decode_uper; +per_type_encoder_f MME_Group_ID_encode_uper; +per_type_decoder_f MME_Group_ID_decode_aper; +per_type_encoder_f MME_Group_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _MME_Group_ID_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/MME-UE-S1AP-ID.h b/e2sm/headers/MME-UE-S1AP-ID.h new file mode 100644 index 0000000..4b18e19 --- /dev/null +++ b/e2sm/headers/MME-UE-S1AP-ID.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _MME_UE_S1AP_ID_H_ +#define _MME_UE_S1AP_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* MME-UE-S1AP-ID */ +typedef unsigned long MME_UE_S1AP_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_MME_UE_S1AP_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_MME_UE_S1AP_ID; +extern const asn_INTEGER_specifics_t asn_SPC_MME_UE_S1AP_ID_specs_1; +asn_struct_free_f MME_UE_S1AP_ID_free; +asn_struct_print_f MME_UE_S1AP_ID_print; +asn_constr_check_f MME_UE_S1AP_ID_constraint; +ber_type_decoder_f MME_UE_S1AP_ID_decode_ber; +der_type_encoder_f MME_UE_S1AP_ID_encode_der; +xer_type_decoder_f MME_UE_S1AP_ID_decode_xer; +xer_type_encoder_f MME_UE_S1AP_ID_encode_xer; +per_type_decoder_f MME_UE_S1AP_ID_decode_uper; +per_type_encoder_f MME_UE_S1AP_ID_encode_uper; +per_type_decoder_f MME_UE_S1AP_ID_decode_aper; +per_type_encoder_f MME_UE_S1AP_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _MME_UE_S1AP_ID_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/MatchingCondItem.h b/e2sm/headers/MatchingCondItem.h new file mode 100644 index 0000000..2391f42 --- /dev/null +++ b/e2sm/headers/MatchingCondItem.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _MatchingCondItem_H_ +#define _MatchingCondItem_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum MatchingCondItem_PR { + MatchingCondItem_PR_NOTHING, /* No components present */ + MatchingCondItem_PR_measLabel, + MatchingCondItem_PR_testCondInfo + /* Extensions may appear below */ + +} MatchingCondItem_PR; + +/* Forward declarations */ +struct MeasurementLabel; +struct TestCondInfo; + +/* MatchingCondItem */ +typedef struct MatchingCondItem { + MatchingCondItem_PR present; + union MatchingCondItem_u { + struct MeasurementLabel *measLabel; + struct TestCondInfo *testCondInfo; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MatchingCondItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MatchingCondItem; +extern asn_CHOICE_specifics_t asn_SPC_MatchingCondItem_specs_1; +extern asn_TYPE_member_t asn_MBR_MatchingCondItem_1[2]; +extern asn_per_constraints_t asn_PER_type_MatchingCondItem_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _MatchingCondItem_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/MatchingCondList.h b/e2sm/headers/MatchingCondList.h new file mode 100644 index 0000000..4f42cc2 --- /dev/null +++ b/e2sm/headers/MatchingCondList.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _MatchingCondList_H_ +#define _MatchingCondList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct MatchingCondItem; + +/* MatchingCondList */ +typedef struct MatchingCondList { + A_SEQUENCE_OF(struct MatchingCondItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MatchingCondList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MatchingCondList; +extern asn_SET_OF_specifics_t asn_SPC_MatchingCondList_specs_1; +extern asn_TYPE_member_t asn_MBR_MatchingCondList_1[1]; +extern asn_per_constraints_t asn_PER_type_MatchingCondList_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _MatchingCondList_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/MatchingUEidItem.h b/e2sm/headers/MatchingUEidItem.h new file mode 100644 index 0000000..b3e304c --- /dev/null +++ b/e2sm/headers/MatchingUEidItem.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _MatchingUEidItem_H_ +#define _MatchingUEidItem_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "UEID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* MatchingUEidItem */ +typedef struct MatchingUEidItem { + UEID_t ueID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MatchingUEidItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MatchingUEidItem; +extern asn_SEQUENCE_specifics_t asn_SPC_MatchingUEidItem_specs_1; +extern asn_TYPE_member_t asn_MBR_MatchingUEidItem_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _MatchingUEidItem_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/MatchingUEidList.h b/e2sm/headers/MatchingUEidList.h new file mode 100644 index 0000000..4965f7d --- /dev/null +++ b/e2sm/headers/MatchingUEidList.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _MatchingUEidList_H_ +#define _MatchingUEidList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct MatchingUEidItem; + +/* MatchingUEidList */ +typedef struct MatchingUEidList { + A_SEQUENCE_OF(struct MatchingUEidItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MatchingUEidList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MatchingUEidList; +extern asn_SET_OF_specifics_t asn_SPC_MatchingUEidList_specs_1; +extern asn_TYPE_member_t asn_MBR_MatchingUEidList_1[1]; +extern asn_per_constraints_t asn_PER_type_MatchingUEidList_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _MatchingUEidList_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/MeasurementCondItem.h b/e2sm/headers/MeasurementCondItem.h new file mode 100644 index 0000000..8f664aa --- /dev/null +++ b/e2sm/headers/MeasurementCondItem.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _MeasurementCondItem_H_ +#define _MeasurementCondItem_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "MeasurementType.h" +#include "MatchingCondList.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* MeasurementCondItem */ +typedef struct MeasurementCondItem { + MeasurementType_t measType; + MatchingCondList_t matchingCond; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasurementCondItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasurementCondItem; +extern asn_SEQUENCE_specifics_t asn_SPC_MeasurementCondItem_specs_1; +extern asn_TYPE_member_t asn_MBR_MeasurementCondItem_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasurementCondItem_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/MeasurementCondList.h b/e2sm/headers/MeasurementCondList.h new file mode 100644 index 0000000..cccc4b8 --- /dev/null +++ b/e2sm/headers/MeasurementCondList.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _MeasurementCondList_H_ +#define _MeasurementCondList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct MeasurementCondItem; + +/* MeasurementCondList */ +typedef struct MeasurementCondList { + A_SEQUENCE_OF(struct MeasurementCondItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasurementCondList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasurementCondList; +extern asn_SET_OF_specifics_t asn_SPC_MeasurementCondList_specs_1; +extern asn_TYPE_member_t asn_MBR_MeasurementCondList_1[1]; +extern asn_per_constraints_t asn_PER_type_MeasurementCondList_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasurementCondList_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/MeasurementCondUEidItem.h b/e2sm/headers/MeasurementCondUEidItem.h new file mode 100644 index 0000000..2ea31d3 --- /dev/null +++ b/e2sm/headers/MeasurementCondUEidItem.h @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _MeasurementCondUEidItem_H_ +#define _MeasurementCondUEidItem_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "MeasurementType.h" +#include "MatchingCondList.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct MatchingUEidList; + +/* MeasurementCondUEidItem */ +typedef struct MeasurementCondUEidItem { + MeasurementType_t measType; + MatchingCondList_t matchingCond; + struct MatchingUEidList *matchingUEidList; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasurementCondUEidItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasurementCondUEidItem; +extern asn_SEQUENCE_specifics_t asn_SPC_MeasurementCondUEidItem_specs_1; +extern asn_TYPE_member_t asn_MBR_MeasurementCondUEidItem_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasurementCondUEidItem_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/MeasurementCondUEidList.h b/e2sm/headers/MeasurementCondUEidList.h new file mode 100644 index 0000000..0480f92 --- /dev/null +++ b/e2sm/headers/MeasurementCondUEidList.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _MeasurementCondUEidList_H_ +#define _MeasurementCondUEidList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct MeasurementCondUEidItem; + +/* MeasurementCondUEidList */ +typedef struct MeasurementCondUEidList { + A_SEQUENCE_OF(struct MeasurementCondUEidItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasurementCondUEidList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasurementCondUEidList; +extern asn_SET_OF_specifics_t asn_SPC_MeasurementCondUEidList_specs_1; +extern asn_TYPE_member_t asn_MBR_MeasurementCondUEidList_1[1]; +extern asn_per_constraints_t asn_PER_type_MeasurementCondUEidList_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasurementCondUEidList_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/MeasurementData.h b/e2sm/headers/MeasurementData.h new file mode 100644 index 0000000..e6c050d --- /dev/null +++ b/e2sm/headers/MeasurementData.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _MeasurementData_H_ +#define _MeasurementData_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct MeasurementDataItem; + +/* MeasurementData */ +typedef struct MeasurementData { + A_SEQUENCE_OF(struct MeasurementDataItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasurementData_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasurementData; +extern asn_SET_OF_specifics_t asn_SPC_MeasurementData_specs_1; +extern asn_TYPE_member_t asn_MBR_MeasurementData_1[1]; +extern asn_per_constraints_t asn_PER_type_MeasurementData_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasurementData_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/MeasurementDataItem.h b/e2sm/headers/MeasurementDataItem.h new file mode 100644 index 0000000..b9d1b21 --- /dev/null +++ b/e2sm/headers/MeasurementDataItem.h @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _MeasurementDataItem_H_ +#define _MeasurementDataItem_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "MeasurementRecord.h" +#include "NativeEnumerated.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum MeasurementDataItem__incompleteFlag { + MeasurementDataItem__incompleteFlag_true = 0 + /* + * Enumeration is extensible + */ +} e_MeasurementDataItem__incompleteFlag; + +/* MeasurementDataItem */ +typedef struct MeasurementDataItem { + MeasurementRecord_t measRecord; + long *incompleteFlag; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasurementDataItem_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_incompleteFlag_3; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_MeasurementDataItem; +extern asn_SEQUENCE_specifics_t asn_SPC_MeasurementDataItem_specs_1; +extern asn_TYPE_member_t asn_MBR_MeasurementDataItem_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasurementDataItem_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/MeasurementInfo-Action-Item.h b/e2sm/headers/MeasurementInfo-Action-Item.h new file mode 100644 index 0000000..ef69a19 --- /dev/null +++ b/e2sm/headers/MeasurementInfo-Action-Item.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _MeasurementInfo_Action_Item_H_ +#define _MeasurementInfo_Action_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "MeasurementTypeName.h" +#include "MeasurementTypeID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* MeasurementInfo-Action-Item */ +typedef struct MeasurementInfo_Action_Item { + MeasurementTypeName_t measName; + MeasurementTypeID_t *measID; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasurementInfo_Action_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasurementInfo_Action_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_MeasurementInfo_Action_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_MeasurementInfo_Action_Item_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasurementInfo_Action_Item_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/MeasurementInfo-Action-List.h b/e2sm/headers/MeasurementInfo-Action-List.h new file mode 100644 index 0000000..3faba93 --- /dev/null +++ b/e2sm/headers/MeasurementInfo-Action-List.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _MeasurementInfo_Action_List_H_ +#define _MeasurementInfo_Action_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct MeasurementInfo_Action_Item; + +/* MeasurementInfo-Action-List */ +typedef struct MeasurementInfo_Action_List { + A_SEQUENCE_OF(struct MeasurementInfo_Action_Item) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasurementInfo_Action_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasurementInfo_Action_List; +extern asn_SET_OF_specifics_t asn_SPC_MeasurementInfo_Action_List_specs_1; +extern asn_TYPE_member_t asn_MBR_MeasurementInfo_Action_List_1[1]; +extern asn_per_constraints_t asn_PER_type_MeasurementInfo_Action_List_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasurementInfo_Action_List_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/MeasurementInfoItem.h b/e2sm/headers/MeasurementInfoItem.h new file mode 100644 index 0000000..a9afa60 --- /dev/null +++ b/e2sm/headers/MeasurementInfoItem.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _MeasurementInfoItem_H_ +#define _MeasurementInfoItem_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "MeasurementType.h" +#include "LabelInfoList.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* MeasurementInfoItem */ +typedef struct MeasurementInfoItem { + MeasurementType_t measType; + LabelInfoList_t labelInfoList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasurementInfoItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasurementInfoItem; +extern asn_SEQUENCE_specifics_t asn_SPC_MeasurementInfoItem_specs_1; +extern asn_TYPE_member_t asn_MBR_MeasurementInfoItem_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasurementInfoItem_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/MeasurementInfoList.h b/e2sm/headers/MeasurementInfoList.h new file mode 100644 index 0000000..a7adc44 --- /dev/null +++ b/e2sm/headers/MeasurementInfoList.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _MeasurementInfoList_H_ +#define _MeasurementInfoList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct MeasurementInfoItem; + +/* MeasurementInfoList */ +typedef struct MeasurementInfoList { + A_SEQUENCE_OF(struct MeasurementInfoItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasurementInfoList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasurementInfoList; +extern asn_SET_OF_specifics_t asn_SPC_MeasurementInfoList_specs_1; +extern asn_TYPE_member_t asn_MBR_MeasurementInfoList_1[1]; +extern asn_per_constraints_t asn_PER_type_MeasurementInfoList_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasurementInfoList_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/MeasurementLabel.h b/e2sm/headers/MeasurementLabel.h new file mode 100644 index 0000000..7fc3e5a --- /dev/null +++ b/e2sm/headers/MeasurementLabel.h @@ -0,0 +1,124 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _MeasurementLabel_H_ +#define _MeasurementLabel_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" +#include "PLMNIdentity.h" +#include "FiveQI.h" +#include "QosFlowIdentifier.h" +#include "QCI.h" +#include "NativeInteger.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum MeasurementLabel__noLabel { + MeasurementLabel__noLabel_true = 0 + /* + * Enumeration is extensible + */ +} e_MeasurementLabel__noLabel; +typedef enum MeasurementLabel__sUM { + MeasurementLabel__sUM_true = 0 + /* + * Enumeration is extensible + */ +} e_MeasurementLabel__sUM; +typedef enum MeasurementLabel__preLabelOverride { + MeasurementLabel__preLabelOverride_true = 0 + /* + * Enumeration is extensible + */ +} e_MeasurementLabel__preLabelOverride; +typedef enum MeasurementLabel__startEndInd { + MeasurementLabel__startEndInd_start = 0, + MeasurementLabel__startEndInd_end = 1 + /* + * Enumeration is extensible + */ +} e_MeasurementLabel__startEndInd; +typedef enum MeasurementLabel__min { + MeasurementLabel__min_true = 0 + /* + * Enumeration is extensible + */ +} e_MeasurementLabel__min; +typedef enum MeasurementLabel__max { + MeasurementLabel__max_true = 0 + /* + * Enumeration is extensible + */ +} e_MeasurementLabel__max; +typedef enum MeasurementLabel__avg { + MeasurementLabel__avg_true = 0 + /* + * Enumeration is extensible + */ +} e_MeasurementLabel__avg; + +/* Forward declarations */ +struct S_NSSAI; + +/* MeasurementLabel */ +typedef struct MeasurementLabel { + long *noLabel; /* OPTIONAL */ + PLMNIdentity_t *plmnID; /* OPTIONAL */ + struct S_NSSAI *sliceID; /* OPTIONAL */ + FiveQI_t *fiveQI; /* OPTIONAL */ + QosFlowIdentifier_t *qFI; /* OPTIONAL */ + QCI_t *qCI; /* OPTIONAL */ + QCI_t *qCImax; /* OPTIONAL */ + QCI_t *qCImin; /* OPTIONAL */ + long *aRPmax; /* OPTIONAL */ + long *aRPmin; /* OPTIONAL */ + long *bitrateRange; /* OPTIONAL */ + long *layerMU_MIMO; /* OPTIONAL */ + long *sUM; /* OPTIONAL */ + long *distBinX; /* OPTIONAL */ + long *distBinY; /* OPTIONAL */ + long *distBinZ; /* OPTIONAL */ + long *preLabelOverride; /* OPTIONAL */ + long *startEndInd; /* OPTIONAL */ + long *min; /* OPTIONAL */ + long *max; /* OPTIONAL */ + long *avg; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasurementLabel_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_noLabel_2; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_sUM_16; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_preLabelOverride_22; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_startEndInd_25; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_min_29; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_max_32; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_avg_35; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_MeasurementLabel; +extern asn_SEQUENCE_specifics_t asn_SPC_MeasurementLabel_specs_1; +extern asn_TYPE_member_t asn_MBR_MeasurementLabel_1[21]; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasurementLabel_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/MeasurementRecord.h b/e2sm/headers/MeasurementRecord.h new file mode 100644 index 0000000..59505c6 --- /dev/null +++ b/e2sm/headers/MeasurementRecord.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _MeasurementRecord_H_ +#define _MeasurementRecord_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct MeasurementRecordItem; + +/* MeasurementRecord */ +typedef struct MeasurementRecord { + A_SEQUENCE_OF(struct MeasurementRecordItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasurementRecord_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasurementRecord; +extern asn_SET_OF_specifics_t asn_SPC_MeasurementRecord_specs_1; +extern asn_TYPE_member_t asn_MBR_MeasurementRecord_1[1]; +extern asn_per_constraints_t asn_PER_type_MeasurementRecord_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasurementRecord_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/MeasurementRecordItem.h b/e2sm/headers/MeasurementRecordItem.h new file mode 100644 index 0000000..cb06392 --- /dev/null +++ b/e2sm/headers/MeasurementRecordItem.h @@ -0,0 +1,63 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _MeasurementRecordItem_H_ +#define _MeasurementRecordItem_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" +#include "NativeReal.h" +#include "NULL.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum MeasurementRecordItem_PR { + MeasurementRecordItem_PR_NOTHING, /* No components present */ + MeasurementRecordItem_PR_integer, + MeasurementRecordItem_PR_real, + MeasurementRecordItem_PR_noValue + /* Extensions may appear below */ + +} MeasurementRecordItem_PR; + +/* MeasurementRecordItem */ +typedef struct MeasurementRecordItem { + MeasurementRecordItem_PR present; + union MeasurementRecordItem_u { + unsigned long integer; + double real; + NULL_t noValue; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasurementRecordItem_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_integer_2; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_MeasurementRecordItem; +extern asn_CHOICE_specifics_t asn_SPC_MeasurementRecordItem_specs_1; +extern asn_TYPE_member_t asn_MBR_MeasurementRecordItem_1[3]; +extern asn_per_constraints_t asn_PER_type_MeasurementRecordItem_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasurementRecordItem_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/MeasurementType.h b/e2sm/headers/MeasurementType.h new file mode 100644 index 0000000..9220004 --- /dev/null +++ b/e2sm/headers/MeasurementType.h @@ -0,0 +1,59 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _MeasurementType_H_ +#define _MeasurementType_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "MeasurementTypeName.h" +#include "MeasurementTypeID.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum MeasurementType_PR { + MeasurementType_PR_NOTHING, /* No components present */ + MeasurementType_PR_measName, + MeasurementType_PR_measID + /* Extensions may appear below */ + +} MeasurementType_PR; + +/* MeasurementType */ +typedef struct MeasurementType { + MeasurementType_PR present; + union MeasurementType_u { + MeasurementTypeName_t measName; + MeasurementTypeID_t measID; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasurementType_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasurementType; +extern asn_CHOICE_specifics_t asn_SPC_MeasurementType_specs_1; +extern asn_TYPE_member_t asn_MBR_MeasurementType_1[2]; +extern asn_per_constraints_t asn_PER_type_MeasurementType_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasurementType_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/MeasurementTypeID.h b/e2sm/headers/MeasurementTypeID.h new file mode 100644 index 0000000..ed3384a --- /dev/null +++ b/e2sm/headers/MeasurementTypeID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _MeasurementTypeID_H_ +#define _MeasurementTypeID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* MeasurementTypeID */ +typedef long MeasurementTypeID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_MeasurementTypeID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_MeasurementTypeID; +asn_struct_free_f MeasurementTypeID_free; +asn_struct_print_f MeasurementTypeID_print; +asn_constr_check_f MeasurementTypeID_constraint; +ber_type_decoder_f MeasurementTypeID_decode_ber; +der_type_encoder_f MeasurementTypeID_encode_der; +xer_type_decoder_f MeasurementTypeID_decode_xer; +xer_type_encoder_f MeasurementTypeID_encode_xer; +per_type_decoder_f MeasurementTypeID_decode_uper; +per_type_encoder_f MeasurementTypeID_encode_uper; +per_type_decoder_f MeasurementTypeID_decode_aper; +per_type_encoder_f MeasurementTypeID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasurementTypeID_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/MeasurementTypeName.h b/e2sm/headers/MeasurementTypeName.h new file mode 100644 index 0000000..4f3b826 --- /dev/null +++ b/e2sm/headers/MeasurementTypeName.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _MeasurementTypeName_H_ +#define _MeasurementTypeName_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PrintableString.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* MeasurementTypeName */ +typedef PrintableString_t MeasurementTypeName_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_MeasurementTypeName_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_MeasurementTypeName; +asn_struct_free_f MeasurementTypeName_free; +asn_struct_print_f MeasurementTypeName_print; +asn_constr_check_f MeasurementTypeName_constraint; +ber_type_decoder_f MeasurementTypeName_decode_ber; +der_type_encoder_f MeasurementTypeName_encode_der; +xer_type_decoder_f MeasurementTypeName_decode_xer; +xer_type_encoder_f MeasurementTypeName_encode_xer; +per_type_decoder_f MeasurementTypeName_decode_uper; +per_type_encoder_f MeasurementTypeName_encode_uper; +per_type_decoder_f MeasurementTypeName_decode_aper; +per_type_encoder_f MeasurementTypeName_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasurementTypeName_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/NG-RANnodeUEXnAPID.h b/e2sm/headers/NG-RANnodeUEXnAPID.h new file mode 100644 index 0000000..aedd06e --- /dev/null +++ b/e2sm/headers/NG-RANnodeUEXnAPID.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _NG_RANnodeUEXnAPID_H_ +#define _NG_RANnodeUEXnAPID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* NG-RANnodeUEXnAPID */ +typedef unsigned long NG_RANnodeUEXnAPID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_NG_RANnodeUEXnAPID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_NG_RANnodeUEXnAPID; +extern const asn_INTEGER_specifics_t asn_SPC_NG_RANnodeUEXnAPID_specs_1; +asn_struct_free_f NG_RANnodeUEXnAPID_free; +asn_struct_print_f NG_RANnodeUEXnAPID_print; +asn_constr_check_f NG_RANnodeUEXnAPID_constraint; +ber_type_decoder_f NG_RANnodeUEXnAPID_decode_ber; +der_type_encoder_f NG_RANnodeUEXnAPID_encode_der; +xer_type_decoder_f NG_RANnodeUEXnAPID_decode_xer; +xer_type_encoder_f NG_RANnodeUEXnAPID_encode_xer; +per_type_decoder_f NG_RANnodeUEXnAPID_decode_uper; +per_type_encoder_f NG_RANnodeUEXnAPID_encode_uper; +per_type_decoder_f NG_RANnodeUEXnAPID_decode_aper; +per_type_encoder_f NG_RANnodeUEXnAPID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _NG_RANnodeUEXnAPID_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/NGENB-CU-UE-W1AP-ID.h b/e2sm/headers/NGENB-CU-UE-W1AP-ID.h new file mode 100644 index 0000000..d8f0110 --- /dev/null +++ b/e2sm/headers/NGENB-CU-UE-W1AP-ID.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _NGENB_CU_UE_W1AP_ID_H_ +#define _NGENB_CU_UE_W1AP_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* NGENB-CU-UE-W1AP-ID */ +typedef unsigned long NGENB_CU_UE_W1AP_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_NGENB_CU_UE_W1AP_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_NGENB_CU_UE_W1AP_ID; +extern const asn_INTEGER_specifics_t asn_SPC_NGENB_CU_UE_W1AP_ID_specs_1; +asn_struct_free_f NGENB_CU_UE_W1AP_ID_free; +asn_struct_print_f NGENB_CU_UE_W1AP_ID_print; +asn_constr_check_f NGENB_CU_UE_W1AP_ID_constraint; +ber_type_decoder_f NGENB_CU_UE_W1AP_ID_decode_ber; +der_type_encoder_f NGENB_CU_UE_W1AP_ID_encode_der; +xer_type_decoder_f NGENB_CU_UE_W1AP_ID_decode_xer; +xer_type_encoder_f NGENB_CU_UE_W1AP_ID_encode_xer; +per_type_decoder_f NGENB_CU_UE_W1AP_ID_decode_uper; +per_type_encoder_f NGENB_CU_UE_W1AP_ID_encode_uper; +per_type_decoder_f NGENB_CU_UE_W1AP_ID_decode_aper; +per_type_encoder_f NGENB_CU_UE_W1AP_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _NGENB_CU_UE_W1AP_ID_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/NGENB-DU-ID.h b/e2sm/headers/NGENB-DU-ID.h new file mode 100644 index 0000000..8620e6a --- /dev/null +++ b/e2sm/headers/NGENB-DU-ID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _NGENB_DU_ID_H_ +#define _NGENB_DU_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "INTEGER.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* NGENB-DU-ID */ +typedef INTEGER_t NGENB_DU_ID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_NGENB_DU_ID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_NGENB_DU_ID; +asn_struct_free_f NGENB_DU_ID_free; +asn_struct_print_f NGENB_DU_ID_print; +asn_constr_check_f NGENB_DU_ID_constraint; +ber_type_decoder_f NGENB_DU_ID_decode_ber; +der_type_encoder_f NGENB_DU_ID_encode_der; +xer_type_decoder_f NGENB_DU_ID_decode_xer; +xer_type_encoder_f NGENB_DU_ID_encode_xer; +per_type_decoder_f NGENB_DU_ID_decode_uper; +per_type_encoder_f NGENB_DU_ID_encode_uper; +per_type_decoder_f NGENB_DU_ID_decode_aper; +per_type_encoder_f NGENB_DU_ID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _NGENB_DU_ID_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/NR-ARFCN.h b/e2sm/headers/NR-ARFCN.h new file mode 100644 index 0000000..53b6e94 --- /dev/null +++ b/e2sm/headers/NR-ARFCN.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _NR_ARFCN_H_ +#define _NR_ARFCN_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* NR-ARFCN */ +typedef struct NR_ARFCN { + long nRARFCN; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} NR_ARFCN_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_NR_ARFCN; +extern asn_SEQUENCE_specifics_t asn_SPC_NR_ARFCN_specs_1; +extern asn_TYPE_member_t asn_MBR_NR_ARFCN_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _NR_ARFCN_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/NR-CGI.h b/e2sm/headers/NR-CGI.h new file mode 100644 index 0000000..79dac62 --- /dev/null +++ b/e2sm/headers/NR-CGI.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _NR_CGI_H_ +#define _NR_CGI_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "PLMNIdentity.h" +#include "NRCellIdentity.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* NR-CGI */ +typedef struct NR_CGI { + PLMNIdentity_t pLMNIdentity; + NRCellIdentity_t nRCellIdentity; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} NR_CGI_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_NR_CGI; +extern asn_SEQUENCE_specifics_t asn_SPC_NR_CGI_specs_1; +extern asn_TYPE_member_t asn_MBR_NR_CGI_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _NR_CGI_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/NR-PCI.h b/e2sm/headers/NR-PCI.h new file mode 100644 index 0000000..14da2df --- /dev/null +++ b/e2sm/headers/NR-PCI.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _NR_PCI_H_ +#define _NR_PCI_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* NR-PCI */ +typedef long NR_PCI_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_NR_PCI_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_NR_PCI; +asn_struct_free_f NR_PCI_free; +asn_struct_print_f NR_PCI_print; +asn_constr_check_f NR_PCI_constraint; +ber_type_decoder_f NR_PCI_decode_ber; +der_type_encoder_f NR_PCI_encode_der; +xer_type_decoder_f NR_PCI_decode_xer; +xer_type_encoder_f NR_PCI_encode_xer; +per_type_decoder_f NR_PCI_decode_uper; +per_type_encoder_f NR_PCI_encode_uper; +per_type_decoder_f NR_PCI_decode_aper; +per_type_encoder_f NR_PCI_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _NR_PCI_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/NRCellIdentity.h b/e2sm/headers/NRCellIdentity.h index 8d893b1..5e140d5 100644 --- a/e2sm/headers/NRCellIdentity.h +++ b/e2sm/headers/NRCellIdentity.h @@ -1,18 +1,18 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) - * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #ifndef _NRCellIdentity_H_ #define _NRCellIdentity_H_ -#include +#include "asn_application.h" /* Including external dependencies */ -#include +#include "BIT_STRING.h" #ifdef __cplusplus extern "C" { @@ -31,8 +31,6 @@ ber_type_decoder_f NRCellIdentity_decode_ber; der_type_encoder_f NRCellIdentity_encode_der; xer_type_decoder_f NRCellIdentity_decode_xer; xer_type_encoder_f NRCellIdentity_encode_xer; -oer_type_decoder_f NRCellIdentity_decode_oer; -oer_type_encoder_f NRCellIdentity_encode_oer; per_type_decoder_f NRCellIdentity_decode_uper; per_type_encoder_f NRCellIdentity_encode_uper; per_type_decoder_f NRCellIdentity_decode_aper; @@ -43,4 +41,4 @@ per_type_encoder_f NRCellIdentity_encode_aper; #endif #endif /* _NRCellIdentity_H_ */ -#include +#include "asn_internal.h" diff --git a/e2sm/headers/NRFrequencyBand-List.h b/e2sm/headers/NRFrequencyBand-List.h new file mode 100644 index 0000000..9bee34d --- /dev/null +++ b/e2sm/headers/NRFrequencyBand-List.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _NRFrequencyBand_List_H_ +#define _NRFrequencyBand_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct NRFrequencyBandItem; + +/* NRFrequencyBand-List */ +typedef struct NRFrequencyBand_List { + A_SEQUENCE_OF(struct NRFrequencyBandItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} NRFrequencyBand_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_NRFrequencyBand_List; +extern asn_SET_OF_specifics_t asn_SPC_NRFrequencyBand_List_specs_1; +extern asn_TYPE_member_t asn_MBR_NRFrequencyBand_List_1[1]; +extern asn_per_constraints_t asn_PER_type_NRFrequencyBand_List_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _NRFrequencyBand_List_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/NRFrequencyBandItem.h b/e2sm/headers/NRFrequencyBandItem.h new file mode 100644 index 0000000..0970b9b --- /dev/null +++ b/e2sm/headers/NRFrequencyBandItem.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _NRFrequencyBandItem_H_ +#define _NRFrequencyBandItem_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" +#include "SupportedSULBandList.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* NRFrequencyBandItem */ +typedef struct NRFrequencyBandItem { + long freqBandIndicatorNr; + SupportedSULBandList_t supportedSULBandList; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} NRFrequencyBandItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_NRFrequencyBandItem; +extern asn_SEQUENCE_specifics_t asn_SPC_NRFrequencyBandItem_specs_1; +extern asn_TYPE_member_t asn_MBR_NRFrequencyBandItem_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _NRFrequencyBandItem_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/NRFrequencyInfo.h b/e2sm/headers/NRFrequencyInfo.h new file mode 100644 index 0000000..80a8af5 --- /dev/null +++ b/e2sm/headers/NRFrequencyInfo.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _NRFrequencyInfo_H_ +#define _NRFrequencyInfo_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NR-ARFCN.h" +#include "NRFrequencyBand-List.h" +#include "NRFrequencyShift7p5khz.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* NRFrequencyInfo */ +typedef struct NRFrequencyInfo { + NR_ARFCN_t nrARFCN; + NRFrequencyBand_List_t frequencyBand_List; + NRFrequencyShift7p5khz_t *frequencyShift7p5khz; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} NRFrequencyInfo_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_NRFrequencyInfo; + +#ifdef __cplusplus +} +#endif + +#endif /* _NRFrequencyInfo_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/NRFrequencyShift7p5khz.h b/e2sm/headers/NRFrequencyShift7p5khz.h new file mode 100644 index 0000000..a881515 --- /dev/null +++ b/e2sm/headers/NRFrequencyShift7p5khz.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _NRFrequencyShift7p5khz_H_ +#define _NRFrequencyShift7p5khz_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum NRFrequencyShift7p5khz { + NRFrequencyShift7p5khz_false = 0, + NRFrequencyShift7p5khz_true = 1 + /* + * Enumeration is extensible + */ +} e_NRFrequencyShift7p5khz; + +/* NRFrequencyShift7p5khz */ +typedef long NRFrequencyShift7p5khz_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_NRFrequencyShift7p5khz_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_NRFrequencyShift7p5khz; +extern const asn_INTEGER_specifics_t asn_SPC_NRFrequencyShift7p5khz_specs_1; +asn_struct_free_f NRFrequencyShift7p5khz_free; +asn_struct_print_f NRFrequencyShift7p5khz_print; +asn_constr_check_f NRFrequencyShift7p5khz_constraint; +ber_type_decoder_f NRFrequencyShift7p5khz_decode_ber; +der_type_encoder_f NRFrequencyShift7p5khz_encode_der; +xer_type_decoder_f NRFrequencyShift7p5khz_decode_xer; +xer_type_encoder_f NRFrequencyShift7p5khz_encode_xer; +per_type_decoder_f NRFrequencyShift7p5khz_decode_uper; +per_type_encoder_f NRFrequencyShift7p5khz_encode_uper; +per_type_decoder_f NRFrequencyShift7p5khz_decode_aper; +per_type_encoder_f NRFrequencyShift7p5khz_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _NRFrequencyShift7p5khz_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/NULL.h b/e2sm/headers/NULL.h new file mode 100644 index 0000000..802d12c --- /dev/null +++ b/e2sm/headers/NULL.h @@ -0,0 +1,45 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_TYPE_NULL_H +#define ASN_TYPE_NULL_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * The value of the NULL type is meaningless: see BOOLEAN if you want to + * carry true/false semantics. + */ +typedef int NULL_t; + +extern asn_TYPE_descriptor_t asn_DEF_NULL; +extern asn_TYPE_operation_t asn_OP_NULL; + +asn_struct_print_f NULL_print; +asn_struct_compare_f NULL_compare; +der_type_encoder_f NULL_encode_der; +xer_type_decoder_f NULL_decode_xer; +xer_type_encoder_f NULL_encode_xer; +oer_type_decoder_f NULL_decode_oer; +oer_type_encoder_f NULL_encode_oer; +per_type_decoder_f NULL_decode_uper; +per_type_encoder_f NULL_encode_uper; +per_type_decoder_f NULL_decode_aper; +per_type_encoder_f NULL_encode_aper; +asn_random_fill_f NULL_random_fill; + +#define NULL_free BOOLEAN_free +#define NULL_decode_ber BOOLEAN_decode_ber +#define NULL_constraint asn_generic_no_constraint + +#ifdef __cplusplus +} +#endif + +#endif /* NULL_H */ diff --git a/e2sm/headers/NativeReal.h b/e2sm/headers/NativeReal.h new file mode 100644 index 0000000..1bfdc96 --- /dev/null +++ b/e2sm/headers/NativeReal.h @@ -0,0 +1,48 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * This type differs from the standard REAL in that it is modelled using + * the fixed machine type (double), so it can hold only values of + * limited precision. There is no explicit type (i.e., NativeReal_t). + * Use of this type is normally enabled by -fnative-types. + */ +#ifndef ASN_TYPE_NativeReal_H +#define ASN_TYPE_NativeReal_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct asn_NativeReal_specifics_s { + unsigned float_size; /* sizeof(float) or sizeof(double) */ +} asn_NativeReal_specifics_t; + +extern asn_TYPE_descriptor_t asn_DEF_NativeReal; +extern asn_TYPE_operation_t asn_OP_NativeReal; + +asn_struct_free_f NativeReal_free; +asn_struct_print_f NativeReal_print; +asn_struct_compare_f NativeReal_compare; +ber_type_decoder_f NativeReal_decode_ber; +der_type_encoder_f NativeReal_encode_der; +per_type_decoder_f NativeReal_decode_uper; +per_type_encoder_f NativeReal_encode_uper; +per_type_decoder_f NativeReal_decode_aper; +per_type_encoder_f NativeReal_encode_aper; +oer_type_decoder_f NativeReal_decode_oer; +oer_type_encoder_f NativeReal_encode_oer; +xer_type_decoder_f NativeReal_decode_xer; +xer_type_encoder_f NativeReal_encode_xer; +asn_random_fill_f NativeReal_random_fill; + +#define NativeReal_constraint asn_generic_no_constraint + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_TYPE_NativeReal_H */ diff --git a/e2sm/headers/NgENB-ID.h b/e2sm/headers/NgENB-ID.h new file mode 100644 index 0000000..5c9af18 --- /dev/null +++ b/e2sm/headers/NgENB-ID.h @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _NgENB_ID_H_ +#define _NgENB_ID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "BIT_STRING.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum NgENB_ID_PR { + NgENB_ID_PR_NOTHING, /* No components present */ + NgENB_ID_PR_macroNgENB_ID, + NgENB_ID_PR_shortMacroNgENB_ID, + NgENB_ID_PR_longMacroNgENB_ID + /* Extensions may appear below */ + +} NgENB_ID_PR; + +/* NgENB-ID */ +typedef struct NgENB_ID { + NgENB_ID_PR present; + union NgENB_ID_u { + BIT_STRING_t macroNgENB_ID; + BIT_STRING_t shortMacroNgENB_ID; + BIT_STRING_t longMacroNgENB_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} NgENB_ID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_NgENB_ID; +extern asn_CHOICE_specifics_t asn_SPC_NgENB_ID_specs_1; +extern asn_TYPE_member_t asn_MBR_NgENB_ID_1[3]; +extern asn_per_constraints_t asn_PER_type_NgENB_ID_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _NgENB_ID_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/NumericString.h b/e2sm/headers/NumericString.h new file mode 100644 index 0000000..5f33484 --- /dev/null +++ b/e2sm/headers/NumericString.h @@ -0,0 +1,37 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _NumericString_H_ +#define _NumericString_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef OCTET_STRING_t NumericString_t; /* Implemented via OCTET STRING */ + +extern asn_TYPE_descriptor_t asn_DEF_NumericString; +extern asn_TYPE_operation_t asn_OP_NumericString; + +asn_constr_check_f NumericString_constraint; + +#define NumericString_free OCTET_STRING_free +#define NumericString_print OCTET_STRING_print_utf8 +#define NumericString_compare OCTET_STRING_compare +#define NumericString_decode_ber OCTET_STRING_decode_ber +#define NumericString_encode_der OCTET_STRING_encode_der +#define NumericString_decode_xer OCTET_STRING_decode_xer_utf8 +#define NumericString_encode_xer OCTET_STRING_encode_xer_utf8 +#define NumericString_decode_uper OCTET_STRING_decode_uper +#define NumericString_encode_uper OCTET_STRING_encode_uper +#define NumericString_decode_aper OCTET_STRING_decode_aper +#define NumericString_encode_aper OCTET_STRING_encode_aper + +#ifdef __cplusplus +} +#endif + +#endif /* _NumericString_H_ */ diff --git a/e2sm/headers/OBJECT_IDENTIFIER.h b/e2sm/headers/OBJECT_IDENTIFIER.h new file mode 100644 index 0000000..087c6fd --- /dev/null +++ b/e2sm/headers/OBJECT_IDENTIFIER.h @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _OBJECT_IDENTIFIER_H_ +#define _OBJECT_IDENTIFIER_H_ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef uint32_t asn_oid_arc_t; +#define ASN_OID_ARC_MAX (~((asn_oid_arc_t)0)) + +typedef ASN__PRIMITIVE_TYPE_t OBJECT_IDENTIFIER_t; + +extern asn_TYPE_descriptor_t asn_DEF_OBJECT_IDENTIFIER; +extern asn_TYPE_operation_t asn_OP_OBJECT_IDENTIFIER; + +asn_struct_print_f OBJECT_IDENTIFIER_print; +asn_constr_check_f OBJECT_IDENTIFIER_constraint; +der_type_encoder_f OBJECT_IDENTIFIER_encode_der; +xer_type_decoder_f OBJECT_IDENTIFIER_decode_xer; +xer_type_encoder_f OBJECT_IDENTIFIER_encode_xer; +asn_random_fill_f OBJECT_IDENTIFIER_random_fill; + +#define OBJECT_IDENTIFIER_free ASN__PRIMITIVE_TYPE_free +#define OBJECT_IDENTIFIER_compare OCTET_STRING_compare +#define OBJECT_IDENTIFIER_decode_ber ber_decode_primitive +#define OBJECT_IDENTIFIER_encode_der der_encode_primitive +#define OBJECT_IDENTIFIER_decode_oer oer_decode_primitive +#define OBJECT_IDENTIFIER_encode_oer oer_encode_primitive +#define OBJECT_IDENTIFIER_decode_uper OCTET_STRING_decode_uper +#define OBJECT_IDENTIFIER_encode_uper OCTET_STRING_encode_uper +#define OBJECT_IDENTIFIER_decode_aper OCTET_STRING_decode_aper +#define OBJECT_IDENTIFIER_encode_aper OCTET_STRING_encode_aper + +/********************************** + * Some handy conversion routines * + **********************************/ + +/* + * This function fills an (arcs) array with OBJECT IDENTIFIER arcs + * up to specified (arc_slots) elements. + * + * EXAMPLE: + * void print_arcs(OBJECT_IDENTIFIER_t *oid) { + * asn_oid_arc_t fixed_arcs[10]; // Try with fixed space first + * asn_oid_arc_t *arcs = fixed_arcs; + * size_t arc_slots = sizeof(fixed_arcs)/sizeof(fixed_arcs[0]); // 10 + * ssize_t count; // Real number of arcs. + * int i; + * + * count = OBJECT_IDENTIFIER_get_arcs(oid, arcs, arc_slots); + * // If necessary, reallocate arcs array and try again. + * if(count > arc_slots) { + * arc_slots = count; + * arcs = malloc(sizeof(asn_oid_arc_t) * arc_slots); + * if(!arcs) return; + * count = OBJECT_IDENTIFIER_get_arcs(oid, arcs, arc_slots); + * assert(count == arc_slots); + * } + * + * // Print the contents of the arcs array. + * for(i = 0; i < count; i++) + * printf("%"PRIu32"\n", arcs[i]); + * + * // Avoid memory leak. + * if(arcs != fixed_arcs) free(arcs); + * } + * + * RETURN VALUES: + * -1/EINVAL: Invalid arguments (oid is missing) + * -1/ERANGE: One or more arcs have value out of array cell type range. + * >=0: Number of arcs contained in the OBJECT IDENTIFIER + * + * WARNING: The function always returns the actual number of arcs, + * even if there is no sufficient (arc_slots) provided. + */ +ssize_t OBJECT_IDENTIFIER_get_arcs(const OBJECT_IDENTIFIER_t *oid, + asn_oid_arc_t *arcs, size_t arc_slots); + +/* + * This functions initializes the OBJECT IDENTIFIER object with + * the given set of arcs. + * The minimum of two arcs must be present; some restrictions apply. + * RETURN VALUES: + * -1/EINVAL: Invalid arguments + * -1/ERANGE: The first two arcs do not conform to ASN.1 restrictions. + * -1/ENOMEM: Memory allocation failed + * 0: The object was initialized with new arcs. + */ +int OBJECT_IDENTIFIER_set_arcs(OBJECT_IDENTIFIER_t *oid, + const asn_oid_arc_t *arcs, size_t arcs_count); + + +/* + * Parse the OBJECT IDENTIFIER textual representation ("1.3.6.1.4.1.9363"). + * No arc can exceed the (0..ASN_OID_ARC_MAX, which is the same as UINT32_MAX). + * This function is not specific to OBJECT IDENTIFIER, it may be used to parse + * the RELATIVE-OID data, or any other data consisting of dot-separated + * series of numeric values. + * + * If (oid_txt_length == -1), the strlen() will be invoked to determine the + * size of the (oid_text) string. + * + * After return, the optional (opt_oid_text_end) is set to the character after + * the last parsed one. (opt_oid_text_end) is never less than (oid_text). + * + * RETURN VALUES: + * -1: Parse error. + * >= 0: Number of arcs contained in the OBJECT IDENTIFIER. + * + * WARNING: The function always returns the real number of arcs, + * even if there is no sufficient (arc_slots) provided. + * This is useful for (arc_slots) value estimation. + */ +ssize_t OBJECT_IDENTIFIER_parse_arcs(const char *oid_text, + ssize_t oid_txt_length, + asn_oid_arc_t *arcs, size_t arcs_count, + const char **opt_oid_text_end); + +/* + * Internal functions. + * Used by RELATIVE-OID implementation in particular. + */ + +/* + * Retrieve a single arc of size from the (arcbuf) buffer. + * RETURN VALUES: + * -1: Failed to retrieve the value from the (arcbuf). + * >0: Number of bytes consumed from the (arcbuf), <= (arcbuf_len). + */ +ssize_t OBJECT_IDENTIFIER_get_single_arc(const uint8_t *arcbuf, + size_t arcbuf_len, + asn_oid_arc_t *ret_value); + +/* + * Write the unterminated arc value into the (arcbuf) which has the size at + * least (arcbuf_len). + * RETURN VALUES: + * -1: (arcbuf_len) size is not sufficient to write the value. + * : Number of bytes appended to the arcbuf (<= arcbuf_len). + */ +ssize_t OBJECT_IDENTIFIER_set_single_arc(uint8_t *arcbuf, size_t arcbuf_len, + asn_oid_arc_t arc_value); + +#ifdef __cplusplus +} +#endif + +#endif /* _OBJECT_IDENTIFIER_H_ */ diff --git a/e2sm/headers/ObjectDescriptor.h b/e2sm/headers/ObjectDescriptor.h new file mode 100644 index 0000000..fa1c1fc --- /dev/null +++ b/e2sm/headers/ObjectDescriptor.h @@ -0,0 +1,35 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _ObjectDescriptor_H_ +#define _ObjectDescriptor_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef GraphicString_t ObjectDescriptor_t; /* Implemented via GraphicString */ + +extern asn_TYPE_descriptor_t asn_DEF_ObjectDescriptor; +extern asn_TYPE_operation_t asn_OP_ObjectDescriptor; + +#define ObjectDescriptor_free OCTET_STRING_free +#define ObjectDescriptor_print OCTET_STRING_print_utf8 +#define ObjectDescriptor_constraint asn_generic_unknown_constraint +#define ObjectDescriptor_decode_ber OCTET_STRING_decode_ber +#define ObjectDescriptor_encode_der OCTET_STRING_encode_der +#define ObjectDescriptor_decode_xer OCTET_STRING_decode_xer_utf8 +#define ObjectDescriptor_encode_xer OCTET_STRING_encode_xer_utf8 +#define ObjectDescriptor_decode_uper OCTET_STRING_decode_uper +#define ObjectDescriptor_encode_uper OCTET_STRING_encode_uper +#define ObjectDescriptor_decode_aper OCTET_STRING_decode_aper +#define ObjectDescriptor_encode_aper OCTET_STRING_encode_aper + +#ifdef __cplusplus +} +#endif + +#endif /* _ObjectDescriptor_H_ */ diff --git a/e2sm/headers/PLMNIdentity.h b/e2sm/headers/PLMNIdentity.h new file mode 100644 index 0000000..b1950c6 --- /dev/null +++ b/e2sm/headers/PLMNIdentity.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _PLMNIdentity_H_ +#define _PLMNIdentity_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* PLMNIdentity */ +typedef OCTET_STRING_t PLMNIdentity_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_PLMNIdentity_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_PLMNIdentity; +asn_struct_free_f PLMNIdentity_free; +asn_struct_print_f PLMNIdentity_print; +asn_constr_check_f PLMNIdentity_constraint; +ber_type_decoder_f PLMNIdentity_decode_ber; +der_type_encoder_f PLMNIdentity_encode_der; +xer_type_decoder_f PLMNIdentity_decode_xer; +xer_type_encoder_f PLMNIdentity_encode_xer; +per_type_decoder_f PLMNIdentity_decode_uper; +per_type_encoder_f PLMNIdentity_encode_uper; +per_type_decoder_f PLMNIdentity_decode_aper; +per_type_encoder_f PLMNIdentity_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _PLMNIdentity_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/QCI.h b/e2sm/headers/QCI.h new file mode 100644 index 0000000..4738a97 --- /dev/null +++ b/e2sm/headers/QCI.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _QCI_H_ +#define _QCI_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* QCI */ +typedef long QCI_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_QCI_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_QCI; +asn_struct_free_f QCI_free; +asn_struct_print_f QCI_print; +asn_constr_check_f QCI_constraint; +ber_type_decoder_f QCI_decode_ber; +der_type_encoder_f QCI_encode_der; +xer_type_decoder_f QCI_decode_xer; +xer_type_encoder_f QCI_encode_xer; +per_type_decoder_f QCI_decode_uper; +per_type_encoder_f QCI_encode_uper; +per_type_decoder_f QCI_decode_aper; +per_type_encoder_f QCI_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _QCI_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/QoSID.h b/e2sm/headers/QoSID.h new file mode 100644 index 0000000..4ec28a4 --- /dev/null +++ b/e2sm/headers/QoSID.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _QoSID_H_ +#define _QoSID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "FiveQI.h" +#include "QCI.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum QoSID_PR { + QoSID_PR_NOTHING, /* No components present */ + QoSID_PR_fiveGC, + QoSID_PR_ePC + /* Extensions may appear below */ + +} QoSID_PR; + +/* QoSID */ +typedef struct QoSID { + QoSID_PR present; + union QoSID_u { + FiveQI_t fiveGC; + QCI_t ePC; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} QoSID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_QoSID; + +#ifdef __cplusplus +} +#endif + +#endif /* _QoSID_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/QosFlowIdentifier.h b/e2sm/headers/QosFlowIdentifier.h new file mode 100644 index 0000000..8e8c709 --- /dev/null +++ b/e2sm/headers/QosFlowIdentifier.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _QosFlowIdentifier_H_ +#define _QosFlowIdentifier_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* QosFlowIdentifier */ +typedef long QosFlowIdentifier_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_QosFlowIdentifier_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_QosFlowIdentifier; +asn_struct_free_f QosFlowIdentifier_free; +asn_struct_print_f QosFlowIdentifier_print; +asn_constr_check_f QosFlowIdentifier_constraint; +ber_type_decoder_f QosFlowIdentifier_decode_ber; +der_type_encoder_f QosFlowIdentifier_encode_der; +xer_type_decoder_f QosFlowIdentifier_decode_xer; +xer_type_encoder_f QosFlowIdentifier_encode_xer; +per_type_decoder_f QosFlowIdentifier_decode_uper; +per_type_encoder_f QosFlowIdentifier_encode_uper; +per_type_decoder_f QosFlowIdentifier_decode_aper; +per_type_encoder_f QosFlowIdentifier_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _QosFlowIdentifier_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/RANUEID.h b/e2sm/headers/RANUEID.h new file mode 100644 index 0000000..1ef8b24 --- /dev/null +++ b/e2sm/headers/RANUEID.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _RANUEID_H_ +#define _RANUEID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RANUEID */ +typedef OCTET_STRING_t RANUEID_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RANUEID_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RANUEID; +asn_struct_free_f RANUEID_free; +asn_struct_print_f RANUEID_print; +asn_constr_check_f RANUEID_constraint; +ber_type_decoder_f RANUEID_decode_ber; +der_type_encoder_f RANUEID_encode_der; +xer_type_decoder_f RANUEID_decode_xer; +xer_type_encoder_f RANUEID_encode_xer; +per_type_decoder_f RANUEID_decode_uper; +per_type_encoder_f RANUEID_encode_uper; +per_type_decoder_f RANUEID_decode_aper; +per_type_encoder_f RANUEID_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RANUEID_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/RANfunction-Name.h b/e2sm/headers/RANfunction-Name.h index 2c07207..970d4fb 100644 --- a/e2sm/headers/RANfunction-Name.h +++ b/e2sm/headers/RANfunction-Name.h @@ -1,20 +1,20 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) - * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #ifndef _RANfunction_Name_H_ #define _RANfunction_Name_H_ -#include +#include "asn_application.h" /* Including external dependencies */ -#include -#include -#include +#include "PrintableString.h" +#include "NativeInteger.h" +#include "constr_SEQUENCE.h" #ifdef __cplusplus extern "C" { @@ -45,4 +45,4 @@ extern asn_TYPE_member_t asn_MBR_RANfunction_Name_1[4]; #endif #endif /* _RANfunction_Name_H_ */ -#include +#include "asn_internal.h" diff --git a/e2sm/headers/REAL.h b/e2sm/headers/REAL.h new file mode 100644 index 0000000..fce6714 --- /dev/null +++ b/e2sm/headers/REAL.h @@ -0,0 +1,67 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_TYPE_REAL_H +#define ASN_TYPE_REAL_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef ASN__PRIMITIVE_TYPE_t REAL_t; + +extern asn_TYPE_descriptor_t asn_DEF_REAL; +extern asn_TYPE_operation_t asn_OP_REAL; + +asn_struct_print_f REAL_print; +asn_struct_compare_f REAL_compare; +oer_type_decoder_f REAL_decode_oer; +oer_type_encoder_f REAL_encode_oer; +per_type_decoder_f REAL_decode_uper; +per_type_encoder_f REAL_encode_uper; +per_type_decoder_f REAL_decode_aper; +per_type_encoder_f REAL_encode_aper; +xer_type_decoder_f REAL_decode_xer; +xer_type_encoder_f REAL_encode_xer; +asn_random_fill_f REAL_random_fill; + +#define REAL_free ASN__PRIMITIVE_TYPE_free, +#define REAL_constraint asn_generic_no_constraint +#define REAL_decode_ber ber_decode_primitive +#define REAL_encode_der der_encode_primitive + +/*********************************** + * Some handy conversion routines. * + ***********************************/ + +ssize_t REAL__dump(double d, int canonical, asn_app_consume_bytes_f *cb, void *app_key); + +/* + * Convert between native double type and REAL representation (DER). + * RETURN VALUES: + * 0: Value converted successfully + * -1: An error occured while converting the value: invalid format. + */ +int asn_REAL2double(const REAL_t *real_ptr, double *d); +int asn_double2REAL(REAL_t *real_ptr, double d); + +/* + * Downcast double to float while checking that no overflow occurs. + * This allows stricter control of the input data. + * RETURN VALUES: + * 0: The conversion was successful (perhaps with a loss of precision) + * -1: The conversion created overflow into infinities. + * The (outcome) is ALWAYS set to a value you'd expect from the + * standard silent float to double conversion behavior. + */ +int asn_double2float(double d, float *outcome); + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_TYPE_REAL_H */ diff --git a/e2sm/headers/RELATIVE-OID.h b/e2sm/headers/RELATIVE-OID.h new file mode 100644 index 0000000..a51bf51 --- /dev/null +++ b/e2sm/headers/RELATIVE-OID.h @@ -0,0 +1,53 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _RELATIVE_OID_H_ +#define _RELATIVE_OID_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Implemented via OBJECT IDENTIFIER */ +typedef OBJECT_IDENTIFIER_t RELATIVE_OID_t; + +extern asn_TYPE_descriptor_t asn_DEF_RELATIVE_OID; +extern asn_TYPE_operation_t asn_OP_RELATIVE_OID; + +asn_struct_print_f RELATIVE_OID_print; +xer_type_decoder_f RELATIVE_OID_decode_xer; +xer_type_encoder_f RELATIVE_OID_encode_xer; +asn_random_fill_f RELATIVE_OID_random_fill; + +#define RELATIVE_OID_free ASN__PRIMITIVE_TYPE_free +#define RELATIVE_OID_compare OCTET_STRING_compare +#define RELATIVE_OID_constraint asn_generic_no_constraint +#define RELATIVE_OID_decode_ber ber_decode_primitive +#define RELATIVE_OID_encode_der der_encode_primitive +#define RELATIVE_OID_decode_oer oer_decode_primitive +#define RELATIVE_OID_encode_oer oer_encode_primitive +#define RELATIVE_OID_decode_uper OCTET_STRING_decode_uper +#define RELATIVE_OID_encode_uper OCTET_STRING_encode_uper +#define RELATIVE_OID_decode_aper OCTET_STRING_decode_aper +#define RELATIVE_OID_encode_aper OCTET_STRING_encode_aper + +/********************************** + * Some handy conversion routines * + **********************************/ + +/* See OBJECT_IDENTIFIER_get_arcs() function in OBJECT_IDENTIFIER.h */ +ssize_t RELATIVE_OID_get_arcs(const RELATIVE_OID_t *, asn_oid_arc_t *arcs, + size_t arcs_count); + +/* See OBJECT_IDENTIFIER_set_arcs() function in OBJECT_IDENTIFIER.h */ +int RELATIVE_OID_set_arcs(RELATIVE_OID_t *, const asn_oid_arc_t *arcs, + size_t arcs_count); + +#ifdef __cplusplus +} +#endif + +#endif /* _RELATIVE_OID_H_ */ diff --git a/e2sm/headers/RIC-EventTriggerStyle-Item.h b/e2sm/headers/RIC-EventTriggerStyle-Item.h new file mode 100644 index 0000000..25b20cd --- /dev/null +++ b/e2sm/headers/RIC-EventTriggerStyle-Item.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _RIC_EventTriggerStyle_Item_H_ +#define _RIC_EventTriggerStyle_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RIC-Style-Type.h" +#include "RIC-Style-Name.h" +#include "RIC-Format-Type.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RIC-EventTriggerStyle-Item */ +typedef struct RIC_EventTriggerStyle_Item { + RIC_Style_Type_t ric_EventTriggerStyle_Type; + RIC_Style_Name_t ric_EventTriggerStyle_Name; + RIC_Format_Type_t ric_EventTriggerFormat_Type; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RIC_EventTriggerStyle_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RIC_EventTriggerStyle_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_RIC_EventTriggerStyle_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_RIC_EventTriggerStyle_Item_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RIC_EventTriggerStyle_Item_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/RIC-Format-Type.h b/e2sm/headers/RIC-Format-Type.h index 5dfd41e..d145ebf 100644 --- a/e2sm/headers/RIC-Format-Type.h +++ b/e2sm/headers/RIC-Format-Type.h @@ -1,18 +1,18 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) - * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #ifndef _RIC_Format_Type_H_ #define _RIC_Format_Type_H_ -#include +#include "asn_application.h" /* Including external dependencies */ -#include +#include "NativeInteger.h" #ifdef __cplusplus extern "C" { @@ -30,8 +30,6 @@ ber_type_decoder_f RIC_Format_Type_decode_ber; der_type_encoder_f RIC_Format_Type_encode_der; xer_type_decoder_f RIC_Format_Type_decode_xer; xer_type_encoder_f RIC_Format_Type_encode_xer; -oer_type_decoder_f RIC_Format_Type_decode_oer; -oer_type_encoder_f RIC_Format_Type_encode_oer; per_type_decoder_f RIC_Format_Type_decode_uper; per_type_encoder_f RIC_Format_Type_encode_uper; per_type_decoder_f RIC_Format_Type_decode_aper; @@ -42,4 +40,4 @@ per_type_encoder_f RIC_Format_Type_encode_aper; #endif #endif /* _RIC_Format_Type_H_ */ -#include +#include "asn_internal.h" diff --git a/e2sm/headers/RIC-ReportStyle-Item.h b/e2sm/headers/RIC-ReportStyle-Item.h new file mode 100644 index 0000000..80194fb --- /dev/null +++ b/e2sm/headers/RIC-ReportStyle-Item.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _RIC_ReportStyle_Item_H_ +#define _RIC_ReportStyle_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "RIC-Style-Type.h" +#include "RIC-Style-Name.h" +#include "RIC-Format-Type.h" +#include "MeasurementInfo-Action-List.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* RIC-ReportStyle-Item */ +typedef struct RIC_ReportStyle_Item { + RIC_Style_Type_t ric_ReportStyle_Type; + RIC_Style_Name_t ric_ReportStyle_Name; + RIC_Format_Type_t ric_ActionFormat_Type; + MeasurementInfo_Action_List_t measInfo_Action_List; + RIC_Format_Type_t ric_IndicationHeaderFormat_Type; + RIC_Format_Type_t ric_IndicationMessageFormat_Type; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RIC_ReportStyle_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RIC_ReportStyle_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_RIC_ReportStyle_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_RIC_ReportStyle_Item_1[6]; + +#ifdef __cplusplus +} +#endif + +#endif /* _RIC_ReportStyle_Item_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/RIC-Style-Name.h b/e2sm/headers/RIC-Style-Name.h index 8057272..351a9db 100644 --- a/e2sm/headers/RIC-Style-Name.h +++ b/e2sm/headers/RIC-Style-Name.h @@ -1,18 +1,18 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) - * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #ifndef _RIC_Style_Name_H_ #define _RIC_Style_Name_H_ -#include +#include "asn_application.h" /* Including external dependencies */ -#include +#include "PrintableString.h" #ifdef __cplusplus extern "C" { @@ -31,8 +31,6 @@ ber_type_decoder_f RIC_Style_Name_decode_ber; der_type_encoder_f RIC_Style_Name_encode_der; xer_type_decoder_f RIC_Style_Name_decode_xer; xer_type_encoder_f RIC_Style_Name_encode_xer; -oer_type_decoder_f RIC_Style_Name_decode_oer; -oer_type_encoder_f RIC_Style_Name_encode_oer; per_type_decoder_f RIC_Style_Name_decode_uper; per_type_encoder_f RIC_Style_Name_encode_uper; per_type_decoder_f RIC_Style_Name_decode_aper; @@ -43,4 +41,4 @@ per_type_encoder_f RIC_Style_Name_encode_aper; #endif #endif /* _RIC_Style_Name_H_ */ -#include +#include "asn_internal.h" diff --git a/e2sm/headers/RIC-Style-Type.h b/e2sm/headers/RIC-Style-Type.h index be717bf..66835d5 100644 --- a/e2sm/headers/RIC-Style-Type.h +++ b/e2sm/headers/RIC-Style-Type.h @@ -1,18 +1,18 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) - * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #ifndef _RIC_Style_Type_H_ #define _RIC_Style_Type_H_ -#include +#include "asn_application.h" /* Including external dependencies */ -#include +#include "NativeInteger.h" #ifdef __cplusplus extern "C" { @@ -30,8 +30,6 @@ ber_type_decoder_f RIC_Style_Type_decode_ber; der_type_encoder_f RIC_Style_Type_encode_der; xer_type_decoder_f RIC_Style_Type_decode_xer; xer_type_encoder_f RIC_Style_Type_encode_xer; -oer_type_decoder_f RIC_Style_Type_decode_oer; -oer_type_encoder_f RIC_Style_Type_encode_oer; per_type_decoder_f RIC_Style_Type_decode_uper; per_type_encoder_f RIC_Style_Type_encode_uper; per_type_decoder_f RIC_Style_Type_decode_aper; @@ -42,4 +40,4 @@ per_type_encoder_f RIC_Style_Type_encode_aper; #endif #endif /* _RIC_Style_Type_H_ */ -#include +#include "asn_internal.h" diff --git a/e2sm/headers/RRC-MessageID.h b/e2sm/headers/RRC-MessageID.h new file mode 100644 index 0000000..ca236a1 --- /dev/null +++ b/e2sm/headers/RRC-MessageID.h @@ -0,0 +1,68 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _RRC_MessageID_H_ +#define _RRC_MessageID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" +#include "RRCclass-LTE.h" +#include "RRCclass-NR.h" +#include "constr_CHOICE.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RRC_MessageID__rrcType_PR { + RRC_MessageID__rrcType_PR_NOTHING, /* No components present */ + RRC_MessageID__rrcType_PR_lTE, + RRC_MessageID__rrcType_PR_nR + /* Extensions may appear below */ + +} RRC_MessageID__rrcType_PR; + +/* RRC-MessageID */ +typedef struct RRC_MessageID { + struct RRC_MessageID__rrcType { + RRC_MessageID__rrcType_PR present; + union RRC_MessageID__rrcType_u { + RRCclass_LTE_t lTE; + RRCclass_NR_t nR; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } rrcType; + long messageID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRC_MessageID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRC_MessageID; + +#ifdef __cplusplus +} +#endif + +#endif /* _RRC_MessageID_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/RRCclass-LTE.h b/e2sm/headers/RRCclass-LTE.h new file mode 100644 index 0000000..bad6ee7 --- /dev/null +++ b/e2sm/headers/RRCclass-LTE.h @@ -0,0 +1,64 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _RRCclass_LTE_H_ +#define _RRCclass_LTE_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RRCclass_LTE { + RRCclass_LTE_bCCH_BCH = 0, + RRCclass_LTE_bCCH_BCH_MBMS = 1, + RRCclass_LTE_bCCH_DL_SCH = 2, + RRCclass_LTE_bCCH_DL_SCH_BR = 3, + RRCclass_LTE_bCCH_DL_SCH_MBMS = 4, + RRCclass_LTE_mCCH = 5, + RRCclass_LTE_pCCH = 6, + RRCclass_LTE_dL_CCCH = 7, + RRCclass_LTE_dL_DCCH = 8, + RRCclass_LTE_uL_CCCH = 9, + RRCclass_LTE_uL_DCCH = 10, + RRCclass_LTE_sC_MCCH = 11 + /* + * Enumeration is extensible + */ +} e_RRCclass_LTE; + +/* RRCclass-LTE */ +typedef long RRCclass_LTE_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RRCclass_LTE_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RRCclass_LTE; +extern const asn_INTEGER_specifics_t asn_SPC_RRCclass_LTE_specs_1; +asn_struct_free_f RRCclass_LTE_free; +asn_struct_print_f RRCclass_LTE_print; +asn_constr_check_f RRCclass_LTE_constraint; +ber_type_decoder_f RRCclass_LTE_decode_ber; +der_type_encoder_f RRCclass_LTE_encode_der; +xer_type_decoder_f RRCclass_LTE_decode_xer; +xer_type_encoder_f RRCclass_LTE_encode_xer; +per_type_decoder_f RRCclass_LTE_decode_uper; +per_type_encoder_f RRCclass_LTE_encode_uper; +per_type_decoder_f RRCclass_LTE_decode_aper; +per_type_encoder_f RRCclass_LTE_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RRCclass_LTE_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/RRCclass-NR.h b/e2sm/headers/RRCclass-NR.h new file mode 100644 index 0000000..5af8e62 --- /dev/null +++ b/e2sm/headers/RRCclass-NR.h @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _RRCclass_NR_H_ +#define _RRCclass_NR_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RRCclass_NR { + RRCclass_NR_bCCH_BCH = 0, + RRCclass_NR_bCCH_DL_SCH = 1, + RRCclass_NR_dL_CCCH = 2, + RRCclass_NR_dL_DCCH = 3, + RRCclass_NR_pCCH = 4, + RRCclass_NR_uL_CCCH = 5, + RRCclass_NR_uL_CCCH1 = 6, + RRCclass_NR_uL_DCCH = 7 + /* + * Enumeration is extensible + */ +} e_RRCclass_NR; + +/* RRCclass-NR */ +typedef long RRCclass_NR_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_RRCclass_NR_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_RRCclass_NR; +extern const asn_INTEGER_specifics_t asn_SPC_RRCclass_NR_specs_1; +asn_struct_free_f RRCclass_NR_free; +asn_struct_print_f RRCclass_NR_print; +asn_constr_check_f RRCclass_NR_constraint; +ber_type_decoder_f RRCclass_NR_decode_ber; +der_type_encoder_f RRCclass_NR_encode_der; +xer_type_decoder_f RRCclass_NR_decode_xer; +xer_type_encoder_f RRCclass_NR_encode_xer; +per_type_decoder_f RRCclass_NR_decode_uper; +per_type_encoder_f RRCclass_NR_encode_uper; +per_type_decoder_f RRCclass_NR_decode_aper; +per_type_encoder_f RRCclass_NR_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RRCclass_NR_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/S-NSSAI.h b/e2sm/headers/S-NSSAI.h new file mode 100644 index 0000000..70caa55 --- /dev/null +++ b/e2sm/headers/S-NSSAI.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _S_NSSAI_H_ +#define _S_NSSAI_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "SST.h" +#include "SD.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* S-NSSAI */ +typedef struct S_NSSAI { + SST_t sST; + SD_t *sD; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} S_NSSAI_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_S_NSSAI; +extern asn_SEQUENCE_specifics_t asn_SPC_S_NSSAI_specs_1; +extern asn_TYPE_member_t asn_MBR_S_NSSAI_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _S_NSSAI_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/SD.h b/e2sm/headers/SD.h new file mode 100644 index 0000000..93603db --- /dev/null +++ b/e2sm/headers/SD.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _SD_H_ +#define _SD_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SD */ +typedef OCTET_STRING_t SD_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_SD_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_SD; +asn_struct_free_f SD_free; +asn_struct_print_f SD_print; +asn_constr_check_f SD_constraint; +ber_type_decoder_f SD_decode_ber; +der_type_encoder_f SD_encode_der; +xer_type_decoder_f SD_decode_xer; +xer_type_encoder_f SD_encode_xer; +per_type_decoder_f SD_decode_uper; +per_type_encoder_f SD_encode_uper; +per_type_decoder_f SD_decode_aper; +per_type_encoder_f SD_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _SD_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/SST.h b/e2sm/headers/SST.h new file mode 100644 index 0000000..28ee41d --- /dev/null +++ b/e2sm/headers/SST.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _SST_H_ +#define _SST_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SST */ +typedef OCTET_STRING_t SST_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_SST_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_SST; +asn_struct_free_f SST_free; +asn_struct_print_f SST_print; +asn_constr_check_f SST_constraint; +ber_type_decoder_f SST_decode_ber; +der_type_encoder_f SST_encode_der; +xer_type_decoder_f SST_decode_xer; +xer_type_encoder_f SST_encode_xer; +per_type_decoder_f SST_decode_uper; +per_type_encoder_f SST_encode_uper; +per_type_decoder_f SST_decode_aper; +per_type_encoder_f SST_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _SST_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/ServingCell-ARFCN.h b/e2sm/headers/ServingCell-ARFCN.h new file mode 100644 index 0000000..7071ddb --- /dev/null +++ b/e2sm/headers/ServingCell-ARFCN.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _ServingCell_ARFCN_H_ +#define _ServingCell_ARFCN_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "E-UTRA-ARFCN.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ServingCell_ARFCN_PR { + ServingCell_ARFCN_PR_NOTHING, /* No components present */ + ServingCell_ARFCN_PR_nR, + ServingCell_ARFCN_PR_eUTRA + /* Extensions may appear below */ + +} ServingCell_ARFCN_PR; + +/* Forward declarations */ +struct NR_ARFCN; + +/* ServingCell-ARFCN */ +typedef struct ServingCell_ARFCN { + ServingCell_ARFCN_PR present; + union ServingCell_ARFCN_u { + struct NR_ARFCN *nR; + E_UTRA_ARFCN_t eUTRA; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServingCell_ARFCN_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ServingCell_ARFCN; + +#ifdef __cplusplus +} +#endif + +#endif /* _ServingCell_ARFCN_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/ServingCell-PCI.h b/e2sm/headers/ServingCell-PCI.h new file mode 100644 index 0000000..46ef093 --- /dev/null +++ b/e2sm/headers/ServingCell-PCI.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _ServingCell_PCI_H_ +#define _ServingCell_PCI_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NR-PCI.h" +#include "E-UTRA-PCI.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ServingCell_PCI_PR { + ServingCell_PCI_PR_NOTHING, /* No components present */ + ServingCell_PCI_PR_nR, + ServingCell_PCI_PR_eUTRA + /* Extensions may appear below */ + +} ServingCell_PCI_PR; + +/* ServingCell-PCI */ +typedef struct ServingCell_PCI { + ServingCell_PCI_PR present; + union ServingCell_PCI_u { + NR_PCI_t nR; + E_UTRA_PCI_t eUTRA; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ServingCell_PCI_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ServingCell_PCI; + +#ifdef __cplusplus +} +#endif + +#endif /* _ServingCell_PCI_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/SubscriberProfileIDforRFP.h b/e2sm/headers/SubscriberProfileIDforRFP.h new file mode 100644 index 0000000..edc5595 --- /dev/null +++ b/e2sm/headers/SubscriberProfileIDforRFP.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _SubscriberProfileIDforRFP_H_ +#define _SubscriberProfileIDforRFP_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SubscriberProfileIDforRFP */ +typedef long SubscriberProfileIDforRFP_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SubscriberProfileIDforRFP; +asn_struct_free_f SubscriberProfileIDforRFP_free; +asn_struct_print_f SubscriberProfileIDforRFP_print; +asn_constr_check_f SubscriberProfileIDforRFP_constraint; +ber_type_decoder_f SubscriberProfileIDforRFP_decode_ber; +der_type_encoder_f SubscriberProfileIDforRFP_encode_der; +xer_type_decoder_f SubscriberProfileIDforRFP_decode_xer; +xer_type_encoder_f SubscriberProfileIDforRFP_encode_xer; +per_type_decoder_f SubscriberProfileIDforRFP_decode_uper; +per_type_encoder_f SubscriberProfileIDforRFP_encode_uper; +per_type_decoder_f SubscriberProfileIDforRFP_decode_aper; +per_type_encoder_f SubscriberProfileIDforRFP_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _SubscriberProfileIDforRFP_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/SupportedSULBandList.h b/e2sm/headers/SupportedSULBandList.h new file mode 100644 index 0000000..df4763d --- /dev/null +++ b/e2sm/headers/SupportedSULBandList.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _SupportedSULBandList_H_ +#define _SupportedSULBandList_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct SupportedSULFreqBandItem; + +/* SupportedSULBandList */ +typedef struct SupportedSULBandList { + A_SEQUENCE_OF(struct SupportedSULFreqBandItem) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SupportedSULBandList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SupportedSULBandList; +extern asn_SET_OF_specifics_t asn_SPC_SupportedSULBandList_specs_1; +extern asn_TYPE_member_t asn_MBR_SupportedSULBandList_1[1]; +extern asn_per_constraints_t asn_PER_type_SupportedSULBandList_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _SupportedSULBandList_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/SupportedSULFreqBandItem.h b/e2sm/headers/SupportedSULFreqBandItem.h new file mode 100644 index 0000000..e550541 --- /dev/null +++ b/e2sm/headers/SupportedSULFreqBandItem.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _SupportedSULFreqBandItem_H_ +#define _SupportedSULFreqBandItem_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SupportedSULFreqBandItem */ +typedef struct SupportedSULFreqBandItem { + long freqBandIndicatorNr; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SupportedSULFreqBandItem_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SupportedSULFreqBandItem; +extern asn_SEQUENCE_specifics_t asn_SPC_SupportedSULFreqBandItem_specs_1; +extern asn_TYPE_member_t asn_MBR_SupportedSULFreqBandItem_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _SupportedSULFreqBandItem_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/T61String.h b/e2sm/headers/T61String.h new file mode 100644 index 0000000..9e9e380 --- /dev/null +++ b/e2sm/headers/T61String.h @@ -0,0 +1,36 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _T61String_H_ +#define _T61String_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef OCTET_STRING_t T61String_t; /* Implemented via OCTET STRING */ + +extern asn_TYPE_descriptor_t asn_DEF_T61String; +extern asn_TYPE_operation_t asn_OP_T61String; + +#define T61String_free OCTET_STRING_free +#define T61String_print OCTET_STRING_print +#define T61String_compare OCTET_STRING_compare +#define T61String_constraint asn_generic_unknown_constraint +#define T61String_decode_ber OCTET_STRING_decode_ber +#define T61String_encode_der OCTET_STRING_encode_der +#define T61String_decode_xer OCTET_STRING_decode_xer_hex +#define T61String_encode_xer OCTET_STRING_encode_xer +#define T61String_decode_uper OCTET_STRING_decode_uper +#define T61String_encode_uper OCTET_STRING_encode_uper +#define T61String_decode_aper OCTET_STRING_decode_aper +#define T61String_encode_aper OCTET_STRING_encode_aper + +#ifdef __cplusplus +} +#endif + +#endif /* _T61String_H_ */ diff --git a/e2sm/headers/TeletexString.h b/e2sm/headers/TeletexString.h new file mode 100644 index 0000000..9f04aef --- /dev/null +++ b/e2sm/headers/TeletexString.h @@ -0,0 +1,36 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _TeletexString_H_ +#define _TeletexString_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef OCTET_STRING_t TeletexString_t; /* Implemented via OCTET STRING */ + +extern asn_TYPE_descriptor_t asn_DEF_TeletexString; +extern asn_TYPE_operation_t asn_OP_TeletexString; + +#define TeletexString_free OCTET_STRING_free +#define TeletexString_print OCTET_STRING_print +#define TeletexString_compare OCTET_STRING_compare +#define TeletexString_constraint asn_generic_unknown_constraint +#define TeletexString_decode_ber OCTET_STRING_decode_ber +#define TeletexString_encode_der OCTET_STRING_encode_der +#define TeletexString_decode_xer OCTET_STRING_decode_xer_hex +#define TeletexString_encode_xer OCTET_STRING_encode_xer +#define TeletexString_decode_uper OCTET_STRING_decode_uper +#define TeletexString_encode_uper OCTET_STRING_encode_uper +#define TeletexString_decode_aper OCTET_STRING_decode_aper +#define TeletexString_encode_aper OCTET_STRING_encode_aper + +#ifdef __cplusplus +} +#endif + +#endif /* _TeletexString_H_ */ diff --git a/e2sm/headers/TestCond-Expression.h b/e2sm/headers/TestCond-Expression.h new file mode 100644 index 0000000..fa4d2e5 --- /dev/null +++ b/e2sm/headers/TestCond-Expression.h @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _TestCond_Expression_H_ +#define _TestCond_Expression_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum TestCond_Expression { + TestCond_Expression_equal = 0, + TestCond_Expression_greaterthan = 1, + TestCond_Expression_lessthan = 2, + TestCond_Expression_contains = 3, + TestCond_Expression_present = 4 + /* + * Enumeration is extensible + */ +} e_TestCond_Expression; + +/* TestCond-Expression */ +typedef long TestCond_Expression_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_TestCond_Expression_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_TestCond_Expression; +extern const asn_INTEGER_specifics_t asn_SPC_TestCond_Expression_specs_1; +asn_struct_free_f TestCond_Expression_free; +asn_struct_print_f TestCond_Expression_print; +asn_constr_check_f TestCond_Expression_constraint; +ber_type_decoder_f TestCond_Expression_decode_ber; +der_type_encoder_f TestCond_Expression_encode_der; +xer_type_decoder_f TestCond_Expression_decode_xer; +xer_type_encoder_f TestCond_Expression_encode_xer; +per_type_decoder_f TestCond_Expression_decode_uper; +per_type_encoder_f TestCond_Expression_encode_uper; +per_type_decoder_f TestCond_Expression_decode_aper; +per_type_encoder_f TestCond_Expression_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TestCond_Expression_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/TestCond-Type.h b/e2sm/headers/TestCond-Type.h new file mode 100644 index 0000000..028d211 --- /dev/null +++ b/e2sm/headers/TestCond-Type.h @@ -0,0 +1,108 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _TestCond_Type_H_ +#define _TestCond_Type_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeEnumerated.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum TestCond_Type_PR { + TestCond_Type_PR_NOTHING, /* No components present */ + TestCond_Type_PR_gBR, + TestCond_Type_PR_aMBR, + TestCond_Type_PR_isStat, + TestCond_Type_PR_isCatM, + TestCond_Type_PR_rSRP, + TestCond_Type_PR_rSRQ + /* Extensions may appear below */ + +} TestCond_Type_PR; +typedef enum TestCond_Type__gBR { + TestCond_Type__gBR_true = 0 + /* + * Enumeration is extensible + */ +} e_TestCond_Type__gBR; +typedef enum TestCond_Type__aMBR { + TestCond_Type__aMBR_true = 0 + /* + * Enumeration is extensible + */ +} e_TestCond_Type__aMBR; +typedef enum TestCond_Type__isStat { + TestCond_Type__isStat_true = 0 + /* + * Enumeration is extensible + */ +} e_TestCond_Type__isStat; +typedef enum TestCond_Type__isCatM { + TestCond_Type__isCatM_true = 0 + /* + * Enumeration is extensible + */ +} e_TestCond_Type__isCatM; +typedef enum TestCond_Type__rSRP { + TestCond_Type__rSRP_true = 0 + /* + * Enumeration is extensible + */ +} e_TestCond_Type__rSRP; +typedef enum TestCond_Type__rSRQ { + TestCond_Type__rSRQ_true = 0 + /* + * Enumeration is extensible + */ +} e_TestCond_Type__rSRQ; + +/* TestCond-Type */ +typedef struct TestCond_Type { + TestCond_Type_PR present; + union TestCond_Type_u { + long gBR; + long aMBR; + long isStat; + long isCatM; + long rSRP; + long rSRQ; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} TestCond_Type_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_gBR_2; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_aMBR_5; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_isStat_8; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_isCatM_11; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_rSRP_14; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_rSRQ_17; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_TestCond_Type; +extern asn_CHOICE_specifics_t asn_SPC_TestCond_Type_specs_1; +extern asn_TYPE_member_t asn_MBR_TestCond_Type_1[6]; +extern asn_per_constraints_t asn_PER_type_TestCond_Type_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _TestCond_Type_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/TestCond-Value.h b/e2sm/headers/TestCond-Value.h new file mode 100644 index 0000000..8c41320 --- /dev/null +++ b/e2sm/headers/TestCond-Value.h @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _TestCond_Value_H_ +#define _TestCond_Value_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NativeInteger.h" +#include "BOOLEAN.h" +#include "BIT_STRING.h" +#include "OCTET_STRING.h" +#include "PrintableString.h" +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum TestCond_Value_PR { + TestCond_Value_PR_NOTHING, /* No components present */ + TestCond_Value_PR_valueInt, + TestCond_Value_PR_valueEnum, + TestCond_Value_PR_valueBool, + TestCond_Value_PR_valueBitS, + TestCond_Value_PR_valueOctS, + TestCond_Value_PR_valuePrtS + /* Extensions may appear below */ + +} TestCond_Value_PR; + +/* TestCond-Value */ +typedef struct TestCond_Value { + TestCond_Value_PR present; + union TestCond_Value_u { + long valueInt; + long valueEnum; + BOOLEAN_t valueBool; + BIT_STRING_t valueBitS; + OCTET_STRING_t valueOctS; + PrintableString_t valuePrtS; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} TestCond_Value_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_TestCond_Value; +extern asn_CHOICE_specifics_t asn_SPC_TestCond_Value_specs_1; +extern asn_TYPE_member_t asn_MBR_TestCond_Value_1[6]; +extern asn_per_constraints_t asn_PER_type_TestCond_Value_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _TestCond_Value_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/TestCondInfo.h b/e2sm/headers/TestCondInfo.h new file mode 100644 index 0000000..0262e20 --- /dev/null +++ b/e2sm/headers/TestCondInfo.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _TestCondInfo_H_ +#define _TestCondInfo_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "TestCond-Type.h" +#include "TestCond-Expression.h" +#include "TestCond-Value.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* TestCondInfo */ +typedef struct TestCondInfo { + TestCond_Type_t testType; + TestCond_Expression_t testExpr; + TestCond_Value_t testValue; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} TestCondInfo_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_TestCondInfo; +extern asn_SEQUENCE_specifics_t asn_SPC_TestCondInfo_specs_1; +extern asn_TYPE_member_t asn_MBR_TestCondInfo_1[3]; + +#ifdef __cplusplus +} +#endif + +#endif /* _TestCondInfo_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/TimeStamp.h b/e2sm/headers/TimeStamp.h new file mode 100644 index 0000000..e2d3c57 --- /dev/null +++ b/e2sm/headers/TimeStamp.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _TimeStamp_H_ +#define _TimeStamp_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "OCTET_STRING.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* TimeStamp */ +typedef OCTET_STRING_t TimeStamp_t; + +/* Implementation */ +extern asn_per_constraints_t asn_PER_type_TimeStamp_constr_1; +extern asn_TYPE_descriptor_t asn_DEF_TimeStamp; +asn_struct_free_f TimeStamp_free; +asn_struct_print_f TimeStamp_print; +asn_constr_check_f TimeStamp_constraint; +ber_type_decoder_f TimeStamp_decode_ber; +der_type_encoder_f TimeStamp_encode_der; +xer_type_decoder_f TimeStamp_decode_xer; +xer_type_encoder_f TimeStamp_encode_xer; +per_type_decoder_f TimeStamp_decode_uper; +per_type_encoder_f TimeStamp_encode_uper; +per_type_decoder_f TimeStamp_decode_aper; +per_type_encoder_f TimeStamp_encode_aper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TimeStamp_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/UEID-EN-GNB.h b/e2sm/headers/UEID-EN-GNB.h new file mode 100644 index 0000000..c0c4760 --- /dev/null +++ b/e2sm/headers/UEID-EN-GNB.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _UEID_EN_GNB_H_ +#define _UEID_EN_GNB_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "ENB-UE-X2AP-ID.h" +#include "ENB-UE-X2AP-ID-Extension.h" +#include "GlobalENB-ID.h" +#include "GNB-CU-UE-F1AP-ID.h" +#include "RANUEID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct UEID_GNB_CU_CP_E1AP_ID_List; + +/* UEID-EN-GNB */ +typedef struct UEID_EN_GNB { + ENB_UE_X2AP_ID_t m_eNB_UE_X2AP_ID; + ENB_UE_X2AP_ID_Extension_t *m_eNB_UE_X2AP_ID_Extension; /* OPTIONAL */ + GlobalENB_ID_t globalENB_ID; + GNB_CU_UE_F1AP_ID_t *gNB_CU_UE_F1AP_ID; /* OPTIONAL */ + struct UEID_GNB_CU_CP_E1AP_ID_List *gNB_CU_CP_UE_E1AP_ID_List; /* OPTIONAL */ + RANUEID_t *ran_UEID; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UEID_EN_GNB_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UEID_EN_GNB; +extern asn_SEQUENCE_specifics_t asn_SPC_UEID_EN_GNB_specs_1; +extern asn_TYPE_member_t asn_MBR_UEID_EN_GNB_1[6]; + +#ifdef __cplusplus +} +#endif + +#endif /* _UEID_EN_GNB_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/UEID-ENB.h b/e2sm/headers/UEID-ENB.h new file mode 100644 index 0000000..ac06374 --- /dev/null +++ b/e2sm/headers/UEID-ENB.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _UEID_ENB_H_ +#define _UEID_ENB_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "MME-UE-S1AP-ID.h" +#include "GUMMEI.h" +#include "ENB-UE-X2AP-ID.h" +#include "ENB-UE-X2AP-ID-Extension.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GlobalENB_ID; + +/* UEID-ENB */ +typedef struct UEID_ENB { + MME_UE_S1AP_ID_t mME_UE_S1AP_ID; + GUMMEI_t gUMMEI; + ENB_UE_X2AP_ID_t *m_eNB_UE_X2AP_ID; /* OPTIONAL */ + ENB_UE_X2AP_ID_Extension_t *m_eNB_UE_X2AP_ID_Extension; /* OPTIONAL */ + struct GlobalENB_ID *globalENB_ID; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UEID_ENB_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UEID_ENB; +extern asn_SEQUENCE_specifics_t asn_SPC_UEID_ENB_specs_1; +extern asn_TYPE_member_t asn_MBR_UEID_ENB_1[5]; + +#ifdef __cplusplus +} +#endif + +#endif /* _UEID_ENB_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/UEID-GNB-CU-CP-E1AP-ID-Item.h b/e2sm/headers/UEID-GNB-CU-CP-E1AP-ID-Item.h new file mode 100644 index 0000000..2e7abac --- /dev/null +++ b/e2sm/headers/UEID-GNB-CU-CP-E1AP-ID-Item.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _UEID_GNB_CU_CP_E1AP_ID_Item_H_ +#define _UEID_GNB_CU_CP_E1AP_ID_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GNB-CU-CP-UE-E1AP-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* UEID-GNB-CU-CP-E1AP-ID-Item */ +typedef struct UEID_GNB_CU_CP_E1AP_ID_Item { + GNB_CU_CP_UE_E1AP_ID_t gNB_CU_CP_UE_E1AP_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UEID_GNB_CU_CP_E1AP_ID_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UEID_GNB_CU_CP_E1AP_ID_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_UEID_GNB_CU_CP_E1AP_ID_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_UEID_GNB_CU_CP_E1AP_ID_Item_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _UEID_GNB_CU_CP_E1AP_ID_Item_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/UEID-GNB-CU-CP-E1AP-ID-List.h b/e2sm/headers/UEID-GNB-CU-CP-E1AP-ID-List.h new file mode 100644 index 0000000..234a586 --- /dev/null +++ b/e2sm/headers/UEID-GNB-CU-CP-E1AP-ID-List.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _UEID_GNB_CU_CP_E1AP_ID_List_H_ +#define _UEID_GNB_CU_CP_E1AP_ID_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct UEID_GNB_CU_CP_E1AP_ID_Item; + +/* UEID-GNB-CU-CP-E1AP-ID-List */ +typedef struct UEID_GNB_CU_CP_E1AP_ID_List { + A_SEQUENCE_OF(struct UEID_GNB_CU_CP_E1AP_ID_Item) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UEID_GNB_CU_CP_E1AP_ID_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UEID_GNB_CU_CP_E1AP_ID_List; +extern asn_SET_OF_specifics_t asn_SPC_UEID_GNB_CU_CP_E1AP_ID_List_specs_1; +extern asn_TYPE_member_t asn_MBR_UEID_GNB_CU_CP_E1AP_ID_List_1[1]; +extern asn_per_constraints_t asn_PER_type_UEID_GNB_CU_CP_E1AP_ID_List_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _UEID_GNB_CU_CP_E1AP_ID_List_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/UEID-GNB-CU-CP-F1AP-ID-Item.h b/e2sm/headers/UEID-GNB-CU-CP-F1AP-ID-Item.h new file mode 100644 index 0000000..d5760cd --- /dev/null +++ b/e2sm/headers/UEID-GNB-CU-CP-F1AP-ID-Item.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _UEID_GNB_CU_CP_F1AP_ID_Item_H_ +#define _UEID_GNB_CU_CP_F1AP_ID_Item_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GNB-CU-UE-F1AP-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* UEID-GNB-CU-CP-F1AP-ID-Item */ +typedef struct UEID_GNB_CU_CP_F1AP_ID_Item { + GNB_CU_UE_F1AP_ID_t gNB_CU_UE_F1AP_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UEID_GNB_CU_CP_F1AP_ID_Item_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UEID_GNB_CU_CP_F1AP_ID_Item; +extern asn_SEQUENCE_specifics_t asn_SPC_UEID_GNB_CU_CP_F1AP_ID_Item_specs_1; +extern asn_TYPE_member_t asn_MBR_UEID_GNB_CU_CP_F1AP_ID_Item_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _UEID_GNB_CU_CP_F1AP_ID_Item_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/UEID-GNB-CU-F1AP-ID-List.h b/e2sm/headers/UEID-GNB-CU-F1AP-ID-List.h new file mode 100644 index 0000000..7c1da53 --- /dev/null +++ b/e2sm/headers/UEID-GNB-CU-F1AP-ID-List.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _UEID_GNB_CU_F1AP_ID_List_H_ +#define _UEID_GNB_CU_F1AP_ID_List_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "asn_SEQUENCE_OF.h" +#include "constr_SEQUENCE_OF.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct UEID_GNB_CU_CP_F1AP_ID_Item; + +/* UEID-GNB-CU-F1AP-ID-List */ +typedef struct UEID_GNB_CU_F1AP_ID_List { + A_SEQUENCE_OF(struct UEID_GNB_CU_CP_F1AP_ID_Item) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UEID_GNB_CU_F1AP_ID_List_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UEID_GNB_CU_F1AP_ID_List; +extern asn_SET_OF_specifics_t asn_SPC_UEID_GNB_CU_F1AP_ID_List_specs_1; +extern asn_TYPE_member_t asn_MBR_UEID_GNB_CU_F1AP_ID_List_1[1]; +extern asn_per_constraints_t asn_PER_type_UEID_GNB_CU_F1AP_ID_List_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _UEID_GNB_CU_F1AP_ID_List_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/UEID-GNB-CU-UP.h b/e2sm/headers/UEID-GNB-CU-UP.h new file mode 100644 index 0000000..8d7ee50 --- /dev/null +++ b/e2sm/headers/UEID-GNB-CU-UP.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _UEID_GNB_CU_UP_H_ +#define _UEID_GNB_CU_UP_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GNB-CU-CP-UE-E1AP-ID.h" +#include "RANUEID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* UEID-GNB-CU-UP */ +typedef struct UEID_GNB_CU_UP { + GNB_CU_CP_UE_E1AP_ID_t gNB_CU_CP_UE_E1AP_ID; + RANUEID_t *ran_UEID; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UEID_GNB_CU_UP_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UEID_GNB_CU_UP; +extern asn_SEQUENCE_specifics_t asn_SPC_UEID_GNB_CU_UP_specs_1; +extern asn_TYPE_member_t asn_MBR_UEID_GNB_CU_UP_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _UEID_GNB_CU_UP_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/UEID-GNB-DU.h b/e2sm/headers/UEID-GNB-DU.h new file mode 100644 index 0000000..e82d119 --- /dev/null +++ b/e2sm/headers/UEID-GNB-DU.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _UEID_GNB_DU_H_ +#define _UEID_GNB_DU_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "GNB-CU-UE-F1AP-ID.h" +#include "RANUEID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* UEID-GNB-DU */ +typedef struct UEID_GNB_DU { + GNB_CU_UE_F1AP_ID_t gNB_CU_UE_F1AP_ID; + RANUEID_t *ran_UEID; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UEID_GNB_DU_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UEID_GNB_DU; +extern asn_SEQUENCE_specifics_t asn_SPC_UEID_GNB_DU_specs_1; +extern asn_TYPE_member_t asn_MBR_UEID_GNB_DU_1[2]; + +#ifdef __cplusplus +} +#endif + +#endif /* _UEID_GNB_DU_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/UEID-GNB.h b/e2sm/headers/UEID-GNB.h new file mode 100644 index 0000000..e2bfcf1 --- /dev/null +++ b/e2sm/headers/UEID-GNB.h @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _UEID_GNB_H_ +#define _UEID_GNB_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "AMF-UE-NGAP-ID.h" +#include "GUAMI.h" +#include "RANUEID.h" +#include "NG-RANnodeUEXnAPID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct UEID_GNB_CU_F1AP_ID_List; +struct UEID_GNB_CU_CP_E1AP_ID_List; +struct GlobalGNB_ID; +struct GlobalNGRANNodeID; + +/* UEID-GNB */ +typedef struct UEID_GNB { + AMF_UE_NGAP_ID_t amf_UE_NGAP_ID; + GUAMI_t guami; + struct UEID_GNB_CU_F1AP_ID_List *gNB_CU_UE_F1AP_ID_List; /* OPTIONAL */ + struct UEID_GNB_CU_CP_E1AP_ID_List *gNB_CU_CP_UE_E1AP_ID_List; /* OPTIONAL */ + RANUEID_t *ran_UEID; /* OPTIONAL */ + NG_RANnodeUEXnAPID_t *m_NG_RAN_UE_XnAP_ID; /* OPTIONAL */ + struct GlobalGNB_ID *globalGNB_ID; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + struct GlobalNGRANNodeID *globalNG_RANNode_ID; /* OPTIONAL */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UEID_GNB_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UEID_GNB; +extern asn_SEQUENCE_specifics_t asn_SPC_UEID_GNB_specs_1; +extern asn_TYPE_member_t asn_MBR_UEID_GNB_1[8]; + +#ifdef __cplusplus +} +#endif + +#endif /* _UEID_GNB_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/UEID-NG-ENB-DU.h b/e2sm/headers/UEID-NG-ENB-DU.h new file mode 100644 index 0000000..549513d --- /dev/null +++ b/e2sm/headers/UEID-NG-ENB-DU.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _UEID_NG_ENB_DU_H_ +#define _UEID_NG_ENB_DU_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "NGENB-CU-UE-W1AP-ID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* UEID-NG-ENB-DU */ +typedef struct UEID_NG_ENB_DU { + NGENB_CU_UE_W1AP_ID_t ng_eNB_CU_UE_W1AP_ID; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UEID_NG_ENB_DU_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UEID_NG_ENB_DU; +extern asn_SEQUENCE_specifics_t asn_SPC_UEID_NG_ENB_DU_specs_1; +extern asn_TYPE_member_t asn_MBR_UEID_NG_ENB_DU_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _UEID_NG_ENB_DU_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/UEID-NG-ENB.h b/e2sm/headers/UEID-NG-ENB.h new file mode 100644 index 0000000..fda548b --- /dev/null +++ b/e2sm/headers/UEID-NG-ENB.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _UEID_NG_ENB_H_ +#define _UEID_NG_ENB_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "AMF-UE-NGAP-ID.h" +#include "GUAMI.h" +#include "NGENB-CU-UE-W1AP-ID.h" +#include "NG-RANnodeUEXnAPID.h" +#include "constr_SEQUENCE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct GlobalNgENB_ID; +struct GlobalNGRANNodeID; + +/* UEID-NG-ENB */ +typedef struct UEID_NG_ENB { + AMF_UE_NGAP_ID_t amf_UE_NGAP_ID; + GUAMI_t guami; + NGENB_CU_UE_W1AP_ID_t *ng_eNB_CU_UE_W1AP_ID; /* OPTIONAL */ + NG_RANnodeUEXnAPID_t *m_NG_RAN_UE_XnAP_ID; /* OPTIONAL */ + struct GlobalNgENB_ID *globalNgENB_ID; /* OPTIONAL */ + /* + * This type is extensible, + * possible extensions are below. + */ + struct GlobalNGRANNodeID *globalNG_RANNode_ID; /* OPTIONAL */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UEID_NG_ENB_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UEID_NG_ENB; +extern asn_SEQUENCE_specifics_t asn_SPC_UEID_NG_ENB_specs_1; +extern asn_TYPE_member_t asn_MBR_UEID_NG_ENB_1[6]; + +#ifdef __cplusplus +} +#endif + +#endif /* _UEID_NG_ENB_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/UEID.h b/e2sm/headers/UEID.h new file mode 100644 index 0000000..8e4714c --- /dev/null +++ b/e2sm/headers/UEID.h @@ -0,0 +1,76 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#ifndef _UEID_H_ +#define _UEID_H_ + + +#include "asn_application.h" + +/* Including external dependencies */ +#include "constr_CHOICE.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UEID_PR { + UEID_PR_NOTHING, /* No components present */ + UEID_PR_gNB_UEID, + UEID_PR_gNB_DU_UEID, + UEID_PR_gNB_CU_UP_UEID, + UEID_PR_ng_eNB_UEID, + UEID_PR_ng_eNB_DU_UEID, + UEID_PR_en_gNB_UEID, + UEID_PR_eNB_UEID + /* Extensions may appear below */ + +} UEID_PR; + +/* Forward declarations */ +struct UEID_GNB; +struct UEID_GNB_DU; +struct UEID_GNB_CU_UP; +struct UEID_NG_ENB; +struct UEID_NG_ENB_DU; +struct UEID_EN_GNB; +struct UEID_ENB; + +/* UEID */ +typedef struct UEID { + UEID_PR present; + union UEID_u { + struct UEID_GNB *gNB_UEID; + struct UEID_GNB_DU *gNB_DU_UEID; + struct UEID_GNB_CU_UP *gNB_CU_UP_UEID; + struct UEID_NG_ENB *ng_eNB_UEID; + struct UEID_NG_ENB_DU *ng_eNB_DU_UEID; + struct UEID_EN_GNB *en_gNB_UEID; + struct UEID_ENB *eNB_UEID; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UEID_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UEID; +extern asn_CHOICE_specifics_t asn_SPC_UEID_specs_1; +extern asn_TYPE_member_t asn_MBR_UEID_1[7]; +extern asn_per_constraints_t asn_PER_type_UEID_constr_1; + +#ifdef __cplusplus +} +#endif + +#endif /* _UEID_H_ */ +#include "asn_internal.h" diff --git a/e2sm/headers/UTCTime.h b/e2sm/headers/UTCTime.h new file mode 100644 index 0000000..295f156 --- /dev/null +++ b/e2sm/headers/UTCTime.h @@ -0,0 +1,50 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _UTCTime_H_ +#define _UTCTime_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef OCTET_STRING_t UTCTime_t; /* Implemented via OCTET STRING */ + +extern asn_TYPE_descriptor_t asn_DEF_UTCTime; +extern asn_TYPE_operation_t asn_OP_UTCTime; + +asn_struct_print_f UTCTime_print; +asn_struct_compare_f UTCTime_compare; +asn_constr_check_f UTCTime_constraint; +xer_type_encoder_f UTCTime_encode_xer; +asn_random_fill_f UTCTime_random_fill; + +#define UTCTime_free OCTET_STRING_free +#define UTCTime_decode_ber OCTET_STRING_decode_ber +#define UTCTime_encode_der OCTET_STRING_encode_der +#define UTCTime_decode_xer OCTET_STRING_decode_xer_utf8 +#define UTCTime_decode_uper OCTET_STRING_decode_uper +#define UTCTime_encode_uper OCTET_STRING_encode_uper +#define UTCTime_decode_aper OCTET_STRING_decode_aper +#define UTCTime_encode_aper OCTET_STRING_encode_aper + +/*********************** + * Some handy helpers. * + ***********************/ + +struct tm; /* */ + +/* See asn_GT2time() in GeneralizedTime.h */ +time_t asn_UT2time(const UTCTime_t *, struct tm *_optional_tm4fill, int as_gmt); + +/* See asn_time2GT() in GeneralizedTime.h */ +UTCTime_t *asn_time2UT(UTCTime_t *__opt_ut, const struct tm *, int force_gmt); + +#ifdef __cplusplus +} +#endif + +#endif /* _UTCTime_H_ */ diff --git a/e2sm/headers/UTF8String.h b/e2sm/headers/UTF8String.h new file mode 100644 index 0000000..7ad9c82 --- /dev/null +++ b/e2sm/headers/UTF8String.h @@ -0,0 +1,63 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _UTF8String_H_ +#define _UTF8String_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef OCTET_STRING_t UTF8String_t; /* Implemented via OCTET STRING */ + +extern asn_TYPE_descriptor_t asn_DEF_UTF8String; +extern asn_TYPE_operation_t asn_OP_UTF8String; + +asn_struct_print_f UTF8String_print; +asn_constr_check_f UTF8String_constraint; +asn_random_fill_f UTF8String_random_fill; + +#define UTF8String_free OCTET_STRING_free +#define UTF8String_compare OCTET_STRING_compare +#define UTF8String_constraint UTF8String_constraint +#define UTF8String_decode_ber OCTET_STRING_decode_ber +#define UTF8String_encode_der OCTET_STRING_encode_der +#define UTF8String_decode_xer OCTET_STRING_decode_xer_utf8 +#define UTF8String_encode_xer OCTET_STRING_encode_xer_utf8 +#define UTF8String_decode_uper OCTET_STRING_decode_uper +#define UTF8String_encode_uper OCTET_STRING_encode_uper +#define UTF8String_decode_aper OCTET_STRING_decode_aper +#define UTF8String_encode_aper OCTET_STRING_encode_aper + +/* + * Returns length of the given UTF-8 string in characters, + * or a negative error code: + * -1: UTF-8 sequence truncated + * -2: Illegal UTF-8 sequence start + * -3: Continuation expectation failed + * -4: Not minimal length encoding + * -5: Invalid arguments + */ +ssize_t UTF8String_length(const UTF8String_t *st); + +/* + * Convert the UTF-8 string into a sequence of wide characters. + * Returns the number of characters necessary. + * Returned value might be greater than dstlen. + * In case of conversion error, 0 is returned. + * + * If st points to a valid UTF-8 string, calling + * UTF8String_to_wcs(st, 0, 0); + * is equivalent to + * UTF8String_length(const UTF8String_t *st); + */ +size_t UTF8String_to_wcs(const UTF8String_t *st, uint32_t *dst, size_t dstlen); + +#ifdef __cplusplus +} +#endif + +#endif /* _UTF8String_H_ */ diff --git a/e2sm/headers/UniversalString.h b/e2sm/headers/UniversalString.h new file mode 100644 index 0000000..510807a --- /dev/null +++ b/e2sm/headers/UniversalString.h @@ -0,0 +1,38 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _UniversalString_H_ +#define _UniversalString_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef OCTET_STRING_t UniversalString_t; /* Implemented via OCTET STRING */ + +extern asn_TYPE_descriptor_t asn_DEF_UniversalString; +extern asn_TYPE_operation_t asn_OP_UniversalString; +extern asn_OCTET_STRING_specifics_t asn_SPC_UniversalString_specs; + +asn_struct_print_f UniversalString_print; /* Human-readable output */ +asn_constr_check_f UniversalString_constraint; +xer_type_decoder_f UniversalString_decode_xer; +xer_type_encoder_f UniversalString_encode_xer; + +#define UniversalString_free OCTET_STRING_free +#define UniversalString_compare OCTET_STRING_compare +#define UniversalString_decode_ber OCTET_STRING_decode_ber +#define UniversalString_encode_der OCTET_STRING_encode_der +#define UniversalString_decode_uper OCTET_STRING_decode_uper +#define UniversalString_encode_uper OCTET_STRING_encode_uper +#define UniversalString_decode_aper OCTET_STRING_decode_aper +#define UniversalString_encode_aper OCTET_STRING_encode_aper + +#ifdef __cplusplus +} +#endif + +#endif /* _UniversalString_H_ */ diff --git a/e2sm/headers/VideotexString.h b/e2sm/headers/VideotexString.h new file mode 100644 index 0000000..b535389 --- /dev/null +++ b/e2sm/headers/VideotexString.h @@ -0,0 +1,36 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _VideotexString_H_ +#define _VideotexString_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef OCTET_STRING_t VideotexString_t; /* Implemented via OCTET STRING */ + +extern asn_TYPE_descriptor_t asn_DEF_VideotexString; +extern asn_TYPE_operation_t asn_OP_VideotexString; + +#define VideotexString_free OCTET_STRING_free +#define VideotexString_print OCTET_STRING_print +#define VideotexString_compare OCTET_STRING_compare +#define VideotexString_constraint asn_generic_unknown_constraint +#define VideotexString_decode_ber OCTET_STRING_decode_ber +#define VideotexString_encode_der OCTET_STRING_encode_der +#define VideotexString_decode_xer OCTET_STRING_decode_xer_hex +#define VideotexString_encode_xer OCTET_STRING_encode_xer +#define VideotexString_decode_uper OCTET_STRING_decode_uper +#define VideotexString_encode_uper OCTET_STRING_encode_uper +#define VideotexString_decode_aper OCTET_STRING_decode_aper +#define VideotexString_encode_aper OCTET_STRING_encode_aper + +#ifdef __cplusplus +} +#endif + +#endif /* _VideotexString_H_ */ diff --git a/e2sm/headers/VisibleString.h b/e2sm/headers/VisibleString.h new file mode 100644 index 0000000..ad5f713 --- /dev/null +++ b/e2sm/headers/VisibleString.h @@ -0,0 +1,38 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _VisibleString_H_ +#define _VisibleString_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef OCTET_STRING_t VisibleString_t; /* Implemented via OCTET STRING */ + +extern asn_TYPE_descriptor_t asn_DEF_VisibleString; +extern asn_TYPE_operation_t asn_OP_VisibleString; + +asn_constr_check_f VisibleString_constraint; + +#define VisibleString_free OCTET_STRING_free +#define VisibleString_print OCTET_STRING_print +#define VisibleString_compare OCTET_STRING_compare +#define VisibleString_constraint VisibleString_constraint +#define VisibleString_decode_ber OCTET_STRING_decode_ber +#define VisibleString_encode_der OCTET_STRING_encode_der +#define VisibleString_decode_xer OCTET_STRING_decode_xer_hex +#define VisibleString_encode_xer OCTET_STRING_encode_xer +#define VisibleString_decode_uper OCTET_STRING_decode_uper +#define VisibleString_encode_uper OCTET_STRING_encode_uper +#define VisibleString_decode_aper OCTET_STRING_decode_aper +#define VisibleString_encode_aper OCTET_STRING_encode_aper + +#ifdef __cplusplus +} +#endif + +#endif /* _VisibleString_H_ */ diff --git a/e2sm/headers/asn_constant.h b/e2sm/headers/asn_constant.h index af5a0fd..1a26b7a 100644 --- a/e2sm/headers/asn_constant.h +++ b/e2sm/headers/asn_constant.h @@ -9,18 +9,19 @@ extern "C" { #endif -#define maxofMessageProtocolTests (15) -#define maxofRICstyles (63) -#define maxnoofQCI (256) -#define maxnoofQoSFlows (64) -#define maxnoofSliceItems (1024) -#define maxnoofContainerListItems (3) -#define maxCellingNBDU (512) -#define maxofContainers (8) -#define maxPLMN (12) -#define maxofRANparamters (65536) -#define maxUeReport (32) -#define maxCellingNB (16384) +#define maxE1APid (65535) +#define maxF1APid (4) +#define maxEARFCN (65535) +#define maxNRARFCN (3279165) +#define maxnoofNrCellBands (32) +#define maxnoofCells (16384) +#define maxnoofRICStyles (63) +#define maxnoofMeasurementInfo (65535) +#define maxnoofLabelInfo (2147483647) +#define maxnoofMeasurementRecord (65535) +#define maxnoofMeasurementValue (2147483647) +#define maxnoofConditionInfo (32768) +#define maxnoofUEID (65535) #ifdef __cplusplus diff --git a/e2sm/headers/constr_SET.h b/e2sm/headers/constr_SET.h new file mode 100644 index 0000000..d64a00f --- /dev/null +++ b/e2sm/headers/constr_SET.h @@ -0,0 +1,87 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _CONSTR_SET_H_ +#define _CONSTR_SET_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +typedef struct asn_SET_specifics_s { + /* + * Target structure description. + */ + unsigned struct_size; /* Size of the target structure. */ + unsigned ctx_offset; /* Offset of the asn_struct_ctx_t member */ + unsigned pres_offset; /* Offset of _presence_map member */ + + /* + * Tags to members mapping table (sorted). + * Sometimes suitable for DER encoding (untagged CHOICE is present); + * if so, tag2el_count will be greater than td->elements_count. + */ + const asn_TYPE_tag2member_t *tag2el; + unsigned tag2el_count; + + /* + * Tags to members mapping table, second edition. + * Suitable for CANONICAL-XER encoding. + */ + const asn_TYPE_tag2member_t *tag2el_cxer; + unsigned tag2el_cxer_count; + + /* + * Extensions-related stuff. + */ + int extensible; /* Whether SET is extensible */ + const unsigned int *_mandatory_elements; /* Bitmask of mandatory ones */ +} asn_SET_specifics_t; + +/* + * A set specialized functions dealing with the SET type. + */ +asn_struct_free_f SET_free; +asn_struct_print_f SET_print; +asn_struct_compare_f SET_compare; +asn_constr_check_f SET_constraint; +ber_type_decoder_f SET_decode_ber; +der_type_encoder_f SET_encode_der; +xer_type_decoder_f SET_decode_xer; +xer_type_encoder_f SET_encode_xer; +per_type_decoder_f SET_decode_uper; +per_type_encoder_f SET_encode_uper; +asn_random_fill_f SET_random_fill; +extern asn_TYPE_operation_t asn_OP_SET; + +/*********************** + * Some handy helpers. * + ***********************/ + +/* + * Figure out whether the SET member indicated by PR_x has already been decoded. + * It is very simple bitfield test, despite its visual complexity. + */ +#define ASN_SET_ISPRESENT(set_ptr, PR_x) \ + ASN_SET_ISPRESENT2(&((set_ptr)->_presence_map), PR_x) +#define ASN_SET_ISPRESENT2(map_ptr, PR_x) \ + (((unsigned int *)(map_ptr)) \ + [(PR_x) / (8 * sizeof(unsigned int))] \ + & (1u << ((8 * sizeof(unsigned int)) - 1 \ + - ((PR_x) % (8 * sizeof(unsigned int)))))) + +#define ASN_SET_MKPRESENT(map_ptr, PR_x) \ + (((unsigned int *)(map_ptr)) \ + [(PR_x) / (8 * sizeof(unsigned int))] \ + |= (1u << ((8 * sizeof(unsigned int)) - 1 \ + - ((PR_x) % (8 * sizeof(unsigned int)))))) + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_SET_H_ */ diff --git a/e2sm/lib/AMF-UE-NGAP-ID.c b/e2sm/lib/AMF-UE-NGAP-ID.c new file mode 100644 index 0000000..13fe8aa --- /dev/null +++ b/e2sm/lib/AMF-UE-NGAP-ID.c @@ -0,0 +1,67 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "AMF-UE-NGAP-ID.h" + +int +AMF_UE_NGAP_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 1099511627775)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using INTEGER, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_AMF_UE_NGAP_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 40, -1, 0, 1099511627775 } /* (0..1099511627775) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_AMF_UE_NGAP_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_AMF_UE_NGAP_ID = { + "AMF-UE-NGAP-ID", + "AMF-UE-NGAP-ID", + &asn_OP_INTEGER, + asn_DEF_AMF_UE_NGAP_ID_tags_1, + sizeof(asn_DEF_AMF_UE_NGAP_ID_tags_1) + /sizeof(asn_DEF_AMF_UE_NGAP_ID_tags_1[0]), /* 1 */ + asn_DEF_AMF_UE_NGAP_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_AMF_UE_NGAP_ID_tags_1) + /sizeof(asn_DEF_AMF_UE_NGAP_ID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_AMF_UE_NGAP_ID_constr_1, AMF_UE_NGAP_ID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/e2sm/lib/AMFPointer.c b/e2sm/lib/AMFPointer.c new file mode 100644 index 0000000..99212c4 --- /dev/null +++ b/e2sm/lib/AMFPointer.c @@ -0,0 +1,67 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "AMFPointer.h" + +int +AMFPointer_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_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; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 6)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_AMFPointer_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 6, 6 } /* (SIZE(6..6)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_AMFPointer_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_AMFPointer = { + "AMFPointer", + "AMFPointer", + &asn_OP_BIT_STRING, + asn_DEF_AMFPointer_tags_1, + sizeof(asn_DEF_AMFPointer_tags_1) + /sizeof(asn_DEF_AMFPointer_tags_1[0]), /* 1 */ + asn_DEF_AMFPointer_tags_1, /* Same as above */ + sizeof(asn_DEF_AMFPointer_tags_1) + /sizeof(asn_DEF_AMFPointer_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_AMFPointer_constr_1, AMFPointer_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/e2sm/lib/AMFRegionID.c b/e2sm/lib/AMFRegionID.c new file mode 100644 index 0000000..94e19ba --- /dev/null +++ b/e2sm/lib/AMFRegionID.c @@ -0,0 +1,67 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "AMFRegionID.h" + +int +AMFRegionID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_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; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 8)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_AMFRegionID_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 8, 8 } /* (SIZE(8..8)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_AMFRegionID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_AMFRegionID = { + "AMFRegionID", + "AMFRegionID", + &asn_OP_BIT_STRING, + asn_DEF_AMFRegionID_tags_1, + sizeof(asn_DEF_AMFRegionID_tags_1) + /sizeof(asn_DEF_AMFRegionID_tags_1[0]), /* 1 */ + asn_DEF_AMFRegionID_tags_1, /* Same as above */ + sizeof(asn_DEF_AMFRegionID_tags_1) + /sizeof(asn_DEF_AMFRegionID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_AMFRegionID_constr_1, AMFRegionID_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/e2sm/lib/AMFSetID.c b/e2sm/lib/AMFSetID.c new file mode 100644 index 0000000..f56a4c5 --- /dev/null +++ b/e2sm/lib/AMFSetID.c @@ -0,0 +1,67 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "AMFSetID.h" + +int +AMFSetID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_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; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 10)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_AMFSetID_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 10, 10 } /* (SIZE(10..10)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_AMFSetID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_AMFSetID = { + "AMFSetID", + "AMFSetID", + &asn_OP_BIT_STRING, + asn_DEF_AMFSetID_tags_1, + sizeof(asn_DEF_AMFSetID_tags_1) + /sizeof(asn_DEF_AMFSetID_tags_1[0]), /* 1 */ + asn_DEF_AMFSetID_tags_1, /* Same as above */ + sizeof(asn_DEF_AMFSetID_tags_1) + /sizeof(asn_DEF_AMFSetID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_AMFSetID_constr_1, AMFSetID_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/e2sm/lib/ANY.c b/e2sm/lib/ANY.c new file mode 100644 index 0000000..0b81557 --- /dev/null +++ b/e2sm/lib/ANY.c @@ -0,0 +1,450 @@ +/* + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +asn_OCTET_STRING_specifics_t asn_SPC_ANY_specs = { + sizeof(ANY_t), + offsetof(ANY_t, _asn_ctx), + ASN_OSUBV_ANY +}; +asn_TYPE_operation_t asn_OP_ANY = { + OCTET_STRING_free, + OCTET_STRING_print, + OCTET_STRING_compare, + OCTET_STRING_decode_ber, + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_hex, + ANY_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + 0, + 0, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, 0, 0, 0, +#else + ANY_decode_uper, + ANY_encode_uper, + ANY_decode_aper, + ANY_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + 0, /* Random fill is not defined for ANY type */ + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_ANY = { + "ANY", + "ANY", + &asn_OP_ANY, + 0, 0, 0, 0, + { 0, 0, asn_generic_no_constraint }, /* No constraints */ + 0, 0, /* No members */ + &asn_SPC_ANY_specs, +}; + +#undef RETURN +#define RETURN(_code) \ + do { \ + asn_dec_rval_t tmprval; \ + tmprval.code = _code; \ + tmprval.consumed = consumed_myself; \ + return tmprval; \ + } while(0) + +asn_enc_rval_t +ANY_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, + void *app_key) { + if(flags & XER_F_CANONICAL) { + /* + * Canonical XER-encoding of ANY type is not supported. + */ + ASN__ENCODE_FAILED; + } + + /* Dump as binary */ + return OCTET_STRING_encode_xer(td, sptr, ilevel, flags, cb, app_key); +} + +struct _callback_arg { + uint8_t *buffer; + size_t offset; + size_t size; +}; + +static int ANY__consume_bytes(const void *buffer, size_t size, void *key); + +int +ANY_fromType(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr) { + struct _callback_arg arg; + asn_enc_rval_t erval = {0,0,0}; + + if(!st || !td) { + errno = EINVAL; + return -1; + } + + if(!sptr) { + if(st->buf) FREEMEM(st->buf); + st->size = 0; + return 0; + } + + arg.offset = arg.size = 0; + arg.buffer = 0; + + erval = der_encode(td, sptr, ANY__consume_bytes, &arg); + if(erval.encoded == -1) { + if(arg.buffer) FREEMEM(arg.buffer); + return -1; + } + assert((size_t)erval.encoded == arg.offset); + + if(st->buf) FREEMEM(st->buf); + st->buf = arg.buffer; + st->size = arg.offset; + + return 0; +} + +int +ANY_fromType_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr) { + uint8_t *buffer = NULL; + ssize_t erval; + + if(!st || !td) { + errno = EINVAL; + return -1; + } + + if(!sptr) { + if(st->buf) FREEMEM(st->buf); + st->size = 0; + return 0; + } + + erval = aper_encode_to_new_buffer(td, td->encoding_constraints.per_constraints, sptr, (void**)&buffer); + + if(erval == -1) { + if(buffer) FREEMEM(buffer); + return -1; + } + assert((size_t)erval > 0); + + if(st->buf) FREEMEM(st->buf); + st->buf = buffer; + st->size = erval; + + return 0; +} + +ANY_t * +ANY_new_fromType(asn_TYPE_descriptor_t *td, void *sptr) { + ANY_t tmp; + ANY_t *st; + + if(!td || !sptr) { + errno = EINVAL; + return 0; + } + + memset(&tmp, 0, sizeof(tmp)); + + if(ANY_fromType(&tmp, td, sptr)) return 0; + + st = (ANY_t *)CALLOC(1, sizeof(ANY_t)); + if(st) { + *st = tmp; + return st; + } else { + FREEMEM(tmp.buf); + return 0; + } +} + +ANY_t * +ANY_new_fromType_aper(asn_TYPE_descriptor_t *td, void *sptr) { + ANY_t tmp; + ANY_t *st; + + if(!td || !sptr) { + errno = EINVAL; + return 0; + } + + memset(&tmp, 0, sizeof(tmp)); + + if(ANY_fromType_aper(&tmp, td, sptr)) return 0; + + st = (ANY_t *)CALLOC(1, sizeof(ANY_t)); + if(st) { + *st = tmp; + return st; + } else { + FREEMEM(tmp.buf); + return 0; + } +} + +int +ANY_to_type(ANY_t *st, asn_TYPE_descriptor_t *td, void **struct_ptr) { + asn_dec_rval_t rval; + void *newst = 0; + + if(!st || !td || !struct_ptr) { + errno = EINVAL; + return -1; + } + + if(st->buf == 0) { + /* Nothing to convert, make it empty. */ + *struct_ptr = (void *)0; + return 0; + } + + rval = ber_decode(0, td, (void **)&newst, st->buf, st->size); + if(rval.code == RC_OK) { + *struct_ptr = newst; + return 0; + } else { + /* Remove possibly partially decoded data. */ + ASN_STRUCT_FREE(*td, newst); + return -1; + } +} + +int +ANY_to_type_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void **struct_ptr) { + asn_dec_rval_t rval; + void *newst = 0; + + if(!st || !td || !struct_ptr) { + errno = EINVAL; + return -1; + } + + if(st->buf == 0) { + /* Nothing to convert, make it empty. */ + *struct_ptr = (void *)0; + return 0; + } + + rval = aper_decode(0, td, (void **)&newst, st->buf, st->size, 0, 0); + if(rval.code == RC_OK) { + *struct_ptr = newst; + return 0; + } else { + /* Remove possibly partially decoded data. */ + ASN_STRUCT_FREE(*td, newst); + return -1; + } +} + +static int ANY__consume_bytes(const void *buffer, size_t size, void *key) { + struct _callback_arg *arg = (struct _callback_arg *)key; + + if((arg->offset + size) >= arg->size) { + size_t nsize = (arg->size ? arg->size << 2 : 16) + size; + void *p = REALLOC(arg->buffer, nsize); + if(!p) return -1; + arg->buffer = (uint8_t *)p; + arg->size = nsize; + } + + memcpy(arg->buffer + arg->offset, buffer, size); + arg->offset += size; + assert(arg->offset < arg->size); + + return 0; +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +ANY_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_ANY_specs; + size_t consumed_myself = 0; + int repeat; + ANY_t *st = (ANY_t *)*sptr; + + (void)opt_codec_ctx; + (void)constraints; + + /* + * Allocate the structure. + */ + if(!st) { + st = (ANY_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("UPER Decoding ANY type"); + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + ssize_t len_bits; + void *p; + int ret; + + /* Get the PER length */ + raw_len = uper_get_length(pd, -1, 0, &repeat); + if(raw_len < 0) RETURN(RC_WMORE); + if(raw_len == 0 && st->buf) break; + + ASN_DEBUG("Got PER length len %" ASN_PRI_SIZE ", %s (%s)", raw_len, + repeat ? "repeat" : "once", td->name); + len_bytes = raw_len; + len_bits = len_bytes * 8; + + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, len_bits); + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += len_bits; + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + RETURN(RC_OK); +} + +asn_enc_rval_t +ANY_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const ANY_t *st = (const ANY_t *)sptr; + asn_enc_rval_t er = {0, 0, 0}; + const uint8_t *buf; + size_t size; + int ret; + + (void)constraints; + + if(!st || (!st->buf && st->size)) ASN__ENCODE_FAILED; + + buf = st->buf; + size = st->size; + do { + int need_eom = 0; + ssize_t may_save = uper_put_length(po, size, &need_eom); + if(may_save < 0) ASN__ENCODE_FAILED; + + ret = per_put_many_bits(po, buf, may_save * 8); + if(ret) ASN__ENCODE_FAILED; + + buf += may_save; + size -= may_save; + assert(!(may_save & 0x07) || !size); + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + } while(size); + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +ANY_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + const asn_OCTET_STRING_specifics_t *specs = + td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_SPC_ANY_specs; + size_t consumed_myself = 0; + int repeat; + ANY_t *st = (ANY_t *)*sptr; + + (void)opt_codec_ctx; + (void)constraints; + + /* + * Allocate the structure. + */ + if(!st) { + st = (ANY_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("APER Decoding ANY type"); + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + ssize_t len_bits; + void *p; + int ret; + + /* Get the PER length */ + raw_len = aper_get_length(pd, -1, 0, &repeat); + if(raw_len < 0) RETURN(RC_WMORE); + if(raw_len == 0 && st->buf) break; + + ASN_DEBUG("Got PER length len %" ASN_PRI_SIZE ", %s (%s)", raw_len, + repeat ? "repeat" : "once", td->name); + len_bytes = raw_len; + len_bits = len_bytes * 8; + + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, len_bits); + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += len_bits; + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + RETURN(RC_OK); +} + +asn_enc_rval_t +ANY_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const ANY_t *st = (const ANY_t *)sptr; + asn_enc_rval_t er = {0, 0, 0}; + const uint8_t *buf; + size_t size; + int ret; + + (void)constraints; + + if(!st || (!st->buf && st->size)) ASN__ENCODE_FAILED; + + buf = st->buf; + size = st->size; + do { + int need_eom = 0; + ssize_t may_save = uper_put_length(po, size, &need_eom); + if(may_save < 0) ASN__ENCODE_FAILED; + + ret = per_put_many_bits(po, buf, may_save * 8); + if(ret) ASN__ENCODE_FAILED; + + buf += may_save; + size -= may_save; + assert(!(may_save & 0x07) || !size); + if(need_eom && uper_put_length(po, 0, 0)) + ASN__ENCODE_FAILED; /* End of Message length */ + } while(size); + + ASN__ENCODED_OK(er); +} +#endif /* ASN_DISABLE_PER_SUPPORT */ + diff --git a/e2sm/lib/BMPString.c b/e2sm/lib/BMPString.c new file mode 100644 index 0000000..6b80ae7 --- /dev/null +++ b/e2sm/lib/BMPString.c @@ -0,0 +1,233 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * BMPString basic type description. + */ +static const ber_tlv_tag_t asn_DEF_BMPString_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (30 << 2)), /* [UNIVERSAL 30] IMPLICIT ...*/ + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) /* ... OCTET STRING */ +}; +asn_OCTET_STRING_specifics_t asn_SPC_BMPString_specs = { + sizeof(BMPString_t), + offsetof(BMPString_t, _asn_ctx), + ASN_OSUBV_U16 /* 16-bits character */ +}; +static asn_per_constraints_t asn_DEF_BMPString_per_constraints = { + { APC_CONSTRAINED, 16, 16, 0, 65535 }, + { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, + 0, 0 +}; +asn_TYPE_operation_t asn_OP_BMPString = { + OCTET_STRING_free, /* Implemented in terms of OCTET STRING */ + BMPString_print, + OCTET_STRING_compare, + OCTET_STRING_decode_ber, + OCTET_STRING_encode_der, + BMPString_decode_xer, /* Convert from UTF-8 */ + BMPString_encode_xer, /* Convert to UTF-8 */ +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + OCTET_STRING_decode_oer, + OCTET_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + OCTET_STRING_decode_uper, + OCTET_STRING_encode_uper, + OCTET_STRING_decode_aper, + OCTET_STRING_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + OCTET_STRING_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_BMPString = { + "BMPString", + "BMPString", + &asn_OP_BMPString, + asn_DEF_BMPString_tags, + sizeof(asn_DEF_BMPString_tags) + / sizeof(asn_DEF_BMPString_tags[0]) - 1, + asn_DEF_BMPString_tags, + sizeof(asn_DEF_BMPString_tags) + / sizeof(asn_DEF_BMPString_tags[0]), + { 0, &asn_DEF_BMPString_per_constraints, BMPString_constraint }, + 0, 0, /* No members */ + &asn_SPC_BMPString_specs +}; + +int +BMPString_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BMPString_t *st = (const BMPString_t *)sptr; + + if(st && st->buf) { + if(st->size & 1) { + ASN__CTFAIL(app_key, td, sptr, + "%s: invalid size %" ASN_PRI_SIZE " not divisible by 2 (%s:%d)", + td->name, st->size, __FILE__, __LINE__); + return -1; + } + } else { + ASN__CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, + __FILE__, __LINE__); + return -1; + } + + return 0; +} + +/* + * BMPString specific contents printer. + */ +static ssize_t +BMPString__dump(const BMPString_t *st, + asn_app_consume_bytes_f *cb, void *app_key) { + char scratch[128]; /* Scratchpad buffer */ + char *p = scratch; + ssize_t wrote = 0; + uint8_t *ch; + uint8_t *end; + + ch = st->buf; + end = (st->buf + st->size); + for(end--; ch < end; ch += 2) { + uint16_t wc = (ch[0] << 8) | ch[1]; /* 2 bytes */ + if(sizeof(scratch) - (p - scratch) < 3) { + wrote += p - scratch; + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + p = scratch; + } + if(wc < 0x80) { + *p++ = (char)wc; + } else if(wc < 0x800) { + *p++ = 0xc0 | ((wc >> 6)); + *p++ = 0x80 | ((wc & 0x3f)); + } else { + *p++ = 0xe0 | ((wc >> 12)); + *p++ = 0x80 | ((wc >> 6) & 0x3f); + *p++ = 0x80 | ((wc & 0x3f)); + } + } + + wrote += p - scratch; + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + + return wrote; +} + +asn_dec_rval_t +BMPString_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + asn_dec_rval_t rc; + + rc = OCTET_STRING_decode_xer_utf8(opt_codec_ctx, td, sptr, opt_mname, + buf_ptr, size); + if(rc.code == RC_OK) { + /* + * Now we have a whole string in UTF-8 format. + * Convert it into UCS-2. + */ + uint32_t *wcs; + size_t wcs_len; + UTF8String_t *st; + + assert(*sptr); + st = (UTF8String_t *)*sptr; + assert(st->buf); + wcs_len = UTF8String_to_wcs(st, 0, 0); + + wcs = (uint32_t *)MALLOC(4 * (wcs_len + 1)); + if(wcs == 0 || UTF8String_to_wcs(st, wcs, wcs_len) != wcs_len) { + rc.code = RC_FAIL; + rc.consumed = 0; + return rc; + } else { + wcs[wcs_len] = 0; /* nul-terminate */ + } + + if(1) { + /* Swap byte order and trim encoding to 2 bytes */ + uint32_t *wc = wcs; + uint32_t *wc_end = wcs + wcs_len; + uint16_t *dstwc = (uint16_t *)wcs; + for(; wc < wc_end; wc++, dstwc++) { + uint32_t wch = *wc; + if(wch > 0xffff) { + FREEMEM(wcs); + rc.code = RC_FAIL; + rc.consumed = 0; + return rc; + } + *((uint8_t *)dstwc + 0) = wch >> 8; + *((uint8_t *)dstwc + 1) = wch; + } + dstwc = (uint16_t *)REALLOC(wcs, 2 * (wcs_len + 1)); + if(!dstwc) { + FREEMEM(wcs); + rc.code = RC_FAIL; + rc.consumed = 0; + return rc; + } else { + dstwc[wcs_len] = 0; /* nul-terminate */ + wcs = (uint32_t *)(void *)dstwc; /* Alignment OK */ + } + } + + FREEMEM(st->buf); + st->buf = (uint8_t *)wcs; + st->size = 2 * wcs_len; + } + return rc; +} + +asn_enc_rval_t +BMPString_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const BMPString_t *st = (const BMPString_t *)sptr; + asn_enc_rval_t er = {0,0,0}; + + (void)ilevel; + (void)flags; + + if(!st || !st->buf) + ASN__ENCODE_FAILED; + + er.encoded = BMPString__dump(st, cb, app_key); + if(er.encoded < 0) ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +int +BMPString_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + const BMPString_t *st = (const BMPString_t *)sptr; + + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(!st || !st->buf) + return (cb("", 8, app_key) < 0) ? -1 : 0; + + if(BMPString__dump(st, cb, app_key) < 0) + return -1; + + return 0; +} + diff --git a/e2sm/lib/BOOLEAN.c b/e2sm/lib/BOOLEAN.c new file mode 100644 index 0000000..25831e2 --- /dev/null +++ b/e2sm/lib/BOOLEAN.c @@ -0,0 +1,492 @@ +/*- + * Copyright (c) 2003, 2005 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * BOOLEAN basic type description. + */ +static const ber_tlv_tag_t asn_DEF_BOOLEAN_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)) +}; +asn_TYPE_operation_t asn_OP_BOOLEAN = { + BOOLEAN_free, + BOOLEAN_print, + BOOLEAN_compare, + BOOLEAN_decode_ber, + BOOLEAN_encode_der, + BOOLEAN_decode_xer, + BOOLEAN_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + BOOLEAN_decode_oer, + BOOLEAN_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + BOOLEAN_decode_uper, /* Unaligned PER decoder */ + BOOLEAN_encode_uper, /* Unaligned PER encoder */ + BOOLEAN_decode_aper, /* Aligned PER decoder */ + BOOLEAN_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + BOOLEAN_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_BOOLEAN = { + "BOOLEAN", + "BOOLEAN", + &asn_OP_BOOLEAN, + asn_DEF_BOOLEAN_tags, + sizeof(asn_DEF_BOOLEAN_tags) / sizeof(asn_DEF_BOOLEAN_tags[0]), + asn_DEF_BOOLEAN_tags, /* Same as above */ + sizeof(asn_DEF_BOOLEAN_tags) / sizeof(asn_DEF_BOOLEAN_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +/* + * Decode BOOLEAN type. + */ +asn_dec_rval_t +BOOLEAN_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **bool_value, + const void *buf_ptr, size_t size, int tag_mode) { + BOOLEAN_t *st = (BOOLEAN_t *)*bool_value; + asn_dec_rval_t rval; + ber_tlv_len_t length; + ber_tlv_len_t lidx; + + if(st == NULL) { + st = (BOOLEAN_t *)(*bool_value = CALLOC(1, sizeof(*st))); + if(st == NULL) { + rval.code = RC_FAIL; + rval.consumed = 0; + return rval; + } + } + + ASN_DEBUG("Decoding %s as BOOLEAN (tm=%d)", + td->name, tag_mode); + + /* + * Check tags. + */ + rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size, + tag_mode, 0, &length, 0); + if(rval.code != RC_OK) + return rval; + + ASN_DEBUG("Boolean length is %d bytes", (int)length); + + buf_ptr = ((const char *)buf_ptr) + rval.consumed; + size -= rval.consumed; + if(length > (ber_tlv_len_t)size) { + rval.code = RC_WMORE; + rval.consumed = 0; + return rval; + } + + /* + * Compute boolean value. + */ + for(*st = 0, lidx = 0; + (lidx < length) && *st == 0; lidx++) { + /* + * Very simple approach: read bytes until the end or + * value is already TRUE. + * BOOLEAN is not supposed to contain meaningful data anyway. + */ + *st |= ((const uint8_t *)buf_ptr)[lidx]; + } + + rval.code = RC_OK; + rval.consumed += length; + + ASN_DEBUG("Took %ld/%ld bytes to encode %s, value=%d", + (long)rval.consumed, (long)length, + td->name, *st); + + return rval; +} + +asn_enc_rval_t +BOOLEAN_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, + void *app_key) { + asn_enc_rval_t erval = {0,0,0}; + const BOOLEAN_t *st = (const BOOLEAN_t *)sptr; + + erval.encoded = der_write_tags(td, 1, tag_mode, 0, tag, cb, app_key); + if(erval.encoded == -1) { + erval.failed_type = td; + erval.structure_ptr = sptr; + return erval; + } + + if(cb) { + uint8_t bool_value; + + bool_value = *st ? 0xff : 0; /* 0xff mandated by DER */ + + if(cb(&bool_value, 1, app_key) < 0) { + erval.encoded = -1; + erval.failed_type = td; + erval.structure_ptr = sptr; + return erval; + } + } + + erval.encoded += 1; + + ASN__ENCODED_OK(erval); +} + + +/* + * Decode the chunk of XML text encoding INTEGER. + */ +static enum xer_pbd_rval +BOOLEAN__xer_body_decode(const asn_TYPE_descriptor_t *td, void *sptr, + const void *chunk_buf, size_t chunk_size) { + BOOLEAN_t *st = (BOOLEAN_t *)sptr; + const char *p = (const char *)chunk_buf; + + (void)td; + + if(chunk_size && p[0] == 0x3c /* '<' */) { + switch(xer_check_tag(chunk_buf, chunk_size, "false")) { + case XCT_BOTH: + /* "" */ + *st = 0; + break; + case XCT_UNKNOWN_BO: + if(xer_check_tag(chunk_buf, chunk_size, "true") + != XCT_BOTH) + return XPBD_BROKEN_ENCODING; + /* "" */ + *st = 1; /* Or 0xff as in DER?.. */ + break; + default: + return XPBD_BROKEN_ENCODING; + } + return XPBD_BODY_CONSUMED; + } else { + return XPBD_BROKEN_ENCODING; + } +} + + +asn_dec_rval_t +BOOLEAN_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + return xer_decode_primitive(opt_codec_ctx, td, + sptr, sizeof(BOOLEAN_t), opt_mname, buf_ptr, size, + BOOLEAN__xer_body_decode); +} + +asn_enc_rval_t +BOOLEAN_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const BOOLEAN_t *st = (const BOOLEAN_t *)sptr; + asn_enc_rval_t er = {0, 0, 0}; + + (void)ilevel; + (void)flags; + + if(!st) ASN__ENCODE_FAILED; + + if(*st) { + ASN__CALLBACK("", 7); + } else { + ASN__CALLBACK("", 8); + } + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +int +BOOLEAN_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + const BOOLEAN_t *st = (const BOOLEAN_t *)sptr; + const char *buf; + size_t buflen; + + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(st) { + if(*st) { + buf = "TRUE"; + buflen = 4; + } else { + buf = "FALSE"; + buflen = 5; + } + } else { + buf = ""; + buflen = 8; + } + + return (cb(buf, buflen, app_key) < 0) ? -1 : 0; +} + +void +BOOLEAN_free(const asn_TYPE_descriptor_t *td, void *ptr, + enum asn_struct_free_method method) { + if(td && ptr) { + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(ptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(ptr, 0, sizeof(BOOLEAN_t)); + break; + } + } +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +BOOLEAN_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + asn_dec_rval_t rv; + BOOLEAN_t *st = (BOOLEAN_t *)*sptr; + + (void)opt_codec_ctx; + (void)td; + (void)constraints; + + if(!st) { + st = (BOOLEAN_t *)(*sptr = MALLOC(sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + /* + * Extract a single bit + */ + switch(per_get_few_bits(pd, 1)) { + case 1: *st = 1; break; + case 0: *st = 0; break; + case -1: default: ASN__DECODE_STARVED; + } + + ASN_DEBUG("%s decoded as %s", td->name, *st ? "TRUE" : "FALSE"); + + rv.code = RC_OK; + rv.consumed = 1; + return rv; +} + + +asn_enc_rval_t +BOOLEAN_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + const BOOLEAN_t *st = (const BOOLEAN_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + + (void)constraints; + + if(!st) ASN__ENCODE_FAILED; + + if(per_put_few_bits(po, *st ? 1 : 0, 1)) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +BOOLEAN_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + asn_dec_rval_t rv; + BOOLEAN_t *st = (BOOLEAN_t *)*sptr; + + (void)opt_codec_ctx; + (void)constraints; + (void)td; + + if(!st) { + st = (BOOLEAN_t *)(*sptr = MALLOC(sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + /* + * Extract a single bit + */ + switch(per_get_few_bits(pd, 1)) { + case 1: + *st = 1; + break; + case 0: + *st = 0; + break; + case -1: + default: + ASN__DECODE_STARVED; + } + + ASN_DEBUG("%s decoded as %s", td->name, *st ? "TRUE" : "FALSE"); + + rv.code = RC_OK; + rv.consumed = 1; + return rv; +} + +asn_enc_rval_t +BOOLEAN_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const BOOLEAN_t *st = (const BOOLEAN_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + + (void)constraints; + + if(!st) ASN__ENCODE_FAILED; + + if(per_put_few_bits(po, *st ? 1 : 0, 1)) + ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +#ifndef ASN_DISABLE_OER_SUPPORT + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +BOOLEAN_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = { 1, 0, 0 }; + const BOOLEAN_t *st = sptr; + uint8_t bool_value = *st ? 0xff : 0; /* 0xff mandated by OER */ + + (void)td; + (void)constraints; /* Constraints are unused in OER */ + + if(cb(&bool_value, 1, app_key) < 0) { + ASN__ENCODE_FAILED; + } else { + ASN__ENCODED_OK(er); + } +} + +asn_dec_rval_t +BOOLEAN_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **sptr, + const void *ptr, size_t size) { + asn_dec_rval_t ok = {RC_OK, 1}; + BOOLEAN_t *st; + + (void)opt_codec_ctx; + (void)td; + (void)constraints; /* Constraints are unused in OER */ + + if(size < 1) { + ASN__DECODE_STARVED; + } + + if(!(st = *sptr)) { + st = (BOOLEAN_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + *st = *(const uint8_t *)ptr; + + return ok; +} + + + +#endif + +int +BOOLEAN_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const BOOLEAN_t *a = aptr; + const BOOLEAN_t *b = bptr; + + (void)td; + + if(a && b) { + if(!*a == !*b) { /* TRUE can be encoded by any non-zero byte. */ + return 0; + } else if(!*a) { + return -1; + } else { + return 1; + } + } else if(!a) { + return -1; + } else { + return 1; + } +} + +asn_random_fill_result_t +BOOLEAN_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + BOOLEAN_t *st = *sptr; + + if(max_length == 0) return result_skipped; + + if(st == NULL) { + st = (BOOLEAN_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(st == NULL) { + return result_failed; + } + } + + if(!constraints || !constraints->per_constraints) + constraints = &td->encoding_constraints; + if(constraints->per_constraints) { + const asn_per_constraint_t *pc = &constraints->per_constraints->value; + if(pc->flags & APC_CONSTRAINED) { + *st = asn_random_between(pc->lower_bound, pc->upper_bound); + return result_ok; + } + } + + /* Simulate booleans that are sloppily set and biased. */ + switch(asn_random_between(0, 7)) { + case 0: + case 1: + case 2: + *st = 0; break; + case 3: *st = -1; break; + case 4: *st = 1; break; + case 5: *st = INT_MIN; break; + case 6: *st = INT_MAX; break; + default: + *st = asn_random_between(INT_MIN, INT_MAX); + break; + } + return result_ok; +} diff --git a/e2sm/lib/CGI.c b/e2sm/lib/CGI.c new file mode 100644 index 0000000..06e7420 --- /dev/null +++ b/e2sm/lib/CGI.c @@ -0,0 +1,64 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "CGI.h" + +#include "NR-CGI.h" +#include "EUTRA-CGI.h" +asn_per_constraints_t asn_PER_type_CGI_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_CGI_1[] = { + { ATF_POINTER, 0, offsetof(struct CGI, choice.nR_CGI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NR_CGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nR-CGI" + }, + { ATF_POINTER, 0, offsetof(struct CGI, choice.eUTRA_CGI), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EUTRA_CGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eUTRA-CGI" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_CGI_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nR-CGI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* eUTRA-CGI */ +}; +asn_CHOICE_specifics_t asn_SPC_CGI_specs_1 = { + sizeof(struct CGI), + offsetof(struct CGI, _asn_ctx), + offsetof(struct CGI, present), + sizeof(((struct CGI *)0)->present), + asn_MAP_CGI_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_CGI = { + "CGI", + "CGI", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_CGI_constr_1, CHOICE_constraint }, + asn_MBR_CGI_1, + 2, /* Elements count */ + &asn_SPC_CGI_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/CoreCPID.c b/e2sm/lib/CoreCPID.c new file mode 100644 index 0000000..b1ff013 --- /dev/null +++ b/e2sm/lib/CoreCPID.c @@ -0,0 +1,64 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "CoreCPID.h" + +#include "GUAMI.h" +#include "GUMMEI.h" +static asn_per_constraints_t asn_PER_type_CoreCPID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_CoreCPID_1[] = { + { ATF_POINTER, 0, offsetof(struct CoreCPID, choice.fiveGC), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GUAMI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "fiveGC" + }, + { ATF_POINTER, 0, offsetof(struct CoreCPID, choice.ePC), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GUMMEI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ePC" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_CoreCPID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* fiveGC */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ePC */ +}; +static asn_CHOICE_specifics_t asn_SPC_CoreCPID_specs_1 = { + sizeof(struct CoreCPID), + offsetof(struct CoreCPID, _asn_ctx), + offsetof(struct CoreCPID, present), + sizeof(((struct CoreCPID *)0)->present), + asn_MAP_CoreCPID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_CoreCPID = { + "CoreCPID", + "CoreCPID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_CoreCPID_constr_1, CHOICE_constraint }, + asn_MBR_CoreCPID_1, + 2, /* Elements count */ + &asn_SPC_CoreCPID_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/E-UTRA-ARFCN.c b/e2sm/lib/E-UTRA-ARFCN.c new file mode 100644 index 0000000..d1c0711 --- /dev/null +++ b/e2sm/lib/E-UTRA-ARFCN.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "E-UTRA-ARFCN.h" + +int +E_UTRA_ARFCN_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_E_UTRA_ARFCN_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_E_UTRA_ARFCN_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_E_UTRA_ARFCN = { + "E-UTRA-ARFCN", + "E-UTRA-ARFCN", + &asn_OP_NativeInteger, + asn_DEF_E_UTRA_ARFCN_tags_1, + sizeof(asn_DEF_E_UTRA_ARFCN_tags_1) + /sizeof(asn_DEF_E_UTRA_ARFCN_tags_1[0]), /* 1 */ + asn_DEF_E_UTRA_ARFCN_tags_1, /* Same as above */ + sizeof(asn_DEF_E_UTRA_ARFCN_tags_1) + /sizeof(asn_DEF_E_UTRA_ARFCN_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_UTRA_ARFCN_constr_1, E_UTRA_ARFCN_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/e2sm/lib/E-UTRA-PCI.c b/e2sm/lib/E-UTRA-PCI.c new file mode 100644 index 0000000..e84f147 --- /dev/null +++ b/e2sm/lib/E-UTRA-PCI.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "E-UTRA-PCI.h" + +int +E_UTRA_PCI_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 503)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_E_UTRA_PCI_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 9, 9, 0, 503 } /* (0..503,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_E_UTRA_PCI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_E_UTRA_PCI = { + "E-UTRA-PCI", + "E-UTRA-PCI", + &asn_OP_NativeInteger, + asn_DEF_E_UTRA_PCI_tags_1, + sizeof(asn_DEF_E_UTRA_PCI_tags_1) + /sizeof(asn_DEF_E_UTRA_PCI_tags_1[0]), /* 1 */ + asn_DEF_E_UTRA_PCI_tags_1, /* Same as above */ + sizeof(asn_DEF_E_UTRA_PCI_tags_1) + /sizeof(asn_DEF_E_UTRA_PCI_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_UTRA_PCI_constr_1, E_UTRA_PCI_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/e2sm/lib/E-UTRA-TAC.c b/e2sm/lib/E-UTRA-TAC.c new file mode 100644 index 0000000..2c90250 --- /dev/null +++ b/e2sm/lib/E-UTRA-TAC.c @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "E-UTRA-TAC.h" + +int +E_UTRA_TAC_constraint(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 == 2)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_E_UTRA_TAC_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 2, 2 } /* (SIZE(2..2)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_E_UTRA_TAC_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_E_UTRA_TAC = { + "E-UTRA-TAC", + "E-UTRA-TAC", + &asn_OP_OCTET_STRING, + asn_DEF_E_UTRA_TAC_tags_1, + sizeof(asn_DEF_E_UTRA_TAC_tags_1) + /sizeof(asn_DEF_E_UTRA_TAC_tags_1[0]), /* 1 */ + asn_DEF_E_UTRA_TAC_tags_1, /* Same as above */ + sizeof(asn_DEF_E_UTRA_TAC_tags_1) + /sizeof(asn_DEF_E_UTRA_TAC_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_E_UTRA_TAC_constr_1, E_UTRA_TAC_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/e2sm/lib/E2SM-KPM-ActionDefinition-Format1.c b/e2sm/lib/E2SM-KPM-ActionDefinition-Format1.c new file mode 100644 index 0000000..4975a24 --- /dev/null +++ b/e2sm/lib/E2SM-KPM-ActionDefinition-Format1.c @@ -0,0 +1,73 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "E2SM-KPM-ActionDefinition-Format1.h" + +#include "CGI.h" +asn_TYPE_member_t asn_MBR_E2SM_KPM_ActionDefinition_Format1_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_ActionDefinition_Format1, measInfoList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasurementInfoList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "measInfoList" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_ActionDefinition_Format1, granulPeriod), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GranularityPeriod, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "granulPeriod" + }, + { ATF_POINTER, 1, offsetof(struct E2SM_KPM_ActionDefinition_Format1, cellGlobalID), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_CGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cellGlobalID" + }, +}; +static const int asn_MAP_E2SM_KPM_ActionDefinition_Format1_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_ActionDefinition_Format1_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_ActionDefinition_Format1_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* measInfoList */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* granulPeriod */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* cellGlobalID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_ActionDefinition_Format1_specs_1 = { + sizeof(struct E2SM_KPM_ActionDefinition_Format1), + offsetof(struct E2SM_KPM_ActionDefinition_Format1, _asn_ctx), + asn_MAP_E2SM_KPM_ActionDefinition_Format1_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_E2SM_KPM_ActionDefinition_Format1_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_ActionDefinition_Format1 = { + "E2SM-KPM-ActionDefinition-Format1", + "E2SM-KPM-ActionDefinition-Format1", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_ActionDefinition_Format1_tags_1, + sizeof(asn_DEF_E2SM_KPM_ActionDefinition_Format1_tags_1) + /sizeof(asn_DEF_E2SM_KPM_ActionDefinition_Format1_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_ActionDefinition_Format1_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_ActionDefinition_Format1_tags_1) + /sizeof(asn_DEF_E2SM_KPM_ActionDefinition_Format1_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_KPM_ActionDefinition_Format1_1, + 3, /* Elements count */ + &asn_SPC_E2SM_KPM_ActionDefinition_Format1_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/E2SM-KPM-ActionDefinition-Format2.c b/e2sm/lib/E2SM-KPM-ActionDefinition-Format2.c new file mode 100644 index 0000000..3768a39 --- /dev/null +++ b/e2sm/lib/E2SM-KPM-ActionDefinition-Format2.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "E2SM-KPM-ActionDefinition-Format2.h" + +asn_TYPE_member_t asn_MBR_E2SM_KPM_ActionDefinition_Format2_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_ActionDefinition_Format2, ueID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_UEID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ueID" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_ActionDefinition_Format2, subscriptInfo), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E2SM_KPM_ActionDefinition_Format1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "subscriptInfo" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_ActionDefinition_Format2_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_ActionDefinition_Format2_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ueID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* subscriptInfo */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_ActionDefinition_Format2_specs_1 = { + sizeof(struct E2SM_KPM_ActionDefinition_Format2), + offsetof(struct E2SM_KPM_ActionDefinition_Format2, _asn_ctx), + asn_MAP_E2SM_KPM_ActionDefinition_Format2_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_ActionDefinition_Format2 = { + "E2SM-KPM-ActionDefinition-Format2", + "E2SM-KPM-ActionDefinition-Format2", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_ActionDefinition_Format2_tags_1, + sizeof(asn_DEF_E2SM_KPM_ActionDefinition_Format2_tags_1) + /sizeof(asn_DEF_E2SM_KPM_ActionDefinition_Format2_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_ActionDefinition_Format2_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_ActionDefinition_Format2_tags_1) + /sizeof(asn_DEF_E2SM_KPM_ActionDefinition_Format2_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_KPM_ActionDefinition_Format2_1, + 2, /* Elements count */ + &asn_SPC_E2SM_KPM_ActionDefinition_Format2_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/E2SM-KPM-ActionDefinition-Format3.c b/e2sm/lib/E2SM-KPM-ActionDefinition-Format3.c new file mode 100644 index 0000000..3851720 --- /dev/null +++ b/e2sm/lib/E2SM-KPM-ActionDefinition-Format3.c @@ -0,0 +1,73 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "E2SM-KPM-ActionDefinition-Format3.h" + +#include "CGI.h" +asn_TYPE_member_t asn_MBR_E2SM_KPM_ActionDefinition_Format3_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_ActionDefinition_Format3, measCondList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasurementCondList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "measCondList" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_ActionDefinition_Format3, granulPeriod), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GranularityPeriod, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "granulPeriod" + }, + { ATF_POINTER, 1, offsetof(struct E2SM_KPM_ActionDefinition_Format3, cellGlobalID), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_CGI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "cellGlobalID" + }, +}; +static const int asn_MAP_E2SM_KPM_ActionDefinition_Format3_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_ActionDefinition_Format3_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_ActionDefinition_Format3_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* measCondList */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* granulPeriod */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* cellGlobalID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_ActionDefinition_Format3_specs_1 = { + sizeof(struct E2SM_KPM_ActionDefinition_Format3), + offsetof(struct E2SM_KPM_ActionDefinition_Format3, _asn_ctx), + asn_MAP_E2SM_KPM_ActionDefinition_Format3_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_E2SM_KPM_ActionDefinition_Format3_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_ActionDefinition_Format3 = { + "E2SM-KPM-ActionDefinition-Format3", + "E2SM-KPM-ActionDefinition-Format3", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_ActionDefinition_Format3_tags_1, + sizeof(asn_DEF_E2SM_KPM_ActionDefinition_Format3_tags_1) + /sizeof(asn_DEF_E2SM_KPM_ActionDefinition_Format3_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_ActionDefinition_Format3_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_ActionDefinition_Format3_tags_1) + /sizeof(asn_DEF_E2SM_KPM_ActionDefinition_Format3_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_KPM_ActionDefinition_Format3_1, + 3, /* Elements count */ + &asn_SPC_E2SM_KPM_ActionDefinition_Format3_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/E2SM-KPM-ActionDefinition.c b/e2sm/lib/E2SM-KPM-ActionDefinition.c index 90f59e0..4b22a6c 100644 --- a/e2sm/lib/E2SM-KPM-ActionDefinition.c +++ b/e2sm/lib/E2SM-KPM-ActionDefinition.c @@ -1,12 +1,79 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #include "E2SM-KPM-ActionDefinition.h" +#include "E2SM-KPM-ActionDefinition-Format1.h" +#include "E2SM-KPM-ActionDefinition-Format2.h" +#include "E2SM-KPM-ActionDefinition-Format3.h" +static asn_per_constraints_t asn_PER_type_actionDefinition_formats_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_actionDefinition_formats_3[] = { + { ATF_POINTER, 0, offsetof(struct E2SM_KPM_ActionDefinition__actionDefinition_formats, choice.actionDefinition_Format1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E2SM_KPM_ActionDefinition_Format1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "actionDefinition-Format1" + }, + { ATF_POINTER, 0, offsetof(struct E2SM_KPM_ActionDefinition__actionDefinition_formats, choice.actionDefinition_Format2), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E2SM_KPM_ActionDefinition_Format2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "actionDefinition-Format2" + }, + { ATF_POINTER, 0, offsetof(struct E2SM_KPM_ActionDefinition__actionDefinition_formats, choice.actionDefinition_Format3), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E2SM_KPM_ActionDefinition_Format3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "actionDefinition-Format3" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_actionDefinition_formats_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* actionDefinition-Format1 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* actionDefinition-Format2 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* actionDefinition-Format3 */ +}; +static asn_CHOICE_specifics_t asn_SPC_actionDefinition_formats_specs_3 = { + sizeof(struct E2SM_KPM_ActionDefinition__actionDefinition_formats), + offsetof(struct E2SM_KPM_ActionDefinition__actionDefinition_formats, _asn_ctx), + offsetof(struct E2SM_KPM_ActionDefinition__actionDefinition_formats, present), + sizeof(((struct E2SM_KPM_ActionDefinition__actionDefinition_formats *)0)->present), + asn_MAP_actionDefinition_formats_tag2el_3, + 3, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_actionDefinition_formats_3 = { + "actionDefinition-formats", + "actionDefinition-formats", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_actionDefinition_formats_constr_3, CHOICE_constraint }, + asn_MBR_actionDefinition_formats_3, + 3, /* Elements count */ + &asn_SPC_actionDefinition_formats_specs_3 /* Additional specs */ +}; + static asn_TYPE_member_t asn_MBR_E2SM_KPM_ActionDefinition_1[] = { { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_ActionDefinition, ric_Style_Type), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), @@ -17,20 +84,30 @@ static asn_TYPE_member_t asn_MBR_E2SM_KPM_ActionDefinition_1[] = { 0, 0, /* No default value */ "ric-Style-Type" }, + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_ActionDefinition, actionDefinition_formats), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_actionDefinition_formats_3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "actionDefinition-formats" + }, }; static const ber_tlv_tag_t asn_DEF_E2SM_KPM_ActionDefinition_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_ActionDefinition_tag2el_1[] = { - { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ric-Style-Type */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-Style-Type */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* actionDefinition-formats */ }; static asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_ActionDefinition_specs_1 = { sizeof(struct E2SM_KPM_ActionDefinition), offsetof(struct E2SM_KPM_ActionDefinition, _asn_ctx), asn_MAP_E2SM_KPM_ActionDefinition_tag2el_1, - 1, /* Count of tags in the map */ + 2, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ - 1, /* First extension addition */ + 2, /* First extension addition */ }; asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_ActionDefinition = { "E2SM-KPM-ActionDefinition", @@ -44,7 +121,7 @@ asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_ActionDefinition = { /sizeof(asn_DEF_E2SM_KPM_ActionDefinition_tags_1[0]), /* 1 */ { 0, 0, SEQUENCE_constraint }, asn_MBR_E2SM_KPM_ActionDefinition_1, - 1, /* Elements count */ + 2, /* Elements count */ &asn_SPC_E2SM_KPM_ActionDefinition_specs_1 /* Additional specs */ }; diff --git a/e2sm/lib/E2SM-KPM-EventTriggerDefinition-Format1.c b/e2sm/lib/E2SM-KPM-EventTriggerDefinition-Format1.c index db0be2b..27ea6c1 100644 --- a/e2sm/lib/E2SM-KPM-EventTriggerDefinition-Format1.c +++ b/e2sm/lib/E2SM-KPM-EventTriggerDefinition-Format1.c @@ -1,17 +1,16 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #include "E2SM-KPM-EventTriggerDefinition-Format1.h" -#include "Trigger-ConditionIE-Item.h" static int -memb_policyTest_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, +reportingPeriod_2_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { - size_t size; + unsigned long value; if(!sptr) { ASN__CTFAIL(app_key, td, sptr, @@ -20,12 +19,11 @@ memb_policyTest_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *s return -1; } - /* Determine the number of elements */ - size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + value = *(const unsigned long *)sptr; - if((size >= 1 && size <= 15)) { - /* Perform validation of the inner elements */ - return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); + if((value >= 1 && value <= 4294967295)) { + /* Constraint check succeeded */ + return 0; } else { ASN__CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", @@ -34,84 +32,93 @@ memb_policyTest_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *s } } -static asn_oer_constraints_t asn_OER_type_policyTest_List_constr_2 CC_NOTUSED = { - { 0, 0 }, - -1 /* (SIZE(1..15)) */}; -static asn_per_constraints_t asn_PER_type_policyTest_List_constr_2 CC_NOTUSED = { +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static int +memb_reportingPeriod_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + unsigned long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const unsigned long *)sptr; + + if((value >= 1 && value <= 4294967295)) { + /* 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_per_constraints_t asn_PER_type_reportingPeriod_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 32, -1, 1, 4294967295 } /* (1..4294967295) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, - { APC_CONSTRAINED, 4, 4, 1, 15 } /* (SIZE(1..15)) */, 0, 0 /* No PER value map */ }; -static asn_oer_constraints_t asn_OER_memb_policyTest_List_constr_2 CC_NOTUSED = { - { 0, 0 }, - -1 /* (SIZE(1..15)) */}; -static asn_per_constraints_t asn_PER_memb_policyTest_List_constr_2 CC_NOTUSED = { +static asn_per_constraints_t asn_PER_memb_reportingPeriod_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 32, -1, 1, 4294967295 } /* (1..4294967295) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, - { APC_CONSTRAINED, 4, 4, 1, 15 } /* (SIZE(1..15)) */, 0, 0 /* No PER value map */ }; -static asn_TYPE_member_t asn_MBR_policyTest_List_2[] = { - { ATF_POINTER, 0, 0, - (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), - 0, - &asn_DEF_Trigger_ConditionIE_Item, - 0, - { 0, 0, 0 }, - 0, 0, /* No default value */ - "" - }, +static const asn_INTEGER_specifics_t asn_SPC_reportingPeriod_specs_2 = { + 0, 0, 0, 0, 0, + 0, /* Native long size */ + 1 /* Unsigned representation */ }; -static const ber_tlv_tag_t asn_DEF_policyTest_List_tags_2[] = { +static const ber_tlv_tag_t asn_DEF_reportingPeriod_tags_2[] = { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), - (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) -}; -static asn_SET_OF_specifics_t asn_SPC_policyTest_List_specs_2 = { - sizeof(struct E2SM_KPM_EventTriggerDefinition_Format1__policyTest_List), - offsetof(struct E2SM_KPM_EventTriggerDefinition_Format1__policyTest_List, _asn_ctx), - 0, /* XER encoding is XMLDelimitedItemList */ + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; static /* Use -fall-defs-global to expose */ -asn_TYPE_descriptor_t asn_DEF_policyTest_List_2 = { - "policyTest-List", - "policyTest-List", - &asn_OP_SEQUENCE_OF, - asn_DEF_policyTest_List_tags_2, - sizeof(asn_DEF_policyTest_List_tags_2) - /sizeof(asn_DEF_policyTest_List_tags_2[0]) - 1, /* 1 */ - asn_DEF_policyTest_List_tags_2, /* Same as above */ - sizeof(asn_DEF_policyTest_List_tags_2) - /sizeof(asn_DEF_policyTest_List_tags_2[0]), /* 2 */ - { &asn_OER_type_policyTest_List_constr_2, &asn_PER_type_policyTest_List_constr_2, SEQUENCE_OF_constraint }, - asn_MBR_policyTest_List_2, - 1, /* Single element */ - &asn_SPC_policyTest_List_specs_2 /* Additional specs */ +asn_TYPE_descriptor_t asn_DEF_reportingPeriod_2 = { + "reportingPeriod", + "reportingPeriod", + &asn_OP_NativeInteger, + asn_DEF_reportingPeriod_tags_2, + sizeof(asn_DEF_reportingPeriod_tags_2) + /sizeof(asn_DEF_reportingPeriod_tags_2[0]) - 1, /* 1 */ + asn_DEF_reportingPeriod_tags_2, /* Same as above */ + sizeof(asn_DEF_reportingPeriod_tags_2) + /sizeof(asn_DEF_reportingPeriod_tags_2[0]), /* 2 */ + { 0, &asn_PER_type_reportingPeriod_constr_2, reportingPeriod_2_constraint }, + 0, 0, /* No members */ + &asn_SPC_reportingPeriod_specs_2 /* Additional specs */ }; asn_TYPE_member_t asn_MBR_E2SM_KPM_EventTriggerDefinition_Format1_1[] = { - { ATF_POINTER, 1, offsetof(struct E2SM_KPM_EventTriggerDefinition_Format1, policyTest_List), + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_EventTriggerDefinition_Format1, reportingPeriod), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_reportingPeriod_2, 0, - &asn_DEF_policyTest_List_2, - 0, - { &asn_OER_memb_policyTest_List_constr_2, &asn_PER_memb_policyTest_List_constr_2, memb_policyTest_List_constraint_1 }, + { 0, &asn_PER_memb_reportingPeriod_constr_2, memb_reportingPeriod_constraint_1 }, 0, 0, /* No default value */ - "policyTest-List" + "reportingPeriod" }, }; -static const int asn_MAP_E2SM_KPM_EventTriggerDefinition_Format1_oms_1[] = { 0 }; static const ber_tlv_tag_t asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_EventTriggerDefinition_Format1_tag2el_1[] = { - { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* policyTest-List */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* reportingPeriod */ }; asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_EventTriggerDefinition_Format1_specs_1 = { sizeof(struct E2SM_KPM_EventTriggerDefinition_Format1), offsetof(struct E2SM_KPM_EventTriggerDefinition_Format1, _asn_ctx), asn_MAP_E2SM_KPM_EventTriggerDefinition_Format1_tag2el_1, 1, /* Count of tags in the map */ - asn_MAP_E2SM_KPM_EventTriggerDefinition_Format1_oms_1, /* Optional members */ - 1, 0, /* Root/Additions */ + 0, 0, 0, /* Optional elements (not needed) */ 1, /* First extension addition */ }; asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1 = { diff --git a/e2sm/lib/E2SM-KPM-EventTriggerDefinition.c b/e2sm/lib/E2SM-KPM-EventTriggerDefinition.c index ffa5bd5..0b12ca9 100644 --- a/e2sm/lib/E2SM-KPM-EventTriggerDefinition.c +++ b/e2sm/lib/E2SM-KPM-EventTriggerDefinition.c @@ -1,23 +1,20 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #include "E2SM-KPM-EventTriggerDefinition.h" #include "E2SM-KPM-EventTriggerDefinition-Format1.h" -static asn_oer_constraints_t asn_OER_type_E2SM_KPM_EventTriggerDefinition_constr_1 CC_NOTUSED = { - { 0, 0 }, - -1}; -static asn_per_constraints_t asn_PER_type_E2SM_KPM_EventTriggerDefinition_constr_1 CC_NOTUSED = { +static asn_per_constraints_t asn_PER_type_eventDefinition_formats_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_E2SM_KPM_EventTriggerDefinition_1[] = { - { ATF_POINTER, 0, offsetof(struct E2SM_KPM_EventTriggerDefinition, choice.eventDefinition_Format1), +static asn_TYPE_member_t asn_MBR_eventDefinition_formats_2[] = { + { ATF_POINTER, 0, offsetof(struct E2SM_KPM_EventTriggerDefinition__eventDefinition_formats, choice.eventDefinition_Format1), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_E2SM_KPM_EventTriggerDefinition_Format1, @@ -27,28 +24,70 @@ static asn_TYPE_member_t asn_MBR_E2SM_KPM_EventTriggerDefinition_1[] = { "eventDefinition-Format1" }, }; -static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_EventTriggerDefinition_tag2el_1[] = { +static const asn_TYPE_tag2member_t asn_MAP_eventDefinition_formats_tag2el_2[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* eventDefinition-Format1 */ }; -static asn_CHOICE_specifics_t asn_SPC_E2SM_KPM_EventTriggerDefinition_specs_1 = { - sizeof(struct E2SM_KPM_EventTriggerDefinition), - offsetof(struct E2SM_KPM_EventTriggerDefinition, _asn_ctx), - offsetof(struct E2SM_KPM_EventTriggerDefinition, present), - sizeof(((struct E2SM_KPM_EventTriggerDefinition *)0)->present), - asn_MAP_E2SM_KPM_EventTriggerDefinition_tag2el_1, +static asn_CHOICE_specifics_t asn_SPC_eventDefinition_formats_specs_2 = { + sizeof(struct E2SM_KPM_EventTriggerDefinition__eventDefinition_formats), + offsetof(struct E2SM_KPM_EventTriggerDefinition__eventDefinition_formats, _asn_ctx), + offsetof(struct E2SM_KPM_EventTriggerDefinition__eventDefinition_formats, present), + sizeof(((struct E2SM_KPM_EventTriggerDefinition__eventDefinition_formats *)0)->present), + asn_MAP_eventDefinition_formats_tag2el_2, 1, /* Count of tags in the map */ 0, 0, 1 /* Extensions start */ }; -asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_EventTriggerDefinition = { - "E2SM-KPM-EventTriggerDefinition", - "E2SM-KPM-EventTriggerDefinition", +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_eventDefinition_formats_2 = { + "eventDefinition-formats", + "eventDefinition-formats", &asn_OP_CHOICE, 0, /* No effective tags (pointer) */ 0, /* No effective tags (count) */ 0, /* No tags (pointer) */ 0, /* No tags (count) */ - { &asn_OER_type_E2SM_KPM_EventTriggerDefinition_constr_1, &asn_PER_type_E2SM_KPM_EventTriggerDefinition_constr_1, CHOICE_constraint }, + { 0, &asn_PER_type_eventDefinition_formats_constr_2, CHOICE_constraint }, + asn_MBR_eventDefinition_formats_2, + 1, /* Elements count */ + &asn_SPC_eventDefinition_formats_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_E2SM_KPM_EventTriggerDefinition_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_EventTriggerDefinition, eventDefinition_formats), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_eventDefinition_formats_2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eventDefinition-formats" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_EventTriggerDefinition_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_EventTriggerDefinition_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* eventDefinition-formats */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_EventTriggerDefinition_specs_1 = { + sizeof(struct E2SM_KPM_EventTriggerDefinition), + offsetof(struct E2SM_KPM_EventTriggerDefinition, _asn_ctx), + asn_MAP_E2SM_KPM_EventTriggerDefinition_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_EventTriggerDefinition = { + "E2SM-KPM-EventTriggerDefinition", + "E2SM-KPM-EventTriggerDefinition", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_EventTriggerDefinition_tags_1, + sizeof(asn_DEF_E2SM_KPM_EventTriggerDefinition_tags_1) + /sizeof(asn_DEF_E2SM_KPM_EventTriggerDefinition_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_EventTriggerDefinition_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_EventTriggerDefinition_tags_1) + /sizeof(asn_DEF_E2SM_KPM_EventTriggerDefinition_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, asn_MBR_E2SM_KPM_EventTriggerDefinition_1, 1, /* Elements count */ &asn_SPC_E2SM_KPM_EventTriggerDefinition_specs_1 /* Additional specs */ diff --git a/e2sm/lib/E2SM-KPM-IndicationHeader-Format1.c b/e2sm/lib/E2SM-KPM-IndicationHeader-Format1.c index 9c7b491..21e5ae3 100644 --- a/e2sm/lib/E2SM-KPM-IndicationHeader-Format1.c +++ b/e2sm/lib/E2SM-KPM-IndicationHeader-Format1.c @@ -1,21 +1,182 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #include "E2SM-KPM-IndicationHeader-Format1.h" -#include "GlobalKPMnode-ID.h" -#include "NRCGI.h" -#include "SNSSAI.h" -#include "GNB-Name.h" -#include "GlobalgNB-ID.h" +static const int permitted_alphabet_table_3[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_3[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_3(const void *sptr) { + const int *table = permitted_alphabet_table_3; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +static const int permitted_alphabet_table_4[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_4[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_4(const void *sptr) { + const int *table = permitted_alphabet_table_4; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +static const int permitted_alphabet_table_5[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_5[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_5(const void *sptr) { + const int *table = permitted_alphabet_table_5; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +static const int permitted_alphabet_table_6[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_6[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_6(const void *sptr) { + const int *table = permitted_alphabet_table_6; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +static int +memb_fileFormatversion_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_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 <= 15) + && !check_permitted_alphabet_3(st)) { + /* 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 asn_PER_MAP_fileFormatversion_3_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_3)/sizeof(permitted_alphabet_table_3[0])) + return -1; + return permitted_alphabet_table_3[value] - 1; +} +static int asn_PER_MAP_fileFormatversion_3_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_3)/sizeof(permitted_alphabet_code2value_3[0])) + return -1; + return permitted_alphabet_code2value_3[code]; +} static int -memb_fiveQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, +memb_senderName_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { - long value; + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; if(!sptr) { ASN__CTFAIL(app_key, td, sptr, @@ -24,9 +185,10 @@ memb_fiveQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, return -1; } - value = *(const long *)sptr; + size = st->size; - if((value >= 0 && value <= 255)) { + if((size <= 400) + && !check_permitted_alphabet_4(st)) { /* Constraint check succeeded */ return 0; } else { @@ -37,10 +199,21 @@ memb_fiveQI_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, } } +static int asn_PER_MAP_senderName_4_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_4)/sizeof(permitted_alphabet_table_4[0])) + return -1; + return permitted_alphabet_table_4[value] - 1; +} +static int asn_PER_MAP_senderName_4_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_4)/sizeof(permitted_alphabet_code2value_4[0])) + return -1; + return permitted_alphabet_code2value_4[code]; +} static int -memb_qci_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, +memb_senderType_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { - long value; + const PrintableString_t *st = (const PrintableString_t *)sptr; + size_t size; if(!sptr) { ASN__CTFAIL(app_key, td, sptr, @@ -49,9 +222,10 @@ memb_qci_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, return -1; } - value = *(const long *)sptr; + size = st->size; - if((value >= 0 && value <= 255)) { + if((size <= 8) + && !check_permitted_alphabet_5(st)) { /* Constraint check succeeded */ return 0; } else { @@ -62,138 +236,143 @@ memb_qci_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, } } -static asn_oer_constraints_t asn_OER_memb_fiveQI_constr_6 CC_NOTUSED = { - { 1, 1 } /* (0..255) */, - -1}; -static asn_per_constraints_t asn_PER_memb_fiveQI_constr_6 CC_NOTUSED = { - { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, - { APC_UNCONSTRAINED, -1, -1, 0, 0 }, - 0, 0 /* No PER value map */ +static int asn_PER_MAP_senderType_5_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_5)/sizeof(permitted_alphabet_table_5[0])) + return -1; + return permitted_alphabet_table_5[value] - 1; +} +static int asn_PER_MAP_senderType_5_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_5)/sizeof(permitted_alphabet_code2value_5[0])) + return -1; + return permitted_alphabet_code2value_5[code]; +} +static int +memb_vendorName_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_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 <= 32) + && !check_permitted_alphabet_6(st)) { + /* 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 asn_PER_MAP_vendorName_6_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_6)/sizeof(permitted_alphabet_table_6[0])) + return -1; + return permitted_alphabet_table_6[value] - 1; +} +static int asn_PER_MAP_vendorName_6_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_6)/sizeof(permitted_alphabet_code2value_6[0])) + return -1; + return permitted_alphabet_code2value_6[code]; +} +static asn_per_constraints_t asn_PER_memb_fileFormatversion_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 15 } /* (SIZE(0..15,...)) */, + asn_PER_MAP_fileFormatversion_3_v2c, /* Value to PER code map */ + asn_PER_MAP_fileFormatversion_3_c2v /* PER code to value map */ +}; +static asn_per_constraints_t asn_PER_memb_senderName_constr_4 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 9, 9, 0, 400 } /* (SIZE(0..400,...)) */, + asn_PER_MAP_senderName_4_v2c, /* Value to PER code map */ + asn_PER_MAP_senderName_4_c2v /* PER code to value map */ }; -static asn_oer_constraints_t asn_OER_memb_qci_constr_7 CC_NOTUSED = { - { 1, 1 } /* (0..255) */, - -1}; -static asn_per_constraints_t asn_PER_memb_qci_constr_7 CC_NOTUSED = { - { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, - { APC_UNCONSTRAINED, -1, -1, 0, 0 }, - 0, 0 /* No PER value map */ +static asn_per_constraints_t asn_PER_memb_senderType_constr_5 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 8 } /* (SIZE(0..8,...)) */, + asn_PER_MAP_senderType_5_v2c, /* Value to PER code map */ + asn_PER_MAP_senderType_5_c2v /* PER code to value map */ +}; +static asn_per_constraints_t asn_PER_memb_vendorName_constr_6 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 6, 6, 0, 32 } /* (SIZE(0..32,...)) */, + asn_PER_MAP_vendorName_6_v2c, /* Value to PER code map */ + asn_PER_MAP_vendorName_6_c2v /* PER code to value map */ }; asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationHeader_Format1_1[] = { - { ATF_POINTER, 10, offsetof(struct E2SM_KPM_IndicationHeader_Format1, id_GlobalKPMnode_ID), + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationHeader_Format1, colletStartTime), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), - +1, /* EXPLICIT tag at current level */ - &asn_DEF_GlobalKPMnode_ID, + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TimeStamp, 0, { 0, 0, 0 }, 0, 0, /* No default value */ - "id-GlobalKPMnode-ID" + "colletStartTime" }, - { ATF_POINTER, 9, offsetof(struct E2SM_KPM_IndicationHeader_Format1, nRCGI), + { ATF_POINTER, 4, offsetof(struct E2SM_KPM_IndicationHeader_Format1, fileFormatversion), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ - &asn_DEF_NRCGI, + &asn_DEF_PrintableString, 0, - { 0, 0, 0 }, + { 0, &asn_PER_memb_fileFormatversion_constr_3, memb_fileFormatversion_constraint_1 }, 0, 0, /* No default value */ - "nRCGI" + "fileFormatversion" }, - { ATF_POINTER, 8, offsetof(struct E2SM_KPM_IndicationHeader_Format1, pLMN_Identity), + { ATF_POINTER, 3, offsetof(struct E2SM_KPM_IndicationHeader_Format1, senderName), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ - &asn_DEF_PLMN_Identity, + &asn_DEF_PrintableString, 0, - { 0, 0, 0 }, + { 0, &asn_PER_memb_senderName_constr_4, memb_senderName_constraint_1 }, 0, 0, /* No default value */ - "pLMN-Identity" + "senderName" }, - { ATF_POINTER, 7, offsetof(struct E2SM_KPM_IndicationHeader_Format1, sliceID), + { ATF_POINTER, 2, offsetof(struct E2SM_KPM_IndicationHeader_Format1, senderType), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ - &asn_DEF_SNSSAI, + &asn_DEF_PrintableString, 0, - { 0, 0, 0 }, + { 0, &asn_PER_memb_senderType_constr_5, memb_senderType_constraint_1 }, 0, 0, /* No default value */ - "sliceID" + "senderType" }, - { ATF_POINTER, 6, offsetof(struct E2SM_KPM_IndicationHeader_Format1, fiveQI), + { ATF_POINTER, 1, offsetof(struct E2SM_KPM_IndicationHeader_Format1, vendorName), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ - &asn_DEF_NativeInteger, - 0, - { &asn_OER_memb_fiveQI_constr_6, &asn_PER_memb_fiveQI_constr_6, memb_fiveQI_constraint_1 }, - 0, 0, /* No default value */ - "fiveQI" - }, - { ATF_POINTER, 5, offsetof(struct E2SM_KPM_IndicationHeader_Format1, qci), - (ASN_TAG_CLASS_CONTEXT | (5 << 2)), - -1, /* IMPLICIT tag at current level */ - &asn_DEF_NativeInteger, - 0, - { &asn_OER_memb_qci_constr_7, &asn_PER_memb_qci_constr_7, memb_qci_constraint_1 }, - 0, 0, /* No default value */ - "qci" - }, - { ATF_POINTER, 4, offsetof(struct E2SM_KPM_IndicationHeader_Format1, message_Type), - (ASN_TAG_CLASS_CONTEXT | (6 << 2)), - -1, /* IMPLICIT tag at current level */ - &asn_DEF_UE_Report_Type, - 0, - { 0, 0, 0 }, - 0, 0, /* No default value */ - "message-Type" - }, - { ATF_POINTER, 3, offsetof(struct E2SM_KPM_IndicationHeader_Format1, gNB_DU_ID), - (ASN_TAG_CLASS_CONTEXT | (7 << 2)), - -1, /* IMPLICIT tag at current level */ - &asn_DEF_GNB_DU_ID, - 0, - { 0, 0, 0 }, - 0, 0, /* No default value */ - "gNB-DU-ID" - }, - { ATF_POINTER, 2, offsetof(struct E2SM_KPM_IndicationHeader_Format1, gNB_Name), - (ASN_TAG_CLASS_CONTEXT | (8 << 2)), - +1, /* EXPLICIT tag at current level */ - &asn_DEF_GNB_Name, - 0, - { 0, 0, 0 }, - 0, 0, /* No default value */ - "gNB-Name" - }, - { ATF_POINTER, 1, offsetof(struct E2SM_KPM_IndicationHeader_Format1, global_GNB_ID), - (ASN_TAG_CLASS_CONTEXT | (9 << 2)), - -1, /* IMPLICIT tag at current level */ - &asn_DEF_GlobalgNB_ID, + &asn_DEF_PrintableString, 0, - { 0, 0, 0 }, + { 0, &asn_PER_memb_vendorName_constr_6, memb_vendorName_constraint_1 }, 0, 0, /* No default value */ - "global-GNB-ID" + "vendorName" }, }; -static const int asn_MAP_E2SM_KPM_IndicationHeader_Format1_oms_1[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; +static const int asn_MAP_E2SM_KPM_IndicationHeader_Format1_oms_1[] = { 1, 2, 3, 4 }; static const ber_tlv_tag_t asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_IndicationHeader_Format1_tag2el_1[] = { - { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id-GlobalKPMnode-ID */ - { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nRCGI */ - { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* pLMN-Identity */ - { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* sliceID */ - { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* fiveQI */ - { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* qci */ - { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* message-Type */ - { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* gNB-DU-ID */ - { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* gNB-Name */ - { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 } /* global-GNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* colletStartTime */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* fileFormatversion */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* senderName */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* senderType */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* vendorName */ }; asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_IndicationHeader_Format1_specs_1 = { sizeof(struct E2SM_KPM_IndicationHeader_Format1), offsetof(struct E2SM_KPM_IndicationHeader_Format1, _asn_ctx), asn_MAP_E2SM_KPM_IndicationHeader_Format1_tag2el_1, - 10, /* Count of tags in the map */ + 5, /* Count of tags in the map */ asn_MAP_E2SM_KPM_IndicationHeader_Format1_oms_1, /* Optional members */ - 10, 0, /* Root/Additions */ - 10, /* First extension addition */ + 4, 0, /* Root/Additions */ + 5, /* First extension addition */ }; asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationHeader_Format1 = { "E2SM-KPM-IndicationHeader-Format1", @@ -207,7 +386,7 @@ asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationHeader_Format1 = { /sizeof(asn_DEF_E2SM_KPM_IndicationHeader_Format1_tags_1[0]), /* 1 */ { 0, 0, SEQUENCE_constraint }, asn_MBR_E2SM_KPM_IndicationHeader_Format1_1, - 10, /* Elements count */ + 5, /* Elements count */ &asn_SPC_E2SM_KPM_IndicationHeader_Format1_specs_1 /* Additional specs */ }; diff --git a/e2sm/lib/E2SM-KPM-IndicationHeader.c b/e2sm/lib/E2SM-KPM-IndicationHeader.c index 9b557e3..b2999ad 100644 --- a/e2sm/lib/E2SM-KPM-IndicationHeader.c +++ b/e2sm/lib/E2SM-KPM-IndicationHeader.c @@ -1,23 +1,20 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #include "E2SM-KPM-IndicationHeader.h" #include "E2SM-KPM-IndicationHeader-Format1.h" -static asn_oer_constraints_t asn_OER_type_E2SM_KPM_IndicationHeader_constr_1 CC_NOTUSED = { - { 0, 0 }, - -1}; -static asn_per_constraints_t asn_PER_type_E2SM_KPM_IndicationHeader_constr_1 CC_NOTUSED = { +static asn_per_constraints_t asn_PER_type_indicationHeader_formats_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_E2SM_KPM_IndicationHeader_1[] = { - { ATF_POINTER, 0, offsetof(struct E2SM_KPM_IndicationHeader, choice.indicationHeader_Format1), +static asn_TYPE_member_t asn_MBR_indicationHeader_formats_2[] = { + { ATF_POINTER, 0, offsetof(struct E2SM_KPM_IndicationHeader__indicationHeader_formats, choice.indicationHeader_Format1), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_E2SM_KPM_IndicationHeader_Format1, @@ -27,28 +24,70 @@ static asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationHeader_1[] = { "indicationHeader-Format1" }, }; -static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_IndicationHeader_tag2el_1[] = { +static const asn_TYPE_tag2member_t asn_MAP_indicationHeader_formats_tag2el_2[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* indicationHeader-Format1 */ }; -static asn_CHOICE_specifics_t asn_SPC_E2SM_KPM_IndicationHeader_specs_1 = { - sizeof(struct E2SM_KPM_IndicationHeader), - offsetof(struct E2SM_KPM_IndicationHeader, _asn_ctx), - offsetof(struct E2SM_KPM_IndicationHeader, present), - sizeof(((struct E2SM_KPM_IndicationHeader *)0)->present), - asn_MAP_E2SM_KPM_IndicationHeader_tag2el_1, +static asn_CHOICE_specifics_t asn_SPC_indicationHeader_formats_specs_2 = { + sizeof(struct E2SM_KPM_IndicationHeader__indicationHeader_formats), + offsetof(struct E2SM_KPM_IndicationHeader__indicationHeader_formats, _asn_ctx), + offsetof(struct E2SM_KPM_IndicationHeader__indicationHeader_formats, present), + sizeof(((struct E2SM_KPM_IndicationHeader__indicationHeader_formats *)0)->present), + asn_MAP_indicationHeader_formats_tag2el_2, 1, /* Count of tags in the map */ 0, 0, 1 /* Extensions start */ }; -asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationHeader = { - "E2SM-KPM-IndicationHeader", - "E2SM-KPM-IndicationHeader", +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_indicationHeader_formats_2 = { + "indicationHeader-formats", + "indicationHeader-formats", &asn_OP_CHOICE, 0, /* No effective tags (pointer) */ 0, /* No effective tags (count) */ 0, /* No tags (pointer) */ 0, /* No tags (count) */ - { &asn_OER_type_E2SM_KPM_IndicationHeader_constr_1, &asn_PER_type_E2SM_KPM_IndicationHeader_constr_1, CHOICE_constraint }, + { 0, &asn_PER_type_indicationHeader_formats_constr_2, CHOICE_constraint }, + asn_MBR_indicationHeader_formats_2, + 1, /* Elements count */ + &asn_SPC_indicationHeader_formats_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationHeader_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationHeader, indicationHeader_formats), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_indicationHeader_formats_2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "indicationHeader-formats" + }, +}; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_IndicationHeader_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_IndicationHeader_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* indicationHeader-formats */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_IndicationHeader_specs_1 = { + sizeof(struct E2SM_KPM_IndicationHeader), + offsetof(struct E2SM_KPM_IndicationHeader, _asn_ctx), + asn_MAP_E2SM_KPM_IndicationHeader_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationHeader = { + "E2SM-KPM-IndicationHeader", + "E2SM-KPM-IndicationHeader", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_IndicationHeader_tags_1, + sizeof(asn_DEF_E2SM_KPM_IndicationHeader_tags_1) + /sizeof(asn_DEF_E2SM_KPM_IndicationHeader_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_IndicationHeader_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_IndicationHeader_tags_1) + /sizeof(asn_DEF_E2SM_KPM_IndicationHeader_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, asn_MBR_E2SM_KPM_IndicationHeader_1, 1, /* Elements count */ &asn_SPC_E2SM_KPM_IndicationHeader_specs_1 /* Additional specs */ diff --git a/e2sm/lib/E2SM-KPM-IndicationMessage-Format1.c b/e2sm/lib/E2SM-KPM-IndicationMessage-Format1.c index be2913c..c20ffca 100644 --- a/e2sm/lib/E2SM-KPM-IndicationMessage-Format1.c +++ b/e2sm/lib/E2SM-KPM-IndicationMessage-Format1.c @@ -1,116 +1,59 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #include "E2SM-KPM-IndicationMessage-Format1.h" -#include "PM-Containers-List.h" -static int -memb_pm_Containers_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, - asn_app_constraint_failed_f *ctfailcb, void *app_key) { - size_t size; - - if(!sptr) { - ASN__CTFAIL(app_key, td, sptr, - "%s: value not given (%s:%d)", - td->name, __FILE__, __LINE__); - return -1; - } - - /* Determine the number of elements */ - size = _A_CSEQUENCE_FROM_VOID(sptr)->count; - - if((size >= 1 && size <= 8)) { - /* Perform validation of the inner elements */ - return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key); - } 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_type_pm_Containers_constr_2 CC_NOTUSED = { - { 0, 0 }, - -1 /* (SIZE(1..8)) */}; -static asn_per_constraints_t asn_PER_type_pm_Containers_constr_2 CC_NOTUSED = { - { APC_UNCONSTRAINED, -1, -1, 0, 0 }, - { APC_CONSTRAINED, 3, 3, 1, 8 } /* (SIZE(1..8)) */, - 0, 0 /* No PER value map */ -}; -static asn_oer_constraints_t asn_OER_memb_pm_Containers_constr_2 CC_NOTUSED = { - { 0, 0 }, - -1 /* (SIZE(1..8)) */}; -static asn_per_constraints_t asn_PER_memb_pm_Containers_constr_2 CC_NOTUSED = { - { APC_UNCONSTRAINED, -1, -1, 0, 0 }, - { APC_CONSTRAINED, 3, 3, 1, 8 } /* (SIZE(1..8)) */, - 0, 0 /* No PER value map */ -}; -static asn_TYPE_member_t asn_MBR_pm_Containers_2[] = { - { ATF_POINTER, 0, 0, - (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), - 0, - &asn_DEF_PM_Containers_List, +#include "MeasurementInfoList.h" +asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationMessage_Format1_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationMessage_Format1, measData), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasurementData, 0, { 0, 0, 0 }, 0, 0, /* No default value */ - "" + "measData" }, -}; -static const ber_tlv_tag_t asn_DEF_pm_Containers_tags_2[] = { - (ASN_TAG_CLASS_CONTEXT | (0 << 2)), - (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) -}; -static asn_SET_OF_specifics_t asn_SPC_pm_Containers_specs_2 = { - sizeof(struct E2SM_KPM_IndicationMessage_Format1__pm_Containers), - offsetof(struct E2SM_KPM_IndicationMessage_Format1__pm_Containers, _asn_ctx), - 0, /* XER encoding is XMLDelimitedItemList */ -}; -static /* Use -fall-defs-global to expose */ -asn_TYPE_descriptor_t asn_DEF_pm_Containers_2 = { - "pm-Containers", - "pm-Containers", - &asn_OP_SEQUENCE_OF, - asn_DEF_pm_Containers_tags_2, - sizeof(asn_DEF_pm_Containers_tags_2) - /sizeof(asn_DEF_pm_Containers_tags_2[0]) - 1, /* 1 */ - asn_DEF_pm_Containers_tags_2, /* Same as above */ - sizeof(asn_DEF_pm_Containers_tags_2) - /sizeof(asn_DEF_pm_Containers_tags_2[0]), /* 2 */ - { &asn_OER_type_pm_Containers_constr_2, &asn_PER_type_pm_Containers_constr_2, SEQUENCE_OF_constraint }, - asn_MBR_pm_Containers_2, - 1, /* Single element */ - &asn_SPC_pm_Containers_specs_2 /* Additional specs */ -}; - -asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationMessage_Format1_1[] = { - { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationMessage_Format1, pm_Containers), - (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + { ATF_POINTER, 2, offsetof(struct E2SM_KPM_IndicationMessage_Format1, measInfoList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasurementInfoList, 0, - &asn_DEF_pm_Containers_2, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "measInfoList" + }, + { ATF_POINTER, 1, offsetof(struct E2SM_KPM_IndicationMessage_Format1, granulPeriod), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GranularityPeriod, 0, - { &asn_OER_memb_pm_Containers_constr_2, &asn_PER_memb_pm_Containers_constr_2, memb_pm_Containers_constraint_1 }, + { 0, 0, 0 }, 0, 0, /* No default value */ - "pm-Containers" + "granulPeriod" }, }; +static const int asn_MAP_E2SM_KPM_IndicationMessage_Format1_oms_1[] = { 1, 2 }; static const ber_tlv_tag_t asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_IndicationMessage_Format1_tag2el_1[] = { - { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* pm-Containers */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* measData */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* measInfoList */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* granulPeriod */ }; asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_IndicationMessage_Format1_specs_1 = { sizeof(struct E2SM_KPM_IndicationMessage_Format1), offsetof(struct E2SM_KPM_IndicationMessage_Format1, _asn_ctx), asn_MAP_E2SM_KPM_IndicationMessage_Format1_tag2el_1, - 1, /* Count of tags in the map */ - 0, 0, 0, /* Optional elements (not needed) */ - 1, /* First extension addition */ + 3, /* Count of tags in the map */ + asn_MAP_E2SM_KPM_IndicationMessage_Format1_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ }; asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationMessage_Format1 = { "E2SM-KPM-IndicationMessage-Format1", @@ -124,7 +67,7 @@ asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationMessage_Format1 = { /sizeof(asn_DEF_E2SM_KPM_IndicationMessage_Format1_tags_1[0]), /* 1 */ { 0, 0, SEQUENCE_constraint }, asn_MBR_E2SM_KPM_IndicationMessage_Format1_1, - 1, /* Elements count */ + 3, /* Elements count */ &asn_SPC_E2SM_KPM_IndicationMessage_Format1_specs_1 /* Additional specs */ }; diff --git a/e2sm/lib/E2SM-KPM-IndicationMessage-Format2.c b/e2sm/lib/E2SM-KPM-IndicationMessage-Format2.c new file mode 100644 index 0000000..8e00e8c --- /dev/null +++ b/e2sm/lib/E2SM-KPM-IndicationMessage-Format2.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "E2SM-KPM-IndicationMessage-Format2.h" + +asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationMessage_Format2_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationMessage_Format2, measData), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasurementData, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "measData" + }, + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationMessage_Format2, measCondUEidList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasurementCondUEidList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "measCondUEidList" + }, + { ATF_POINTER, 1, offsetof(struct E2SM_KPM_IndicationMessage_Format2, granulPeriod), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GranularityPeriod, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "granulPeriod" + }, +}; +static const int asn_MAP_E2SM_KPM_IndicationMessage_Format2_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_E2SM_KPM_IndicationMessage_Format2_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_IndicationMessage_Format2_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* measData */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* measCondUEidList */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* granulPeriod */ +}; +asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_IndicationMessage_Format2_specs_1 = { + sizeof(struct E2SM_KPM_IndicationMessage_Format2), + offsetof(struct E2SM_KPM_IndicationMessage_Format2, _asn_ctx), + asn_MAP_E2SM_KPM_IndicationMessage_Format2_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_E2SM_KPM_IndicationMessage_Format2_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationMessage_Format2 = { + "E2SM-KPM-IndicationMessage-Format2", + "E2SM-KPM-IndicationMessage-Format2", + &asn_OP_SEQUENCE, + asn_DEF_E2SM_KPM_IndicationMessage_Format2_tags_1, + sizeof(asn_DEF_E2SM_KPM_IndicationMessage_Format2_tags_1) + /sizeof(asn_DEF_E2SM_KPM_IndicationMessage_Format2_tags_1[0]), /* 1 */ + asn_DEF_E2SM_KPM_IndicationMessage_Format2_tags_1, /* Same as above */ + sizeof(asn_DEF_E2SM_KPM_IndicationMessage_Format2_tags_1) + /sizeof(asn_DEF_E2SM_KPM_IndicationMessage_Format2_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_E2SM_KPM_IndicationMessage_Format2_1, + 3, /* Elements count */ + &asn_SPC_E2SM_KPM_IndicationMessage_Format2_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/E2SM-KPM-IndicationMessage.c b/e2sm/lib/E2SM-KPM-IndicationMessage.c index 27ff271..120c1db 100644 --- a/e2sm/lib/E2SM-KPM-IndicationMessage.c +++ b/e2sm/lib/E2SM-KPM-IndicationMessage.c @@ -1,23 +1,21 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #include "E2SM-KPM-IndicationMessage.h" #include "E2SM-KPM-IndicationMessage-Format1.h" -static asn_oer_constraints_t asn_OER_type_indicationMessage_constr_3 CC_NOTUSED = { - { 0, 0 }, - -1}; -static asn_per_constraints_t asn_PER_type_indicationMessage_constr_3 CC_NOTUSED = { - { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, +#include "E2SM-KPM-IndicationMessage-Format2.h" +static asn_per_constraints_t asn_PER_type_indicationMessage_formats_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; -static asn_TYPE_member_t asn_MBR_indicationMessage_3[] = { - { ATF_POINTER, 0, offsetof(struct E2SM_KPM_IndicationMessage__indicationMessage, choice.indicationMessage_Format1), +static asn_TYPE_member_t asn_MBR_indicationMessage_formats_2[] = { + { ATF_POINTER, 0, offsetof(struct E2SM_KPM_IndicationMessage__indicationMessage_formats, choice.indicationMessage_Format1), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_E2SM_KPM_IndicationMessage_Format1, @@ -26,69 +24,69 @@ static asn_TYPE_member_t asn_MBR_indicationMessage_3[] = { 0, 0, /* No default value */ "indicationMessage-Format1" }, + { ATF_POINTER, 0, offsetof(struct E2SM_KPM_IndicationMessage__indicationMessage_formats, choice.indicationMessage_Format2), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E2SM_KPM_IndicationMessage_Format2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "indicationMessage-Format2" + }, }; -static const asn_TYPE_tag2member_t asn_MAP_indicationMessage_tag2el_3[] = { - { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* indicationMessage-Format1 */ +static const asn_TYPE_tag2member_t asn_MAP_indicationMessage_formats_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* indicationMessage-Format1 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* indicationMessage-Format2 */ }; -static asn_CHOICE_specifics_t asn_SPC_indicationMessage_specs_3 = { - sizeof(struct E2SM_KPM_IndicationMessage__indicationMessage), - offsetof(struct E2SM_KPM_IndicationMessage__indicationMessage, _asn_ctx), - offsetof(struct E2SM_KPM_IndicationMessage__indicationMessage, present), - sizeof(((struct E2SM_KPM_IndicationMessage__indicationMessage *)0)->present), - asn_MAP_indicationMessage_tag2el_3, - 1, /* Count of tags in the map */ +static asn_CHOICE_specifics_t asn_SPC_indicationMessage_formats_specs_2 = { + sizeof(struct E2SM_KPM_IndicationMessage__indicationMessage_formats), + offsetof(struct E2SM_KPM_IndicationMessage__indicationMessage_formats, _asn_ctx), + offsetof(struct E2SM_KPM_IndicationMessage__indicationMessage_formats, present), + sizeof(((struct E2SM_KPM_IndicationMessage__indicationMessage_formats *)0)->present), + asn_MAP_indicationMessage_formats_tag2el_2, + 2, /* Count of tags in the map */ 0, 0, - 1 /* Extensions start */ + 2 /* Extensions start */ }; static /* Use -fall-defs-global to expose */ -asn_TYPE_descriptor_t asn_DEF_indicationMessage_3 = { - "indicationMessage", - "indicationMessage", +asn_TYPE_descriptor_t asn_DEF_indicationMessage_formats_2 = { + "indicationMessage-formats", + "indicationMessage-formats", &asn_OP_CHOICE, 0, /* No effective tags (pointer) */ 0, /* No effective tags (count) */ 0, /* No tags (pointer) */ 0, /* No tags (count) */ - { &asn_OER_type_indicationMessage_constr_3, &asn_PER_type_indicationMessage_constr_3, CHOICE_constraint }, - asn_MBR_indicationMessage_3, - 1, /* Elements count */ - &asn_SPC_indicationMessage_specs_3 /* Additional specs */ + { 0, &asn_PER_type_indicationMessage_formats_constr_2, CHOICE_constraint }, + asn_MBR_indicationMessage_formats_2, + 2, /* Elements count */ + &asn_SPC_indicationMessage_formats_specs_2 /* Additional specs */ }; static asn_TYPE_member_t asn_MBR_E2SM_KPM_IndicationMessage_1[] = { - { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationMessage, ric_Style_Type), + { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationMessage, indicationMessage_formats), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), - -1, /* IMPLICIT tag at current level */ - &asn_DEF_RIC_Style_Type, - 0, - { 0, 0, 0 }, - 0, 0, /* No default value */ - "ric-Style-Type" - }, - { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_IndicationMessage, indicationMessage), - (ASN_TAG_CLASS_CONTEXT | (1 << 2)), +1, /* EXPLICIT tag at current level */ - &asn_DEF_indicationMessage_3, + &asn_DEF_indicationMessage_formats_2, 0, { 0, 0, 0 }, 0, 0, /* No default value */ - "indicationMessage" + "indicationMessage-formats" }, }; static const ber_tlv_tag_t asn_DEF_E2SM_KPM_IndicationMessage_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_IndicationMessage_tag2el_1[] = { - { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-Style-Type */ - { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* indicationMessage */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* indicationMessage-formats */ }; static asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_IndicationMessage_specs_1 = { sizeof(struct E2SM_KPM_IndicationMessage), offsetof(struct E2SM_KPM_IndicationMessage, _asn_ctx), asn_MAP_E2SM_KPM_IndicationMessage_tag2el_1, - 2, /* Count of tags in the map */ + 1, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ - 2, /* First extension addition */ + 1, /* First extension addition */ }; asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationMessage = { "E2SM-KPM-IndicationMessage", @@ -102,7 +100,7 @@ asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_IndicationMessage = { /sizeof(asn_DEF_E2SM_KPM_IndicationMessage_tags_1[0]), /* 1 */ { 0, 0, SEQUENCE_constraint }, asn_MBR_E2SM_KPM_IndicationMessage_1, - 2, /* Elements count */ + 1, /* Elements count */ &asn_SPC_E2SM_KPM_IndicationMessage_specs_1 /* Additional specs */ }; diff --git a/e2sm/lib/E2SM-KPM-RANfunction-Description.c b/e2sm/lib/E2SM-KPM-RANfunction-Description.c index fc1be4b..005840b 100644 --- a/e2sm/lib/E2SM-KPM-RANfunction-Description.c +++ b/e2sm/lib/E2SM-KPM-RANfunction-Description.c @@ -1,16 +1,16 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #include "E2SM-KPM-RANfunction-Description.h" -#include "RIC-EventTriggerStyle-List.h" -#include "RIC-ReportStyle-List.h" +#include "RIC-EventTriggerStyle-Item.h" +#include "RIC-ReportStyle-Item.h" static int -memb_ric_EventTriggerStyle_List_constraint_3(const asn_TYPE_descriptor_t *td, const void *sptr, +memb_ric_EventTriggerStyle_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { size_t size; @@ -36,7 +36,7 @@ memb_ric_EventTriggerStyle_List_constraint_3(const asn_TYPE_descriptor_t *td, co } static int -memb_ric_ReportStyle_List_constraint_3(const asn_TYPE_descriptor_t *td, const void *sptr, +memb_ric_ReportStyle_List_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { size_t size; @@ -61,165 +61,98 @@ memb_ric_ReportStyle_List_constraint_3(const asn_TYPE_descriptor_t *td, const vo } } -static asn_oer_constraints_t asn_OER_type_ric_EventTriggerStyle_List_constr_4 CC_NOTUSED = { - { 0, 0 }, - -1 /* (SIZE(1..63)) */}; -static asn_per_constraints_t asn_PER_type_ric_EventTriggerStyle_List_constr_4 CC_NOTUSED = { +static asn_per_constraints_t asn_PER_type_ric_EventTriggerStyle_List_constr_3 CC_NOTUSED = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 6, 6, 1, 63 } /* (SIZE(1..63)) */, 0, 0 /* No PER value map */ }; -static asn_oer_constraints_t asn_OER_type_ric_ReportStyle_List_constr_6 CC_NOTUSED = { - { 0, 0 }, - -1 /* (SIZE(1..63)) */}; -static asn_per_constraints_t asn_PER_type_ric_ReportStyle_List_constr_6 CC_NOTUSED = { +static asn_per_constraints_t asn_PER_type_ric_ReportStyle_List_constr_5 CC_NOTUSED = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 6, 6, 1, 63 } /* (SIZE(1..63)) */, 0, 0 /* No PER value map */ }; -static asn_oer_constraints_t asn_OER_memb_ric_EventTriggerStyle_List_constr_4 CC_NOTUSED = { - { 0, 0 }, - -1 /* (SIZE(1..63)) */}; -static asn_per_constraints_t asn_PER_memb_ric_EventTriggerStyle_List_constr_4 CC_NOTUSED = { +static asn_per_constraints_t asn_PER_memb_ric_EventTriggerStyle_List_constr_3 CC_NOTUSED = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 6, 6, 1, 63 } /* (SIZE(1..63)) */, 0, 0 /* No PER value map */ }; -static asn_oer_constraints_t asn_OER_memb_ric_ReportStyle_List_constr_6 CC_NOTUSED = { - { 0, 0 }, - -1 /* (SIZE(1..63)) */}; -static asn_per_constraints_t asn_PER_memb_ric_ReportStyle_List_constr_6 CC_NOTUSED = { +static asn_per_constraints_t asn_PER_memb_ric_ReportStyle_List_constr_5 CC_NOTUSED = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 6, 6, 1, 63 } /* (SIZE(1..63)) */, 0, 0 /* No PER value map */ }; -static asn_TYPE_member_t asn_MBR_ric_EventTriggerStyle_List_4[] = { +static asn_TYPE_member_t asn_MBR_ric_EventTriggerStyle_List_3[] = { { ATF_POINTER, 0, 0, (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, - &asn_DEF_RIC_EventTriggerStyle_List, + &asn_DEF_RIC_EventTriggerStyle_Item, 0, { 0, 0, 0 }, 0, 0, /* No default value */ "" }, }; -static const ber_tlv_tag_t asn_DEF_ric_EventTriggerStyle_List_tags_4[] = { - (ASN_TAG_CLASS_CONTEXT | (0 << 2)), +static const ber_tlv_tag_t asn_DEF_ric_EventTriggerStyle_List_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; -static asn_SET_OF_specifics_t asn_SPC_ric_EventTriggerStyle_List_specs_4 = { - sizeof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_EventTriggerStyle_List), - offsetof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_EventTriggerStyle_List, _asn_ctx), +static asn_SET_OF_specifics_t asn_SPC_ric_EventTriggerStyle_List_specs_3 = { + sizeof(struct E2SM_KPM_RANfunction_Description__ric_EventTriggerStyle_List), + offsetof(struct E2SM_KPM_RANfunction_Description__ric_EventTriggerStyle_List, _asn_ctx), 0, /* XER encoding is XMLDelimitedItemList */ }; static /* Use -fall-defs-global to expose */ -asn_TYPE_descriptor_t asn_DEF_ric_EventTriggerStyle_List_4 = { +asn_TYPE_descriptor_t asn_DEF_ric_EventTriggerStyle_List_3 = { "ric-EventTriggerStyle-List", "ric-EventTriggerStyle-List", &asn_OP_SEQUENCE_OF, - asn_DEF_ric_EventTriggerStyle_List_tags_4, - sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_4) - /sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_4[0]) - 1, /* 1 */ - asn_DEF_ric_EventTriggerStyle_List_tags_4, /* Same as above */ - sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_4) - /sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_4[0]), /* 2 */ - { &asn_OER_type_ric_EventTriggerStyle_List_constr_4, &asn_PER_type_ric_EventTriggerStyle_List_constr_4, SEQUENCE_OF_constraint }, - asn_MBR_ric_EventTriggerStyle_List_4, + asn_DEF_ric_EventTriggerStyle_List_tags_3, + sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_3) + /sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_3[0]) - 1, /* 1 */ + asn_DEF_ric_EventTriggerStyle_List_tags_3, /* Same as above */ + sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_3) + /sizeof(asn_DEF_ric_EventTriggerStyle_List_tags_3[0]), /* 2 */ + { 0, &asn_PER_type_ric_EventTriggerStyle_List_constr_3, SEQUENCE_OF_constraint }, + asn_MBR_ric_EventTriggerStyle_List_3, 1, /* Single element */ - &asn_SPC_ric_EventTriggerStyle_List_specs_4 /* Additional specs */ + &asn_SPC_ric_EventTriggerStyle_List_specs_3 /* Additional specs */ }; -static asn_TYPE_member_t asn_MBR_ric_ReportStyle_List_6[] = { +static asn_TYPE_member_t asn_MBR_ric_ReportStyle_List_5[] = { { ATF_POINTER, 0, 0, (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, - &asn_DEF_RIC_ReportStyle_List, + &asn_DEF_RIC_ReportStyle_Item, 0, { 0, 0, 0 }, 0, 0, /* No default value */ "" }, }; -static const ber_tlv_tag_t asn_DEF_ric_ReportStyle_List_tags_6[] = { - (ASN_TAG_CLASS_CONTEXT | (1 << 2)), +static const ber_tlv_tag_t asn_DEF_ric_ReportStyle_List_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; -static asn_SET_OF_specifics_t asn_SPC_ric_ReportStyle_List_specs_6 = { - sizeof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_ReportStyle_List), - offsetof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item__ric_ReportStyle_List, _asn_ctx), +static asn_SET_OF_specifics_t asn_SPC_ric_ReportStyle_List_specs_5 = { + sizeof(struct E2SM_KPM_RANfunction_Description__ric_ReportStyle_List), + offsetof(struct E2SM_KPM_RANfunction_Description__ric_ReportStyle_List, _asn_ctx), 0, /* XER encoding is XMLDelimitedItemList */ }; static /* Use -fall-defs-global to expose */ -asn_TYPE_descriptor_t asn_DEF_ric_ReportStyle_List_6 = { +asn_TYPE_descriptor_t asn_DEF_ric_ReportStyle_List_5 = { "ric-ReportStyle-List", "ric-ReportStyle-List", &asn_OP_SEQUENCE_OF, - asn_DEF_ric_ReportStyle_List_tags_6, - sizeof(asn_DEF_ric_ReportStyle_List_tags_6) - /sizeof(asn_DEF_ric_ReportStyle_List_tags_6[0]) - 1, /* 1 */ - asn_DEF_ric_ReportStyle_List_tags_6, /* Same as above */ - sizeof(asn_DEF_ric_ReportStyle_List_tags_6) - /sizeof(asn_DEF_ric_ReportStyle_List_tags_6[0]), /* 2 */ - { &asn_OER_type_ric_ReportStyle_List_constr_6, &asn_PER_type_ric_ReportStyle_List_constr_6, SEQUENCE_OF_constraint }, - asn_MBR_ric_ReportStyle_List_6, + asn_DEF_ric_ReportStyle_List_tags_5, + sizeof(asn_DEF_ric_ReportStyle_List_tags_5) + /sizeof(asn_DEF_ric_ReportStyle_List_tags_5[0]) - 1, /* 1 */ + asn_DEF_ric_ReportStyle_List_tags_5, /* Same as above */ + sizeof(asn_DEF_ric_ReportStyle_List_tags_5) + /sizeof(asn_DEF_ric_ReportStyle_List_tags_5[0]), /* 2 */ + { 0, &asn_PER_type_ric_ReportStyle_List_constr_5, SEQUENCE_OF_constraint }, + asn_MBR_ric_ReportStyle_List_5, 1, /* Single element */ - &asn_SPC_ric_ReportStyle_List_specs_6 /* Additional specs */ -}; - -static asn_TYPE_member_t asn_MBR_e2SM_KPM_RANfunction_Item_3[] = { - { ATF_POINTER, 2, offsetof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item, ric_EventTriggerStyle_List), - (ASN_TAG_CLASS_CONTEXT | (0 << 2)), - 0, - &asn_DEF_ric_EventTriggerStyle_List_4, - 0, - { &asn_OER_memb_ric_EventTriggerStyle_List_constr_4, &asn_PER_memb_ric_EventTriggerStyle_List_constr_4, memb_ric_EventTriggerStyle_List_constraint_3 }, - 0, 0, /* No default value */ - "ric-EventTriggerStyle-List" - }, - { ATF_POINTER, 1, offsetof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item, ric_ReportStyle_List), - (ASN_TAG_CLASS_CONTEXT | (1 << 2)), - 0, - &asn_DEF_ric_ReportStyle_List_6, - 0, - { &asn_OER_memb_ric_ReportStyle_List_constr_6, &asn_PER_memb_ric_ReportStyle_List_constr_6, memb_ric_ReportStyle_List_constraint_3 }, - 0, 0, /* No default value */ - "ric-ReportStyle-List" - }, -}; -static const int asn_MAP_e2SM_KPM_RANfunction_Item_oms_3[] = { 0, 1 }; -static const ber_tlv_tag_t asn_DEF_e2SM_KPM_RANfunction_Item_tags_3[] = { - (ASN_TAG_CLASS_CONTEXT | (1 << 2)), - (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) -}; -static const asn_TYPE_tag2member_t asn_MAP_e2SM_KPM_RANfunction_Item_tag2el_3[] = { - { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-EventTriggerStyle-List */ - { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ric-ReportStyle-List */ -}; -static asn_SEQUENCE_specifics_t asn_SPC_e2SM_KPM_RANfunction_Item_specs_3 = { - sizeof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item), - offsetof(struct E2SM_KPM_RANfunction_Description__e2SM_KPM_RANfunction_Item, _asn_ctx), - asn_MAP_e2SM_KPM_RANfunction_Item_tag2el_3, - 2, /* Count of tags in the map */ - asn_MAP_e2SM_KPM_RANfunction_Item_oms_3, /* Optional members */ - 2, 0, /* Root/Additions */ - 2, /* First extension addition */ -}; -static /* Use -fall-defs-global to expose */ -asn_TYPE_descriptor_t asn_DEF_e2SM_KPM_RANfunction_Item_3 = { - "e2SM-KPM-RANfunction-Item", - "e2SM-KPM-RANfunction-Item", - &asn_OP_SEQUENCE, - asn_DEF_e2SM_KPM_RANfunction_Item_tags_3, - sizeof(asn_DEF_e2SM_KPM_RANfunction_Item_tags_3) - /sizeof(asn_DEF_e2SM_KPM_RANfunction_Item_tags_3[0]) - 1, /* 1 */ - asn_DEF_e2SM_KPM_RANfunction_Item_tags_3, /* Same as above */ - sizeof(asn_DEF_e2SM_KPM_RANfunction_Item_tags_3) - /sizeof(asn_DEF_e2SM_KPM_RANfunction_Item_tags_3[0]), /* 2 */ - { 0, 0, SEQUENCE_constraint }, - asn_MBR_e2SM_KPM_RANfunction_Item_3, - 2, /* Elements count */ - &asn_SPC_e2SM_KPM_RANfunction_Item_specs_3 /* Additional specs */ + &asn_SPC_ric_ReportStyle_List_specs_5 /* Additional specs */ }; static asn_TYPE_member_t asn_MBR_E2SM_KPM_RANfunction_Description_1[] = { @@ -232,30 +165,42 @@ static asn_TYPE_member_t asn_MBR_E2SM_KPM_RANfunction_Description_1[] = { 0, 0, /* No default value */ "ranFunction-Name" }, - { ATF_NOFLAGS, 0, offsetof(struct E2SM_KPM_RANfunction_Description, e2SM_KPM_RANfunction_Item), + { ATF_POINTER, 2, offsetof(struct E2SM_KPM_RANfunction_Description, ric_EventTriggerStyle_List), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, - &asn_DEF_e2SM_KPM_RANfunction_Item_3, + &asn_DEF_ric_EventTriggerStyle_List_3, 0, - { 0, 0, 0 }, + { 0, &asn_PER_memb_ric_EventTriggerStyle_List_constr_3, memb_ric_EventTriggerStyle_List_constraint_1 }, + 0, 0, /* No default value */ + "ric-EventTriggerStyle-List" + }, + { ATF_POINTER, 1, offsetof(struct E2SM_KPM_RANfunction_Description, ric_ReportStyle_List), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + 0, + &asn_DEF_ric_ReportStyle_List_5, + 0, + { 0, &asn_PER_memb_ric_ReportStyle_List_constr_5, memb_ric_ReportStyle_List_constraint_1 }, 0, 0, /* No default value */ - "e2SM-KPM-RANfunction-Item" + "ric-ReportStyle-List" }, }; +static const int asn_MAP_E2SM_KPM_RANfunction_Description_oms_1[] = { 1, 2 }; static const ber_tlv_tag_t asn_DEF_E2SM_KPM_RANfunction_Description_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static const asn_TYPE_tag2member_t asn_MAP_E2SM_KPM_RANfunction_Description_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ranFunction-Name */ - { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* e2SM-KPM-RANfunction-Item */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ric-EventTriggerStyle-List */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ric-ReportStyle-List */ }; static asn_SEQUENCE_specifics_t asn_SPC_E2SM_KPM_RANfunction_Description_specs_1 = { sizeof(struct E2SM_KPM_RANfunction_Description), offsetof(struct E2SM_KPM_RANfunction_Description, _asn_ctx), asn_MAP_E2SM_KPM_RANfunction_Description_tag2el_1, - 2, /* Count of tags in the map */ - 0, 0, 0, /* Optional elements (not needed) */ - 2, /* First extension addition */ + 3, /* Count of tags in the map */ + asn_MAP_E2SM_KPM_RANfunction_Description_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* First extension addition */ }; asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_RANfunction_Description = { "E2SM-KPM-RANfunction-Description", @@ -269,7 +214,7 @@ asn_TYPE_descriptor_t asn_DEF_E2SM_KPM_RANfunction_Description = { /sizeof(asn_DEF_E2SM_KPM_RANfunction_Description_tags_1[0]), /* 1 */ { 0, 0, SEQUENCE_constraint }, asn_MBR_E2SM_KPM_RANfunction_Description_1, - 2, /* Elements count */ + 3, /* Elements count */ &asn_SPC_E2SM_KPM_RANfunction_Description_specs_1 /* Additional specs */ }; diff --git a/e2sm/lib/EN-GNB-ID.c b/e2sm/lib/EN-GNB-ID.c new file mode 100644 index 0000000..1b2986b --- /dev/null +++ b/e2sm/lib/EN-GNB-ID.c @@ -0,0 +1,88 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "EN-GNB-ID.h" + +static int +memb_en_gNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_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; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 22 && 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 asn_per_constraints_t asn_PER_memb_en_gNB_ID_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 22, 32 } /* (SIZE(22..32)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_EN_GNB_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_EN_GNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct EN_GNB_ID, choice.en_gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_en_gNB_ID_constr_2, memb_en_gNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "en-gNB-ID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_EN_GNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* en-gNB-ID */ +}; +asn_CHOICE_specifics_t asn_SPC_EN_GNB_ID_specs_1 = { + sizeof(struct EN_GNB_ID), + offsetof(struct EN_GNB_ID, _asn_ctx), + offsetof(struct EN_GNB_ID, present), + sizeof(((struct EN_GNB_ID *)0)->present), + asn_MAP_EN_GNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_EN_GNB_ID = { + "EN-GNB-ID", + "EN-GNB-ID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_EN_GNB_ID_constr_1, CHOICE_constraint }, + asn_MBR_EN_GNB_ID_1, + 1, /* Elements count */ + &asn_SPC_EN_GNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/ENB-ID.c b/e2sm/lib/ENB-ID.c index 02bc5f6..8f6aeb0 100644 --- a/e2sm/lib/ENB-ID.c +++ b/e2sm/lib/ENB-ID.c @@ -1,8 +1,8 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) - * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #include "ENB-ID.h" @@ -131,41 +131,26 @@ memb_long_Macro_eNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void } } -static asn_oer_constraints_t asn_OER_memb_macro_eNB_ID_constr_2 CC_NOTUSED = { - { 0, 0 }, - 20 /* (SIZE(20..20)) */}; static asn_per_constraints_t asn_PER_memb_macro_eNB_ID_constr_2 CC_NOTUSED = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 20, 20 } /* (SIZE(20..20)) */, 0, 0 /* No PER value map */ }; -static asn_oer_constraints_t asn_OER_memb_home_eNB_ID_constr_3 CC_NOTUSED = { - { 0, 0 }, - 28 /* (SIZE(28..28)) */}; static asn_per_constraints_t asn_PER_memb_home_eNB_ID_constr_3 CC_NOTUSED = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 28, 28 } /* (SIZE(28..28)) */, 0, 0 /* No PER value map */ }; -static asn_oer_constraints_t asn_OER_memb_short_Macro_eNB_ID_constr_5 CC_NOTUSED = { - { 0, 0 }, - 18 /* (SIZE(18..18)) */}; static asn_per_constraints_t asn_PER_memb_short_Macro_eNB_ID_constr_5 CC_NOTUSED = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 18, 18 } /* (SIZE(18..18)) */, 0, 0 /* No PER value map */ }; -static asn_oer_constraints_t asn_OER_memb_long_Macro_eNB_ID_constr_6 CC_NOTUSED = { - { 0, 0 }, - 21 /* (SIZE(21..21)) */}; static asn_per_constraints_t asn_PER_memb_long_Macro_eNB_ID_constr_6 CC_NOTUSED = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 21, 21 } /* (SIZE(21..21)) */, 0, 0 /* No PER value map */ }; -static asn_oer_constraints_t asn_OER_type_ENB_ID_constr_1 CC_NOTUSED = { - { 0, 0 }, - -1}; asn_per_constraints_t asn_PER_type_ENB_ID_constr_1 CC_NOTUSED = { { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, @@ -177,7 +162,7 @@ asn_TYPE_member_t asn_MBR_ENB_ID_1[] = { -1, /* IMPLICIT tag at current level */ &asn_DEF_BIT_STRING, 0, - { &asn_OER_memb_macro_eNB_ID_constr_2, &asn_PER_memb_macro_eNB_ID_constr_2, memb_macro_eNB_ID_constraint_1 }, + { 0, &asn_PER_memb_macro_eNB_ID_constr_2, memb_macro_eNB_ID_constraint_1 }, 0, 0, /* No default value */ "macro-eNB-ID" }, @@ -186,7 +171,7 @@ asn_TYPE_member_t asn_MBR_ENB_ID_1[] = { -1, /* IMPLICIT tag at current level */ &asn_DEF_BIT_STRING, 0, - { &asn_OER_memb_home_eNB_ID_constr_3, &asn_PER_memb_home_eNB_ID_constr_3, memb_home_eNB_ID_constraint_1 }, + { 0, &asn_PER_memb_home_eNB_ID_constr_3, memb_home_eNB_ID_constraint_1 }, 0, 0, /* No default value */ "home-eNB-ID" }, @@ -195,7 +180,7 @@ asn_TYPE_member_t asn_MBR_ENB_ID_1[] = { -1, /* IMPLICIT tag at current level */ &asn_DEF_BIT_STRING, 0, - { &asn_OER_memb_short_Macro_eNB_ID_constr_5, &asn_PER_memb_short_Macro_eNB_ID_constr_5, memb_short_Macro_eNB_ID_constraint_1 }, + { 0, &asn_PER_memb_short_Macro_eNB_ID_constr_5, memb_short_Macro_eNB_ID_constraint_1 }, 0, 0, /* No default value */ "short-Macro-eNB-ID" }, @@ -204,7 +189,7 @@ asn_TYPE_member_t asn_MBR_ENB_ID_1[] = { -1, /* IMPLICIT tag at current level */ &asn_DEF_BIT_STRING, 0, - { &asn_OER_memb_long_Macro_eNB_ID_constr_6, &asn_PER_memb_long_Macro_eNB_ID_constr_6, memb_long_Macro_eNB_ID_constraint_1 }, + { 0, &asn_PER_memb_long_Macro_eNB_ID_constr_6, memb_long_Macro_eNB_ID_constraint_1 }, 0, 0, /* No default value */ "long-Macro-eNB-ID" }, @@ -233,7 +218,7 @@ asn_TYPE_descriptor_t asn_DEF_ENB_ID = { 0, /* No effective tags (count) */ 0, /* No tags (pointer) */ 0, /* No tags (count) */ - { &asn_OER_type_ENB_ID_constr_1, &asn_PER_type_ENB_ID_constr_1, CHOICE_constraint }, + { 0, &asn_PER_type_ENB_ID_constr_1, CHOICE_constraint }, asn_MBR_ENB_ID_1, 4, /* Elements count */ &asn_SPC_ENB_ID_specs_1 /* Additional specs */ diff --git a/e2sm/lib/ENB-UE-X2AP-ID-Extension.c b/e2sm/lib/ENB-UE-X2AP-ID-Extension.c new file mode 100644 index 0000000..2509d5e --- /dev/null +++ b/e2sm/lib/ENB-UE-X2AP-ID-Extension.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "ENB-UE-X2AP-ID-Extension.h" + +int +ENB_UE_X2AP_ID_Extension_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 4095)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ENB_UE_X2AP_ID_Extension_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 12, 12, 0, 4095 } /* (0..4095,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_ENB_UE_X2AP_ID_Extension_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ENB_UE_X2AP_ID_Extension = { + "ENB-UE-X2AP-ID-Extension", + "ENB-UE-X2AP-ID-Extension", + &asn_OP_NativeInteger, + asn_DEF_ENB_UE_X2AP_ID_Extension_tags_1, + sizeof(asn_DEF_ENB_UE_X2AP_ID_Extension_tags_1) + /sizeof(asn_DEF_ENB_UE_X2AP_ID_Extension_tags_1[0]), /* 1 */ + asn_DEF_ENB_UE_X2AP_ID_Extension_tags_1, /* Same as above */ + sizeof(asn_DEF_ENB_UE_X2AP_ID_Extension_tags_1) + /sizeof(asn_DEF_ENB_UE_X2AP_ID_Extension_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ENB_UE_X2AP_ID_Extension_constr_1, ENB_UE_X2AP_ID_Extension_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/e2sm/lib/ENB-UE-X2AP-ID.c b/e2sm/lib/ENB-UE-X2AP-ID.c new file mode 100644 index 0000000..81446fe --- /dev/null +++ b/e2sm/lib/ENB-UE-X2AP-ID.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "ENB-UE-X2AP-ID.h" + +int +ENB_UE_X2AP_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 4095)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_ENB_UE_X2AP_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 12, 12, 0, 4095 } /* (0..4095) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_ENB_UE_X2AP_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ENB_UE_X2AP_ID = { + "ENB-UE-X2AP-ID", + "ENB-UE-X2AP-ID", + &asn_OP_NativeInteger, + asn_DEF_ENB_UE_X2AP_ID_tags_1, + sizeof(asn_DEF_ENB_UE_X2AP_ID_tags_1) + /sizeof(asn_DEF_ENB_UE_X2AP_ID_tags_1[0]), /* 1 */ + asn_DEF_ENB_UE_X2AP_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_ENB_UE_X2AP_ID_tags_1) + /sizeof(asn_DEF_ENB_UE_X2AP_ID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_ENB_UE_X2AP_ID_constr_1, ENB_UE_X2AP_ID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/e2sm/lib/ENUMERATED.c b/e2sm/lib/ENUMERATED.c new file mode 100644 index 0000000..e16cdd9 --- /dev/null +++ b/e2sm/lib/ENUMERATED.c @@ -0,0 +1,180 @@ +/*- + * Copyright (c) 2003, 2005, 2006 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include /* Encoder and decoder of a primitive type */ + +/* + * ENUMERATED basic type description. + */ +static const ber_tlv_tag_t asn_DEF_ENUMERATED_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_operation_t asn_OP_ENUMERATED = { + ASN__PRIMITIVE_TYPE_free, + INTEGER_print, /* Implemented in terms of INTEGER */ + INTEGER_compare, /* Implemented in terms of INTEGER */ + ber_decode_primitive, + INTEGER_encode_der, /* Implemented in terms of INTEGER */ + INTEGER_decode_xer, /* This is temporary! */ + INTEGER_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + ENUMERATED_decode_oer, + ENUMERATED_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + ENUMERATED_decode_uper, /* Unaligned PER decoder */ + ENUMERATED_encode_uper, /* Unaligned PER encoder */ + ENUMERATED_decode_aper, /* Aligned PER decoder */ + ENUMERATED_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + ENUMERATED_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_ENUMERATED = { + "ENUMERATED", + "ENUMERATED", + &asn_OP_ENUMERATED, + asn_DEF_ENUMERATED_tags, + sizeof(asn_DEF_ENUMERATED_tags) / sizeof(asn_DEF_ENUMERATED_tags[0]), + asn_DEF_ENUMERATED_tags, /* Same as above */ + sizeof(asn_DEF_ENUMERATED_tags) / sizeof(asn_DEF_ENUMERATED_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + + +#ifndef ASN_DISABLE_OER_SUPPORT + +asn_dec_rval_t +ENUMERATED_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **sptr, + const void *ptr, size_t size) { + asn_dec_rval_t rval; + ENUMERATED_t *st = (ENUMERATED_t *)*sptr; + long value; + void *vptr = &value; + + if(!st) { + st = (ENUMERATED_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + rval = NativeEnumerated_decode_oer(opt_codec_ctx, td, constraints, + (void **)&vptr, ptr, size); + if(rval.code == RC_OK) { + if(asn_long2INTEGER(st, value)) { + rval.code = RC_FAIL; + } + } + return rval; +} + +asn_enc_rval_t +ENUMERATED_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + const void *sptr, asn_app_consume_bytes_f *cb, + void *app_key) { + const ENUMERATED_t *st = sptr; + long value; + + if(asn_INTEGER2long(st, &value)) { + ASN__ENCODE_FAILED; + } + + return NativeEnumerated_encode_oer(td, constraints, &value, cb, app_key); +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +ENUMERATED_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + asn_dec_rval_t rval; + ENUMERATED_t *st = (ENUMERATED_t *)*sptr; + long value; + void *vptr = &value; + + if(!st) { + st = (ENUMERATED_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + rval = NativeEnumerated_decode_uper(opt_codec_ctx, td, constraints, + (void **)&vptr, pd); + if(rval.code == RC_OK) { + if(asn_long2INTEGER(st, value)) { + rval.code = RC_FAIL; + } + } + return rval; +} + +asn_enc_rval_t +ENUMERATED_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const ENUMERATED_t *st = (const ENUMERATED_t *)sptr; + long value; + + if(asn_INTEGER2long(st, &value)) { + ASN__ENCODE_FAILED; + } + + return NativeEnumerated_encode_uper(td, constraints, &value, po); +} + +asn_dec_rval_t +ENUMERATED_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + asn_dec_rval_t rval; + ENUMERATED_t *st = (ENUMERATED_t *)*sptr; + long value; + void *vptr = &value; + + if(!st) { + st = (ENUMERATED_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(!st) ASN__DECODE_FAILED; + } + + rval = NativeEnumerated_decode_aper(opt_codec_ctx, td, constraints, + (void **)&vptr, pd); + if(rval.code == RC_OK) + if(asn_long2INTEGER(st, value)) + rval.code = RC_FAIL; + return rval; +} + +asn_enc_rval_t +ENUMERATED_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + const ENUMERATED_t *st = (const ENUMERATED_t *)sptr; + long value; + + if(asn_INTEGER2long(st, &value)) + ASN__ENCODE_FAILED; + + return NativeEnumerated_encode_aper(td, constraints, &value, po); +} +#endif /* ASN_DISABLE_PER_SUPPORT */ + diff --git a/e2sm/lib/EUTRA-CGI.c b/e2sm/lib/EUTRA-CGI.c new file mode 100644 index 0000000..4b28cac --- /dev/null +++ b/e2sm/lib/EUTRA-CGI.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "EUTRA-CGI.h" + +asn_TYPE_member_t asn_MBR_EUTRA_CGI_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct EUTRA_CGI, pLMNIdentity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMNIdentity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMNIdentity" + }, + { ATF_NOFLAGS, 0, offsetof(struct EUTRA_CGI, eUTRACellIdentity), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EUTRACellIdentity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eUTRACellIdentity" + }, +}; +static const ber_tlv_tag_t asn_DEF_EUTRA_CGI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_EUTRA_CGI_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMNIdentity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* eUTRACellIdentity */ +}; +asn_SEQUENCE_specifics_t asn_SPC_EUTRA_CGI_specs_1 = { + sizeof(struct EUTRA_CGI), + offsetof(struct EUTRA_CGI, _asn_ctx), + asn_MAP_EUTRA_CGI_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_EUTRA_CGI = { + "EUTRA-CGI", + "EUTRA-CGI", + &asn_OP_SEQUENCE, + asn_DEF_EUTRA_CGI_tags_1, + sizeof(asn_DEF_EUTRA_CGI_tags_1) + /sizeof(asn_DEF_EUTRA_CGI_tags_1[0]), /* 1 */ + asn_DEF_EUTRA_CGI_tags_1, /* Same as above */ + sizeof(asn_DEF_EUTRA_CGI_tags_1) + /sizeof(asn_DEF_EUTRA_CGI_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_EUTRA_CGI_1, + 2, /* Elements count */ + &asn_SPC_EUTRA_CGI_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/EUTRACellIdentity.c b/e2sm/lib/EUTRACellIdentity.c new file mode 100644 index 0000000..570f5fd --- /dev/null +++ b/e2sm/lib/EUTRACellIdentity.c @@ -0,0 +1,67 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "EUTRACellIdentity.h" + +int +EUTRACellIdentity_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_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; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 28)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_EUTRACellIdentity_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 28, 28 } /* (SIZE(28..28)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_EUTRACellIdentity_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_EUTRACellIdentity = { + "EUTRACellIdentity", + "EUTRACellIdentity", + &asn_OP_BIT_STRING, + asn_DEF_EUTRACellIdentity_tags_1, + sizeof(asn_DEF_EUTRACellIdentity_tags_1) + /sizeof(asn_DEF_EUTRACellIdentity_tags_1[0]), /* 1 */ + asn_DEF_EUTRACellIdentity_tags_1, /* Same as above */ + sizeof(asn_DEF_EUTRACellIdentity_tags_1) + /sizeof(asn_DEF_EUTRACellIdentity_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_EUTRACellIdentity_constr_1, EUTRACellIdentity_constraint }, + 0, 0, /* No members */ + &asn_SPC_BIT_STRING_specs /* Additional specs */ +}; + diff --git a/e2sm/lib/FiveGS-TAC.c b/e2sm/lib/FiveGS-TAC.c new file mode 100644 index 0000000..5388efe --- /dev/null +++ b/e2sm/lib/FiveGS-TAC.c @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "FiveGS-TAC.h" + +int +FiveGS_TAC_constraint(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 == 3)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_FiveGS_TAC_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 3, 3 } /* (SIZE(3..3)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_FiveGS_TAC_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_FiveGS_TAC = { + "FiveGS-TAC", + "FiveGS-TAC", + &asn_OP_OCTET_STRING, + asn_DEF_FiveGS_TAC_tags_1, + sizeof(asn_DEF_FiveGS_TAC_tags_1) + /sizeof(asn_DEF_FiveGS_TAC_tags_1[0]), /* 1 */ + asn_DEF_FiveGS_TAC_tags_1, /* Same as above */ + sizeof(asn_DEF_FiveGS_TAC_tags_1) + /sizeof(asn_DEF_FiveGS_TAC_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_FiveGS_TAC_constr_1, FiveGS_TAC_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/e2sm/lib/FiveQI.c b/e2sm/lib/FiveQI.c new file mode 100644 index 0000000..498f1e5 --- /dev/null +++ b/e2sm/lib/FiveQI.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "FiveQI.h" + +int +FiveQI_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_FiveQI_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 0, 255 } /* (0..255,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_FiveQI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_FiveQI = { + "FiveQI", + "FiveQI", + &asn_OP_NativeInteger, + asn_DEF_FiveQI_tags_1, + sizeof(asn_DEF_FiveQI_tags_1) + /sizeof(asn_DEF_FiveQI_tags_1[0]), /* 1 */ + asn_DEF_FiveQI_tags_1, /* Same as above */ + sizeof(asn_DEF_FiveQI_tags_1) + /sizeof(asn_DEF_FiveQI_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_FiveQI_constr_1, FiveQI_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/e2sm/lib/FreqBandNrItem.c b/e2sm/lib/FreqBandNrItem.c new file mode 100644 index 0000000..6f0d675 --- /dev/null +++ b/e2sm/lib/FreqBandNrItem.c @@ -0,0 +1,80 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "FreqBandNrItem.h" + +static int +memb_freqBandIndicatorNr_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 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_per_constraints_t asn_PER_memb_freqBandIndicatorNr_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 10, 10, 1, 1024 } /* (1..1024,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_FreqBandNrItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct FreqBandNrItem, freqBandIndicatorNr), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_freqBandIndicatorNr_constr_2, memb_freqBandIndicatorNr_constraint_1 }, + 0, 0, /* No default value */ + "freqBandIndicatorNr" + }, +}; +static const ber_tlv_tag_t asn_DEF_FreqBandNrItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_FreqBandNrItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* freqBandIndicatorNr */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_FreqBandNrItem_specs_1 = { + sizeof(struct FreqBandNrItem), + offsetof(struct FreqBandNrItem, _asn_ctx), + asn_MAP_FreqBandNrItem_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_FreqBandNrItem = { + "FreqBandNrItem", + "FreqBandNrItem", + &asn_OP_SEQUENCE, + asn_DEF_FreqBandNrItem_tags_1, + sizeof(asn_DEF_FreqBandNrItem_tags_1) + /sizeof(asn_DEF_FreqBandNrItem_tags_1[0]), /* 1 */ + asn_DEF_FreqBandNrItem_tags_1, /* Same as above */ + sizeof(asn_DEF_FreqBandNrItem_tags_1) + /sizeof(asn_DEF_FreqBandNrItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_FreqBandNrItem_1, + 1, /* Elements count */ + &asn_SPC_FreqBandNrItem_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/GNB-CU-CP-UE-E1AP-ID.c b/e2sm/lib/GNB-CU-CP-UE-E1AP-ID.c new file mode 100644 index 0000000..613b901 --- /dev/null +++ b/e2sm/lib/GNB-CU-CP-UE-E1AP-ID.c @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "GNB-CU-CP-UE-E1AP-ID.h" + +int +GNB_CU_CP_UE_E1AP_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + /* Constraint check succeeded */ + return 0; +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_GNB_CU_CP_UE_E1AP_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 32, -1, 0, 4294967295 } /* (0..4294967295) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +const asn_INTEGER_specifics_t asn_SPC_GNB_CU_CP_UE_E1AP_ID_specs_1 = { + 0, 0, 0, 0, 0, + 0, /* Native long size */ + 1 /* Unsigned representation */ +}; +static const ber_tlv_tag_t asn_DEF_GNB_CU_CP_UE_E1AP_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_GNB_CU_CP_UE_E1AP_ID = { + "GNB-CU-CP-UE-E1AP-ID", + "GNB-CU-CP-UE-E1AP-ID", + &asn_OP_NativeInteger, + asn_DEF_GNB_CU_CP_UE_E1AP_ID_tags_1, + sizeof(asn_DEF_GNB_CU_CP_UE_E1AP_ID_tags_1) + /sizeof(asn_DEF_GNB_CU_CP_UE_E1AP_ID_tags_1[0]), /* 1 */ + asn_DEF_GNB_CU_CP_UE_E1AP_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GNB_CU_CP_UE_E1AP_ID_tags_1) + /sizeof(asn_DEF_GNB_CU_CP_UE_E1AP_ID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_GNB_CU_CP_UE_E1AP_ID_constr_1, GNB_CU_CP_UE_E1AP_ID_constraint }, + 0, 0, /* No members */ + &asn_SPC_GNB_CU_CP_UE_E1AP_ID_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/GNB-CU-UE-F1AP-ID.c b/e2sm/lib/GNB-CU-UE-F1AP-ID.c new file mode 100644 index 0000000..df994e9 --- /dev/null +++ b/e2sm/lib/GNB-CU-UE-F1AP-ID.c @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "GNB-CU-UE-F1AP-ID.h" + +int +GNB_CU_UE_F1AP_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + /* Constraint check succeeded */ + return 0; +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_GNB_CU_UE_F1AP_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 32, -1, 0, 4294967295 } /* (0..4294967295) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +const asn_INTEGER_specifics_t asn_SPC_GNB_CU_UE_F1AP_ID_specs_1 = { + 0, 0, 0, 0, 0, + 0, /* Native long size */ + 1 /* Unsigned representation */ +}; +static const ber_tlv_tag_t asn_DEF_GNB_CU_UE_F1AP_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_GNB_CU_UE_F1AP_ID = { + "GNB-CU-UE-F1AP-ID", + "GNB-CU-UE-F1AP-ID", + &asn_OP_NativeInteger, + asn_DEF_GNB_CU_UE_F1AP_ID_tags_1, + sizeof(asn_DEF_GNB_CU_UE_F1AP_ID_tags_1) + /sizeof(asn_DEF_GNB_CU_UE_F1AP_ID_tags_1[0]), /* 1 */ + asn_DEF_GNB_CU_UE_F1AP_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GNB_CU_UE_F1AP_ID_tags_1) + /sizeof(asn_DEF_GNB_CU_UE_F1AP_ID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_GNB_CU_UE_F1AP_ID_constr_1, GNB_CU_UE_F1AP_ID_constraint }, + 0, 0, /* No members */ + &asn_SPC_GNB_CU_UE_F1AP_ID_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/GNB-CU-UP-ID.c b/e2sm/lib/GNB-CU-UP-ID.c index a43bc37..648f822 100644 --- a/e2sm/lib/GNB-CU-UP-ID.c +++ b/e2sm/lib/GNB-CU-UP-ID.c @@ -1,8 +1,8 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) - * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #include "GNB-CU-UP-ID.h" @@ -42,9 +42,6 @@ GNB_CU_UP_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, * This type is implemented using INTEGER, * so here we adjust the DEF accordingly. */ -static asn_oer_constraints_t asn_OER_type_GNB_CU_UP_ID_constr_1 CC_NOTUSED = { - { 8, 1 } /* (0..68719476735) */, - -1}; asn_per_constraints_t asn_PER_type_GNB_CU_UP_ID_constr_1 CC_NOTUSED = { { APC_CONSTRAINED, 36, -1, 0, 68719476735 } /* (0..68719476735) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, @@ -63,7 +60,7 @@ asn_TYPE_descriptor_t asn_DEF_GNB_CU_UP_ID = { asn_DEF_GNB_CU_UP_ID_tags_1, /* Same as above */ sizeof(asn_DEF_GNB_CU_UP_ID_tags_1) /sizeof(asn_DEF_GNB_CU_UP_ID_tags_1[0]), /* 1 */ - { &asn_OER_type_GNB_CU_UP_ID_constr_1, &asn_PER_type_GNB_CU_UP_ID_constr_1, GNB_CU_UP_ID_constraint }, + { 0, &asn_PER_type_GNB_CU_UP_ID_constr_1, GNB_CU_UP_ID_constraint }, 0, 0, /* No members */ 0 /* No specifics */ }; diff --git a/e2sm/lib/GNB-DU-ID.c b/e2sm/lib/GNB-DU-ID.c index 363658c..820ae0b 100644 --- a/e2sm/lib/GNB-DU-ID.c +++ b/e2sm/lib/GNB-DU-ID.c @@ -1,8 +1,8 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) - * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #include "GNB-DU-ID.h" @@ -42,9 +42,6 @@ GNB_DU_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, * This type is implemented using INTEGER, * so here we adjust the DEF accordingly. */ -static asn_oer_constraints_t asn_OER_type_GNB_DU_ID_constr_1 CC_NOTUSED = { - { 8, 1 } /* (0..68719476735) */, - -1}; asn_per_constraints_t asn_PER_type_GNB_DU_ID_constr_1 CC_NOTUSED = { { APC_CONSTRAINED, 36, -1, 0, 68719476735 } /* (0..68719476735) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, @@ -63,7 +60,7 @@ asn_TYPE_descriptor_t asn_DEF_GNB_DU_ID = { asn_DEF_GNB_DU_ID_tags_1, /* Same as above */ sizeof(asn_DEF_GNB_DU_ID_tags_1) /sizeof(asn_DEF_GNB_DU_ID_tags_1[0]), /* 1 */ - { &asn_OER_type_GNB_DU_ID_constr_1, &asn_PER_type_GNB_DU_ID_constr_1, GNB_DU_ID_constraint }, + { 0, &asn_PER_type_GNB_DU_ID_constr_1, GNB_DU_ID_constraint }, 0, 0, /* No members */ 0 /* No specifics */ }; diff --git a/e2sm/lib/GNB-ID.c b/e2sm/lib/GNB-ID.c new file mode 100644 index 0000000..3e67e92 --- /dev/null +++ b/e2sm/lib/GNB-ID.c @@ -0,0 +1,88 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "GNB-ID.h" + +static int +memb_gNB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_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; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size >= 22 && 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 asn_per_constraints_t asn_PER_memb_gNB_ID_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 22, 32 } /* (SIZE(22..32)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_GNB_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_GNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GNB_ID, choice.gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_gNB_ID_constr_2, memb_gNB_ID_constraint_1 }, + 0, 0, /* No default value */ + "gNB-ID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_GNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* gNB-ID */ +}; +asn_CHOICE_specifics_t asn_SPC_GNB_ID_specs_1 = { + sizeof(struct GNB_ID), + offsetof(struct GNB_ID, _asn_ctx), + offsetof(struct GNB_ID, present), + sizeof(((struct GNB_ID *)0)->present), + asn_MAP_GNB_ID_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, + 1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_GNB_ID = { + "GNB-ID", + "GNB-ID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_GNB_ID_constr_1, CHOICE_constraint }, + asn_MBR_GNB_ID_1, + 1, /* Elements count */ + &asn_SPC_GNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/GUAMI.c b/e2sm/lib/GUAMI.c new file mode 100644 index 0000000..ccfe50f --- /dev/null +++ b/e2sm/lib/GUAMI.c @@ -0,0 +1,80 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "GUAMI.h" + +asn_TYPE_member_t asn_MBR_GUAMI_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GUAMI, pLMNIdentity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMNIdentity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMNIdentity" + }, + { ATF_NOFLAGS, 0, offsetof(struct GUAMI, aMFRegionID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AMFRegionID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "aMFRegionID" + }, + { ATF_NOFLAGS, 0, offsetof(struct GUAMI, aMFSetID), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AMFSetID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "aMFSetID" + }, + { ATF_NOFLAGS, 0, offsetof(struct GUAMI, aMFPointer), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AMFPointer, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "aMFPointer" + }, +}; +static const ber_tlv_tag_t asn_DEF_GUAMI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GUAMI_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMNIdentity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* aMFRegionID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* aMFSetID */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* aMFPointer */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GUAMI_specs_1 = { + sizeof(struct GUAMI), + offsetof(struct GUAMI, _asn_ctx), + asn_MAP_GUAMI_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 4, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GUAMI = { + "GUAMI", + "GUAMI", + &asn_OP_SEQUENCE, + asn_DEF_GUAMI_tags_1, + sizeof(asn_DEF_GUAMI_tags_1) + /sizeof(asn_DEF_GUAMI_tags_1[0]), /* 1 */ + asn_DEF_GUAMI_tags_1, /* Same as above */ + sizeof(asn_DEF_GUAMI_tags_1) + /sizeof(asn_DEF_GUAMI_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GUAMI_1, + 4, /* Elements count */ + &asn_SPC_GUAMI_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/GUMMEI.c b/e2sm/lib/GUMMEI.c new file mode 100644 index 0000000..82d507b --- /dev/null +++ b/e2sm/lib/GUMMEI.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "GUMMEI.h" + +asn_TYPE_member_t asn_MBR_GUMMEI_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GUMMEI, pLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMNIdentity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMN-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct GUMMEI, mME_Group_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MME_Group_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "mME-Group-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct GUMMEI, mME_Code), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MME_Code, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "mME-Code" + }, +}; +static const ber_tlv_tag_t asn_DEF_GUMMEI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GUMMEI_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* mME-Group-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* mME-Code */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GUMMEI_specs_1 = { + sizeof(struct GUMMEI), + offsetof(struct GUMMEI, _asn_ctx), + asn_MAP_GUMMEI_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GUMMEI = { + "GUMMEI", + "GUMMEI", + &asn_OP_SEQUENCE, + asn_DEF_GUMMEI_tags_1, + sizeof(asn_DEF_GUMMEI_tags_1) + /sizeof(asn_DEF_GUMMEI_tags_1[0]), /* 1 */ + asn_DEF_GUMMEI_tags_1, /* Same as above */ + sizeof(asn_DEF_GUMMEI_tags_1) + /sizeof(asn_DEF_GUMMEI_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GUMMEI_1, + 3, /* Elements count */ + &asn_SPC_GUMMEI_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/GeneralString.c b/e2sm/lib/GeneralString.c new file mode 100644 index 0000000..cc35a3a --- /dev/null +++ b/e2sm/lib/GeneralString.c @@ -0,0 +1,58 @@ +/*- + * Copyright (c) 2003 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* + * GeneralString basic type description. + */ +static const ber_tlv_tag_t asn_DEF_GeneralString_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (27 << 2)), /* [UNIVERSAL 27] IMPLICIT ...*/ + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) /* ... OCTET STRING */ +}; +asn_TYPE_operation_t asn_OP_GeneralString = { + OCTET_STRING_free, + OCTET_STRING_print, /* non-ascii string */ + OCTET_STRING_compare, + OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_hex, + OCTET_STRING_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + OCTET_STRING_decode_oer, + OCTET_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + OCTET_STRING_decode_uper, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_encode_uper, + OCTET_STRING_decode_aper, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + OCTET_STRING_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_GeneralString = { + "GeneralString", + "GeneralString", + &asn_OP_GeneralString, + asn_DEF_GeneralString_tags, + sizeof(asn_DEF_GeneralString_tags) + / sizeof(asn_DEF_GeneralString_tags[0]) - 1, + asn_DEF_GeneralString_tags, + sizeof(asn_DEF_GeneralString_tags) + / sizeof(asn_DEF_GeneralString_tags[0]), + { 0, 0, asn_generic_unknown_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/e2sm/lib/GeneralizedTime.c b/e2sm/lib/GeneralizedTime.c new file mode 100644 index 0000000..f1095a2 --- /dev/null +++ b/e2sm/lib/GeneralizedTime.c @@ -0,0 +1,833 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#define _POSIX_PTHREAD_SEMANTICS /* for Sun */ +#define _REENTRANT /* for Sun */ +#define __EXTENSIONS__ /* for Sun */ +#ifndef _BSD_SOURCE +#define _BSD_SOURCE /* for timegm(3) */ +#endif +#include +#include + +#ifdef __CYGWIN__ +#include "/usr/include/time.h" +#else +#include +#endif /* __CYGWIN__ */ + +#include +#include + +#if defined(_WIN32) +#pragma message( "PLEASE STOP AND READ!") +#pragma message( " localtime_r is implemented via localtime(), which may be not thread-safe.") +#pragma message( " gmtime_r is implemented via gmtime(), which may be not thread-safe.") +#pragma message( " ") +#pragma message( " You must fix the code by inserting appropriate locking") +#pragma message( " if you want to use asn_GT2time() or asn_UT2time().") +#pragma message( "PLEASE STOP AND READ!") + +static struct tm *localtime_r(const time_t *tloc, struct tm *result) { + struct tm *tm; + if((tm = localtime(tloc))) + return memcpy(result, tm, sizeof(struct tm)); + return 0; +} + +static struct tm *gmtime_r(const time_t *tloc, struct tm *result) { + struct tm *tm; + if((tm = gmtime(tloc))) + return memcpy(result, tm, sizeof(struct tm)); + return 0; +} + +#define tzset() _tzset() +#define putenv(c) _putenv(c) +#define _EMULATE_TIMEGM + +#endif /* _WIN32 */ + +#if defined(sun) || defined(__sun) || defined(__solaris__) +#define _EMULATE_TIMEGM +#endif + +/* + * Where to look for offset from GMT, Phase I. + * Several platforms are known. + */ +#if defined(__FreeBSD__) \ + || (defined(__GNUC__) && defined(__APPLE_CC__)) \ + || (defined __GLIBC__ && __GLIBC__ >= 2) +#undef HAVE_TM_GMTOFF +#define HAVE_TM_GMTOFF +#endif /* BSDs and newer glibc */ + +/* + * Where to look for offset from GMT, Phase II. + */ +#ifdef HAVE_TM_GMTOFF +#define GMTOFF(tm) ((tm).tm_gmtoff) +#else /* HAVE_TM_GMTOFF */ +#define GMTOFF(tm) (-timezone) +#endif /* HAVE_TM_GMTOFF */ + +#if defined(_WIN32) +#pragma message( "PLEASE STOP AND READ!") +#pragma message( " timegm() is implemented via getenv(\"TZ\")/setenv(\"TZ\"), which may be not thread-safe.") +#pragma message( " ") +#pragma message( " You must fix the code by inserting appropriate locking") +#pragma message( " if you want to use asn_GT2time() or asn_UT2time().") +#pragma message( "PLEASE STOP AND READ!") +#else +#if (defined(_EMULATE_TIMEGM) || !defined(HAVE_TM_GMTOFF)) +#warning "PLEASE STOP AND READ!" +#warning " timegm() is implemented via getenv(\"TZ\")/setenv(\"TZ\"), which may be not thread-safe." +#warning " " +#warning " You must fix the code by inserting appropriate locking" +#warning " if you want to use asn_GT2time() or asn_UT2time()." +#warning "PLEASE STOP AND READ!" +#endif /* _EMULATE_TIMEGM */ +#endif + +/* + * Override our GMTOFF decision for other known platforms. + */ +#ifdef __CYGWIN__ +#undef GMTOFF +static long GMTOFF(struct tm a){ + struct tm *lt; + time_t local_time, gmt_time; + long zone; + + tzset(); + gmt_time = time (NULL); + + lt = gmtime(&gmt_time); + + local_time = mktime(lt); + return (gmt_time - local_time); +} +#define _EMULATE_TIMEGM + +#endif /* __CYGWIN__ */ + +#define ATZVARS do { \ + char tzoldbuf[64]; \ + char *tzold +#define ATZSAVETZ do { \ + tzold = getenv("TZ"); \ + if(tzold) { \ + size_t tzlen = strlen(tzold); \ + if(tzlen < sizeof(tzoldbuf)) { \ + tzold = memcpy(tzoldbuf, tzold, tzlen + 1); \ + } else { \ + char *dupptr = tzold; \ + tzold = MALLOC(tzlen + 1); \ + if(tzold) memcpy(tzold, dupptr, tzlen + 1); \ + } \ + setenv("TZ", "UTC", 1); \ + } \ + tzset(); \ +} while(0) +#define ATZOLDTZ do { \ + if (tzold) { \ + setenv("TZ", tzold, 1); \ + *tzoldbuf = 0; \ + if(tzold != tzoldbuf) \ + FREEMEM(tzold); \ + } else { \ + unsetenv("TZ"); \ + } \ + tzset(); \ +} while(0); } while(0); + +#ifndef HAVE_TIMEGM +#ifdef _EMULATE_TIMEGM +#include +static time_t timegm(struct tm *tm) { + time_t tloc; + ATZVARS; + ATZSAVETZ; + tloc = mktime(tm); + ATZOLDTZ; + return tloc; +} +#endif /* _EMULATE_TIMEGM */ +#endif + + +#ifndef ASN___INTERNAL_TEST_MODE + +/* + * GeneralizedTime basic type description. + */ +static const ber_tlv_tag_t asn_DEF_GeneralizedTime_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (24 << 2)), /* [UNIVERSAL 24] IMPLICIT ...*/ + (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)), /* [UNIVERSAL 26] IMPLICIT ...*/ + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) /* ... OCTET STRING */ +}; +static asn_per_constraints_t asn_DEF_GeneralizedTime_per_constraints = { + { APC_CONSTRAINED, 7, 7, 0x20, 0x7e }, /* Value */ + { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, /* Size */ + 0, 0 +}; +asn_TYPE_operation_t asn_OP_GeneralizedTime = { + OCTET_STRING_free, + GeneralizedTime_print, + GeneralizedTime_compare, + OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ + GeneralizedTime_encode_der, + OCTET_STRING_decode_xer_utf8, + GeneralizedTime_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + OCTET_STRING_decode_oer, + OCTET_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + OCTET_STRING_decode_uper, + OCTET_STRING_encode_uper, + OCTET_STRING_decode_aper, + OCTET_STRING_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + GeneralizedTime_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_GeneralizedTime = { + "GeneralizedTime", + "GeneralizedTime", + &asn_OP_GeneralizedTime, + asn_DEF_GeneralizedTime_tags, + sizeof(asn_DEF_GeneralizedTime_tags) + / sizeof(asn_DEF_GeneralizedTime_tags[0]) - 2, + asn_DEF_GeneralizedTime_tags, + sizeof(asn_DEF_GeneralizedTime_tags) + / sizeof(asn_DEF_GeneralizedTime_tags[0]), + { 0, &asn_DEF_GeneralizedTime_per_constraints, GeneralizedTime_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +#endif /* ASN___INTERNAL_TEST_MODE */ + +/* + * Check that the time looks like the time. + */ +int +GeneralizedTime_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, + void *app_key) { + const GeneralizedTime_t *st = (const GeneralizedTime_t *)sptr; + time_t tloc; + + errno = EPERM; /* Just an unlikely error code */ + tloc = asn_GT2time(st, 0, 0); + if(tloc == -1 && errno != EPERM) { + ASN__CTFAIL(app_key, td, sptr, + "%s: Invalid time format: %s (%s:%d)", + td->name, strerror(errno), __FILE__, __LINE__); + return -1; + } + + return 0; +} + +asn_enc_rval_t +GeneralizedTime_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + GeneralizedTime_t *st; + asn_enc_rval_t erval = {0,0,0}; + int fv, fd; /* seconds fraction value and number of digits */ + struct tm tm; + time_t tloc; + + /* + * Encode as a canonical DER. + */ + errno = EPERM; + tloc = asn_GT2time_frac((const GeneralizedTime_t *)sptr, &fv, &fd, &tm, + 1); /* Recognize time */ + if(tloc == -1 && errno != EPERM) { + /* Failed to recognize time. Fail completely. */ + ASN__ENCODE_FAILED; + } + + st = asn_time2GT_frac(0, &tm, fv, fd, 1); /* Save time canonically */ + if(!st) ASN__ENCODE_FAILED; /* Memory allocation failure. */ + + erval = OCTET_STRING_encode_der(td, st, tag_mode, tag, cb, app_key); + + ASN_STRUCT_FREE(*td, st); + + return erval; +} + +#ifndef ASN___INTERNAL_TEST_MODE + +asn_enc_rval_t +GeneralizedTime_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + if(flags & XER_F_CANONICAL) { + GeneralizedTime_t *gt; + asn_enc_rval_t rv; + int fv, fd; /* fractional parts */ + struct tm tm; + + errno = EPERM; + if(asn_GT2time_frac((const GeneralizedTime_t *)sptr, + &fv, &fd, &tm, 1) == -1 + && errno != EPERM) + ASN__ENCODE_FAILED; + + gt = asn_time2GT_frac(0, &tm, fv, fd, 1); + if(!gt) ASN__ENCODE_FAILED; + + rv = OCTET_STRING_encode_xer_utf8(td, sptr, ilevel, flags, + cb, app_key); + ASN_STRUCT_FREE(asn_DEF_GeneralizedTime, gt); + return rv; + } else { + return OCTET_STRING_encode_xer_utf8(td, sptr, ilevel, flags, + cb, app_key); + } +} + +#endif /* ASN___INTERNAL_TEST_MODE */ + +int +GeneralizedTime_print(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + const GeneralizedTime_t *st = (const GeneralizedTime_t *)sptr; + + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(st && st->buf) { + char buf[32]; + struct tm tm; + int ret; + + errno = EPERM; + if(asn_GT2time(st, &tm, 1) == -1 && errno != EPERM) + return (cb("", 11, app_key) < 0) ? -1 : 0; + + ret = snprintf(buf, sizeof(buf), + "%04d-%02d-%02d %02d:%02d:%02d (GMT)", + tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, + tm.tm_hour, tm.tm_min, tm.tm_sec); + assert(ret > 0 && ret < (int)sizeof(buf)); + return (cb(buf, ret, app_key) < 0) ? -1 : 0; + } else { + return (cb("", 8, app_key) < 0) ? -1 : 0; + } +} + +time_t +asn_GT2time(const GeneralizedTime_t *st, struct tm *ret_tm, int as_gmt) { + return asn_GT2time_frac(st, 0, 0, ret_tm, as_gmt); +} + +time_t +asn_GT2time_prec(const GeneralizedTime_t *st, int *frac_value, int frac_digits, struct tm *ret_tm, int as_gmt) { + time_t tloc; + int fv, fd = 0; + + if(frac_value) + tloc = asn_GT2time_frac(st, &fv, &fd, ret_tm, as_gmt); + else + return asn_GT2time_frac(st, 0, 0, ret_tm, as_gmt); + if(fd == 0 || frac_digits <= 0) { + *frac_value = 0; + } else { + while(fd > frac_digits) + fv /= 10, fd--; + while(fd < frac_digits) { + if(fv < INT_MAX / 10) { + fv *= 10; + fd++; + } else { + /* Too long precision request */ + fv = 0; + break; + } + } + + *frac_value = fv; + } + + return tloc; +} + +time_t +asn_GT2time_frac(const GeneralizedTime_t *st, int *frac_value, int *frac_digits, struct tm *ret_tm, int as_gmt) { + struct tm tm_s; + uint8_t *buf; + uint8_t *end; + int gmtoff_h = 0; + int gmtoff_m = 0; + int gmtoff = 0; /* h + m */ + int offset_specified = 0; + int fvalue = 0; + int fdigits = 0; + time_t tloc; + + if(!st || !st->buf) { + errno = EINVAL; + return -1; + } else { + buf = st->buf; + end = buf + st->size; + } + + if(st->size < 10) { + errno = EINVAL; + return -1; + } + + /* + * Decode first 10 bytes: "AAAAMMJJhh" + */ + memset(&tm_s, 0, sizeof(tm_s)); +#undef B2F +#undef B2T +#define B2F(var) do { \ + unsigned ch = *buf; \ + if(ch < 0x30 || ch > 0x39) { \ + errno = EINVAL; \ + return -1; \ + } else { \ + var = var * 10 + (ch - 0x30); \ + buf++; \ + } \ + } while(0) +#define B2T(var) B2F(tm_s.var) + + B2T(tm_year); /* 1: A */ + B2T(tm_year); /* 2: A */ + B2T(tm_year); /* 3: A */ + B2T(tm_year); /* 4: A */ + B2T(tm_mon); /* 5: M */ + B2T(tm_mon); /* 6: M */ + B2T(tm_mday); /* 7: J */ + B2T(tm_mday); /* 8: J */ + B2T(tm_hour); /* 9: h */ + B2T(tm_hour); /* 0: h */ + + if(buf == end) goto local_finish; + + /* + * Parse [mm[ss[(.|,)ffff]]] + * ^^ + */ + switch(*buf) { + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: + tm_s.tm_min = (*buf++) - 0x30; + if(buf == end) { errno = EINVAL; return -1; } + B2T(tm_min); + break; + case 0x2B: case 0x2D: /* +, - */ + goto offset; + case 0x5A: /* Z */ + goto utc_finish; + default: + errno = EINVAL; + return -1; + } + + if(buf == end) goto local_finish; + + /* + * Parse [mm[ss[(.|,)ffff]]] + * ^^ + */ + switch(*buf) { + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: + tm_s.tm_sec = (*buf++) - 0x30; + if(buf == end) { errno = EINVAL; return -1; } + B2T(tm_sec); + break; + case 0x2B: case 0x2D: /* +, - */ + goto offset; + case 0x5A: /* Z */ + goto utc_finish; + default: + errno = EINVAL; + return -1; + } + + if(buf == end) goto local_finish; + + /* + * Parse [mm[ss[(.|,)ffff]]] + * ^ ^ + */ + switch(*buf) { + case 0x2C: case 0x2E: /* (.|,) */ + /* + * Process fractions of seconds. + */ + for(buf++; buf < end; buf++) { + int v = *buf; + /* GCC 4.x is being too smart without volatile */ + switch(v) { + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: + if(fvalue < INT_MAX/10) { + fvalue = fvalue * 10 + (v - 0x30); + fdigits++; + } else { + /* Not enough precision, ignore */ + } + continue; + default: + break; + } + break; + } + } + + if(buf == end) goto local_finish; + + switch(*buf) { + case 0x2B: case 0x2D: /* +, - */ + goto offset; + case 0x5A: /* Z */ + goto utc_finish; + default: + errno = EINVAL; + return -1; + } + + +offset: + + if(end - buf < 3) { + errno = EINVAL; + return -1; + } + buf++; + B2F(gmtoff_h); + B2F(gmtoff_h); + if(buf[-3] == 0x2D) /* Negative */ + gmtoff = -1; + else + gmtoff = 1; + + if((end - buf) == 2) { + B2F(gmtoff_m); + B2F(gmtoff_m); + } else if(end != buf) { + errno = EINVAL; + return -1; + } + + gmtoff = gmtoff * (3600 * gmtoff_h + 60 * gmtoff_m); + + /* Fall through */ +utc_finish: + + offset_specified = 1; + + /* Fall through */ +local_finish: + + /* + * Validation. + */ + if((tm_s.tm_mon > 12 || tm_s.tm_mon < 1) + || (tm_s.tm_mday > 31 || tm_s.tm_mday < 1) + || (tm_s.tm_hour > 23) + || (tm_s.tm_sec > 60) + ) { + errno = EINVAL; + return -1; + } + + /* Canonicalize */ + tm_s.tm_mon -= 1; /* 0 - 11 */ + tm_s.tm_year -= 1900; + tm_s.tm_isdst = -1; + + tm_s.tm_sec -= gmtoff; + + /*** AT THIS POINT tm_s is either GMT or local (unknown) ****/ + + if(offset_specified) { + tloc = timegm(&tm_s); + } else { + /* + * Without an offset (or "Z"), + * we can only guess that it is a local zone. + * Interpret it in this fashion. + */ + tloc = mktime(&tm_s); + } + if(tloc == -1) { + errno = EINVAL; + return -1; + } + + if(ret_tm) { + if(as_gmt) { + if(offset_specified) { + *ret_tm = tm_s; + } else { + if(gmtime_r(&tloc, ret_tm) == 0) { + errno = EINVAL; + return -1; + } + } + } else { + if(localtime_r(&tloc, ret_tm) == 0) { + errno = EINVAL; + return -1; + } + } + } + + /* Fractions of seconds */ + if(frac_value) *frac_value = fvalue; + if(frac_digits) *frac_digits = fdigits; + + return tloc; +} + +GeneralizedTime_t * +asn_time2GT(GeneralizedTime_t *opt_gt, const struct tm *tm, int force_gmt) { + return asn_time2GT_frac(opt_gt, tm, 0, 0, force_gmt); +} + +GeneralizedTime_t * +asn_time2GT_frac(GeneralizedTime_t *opt_gt, const struct tm *tm, int frac_value, int frac_digits, int force_gmt) { + struct tm tm_s; + long gmtoff = 0; + const unsigned int buf_size = + 4 + 2 + 2 /* yyyymmdd */ + + 2 + 2 + 2 /* hhmmss */ + + 1 + 9 /* .fffffffff */ + + 1 + 4 /* +hhmm */ + + 1 /* '\0' */ + ; + char *buf = NULL; + char *p = NULL; + int size = 0; + + /* Check arguments */ + if(!tm) { + errno = EINVAL; + return 0; + } + + /* Pre-allocate a buffer of sufficient yet small length */ + buf = (char *)MALLOC(buf_size); + if(!buf) return 0; + + gmtoff = GMTOFF(*tm); + + if(force_gmt && gmtoff) { + tm_s = *tm; + tm_s.tm_sec -= gmtoff; + timegm(&tm_s); /* Fix the time */ + tm = &tm_s; +#ifdef HAVE_TM_GMTOFF + assert(!GMTOFF(tm_s)); /* Will fix itself */ +#else /* !HAVE_TM_GMTOFF */ + gmtoff = 0; +#endif + } + + size = snprintf(buf, buf_size, "%04d%02d%02d%02d%02d%02d", + tm->tm_year + 1900, + tm->tm_mon + 1, + tm->tm_mday, + tm->tm_hour, + tm->tm_min, + tm->tm_sec + ); + if(size != 14) { + /* Could be assert(size == 14); */ + FREEMEM(buf); + errno = EINVAL; + return 0; + } + + p = buf + size; + + /* + * Deal with fractions. + */ + if(frac_value > 0 && frac_digits > 0) { + char *end = p + 1 + 9; /* '.' + maximum 9 digits */ + char *z = p; + long fbase; + *z++ = '.'; + + /* Place bounds on precision */ + while(frac_digits-- > 9) + frac_value /= 10; + + /* emulate fbase = pow(10, frac_digits) */ + for(fbase = 1; frac_digits--;) + fbase *= 10; + + do { + int digit = frac_value / fbase; + if(digit > 9) { z = 0; break; } + *z++ = digit + 0x30; + frac_value %= fbase; + fbase /= 10; + } while(fbase > 0 && frac_value > 0 && z < end); + if(z) { + for(--z; *z == 0x30; --z); /* Strip zeroes */ + p = z + (*z != '.'); + size = p - buf; + } + } + + if(force_gmt) { + *p++ = 0x5a; /* "Z" */ + *p++ = 0; + size++; + } else { + int ret; + gmtoff %= 86400; + ret = snprintf(p, buf_size - size, "%+03ld%02ld", + gmtoff / 3600, labs(gmtoff % 3600) / 60); + if(ret != 5) { + FREEMEM(buf); + errno = EINVAL; + return 0; + } + size += ret; + } + + if(opt_gt) { + if(opt_gt->buf) + FREEMEM(opt_gt->buf); + } else { + opt_gt = (GeneralizedTime_t *)CALLOC(1, sizeof *opt_gt); + if(!opt_gt) { FREEMEM(buf); return 0; } + } + + opt_gt->buf = (unsigned char *)buf; + opt_gt->size = size; + + return opt_gt; +} + +asn_random_fill_result_t +GeneralizedTime_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + static const char *values[] = { + "19700101000000", "19700101000000-0000", "19700101000000+0000", + "19700101000000Z", "19700101000000.3Z", "19821106210623.3", + "19821106210629.3Z", "19691106210827.3-0500", "19821106210629.456", + }; + size_t rnd = asn_random_between(0, sizeof(values)/sizeof(values[0])-1); + + (void)constraints; + + if(max_length < sizeof("yyyymmddhhmmss") && !*sptr) { + return result_skipped; + } + + if(*sptr) { + if(OCTET_STRING_fromBuf(*sptr, values[rnd], -1) != 0) { + if(!sptr) return result_failed; + } + } else { + *sptr = OCTET_STRING_new_fromBuf(td, values[rnd], -1); + if(!sptr) return result_failed; + } + + return result_ok; +} + +int +GeneralizedTime_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const GeneralizedTime_t *a = aptr; + const GeneralizedTime_t *b = bptr; + + (void)td; + + if(a && b) { + int afrac_value, afrac_digits; + int bfrac_value, bfrac_digits; + int aerr, berr; + time_t at, bt; + + errno = EPERM; + at = asn_GT2time_frac(a, &afrac_value, &afrac_digits, 0, 0); + aerr = errno; + errno = EPERM; + bt = asn_GT2time_frac(b, &bfrac_value, &bfrac_digits, 0, 0); + berr = errno; + + if(at == -1 && aerr != EPERM) { + if(bt == -1 && berr != EPERM) { + return OCTET_STRING_compare(td, aptr, bptr); + } else { + return -1; + } + } else if(bt == -1 && berr != EPERM) { + return 1; + } else { + /* Both values are valid. */ + } + + if(at < bt) { + return -1; + } else if(at > bt) { + return 1; + } else if(afrac_digits == bfrac_digits) { + if(afrac_value == bfrac_value) { + return 0; + } + if(afrac_value < bfrac_value) { + return -1; + } else { + return 1; + } + } else if(afrac_digits == 0) { + return -1; + } else if(bfrac_digits == 0) { + return 1; + } else { + double afrac = (double)afrac_value / afrac_digits; + double bfrac = (double)bfrac_value / bfrac_digits; + if(afrac < bfrac) { + return -1; + } else if(afrac > bfrac) { + return 1; + } else { + return 0; + } + } + } else if(!a && !b) { + return 0; + } else if(!a) { + return -1; + } else { + return 1; + } + +} + diff --git a/e2sm/lib/GlobalENB-ID.c b/e2sm/lib/GlobalENB-ID.c index 4672555..db6e497 100644 --- a/e2sm/lib/GlobalENB-ID.c +++ b/e2sm/lib/GlobalENB-ID.c @@ -1,21 +1,21 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) - * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #include "GlobalENB-ID.h" asn_TYPE_member_t asn_MBR_GlobalENB_ID_1[] = { - { ATF_NOFLAGS, 0, offsetof(struct GlobalENB_ID, pLMN_Identity), + { ATF_NOFLAGS, 0, offsetof(struct GlobalENB_ID, pLMNIdentity), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ - &asn_DEF_PLMN_Identity, + &asn_DEF_PLMNIdentity, 0, { 0, 0, 0 }, 0, 0, /* No default value */ - "pLMN-Identity" + "pLMNIdentity" }, { ATF_NOFLAGS, 0, offsetof(struct GlobalENB_ID, eNB_ID), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), @@ -31,7 +31,7 @@ static const ber_tlv_tag_t asn_DEF_GlobalENB_ID_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static const asn_TYPE_tag2member_t asn_MAP_GlobalENB_ID_tag2el_1[] = { - { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMNIdentity */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* eNB-ID */ }; asn_SEQUENCE_specifics_t asn_SPC_GlobalENB_ID_specs_1 = { diff --git a/e2sm/lib/GlobalGNB-ID.c b/e2sm/lib/GlobalGNB-ID.c new file mode 100644 index 0000000..8576ec7 --- /dev/null +++ b/e2sm/lib/GlobalGNB-ID.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "GlobalGNB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalGNB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalGNB_ID, pLMNIdentity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMNIdentity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMNIdentity" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalGNB_ID, gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_GNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalGNB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalGNB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMNIdentity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* gNB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalGNB_ID_specs_1 = { + sizeof(struct GlobalGNB_ID), + offsetof(struct GlobalGNB_ID, _asn_ctx), + asn_MAP_GlobalGNB_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalGNB_ID = { + "GlobalGNB-ID", + "GlobalGNB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalGNB_ID_tags_1, + sizeof(asn_DEF_GlobalGNB_ID_tags_1) + /sizeof(asn_DEF_GlobalGNB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalGNB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalGNB_ID_tags_1) + /sizeof(asn_DEF_GlobalGNB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalGNB_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalGNB_ID_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/GlobalNGRANNodeID.c b/e2sm/lib/GlobalNGRANNodeID.c new file mode 100644 index 0000000..53fc9fe --- /dev/null +++ b/e2sm/lib/GlobalNGRANNodeID.c @@ -0,0 +1,64 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "GlobalNGRANNodeID.h" + +#include "GlobalGNB-ID.h" +#include "GlobalNgENB-ID.h" +asn_per_constraints_t asn_PER_type_GlobalNGRANNodeID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_GlobalNGRANNodeID_1[] = { + { ATF_POINTER, 0, offsetof(struct GlobalNGRANNodeID, choice.gNB), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalGNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB" + }, + { ATF_POINTER, 0, offsetof(struct GlobalNGRANNodeID, choice.ng_eNB), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalNgENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ng-eNB" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalNGRANNodeID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ng-eNB */ +}; +asn_CHOICE_specifics_t asn_SPC_GlobalNGRANNodeID_specs_1 = { + sizeof(struct GlobalNGRANNodeID), + offsetof(struct GlobalNGRANNodeID, _asn_ctx), + offsetof(struct GlobalNGRANNodeID, present), + sizeof(((struct GlobalNGRANNodeID *)0)->present), + asn_MAP_GlobalNGRANNodeID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalNGRANNodeID = { + "GlobalNGRANNodeID", + "GlobalNGRANNodeID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_GlobalNGRANNodeID_constr_1, CHOICE_constraint }, + asn_MBR_GlobalNGRANNodeID_1, + 2, /* Elements count */ + &asn_SPC_GlobalNGRANNodeID_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/GlobalNgENB-ID.c b/e2sm/lib/GlobalNgENB-ID.c new file mode 100644 index 0000000..e0c693d --- /dev/null +++ b/e2sm/lib/GlobalNgENB-ID.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "GlobalNgENB-ID.h" + +asn_TYPE_member_t asn_MBR_GlobalNgENB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GlobalNgENB_ID, pLMNIdentity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMNIdentity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMNIdentity" + }, + { ATF_NOFLAGS, 0, offsetof(struct GlobalNgENB_ID, ngENB_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_NgENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ngENB-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_GlobalNgENB_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_GlobalNgENB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMNIdentity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ngENB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_GlobalNgENB_ID_specs_1 = { + sizeof(struct GlobalNgENB_ID), + offsetof(struct GlobalNgENB_ID, _asn_ctx), + asn_MAP_GlobalNgENB_ID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_GlobalNgENB_ID = { + "GlobalNgENB-ID", + "GlobalNgENB-ID", + &asn_OP_SEQUENCE, + asn_DEF_GlobalNgENB_ID_tags_1, + sizeof(asn_DEF_GlobalNgENB_ID_tags_1) + /sizeof(asn_DEF_GlobalNgENB_ID_tags_1[0]), /* 1 */ + asn_DEF_GlobalNgENB_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_GlobalNgENB_ID_tags_1) + /sizeof(asn_DEF_GlobalNgENB_ID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_GlobalNgENB_ID_1, + 2, /* Elements count */ + &asn_SPC_GlobalNgENB_ID_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/GlobalenGNB-ID.c b/e2sm/lib/GlobalenGNB-ID.c index 712d6d0..aca7a85 100644 --- a/e2sm/lib/GlobalenGNB-ID.c +++ b/e2sm/lib/GlobalenGNB-ID.c @@ -1,8 +1,8 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) - * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #include "GlobalenGNB-ID.h" @@ -11,20 +11,20 @@ asn_TYPE_member_t asn_MBR_GlobalenGNB_ID_1[] = { { ATF_NOFLAGS, 0, offsetof(struct GlobalenGNB_ID, pLMN_Identity), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ - &asn_DEF_PLMN_Identity, + &asn_DEF_PLMNIdentity, 0, { 0, 0, 0 }, 0, 0, /* No default value */ "pLMN-Identity" }, - { ATF_NOFLAGS, 0, offsetof(struct GlobalenGNB_ID, gNB_ID), + { ATF_NOFLAGS, 0, offsetof(struct GlobalenGNB_ID, en_gNB_ID), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), +1, /* EXPLICIT tag at current level */ - &asn_DEF_ENGNB_ID, + &asn_DEF_EN_GNB_ID, 0, { 0, 0, 0 }, 0, 0, /* No default value */ - "gNB-ID" + "en-gNB-ID" }, }; static const ber_tlv_tag_t asn_DEF_GlobalenGNB_ID_tags_1[] = { @@ -32,7 +32,7 @@ static const ber_tlv_tag_t asn_DEF_GlobalenGNB_ID_tags_1[] = { }; static const asn_TYPE_tag2member_t asn_MAP_GlobalenGNB_ID_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMN-Identity */ - { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* gNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* en-gNB-ID */ }; asn_SEQUENCE_specifics_t asn_SPC_GlobalenGNB_ID_specs_1 = { sizeof(struct GlobalenGNB_ID), diff --git a/e2sm/lib/GranularityPeriod.c b/e2sm/lib/GranularityPeriod.c new file mode 100644 index 0000000..1cf3c62 --- /dev/null +++ b/e2sm/lib/GranularityPeriod.c @@ -0,0 +1,66 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "GranularityPeriod.h" + +int +GranularityPeriod_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + unsigned long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const unsigned long *)sptr; + + if((value >= 1 && value <= 4294967295)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_GranularityPeriod_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 32, -1, 1, 4294967295 } /* (1..4294967295) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +const asn_INTEGER_specifics_t asn_SPC_GranularityPeriod_specs_1 = { + 0, 0, 0, 0, 0, + 0, /* Native long size */ + 1 /* Unsigned representation */ +}; +static const ber_tlv_tag_t asn_DEF_GranularityPeriod_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_GranularityPeriod = { + "GranularityPeriod", + "GranularityPeriod", + &asn_OP_NativeInteger, + asn_DEF_GranularityPeriod_tags_1, + sizeof(asn_DEF_GranularityPeriod_tags_1) + /sizeof(asn_DEF_GranularityPeriod_tags_1[0]), /* 1 */ + asn_DEF_GranularityPeriod_tags_1, /* Same as above */ + sizeof(asn_DEF_GranularityPeriod_tags_1) + /sizeof(asn_DEF_GranularityPeriod_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_GranularityPeriod_constr_1, GranularityPeriod_constraint }, + 0, 0, /* No members */ + &asn_SPC_GranularityPeriod_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/GraphicString.c b/e2sm/lib/GraphicString.c new file mode 100644 index 0000000..e6642c9 --- /dev/null +++ b/e2sm/lib/GraphicString.c @@ -0,0 +1,58 @@ +/*- + * Copyright (c) 2003 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* + * GraphicString basic type description. + */ +static const ber_tlv_tag_t asn_DEF_GraphicString_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (25 << 2)), /* [UNIVERSAL 25] IMPLICIT ...*/ + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) /* ... OCTET STRING */ +}; +asn_TYPE_operation_t asn_OP_GraphicString = { + OCTET_STRING_free, + OCTET_STRING_print, /* non-ascii string */ + OCTET_STRING_compare, + OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_hex, + OCTET_STRING_encode_xer, /* Can't expect it to be ASCII/UTF8 */ +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + OCTET_STRING_decode_oer, + OCTET_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + OCTET_STRING_decode_uper, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_encode_uper, + OCTET_STRING_decode_aper, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + OCTET_STRING_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_GraphicString = { + "GraphicString", + "GraphicString", + &asn_OP_GraphicString, + asn_DEF_GraphicString_tags, + sizeof(asn_DEF_GraphicString_tags) + / sizeof(asn_DEF_GraphicString_tags[0]) - 1, + asn_DEF_GraphicString_tags, + sizeof(asn_DEF_GraphicString_tags) + / sizeof(asn_DEF_GraphicString_tags[0]), + { 0, 0, asn_generic_unknown_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/e2sm/lib/GroupID.c b/e2sm/lib/GroupID.c new file mode 100644 index 0000000..8eaff0e --- /dev/null +++ b/e2sm/lib/GroupID.c @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "GroupID.h" + +static asn_per_constraints_t asn_PER_type_GroupID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_GroupID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct GroupID, choice.fiveGC), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_FiveQI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "fiveGC" + }, + { ATF_NOFLAGS, 0, offsetof(struct GroupID, choice.ePC), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_QCI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ePC" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_GroupID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* fiveGC */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ePC */ +}; +static asn_CHOICE_specifics_t asn_SPC_GroupID_specs_1 = { + sizeof(struct GroupID), + offsetof(struct GroupID, _asn_ctx), + offsetof(struct GroupID, present), + sizeof(((struct GroupID *)0)->present), + asn_MAP_GroupID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_GroupID = { + "GroupID", + "GroupID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_GroupID_constr_1, CHOICE_constraint }, + asn_MBR_GroupID_1, + 2, /* Elements count */ + &asn_SPC_GroupID_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/IA5String.c b/e2sm/lib/IA5String.c new file mode 100644 index 0000000..1aeebf4 --- /dev/null +++ b/e2sm/lib/IA5String.c @@ -0,0 +1,97 @@ +/*- + * Copyright (c) 2003 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* + * IA5String basic type description. + */ +static const ber_tlv_tag_t asn_DEF_IA5String_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (22 << 2)), /* [UNIVERSAL 22] IMPLICIT ...*/ + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) /* ... OCTET STRING */ +}; +static asn_per_constraints_t asn_DEF_IA5String_per_constraints = { + { APC_CONSTRAINED, 7, 7, 0, 0x7f }, /* Value */ + { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, /* Size */ + 0, 0 +}; +asn_TYPE_operation_t asn_OP_IA5String = { + OCTET_STRING_free, + OCTET_STRING_print_utf8, /* ASCII subset */ + OCTET_STRING_compare, + OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_utf8, + OCTET_STRING_encode_xer_utf8, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + OCTET_STRING_decode_oer, + OCTET_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + OCTET_STRING_decode_uper, + OCTET_STRING_encode_uper, + OCTET_STRING_decode_aper, + OCTET_STRING_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + OCTET_STRING_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_IA5String = { + "IA5String", + "IA5String", + &asn_OP_IA5String, + asn_DEF_IA5String_tags, + sizeof(asn_DEF_IA5String_tags) + / sizeof(asn_DEF_IA5String_tags[0]) - 1, + asn_DEF_IA5String_tags, + sizeof(asn_DEF_IA5String_tags) + / sizeof(asn_DEF_IA5String_tags[0]), + { 0, &asn_DEF_IA5String_per_constraints, IA5String_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +int +IA5String_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const IA5String_t *st = (const IA5String_t *)sptr; + + if(st && st->buf) { + uint8_t *buf = st->buf; + uint8_t *end = buf + st->size; + /* + * IA5String is generally equivalent to 7bit ASCII. + * ISO/ITU-T T.50, 1963. + */ + for(; buf < end; buf++) { + if(*buf > 0x7F) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value byte %ld out of range: " + "%d > 127 (%s:%d)", + td->name, + (long)((buf - st->buf) + 1), + *buf, + __FILE__, __LINE__); + return -1; + } + } + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + return 0; +} + diff --git a/e2sm/lib/ISO646String.c b/e2sm/lib/ISO646String.c new file mode 100644 index 0000000..f5fc69e --- /dev/null +++ b/e2sm/lib/ISO646String.c @@ -0,0 +1,62 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* + * ISO646String basic type description. + */ +static const ber_tlv_tag_t asn_DEF_ISO646String_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)), /* [UNIVERSAL 26] IMPLICIT ...*/ + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) /* ... OCTET STRING */ +}; +static asn_per_constraints_t asn_DEF_ISO646String_per_constraints = { + { APC_CONSTRAINED, 7, 7, 0x20, 0x7e }, /* Value */ + { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, /* Size */ + 0, 0 +}; +asn_TYPE_operation_t asn_OP_ISO646String = { + OCTET_STRING_free, + OCTET_STRING_print_utf8, /* ASCII subset */ + OCTET_STRING_compare, + OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_utf8, + OCTET_STRING_encode_xer_utf8, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + OCTET_STRING_decode_oer, + OCTET_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + OCTET_STRING_decode_uper, + OCTET_STRING_encode_uper, + OCTET_STRING_decode_aper, + OCTET_STRING_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + OCTET_STRING_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_ISO646String = { + "ISO646String", + "ISO646String", + &asn_OP_ISO646String, + asn_DEF_ISO646String_tags, + sizeof(asn_DEF_ISO646String_tags) + / sizeof(asn_DEF_ISO646String_tags[0]) - 1, + asn_DEF_ISO646String_tags, + sizeof(asn_DEF_ISO646String_tags) + / sizeof(asn_DEF_ISO646String_tags[0]), + { 0, &asn_DEF_ISO646String_per_constraints, ISO646String_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; diff --git a/e2sm/lib/IndexToRFSP.c b/e2sm/lib/IndexToRFSP.c new file mode 100644 index 0000000..36829da --- /dev/null +++ b/e2sm/lib/IndexToRFSP.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "IndexToRFSP.h" + +int +IndexToRFSP_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 256)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_IndexToRFSP_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 256 } /* (1..256,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_IndexToRFSP_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_IndexToRFSP = { + "IndexToRFSP", + "IndexToRFSP", + &asn_OP_NativeInteger, + asn_DEF_IndexToRFSP_tags_1, + sizeof(asn_DEF_IndexToRFSP_tags_1) + /sizeof(asn_DEF_IndexToRFSP_tags_1[0]), /* 1 */ + asn_DEF_IndexToRFSP_tags_1, /* Same as above */ + sizeof(asn_DEF_IndexToRFSP_tags_1) + /sizeof(asn_DEF_IndexToRFSP_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_IndexToRFSP_constr_1, IndexToRFSP_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/e2sm/lib/Interface-MessageID.c b/e2sm/lib/Interface-MessageID.c new file mode 100644 index 0000000..da967de --- /dev/null +++ b/e2sm/lib/Interface-MessageID.c @@ -0,0 +1,110 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "Interface-MessageID.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_messageType_constr_3 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_messageType_value2enum_3[] = { + { 0, 17, "initiatingMessage" }, + { 1, 17, "successfulOutcome" }, + { 2, 19, "unsuccessfulOutcome" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_messageType_enum2value_3[] = { + 0, /* initiatingMessage(0) */ + 1, /* successfulOutcome(1) */ + 2 /* unsuccessfulOutcome(2) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_messageType_specs_3 = { + asn_MAP_messageType_value2enum_3, /* "tag" => N; sorted by tag */ + asn_MAP_messageType_enum2value_3, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 4, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_messageType_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_messageType_3 = { + "messageType", + "messageType", + &asn_OP_NativeEnumerated, + asn_DEF_messageType_tags_3, + sizeof(asn_DEF_messageType_tags_3) + /sizeof(asn_DEF_messageType_tags_3[0]) - 1, /* 1 */ + asn_DEF_messageType_tags_3, /* Same as above */ + sizeof(asn_DEF_messageType_tags_3) + /sizeof(asn_DEF_messageType_tags_3[0]), /* 2 */ + { 0, &asn_PER_type_messageType_constr_3, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_messageType_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_Interface_MessageID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct Interface_MessageID, interfaceProcedureID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "interfaceProcedureID" + }, + { ATF_NOFLAGS, 0, offsetof(struct Interface_MessageID, messageType), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_messageType_3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "messageType" + }, +}; +static const ber_tlv_tag_t asn_DEF_Interface_MessageID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_Interface_MessageID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* interfaceProcedureID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* messageType */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_Interface_MessageID_specs_1 = { + sizeof(struct Interface_MessageID), + offsetof(struct Interface_MessageID, _asn_ctx), + asn_MAP_Interface_MessageID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_Interface_MessageID = { + "Interface-MessageID", + "Interface-MessageID", + &asn_OP_SEQUENCE, + asn_DEF_Interface_MessageID_tags_1, + sizeof(asn_DEF_Interface_MessageID_tags_1) + /sizeof(asn_DEF_Interface_MessageID_tags_1[0]), /* 1 */ + asn_DEF_Interface_MessageID_tags_1, /* Same as above */ + sizeof(asn_DEF_Interface_MessageID_tags_1) + /sizeof(asn_DEF_Interface_MessageID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_Interface_MessageID_1, + 2, /* Elements count */ + &asn_SPC_Interface_MessageID_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/InterfaceID-E1.c b/e2sm/lib/InterfaceID-E1.c new file mode 100644 index 0000000..a98f85b --- /dev/null +++ b/e2sm/lib/InterfaceID-E1.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "InterfaceID-E1.h" + +asn_TYPE_member_t asn_MBR_InterfaceID_E1_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct InterfaceID_E1, globalGNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalGNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "globalGNB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct InterfaceID_E1, gNB_CU_UP_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_UP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-UP-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_InterfaceID_E1_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_InterfaceID_E1_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* globalGNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* gNB-CU-UP-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_InterfaceID_E1_specs_1 = { + sizeof(struct InterfaceID_E1), + offsetof(struct InterfaceID_E1, _asn_ctx), + asn_MAP_InterfaceID_E1_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_InterfaceID_E1 = { + "InterfaceID-E1", + "InterfaceID-E1", + &asn_OP_SEQUENCE, + asn_DEF_InterfaceID_E1_tags_1, + sizeof(asn_DEF_InterfaceID_E1_tags_1) + /sizeof(asn_DEF_InterfaceID_E1_tags_1[0]), /* 1 */ + asn_DEF_InterfaceID_E1_tags_1, /* Same as above */ + sizeof(asn_DEF_InterfaceID_E1_tags_1) + /sizeof(asn_DEF_InterfaceID_E1_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_InterfaceID_E1_1, + 2, /* Elements count */ + &asn_SPC_InterfaceID_E1_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/InterfaceID-F1.c b/e2sm/lib/InterfaceID-F1.c new file mode 100644 index 0000000..4900cb7 --- /dev/null +++ b/e2sm/lib/InterfaceID-F1.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "InterfaceID-F1.h" + +asn_TYPE_member_t asn_MBR_InterfaceID_F1_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct InterfaceID_F1, globalGNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalGNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "globalGNB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct InterfaceID_F1, gNB_DU_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_DU_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-DU-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_InterfaceID_F1_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_InterfaceID_F1_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* globalGNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* gNB-DU-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_InterfaceID_F1_specs_1 = { + sizeof(struct InterfaceID_F1), + offsetof(struct InterfaceID_F1, _asn_ctx), + asn_MAP_InterfaceID_F1_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_InterfaceID_F1 = { + "InterfaceID-F1", + "InterfaceID-F1", + &asn_OP_SEQUENCE, + asn_DEF_InterfaceID_F1_tags_1, + sizeof(asn_DEF_InterfaceID_F1_tags_1) + /sizeof(asn_DEF_InterfaceID_F1_tags_1[0]), /* 1 */ + asn_DEF_InterfaceID_F1_tags_1, /* Same as above */ + sizeof(asn_DEF_InterfaceID_F1_tags_1) + /sizeof(asn_DEF_InterfaceID_F1_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_InterfaceID_F1_1, + 2, /* Elements count */ + &asn_SPC_InterfaceID_F1_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/InterfaceID-NG.c b/e2sm/lib/InterfaceID-NG.c new file mode 100644 index 0000000..2083c0f --- /dev/null +++ b/e2sm/lib/InterfaceID-NG.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "InterfaceID-NG.h" + +asn_TYPE_member_t asn_MBR_InterfaceID_NG_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct InterfaceID_NG, guami), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GUAMI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "guami" + }, +}; +static const ber_tlv_tag_t asn_DEF_InterfaceID_NG_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_InterfaceID_NG_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* guami */ +}; +asn_SEQUENCE_specifics_t asn_SPC_InterfaceID_NG_specs_1 = { + sizeof(struct InterfaceID_NG), + offsetof(struct InterfaceID_NG, _asn_ctx), + asn_MAP_InterfaceID_NG_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_InterfaceID_NG = { + "InterfaceID-NG", + "InterfaceID-NG", + &asn_OP_SEQUENCE, + asn_DEF_InterfaceID_NG_tags_1, + sizeof(asn_DEF_InterfaceID_NG_tags_1) + /sizeof(asn_DEF_InterfaceID_NG_tags_1[0]), /* 1 */ + asn_DEF_InterfaceID_NG_tags_1, /* Same as above */ + sizeof(asn_DEF_InterfaceID_NG_tags_1) + /sizeof(asn_DEF_InterfaceID_NG_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_InterfaceID_NG_1, + 1, /* Elements count */ + &asn_SPC_InterfaceID_NG_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/InterfaceID-S1.c b/e2sm/lib/InterfaceID-S1.c new file mode 100644 index 0000000..e8e728f --- /dev/null +++ b/e2sm/lib/InterfaceID-S1.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "InterfaceID-S1.h" + +asn_TYPE_member_t asn_MBR_InterfaceID_S1_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct InterfaceID_S1, gUMMEI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GUMMEI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gUMMEI" + }, +}; +static const ber_tlv_tag_t asn_DEF_InterfaceID_S1_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_InterfaceID_S1_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* gUMMEI */ +}; +asn_SEQUENCE_specifics_t asn_SPC_InterfaceID_S1_specs_1 = { + sizeof(struct InterfaceID_S1), + offsetof(struct InterfaceID_S1, _asn_ctx), + asn_MAP_InterfaceID_S1_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_InterfaceID_S1 = { + "InterfaceID-S1", + "InterfaceID-S1", + &asn_OP_SEQUENCE, + asn_DEF_InterfaceID_S1_tags_1, + sizeof(asn_DEF_InterfaceID_S1_tags_1) + /sizeof(asn_DEF_InterfaceID_S1_tags_1[0]), /* 1 */ + asn_DEF_InterfaceID_S1_tags_1, /* Same as above */ + sizeof(asn_DEF_InterfaceID_S1_tags_1) + /sizeof(asn_DEF_InterfaceID_S1_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_InterfaceID_S1_1, + 1, /* Elements count */ + &asn_SPC_InterfaceID_S1_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/InterfaceID-W1.c b/e2sm/lib/InterfaceID-W1.c new file mode 100644 index 0000000..37033aa --- /dev/null +++ b/e2sm/lib/InterfaceID-W1.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "InterfaceID-W1.h" + +asn_TYPE_member_t asn_MBR_InterfaceID_W1_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct InterfaceID_W1, global_ng_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalNgENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-ng-eNB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct InterfaceID_W1, ng_eNB_DU_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NGENB_DU_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ng-eNB-DU-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_InterfaceID_W1_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_InterfaceID_W1_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* global-ng-eNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ng-eNB-DU-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_InterfaceID_W1_specs_1 = { + sizeof(struct InterfaceID_W1), + offsetof(struct InterfaceID_W1, _asn_ctx), + asn_MAP_InterfaceID_W1_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_InterfaceID_W1 = { + "InterfaceID-W1", + "InterfaceID-W1", + &asn_OP_SEQUENCE, + asn_DEF_InterfaceID_W1_tags_1, + sizeof(asn_DEF_InterfaceID_W1_tags_1) + /sizeof(asn_DEF_InterfaceID_W1_tags_1[0]), /* 1 */ + asn_DEF_InterfaceID_W1_tags_1, /* Same as above */ + sizeof(asn_DEF_InterfaceID_W1_tags_1) + /sizeof(asn_DEF_InterfaceID_W1_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_InterfaceID_W1_1, + 2, /* Elements count */ + &asn_SPC_InterfaceID_W1_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/InterfaceID-X2.c b/e2sm/lib/InterfaceID-X2.c new file mode 100644 index 0000000..d191871 --- /dev/null +++ b/e2sm/lib/InterfaceID-X2.c @@ -0,0 +1,106 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "InterfaceID-X2.h" + +#include "GlobalENB-ID.h" +#include "GlobalenGNB-ID.h" +static asn_per_constraints_t asn_PER_type_nodeType_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_nodeType_2[] = { + { ATF_POINTER, 0, offsetof(struct InterfaceID_X2__nodeType, choice.global_eNB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-eNB-ID" + }, + { ATF_POINTER, 0, offsetof(struct InterfaceID_X2__nodeType, choice.global_en_gNB_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalenGNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-en-gNB-ID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_nodeType_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* global-eNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* global-en-gNB-ID */ +}; +static asn_CHOICE_specifics_t asn_SPC_nodeType_specs_2 = { + sizeof(struct InterfaceID_X2__nodeType), + offsetof(struct InterfaceID_X2__nodeType, _asn_ctx), + offsetof(struct InterfaceID_X2__nodeType, present), + sizeof(((struct InterfaceID_X2__nodeType *)0)->present), + asn_MAP_nodeType_tag2el_2, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nodeType_2 = { + "nodeType", + "nodeType", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_nodeType_constr_2, CHOICE_constraint }, + asn_MBR_nodeType_2, + 2, /* Elements count */ + &asn_SPC_nodeType_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_InterfaceID_X2_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct InterfaceID_X2, nodeType), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_nodeType_2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nodeType" + }, +}; +static const ber_tlv_tag_t asn_DEF_InterfaceID_X2_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_InterfaceID_X2_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* nodeType */ +}; +asn_SEQUENCE_specifics_t asn_SPC_InterfaceID_X2_specs_1 = { + sizeof(struct InterfaceID_X2), + offsetof(struct InterfaceID_X2, _asn_ctx), + asn_MAP_InterfaceID_X2_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_InterfaceID_X2 = { + "InterfaceID-X2", + "InterfaceID-X2", + &asn_OP_SEQUENCE, + asn_DEF_InterfaceID_X2_tags_1, + sizeof(asn_DEF_InterfaceID_X2_tags_1) + /sizeof(asn_DEF_InterfaceID_X2_tags_1[0]), /* 1 */ + asn_DEF_InterfaceID_X2_tags_1, /* Same as above */ + sizeof(asn_DEF_InterfaceID_X2_tags_1) + /sizeof(asn_DEF_InterfaceID_X2_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_InterfaceID_X2_1, + 1, /* Elements count */ + &asn_SPC_InterfaceID_X2_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/InterfaceID-Xn.c b/e2sm/lib/InterfaceID-Xn.c new file mode 100644 index 0000000..a78a67e --- /dev/null +++ b/e2sm/lib/InterfaceID-Xn.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "InterfaceID-Xn.h" + +asn_TYPE_member_t asn_MBR_InterfaceID_Xn_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct InterfaceID_Xn, global_NG_RAN_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_GlobalNGRANNodeID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "global-NG-RAN-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_InterfaceID_Xn_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_InterfaceID_Xn_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* global-NG-RAN-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_InterfaceID_Xn_specs_1 = { + sizeof(struct InterfaceID_Xn), + offsetof(struct InterfaceID_Xn, _asn_ctx), + asn_MAP_InterfaceID_Xn_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_InterfaceID_Xn = { + "InterfaceID-Xn", + "InterfaceID-Xn", + &asn_OP_SEQUENCE, + asn_DEF_InterfaceID_Xn_tags_1, + sizeof(asn_DEF_InterfaceID_Xn_tags_1) + /sizeof(asn_DEF_InterfaceID_Xn_tags_1[0]), /* 1 */ + asn_DEF_InterfaceID_Xn_tags_1, /* Same as above */ + sizeof(asn_DEF_InterfaceID_Xn_tags_1) + /sizeof(asn_DEF_InterfaceID_Xn_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_InterfaceID_Xn_1, + 1, /* Elements count */ + &asn_SPC_InterfaceID_Xn_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/InterfaceIdentifier.c b/e2sm/lib/InterfaceIdentifier.c new file mode 100644 index 0000000..bc596a5 --- /dev/null +++ b/e2sm/lib/InterfaceIdentifier.c @@ -0,0 +1,119 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "InterfaceIdentifier.h" + +#include "InterfaceID-NG.h" +#include "InterfaceID-Xn.h" +#include "InterfaceID-F1.h" +#include "InterfaceID-E1.h" +#include "InterfaceID-S1.h" +#include "InterfaceID-X2.h" +#include "InterfaceID-W1.h" +static asn_per_constraints_t asn_PER_type_InterfaceIdentifier_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 6 } /* (0..6,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_InterfaceIdentifier_1[] = { + { ATF_POINTER, 0, offsetof(struct InterfaceIdentifier, choice.nG), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_InterfaceID_NG, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nG" + }, + { ATF_POINTER, 0, offsetof(struct InterfaceIdentifier, choice.xN), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_InterfaceID_Xn, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "xN" + }, + { ATF_POINTER, 0, offsetof(struct InterfaceIdentifier, choice.f1), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_InterfaceID_F1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "f1" + }, + { ATF_POINTER, 0, offsetof(struct InterfaceIdentifier, choice.e1), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_InterfaceID_E1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "e1" + }, + { ATF_POINTER, 0, offsetof(struct InterfaceIdentifier, choice.s1), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_InterfaceID_S1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "s1" + }, + { ATF_POINTER, 0, offsetof(struct InterfaceIdentifier, choice.x2), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_InterfaceID_X2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "x2" + }, + { ATF_POINTER, 0, offsetof(struct InterfaceIdentifier, choice.w1), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_InterfaceID_W1, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "w1" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_InterfaceIdentifier_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nG */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* xN */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* f1 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* e1 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* s1 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* x2 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* w1 */ +}; +static asn_CHOICE_specifics_t asn_SPC_InterfaceIdentifier_specs_1 = { + sizeof(struct InterfaceIdentifier), + offsetof(struct InterfaceIdentifier, _asn_ctx), + offsetof(struct InterfaceIdentifier, present), + sizeof(((struct InterfaceIdentifier *)0)->present), + asn_MAP_InterfaceIdentifier_tag2el_1, + 7, /* Count of tags in the map */ + 0, 0, + 7 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_InterfaceIdentifier = { + "InterfaceIdentifier", + "InterfaceIdentifier", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_InterfaceIdentifier_constr_1, CHOICE_constraint }, + asn_MBR_InterfaceIdentifier_1, + 7, /* Elements count */ + &asn_SPC_InterfaceIdentifier_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/InterfaceType.c b/e2sm/lib/InterfaceType.c new file mode 100644 index 0000000..17f3635 --- /dev/null +++ b/e2sm/lib/InterfaceType.c @@ -0,0 +1,65 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "InterfaceType.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_InterfaceType_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 6 } /* (0..6,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_InterfaceType_value2enum_1[] = { + { 0, 2, "nG" }, + { 1, 2, "xn" }, + { 2, 2, "f1" }, + { 3, 2, "e1" }, + { 4, 2, "s1" }, + { 5, 2, "x2" }, + { 6, 2, "w1" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_InterfaceType_enum2value_1[] = { + 3, /* e1(3) */ + 2, /* f1(2) */ + 0, /* nG(0) */ + 4, /* s1(4) */ + 6, /* w1(6) */ + 5, /* x2(5) */ + 1 /* xn(1) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_InterfaceType_specs_1 = { + asn_MAP_InterfaceType_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_InterfaceType_enum2value_1, /* N => "tag"; sorted by N */ + 7, /* Number of elements in the maps */ + 8, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_InterfaceType_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_InterfaceType = { + "InterfaceType", + "InterfaceType", + &asn_OP_NativeEnumerated, + asn_DEF_InterfaceType_tags_1, + sizeof(asn_DEF_InterfaceType_tags_1) + /sizeof(asn_DEF_InterfaceType_tags_1[0]), /* 1 */ + asn_DEF_InterfaceType_tags_1, /* Same as above */ + sizeof(asn_DEF_InterfaceType_tags_1) + /sizeof(asn_DEF_InterfaceType_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_InterfaceType_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_InterfaceType_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/LabelInfoItem.c b/e2sm/lib/LabelInfoItem.c new file mode 100644 index 0000000..dafa081 --- /dev/null +++ b/e2sm/lib/LabelInfoItem.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "LabelInfoItem.h" + +asn_TYPE_member_t asn_MBR_LabelInfoItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct LabelInfoItem, measLabel), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasurementLabel, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "measLabel" + }, +}; +static const ber_tlv_tag_t asn_DEF_LabelInfoItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_LabelInfoItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* measLabel */ +}; +asn_SEQUENCE_specifics_t asn_SPC_LabelInfoItem_specs_1 = { + sizeof(struct LabelInfoItem), + offsetof(struct LabelInfoItem, _asn_ctx), + asn_MAP_LabelInfoItem_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_LabelInfoItem = { + "LabelInfoItem", + "LabelInfoItem", + &asn_OP_SEQUENCE, + asn_DEF_LabelInfoItem_tags_1, + sizeof(asn_DEF_LabelInfoItem_tags_1) + /sizeof(asn_DEF_LabelInfoItem_tags_1[0]), /* 1 */ + asn_DEF_LabelInfoItem_tags_1, /* Same as above */ + sizeof(asn_DEF_LabelInfoItem_tags_1) + /sizeof(asn_DEF_LabelInfoItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_LabelInfoItem_1, + 1, /* Elements count */ + &asn_SPC_LabelInfoItem_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/LabelInfoList.c b/e2sm/lib/LabelInfoList.c new file mode 100644 index 0000000..9d7e620 --- /dev/null +++ b/e2sm/lib/LabelInfoList.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "LabelInfoList.h" + +#include "LabelInfoItem.h" +asn_per_constraints_t asn_PER_type_LabelInfoList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 31, -1, 1, 2147483647 } /* (SIZE(1..2147483647)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_LabelInfoList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_LabelInfoItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_LabelInfoList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_LabelInfoList_specs_1 = { + sizeof(struct LabelInfoList), + offsetof(struct LabelInfoList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_LabelInfoList = { + "LabelInfoList", + "LabelInfoList", + &asn_OP_SEQUENCE_OF, + asn_DEF_LabelInfoList_tags_1, + sizeof(asn_DEF_LabelInfoList_tags_1) + /sizeof(asn_DEF_LabelInfoList_tags_1[0]), /* 1 */ + asn_DEF_LabelInfoList_tags_1, /* Same as above */ + sizeof(asn_DEF_LabelInfoList_tags_1) + /sizeof(asn_DEF_LabelInfoList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_LabelInfoList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_LabelInfoList_1, + 1, /* Single element */ + &asn_SPC_LabelInfoList_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/MME-Code.c b/e2sm/lib/MME-Code.c new file mode 100644 index 0000000..d110616 --- /dev/null +++ b/e2sm/lib/MME-Code.c @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "MME-Code.h" + +int +MME_Code_constraint(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 == 1)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_MME_Code_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 1, 1 } /* (SIZE(1..1)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_MME_Code_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_MME_Code = { + "MME-Code", + "MME-Code", + &asn_OP_OCTET_STRING, + asn_DEF_MME_Code_tags_1, + sizeof(asn_DEF_MME_Code_tags_1) + /sizeof(asn_DEF_MME_Code_tags_1[0]), /* 1 */ + asn_DEF_MME_Code_tags_1, /* Same as above */ + sizeof(asn_DEF_MME_Code_tags_1) + /sizeof(asn_DEF_MME_Code_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_MME_Code_constr_1, MME_Code_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/e2sm/lib/MME-Group-ID.c b/e2sm/lib/MME-Group-ID.c new file mode 100644 index 0000000..1136961 --- /dev/null +++ b/e2sm/lib/MME-Group-ID.c @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "MME-Group-ID.h" + +int +MME_Group_ID_constraint(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 == 2)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_MME_Group_ID_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 2, 2 } /* (SIZE(2..2)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_MME_Group_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_MME_Group_ID = { + "MME-Group-ID", + "MME-Group-ID", + &asn_OP_OCTET_STRING, + asn_DEF_MME_Group_ID_tags_1, + sizeof(asn_DEF_MME_Group_ID_tags_1) + /sizeof(asn_DEF_MME_Group_ID_tags_1[0]), /* 1 */ + asn_DEF_MME_Group_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_MME_Group_ID_tags_1) + /sizeof(asn_DEF_MME_Group_ID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_MME_Group_ID_constr_1, MME_Group_ID_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/e2sm/lib/MME-UE-S1AP-ID.c b/e2sm/lib/MME-UE-S1AP-ID.c new file mode 100644 index 0000000..7677024 --- /dev/null +++ b/e2sm/lib/MME-UE-S1AP-ID.c @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "MME-UE-S1AP-ID.h" + +int +MME_UE_S1AP_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + /* Constraint check succeeded */ + return 0; +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_MME_UE_S1AP_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 32, -1, 0, 4294967295 } /* (0..4294967295) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +const asn_INTEGER_specifics_t asn_SPC_MME_UE_S1AP_ID_specs_1 = { + 0, 0, 0, 0, 0, + 0, /* Native long size */ + 1 /* Unsigned representation */ +}; +static const ber_tlv_tag_t asn_DEF_MME_UE_S1AP_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_MME_UE_S1AP_ID = { + "MME-UE-S1AP-ID", + "MME-UE-S1AP-ID", + &asn_OP_NativeInteger, + asn_DEF_MME_UE_S1AP_ID_tags_1, + sizeof(asn_DEF_MME_UE_S1AP_ID_tags_1) + /sizeof(asn_DEF_MME_UE_S1AP_ID_tags_1[0]), /* 1 */ + asn_DEF_MME_UE_S1AP_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_MME_UE_S1AP_ID_tags_1) + /sizeof(asn_DEF_MME_UE_S1AP_ID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_MME_UE_S1AP_ID_constr_1, MME_UE_S1AP_ID_constraint }, + 0, 0, /* No members */ + &asn_SPC_MME_UE_S1AP_ID_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/MatchingCondItem.c b/e2sm/lib/MatchingCondItem.c new file mode 100644 index 0000000..89f4378 --- /dev/null +++ b/e2sm/lib/MatchingCondItem.c @@ -0,0 +1,64 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "MatchingCondItem.h" + +#include "MeasurementLabel.h" +#include "TestCondInfo.h" +asn_per_constraints_t asn_PER_type_MatchingCondItem_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_MatchingCondItem_1[] = { + { ATF_POINTER, 0, offsetof(struct MatchingCondItem, choice.measLabel), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasurementLabel, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "measLabel" + }, + { ATF_POINTER, 0, offsetof(struct MatchingCondItem, choice.testCondInfo), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TestCondInfo, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "testCondInfo" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_MatchingCondItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* measLabel */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* testCondInfo */ +}; +asn_CHOICE_specifics_t asn_SPC_MatchingCondItem_specs_1 = { + sizeof(struct MatchingCondItem), + offsetof(struct MatchingCondItem, _asn_ctx), + offsetof(struct MatchingCondItem, present), + sizeof(((struct MatchingCondItem *)0)->present), + asn_MAP_MatchingCondItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_MatchingCondItem = { + "MatchingCondItem", + "MatchingCondItem", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_MatchingCondItem_constr_1, CHOICE_constraint }, + asn_MBR_MatchingCondItem_1, + 2, /* Elements count */ + &asn_SPC_MatchingCondItem_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/MatchingCondList.c b/e2sm/lib/MatchingCondList.c new file mode 100644 index 0000000..7ccd78f --- /dev/null +++ b/e2sm/lib/MatchingCondList.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "MatchingCondList.h" + +#include "MatchingCondItem.h" +asn_per_constraints_t asn_PER_type_MatchingCondList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 15, 15, 1, 32768 } /* (SIZE(1..32768)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_MatchingCondList_1[] = { + { ATF_POINTER, 0, 0, + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_MatchingCondItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_MatchingCondList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_MatchingCondList_specs_1 = { + sizeof(struct MatchingCondList), + offsetof(struct MatchingCondList, _asn_ctx), + 2, /* XER encoding is XMLValueList */ +}; +asn_TYPE_descriptor_t asn_DEF_MatchingCondList = { + "MatchingCondList", + "MatchingCondList", + &asn_OP_SEQUENCE_OF, + asn_DEF_MatchingCondList_tags_1, + sizeof(asn_DEF_MatchingCondList_tags_1) + /sizeof(asn_DEF_MatchingCondList_tags_1[0]), /* 1 */ + asn_DEF_MatchingCondList_tags_1, /* Same as above */ + sizeof(asn_DEF_MatchingCondList_tags_1) + /sizeof(asn_DEF_MatchingCondList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_MatchingCondList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_MatchingCondList_1, + 1, /* Single element */ + &asn_SPC_MatchingCondList_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/MatchingUEidItem.c b/e2sm/lib/MatchingUEidItem.c new file mode 100644 index 0000000..361848c --- /dev/null +++ b/e2sm/lib/MatchingUEidItem.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "MatchingUEidItem.h" + +asn_TYPE_member_t asn_MBR_MatchingUEidItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MatchingUEidItem, ueID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_UEID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ueID" + }, +}; +static const ber_tlv_tag_t asn_DEF_MatchingUEidItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_MatchingUEidItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ueID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_MatchingUEidItem_specs_1 = { + sizeof(struct MatchingUEidItem), + offsetof(struct MatchingUEidItem, _asn_ctx), + asn_MAP_MatchingUEidItem_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_MatchingUEidItem = { + "MatchingUEidItem", + "MatchingUEidItem", + &asn_OP_SEQUENCE, + asn_DEF_MatchingUEidItem_tags_1, + sizeof(asn_DEF_MatchingUEidItem_tags_1) + /sizeof(asn_DEF_MatchingUEidItem_tags_1[0]), /* 1 */ + asn_DEF_MatchingUEidItem_tags_1, /* Same as above */ + sizeof(asn_DEF_MatchingUEidItem_tags_1) + /sizeof(asn_DEF_MatchingUEidItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_MatchingUEidItem_1, + 1, /* Elements count */ + &asn_SPC_MatchingUEidItem_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/MatchingUEidList.c b/e2sm/lib/MatchingUEidList.c new file mode 100644 index 0000000..d01eaa2 --- /dev/null +++ b/e2sm/lib/MatchingUEidList.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "MatchingUEidList.h" + +#include "MatchingUEidItem.h" +asn_per_constraints_t asn_PER_type_MatchingUEidList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_MatchingUEidList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MatchingUEidItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_MatchingUEidList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_MatchingUEidList_specs_1 = { + sizeof(struct MatchingUEidList), + offsetof(struct MatchingUEidList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_MatchingUEidList = { + "MatchingUEidList", + "MatchingUEidList", + &asn_OP_SEQUENCE_OF, + asn_DEF_MatchingUEidList_tags_1, + sizeof(asn_DEF_MatchingUEidList_tags_1) + /sizeof(asn_DEF_MatchingUEidList_tags_1[0]), /* 1 */ + asn_DEF_MatchingUEidList_tags_1, /* Same as above */ + sizeof(asn_DEF_MatchingUEidList_tags_1) + /sizeof(asn_DEF_MatchingUEidList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_MatchingUEidList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_MatchingUEidList_1, + 1, /* Single element */ + &asn_SPC_MatchingUEidList_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/MeasurementCondItem.c b/e2sm/lib/MeasurementCondItem.c new file mode 100644 index 0000000..3d63e9d --- /dev/null +++ b/e2sm/lib/MeasurementCondItem.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "MeasurementCondItem.h" + +asn_TYPE_member_t asn_MBR_MeasurementCondItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasurementCondItem, measType), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_MeasurementType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "measType" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasurementCondItem, matchingCond), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MatchingCondList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "matchingCond" + }, +}; +static const ber_tlv_tag_t asn_DEF_MeasurementCondItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_MeasurementCondItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* measType */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* matchingCond */ +}; +asn_SEQUENCE_specifics_t asn_SPC_MeasurementCondItem_specs_1 = { + sizeof(struct MeasurementCondItem), + offsetof(struct MeasurementCondItem, _asn_ctx), + asn_MAP_MeasurementCondItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasurementCondItem = { + "MeasurementCondItem", + "MeasurementCondItem", + &asn_OP_SEQUENCE, + asn_DEF_MeasurementCondItem_tags_1, + sizeof(asn_DEF_MeasurementCondItem_tags_1) + /sizeof(asn_DEF_MeasurementCondItem_tags_1[0]), /* 1 */ + asn_DEF_MeasurementCondItem_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasurementCondItem_tags_1) + /sizeof(asn_DEF_MeasurementCondItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_MeasurementCondItem_1, + 2, /* Elements count */ + &asn_SPC_MeasurementCondItem_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/MeasurementCondList.c b/e2sm/lib/MeasurementCondList.c new file mode 100644 index 0000000..981bc8f --- /dev/null +++ b/e2sm/lib/MeasurementCondList.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "MeasurementCondList.h" + +#include "MeasurementCondItem.h" +asn_per_constraints_t asn_PER_type_MeasurementCondList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_MeasurementCondList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MeasurementCondItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_MeasurementCondList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_MeasurementCondList_specs_1 = { + sizeof(struct MeasurementCondList), + offsetof(struct MeasurementCondList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasurementCondList = { + "MeasurementCondList", + "MeasurementCondList", + &asn_OP_SEQUENCE_OF, + asn_DEF_MeasurementCondList_tags_1, + sizeof(asn_DEF_MeasurementCondList_tags_1) + /sizeof(asn_DEF_MeasurementCondList_tags_1[0]), /* 1 */ + asn_DEF_MeasurementCondList_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasurementCondList_tags_1) + /sizeof(asn_DEF_MeasurementCondList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_MeasurementCondList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_MeasurementCondList_1, + 1, /* Single element */ + &asn_SPC_MeasurementCondList_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/MeasurementCondUEidItem.c b/e2sm/lib/MeasurementCondUEidItem.c new file mode 100644 index 0000000..e3a6fca --- /dev/null +++ b/e2sm/lib/MeasurementCondUEidItem.c @@ -0,0 +1,73 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "MeasurementCondUEidItem.h" + +#include "MatchingUEidList.h" +asn_TYPE_member_t asn_MBR_MeasurementCondUEidItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasurementCondUEidItem, measType), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_MeasurementType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "measType" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasurementCondUEidItem, matchingCond), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MatchingCondList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "matchingCond" + }, + { ATF_POINTER, 1, offsetof(struct MeasurementCondUEidItem, matchingUEidList), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MatchingUEidList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "matchingUEidList" + }, +}; +static const int asn_MAP_MeasurementCondUEidItem_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_MeasurementCondUEidItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_MeasurementCondUEidItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* measType */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* matchingCond */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* matchingUEidList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_MeasurementCondUEidItem_specs_1 = { + sizeof(struct MeasurementCondUEidItem), + offsetof(struct MeasurementCondUEidItem, _asn_ctx), + asn_MAP_MeasurementCondUEidItem_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_MeasurementCondUEidItem_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasurementCondUEidItem = { + "MeasurementCondUEidItem", + "MeasurementCondUEidItem", + &asn_OP_SEQUENCE, + asn_DEF_MeasurementCondUEidItem_tags_1, + sizeof(asn_DEF_MeasurementCondUEidItem_tags_1) + /sizeof(asn_DEF_MeasurementCondUEidItem_tags_1[0]), /* 1 */ + asn_DEF_MeasurementCondUEidItem_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasurementCondUEidItem_tags_1) + /sizeof(asn_DEF_MeasurementCondUEidItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_MeasurementCondUEidItem_1, + 3, /* Elements count */ + &asn_SPC_MeasurementCondUEidItem_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/MeasurementCondUEidList.c b/e2sm/lib/MeasurementCondUEidList.c new file mode 100644 index 0000000..8f9c71c --- /dev/null +++ b/e2sm/lib/MeasurementCondUEidList.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "MeasurementCondUEidList.h" + +#include "MeasurementCondUEidItem.h" +asn_per_constraints_t asn_PER_type_MeasurementCondUEidList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_MeasurementCondUEidList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MeasurementCondUEidItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_MeasurementCondUEidList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_MeasurementCondUEidList_specs_1 = { + sizeof(struct MeasurementCondUEidList), + offsetof(struct MeasurementCondUEidList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasurementCondUEidList = { + "MeasurementCondUEidList", + "MeasurementCondUEidList", + &asn_OP_SEQUENCE_OF, + asn_DEF_MeasurementCondUEidList_tags_1, + sizeof(asn_DEF_MeasurementCondUEidList_tags_1) + /sizeof(asn_DEF_MeasurementCondUEidList_tags_1[0]), /* 1 */ + asn_DEF_MeasurementCondUEidList_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasurementCondUEidList_tags_1) + /sizeof(asn_DEF_MeasurementCondUEidList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_MeasurementCondUEidList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_MeasurementCondUEidList_1, + 1, /* Single element */ + &asn_SPC_MeasurementCondUEidList_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/MeasurementData.c b/e2sm/lib/MeasurementData.c new file mode 100644 index 0000000..0a6cb94 --- /dev/null +++ b/e2sm/lib/MeasurementData.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "MeasurementData.h" + +#include "MeasurementDataItem.h" +asn_per_constraints_t asn_PER_type_MeasurementData_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_MeasurementData_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MeasurementDataItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_MeasurementData_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_MeasurementData_specs_1 = { + sizeof(struct MeasurementData), + offsetof(struct MeasurementData, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasurementData = { + "MeasurementData", + "MeasurementData", + &asn_OP_SEQUENCE_OF, + asn_DEF_MeasurementData_tags_1, + sizeof(asn_DEF_MeasurementData_tags_1) + /sizeof(asn_DEF_MeasurementData_tags_1[0]), /* 1 */ + asn_DEF_MeasurementData_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasurementData_tags_1) + /sizeof(asn_DEF_MeasurementData_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_MeasurementData_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_MeasurementData_1, + 1, /* Single element */ + &asn_SPC_MeasurementData_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/MeasurementDataItem.c b/e2sm/lib/MeasurementDataItem.c new file mode 100644 index 0000000..4c3ad22 --- /dev/null +++ b/e2sm/lib/MeasurementDataItem.c @@ -0,0 +1,108 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "MeasurementDataItem.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_incompleteFlag_constr_3 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 const asn_INTEGER_enum_map_t asn_MAP_incompleteFlag_value2enum_3[] = { + { 0, 4, "true" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_incompleteFlag_enum2value_3[] = { + 0 /* true(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_incompleteFlag_specs_3 = { + asn_MAP_incompleteFlag_value2enum_3, /* "tag" => N; sorted by tag */ + asn_MAP_incompleteFlag_enum2value_3, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_incompleteFlag_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_incompleteFlag_3 = { + "incompleteFlag", + "incompleteFlag", + &asn_OP_NativeEnumerated, + asn_DEF_incompleteFlag_tags_3, + sizeof(asn_DEF_incompleteFlag_tags_3) + /sizeof(asn_DEF_incompleteFlag_tags_3[0]) - 1, /* 1 */ + asn_DEF_incompleteFlag_tags_3, /* Same as above */ + sizeof(asn_DEF_incompleteFlag_tags_3) + /sizeof(asn_DEF_incompleteFlag_tags_3[0]), /* 2 */ + { 0, &asn_PER_type_incompleteFlag_constr_3, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_incompleteFlag_specs_3 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_MeasurementDataItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasurementDataItem, measRecord), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasurementRecord, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "measRecord" + }, + { ATF_POINTER, 1, offsetof(struct MeasurementDataItem, incompleteFlag), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_incompleteFlag_3, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "incompleteFlag" + }, +}; +static const int asn_MAP_MeasurementDataItem_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_MeasurementDataItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_MeasurementDataItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* measRecord */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* incompleteFlag */ +}; +asn_SEQUENCE_specifics_t asn_SPC_MeasurementDataItem_specs_1 = { + sizeof(struct MeasurementDataItem), + offsetof(struct MeasurementDataItem, _asn_ctx), + asn_MAP_MeasurementDataItem_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_MeasurementDataItem_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasurementDataItem = { + "MeasurementDataItem", + "MeasurementDataItem", + &asn_OP_SEQUENCE, + asn_DEF_MeasurementDataItem_tags_1, + sizeof(asn_DEF_MeasurementDataItem_tags_1) + /sizeof(asn_DEF_MeasurementDataItem_tags_1[0]), /* 1 */ + asn_DEF_MeasurementDataItem_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasurementDataItem_tags_1) + /sizeof(asn_DEF_MeasurementDataItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_MeasurementDataItem_1, + 2, /* Elements count */ + &asn_SPC_MeasurementDataItem_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/MeasurementInfo-Action-Item.c b/e2sm/lib/MeasurementInfo-Action-Item.c new file mode 100644 index 0000000..76f69bd --- /dev/null +++ b/e2sm/lib/MeasurementInfo-Action-Item.c @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "MeasurementInfo-Action-Item.h" + +asn_TYPE_member_t asn_MBR_MeasurementInfo_Action_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasurementInfo_Action_Item, measName), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasurementTypeName, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "measName" + }, + { ATF_POINTER, 1, offsetof(struct MeasurementInfo_Action_Item, measID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasurementTypeID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "measID" + }, +}; +static const int asn_MAP_MeasurementInfo_Action_Item_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_MeasurementInfo_Action_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_MeasurementInfo_Action_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* measName */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* measID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_MeasurementInfo_Action_Item_specs_1 = { + sizeof(struct MeasurementInfo_Action_Item), + offsetof(struct MeasurementInfo_Action_Item, _asn_ctx), + asn_MAP_MeasurementInfo_Action_Item_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_MeasurementInfo_Action_Item_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasurementInfo_Action_Item = { + "MeasurementInfo-Action-Item", + "MeasurementInfo-Action-Item", + &asn_OP_SEQUENCE, + asn_DEF_MeasurementInfo_Action_Item_tags_1, + sizeof(asn_DEF_MeasurementInfo_Action_Item_tags_1) + /sizeof(asn_DEF_MeasurementInfo_Action_Item_tags_1[0]), /* 1 */ + asn_DEF_MeasurementInfo_Action_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasurementInfo_Action_Item_tags_1) + /sizeof(asn_DEF_MeasurementInfo_Action_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_MeasurementInfo_Action_Item_1, + 2, /* Elements count */ + &asn_SPC_MeasurementInfo_Action_Item_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/MeasurementInfo-Action-List.c b/e2sm/lib/MeasurementInfo-Action-List.c new file mode 100644 index 0000000..19eb2cb --- /dev/null +++ b/e2sm/lib/MeasurementInfo-Action-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "MeasurementInfo-Action-List.h" + +#include "MeasurementInfo-Action-Item.h" +asn_per_constraints_t asn_PER_type_MeasurementInfo_Action_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_MeasurementInfo_Action_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MeasurementInfo_Action_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_MeasurementInfo_Action_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_MeasurementInfo_Action_List_specs_1 = { + sizeof(struct MeasurementInfo_Action_List), + offsetof(struct MeasurementInfo_Action_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasurementInfo_Action_List = { + "MeasurementInfo-Action-List", + "MeasurementInfo-Action-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_MeasurementInfo_Action_List_tags_1, + sizeof(asn_DEF_MeasurementInfo_Action_List_tags_1) + /sizeof(asn_DEF_MeasurementInfo_Action_List_tags_1[0]), /* 1 */ + asn_DEF_MeasurementInfo_Action_List_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasurementInfo_Action_List_tags_1) + /sizeof(asn_DEF_MeasurementInfo_Action_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_MeasurementInfo_Action_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_MeasurementInfo_Action_List_1, + 1, /* Single element */ + &asn_SPC_MeasurementInfo_Action_List_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/MeasurementInfoItem.c b/e2sm/lib/MeasurementInfoItem.c new file mode 100644 index 0000000..a3f9433 --- /dev/null +++ b/e2sm/lib/MeasurementInfoItem.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "MeasurementInfoItem.h" + +asn_TYPE_member_t asn_MBR_MeasurementInfoItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasurementInfoItem, measType), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_MeasurementType, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "measType" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasurementInfoItem, labelInfoList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_LabelInfoList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "labelInfoList" + }, +}; +static const ber_tlv_tag_t asn_DEF_MeasurementInfoItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_MeasurementInfoItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* measType */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* labelInfoList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_MeasurementInfoItem_specs_1 = { + sizeof(struct MeasurementInfoItem), + offsetof(struct MeasurementInfoItem, _asn_ctx), + asn_MAP_MeasurementInfoItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasurementInfoItem = { + "MeasurementInfoItem", + "MeasurementInfoItem", + &asn_OP_SEQUENCE, + asn_DEF_MeasurementInfoItem_tags_1, + sizeof(asn_DEF_MeasurementInfoItem_tags_1) + /sizeof(asn_DEF_MeasurementInfoItem_tags_1[0]), /* 1 */ + asn_DEF_MeasurementInfoItem_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasurementInfoItem_tags_1) + /sizeof(asn_DEF_MeasurementInfoItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_MeasurementInfoItem_1, + 2, /* Elements count */ + &asn_SPC_MeasurementInfoItem_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/MeasurementInfoList.c b/e2sm/lib/MeasurementInfoList.c new file mode 100644 index 0000000..c3861f2 --- /dev/null +++ b/e2sm/lib/MeasurementInfoList.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "MeasurementInfoList.h" + +#include "MeasurementInfoItem.h" +asn_per_constraints_t asn_PER_type_MeasurementInfoList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_MeasurementInfoList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MeasurementInfoItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_MeasurementInfoList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_MeasurementInfoList_specs_1 = { + sizeof(struct MeasurementInfoList), + offsetof(struct MeasurementInfoList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasurementInfoList = { + "MeasurementInfoList", + "MeasurementInfoList", + &asn_OP_SEQUENCE_OF, + asn_DEF_MeasurementInfoList_tags_1, + sizeof(asn_DEF_MeasurementInfoList_tags_1) + /sizeof(asn_DEF_MeasurementInfoList_tags_1[0]), /* 1 */ + asn_DEF_MeasurementInfoList_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasurementInfoList_tags_1) + /sizeof(asn_DEF_MeasurementInfoList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_MeasurementInfoList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_MeasurementInfoList_1, + 1, /* Single element */ + &asn_SPC_MeasurementInfoList_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/MeasurementLabel.c b/e2sm/lib/MeasurementLabel.c new file mode 100644 index 0000000..6283b1c --- /dev/null +++ b/e2sm/lib/MeasurementLabel.c @@ -0,0 +1,787 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "MeasurementLabel.h" + +#include "S-NSSAI.h" +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static int +memb_aRPmax_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 15)) { + /* 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_aRPmin_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 15)) { + /* 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_bitrateRange_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 65535)) { + /* 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_layerMU_MIMO_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 65535)) { + /* 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_distBinX_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 65535)) { + /* 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_distBinY_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 65535)) { + /* 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_distBinZ_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 65535)) { + /* 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_per_constraints_t asn_PER_type_noLabel_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_per_constraints_t asn_PER_type_sUM_constr_16 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_per_constraints_t asn_PER_type_preLabelOverride_constr_22 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_per_constraints_t asn_PER_type_startEndInd_constr_25 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_min_constr_29 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_per_constraints_t asn_PER_type_max_constr_32 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_per_constraints_t asn_PER_type_avg_constr_35 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_per_constraints_t asn_PER_memb_aRPmax_constr_12 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 1, 15 } /* (1..15,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_aRPmin_constr_13 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 1, 15 } /* (1..15,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_bitrateRange_constr_14 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 16, 16, 1, 65535 } /* (1..65535,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_layerMU_MIMO_constr_15 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 16, 16, 1, 65535 } /* (1..65535,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_distBinX_constr_19 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 16, 16, 1, 65535 } /* (1..65535,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_distBinY_constr_20 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 16, 16, 1, 65535 } /* (1..65535,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_distBinZ_constr_21 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 16, 16, 1, 65535 } /* (1..65535,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_noLabel_value2enum_2[] = { + { 0, 4, "true" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_noLabel_enum2value_2[] = { + 0 /* true(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_noLabel_specs_2 = { + asn_MAP_noLabel_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_noLabel_enum2value_2, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_noLabel_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_noLabel_2 = { + "noLabel", + "noLabel", + &asn_OP_NativeEnumerated, + asn_DEF_noLabel_tags_2, + sizeof(asn_DEF_noLabel_tags_2) + /sizeof(asn_DEF_noLabel_tags_2[0]) - 1, /* 1 */ + asn_DEF_noLabel_tags_2, /* Same as above */ + sizeof(asn_DEF_noLabel_tags_2) + /sizeof(asn_DEF_noLabel_tags_2[0]), /* 2 */ + { 0, &asn_PER_type_noLabel_constr_2, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_noLabel_specs_2 /* Additional specs */ +}; + +static const asn_INTEGER_enum_map_t asn_MAP_sUM_value2enum_16[] = { + { 0, 4, "true" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_sUM_enum2value_16[] = { + 0 /* true(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_sUM_specs_16 = { + asn_MAP_sUM_value2enum_16, /* "tag" => N; sorted by tag */ + asn_MAP_sUM_enum2value_16, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_sUM_tags_16[] = { + (ASN_TAG_CLASS_CONTEXT | (12 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_sUM_16 = { + "sUM", + "sUM", + &asn_OP_NativeEnumerated, + asn_DEF_sUM_tags_16, + sizeof(asn_DEF_sUM_tags_16) + /sizeof(asn_DEF_sUM_tags_16[0]) - 1, /* 1 */ + asn_DEF_sUM_tags_16, /* Same as above */ + sizeof(asn_DEF_sUM_tags_16) + /sizeof(asn_DEF_sUM_tags_16[0]), /* 2 */ + { 0, &asn_PER_type_sUM_constr_16, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_sUM_specs_16 /* Additional specs */ +}; + +static const asn_INTEGER_enum_map_t asn_MAP_preLabelOverride_value2enum_22[] = { + { 0, 4, "true" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_preLabelOverride_enum2value_22[] = { + 0 /* true(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_preLabelOverride_specs_22 = { + asn_MAP_preLabelOverride_value2enum_22, /* "tag" => N; sorted by tag */ + asn_MAP_preLabelOverride_enum2value_22, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_preLabelOverride_tags_22[] = { + (ASN_TAG_CLASS_CONTEXT | (16 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_preLabelOverride_22 = { + "preLabelOverride", + "preLabelOverride", + &asn_OP_NativeEnumerated, + asn_DEF_preLabelOverride_tags_22, + sizeof(asn_DEF_preLabelOverride_tags_22) + /sizeof(asn_DEF_preLabelOverride_tags_22[0]) - 1, /* 1 */ + asn_DEF_preLabelOverride_tags_22, /* Same as above */ + sizeof(asn_DEF_preLabelOverride_tags_22) + /sizeof(asn_DEF_preLabelOverride_tags_22[0]), /* 2 */ + { 0, &asn_PER_type_preLabelOverride_constr_22, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_preLabelOverride_specs_22 /* Additional specs */ +}; + +static const asn_INTEGER_enum_map_t asn_MAP_startEndInd_value2enum_25[] = { + { 0, 5, "start" }, + { 1, 3, "end" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_startEndInd_enum2value_25[] = { + 1, /* end(1) */ + 0 /* start(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_startEndInd_specs_25 = { + asn_MAP_startEndInd_value2enum_25, /* "tag" => N; sorted by tag */ + asn_MAP_startEndInd_enum2value_25, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_startEndInd_tags_25[] = { + (ASN_TAG_CLASS_CONTEXT | (17 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_startEndInd_25 = { + "startEndInd", + "startEndInd", + &asn_OP_NativeEnumerated, + asn_DEF_startEndInd_tags_25, + sizeof(asn_DEF_startEndInd_tags_25) + /sizeof(asn_DEF_startEndInd_tags_25[0]) - 1, /* 1 */ + asn_DEF_startEndInd_tags_25, /* Same as above */ + sizeof(asn_DEF_startEndInd_tags_25) + /sizeof(asn_DEF_startEndInd_tags_25[0]), /* 2 */ + { 0, &asn_PER_type_startEndInd_constr_25, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_startEndInd_specs_25 /* Additional specs */ +}; + +static const asn_INTEGER_enum_map_t asn_MAP_min_value2enum_29[] = { + { 0, 4, "true" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_min_enum2value_29[] = { + 0 /* true(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_min_specs_29 = { + asn_MAP_min_value2enum_29, /* "tag" => N; sorted by tag */ + asn_MAP_min_enum2value_29, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_min_tags_29[] = { + (ASN_TAG_CLASS_CONTEXT | (18 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_min_29 = { + "min", + "min", + &asn_OP_NativeEnumerated, + asn_DEF_min_tags_29, + sizeof(asn_DEF_min_tags_29) + /sizeof(asn_DEF_min_tags_29[0]) - 1, /* 1 */ + asn_DEF_min_tags_29, /* Same as above */ + sizeof(asn_DEF_min_tags_29) + /sizeof(asn_DEF_min_tags_29[0]), /* 2 */ + { 0, &asn_PER_type_min_constr_29, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_min_specs_29 /* Additional specs */ +}; + +static const asn_INTEGER_enum_map_t asn_MAP_max_value2enum_32[] = { + { 0, 4, "true" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_max_enum2value_32[] = { + 0 /* true(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_max_specs_32 = { + asn_MAP_max_value2enum_32, /* "tag" => N; sorted by tag */ + asn_MAP_max_enum2value_32, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_max_tags_32[] = { + (ASN_TAG_CLASS_CONTEXT | (19 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_max_32 = { + "max", + "max", + &asn_OP_NativeEnumerated, + asn_DEF_max_tags_32, + sizeof(asn_DEF_max_tags_32) + /sizeof(asn_DEF_max_tags_32[0]) - 1, /* 1 */ + asn_DEF_max_tags_32, /* Same as above */ + sizeof(asn_DEF_max_tags_32) + /sizeof(asn_DEF_max_tags_32[0]), /* 2 */ + { 0, &asn_PER_type_max_constr_32, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_max_specs_32 /* Additional specs */ +}; + +static const asn_INTEGER_enum_map_t asn_MAP_avg_value2enum_35[] = { + { 0, 4, "true" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_avg_enum2value_35[] = { + 0 /* true(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_avg_specs_35 = { + asn_MAP_avg_value2enum_35, /* "tag" => N; sorted by tag */ + asn_MAP_avg_enum2value_35, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_avg_tags_35[] = { + (ASN_TAG_CLASS_CONTEXT | (20 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_avg_35 = { + "avg", + "avg", + &asn_OP_NativeEnumerated, + asn_DEF_avg_tags_35, + sizeof(asn_DEF_avg_tags_35) + /sizeof(asn_DEF_avg_tags_35[0]) - 1, /* 1 */ + asn_DEF_avg_tags_35, /* Same as above */ + sizeof(asn_DEF_avg_tags_35) + /sizeof(asn_DEF_avg_tags_35[0]), /* 2 */ + { 0, &asn_PER_type_avg_constr_35, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_avg_specs_35 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_MeasurementLabel_1[] = { + { ATF_POINTER, 21, offsetof(struct MeasurementLabel, noLabel), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_noLabel_2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "noLabel" + }, + { ATF_POINTER, 20, offsetof(struct MeasurementLabel, plmnID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMNIdentity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "plmnID" + }, + { ATF_POINTER, 19, offsetof(struct MeasurementLabel, sliceID), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_S_NSSAI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sliceID" + }, + { ATF_POINTER, 18, offsetof(struct MeasurementLabel, fiveQI), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_FiveQI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "fiveQI" + }, + { ATF_POINTER, 17, offsetof(struct MeasurementLabel, qFI), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_QosFlowIdentifier, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "qFI" + }, + { ATF_POINTER, 16, offsetof(struct MeasurementLabel, qCI), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_QCI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "qCI" + }, + { ATF_POINTER, 15, offsetof(struct MeasurementLabel, qCImax), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_QCI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "qCImax" + }, + { ATF_POINTER, 14, offsetof(struct MeasurementLabel, qCImin), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_QCI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "qCImin" + }, + { ATF_POINTER, 13, offsetof(struct MeasurementLabel, aRPmax), + (ASN_TAG_CLASS_CONTEXT | (8 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_aRPmax_constr_12, memb_aRPmax_constraint_1 }, + 0, 0, /* No default value */ + "aRPmax" + }, + { ATF_POINTER, 12, offsetof(struct MeasurementLabel, aRPmin), + (ASN_TAG_CLASS_CONTEXT | (9 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_aRPmin_constr_13, memb_aRPmin_constraint_1 }, + 0, 0, /* No default value */ + "aRPmin" + }, + { ATF_POINTER, 11, offsetof(struct MeasurementLabel, bitrateRange), + (ASN_TAG_CLASS_CONTEXT | (10 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_bitrateRange_constr_14, memb_bitrateRange_constraint_1 }, + 0, 0, /* No default value */ + "bitrateRange" + }, + { ATF_POINTER, 10, offsetof(struct MeasurementLabel, layerMU_MIMO), + (ASN_TAG_CLASS_CONTEXT | (11 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_layerMU_MIMO_constr_15, memb_layerMU_MIMO_constraint_1 }, + 0, 0, /* No default value */ + "layerMU-MIMO" + }, + { ATF_POINTER, 9, offsetof(struct MeasurementLabel, sUM), + (ASN_TAG_CLASS_CONTEXT | (12 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_sUM_16, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sUM" + }, + { ATF_POINTER, 8, offsetof(struct MeasurementLabel, distBinX), + (ASN_TAG_CLASS_CONTEXT | (13 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_distBinX_constr_19, memb_distBinX_constraint_1 }, + 0, 0, /* No default value */ + "distBinX" + }, + { ATF_POINTER, 7, offsetof(struct MeasurementLabel, distBinY), + (ASN_TAG_CLASS_CONTEXT | (14 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_distBinY_constr_20, memb_distBinY_constraint_1 }, + 0, 0, /* No default value */ + "distBinY" + }, + { ATF_POINTER, 6, offsetof(struct MeasurementLabel, distBinZ), + (ASN_TAG_CLASS_CONTEXT | (15 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_distBinZ_constr_21, memb_distBinZ_constraint_1 }, + 0, 0, /* No default value */ + "distBinZ" + }, + { ATF_POINTER, 5, offsetof(struct MeasurementLabel, preLabelOverride), + (ASN_TAG_CLASS_CONTEXT | (16 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_preLabelOverride_22, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "preLabelOverride" + }, + { ATF_POINTER, 4, offsetof(struct MeasurementLabel, startEndInd), + (ASN_TAG_CLASS_CONTEXT | (17 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_startEndInd_25, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "startEndInd" + }, + { ATF_POINTER, 3, offsetof(struct MeasurementLabel, min), + (ASN_TAG_CLASS_CONTEXT | (18 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_min_29, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "min" + }, + { ATF_POINTER, 2, offsetof(struct MeasurementLabel, max), + (ASN_TAG_CLASS_CONTEXT | (19 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_max_32, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "max" + }, + { ATF_POINTER, 1, offsetof(struct MeasurementLabel, avg), + (ASN_TAG_CLASS_CONTEXT | (20 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_avg_35, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "avg" + }, +}; +static const int asn_MAP_MeasurementLabel_oms_1[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 }; +static const ber_tlv_tag_t asn_DEF_MeasurementLabel_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_MeasurementLabel_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* noLabel */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* plmnID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* sliceID */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* fiveQI */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* qFI */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* qCI */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* qCImax */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* qCImin */ + { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* aRPmax */ + { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 }, /* aRPmin */ + { (ASN_TAG_CLASS_CONTEXT | (10 << 2)), 10, 0, 0 }, /* bitrateRange */ + { (ASN_TAG_CLASS_CONTEXT | (11 << 2)), 11, 0, 0 }, /* layerMU-MIMO */ + { (ASN_TAG_CLASS_CONTEXT | (12 << 2)), 12, 0, 0 }, /* sUM */ + { (ASN_TAG_CLASS_CONTEXT | (13 << 2)), 13, 0, 0 }, /* distBinX */ + { (ASN_TAG_CLASS_CONTEXT | (14 << 2)), 14, 0, 0 }, /* distBinY */ + { (ASN_TAG_CLASS_CONTEXT | (15 << 2)), 15, 0, 0 }, /* distBinZ */ + { (ASN_TAG_CLASS_CONTEXT | (16 << 2)), 16, 0, 0 }, /* preLabelOverride */ + { (ASN_TAG_CLASS_CONTEXT | (17 << 2)), 17, 0, 0 }, /* startEndInd */ + { (ASN_TAG_CLASS_CONTEXT | (18 << 2)), 18, 0, 0 }, /* min */ + { (ASN_TAG_CLASS_CONTEXT | (19 << 2)), 19, 0, 0 }, /* max */ + { (ASN_TAG_CLASS_CONTEXT | (20 << 2)), 20, 0, 0 } /* avg */ +}; +asn_SEQUENCE_specifics_t asn_SPC_MeasurementLabel_specs_1 = { + sizeof(struct MeasurementLabel), + offsetof(struct MeasurementLabel, _asn_ctx), + asn_MAP_MeasurementLabel_tag2el_1, + 21, /* Count of tags in the map */ + asn_MAP_MeasurementLabel_oms_1, /* Optional members */ + 21, 0, /* Root/Additions */ + 21, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasurementLabel = { + "MeasurementLabel", + "MeasurementLabel", + &asn_OP_SEQUENCE, + asn_DEF_MeasurementLabel_tags_1, + sizeof(asn_DEF_MeasurementLabel_tags_1) + /sizeof(asn_DEF_MeasurementLabel_tags_1[0]), /* 1 */ + asn_DEF_MeasurementLabel_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasurementLabel_tags_1) + /sizeof(asn_DEF_MeasurementLabel_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_MeasurementLabel_1, + 21, /* Elements count */ + &asn_SPC_MeasurementLabel_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/MeasurementRecord.c b/e2sm/lib/MeasurementRecord.c new file mode 100644 index 0000000..e8bdb53 --- /dev/null +++ b/e2sm/lib/MeasurementRecord.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "MeasurementRecord.h" + +#include "MeasurementRecordItem.h" +asn_per_constraints_t asn_PER_type_MeasurementRecord_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 31, -1, 1, 2147483647 } /* (SIZE(1..2147483647)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_MeasurementRecord_1[] = { + { ATF_POINTER, 0, 0, + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_MeasurementRecordItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_MeasurementRecord_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_MeasurementRecord_specs_1 = { + sizeof(struct MeasurementRecord), + offsetof(struct MeasurementRecord, _asn_ctx), + 2, /* XER encoding is XMLValueList */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasurementRecord = { + "MeasurementRecord", + "MeasurementRecord", + &asn_OP_SEQUENCE_OF, + asn_DEF_MeasurementRecord_tags_1, + sizeof(asn_DEF_MeasurementRecord_tags_1) + /sizeof(asn_DEF_MeasurementRecord_tags_1[0]), /* 1 */ + asn_DEF_MeasurementRecord_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasurementRecord_tags_1) + /sizeof(asn_DEF_MeasurementRecord_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_MeasurementRecord_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_MeasurementRecord_1, + 1, /* Single element */ + &asn_SPC_MeasurementRecord_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/MeasurementRecordItem.c b/e2sm/lib/MeasurementRecordItem.c new file mode 100644 index 0000000..d415c59 --- /dev/null +++ b/e2sm/lib/MeasurementRecordItem.c @@ -0,0 +1,143 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "MeasurementRecordItem.h" + +static int +integer_2_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + /* Constraint check succeeded */ + return 0; +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static int +memb_integer_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + /* Constraint check succeeded */ + return 0; +} + +static asn_per_constraints_t asn_PER_type_integer_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 32, -1, 0, 4294967295 } /* (0..4294967295) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_integer_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 32, -1, 0, 4294967295 } /* (0..4294967295) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_MeasurementRecordItem_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_specifics_t asn_SPC_integer_specs_2 = { + 0, 0, 0, 0, 0, + 0, /* Native long size */ + 1 /* Unsigned representation */ +}; +static const ber_tlv_tag_t asn_DEF_integer_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_integer_2 = { + "integer", + "integer", + &asn_OP_NativeInteger, + asn_DEF_integer_tags_2, + sizeof(asn_DEF_integer_tags_2) + /sizeof(asn_DEF_integer_tags_2[0]) - 1, /* 1 */ + asn_DEF_integer_tags_2, /* Same as above */ + sizeof(asn_DEF_integer_tags_2) + /sizeof(asn_DEF_integer_tags_2[0]), /* 2 */ + { 0, &asn_PER_type_integer_constr_2, integer_2_constraint }, + 0, 0, /* No members */ + &asn_SPC_integer_specs_2 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_MeasurementRecordItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasurementRecordItem, choice.integer), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_integer_2, + 0, + { 0, &asn_PER_memb_integer_constr_2, memb_integer_constraint_1 }, + 0, 0, /* No default value */ + "integer" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasurementRecordItem, choice.real), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeReal, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "real" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasurementRecordItem, choice.noValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "noValue" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_MeasurementRecordItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* integer */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* real */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* noValue */ +}; +asn_CHOICE_specifics_t asn_SPC_MeasurementRecordItem_specs_1 = { + sizeof(struct MeasurementRecordItem), + offsetof(struct MeasurementRecordItem, _asn_ctx), + offsetof(struct MeasurementRecordItem, present), + sizeof(((struct MeasurementRecordItem *)0)->present), + asn_MAP_MeasurementRecordItem_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasurementRecordItem = { + "MeasurementRecordItem", + "MeasurementRecordItem", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_MeasurementRecordItem_constr_1, CHOICE_constraint }, + asn_MBR_MeasurementRecordItem_1, + 3, /* Elements count */ + &asn_SPC_MeasurementRecordItem_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/MeasurementType.c b/e2sm/lib/MeasurementType.c new file mode 100644 index 0000000..e3f65c9 --- /dev/null +++ b/e2sm/lib/MeasurementType.c @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "MeasurementType.h" + +asn_per_constraints_t asn_PER_type_MeasurementType_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_MeasurementType_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasurementType, choice.measName), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasurementTypeName, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "measName" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasurementType, choice.measID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasurementTypeID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "measID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_MeasurementType_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* measName */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* measID */ +}; +asn_CHOICE_specifics_t asn_SPC_MeasurementType_specs_1 = { + sizeof(struct MeasurementType), + offsetof(struct MeasurementType, _asn_ctx), + offsetof(struct MeasurementType, present), + sizeof(((struct MeasurementType *)0)->present), + asn_MAP_MeasurementType_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasurementType = { + "MeasurementType", + "MeasurementType", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_MeasurementType_constr_1, CHOICE_constraint }, + asn_MBR_MeasurementType_1, + 2, /* Elements count */ + &asn_SPC_MeasurementType_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/MeasurementTypeID.c b/e2sm/lib/MeasurementTypeID.c new file mode 100644 index 0000000..9efb8ec --- /dev/null +++ b/e2sm/lib/MeasurementTypeID.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "MeasurementTypeID.h" + +int +MeasurementTypeID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 65536)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_MeasurementTypeID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 16, -1, 1, 65536 } /* (1..65536,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_MeasurementTypeID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_MeasurementTypeID = { + "MeasurementTypeID", + "MeasurementTypeID", + &asn_OP_NativeInteger, + asn_DEF_MeasurementTypeID_tags_1, + sizeof(asn_DEF_MeasurementTypeID_tags_1) + /sizeof(asn_DEF_MeasurementTypeID_tags_1[0]), /* 1 */ + asn_DEF_MeasurementTypeID_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasurementTypeID_tags_1) + /sizeof(asn_DEF_MeasurementTypeID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_MeasurementTypeID_constr_1, MeasurementTypeID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/e2sm/lib/MeasurementTypeName.c b/e2sm/lib/MeasurementTypeName.c new file mode 100644 index 0000000..978f59c --- /dev/null +++ b/e2sm/lib/MeasurementTypeName.c @@ -0,0 +1,106 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "MeasurementTypeName.h" + +static const int permitted_alphabet_table_1[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */ + 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9, /* . '() +,-./ */ +10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22, /* 0123456789: = ? */ + 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37, /* ABCDEFGHIJKLMNO */ +38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ */ + 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, /* abcdefghijklmno */ +64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0, /* pqrstuvwxyz */ +}; +static const int permitted_alphabet_code2value_1[74] = { +32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54, +55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74, +75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, +97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, +113,114,115,116,117,118,119,120,121,122,}; + + +static int check_permitted_alphabet_1(const void *sptr) { + const int *table = permitted_alphabet_table_1; + /* The underlying type is PrintableString */ + const PrintableString_t *st = (const PrintableString_t *)sptr; + const uint8_t *ch = st->buf; + const uint8_t *end = ch + st->size; + + for(; ch < end; ch++) { + uint8_t cv = *ch; + if(!table[cv]) return -1; + } + return 0; +} + +int +MeasurementTypeName_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const PrintableString_t *st = (const PrintableString_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 >= 1 && size <= 150) + && !check_permitted_alphabet_1(st)) { + /* 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 asn_PER_MAP_MeasurementTypeName_1_v2c(unsigned int value) { + if(value >= sizeof(permitted_alphabet_table_1)/sizeof(permitted_alphabet_table_1[0])) + return -1; + return permitted_alphabet_table_1[value] - 1; +} +static int asn_PER_MAP_MeasurementTypeName_1_c2v(unsigned int code) { + if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0])) + return -1; + return permitted_alphabet_code2value_1[code]; +} +/* + * This type is implemented using PrintableString, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_MeasurementTypeName_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, + asn_PER_MAP_MeasurementTypeName_1_v2c, /* Value to PER code map */ + asn_PER_MAP_MeasurementTypeName_1_c2v /* PER code to value map */ +}; +static const ber_tlv_tag_t asn_DEF_MeasurementTypeName_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (19 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_MeasurementTypeName = { + "MeasurementTypeName", + "MeasurementTypeName", + &asn_OP_PrintableString, + asn_DEF_MeasurementTypeName_tags_1, + sizeof(asn_DEF_MeasurementTypeName_tags_1) + /sizeof(asn_DEF_MeasurementTypeName_tags_1[0]), /* 1 */ + asn_DEF_MeasurementTypeName_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasurementTypeName_tags_1) + /sizeof(asn_DEF_MeasurementTypeName_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_MeasurementTypeName_constr_1, MeasurementTypeName_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/e2sm/lib/NG-RANnodeUEXnAPID.c b/e2sm/lib/NG-RANnodeUEXnAPID.c new file mode 100644 index 0000000..1541b4e --- /dev/null +++ b/e2sm/lib/NG-RANnodeUEXnAPID.c @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "NG-RANnodeUEXnAPID.h" + +int +NG_RANnodeUEXnAPID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + /* Constraint check succeeded */ + return 0; +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_NG_RANnodeUEXnAPID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 32, -1, 0, 4294967295 } /* (0..4294967295) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +const asn_INTEGER_specifics_t asn_SPC_NG_RANnodeUEXnAPID_specs_1 = { + 0, 0, 0, 0, 0, + 0, /* Native long size */ + 1 /* Unsigned representation */ +}; +static const ber_tlv_tag_t asn_DEF_NG_RANnodeUEXnAPID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_NG_RANnodeUEXnAPID = { + "NG-RANnodeUEXnAPID", + "NG-RANnodeUEXnAPID", + &asn_OP_NativeInteger, + asn_DEF_NG_RANnodeUEXnAPID_tags_1, + sizeof(asn_DEF_NG_RANnodeUEXnAPID_tags_1) + /sizeof(asn_DEF_NG_RANnodeUEXnAPID_tags_1[0]), /* 1 */ + asn_DEF_NG_RANnodeUEXnAPID_tags_1, /* Same as above */ + sizeof(asn_DEF_NG_RANnodeUEXnAPID_tags_1) + /sizeof(asn_DEF_NG_RANnodeUEXnAPID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_NG_RANnodeUEXnAPID_constr_1, NG_RANnodeUEXnAPID_constraint }, + 0, 0, /* No members */ + &asn_SPC_NG_RANnodeUEXnAPID_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/NGENB-CU-UE-W1AP-ID.c b/e2sm/lib/NGENB-CU-UE-W1AP-ID.c new file mode 100644 index 0000000..2859907 --- /dev/null +++ b/e2sm/lib/NGENB-CU-UE-W1AP-ID.c @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "NGENB-CU-UE-W1AP-ID.h" + +int +NGENB_CU_UE_W1AP_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + /* Constraint check succeeded */ + return 0; +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_NGENB_CU_UE_W1AP_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 32, -1, 0, 4294967295 } /* (0..4294967295) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +const asn_INTEGER_specifics_t asn_SPC_NGENB_CU_UE_W1AP_ID_specs_1 = { + 0, 0, 0, 0, 0, + 0, /* Native long size */ + 1 /* Unsigned representation */ +}; +static const ber_tlv_tag_t asn_DEF_NGENB_CU_UE_W1AP_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_NGENB_CU_UE_W1AP_ID = { + "NGENB-CU-UE-W1AP-ID", + "NGENB-CU-UE-W1AP-ID", + &asn_OP_NativeInteger, + asn_DEF_NGENB_CU_UE_W1AP_ID_tags_1, + sizeof(asn_DEF_NGENB_CU_UE_W1AP_ID_tags_1) + /sizeof(asn_DEF_NGENB_CU_UE_W1AP_ID_tags_1[0]), /* 1 */ + asn_DEF_NGENB_CU_UE_W1AP_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_NGENB_CU_UE_W1AP_ID_tags_1) + /sizeof(asn_DEF_NGENB_CU_UE_W1AP_ID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_NGENB_CU_UE_W1AP_ID_constr_1, NGENB_CU_UE_W1AP_ID_constraint }, + 0, 0, /* No members */ + &asn_SPC_NGENB_CU_UE_W1AP_ID_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/NGENB-DU-ID.c b/e2sm/lib/NGENB-DU-ID.c new file mode 100644 index 0000000..5bfea48 --- /dev/null +++ b/e2sm/lib/NGENB-DU-ID.c @@ -0,0 +1,67 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "NGENB-DU-ID.h" + +int +NGENB_DU_ID_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(asn_INTEGER2long(st, &value)) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value too large (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if((value >= 0 && value <= 68719476735)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using INTEGER, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_NGENB_DU_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 36, -1, 0, 68719476735 } /* (0..68719476735) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_NGENB_DU_ID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_NGENB_DU_ID = { + "NGENB-DU-ID", + "NGENB-DU-ID", + &asn_OP_INTEGER, + asn_DEF_NGENB_DU_ID_tags_1, + sizeof(asn_DEF_NGENB_DU_ID_tags_1) + /sizeof(asn_DEF_NGENB_DU_ID_tags_1[0]), /* 1 */ + asn_DEF_NGENB_DU_ID_tags_1, /* Same as above */ + sizeof(asn_DEF_NGENB_DU_ID_tags_1) + /sizeof(asn_DEF_NGENB_DU_ID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_NGENB_DU_ID_constr_1, NGENB_DU_ID_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/e2sm/lib/NR-ARFCN.c b/e2sm/lib/NR-ARFCN.c new file mode 100644 index 0000000..166f4f6 --- /dev/null +++ b/e2sm/lib/NR-ARFCN.c @@ -0,0 +1,80 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "NR-ARFCN.h" + +static int +memb_nRARFCN_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 3279165)) { + /* 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_per_constraints_t asn_PER_memb_nRARFCN_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED, 22, -1, 0, 3279165 } /* (0..3279165) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_NR_ARFCN_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct NR_ARFCN, nRARFCN), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_nRARFCN_constr_2, memb_nRARFCN_constraint_1 }, + 0, 0, /* No default value */ + "nRARFCN" + }, +}; +static const ber_tlv_tag_t asn_DEF_NR_ARFCN_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_NR_ARFCN_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* nRARFCN */ +}; +asn_SEQUENCE_specifics_t asn_SPC_NR_ARFCN_specs_1 = { + sizeof(struct NR_ARFCN), + offsetof(struct NR_ARFCN, _asn_ctx), + asn_MAP_NR_ARFCN_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_NR_ARFCN = { + "NR-ARFCN", + "NR-ARFCN", + &asn_OP_SEQUENCE, + asn_DEF_NR_ARFCN_tags_1, + sizeof(asn_DEF_NR_ARFCN_tags_1) + /sizeof(asn_DEF_NR_ARFCN_tags_1[0]), /* 1 */ + asn_DEF_NR_ARFCN_tags_1, /* Same as above */ + sizeof(asn_DEF_NR_ARFCN_tags_1) + /sizeof(asn_DEF_NR_ARFCN_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_NR_ARFCN_1, + 1, /* Elements count */ + &asn_SPC_NR_ARFCN_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/NR-CGI.c b/e2sm/lib/NR-CGI.c new file mode 100644 index 0000000..d5cb1c4 --- /dev/null +++ b/e2sm/lib/NR-CGI.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "NR-CGI.h" + +asn_TYPE_member_t asn_MBR_NR_CGI_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct NR_CGI, pLMNIdentity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMNIdentity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "pLMNIdentity" + }, + { ATF_NOFLAGS, 0, offsetof(struct NR_CGI, nRCellIdentity), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRCellIdentity, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nRCellIdentity" + }, +}; +static const ber_tlv_tag_t asn_DEF_NR_CGI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_NR_CGI_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMNIdentity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nRCellIdentity */ +}; +asn_SEQUENCE_specifics_t asn_SPC_NR_CGI_specs_1 = { + sizeof(struct NR_CGI), + offsetof(struct NR_CGI, _asn_ctx), + asn_MAP_NR_CGI_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_NR_CGI = { + "NR-CGI", + "NR-CGI", + &asn_OP_SEQUENCE, + asn_DEF_NR_CGI_tags_1, + sizeof(asn_DEF_NR_CGI_tags_1) + /sizeof(asn_DEF_NR_CGI_tags_1[0]), /* 1 */ + asn_DEF_NR_CGI_tags_1, /* Same as above */ + sizeof(asn_DEF_NR_CGI_tags_1) + /sizeof(asn_DEF_NR_CGI_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_NR_CGI_1, + 2, /* Elements count */ + &asn_SPC_NR_CGI_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/NR-PCI.c b/e2sm/lib/NR-PCI.c new file mode 100644 index 0000000..8a0f74a --- /dev/null +++ b/e2sm/lib/NR-PCI.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "NR-PCI.h" + +int +NR_PCI_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 1007)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_NR_PCI_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 10, 10, 0, 1007 } /* (0..1007) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_NR_PCI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_NR_PCI = { + "NR-PCI", + "NR-PCI", + &asn_OP_NativeInteger, + asn_DEF_NR_PCI_tags_1, + sizeof(asn_DEF_NR_PCI_tags_1) + /sizeof(asn_DEF_NR_PCI_tags_1[0]), /* 1 */ + asn_DEF_NR_PCI_tags_1, /* Same as above */ + sizeof(asn_DEF_NR_PCI_tags_1) + /sizeof(asn_DEF_NR_PCI_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_NR_PCI_constr_1, NR_PCI_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/e2sm/lib/NRCellIdentity.c b/e2sm/lib/NRCellIdentity.c index f9ea932..601fd16 100644 --- a/e2sm/lib/NRCellIdentity.c +++ b/e2sm/lib/NRCellIdentity.c @@ -1,8 +1,8 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) - * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #include "NRCellIdentity.h" @@ -42,9 +42,6 @@ NRCellIdentity_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, * This type is implemented using BIT_STRING, * so here we adjust the DEF accordingly. */ -static asn_oer_constraints_t asn_OER_type_NRCellIdentity_constr_1 CC_NOTUSED = { - { 0, 0 }, - 36 /* (SIZE(36..36)) */}; asn_per_constraints_t asn_PER_type_NRCellIdentity_constr_1 CC_NOTUSED = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 36, 36 } /* (SIZE(36..36)) */, @@ -63,7 +60,7 @@ asn_TYPE_descriptor_t asn_DEF_NRCellIdentity = { asn_DEF_NRCellIdentity_tags_1, /* Same as above */ sizeof(asn_DEF_NRCellIdentity_tags_1) /sizeof(asn_DEF_NRCellIdentity_tags_1[0]), /* 1 */ - { &asn_OER_type_NRCellIdentity_constr_1, &asn_PER_type_NRCellIdentity_constr_1, NRCellIdentity_constraint }, + { 0, &asn_PER_type_NRCellIdentity_constr_1, NRCellIdentity_constraint }, 0, 0, /* No members */ &asn_SPC_BIT_STRING_specs /* Additional specs */ }; diff --git a/e2sm/lib/NRFrequencyBand-List.c b/e2sm/lib/NRFrequencyBand-List.c new file mode 100644 index 0000000..3245541 --- /dev/null +++ b/e2sm/lib/NRFrequencyBand-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "NRFrequencyBand-List.h" + +#include "NRFrequencyBandItem.h" +asn_per_constraints_t asn_PER_type_NRFrequencyBand_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_NRFrequencyBand_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_NRFrequencyBandItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_NRFrequencyBand_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_NRFrequencyBand_List_specs_1 = { + sizeof(struct NRFrequencyBand_List), + offsetof(struct NRFrequencyBand_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_NRFrequencyBand_List = { + "NRFrequencyBand-List", + "NRFrequencyBand-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_NRFrequencyBand_List_tags_1, + sizeof(asn_DEF_NRFrequencyBand_List_tags_1) + /sizeof(asn_DEF_NRFrequencyBand_List_tags_1[0]), /* 1 */ + asn_DEF_NRFrequencyBand_List_tags_1, /* Same as above */ + sizeof(asn_DEF_NRFrequencyBand_List_tags_1) + /sizeof(asn_DEF_NRFrequencyBand_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_NRFrequencyBand_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_NRFrequencyBand_List_1, + 1, /* Single element */ + &asn_SPC_NRFrequencyBand_List_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/NRFrequencyBandItem.c b/e2sm/lib/NRFrequencyBandItem.c new file mode 100644 index 0000000..1d2f2bc --- /dev/null +++ b/e2sm/lib/NRFrequencyBandItem.c @@ -0,0 +1,90 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "NRFrequencyBandItem.h" + +static int +memb_freqBandIndicatorNr_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 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_per_constraints_t asn_PER_memb_freqBandIndicatorNr_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 10, 10, 1, 1024 } /* (1..1024,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_NRFrequencyBandItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct NRFrequencyBandItem, freqBandIndicatorNr), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_freqBandIndicatorNr_constr_2, memb_freqBandIndicatorNr_constraint_1 }, + 0, 0, /* No default value */ + "freqBandIndicatorNr" + }, + { ATF_NOFLAGS, 0, offsetof(struct NRFrequencyBandItem, supportedSULBandList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SupportedSULBandList, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "supportedSULBandList" + }, +}; +static const ber_tlv_tag_t asn_DEF_NRFrequencyBandItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_NRFrequencyBandItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* freqBandIndicatorNr */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* supportedSULBandList */ +}; +asn_SEQUENCE_specifics_t asn_SPC_NRFrequencyBandItem_specs_1 = { + sizeof(struct NRFrequencyBandItem), + offsetof(struct NRFrequencyBandItem, _asn_ctx), + asn_MAP_NRFrequencyBandItem_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_NRFrequencyBandItem = { + "NRFrequencyBandItem", + "NRFrequencyBandItem", + &asn_OP_SEQUENCE, + asn_DEF_NRFrequencyBandItem_tags_1, + sizeof(asn_DEF_NRFrequencyBandItem_tags_1) + /sizeof(asn_DEF_NRFrequencyBandItem_tags_1[0]), /* 1 */ + asn_DEF_NRFrequencyBandItem_tags_1, /* Same as above */ + sizeof(asn_DEF_NRFrequencyBandItem_tags_1) + /sizeof(asn_DEF_NRFrequencyBandItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_NRFrequencyBandItem_1, + 2, /* Elements count */ + &asn_SPC_NRFrequencyBandItem_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/NRFrequencyInfo.c b/e2sm/lib/NRFrequencyInfo.c new file mode 100644 index 0000000..dfc4dbb --- /dev/null +++ b/e2sm/lib/NRFrequencyInfo.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "NRFrequencyInfo.h" + +static asn_TYPE_member_t asn_MBR_NRFrequencyInfo_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct NRFrequencyInfo, nrARFCN), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NR_ARFCN, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nrARFCN" + }, + { ATF_NOFLAGS, 0, offsetof(struct NRFrequencyInfo, frequencyBand_List), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRFrequencyBand_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "frequencyBand-List" + }, + { ATF_POINTER, 1, offsetof(struct NRFrequencyInfo, frequencyShift7p5khz), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NRFrequencyShift7p5khz, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "frequencyShift7p5khz" + }, +}; +static const int asn_MAP_NRFrequencyInfo_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_NRFrequencyInfo_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_NRFrequencyInfo_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nrARFCN */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* frequencyBand-List */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* frequencyShift7p5khz */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_NRFrequencyInfo_specs_1 = { + sizeof(struct NRFrequencyInfo), + offsetof(struct NRFrequencyInfo, _asn_ctx), + asn_MAP_NRFrequencyInfo_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_NRFrequencyInfo_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_NRFrequencyInfo = { + "NRFrequencyInfo", + "NRFrequencyInfo", + &asn_OP_SEQUENCE, + asn_DEF_NRFrequencyInfo_tags_1, + sizeof(asn_DEF_NRFrequencyInfo_tags_1) + /sizeof(asn_DEF_NRFrequencyInfo_tags_1[0]), /* 1 */ + asn_DEF_NRFrequencyInfo_tags_1, /* Same as above */ + sizeof(asn_DEF_NRFrequencyInfo_tags_1) + /sizeof(asn_DEF_NRFrequencyInfo_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_NRFrequencyInfo_1, + 3, /* Elements count */ + &asn_SPC_NRFrequencyInfo_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/NRFrequencyShift7p5khz.c b/e2sm/lib/NRFrequencyShift7p5khz.c new file mode 100644 index 0000000..d79fbfd --- /dev/null +++ b/e2sm/lib/NRFrequencyShift7p5khz.c @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "NRFrequencyShift7p5khz.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_NRFrequencyShift7p5khz_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_NRFrequencyShift7p5khz_value2enum_1[] = { + { 0, 5, "false" }, + { 1, 4, "true" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_NRFrequencyShift7p5khz_enum2value_1[] = { + 0, /* false(0) */ + 1 /* true(1) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_NRFrequencyShift7p5khz_specs_1 = { + asn_MAP_NRFrequencyShift7p5khz_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_NRFrequencyShift7p5khz_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 3, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_NRFrequencyShift7p5khz_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_NRFrequencyShift7p5khz = { + "NRFrequencyShift7p5khz", + "NRFrequencyShift7p5khz", + &asn_OP_NativeEnumerated, + asn_DEF_NRFrequencyShift7p5khz_tags_1, + sizeof(asn_DEF_NRFrequencyShift7p5khz_tags_1) + /sizeof(asn_DEF_NRFrequencyShift7p5khz_tags_1[0]), /* 1 */ + asn_DEF_NRFrequencyShift7p5khz_tags_1, /* Same as above */ + sizeof(asn_DEF_NRFrequencyShift7p5khz_tags_1) + /sizeof(asn_DEF_NRFrequencyShift7p5khz_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_NRFrequencyShift7p5khz_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_NRFrequencyShift7p5khz_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/NULL.c b/e2sm/lib/NULL.c new file mode 100644 index 0000000..4a2914f --- /dev/null +++ b/e2sm/lib/NULL.c @@ -0,0 +1,299 @@ +/*- + * Copyright (c) 2003, 2005 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include /* Implemented in terms of BOOLEAN type */ + +/* + * NULL basic type description. + */ +static const ber_tlv_tag_t asn_DEF_NULL_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (5 << 2)) +}; +asn_TYPE_operation_t asn_OP_NULL = { + BOOLEAN_free, + NULL_print, + NULL_compare, + BOOLEAN_decode_ber, /* Implemented in terms of BOOLEAN */ + NULL_encode_der, /* Special handling of DER encoding */ + NULL_decode_xer, + NULL_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + NULL_decode_oer, + NULL_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + NULL_decode_uper, /* Unaligned PER decoder */ + NULL_encode_uper, /* Unaligned PER encoder */ + NULL_decode_aper, /* Aligned PER decoder */ + NULL_encode_aper, /* Aligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + NULL_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_NULL = { + "NULL", + "NULL", + &asn_OP_NULL, + asn_DEF_NULL_tags, + sizeof(asn_DEF_NULL_tags) / sizeof(asn_DEF_NULL_tags[0]), + asn_DEF_NULL_tags, /* Same as above */ + sizeof(asn_DEF_NULL_tags) / sizeof(asn_DEF_NULL_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +asn_enc_rval_t +NULL_encode_der(const asn_TYPE_descriptor_t *td, const void *ptr, int tag_mode, + ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t erval = {0,0,0}; + + erval.encoded = der_write_tags(td, 0, tag_mode, 0, tag, cb, app_key); + if(erval.encoded == -1) { + erval.failed_type = td; + erval.structure_ptr = ptr; + } + + ASN__ENCODED_OK(erval); +} + +asn_enc_rval_t +NULL_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, + void *app_key) { + asn_enc_rval_t er = {0,0,0}; + + (void)td; + (void)sptr; + (void)ilevel; + (void)flags; + (void)cb; + (void)app_key; + + /* XMLNullValue is empty */ + er.encoded = 0; + ASN__ENCODED_OK(er); +} + + +static enum xer_pbd_rval +NULL__xer_body_decode(const asn_TYPE_descriptor_t *td, void *sptr, + const void *chunk_buf, size_t chunk_size) { + (void)td; + (void)sptr; + (void)chunk_buf; /* Going to be empty according to the rules below. */ + + /* + * There must be no content in self-terminating tag. + */ + if(chunk_size) + return XPBD_BROKEN_ENCODING; + else + return XPBD_BODY_CONSUMED; +} + +asn_dec_rval_t +NULL_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + return xer_decode_primitive(opt_codec_ctx, td, + sptr, sizeof(NULL_t), opt_mname, buf_ptr, size, + NULL__xer_body_decode); +} + +int +NULL_compare(const asn_TYPE_descriptor_t *td, const void *a, const void *b) { + (void)td; + (void)a; + (void)b; + return 0; +} + +int +NULL_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(sptr) { + return (cb("", 9, app_key) < 0) ? -1 : 0; + } else { + return (cb("", 8, app_key) < 0) ? -1 : 0; + } +} + +#ifndef ASN_DISABLE_OER_SUPPORT + +asn_dec_rval_t +NULL_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **sptr, + const void *ptr, size_t size) { + asn_dec_rval_t rv = {RC_OK, 0}; + (void)opt_codec_ctx; + (void)td; + (void)constraints; + (void)ptr; + (void)size; + + if(!*sptr) { + *sptr = MALLOC(sizeof(NULL_t)); + if(*sptr) { + *(NULL_t *)*sptr = 0; + } else { + ASN__DECODE_FAILED; + } + } + + return rv; +} + +asn_enc_rval_t +NULL_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er = {0,0,0}; + + (void)td; + (void)sptr; + (void)constraints; + (void)cb; + (void)app_key; + + er.encoded = 0; /* Encoding in 0 bytes. */ + + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +NULL_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + asn_dec_rval_t rv; + + (void)opt_codec_ctx; + (void)td; + (void)constraints; + (void)pd; + + if(!*sptr) { + *sptr = MALLOC(sizeof(NULL_t)); + if(*sptr) { + *(NULL_t *)*sptr = 0; + } else { + ASN__DECODE_FAILED; + } + } + + /* + * NULL type does not have content octets. + */ + + rv.code = RC_OK; + rv.consumed = 0; + return rv; +} + +asn_enc_rval_t +NULL_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + asn_enc_rval_t er = {0,0,0}; + + (void)td; + (void)constraints; + (void)sptr; + (void)po; + + er.encoded = 0; + ASN__ENCODED_OK(er); +} + +asn_dec_rval_t +NULL_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + asn_dec_rval_t rv = {RC_OK, 0}; + + (void)opt_codec_ctx; + (void)td; + (void)constraints; + (void)pd; + + if(!*sptr) { + *sptr = MALLOC(sizeof(NULL_t)); + if(*sptr) { + *(NULL_t *)*sptr = 0; + } else { + ASN__DECODE_FAILED; + } + } + + /* + * NULL type does not have content octets. + */ + + rv.code = RC_OK; + rv.consumed = 0; + return rv; +} + + +asn_enc_rval_t +NULL_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + asn_enc_rval_t er = {0,0,0}; + + (void)td; + (void)constraints; + (void)sptr; + (void)po; + + er.encoded = 0; + ASN__ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +asn_random_fill_result_t +NULL_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constr, + size_t max_length) { + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + NULL_t *st = *sptr; + + (void)td; + (void)constr; + + if(max_length == 0) return result_skipped; + + if(st == NULL) { + st = (NULL_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(st == NULL) { + return result_failed; + } + } + + return result_ok; +} + diff --git a/e2sm/lib/NativeReal.c b/e2sm/lib/NativeReal.c new file mode 100644 index 0000000..160a471 --- /dev/null +++ b/e2sm/lib/NativeReal.c @@ -0,0 +1,781 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Read the NativeReal.h for the explanation wrt. differences between + * REAL and NativeReal. + * Basically, both are decoders and encoders of ASN.1 REAL type, but this + * implementation deals with the standard (machine-specific) representation + * of them instead of using the platform-independent buffer. + */ +#include +#include +#include +#include +#include +#include + +#if defined(__clang__) +/* + * isnan() is defined using generic selections and won't compile in + * strict C89 mode because of too fancy system's standard library. + * However, prior to C11 the math had a perfectly working isnan() + * in the math library. + * Disable generic selection warning so we can test C89 mode with newer libc. + */ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wc11-extensions" +static int asn_isnan(double d) { + return isnan(d); +} +#pragma clang diagnostic pop +#else +#define asn_isnan(v) isnan(v) +#endif /* generic selections */ + +/* + * NativeReal basic type description. + */ +static const ber_tlv_tag_t asn_DEF_NativeReal_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)) +}; +asn_TYPE_operation_t asn_OP_NativeReal = { + NativeReal_free, + NativeReal_print, + NativeReal_compare, + NativeReal_decode_ber, + NativeReal_encode_der, + NativeReal_decode_xer, + NativeReal_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + NativeReal_decode_oer, + NativeReal_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + NativeReal_decode_uper, + NativeReal_encode_uper, + NativeReal_decode_aper, + NativeReal_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + NativeReal_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_NativeReal = { + "REAL", /* The ASN.1 type is still REAL */ + "REAL", + &asn_OP_NativeReal, + asn_DEF_NativeReal_tags, + sizeof(asn_DEF_NativeReal_tags) / sizeof(asn_DEF_NativeReal_tags[0]), + asn_DEF_NativeReal_tags, /* Same as above */ + sizeof(asn_DEF_NativeReal_tags) / sizeof(asn_DEF_NativeReal_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +static size_t NativeReal__float_size(const asn_TYPE_descriptor_t *td); +static double NativeReal__get_double(const asn_TYPE_descriptor_t *td, + const void *ptr); +static ssize_t NativeReal__set(const asn_TYPE_descriptor_t *td, void **sptr, + double d); + +/* + * Decode REAL type. + */ +asn_dec_rval_t +NativeReal_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const void *buf_ptr, size_t size, int tag_mode) { + asn_dec_rval_t rval; + ber_tlv_len_t length; + + ASN_DEBUG("Decoding %s as REAL (tm=%d)", td->name, tag_mode); + + /* + * Check tags. + */ + rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size, tag_mode, 0, + &length, 0); + if(rval.code != RC_OK) return rval; + assert(length >= 0); /* Ensured by ber_check_tags */ + + ASN_DEBUG("%s length is %d bytes", td->name, (int)length); + + /* + * Make sure we have this length. + */ + buf_ptr = ((const char *)buf_ptr) + rval.consumed; + size -= rval.consumed; + if(length > (ber_tlv_len_t)size) { + rval.code = RC_WMORE; + rval.consumed = 0; + return rval; + } + + /* + * ASN.1 encoded REAL: buf_ptr, length + * Fill the Dbl, at the same time checking for overflow. + * If overflow occured, return with RC_FAIL. + */ + { + uint8_t scratch[24]; /* Longer than %.16f in decimal */ + REAL_t tmp; + double d; + int ret; + + if((size_t)length < sizeof(scratch)) { + tmp.buf = scratch; + tmp.size = length; + } else { + /* This rarely happens: impractically long value */ + tmp.buf = CALLOC(1, length + 1); + tmp.size = length; + if(!tmp.buf) { + rval.code = RC_FAIL; + rval.consumed = 0; + return rval; + } + } + + memcpy(tmp.buf, buf_ptr, length); + tmp.buf[length] = '\0'; + + ret = asn_REAL2double(&tmp, &d); + if(tmp.buf != scratch) FREEMEM(tmp.buf); + if(ret) { + rval.code = RC_FAIL; + rval.consumed = 0; + return rval; + } + + if(NativeReal__set(td, sptr, d) < 0) + ASN__DECODE_FAILED; + } + + rval.code = RC_OK; + rval.consumed += length; + + ASN_DEBUG("Took %ld/%ld bytes to encode %s", (long)rval.consumed, + (long)length, td->name); + + return rval; +} + +/* + * Encode the NativeReal using the standard REAL type DER encoder. + */ +asn_enc_rval_t +NativeReal_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + double d = NativeReal__get_double(td, sptr); + asn_enc_rval_t erval = {0,0,0}; + REAL_t tmp; + + /* Prepare a temporary clean structure */ + memset(&tmp, 0, sizeof(tmp)); + + if(asn_double2REAL(&tmp, d)) + ASN__ENCODE_FAILED; + + /* Encode a fake REAL */ + erval = der_encode_primitive(td, &tmp, tag_mode, tag, cb, app_key); + if(erval.encoded == -1) { + assert(erval.structure_ptr == &tmp); + erval.structure_ptr = sptr; + } + + /* Free possibly allocated members of the temporary structure */ + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_REAL, &tmp); + + return erval; +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +/* + * Decode REAL type using PER. + */ +asn_dec_rval_t +NativeReal_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + asn_dec_rval_t rval; + double d; + REAL_t tmp; + void *ptmp = &tmp; + int ret; + + (void)constraints; + + memset(&tmp, 0, sizeof(tmp)); + rval = OCTET_STRING_decode_uper(opt_codec_ctx, &asn_DEF_REAL, + NULL, &ptmp, pd); + if(rval.code != RC_OK) { + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_REAL, &tmp); + return rval; + } + + ret = asn_REAL2double(&tmp, &d); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_REAL, &tmp); + if(ret) ASN__DECODE_FAILED; + + if(NativeReal__set(td, sptr, d) < 0 ) + ASN__DECODE_FAILED; + + return rval; +} + +/* + * Encode the NativeReal using the OCTET STRING PER encoder. + */ +asn_enc_rval_t +NativeReal_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + double d = NativeReal__get_double(td, sptr); + asn_enc_rval_t erval = {0,0,0}; + REAL_t tmp; + + (void)constraints; + + /* Prepare a temporary clean structure */ + memset(&tmp, 0, sizeof(tmp)); + + if(asn_double2REAL(&tmp, d)) + ASN__ENCODE_FAILED; + + /* Encode a DER REAL */ + erval = OCTET_STRING_encode_uper(&asn_DEF_REAL, NULL, &tmp, po); + if(erval.encoded == -1) + erval.structure_ptr = sptr; + + /* Free possibly allocated members of the temporary structure */ + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_REAL, &tmp); + + return erval; +} + + +asn_dec_rval_t +NativeReal_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **dbl_ptr, asn_per_data_t *pd) { + double *Dbl = (double *)*dbl_ptr; + asn_dec_rval_t rval; + REAL_t tmp; + void *ptmp = &tmp; + int ret; + + (void)constraints; + + /* + * If the structure is not there, allocate it. + */ + if(Dbl == NULL) { + *dbl_ptr = CALLOC(1, sizeof(*Dbl)); + Dbl = (double *)*dbl_ptr; + if(Dbl == NULL) + ASN__DECODE_FAILED; + } + + memset(&tmp, 0, sizeof(tmp)); + rval = OCTET_STRING_decode_aper(opt_codec_ctx, td, NULL, + &ptmp, pd); + if(rval.code != RC_OK) { + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_REAL, &tmp); + return rval; + } + + ret = asn_REAL2double(&tmp, Dbl); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_REAL, &tmp); + if(ret) ASN__DECODE_FAILED; + + return rval; +} + +asn_enc_rval_t +NativeReal_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + double Dbl = *(const double *)sptr; + asn_enc_rval_t erval = {0,0,0}; + REAL_t tmp; + + (void)constraints; + + /* Prepare a temporary clean structure */ + memset(&tmp, 0, sizeof(tmp)); + + if(asn_double2REAL(&tmp, Dbl)) + ASN__ENCODE_FAILED; + + /* Encode a DER REAL */ + erval = OCTET_STRING_encode_aper(td, NULL, &tmp, po); + if(erval.encoded == -1) + erval.structure_ptr = sptr; + + /* Free possibly allocated members of the temporary structure */ + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_REAL, &tmp); + + return erval; +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +#ifndef ASN_DISABLE_OER_SUPPORT + +/* + * Swap bytes from/to network, if local is little-endian. + * Unused endianness sections are likely removed at compile phase. + */ +static void +NativeReal__network_swap(size_t float_size, const void *srcp, uint8_t *dst) { + const uint8_t *src = srcp; + double test = -0.0; + int float_big_endian = *(const char *)&test != 0; + /* In lieu of static_assert(sizeof(double) == 8) */ + static const char sizeof_double_is_8_a[sizeof(double)-7] CC_NOTUSED; + static const char sizeof_double_is_8_b[9-sizeof(double)] CC_NOTUSED; + /* In lieu of static_assert(sizeof(sizeof) == 4) */ + static const char sizeof_float_is_4_a[sizeof(float)-3] CC_NOTUSED; + static const char sizeof_float_is_4_b[5-sizeof(float)] CC_NOTUSED; + + switch(float_size) { + case sizeof(double): + assert(sizeof(double) == 8); + if(float_big_endian) { + dst[0] = src[0]; + dst[1] = src[1]; + dst[2] = src[2]; + dst[3] = src[3]; + dst[4] = src[4]; + dst[5] = src[5]; + dst[6] = src[6]; + dst[7] = src[7]; + } else { + dst[0] = src[7]; + dst[1] = src[6]; + dst[2] = src[5]; + dst[3] = src[4]; + dst[4] = src[3]; + dst[5] = src[2]; + dst[6] = src[1]; + dst[7] = src[0]; + } + return; + case sizeof(float): + assert(sizeof(float) == 4); + if(float_big_endian) { + dst[0] = src[0]; + dst[1] = src[1]; + dst[2] = src[2]; + dst[3] = src[3]; + } else { + dst[0] = src[3]; + dst[1] = src[2]; + dst[2] = src[1]; + dst[3] = src[0]; + } + return; + } +} + +/* + * Encode as Canonical OER. + */ +asn_enc_rval_t +NativeReal_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, + const void *sptr, asn_app_consume_bytes_f *cb, + void *app_key) { + asn_enc_rval_t er = {0, 0, 0}; + + if(!constraints) constraints = td->encoding_constraints.oer_constraints; + if(constraints && constraints->value.width != 0) { + /* X.696 IEEE 754 binary32 and binary64 encoding */ + uint8_t scratch[sizeof(double)]; + const asn_NativeReal_specifics_t *specs = + (const asn_NativeReal_specifics_t *)td->specifics; + size_t wire_size = constraints->value.width; + + if(specs ? (wire_size == specs->float_size) + : (wire_size == sizeof(double))) { + /* + * Our representation matches the wire, modulo endianness. + * That was the whole point of compact encoding! + */ + } else { + assert((wire_size == sizeof(double)) + || (specs && specs->float_size == wire_size)); + ASN__ENCODE_FAILED; + } + + /* + * The X.696 standard doesn't specify endianness, neither is IEEE 754. + * So we assume the network format is big endian. + */ + NativeReal__network_swap(wire_size, sptr, scratch); + if(cb(scratch, wire_size, app_key) < 0) { + ASN__ENCODE_FAILED; + } else { + er.encoded = wire_size; + ASN__ENCODED_OK(er); + } + } else { + double d = NativeReal__get_double(td, sptr); + ssize_t len_len; + REAL_t tmp; + + /* Prepare a temporary clean structure */ + memset(&tmp, 0, sizeof(tmp)); + + if(asn_double2REAL(&tmp, d)) { + ASN__ENCODE_FAILED; + } + + /* Encode a fake REAL */ + len_len = oer_serialize_length(tmp.size, cb, app_key); + if(len_len < 0 || cb(tmp.buf, tmp.size, app_key) < 0) { + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_REAL, &tmp); + ASN__ENCODE_FAILED; + } else { + er.encoded = len_len + tmp.size; + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_REAL, &tmp); + ASN__ENCODED_OK(er); + } + } +} + +asn_dec_rval_t +NativeReal_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **sptr, + const void *ptr, size_t size) { + asn_dec_rval_t ok = {RC_OK, 0}; + double d; + ssize_t len_len; + size_t real_body_len; + + (void)opt_codec_ctx; + + if(!constraints) constraints = td->encoding_constraints.oer_constraints; + if(constraints && constraints->value.width != 0) { + /* X.696 IEEE 754 binary32 and binary64 encoding */ + uint8_t scratch[sizeof(double)]; + size_t wire_size = constraints->value.width; + + if(size < wire_size) + ASN__DECODE_STARVED; + + /* + * The X.696 standard doesn't specify endianness, neither is IEEE 754. + * So we assume the network format is big endian. + */ + NativeReal__network_swap(wire_size, ptr, scratch); + + + switch(wire_size) { + case sizeof(double): + { + double tmp; + memcpy(&tmp, scratch, sizeof(double)); + if(NativeReal__set(td, sptr, tmp) < 0) + ASN__DECODE_FAILED; + } + break; + case sizeof(float): + { + float tmp; + memcpy(&tmp, scratch, sizeof(float)); + if(NativeReal__set(td, sptr, tmp) < 0) + ASN__DECODE_FAILED; + } + break; + default: + ASN__DECODE_FAILED; + } + + ok.consumed = wire_size; + return ok; + } + + len_len = oer_fetch_length(ptr, size, &real_body_len); + if(len_len < 0) ASN__DECODE_FAILED; + if(len_len == 0) ASN__DECODE_STARVED; + + ptr = (const char *)ptr + len_len; + size -= len_len; + + if(real_body_len > size) ASN__DECODE_STARVED; + + { + uint8_t scratch[24]; /* Longer than %.16f in decimal */ + REAL_t tmp; + int ret; + + if(real_body_len < sizeof(scratch)) { + tmp.buf = scratch; + tmp.size = real_body_len; + } else { + /* This rarely happens: impractically long value */ + tmp.buf = CALLOC(1, real_body_len + 1); + tmp.size = real_body_len; + if(!tmp.buf) { + ASN__DECODE_FAILED; + } + } + + memcpy(tmp.buf, ptr, real_body_len); + tmp.buf[real_body_len] = '\0'; + + ret = asn_REAL2double(&tmp, &d); + if(tmp.buf != scratch) FREEMEM(tmp.buf); + if(ret) { + ASN_DEBUG("REAL decoded in %" ASN_PRI_SIZE " bytes, but can't convert t double", + real_body_len); + ASN__DECODE_FAILED; + } + } + + if(NativeReal__set(td, sptr, d) < 0) + ASN__DECODE_FAILED; + + ok.consumed = len_len + real_body_len; + return ok; +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ + +/* + * Decode the chunk of XML text encoding REAL. + */ +asn_dec_rval_t +NativeReal_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + asn_dec_rval_t rval; + REAL_t st = { 0, 0 }; + REAL_t *stp = &st; + + rval = REAL_decode_xer(opt_codec_ctx, td, (void **)&stp, opt_mname, + buf_ptr, size); + if(rval.code == RC_OK) { + double d; + if(asn_REAL2double(&st, &d) || NativeReal__set(td, sptr, d) < 0) { + rval.code = RC_FAIL; + rval.consumed = 0; + } + } else { + /* Convert all errors into RC_FAIL */ + rval.consumed = 0; + } + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_REAL, &st); + return rval; +} + +asn_enc_rval_t +NativeReal_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + double d = NativeReal__get_double(td, sptr); + asn_enc_rval_t er = {0,0,0}; + + (void)ilevel; + + er.encoded = REAL__dump(d, flags & XER_F_CANONICAL, cb, app_key); + if(er.encoded < 0) ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +/* + * REAL specific human-readable output. + */ +int +NativeReal_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + (void)ilevel; /* Unused argument */ + + if(sptr) { + double d = NativeReal__get_double(td, sptr); + return (REAL__dump(d, 0, cb, app_key) < 0) ? -1 : 0; + } else { + return (cb("", 8, app_key) < 0) ? -1 : 0; + } +} + +int +NativeReal_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + + if(aptr && bptr) { + double a = NativeReal__get_double(td, aptr); + double b = NativeReal__get_double(td, bptr); + + /* NaN sorted above everything else */ + if(asn_isnan(a)) { + if(asn_isnan(b)) { + return 0; + } else { + return -1; + } + } else if(asn_isnan(b)) { + return 1; + } + /* Value comparison. */ + if(a < b) { + return -1; + } else if(a > b) { + return 1; + } else { + return 0; + } + } else if(!aptr) { + return -1; + } else { + return 1; + } +} + +void +NativeReal_free(const asn_TYPE_descriptor_t *td, void *ptr, + enum asn_struct_free_method method) { + if(!td || !ptr) + return; + + ASN_DEBUG("Freeing %s as REAL (%d, %p, Native)", + td->name, method, ptr); + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(ptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: { + const asn_NativeReal_specifics_t *specs; + size_t float_size; + specs = (const asn_NativeReal_specifics_t *)td->specifics; + float_size = specs ? specs->float_size : sizeof(double); + memset(ptr, 0, float_size); + } break; + } +} + +asn_random_fill_result_t +NativeReal_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + asn_random_fill_result_t result_ok = {ARFILL_OK, 0}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; +#ifndef INFINITY +#define INFINITY (1.0/0.0) +#endif +#ifndef NAN +#define NAN (0.0/0.0) +#endif + static const double double_values[] = { + -M_E, M_E, -M_PI, M_PI, /* Better precision than with floats */ + -1E+308, 1E+308, + /* 2^51 */ + -2251799813685248.0, 2251799813685248.0, + /* 2^52 */ + -4503599627370496.0, 4503599627370496.0, + /* 2^100 */ + -1267650600228229401496703205376.0, 1267650600228229401496703205376.0, + -DBL_MIN, DBL_MIN, + -DBL_MAX, DBL_MAX, +#ifdef DBL_TRUE_MIN + -DBL_TRUE_MIN, DBL_TRUE_MIN +#endif + }; + static const float float_values[] = { + 0, -0.0, -1, 1, -M_E, M_E, -3.14, 3.14, -M_PI, M_PI, -255, 255, + -FLT_MIN, FLT_MIN, + -FLT_MAX, FLT_MAX, +#ifdef FLT_TRUE_MIN + -FLT_TRUE_MIN, FLT_TRUE_MIN, +#endif + INFINITY, -INFINITY, NAN + }; + ssize_t float_set_size = NativeReal__float_size(td); + const size_t n_doubles = sizeof(double_values) / sizeof(double_values[0]); + const size_t n_floats = sizeof(float_values) / sizeof(float_values[0]); + double d; + + (void)constraints; + + if(max_length == 0) return result_skipped; + + if(float_set_size == sizeof(double) && asn_random_between(0, 1) == 0) { + d = double_values[asn_random_between(0, n_doubles - 1)]; + } else { + d = float_values[asn_random_between(0, n_floats - 1)]; + } + + if(NativeReal__set(td, sptr, d) < 0) { + return result_failed; + } + + result_ok.length = float_set_size; + return result_ok; +} + + +/* + * Local helper functions. + */ + +static size_t +NativeReal__float_size(const asn_TYPE_descriptor_t *td) { + const asn_NativeReal_specifics_t *specs = + (const asn_NativeReal_specifics_t *)td->specifics; + return specs ? specs->float_size : sizeof(double); +} + +static double +NativeReal__get_double(const asn_TYPE_descriptor_t *td, const void *ptr) { + size_t float_size = NativeReal__float_size(td); + if(float_size == sizeof(float)) { + return *(const float *)ptr; + } else { + return *(const double *)ptr; + } +} + +static ssize_t /* Returns -1 or float size. */ +NativeReal__set(const asn_TYPE_descriptor_t *td, void **sptr, double d) { + size_t float_size = NativeReal__float_size(td); + void *native; + + if(!(native = *sptr)) { + native = (*sptr = CALLOC(1, float_size)); + if(!native) { + return -1; + } + } + + if(float_size == sizeof(float)) { + if(asn_double2float(d, (float *)native)) { + return -1; + } + } else { + *(double *)native = d; + } + + return float_size; +} + diff --git a/e2sm/lib/NgENB-ID.c b/e2sm/lib/NgENB-ID.c new file mode 100644 index 0000000..9c538bd --- /dev/null +++ b/e2sm/lib/NgENB-ID.c @@ -0,0 +1,180 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "NgENB-ID.h" + +static int +memb_macroNgENB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_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; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 20)) { + /* 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_shortMacroNgENB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_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; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 18)) { + /* 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_longMacroNgENB_ID_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_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; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 21)) { + /* 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_per_constraints_t asn_PER_memb_macroNgENB_ID_constr_2 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 20, 20 } /* (SIZE(20..20)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_shortMacroNgENB_ID_constr_3 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 18, 18 } /* (SIZE(18..18)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_longMacroNgENB_ID_constr_4 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 21, 21 } /* (SIZE(21..21)) */, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_NgENB_ID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_NgENB_ID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct NgENB_ID, choice.macroNgENB_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_macroNgENB_ID_constr_2, memb_macroNgENB_ID_constraint_1 }, + 0, 0, /* No default value */ + "macroNgENB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct NgENB_ID, choice.shortMacroNgENB_ID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_shortMacroNgENB_ID_constr_3, memb_shortMacroNgENB_ID_constraint_1 }, + 0, 0, /* No default value */ + "shortMacroNgENB-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct NgENB_ID, choice.longMacroNgENB_ID), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, &asn_PER_memb_longMacroNgENB_ID_constr_4, memb_longMacroNgENB_ID_constraint_1 }, + 0, 0, /* No default value */ + "longMacroNgENB-ID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_NgENB_ID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* macroNgENB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* shortMacroNgENB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* longMacroNgENB-ID */ +}; +asn_CHOICE_specifics_t asn_SPC_NgENB_ID_specs_1 = { + sizeof(struct NgENB_ID), + offsetof(struct NgENB_ID, _asn_ctx), + offsetof(struct NgENB_ID, present), + sizeof(((struct NgENB_ID *)0)->present), + asn_MAP_NgENB_ID_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, + 3 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_NgENB_ID = { + "NgENB-ID", + "NgENB-ID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_NgENB_ID_constr_1, CHOICE_constraint }, + asn_MBR_NgENB_ID_1, + 3, /* Elements count */ + &asn_SPC_NgENB_ID_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/NumericString.c b/e2sm/lib/NumericString.c new file mode 100644 index 0000000..ec98ba5 --- /dev/null +++ b/e2sm/lib/NumericString.c @@ -0,0 +1,121 @@ +/*- + * Copyright (c) 2003, 2006 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* + * NumericString basic type description. + */ +static const ber_tlv_tag_t asn_DEF_NumericString_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (18 << 2)), /* [UNIVERSAL 18] IMPLICIT ...*/ + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) /* ... OCTET STRING */ +}; +static int asn_DEF_NumericString_v2c(unsigned int value) { + switch(value) { + case 0x20: return 0; + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: + return value - (0x30 - 1); + } + return -1; +} +static int asn_DEF_NumericString_c2v(unsigned int code) { + if(code > 0) { + if(code <= 10) + return code + (0x30 - 1); + else + return -1; + } else { + return 0x20; + } +} +static asn_per_constraints_t asn_DEF_NumericString_per_constraints = { + { APC_CONSTRAINED, 4, 4, 0x20, 0x39 }, /* Value */ + { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, /* Size */ + asn_DEF_NumericString_v2c, + asn_DEF_NumericString_c2v +}; +asn_TYPE_operation_t asn_OP_NumericString = { + OCTET_STRING_free, + OCTET_STRING_print_utf8, /* ASCII subset */ + OCTET_STRING_compare, + OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_utf8, + OCTET_STRING_encode_xer_utf8, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + OCTET_STRING_decode_oer, + OCTET_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + OCTET_STRING_decode_uper, + OCTET_STRING_encode_uper, + OCTET_STRING_decode_aper, + OCTET_STRING_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + OCTET_STRING_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_NumericString = { + "NumericString", + "NumericString", + &asn_OP_NumericString, + asn_DEF_NumericString_tags, + sizeof(asn_DEF_NumericString_tags) + / sizeof(asn_DEF_NumericString_tags[0]) - 1, + asn_DEF_NumericString_tags, + sizeof(asn_DEF_NumericString_tags) + / sizeof(asn_DEF_NumericString_tags[0]), + { 0, &asn_DEF_NumericString_per_constraints, NumericString_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +int +NumericString_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const NumericString_t *st = (const NumericString_t *)sptr; + + if(st && st->buf) { + uint8_t *buf = st->buf; + uint8_t *end = buf + st->size; + + /* + * Check the alphabet of the NumericString. + * ASN.1:1984 (X.409) + */ + for(; buf < end; buf++) { + switch(*buf) { + case 0x20: + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: + continue; + } + ASN__CTFAIL(app_key, td, sptr, + "%s: value byte %ld (%d) " + "not in NumericString alphabet (%s:%d)", + td->name, + (long)((buf - st->buf) + 1), + *buf, + __FILE__, __LINE__); + return -1; + } + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + return 0; +} diff --git a/e2sm/lib/OBJECT_IDENTIFIER.c b/e2sm/lib/OBJECT_IDENTIFIER.c new file mode 100644 index 0000000..8dccf01 --- /dev/null +++ b/e2sm/lib/OBJECT_IDENTIFIER.c @@ -0,0 +1,656 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include +#include /* for CHAR_BIT */ +#include + +/* + * OBJECT IDENTIFIER basic type description. + */ +static const ber_tlv_tag_t asn_DEF_OBJECT_IDENTIFIER_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (6 << 2)) +}; +asn_TYPE_operation_t asn_OP_OBJECT_IDENTIFIER = { + ASN__PRIMITIVE_TYPE_free, + OBJECT_IDENTIFIER_print, + OCTET_STRING_compare, /* Implemented in terms of a string comparison */ + ber_decode_primitive, + der_encode_primitive, + OBJECT_IDENTIFIER_decode_xer, + OBJECT_IDENTIFIER_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + OBJECT_IDENTIFIER_decode_oer, + OBJECT_IDENTIFIER_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + OCTET_STRING_decode_uper, + OCTET_STRING_encode_uper, + OCTET_STRING_decode_aper, + OCTET_STRING_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + OBJECT_IDENTIFIER_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_OBJECT_IDENTIFIER = { + "OBJECT IDENTIFIER", + "OBJECT_IDENTIFIER", + &asn_OP_OBJECT_IDENTIFIER, + asn_DEF_OBJECT_IDENTIFIER_tags, + sizeof(asn_DEF_OBJECT_IDENTIFIER_tags) + / sizeof(asn_DEF_OBJECT_IDENTIFIER_tags[0]), + asn_DEF_OBJECT_IDENTIFIER_tags, /* Same as above */ + sizeof(asn_DEF_OBJECT_IDENTIFIER_tags) + / sizeof(asn_DEF_OBJECT_IDENTIFIER_tags[0]), + { 0, 0, OBJECT_IDENTIFIER_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +int +OBJECT_IDENTIFIER_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, + void *app_key) { + const OBJECT_IDENTIFIER_t *st = (const OBJECT_IDENTIFIER_t *)sptr; + + if(st && st->buf) { + if(st->size < 1) { + ASN__CTFAIL(app_key, td, sptr, + "%s: at least one numerical value " + "expected (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + return 0; +} + +static ssize_t +OBJECT_IDENTIFIER_get_first_arcs(const uint8_t *arcbuf, size_t arcbuf_len, + asn_oid_arc_t *arc0, asn_oid_arc_t *arc1) { + asn_oid_arc_t value; + + ssize_t rd = OBJECT_IDENTIFIER_get_single_arc(arcbuf, arcbuf_len, &value); + if(rd <= 0) return rd; + + if(value >= 80) { + *arc0 = 2; + *arc1 = value - 80; + } else if(value >= 40) { + *arc0 = 1; + *arc1 = value - 40; + } else { + *arc0 = 0; + *arc1 = value; + } + + return rd; +} + +ssize_t +OBJECT_IDENTIFIER_get_single_arc(const uint8_t *arcbuf, size_t arcbuf_len, + asn_oid_arc_t *ret_value) { + const uint8_t *b = arcbuf; + const uint8_t *arcend = arcbuf + arcbuf_len; /* End of arc */ + + if(arcbuf == arcend) { + return 0; + } else { + asn_oid_arc_t accum; + asn_oid_arc_t upper_limit = (ASN_OID_ARC_MAX >> 7); + /* When the value reaches "upper_limit", it can take */ + /* at most one more digit. If it exceeds "upper_limit" */ + /* but there are more digits - it's an Overflow condition */ + /* Gather all bits into the accumulator */ + for(accum = 0; b < arcend; b++) { + accum = (accum << 7) | (*b & ~0x80); + if((*b & 0x80) == 0) { // no more digits + if(accum <= ASN_OID_ARC_MAX) { + *ret_value = accum; + return 1 + (b - arcbuf); + } else { + errno = ERANGE; /* Overflow */ + return -1; + } + } else { // to make sure we aren't wrapping around + if(accum > upper_limit) { + errno = ERANGE; /* Overflow */ + return -1; + } + } + } + errno = EINVAL; + return -1; + } + +} + +static ssize_t +OBJECT_IDENTIFIER__dump_body(const OBJECT_IDENTIFIER_t *st, + asn_app_consume_bytes_f *cb, void *app_key) { + char scratch[32]; + asn_oid_arc_t arc0, arc1; + size_t produced = 0; + size_t off = 0; + ssize_t rd; + int ret; + + rd = OBJECT_IDENTIFIER_get_first_arcs(st->buf, st->size, &arc0, &arc1); + if(rd <= 0) { + return -1; + } + + ret = snprintf(scratch, sizeof(scratch), "%"PRIu32".%"PRIu32, arc0, arc1); + if(ret >= (ssize_t)sizeof(scratch)) { + return -1; + } + produced += ret; + if(cb(scratch, ret, app_key) < 0) + return -1; + + for(off = rd; ; ) { + asn_oid_arc_t arc; + rd = OBJECT_IDENTIFIER_get_single_arc(st->buf + off, st->size - off, + &arc); + if(rd < 0) { + return -1; + } else if(rd == 0) { + /* No more arcs. */ + break; + } else { + off += rd; + assert(off <= st->size); + ret = snprintf(scratch, sizeof(scratch), ".%" PRIu32, arc); + if(ret >= (ssize_t)sizeof(scratch)) { + return -1; + } + produced += ret; + if(cb(scratch, ret, app_key) < 0) return -1; + } + } + + if(off != st->size) { + ASN_DEBUG("Could not scan to the end of Object Identifier"); + return -1; + } + + return produced; +} + +static enum xer_pbd_rval +OBJECT_IDENTIFIER__xer_body_decode(const asn_TYPE_descriptor_t *td, void *sptr, + const void *chunk_buf, size_t chunk_size) { + OBJECT_IDENTIFIER_t *st = (OBJECT_IDENTIFIER_t *)sptr; + const char *chunk_end = (const char *)chunk_buf + chunk_size; + const char *endptr; + asn_oid_arc_t s_arcs[10]; + asn_oid_arc_t *arcs = s_arcs; + ssize_t num_arcs; + ssize_t ret; + + (void)td; + + num_arcs = OBJECT_IDENTIFIER_parse_arcs( + (const char *)chunk_buf, chunk_size, arcs, + sizeof(s_arcs) / sizeof(s_arcs[0]), &endptr); + if(num_arcs < 0) { + /* Expecting more than zero arcs */ + return XPBD_BROKEN_ENCODING; + } else if(num_arcs == 0) { + return XPBD_NOT_BODY_IGNORE; + } + assert(endptr == chunk_end); + + if((size_t)num_arcs > sizeof(s_arcs)/sizeof(s_arcs[0])) { + arcs = (asn_oid_arc_t *)MALLOC(num_arcs * sizeof(asn_oid_arc_t)); + if(!arcs) return XPBD_SYSTEM_FAILURE; + ret = OBJECT_IDENTIFIER_parse_arcs((const char *)chunk_buf, chunk_size, + arcs, num_arcs, &endptr); + if(ret != num_arcs) + return XPBD_SYSTEM_FAILURE; /* assert?.. */ + } + + /* + * Convert arcs into BER representation. + */ + ret = OBJECT_IDENTIFIER_set_arcs(st, arcs, num_arcs); + if(arcs != s_arcs) FREEMEM(arcs); + + return ret ? XPBD_SYSTEM_FAILURE : XPBD_BODY_CONSUMED; +} + +asn_dec_rval_t +OBJECT_IDENTIFIER_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + return xer_decode_primitive(opt_codec_ctx, td, + sptr, sizeof(OBJECT_IDENTIFIER_t), opt_mname, + buf_ptr, size, OBJECT_IDENTIFIER__xer_body_decode); +} + +asn_enc_rval_t +OBJECT_IDENTIFIER_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const OBJECT_IDENTIFIER_t *st = (const OBJECT_IDENTIFIER_t *)sptr; + asn_enc_rval_t er = {0,0,0}; + + (void)ilevel; + (void)flags; + + if(!st || !st->buf) { + ASN__ENCODE_FAILED; + } + + er.encoded = OBJECT_IDENTIFIER__dump_body(st, cb, app_key); + if(er.encoded < 0) ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +int +OBJECT_IDENTIFIER_print(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, asn_app_consume_bytes_f *cb, + void *app_key) { + const OBJECT_IDENTIFIER_t *st = (const OBJECT_IDENTIFIER_t *)sptr; + + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(!st || !st->buf) + return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* Dump preamble */ + if(cb("{ ", 2, app_key) < 0) + return -1; + + if(OBJECT_IDENTIFIER__dump_body(st, cb, app_key) < 0) { + return -1; + } + + return (cb(" }", 2, app_key) < 0) ? -1 : 0; +} + +ssize_t +OBJECT_IDENTIFIER_get_arcs(const OBJECT_IDENTIFIER_t *st, asn_oid_arc_t *arcs, + size_t arc_slots) { + asn_oid_arc_t arc0, arc1; + size_t num_arcs = 0; + size_t off; + ssize_t rd; + + if(!st || !st->buf) { + errno = EINVAL; + return -1; + } + + rd = OBJECT_IDENTIFIER_get_first_arcs(st->buf, st->size, &arc0, &arc1); + if(rd <= 0) { + return -1; + } + num_arcs = 2; + switch(arc_slots) { + default: + case 2: + arcs[1] = arc1; + /* Fall through */ + case 1: + arcs[0] = arc0; + /* Fall through */ + case 0: + break; + } + + for(off = rd; ; ) { + asn_oid_arc_t arc; + rd = OBJECT_IDENTIFIER_get_single_arc(st->buf + off, st->size - off, + &arc); + if(rd < 0) { + return -1; + } else if(rd == 0) { + /* No more arcs. */ + break; + } else { + off += rd; + if(num_arcs < arc_slots) { + arcs[num_arcs] = arc; + } + num_arcs++; + } + } + + if(off != st->size) { + return -1; + } + + return num_arcs; +} + + +/* + * Save the single value as an object identifier arc. + */ +ssize_t +OBJECT_IDENTIFIER_set_single_arc(uint8_t *arcbuf, size_t arcbuf_len, + asn_oid_arc_t value) { + /* + * The following conditions must hold: + * assert(arcbuf); + */ + uint8_t scratch[((sizeof(value) * CHAR_BIT + 6) / 7)]; + uint8_t *scratch_end = &scratch[sizeof(scratch)-1]; + uint8_t *b; + size_t result_len; + uint8_t mask; + + for(b = scratch_end, mask = 0; ; mask = 0x80, b--) { + *b = mask | (value & 0x7f); + value >>= 7; + if(!value) { + break; + } + } + + result_len = (scratch_end - b) + 1; + + if(result_len > arcbuf_len) { + return -1; + } + + memcpy(arcbuf, b, result_len); + + return result_len; +} + +int +OBJECT_IDENTIFIER_set_arcs(OBJECT_IDENTIFIER_t *st, const asn_oid_arc_t *arcs, + size_t arc_slots) { + uint8_t *buf; + uint8_t *bp; + ssize_t wrote; + asn_oid_arc_t arc0; + asn_oid_arc_t arc1; + size_t size; + size_t i; + + if(!st || !arcs || arc_slots < 2) { + errno = EINVAL; + return -1; + } + + arc0 = arcs[0]; + arc1 = arcs[1]; + + if(arc0 <= 1) { + if(arc1 >= 40) { + /* 8.19.4: At most 39 subsequent values (including 0) */ + errno = ERANGE; + return -1; + } + } else if(arc0 == 2) { + if(arc1 > ASN_OID_ARC_MAX - 80) { + errno = ERANGE; + return -1; + } + } else if(arc0 > 2) { + /* 8.19.4: Only three values are allocated from the root node */ + errno = ERANGE; + return -1; + } + + /* + * After above tests it is known that the value of arc0 is completely + * trustworthy (0..2). However, the arc1's value is still meaningless. + */ + + /* + * Roughly estimate the maximum size necessary to encode these arcs. + * This estimation implicitly takes in account the following facts, + * that cancel each other: + * * the first two arcs are encoded in a single value. + * * the first value may require more space (+1 byte) + * * the value of the first arc which is in range (0..2) + */ + size = ((sizeof(asn_oid_arc_t) * CHAR_BIT + 6) / 7) * arc_slots; + bp = buf = (uint8_t *)MALLOC(size + 1); + if(!buf) { + /* ENOMEM */ + return -1; + } + + wrote = OBJECT_IDENTIFIER_set_single_arc(bp, size, arc0 * 40 + arc1); + if(wrote <= 0) { + FREEMEM(buf); + return -1; + } + assert((size_t)wrote <= size); + bp += wrote; + size -= wrote; + + for(i = 2; i < arc_slots; i++) { + wrote = OBJECT_IDENTIFIER_set_single_arc(bp, size, arcs[i]); + if(wrote <= 0) { + FREEMEM(buf); + return -1; + } + assert((size_t)wrote <= size); + bp += wrote; + size -= wrote; + } + + /* + * Replace buffer. + */ + st->size = bp - buf; + bp = st->buf; + st->buf = buf; + st->buf[st->size] = '\0'; + if(bp) FREEMEM(bp); + + return 0; +} + +ssize_t +OBJECT_IDENTIFIER_parse_arcs(const char *oid_text, ssize_t oid_txt_length, + asn_oid_arc_t *arcs, size_t arcs_count, + const char **opt_oid_text_end) { + size_t num_arcs = 0; + const char *oid_end; + enum { + ST_LEADSPACE, + ST_TAILSPACE, + ST_AFTERVALUE, /* Next character ought to be '.' or a space */ + ST_WAITDIGITS /* Next character is expected to be a digit */ + } state = ST_LEADSPACE; + + if(!oid_text || oid_txt_length < -1 || (arcs_count && !arcs)) { + if(opt_oid_text_end) *opt_oid_text_end = oid_text; + errno = EINVAL; + return -1; + } + + if(oid_txt_length == -1) + oid_txt_length = strlen(oid_text); + +#define _OID_CAPTURE_ARC(oid_text, oid_end) \ + do { \ + const char *endp = oid_end; \ + unsigned long value; \ + switch(asn_strtoul_lim(oid_text, &endp, &value)) { \ + case ASN_STRTOX_EXTRA_DATA: \ + case ASN_STRTOX_OK: \ + if(value <= ASN_OID_ARC_MAX) { \ + if(num_arcs < arcs_count) arcs[num_arcs] = value; \ + num_arcs++; \ + oid_text = endp - 1; \ + break; \ + } \ + /* Fall through */ \ + case ASN_STRTOX_ERROR_RANGE: \ + if(opt_oid_text_end) *opt_oid_text_end = oid_text; \ + errno = ERANGE; \ + return -1; \ + case ASN_STRTOX_ERROR_INVAL: \ + case ASN_STRTOX_EXPECT_MORE: \ + if(opt_oid_text_end) *opt_oid_text_end = oid_text; \ + errno = EINVAL; \ + return -1; \ + } \ + } while(0) + + for(oid_end = oid_text + oid_txt_length; oid_text broken OID */ + return -1; + case ST_LEADSPACE: + case ST_WAITDIGITS: + _OID_CAPTURE_ARC(oid_text, oid_end); + state = ST_AFTERVALUE; + continue; + } + break; + default: + /* Unexpected symbols */ + state = ST_WAITDIGITS; + break; + } /* switch() */ + break; + } /* for() */ + + + if(opt_oid_text_end) *opt_oid_text_end = oid_text; + + /* Finalize last arc */ + switch(state) { + case ST_LEADSPACE: + return 0; /* No OID found in input data */ + case ST_WAITDIGITS: + errno = EINVAL; /* Broken OID */ + return -1; + case ST_AFTERVALUE: + case ST_TAILSPACE: + return num_arcs; + } + + errno = EINVAL; /* Broken OID */ + return -1; +} + +/* + * Generate values from the list of interesting values, or just a random + * value up to the upper limit. + */ +static asn_oid_arc_t +OBJECT_IDENTIFIER__biased_random_arc(asn_oid_arc_t upper_bound) { + const asn_oid_arc_t values[] = {0, 1, 127, 128, 129, 254, 255, 256}; + size_t idx; + + switch(asn_random_between(0, 2)) { + case 0: + idx = asn_random_between(0, sizeof(values) / sizeof(values[0]) - 1); + if(values[idx] < upper_bound) { + return values[idx]; + } + /* Fall through */ + case 1: + return asn_random_between(0, upper_bound); + case 2: + default: + return upper_bound; + } +} + +asn_random_fill_result_t +OBJECT_IDENTIFIER_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + OBJECT_IDENTIFIER_t *st; + asn_oid_arc_t arcs[5]; + size_t arcs_len = asn_random_between(2, 5); + size_t i; + + (void)constraints; + + if(max_length < arcs_len) return result_skipped; + + if(*sptr) { + st = *sptr; + } else { + st = CALLOC(1, sizeof(*st)); + } + + arcs[0] = asn_random_between(0, 2); + arcs[1] = OBJECT_IDENTIFIER__biased_random_arc( + arcs[0] <= 1 ? 39 : (ASN_OID_ARC_MAX - 80)); + for(i = 2; i < arcs_len; i++) { + arcs[i] = OBJECT_IDENTIFIER__biased_random_arc(ASN_OID_ARC_MAX); + } + + if(OBJECT_IDENTIFIER_set_arcs(st, arcs, arcs_len)) { + if(st != *sptr) { + ASN_STRUCT_FREE(*td, st); + } + return result_failed; + } + + *sptr = st; + + result_ok.length = st->size; + return result_ok; +} diff --git a/e2sm/lib/ObjectDescriptor.c b/e2sm/lib/ObjectDescriptor.c new file mode 100644 index 0000000..5d8bfb2 --- /dev/null +++ b/e2sm/lib/ObjectDescriptor.c @@ -0,0 +1,58 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* + * ObjectDescriptor basic type description. + */ +static const ber_tlv_tag_t asn_DEF_ObjectDescriptor_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (7 << 2)), /* [UNIVERSAL 7] IMPLICIT ... */ + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) /* ... OCTET STRING */ +}; +asn_TYPE_operation_t asn_OP_ObjectDescriptor = { + OCTET_STRING_free, + OCTET_STRING_print_utf8, /* Treat as ASCII subset (it's not) */ + OCTET_STRING_compare, + OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_utf8, + OCTET_STRING_encode_xer_utf8, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + 0, + 0, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + OCTET_STRING_decode_uper, + OCTET_STRING_encode_uper, + OCTET_STRING_decode_aper, + OCTET_STRING_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + 0, /* Not supported for ObjectDescriptor */ + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_ObjectDescriptor = { + "ObjectDescriptor", + "ObjectDescriptor", + &asn_OP_ObjectDescriptor, + asn_DEF_ObjectDescriptor_tags, + sizeof(asn_DEF_ObjectDescriptor_tags) + / sizeof(asn_DEF_ObjectDescriptor_tags[0]) - 1, + asn_DEF_ObjectDescriptor_tags, + sizeof(asn_DEF_ObjectDescriptor_tags) + / sizeof(asn_DEF_ObjectDescriptor_tags[0]), + { 0, 0, asn_generic_unknown_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/e2sm/lib/PLMNIdentity.c b/e2sm/lib/PLMNIdentity.c new file mode 100644 index 0000000..d375735 --- /dev/null +++ b/e2sm/lib/PLMNIdentity.c @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "PLMNIdentity.h" + +int +PLMNIdentity_constraint(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 == 3)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_PLMNIdentity_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 3, 3 } /* (SIZE(3..3)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_PLMNIdentity_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_PLMNIdentity = { + "PLMNIdentity", + "PLMNIdentity", + &asn_OP_OCTET_STRING, + asn_DEF_PLMNIdentity_tags_1, + sizeof(asn_DEF_PLMNIdentity_tags_1) + /sizeof(asn_DEF_PLMNIdentity_tags_1[0]), /* 1 */ + asn_DEF_PLMNIdentity_tags_1, /* Same as above */ + sizeof(asn_DEF_PLMNIdentity_tags_1) + /sizeof(asn_DEF_PLMNIdentity_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_PLMNIdentity_constr_1, PLMNIdentity_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/e2sm/lib/QCI.c b/e2sm/lib/QCI.c new file mode 100644 index 0000000..75e4c56 --- /dev/null +++ b/e2sm/lib/QCI.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "QCI.h" + +int +QCI_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_QCI_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_QCI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_QCI = { + "QCI", + "QCI", + &asn_OP_NativeInteger, + asn_DEF_QCI_tags_1, + sizeof(asn_DEF_QCI_tags_1) + /sizeof(asn_DEF_QCI_tags_1[0]), /* 1 */ + asn_DEF_QCI_tags_1, /* Same as above */ + sizeof(asn_DEF_QCI_tags_1) + /sizeof(asn_DEF_QCI_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_QCI_constr_1, QCI_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/e2sm/lib/QoSID.c b/e2sm/lib/QoSID.c new file mode 100644 index 0000000..bae6079 --- /dev/null +++ b/e2sm/lib/QoSID.c @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "QoSID.h" + +static asn_per_constraints_t asn_PER_type_QoSID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_QoSID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct QoSID, choice.fiveGC), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_FiveQI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "fiveGC" + }, + { ATF_NOFLAGS, 0, offsetof(struct QoSID, choice.ePC), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_QCI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ePC" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_QoSID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* fiveGC */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ePC */ +}; +static asn_CHOICE_specifics_t asn_SPC_QoSID_specs_1 = { + sizeof(struct QoSID), + offsetof(struct QoSID, _asn_ctx), + offsetof(struct QoSID, present), + sizeof(((struct QoSID *)0)->present), + asn_MAP_QoSID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_QoSID = { + "QoSID", + "QoSID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_QoSID_constr_1, CHOICE_constraint }, + asn_MBR_QoSID_1, + 2, /* Elements count */ + &asn_SPC_QoSID_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/QosFlowIdentifier.c b/e2sm/lib/QosFlowIdentifier.c new file mode 100644 index 0000000..a24d12a --- /dev/null +++ b/e2sm/lib/QosFlowIdentifier.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "QosFlowIdentifier.h" + +int +QosFlowIdentifier_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 63)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_QosFlowIdentifier_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 6, 6, 0, 63 } /* (0..63,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_QosFlowIdentifier_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_QosFlowIdentifier = { + "QosFlowIdentifier", + "QosFlowIdentifier", + &asn_OP_NativeInteger, + asn_DEF_QosFlowIdentifier_tags_1, + sizeof(asn_DEF_QosFlowIdentifier_tags_1) + /sizeof(asn_DEF_QosFlowIdentifier_tags_1[0]), /* 1 */ + asn_DEF_QosFlowIdentifier_tags_1, /* Same as above */ + sizeof(asn_DEF_QosFlowIdentifier_tags_1) + /sizeof(asn_DEF_QosFlowIdentifier_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_QosFlowIdentifier_constr_1, QosFlowIdentifier_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/e2sm/lib/RANUEID.c b/e2sm/lib/RANUEID.c new file mode 100644 index 0000000..11bbdfe --- /dev/null +++ b/e2sm/lib/RANUEID.c @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "RANUEID.h" + +int +RANUEID_constraint(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 == 8)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RANUEID_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 8, 8 } /* (SIZE(8..8)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_RANUEID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RANUEID = { + "RANUEID", + "RANUEID", + &asn_OP_OCTET_STRING, + asn_DEF_RANUEID_tags_1, + sizeof(asn_DEF_RANUEID_tags_1) + /sizeof(asn_DEF_RANUEID_tags_1[0]), /* 1 */ + asn_DEF_RANUEID_tags_1, /* Same as above */ + sizeof(asn_DEF_RANUEID_tags_1) + /sizeof(asn_DEF_RANUEID_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RANUEID_constr_1, RANUEID_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/e2sm/lib/RANfunction-Name.c b/e2sm/lib/RANfunction-Name.c index 95f6362..cc349e4 100644 --- a/e2sm/lib/RANfunction-Name.c +++ b/e2sm/lib/RANfunction-Name.c @@ -1,8 +1,8 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) - * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #include "RANfunction-Name.h" @@ -214,27 +214,18 @@ static int asn_PER_MAP_ranFunction_Description_4_c2v(unsigned int code) { return -1; return permitted_alphabet_code2value_4[code]; } -static asn_oer_constraints_t asn_OER_memb_ranFunction_ShortName_constr_2 CC_NOTUSED = { - { 0, 0 }, - -1 /* (SIZE(0..MAX)) */}; static asn_per_constraints_t asn_PER_memb_ranFunction_ShortName_constr_2 CC_NOTUSED = { { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, asn_PER_MAP_ranFunction_ShortName_2_v2c, /* Value to PER code map */ asn_PER_MAP_ranFunction_ShortName_2_c2v /* PER code to value map */ }; -static asn_oer_constraints_t asn_OER_memb_ranFunction_E2SM_OID_constr_3 CC_NOTUSED = { - { 0, 0 }, - -1 /* (SIZE(0..MAX)) */}; static asn_per_constraints_t asn_PER_memb_ranFunction_E2SM_OID_constr_3 CC_NOTUSED = { { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, { APC_CONSTRAINED | APC_EXTENSIBLE, 10, 10, 1, 1000 } /* (SIZE(1..1000,...)) */, asn_PER_MAP_ranFunction_E2SM_OID_3_v2c, /* Value to PER code map */ asn_PER_MAP_ranFunction_E2SM_OID_3_c2v /* PER code to value map */ }; -static asn_oer_constraints_t asn_OER_memb_ranFunction_Description_constr_4 CC_NOTUSED = { - { 0, 0 }, - -1 /* (SIZE(0..MAX)) */}; static asn_per_constraints_t asn_PER_memb_ranFunction_Description_constr_4 CC_NOTUSED = { { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, @@ -247,7 +238,7 @@ asn_TYPE_member_t asn_MBR_RANfunction_Name_1[] = { -1, /* IMPLICIT tag at current level */ &asn_DEF_PrintableString, 0, - { &asn_OER_memb_ranFunction_ShortName_constr_2, &asn_PER_memb_ranFunction_ShortName_constr_2, memb_ranFunction_ShortName_constraint_1 }, + { 0, &asn_PER_memb_ranFunction_ShortName_constr_2, memb_ranFunction_ShortName_constraint_1 }, 0, 0, /* No default value */ "ranFunction-ShortName" }, @@ -256,7 +247,7 @@ asn_TYPE_member_t asn_MBR_RANfunction_Name_1[] = { -1, /* IMPLICIT tag at current level */ &asn_DEF_PrintableString, 0, - { &asn_OER_memb_ranFunction_E2SM_OID_constr_3, &asn_PER_memb_ranFunction_E2SM_OID_constr_3, memb_ranFunction_E2SM_OID_constraint_1 }, + { 0, &asn_PER_memb_ranFunction_E2SM_OID_constr_3, memb_ranFunction_E2SM_OID_constraint_1 }, 0, 0, /* No default value */ "ranFunction-E2SM-OID" }, @@ -265,7 +256,7 @@ asn_TYPE_member_t asn_MBR_RANfunction_Name_1[] = { -1, /* IMPLICIT tag at current level */ &asn_DEF_PrintableString, 0, - { &asn_OER_memb_ranFunction_Description_constr_4, &asn_PER_memb_ranFunction_Description_constr_4, memb_ranFunction_Description_constraint_1 }, + { 0, &asn_PER_memb_ranFunction_Description_constr_4, memb_ranFunction_Description_constraint_1 }, 0, 0, /* No default value */ "ranFunction-Description" }, diff --git a/e2sm/lib/REAL.c b/e2sm/lib/REAL.c new file mode 100644 index 0000000..e3daf37 --- /dev/null +++ b/e2sm/lib/REAL.c @@ -0,0 +1,1028 @@ +/*- + * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#define _ISOC99_SOURCE /* For ilogb() and quiet NAN */ +#ifndef _BSD_SOURCE +#define _BSD_SOURCE /* To reintroduce finite(3) */ +#endif +#include +#if defined(__alpha) +#include /* For INFINITY */ +#endif +#include /* for strtod(3) */ +#include +#include +#include +#include +#include + +#undef INT_MAX +#define INT_MAX ((int)(((unsigned int)-1) >> 1)) + +#if !(defined(NAN) || defined(INFINITY)) +static volatile double real_zero CC_NOTUSED = 0.0; +#endif +#ifndef NAN +#define NAN (0.0/0.0) +#endif +#ifndef INFINITY +#define INFINITY (1.0/0.0) +#endif + +#if defined(__clang__) +/* + * isnan() is defined using generic selections and won't compile in + * strict C89 mode because of too fancy system's standard library. + * However, prior to C11 the math had a perfectly working isnan() + * in the math library. + * Disable generic selection warning so we can test C89 mode with newer libc. + */ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wc11-extensions" +static int asn_isnan(double d) { + return isnan(d); +} +static int asn_isfinite(double d) { +#ifdef isfinite + return isfinite(d); /* ISO C99 */ +#else + return finite(d); /* Deprecated on Mac OS X 10.9 */ +#endif +} +#pragma clang diagnostic pop +#else /* !clang */ +#define asn_isnan(v) isnan(v) +#ifdef isfinite +#define asn_isfinite(d) isfinite(d) /* ISO C99 */ +#else +#define asn_isfinite(d) finite(d) /* Deprecated on Mac OS X 10.9 */ +#endif +#endif /* clang */ + +/* + * REAL basic type description. + */ +static const ber_tlv_tag_t asn_DEF_REAL_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)) +}; +asn_TYPE_operation_t asn_OP_REAL = { + ASN__PRIMITIVE_TYPE_free, + REAL_print, + REAL_compare, + ber_decode_primitive, + der_encode_primitive, + REAL_decode_xer, + REAL_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + REAL_decode_oer, + REAL_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + REAL_decode_uper, + REAL_encode_uper, + REAL_decode_aper, + REAL_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + REAL_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_REAL = { + "REAL", + "REAL", + &asn_OP_REAL, + asn_DEF_REAL_tags, + sizeof(asn_DEF_REAL_tags) / sizeof(asn_DEF_REAL_tags[0]), + asn_DEF_REAL_tags, /* Same as above */ + sizeof(asn_DEF_REAL_tags) / sizeof(asn_DEF_REAL_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, + 0, /* No members */ + 0 /* No specifics */ +}; + +typedef enum specialRealValue { + SRV__NOT_A_NUMBER, + SRV__MINUS_INFINITY, + SRV__PLUS_INFINITY +} specialRealValue_e; +static struct specialRealValue_s { + char *string; + size_t length; + long dv; +} specialRealValue[] = { +#define SRV_SET(foo, val) { foo, sizeof(foo) - 1, val } + SRV_SET("", 0), + SRV_SET("", -1), + SRV_SET("", 1), +#undef SRV_SET +}; + +ssize_t +REAL__dump(double d, int canonical, asn_app_consume_bytes_f *cb, void *app_key) { + char local_buf[64]; + char *buf = local_buf; + ssize_t buflen = sizeof(local_buf); + const char *fmt = canonical ? "%.17E" /* Precise */ : "%.15f" /* Pleasant*/; + ssize_t ret; + + /* + * Check whether it is a special value. + */ + /* fpclassify(3) is not portable yet */ + if(asn_isnan(d)) { + buf = specialRealValue[SRV__NOT_A_NUMBER].string; + buflen = specialRealValue[SRV__NOT_A_NUMBER].length; + return (cb(buf, buflen, app_key) < 0) ? -1 : buflen; + } else if(!asn_isfinite(d)) { + if(copysign(1.0, d) < 0.0) { + buf = specialRealValue[SRV__MINUS_INFINITY].string; + buflen = specialRealValue[SRV__MINUS_INFINITY].length; + } else { + buf = specialRealValue[SRV__PLUS_INFINITY].string; + buflen = specialRealValue[SRV__PLUS_INFINITY].length; + } + return (cb(buf, buflen, app_key) < 0) ? -1 : buflen; + } else if(ilogb(d) <= -INT_MAX) { + if(copysign(1.0, d) < 0.0) { + buf = "-0"; + buflen = 2; + } else { + buf = "0"; + buflen = 1; + } + return (cb(buf, buflen, app_key) < 0) ? -1 : buflen; + } + + /* + * Use the libc's double printing, hopefully they got it right. + */ + do { + ret = snprintf(buf, buflen, fmt, d); + if(ret < 0) { + /* There are some old broken APIs. */ + buflen <<= 1; + if(buflen > 4096) { + /* Should be plenty. */ + if(buf != local_buf) FREEMEM(buf); + return -1; + } + } else if(ret >= buflen) { + buflen = ret + 1; + } else { + buflen = ret; + break; + } + if(buf != local_buf) FREEMEM(buf); + buf = (char *)MALLOC(buflen); + if(!buf) return -1; + } while(1); + + if(canonical) { + /* + * Transform the "[-]d.dddE+-dd" output into "[-]d.dddE[-]d" + * Check that snprintf() constructed the output correctly. + */ + char *dot; + char *end = buf + buflen; + char *last_zero; + char *first_zero_in_run; + char *s; + + enum { + LZSTATE_NOTHING, + LZSTATE_ZEROES + } lz_state = LZSTATE_NOTHING; + + dot = (buf[0] == 0x2d /* '-' */) ? (buf + 2) : (buf + 1); + if(*dot >= 0x30) { + if(buf != local_buf) FREEMEM(buf); + errno = EINVAL; + return -1; /* Not a dot, really */ + } + *dot = 0x2e; /* Replace possible comma */ + + for(first_zero_in_run = last_zero = s = dot + 2; s < end; s++) { + switch(*s) { + case 0x45: /* 'E' */ + if(lz_state == LZSTATE_ZEROES) last_zero = first_zero_in_run; + break; + case 0x30: /* '0' */ + if(lz_state == LZSTATE_NOTHING) first_zero_in_run = s; + lz_state = LZSTATE_ZEROES; + continue; + default: + lz_state = LZSTATE_NOTHING; + continue; + } + break; + } + + if(s == end) { + if(buf != local_buf) FREEMEM(buf); + errno = EINVAL; + return -1; /* No promised E */ + } + + assert(*s == 0x45); + { + char *E = s; + char *expptr = ++E; + char *s = expptr; + int sign; + + if(*expptr == 0x2b /* '+' */) { + /* Skip the "+" */ + buflen -= 1; + sign = 0; + } else { + sign = 1; + s++; + } + expptr++; + if(expptr > end) { + if(buf != local_buf) FREEMEM(buf); + errno = EINVAL; + return -1; + } + if(*expptr == 0x30) { + buflen--; + expptr++; + } + if(lz_state == LZSTATE_ZEROES) { + *last_zero = 0x45; /* E */ + buflen -= s - (last_zero + 1); + s = last_zero + 1; + if(sign) { + *s++ = 0x2d /* '-' */; + buflen++; + } + } + for(; expptr <= end; s++, expptr++) + *s = *expptr; + } + } else { + /* + * Remove trailing zeros. + */ + char *end = buf + buflen; + char *last_zero = end; + int stoplooking = 0; + char *z; + for(z = end - 1; z > buf; z--) { + switch(*z) { + case 0x30: + if(!stoplooking) + last_zero = z; + continue; + case 0x31: case 0x32: case 0x33: case 0x34: + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: + stoplooking = 1; + continue; + default: /* Catch dot and other separators */ + /* + * Replace possible comma (which may even + * be not a comma at all: locale-defined). + */ + *z = 0x2e; + if(last_zero == z + 1) { /* leave x.0 */ + last_zero++; + } + buflen = last_zero - buf; + *last_zero = '\0'; + break; + } + break; + } + } + + ret = cb(buf, buflen, app_key); + if(buf != local_buf) FREEMEM(buf); + return (ret < 0) ? -1 : buflen; +} + +int +REAL_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + const REAL_t *st = (const REAL_t *)sptr; + ssize_t ret; + double d; + + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(!st || !st->buf) + ret = cb("", 8, app_key); + else if(asn_REAL2double(st, &d)) + ret = cb("", 7, app_key); + else + ret = REAL__dump(d, 0, cb, app_key); + + return (ret < 0) ? -1 : 0; +} + +int +REAL_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const REAL_t *a = aptr; + const REAL_t *b = bptr; + + (void)td; + + if(a && b) { + double adbl, bdbl; + int ra, rb; + ra = asn_REAL2double(a, &adbl); + rb = asn_REAL2double(b, &bdbl); + if(ra == 0 && rb == 0) { + if(asn_isnan(adbl)) { + if(asn_isnan(bdbl)) { + return 0; + } else { + return -1; + } + } else if(asn_isnan(bdbl)) { + return 1; + } + /* Value comparison. */ + if(adbl < bdbl) { + return -1; + } else if(adbl > bdbl) { + return 1; + } else { + return 0; + } + } else if(ra) { + return -1; + } else { + return 1; + } + } else if(!a) { + return -1; + } else { + return 1; + } +} + +asn_enc_rval_t +REAL_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, + void *app_key) { + const REAL_t *st = (const REAL_t *)sptr; + asn_enc_rval_t er = {0,0,0}; + double d; + + (void)ilevel; + + if(!st || !st->buf || asn_REAL2double(st, &d)) + ASN__ENCODE_FAILED; + + er.encoded = REAL__dump(d, flags & XER_F_CANONICAL, cb, app_key); + if(er.encoded < 0) ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + + +/* + * Decode the chunk of XML text encoding REAL. + */ +static enum xer_pbd_rval +REAL__xer_body_decode(const asn_TYPE_descriptor_t *td, void *sptr, + const void *chunk_buf, size_t chunk_size) { + REAL_t *st = (REAL_t *)sptr; + double value; + const char *xerdata = (const char *)chunk_buf; + char *endptr = 0; + char *b; + + (void)td; + + if(!chunk_size) return XPBD_BROKEN_ENCODING; + + /* + * Decode an XMLSpecialRealValue: , etc. + */ + if(xerdata[0] == 0x3c /* '<' */) { + size_t i; + for(i = 0; i < sizeof(specialRealValue) + / sizeof(specialRealValue[0]); i++) { + struct specialRealValue_s *srv = &specialRealValue[i]; + double dv; + + if(srv->length != chunk_size + || memcmp(srv->string, chunk_buf, chunk_size)) + continue; + + /* + * It could've been done using + * (double)srv->dv / real_zero, + * but it summons fp exception on some platforms. + */ + switch(srv->dv) { + case -1: dv = - INFINITY; break; + case 0: dv = NAN; break; + case 1: dv = INFINITY; break; + default: return XPBD_SYSTEM_FAILURE; + } + + if(asn_double2REAL(st, dv)) + return XPBD_SYSTEM_FAILURE; + + return XPBD_BODY_CONSUMED; + } + ASN_DEBUG("Unknown XMLSpecialRealValue"); + return XPBD_BROKEN_ENCODING; + } + + /* + * Copy chunk into the nul-terminated string, and run strtod. + */ + b = (char *)MALLOC(chunk_size + 1); + if(!b) return XPBD_SYSTEM_FAILURE; + memcpy(b, chunk_buf, chunk_size); + b[chunk_size] = 0; /* nul-terminate */ + + value = strtod(b, &endptr); + FREEMEM(b); + if(endptr == b) return XPBD_BROKEN_ENCODING; + + if(asn_double2REAL(st, value)) + return XPBD_SYSTEM_FAILURE; + + return XPBD_BODY_CONSUMED; +} + +asn_dec_rval_t +REAL_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + return xer_decode_primitive(opt_codec_ctx, td, + sptr, sizeof(REAL_t), opt_mname, + buf_ptr, size, REAL__xer_body_decode); +} + +int +asn_REAL2double(const REAL_t *st, double *dbl_value) { + unsigned int octv; + + if(!st || !st->buf) { + errno = EINVAL; + return -1; + } + + if(st->size == 0) { + *dbl_value = 0; + return 0; + } + + octv = st->buf[0]; /* unsigned byte */ + + switch(octv & 0xC0) { + case 0x40: /* X.690: 8.5.6 a) => 8.5.9 */ + /* "SpecialRealValue" */ + + /* Be liberal in what you accept... + * http://en.wikipedia.org/wiki/Robustness_principle + if(st->size != 1) ... + */ + + switch(st->buf[0]) { + case 0x40: /* 01000000: PLUS-INFINITY */ + *dbl_value = INFINITY; + return 0; + case 0x41: /* 01000001: MINUS-INFINITY */ + *dbl_value = - INFINITY; + return 0; + case 0x42: /* 01000010: NOT-A-NUMBER */ + *dbl_value = NAN; + return 0; + case 0x43: /* 01000011: minus zero */ + *dbl_value = -0.0; + return 0; + } + + errno = EINVAL; + return -1; + case 0x00: { /* X.690: 8.5.7 */ + /* + * Decimal. NR{1,2,3} format from ISO 6093. + * NR1: [ ]*[+-]?[0-9]+ + * NR2: [ ]*[+-]?([0-9]+\.[0-9]*|[0-9]*\.[0-9]+) + * NR3: [ ]*[+-]?([0-9]+\.[0-9]*|[0-9]*\.[0-9]+)[Ee][+-]?[0-9]+ + */ + double d; + char *source = 0; + char *endptr; + int used_malloc = 0; + + if(octv == 0 || (octv & 0x3C)) { + /* Remaining values of bits 6 to 1 are Reserved. */ + errno = EINVAL; + return -1; + } + + /* 1. By contract, an input buffer should be '\0'-terminated. + * OCTET STRING decoder ensures that, as is asn_double2REAL(). + * 2. ISO 6093 specifies COMMA as a possible decimal separator. + * However, strtod() can't always deal with COMMA. + * So her we fix both by reallocating, copying and fixing. + */ + if(st->buf[st->size] != '\0' || memchr(st->buf, ',', st->size)) { + const uint8_t *p, *end; + char *b; + + b = source = (char *)MALLOC(st->size + 1); + if(!source) return -1; + used_malloc = 1; + + /* Copy without the first byte and with 0-termination */ + for(p = st->buf + 1, end = st->buf + st->size; + p < end; b++, p++) + *b = (*p == ',') ? '.' : *p; + *b = '\0'; + } else { + source = (char *)&st->buf[1]; + } + + endptr = source; + d = strtod(source, &endptr); + if(*endptr != '\0') { + /* Format is not consistent with ISO 6093 */ + if(used_malloc) FREEMEM(source); + errno = EINVAL; + return -1; + } + if(used_malloc) FREEMEM(source); + if(asn_isfinite(d)) { + *dbl_value = d; + return 0; + } else { + errno = ERANGE; + return -1; + } + } + } + + /* + * Binary representation. + */ + { + double m; + int32_t expval; /* exponent value */ + unsigned int elen; /* exponent value length, in octets */ + int scaleF; + int baseF; + uint8_t *ptr; + uint8_t *end; + int sign; + + switch((octv & 0x30) >> 4) { + case 0x00: baseF = 1; break; /* base 2 */ + case 0x01: baseF = 3; break; /* base 8 */ + case 0x02: baseF = 4; break; /* base 16 */ + default: + /* Reserved field, can't parse now. */ + errno = EINVAL; + return -1; + } + + sign = (octv & 0x40); /* bit 7 */ + scaleF = (octv & 0x0C) >> 2; /* bits 4 to 3 */ + + if(st->size <= 1 + (octv & 0x03)) { + errno = EINVAL; + return -1; + } + + elen = (octv & 0x03); /* bits 2 to 1; 8.5.6.4 */ + if(elen == 0x03) { /* bits 2 to 1 = 11; 8.5.6.4, case d) */ + elen = st->buf[1]; /* unsigned binary number */ + if(elen == 0 || st->size <= (2 + elen)) { + errno = EINVAL; + return -1; + } + /* FIXME: verify constraints of case d) */ + ptr = &st->buf[2]; + } else { + ptr = &st->buf[1]; + } + + /* Fetch the multibyte exponent */ + expval = (int)(*(int8_t *)ptr); + if(elen >= sizeof(expval)-1) { + errno = ERANGE; + return -1; + } + end = ptr + elen + 1; + for(ptr++; ptr < end; ptr++) + expval = (expval * 256) + *ptr; + + m = 0.0; /* Initial mantissa value */ + + /* Okay, the exponent is here. Now, what about mantissa? */ + end = st->buf + st->size; + for(; ptr < end; ptr++) + m = ldexp(m, 8) + *ptr; + + if(0) + ASN_DEBUG("m=%.10f, scF=%d, bF=%d, expval=%d, ldexp()=%f, ldexp()=%f\n", + m, scaleF, baseF, expval, + ldexp(m, expval * baseF + scaleF), + ldexp(m, scaleF) * pow(pow(2, baseF), expval) + ); + + /* + * (S * N * 2^F) * B^E + * Essentially: + m = ldexp(m, scaleF) * pow(pow(2, baseF), expval); + */ + m = ldexp(m, expval * baseF + scaleF); + if(asn_isfinite(m)) { + *dbl_value = sign ? -m : m; + } else { + errno = ERANGE; + return -1; + } + + } /* if(binary_format) */ + + return 0; +} + +/* + * Assume IEEE 754 floating point: standard 64 bit double. + * [1 bit sign] [11 bits exponent] [52 bits mantissa] + */ +int +asn_double2REAL(REAL_t *st, double dbl_value) { + double test = -0.0; + int float_big_endian = *(const char *)&test != 0; + uint8_t buf[16]; /* More than enough for 8-byte dbl_value */ + uint8_t dscr[sizeof(dbl_value)]; /* double value scratch pad */ + /* Assertion guards: won't even compile, if unexpected double size */ + char assertion_buffer1[9 - sizeof(dbl_value)] CC_NOTUSED; + char assertion_buffer2[sizeof(dbl_value) - 7] CC_NOTUSED; + uint8_t *ptr = buf; + uint8_t *mstop; /* Last byte of mantissa */ + unsigned int mval; /* Value of the last byte of mantissa */ + unsigned int bmsign; /* binary mask with sign */ + unsigned int buflen; + unsigned int accum; + int expval; + + if(!st) { + errno = EINVAL; + return -1; + } + + /* + * ilogb(+-0) returns -INT_MAX or INT_MIN (platform-dependent) + * ilogb(+-inf) returns INT_MAX, logb(+-inf) returns +inf + * ilogb(NaN) returns INT_MIN or INT_MAX (platform-dependent) + */ + expval = ilogb(dbl_value); + if(expval <= -INT_MAX /* Also catches +-0 and maybe isnan() */ + || expval == INT_MAX /* catches isfin() and maybe isnan() */ + ) { + if(!st->buf || st->size < 2) { + ptr = (uint8_t *)MALLOC(2); + if(!ptr) return -1; + if(st->buf) FREEMEM(st->buf); + st->buf = ptr; + } + /* fpclassify(3) is not portable yet */ + if(asn_isnan(dbl_value)) { + st->buf[0] = 0x42; /* NaN */ + st->buf[1] = 0; + st->size = 1; + } else if(!asn_isfinite(dbl_value)) { + if(copysign(1.0, dbl_value) < 0.0) { + st->buf[0] = 0x41; /* MINUS-INFINITY */ + } else { + st->buf[0] = 0x40; /* PLUS-INFINITY */ + } + st->buf[1] = 0; + st->size = 1; + } else { + if(copysign(1.0, dbl_value) >= 0.0) { + /* no content octets: positive zero */ + st->buf[0] = 0; /* JIC */ + st->size = 0; + } else { + /* Negative zero. #8.5.3, 8.5.9 */ + st->buf[0] = 0x43; + st->buf[1] = 0; + st->size = 1; + } + } + return 0; + } + + if(float_big_endian) { + uint8_t *s = ((uint8_t *)&dbl_value) + 1; + uint8_t *end = ((uint8_t *)&dbl_value) + sizeof(double); + uint8_t *d; + + bmsign = 0x80 | ((s[-1] >> 1) & 0x40); /* binary mask & - */ + for(mstop = d = dscr; s < end; d++, s++) { + *d = *s; + if(*d) mstop = d; + } + } else { + uint8_t *s = ((uint8_t *)&dbl_value) + sizeof(dbl_value) - 2; + uint8_t *start = ((uint8_t *)&dbl_value); + uint8_t *d; + + bmsign = 0x80 | ((s[1] >> 1) & 0x40); /* binary mask & - */ + for(mstop = d = dscr; s >= start; d++, s--) { + *d = *s; + if(*d) mstop = d; + } + } + + /* Remove parts of the exponent, leave mantissa and explicit 1. */ + dscr[0] = 0x10 | (dscr[0] & 0x0f); + + /* Adjust exponent in a very unobvious way */ + expval -= 8 * ((mstop - dscr) + 1) - 4; + + /* This loop ensures DER conformance by forcing mantissa odd: 11.3.1 */ + mval = *mstop; + if(mval && !(mval & 1)) { + int shift_count = 1; + int ishift; + uint8_t *mptr; + + /* + * Figure out what needs to be done to make mantissa odd. + */ + if(!(mval & 0x0f)) /* Speed-up a little */ + shift_count = 4; + while(((mval >> shift_count) & 1) == 0) + shift_count++; + + ishift = 8 - shift_count; + accum = 0; + + /* Go over the buffer, shifting it shift_count bits right. */ + for(mptr = dscr; mptr <= mstop; mptr++) { + mval = *mptr; + *mptr = accum | (mval >> shift_count); + accum = mval << ishift; + } + + /* Adjust exponent appropriately. */ + expval += shift_count; + } + + if(expval < 0) { + if((expval >> 7) == -1) { + *ptr++ = bmsign | 0x00; + *ptr++ = expval; + } else if((expval >> 15) == -1) { + *ptr++ = bmsign | 0x01; + *ptr++ = expval >> 8; + *ptr++ = expval; + } else { + *ptr++ = bmsign | 0x02; + *ptr++ = expval >> 16; + *ptr++ = expval >> 8; + *ptr++ = expval; + } + } else if(expval <= 0x7f) { + *ptr++ = bmsign | 0x00; + *ptr++ = expval; + } else if(expval <= 0x7fff) { + *ptr++ = bmsign | 0x01; + *ptr++ = expval >> 8; + *ptr++ = expval; + } else { + assert(expval <= 0x7fffff); + *ptr++ = bmsign | 0x02; + *ptr++ = expval >> 16; + *ptr++ = expval >> 8; + *ptr++ = expval; + } + + buflen = (mstop - dscr) + 1; + memcpy(ptr, dscr, buflen); + ptr += buflen; + buflen = ptr - buf; + + ptr = (uint8_t *)MALLOC(buflen + 1); + if(!ptr) return -1; + + memcpy(ptr, buf, buflen); + buf[buflen] = 0; /* JIC */ + + if(st->buf) FREEMEM(st->buf); + st->buf = ptr; + st->size = buflen; + + return 0; +} + +int CC_ATTR_NO_SANITIZE("float-cast-overflow") +asn_double2float(double d, float *outcome) { + float f = d; + + *outcome = f; + + if(asn_isfinite(d) == asn_isfinite(f)) { + return 0; + } else { + return -1; + } +} + +#ifndef ASN_DISABLE_OER_SUPPORT + +/* + * Encode as Canonical OER + */ +asn_enc_rval_t +REAL_encode_oer(const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, const void *sptr, + asn_app_consume_bytes_f *cb, void *app_key) { + const REAL_t *st = sptr; + asn_enc_rval_t er = {0,0,0}; + ssize_t len_len; + + if(!st || !st->buf || !td) + ASN__ENCODE_FAILED; + + if(!constraints) constraints = td->encoding_constraints.oer_constraints; + if(constraints && constraints->value.width != 0) { + /* If we're constrained to a narrow float/double representation, we + * shouldn't have ended up using REAL. Expecting NativeReal. */ + ASN__ENCODE_FAILED; + } + + /* Encode a fake REAL */ + len_len = oer_serialize_length(st->size, cb, app_key); + if(len_len < 0 || cb(st->buf, st->size, app_key) < 0) { + ASN__ENCODE_FAILED; + } else { + er.encoded = len_len + st->size; + ASN__ENCODED_OK(er); + } +} + +asn_dec_rval_t +REAL_decode_oer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_oer_constraints_t *constraints, void **sptr, + const void *ptr, size_t size) { + asn_dec_rval_t ok = {RC_OK, 0}; + REAL_t *st; + uint8_t *buf; + ssize_t len_len; + size_t real_body_len; + + (void)opt_codec_ctx; + + if(!constraints) constraints = td->encoding_constraints.oer_constraints; + if(constraints && constraints->value.width != 0) { + /* If we're constrained to a narrow float/double representation, we + * shouldn't have ended up using REAL. Expecting NativeReal. */ + ASN__DECODE_FAILED; + } + + len_len = oer_fetch_length(ptr, size, &real_body_len); + if(len_len < 0) ASN__DECODE_FAILED; + if(len_len == 0) ASN__DECODE_STARVED; + + ptr = (const char *)ptr + len_len; + size -= len_len; + + if(real_body_len > size) ASN__DECODE_STARVED; + + buf = CALLOC(1, real_body_len + 1); + if(!buf) ASN__DECODE_FAILED; + + if(!(st = *sptr)) { + st = (*sptr = CALLOC(1, sizeof(REAL_t))); + if(!st) { + FREEMEM(buf); + ASN__DECODE_FAILED; + } + } else { + FREEMEM(st->buf); + } + + memcpy(buf, ptr, real_body_len); + buf[real_body_len] = '\0'; + + st->buf = buf; + st->size = real_body_len; + + ok.consumed = len_len + real_body_len; + return ok; +} + +#endif /* ASN_DISABLE_OER_SUPPORT */ + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +REAL_decode_uper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, void **sptr, + asn_per_data_t *pd) { + (void)constraints; /* No PER visible constraints */ + return OCTET_STRING_decode_uper(opt_codec_ctx, td, 0, sptr, pd); +} + +asn_enc_rval_t +REAL_encode_uper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, const void *sptr, + asn_per_outp_t *po) { + (void)constraints; /* No PER visible constraints */ + return OCTET_STRING_encode_uper(td, 0, sptr, po); +} + +asn_dec_rval_t +REAL_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd) { + (void)constraints; /* No PER visible constraints */ + return OCTET_STRING_decode_aper(opt_codec_ctx, td, 0, sptr, pd); +} + +asn_enc_rval_t +REAL_encode_aper(const asn_TYPE_descriptor_t *td, + const asn_per_constraints_t *constraints, + const void *sptr, asn_per_outp_t *po) { + (void)constraints; /* No PER visible constraints */ + return OCTET_STRING_encode_aper(td, 0, sptr, po); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +asn_random_fill_result_t +REAL_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + static const double values[] = { + 0, -0.0, -1, 1, -M_E, M_E, -3.14, 3.14, -M_PI, M_PI, -255, 255, + /* 2^51 */ + -2251799813685248.0, 2251799813685248.0, + /* 2^52 */ + -4503599627370496.0, 4503599627370496.0, + /* 2^100 */ + -1267650600228229401496703205376.0, 1267650600228229401496703205376.0, + -FLT_MIN, FLT_MIN, + -FLT_MAX, FLT_MAX, + -DBL_MIN, DBL_MIN, + -DBL_MAX, DBL_MAX, +#ifdef FLT_TRUE_MIN + -FLT_TRUE_MIN, FLT_TRUE_MIN, +#endif +#ifdef DBL_TRUE_MIN + -DBL_TRUE_MIN, DBL_TRUE_MIN, +#endif + INFINITY, -INFINITY, NAN}; + REAL_t *st; + double d; + + (void)constraints; + + if(max_length == 0) return result_skipped; + + d = values[asn_random_between(0, sizeof(values) / sizeof(values[0]) - 1)]; + + if(*sptr) { + st = *sptr; + } else { + st = (REAL_t*)(*sptr = CALLOC(1, sizeof(REAL_t))); + if(!st) { + return result_failed; + } + } + + if(asn_double2REAL(st, d)) { + if(st == *sptr) { + ASN_STRUCT_RESET(*td, st); + } else { + ASN_STRUCT_FREE(*td, st); + } + return result_failed; + } + + result_ok.length = st->size; + return result_ok; +} + diff --git a/e2sm/lib/RELATIVE-OID.c b/e2sm/lib/RELATIVE-OID.c new file mode 100644 index 0000000..300dc1a --- /dev/null +++ b/e2sm/lib/RELATIVE-OID.c @@ -0,0 +1,336 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include /* Encoder and decoder of a primitive type */ +#include /* for CHAR_BIT */ +#include + +/* + * RELATIVE-OID basic type description. + */ +static const ber_tlv_tag_t asn_DEF_RELATIVE_OID_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (13 << 2)) +}; +asn_TYPE_operation_t asn_OP_RELATIVE_OID = { + ASN__PRIMITIVE_TYPE_free, + RELATIVE_OID_print, + OCTET_STRING_compare, /* Implemented in terms of opaque comparison */ + ber_decode_primitive, + der_encode_primitive, + RELATIVE_OID_decode_xer, + RELATIVE_OID_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + RELATIVE_OID_decode_oer, + RELATIVE_OID_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + OCTET_STRING_decode_uper, + OCTET_STRING_encode_uper, + OCTET_STRING_decode_aper, + OCTET_STRING_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + RELATIVE_OID_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_RELATIVE_OID = { + "RELATIVE-OID", + "RELATIVE_OID", + &asn_OP_RELATIVE_OID, + asn_DEF_RELATIVE_OID_tags, + sizeof(asn_DEF_RELATIVE_OID_tags) + / sizeof(asn_DEF_RELATIVE_OID_tags[0]), + asn_DEF_RELATIVE_OID_tags, /* Same as above */ + sizeof(asn_DEF_RELATIVE_OID_tags) + / sizeof(asn_DEF_RELATIVE_OID_tags[0]), + { 0, 0, asn_generic_no_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +static ssize_t +RELATIVE_OID__dump_body(const RELATIVE_OID_t *st, asn_app_consume_bytes_f *cb, void *app_key) { + char scratch[32]; + size_t produced = 0; + size_t off = 0; + + for(;;) { + asn_oid_arc_t arc; + ssize_t rd = OBJECT_IDENTIFIER_get_single_arc(st->buf + off, + st->size - off, &arc); + if(rd < 0) { + return -1; + } else if(rd == 0) { + /* No more arcs. */ + break; + } else { + int ret = snprintf(scratch, sizeof(scratch), "%s%" PRIu32, + off ? "." : "", arc); + if(ret >= (ssize_t)sizeof(scratch)) { + return -1; + } + produced += ret; + off += rd; + assert(off <= st->size); + if(cb(scratch, ret, app_key) < 0) return -1; + } + } + + if(off != st->size) { + ASN_DEBUG("Could not scan to the end of Object Identifier"); + return -1; + } + + return produced; +} + +int +RELATIVE_OID_print(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + const RELATIVE_OID_t *st = (const RELATIVE_OID_t *)sptr; + + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(!st || !st->buf) + return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* Dump preamble */ + if(cb("{ ", 2, app_key) < 0) + return -1; + + if(RELATIVE_OID__dump_body(st, cb, app_key) < 0) + return -1; + + return (cb(" }", 2, app_key) < 0) ? -1 : 0; +} + +static enum xer_pbd_rval +RELATIVE_OID__xer_body_decode(const asn_TYPE_descriptor_t *td, void *sptr, + const void *chunk_buf, size_t chunk_size) { + RELATIVE_OID_t *st = (RELATIVE_OID_t *)sptr; + const char *chunk_end = (const char *)chunk_buf + chunk_size; + const char *endptr; + asn_oid_arc_t s_arcs[6]; + asn_oid_arc_t *arcs = s_arcs; + ssize_t num_arcs; + int ret; + + (void)td; + + num_arcs = OBJECT_IDENTIFIER_parse_arcs( + (const char *)chunk_buf, chunk_size, arcs, + sizeof(s_arcs) / sizeof(s_arcs[0]), &endptr); + if(num_arcs < 0) { + /* Expecting at least one arc arcs */ + return XPBD_BROKEN_ENCODING; + } else if(num_arcs == 0) { + return XPBD_NOT_BODY_IGNORE; + } + assert(endptr == chunk_end); + + if((size_t)num_arcs > sizeof(s_arcs) / sizeof(s_arcs[0])) { + arcs = (asn_oid_arc_t *)MALLOC(num_arcs * sizeof(arcs[0])); + if(!arcs) return XPBD_SYSTEM_FAILURE; + ret = OBJECT_IDENTIFIER_parse_arcs((const char *)chunk_buf, chunk_size, + arcs, num_arcs, &endptr); + if(ret != num_arcs) { + return XPBD_SYSTEM_FAILURE; /* assert?.. */ + } + } + + /* + * Convert arcs into BER representation. + */ + ret = RELATIVE_OID_set_arcs(st, arcs, num_arcs); + if(arcs != s_arcs) FREEMEM(arcs); + + return ret ? XPBD_SYSTEM_FAILURE : XPBD_BODY_CONSUMED; +} + +asn_dec_rval_t +RELATIVE_OID_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + return xer_decode_primitive(opt_codec_ctx, td, + sptr, sizeof(RELATIVE_OID_t), opt_mname, + buf_ptr, size, RELATIVE_OID__xer_body_decode); +} + +asn_enc_rval_t +RELATIVE_OID_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const RELATIVE_OID_t *st = (const RELATIVE_OID_t *)sptr; + asn_enc_rval_t er = {0,0,0}; + + (void)ilevel; /* Unused argument */ + (void)flags; /* Unused argument */ + + if(!st || !st->buf) + ASN__ENCODE_FAILED; + + er.encoded = RELATIVE_OID__dump_body(st, cb, app_key); + if(er.encoded < 0) ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +ssize_t +RELATIVE_OID_get_arcs(const RELATIVE_OID_t *st, asn_oid_arc_t *arcs, + size_t arcs_count) { + size_t num_arcs = 0; + size_t off; + + if(!st || !st->buf) { + errno = EINVAL; + return -1; + } + + for(off = 0;;) { + asn_oid_arc_t arc; + ssize_t rd = OBJECT_IDENTIFIER_get_single_arc(st->buf + off, + st->size - off, &arc); + if(rd < 0) { + return -1; + } else if(rd == 0) { + /* No more arcs. */ + break; + } else { + off += rd; + if(num_arcs < arcs_count) { + arcs[num_arcs] = arc; + } + num_arcs++; + } + } + + if(off != st->size) { + return -1; + } + + return num_arcs; +} + +int +RELATIVE_OID_set_arcs(RELATIVE_OID_t *st, const asn_oid_arc_t *arcs, + size_t arcs_count) { + uint8_t *buf; + uint8_t *bp; + size_t size; + size_t i; + + if(!st || !arcs) { + errno = EINVAL; + return -1; + } + + /* + * Roughly estimate the maximum size necessary to encode these arcs. + */ + size = ((sizeof(asn_oid_arc_t) * CHAR_BIT + 6) / 7) * arcs_count; + bp = buf = (uint8_t *)MALLOC(size + 1); + if(!buf) { + /* ENOMEM */ + return -1; + } + + /* + * Encode the arcs. + */ + for(i = 0; i < arcs_count; i++) { + ssize_t wrote = OBJECT_IDENTIFIER_set_single_arc(bp, size, arcs[i]); + if(wrote <= 0) { + FREEMEM(buf); + return -1; + } + assert((size_t)wrote <= size); + bp += wrote; + size -= wrote; + } + + /* + * Replace buffer. + */ + st->size = bp - buf; + bp = st->buf; + st->buf = buf; + st->buf[st->size] = '\0'; + if(bp) FREEMEM(bp); + + return 0; +} + + +/* + * Generate values from the list of interesting values, or just a random value. + */ +static asn_oid_arc_t +RELATIVE_OID__biased_random_arc() { + static const uint16_t values[] = {0, 1, 127, 128, 129, 254, 255, 256}; + + switch(asn_random_between(0, 2)) { + case 0: + return values[asn_random_between( + 0, sizeof(values) / sizeof(values[0]) - 1)]; + case 1: + return asn_random_between(0, UINT_MAX); + case 2: + default: + return UINT_MAX; + } +} + +asn_random_fill_result_t +RELATIVE_OID_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + RELATIVE_OID_t *st; + const int min_arcs = 1; /* A minimum of 1 arc is required */ + asn_oid_arc_t arcs[3]; + size_t arcs_len = + asn_random_between(min_arcs, sizeof(arcs) / sizeof(arcs[0])); + size_t i; + + (void)constraints; + + if(max_length < arcs_len) return result_skipped; + + if(*sptr) { + st = *sptr; + } else { + st = CALLOC(1, sizeof(*st)); + } + + for(i = 0; i < arcs_len; i++) { + arcs[i] = RELATIVE_OID__biased_random_arc(); + } + + if(RELATIVE_OID_set_arcs(st, arcs, arcs_len)) { + if(st != *sptr) { + ASN_STRUCT_FREE(*td, st); + } + return result_failed; + } + + *sptr = st; + + result_ok.length = st->size; + return result_ok; +} diff --git a/e2sm/lib/RIC-EventTriggerStyle-Item.c b/e2sm/lib/RIC-EventTriggerStyle-Item.c new file mode 100644 index 0000000..a6b258d --- /dev/null +++ b/e2sm/lib/RIC-EventTriggerStyle-Item.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "RIC-EventTriggerStyle-Item.h" + +asn_TYPE_member_t asn_MBR_RIC_EventTriggerStyle_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RIC_EventTriggerStyle_Item, ric_EventTriggerStyle_Type), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Style_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-EventTriggerStyle-Type" + }, + { ATF_NOFLAGS, 0, offsetof(struct RIC_EventTriggerStyle_Item, ric_EventTriggerStyle_Name), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Style_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-EventTriggerStyle-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct RIC_EventTriggerStyle_Item, ric_EventTriggerFormat_Type), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Format_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-EventTriggerFormat-Type" + }, +}; +static const ber_tlv_tag_t asn_DEF_RIC_EventTriggerStyle_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RIC_EventTriggerStyle_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-EventTriggerStyle-Type */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ric-EventTriggerStyle-Name */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ric-EventTriggerFormat-Type */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RIC_EventTriggerStyle_Item_specs_1 = { + sizeof(struct RIC_EventTriggerStyle_Item), + offsetof(struct RIC_EventTriggerStyle_Item, _asn_ctx), + asn_MAP_RIC_EventTriggerStyle_Item_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RIC_EventTriggerStyle_Item = { + "RIC-EventTriggerStyle-Item", + "RIC-EventTriggerStyle-Item", + &asn_OP_SEQUENCE, + asn_DEF_RIC_EventTriggerStyle_Item_tags_1, + sizeof(asn_DEF_RIC_EventTriggerStyle_Item_tags_1) + /sizeof(asn_DEF_RIC_EventTriggerStyle_Item_tags_1[0]), /* 1 */ + asn_DEF_RIC_EventTriggerStyle_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RIC_EventTriggerStyle_Item_tags_1) + /sizeof(asn_DEF_RIC_EventTriggerStyle_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RIC_EventTriggerStyle_Item_1, + 3, /* Elements count */ + &asn_SPC_RIC_EventTriggerStyle_Item_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/RIC-Format-Type.c b/e2sm/lib/RIC-Format-Type.c index 481a8db..f34ef41 100644 --- a/e2sm/lib/RIC-Format-Type.c +++ b/e2sm/lib/RIC-Format-Type.c @@ -1,8 +1,8 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) - * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #include "RIC-Format-Type.h" diff --git a/e2sm/lib/RIC-ReportStyle-Item.c b/e2sm/lib/RIC-ReportStyle-Item.c new file mode 100644 index 0000000..c8c63ba --- /dev/null +++ b/e2sm/lib/RIC-ReportStyle-Item.c @@ -0,0 +1,100 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "RIC-ReportStyle-Item.h" + +asn_TYPE_member_t asn_MBR_RIC_ReportStyle_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RIC_ReportStyle_Item, ric_ReportStyle_Type), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Style_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-ReportStyle-Type" + }, + { ATF_NOFLAGS, 0, offsetof(struct RIC_ReportStyle_Item, ric_ReportStyle_Name), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Style_Name, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-ReportStyle-Name" + }, + { ATF_NOFLAGS, 0, offsetof(struct RIC_ReportStyle_Item, ric_ActionFormat_Type), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Format_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-ActionFormat-Type" + }, + { ATF_NOFLAGS, 0, offsetof(struct RIC_ReportStyle_Item, measInfo_Action_List), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasurementInfo_Action_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "measInfo-Action-List" + }, + { ATF_NOFLAGS, 0, offsetof(struct RIC_ReportStyle_Item, ric_IndicationHeaderFormat_Type), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Format_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-IndicationHeaderFormat-Type" + }, + { ATF_NOFLAGS, 0, offsetof(struct RIC_ReportStyle_Item, ric_IndicationMessageFormat_Type), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RIC_Format_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ric-IndicationMessageFormat-Type" + }, +}; +static const ber_tlv_tag_t asn_DEF_RIC_ReportStyle_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RIC_ReportStyle_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ric-ReportStyle-Type */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ric-ReportStyle-Name */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ric-ActionFormat-Type */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* measInfo-Action-List */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* ric-IndicationHeaderFormat-Type */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* ric-IndicationMessageFormat-Type */ +}; +asn_SEQUENCE_specifics_t asn_SPC_RIC_ReportStyle_Item_specs_1 = { + sizeof(struct RIC_ReportStyle_Item), + offsetof(struct RIC_ReportStyle_Item, _asn_ctx), + asn_MAP_RIC_ReportStyle_Item_tag2el_1, + 6, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 6, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RIC_ReportStyle_Item = { + "RIC-ReportStyle-Item", + "RIC-ReportStyle-Item", + &asn_OP_SEQUENCE, + asn_DEF_RIC_ReportStyle_Item_tags_1, + sizeof(asn_DEF_RIC_ReportStyle_Item_tags_1) + /sizeof(asn_DEF_RIC_ReportStyle_Item_tags_1[0]), /* 1 */ + asn_DEF_RIC_ReportStyle_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_RIC_ReportStyle_Item_tags_1) + /sizeof(asn_DEF_RIC_ReportStyle_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RIC_ReportStyle_Item_1, + 6, /* Elements count */ + &asn_SPC_RIC_ReportStyle_Item_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/RIC-Style-Name.c b/e2sm/lib/RIC-Style-Name.c index a8f6a1e..662ada6 100644 --- a/e2sm/lib/RIC-Style-Name.c +++ b/e2sm/lib/RIC-Style-Name.c @@ -1,8 +1,8 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) - * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #include "RIC-Style-Name.h" @@ -80,9 +80,6 @@ static int asn_PER_MAP_RIC_Style_Name_1_c2v(unsigned int code) { * This type is implemented using PrintableString, * so here we adjust the DEF accordingly. */ -static asn_oer_constraints_t asn_OER_type_RIC_Style_Name_constr_1 CC_NOTUSED = { - { 0, 0 }, - -1 /* (SIZE(0..MAX)) */}; asn_per_constraints_t asn_PER_type_RIC_Style_Name_constr_1 CC_NOTUSED = { { APC_CONSTRAINED, 7, 7, 32, 122 } /* (32..122) */, { APC_CONSTRAINED | APC_EXTENSIBLE, 8, 8, 1, 150 } /* (SIZE(1..150,...)) */, @@ -102,7 +99,7 @@ asn_TYPE_descriptor_t asn_DEF_RIC_Style_Name = { asn_DEF_RIC_Style_Name_tags_1, /* Same as above */ sizeof(asn_DEF_RIC_Style_Name_tags_1) /sizeof(asn_DEF_RIC_Style_Name_tags_1[0]), /* 1 */ - { &asn_OER_type_RIC_Style_Name_constr_1, &asn_PER_type_RIC_Style_Name_constr_1, RIC_Style_Name_constraint }, + { 0, &asn_PER_type_RIC_Style_Name_constr_1, RIC_Style_Name_constraint }, 0, 0, /* No members */ 0 /* No specifics */ }; diff --git a/e2sm/lib/RIC-Style-Type.c b/e2sm/lib/RIC-Style-Type.c index c3b8da8..d08e69a 100644 --- a/e2sm/lib/RIC-Style-Type.c +++ b/e2sm/lib/RIC-Style-Type.c @@ -1,8 +1,8 @@ /* * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) - * From ASN.1 module "E2SM-KPM-IEs" - * found in "e2sm-kpm-v01.02.asn" - * `asn1c -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example` + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` */ #include "RIC-Style-Type.h" diff --git a/e2sm/lib/RRC-MessageID.c b/e2sm/lib/RRC-MessageID.c new file mode 100644 index 0000000..8103669 --- /dev/null +++ b/e2sm/lib/RRC-MessageID.c @@ -0,0 +1,114 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "RRC-MessageID.h" + +static asn_per_constraints_t asn_PER_type_rrcType_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_rrcType_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRC_MessageID__rrcType, choice.lTE), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCclass_LTE, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "lTE" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRC_MessageID__rrcType, choice.nR), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCclass_NR, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nR" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_rrcType_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lTE */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nR */ +}; +static asn_CHOICE_specifics_t asn_SPC_rrcType_specs_2 = { + sizeof(struct RRC_MessageID__rrcType), + offsetof(struct RRC_MessageID__rrcType, _asn_ctx), + offsetof(struct RRC_MessageID__rrcType, present), + sizeof(((struct RRC_MessageID__rrcType *)0)->present), + asn_MAP_rrcType_tag2el_2, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_rrcType_2 = { + "rrcType", + "rrcType", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_rrcType_constr_2, CHOICE_constraint }, + asn_MBR_rrcType_2, + 2, /* Elements count */ + &asn_SPC_rrcType_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RRC_MessageID_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRC_MessageID, rrcType), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_rrcType_2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "rrcType" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRC_MessageID, messageID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "messageID" + }, +}; +static const ber_tlv_tag_t asn_DEF_RRC_MessageID_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RRC_MessageID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrcType */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* messageID */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRC_MessageID_specs_1 = { + sizeof(struct RRC_MessageID), + offsetof(struct RRC_MessageID, _asn_ctx), + asn_MAP_RRC_MessageID_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_RRC_MessageID = { + "RRC-MessageID", + "RRC-MessageID", + &asn_OP_SEQUENCE, + asn_DEF_RRC_MessageID_tags_1, + sizeof(asn_DEF_RRC_MessageID_tags_1) + /sizeof(asn_DEF_RRC_MessageID_tags_1[0]), /* 1 */ + asn_DEF_RRC_MessageID_tags_1, /* Same as above */ + sizeof(asn_DEF_RRC_MessageID_tags_1) + /sizeof(asn_DEF_RRC_MessageID_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_RRC_MessageID_1, + 2, /* Elements count */ + &asn_SPC_RRC_MessageID_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/RRCclass-LTE.c b/e2sm/lib/RRCclass-LTE.c new file mode 100644 index 0000000..6310742 --- /dev/null +++ b/e2sm/lib/RRCclass-LTE.c @@ -0,0 +1,75 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "RRCclass-LTE.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RRCclass_LTE_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 11 } /* (0..11,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RRCclass_LTE_value2enum_1[] = { + { 0, 8, "bCCH-BCH" }, + { 1, 13, "bCCH-BCH-MBMS" }, + { 2, 11, "bCCH-DL-SCH" }, + { 3, 14, "bCCH-DL-SCH-BR" }, + { 4, 16, "bCCH-DL-SCH-MBMS" }, + { 5, 4, "mCCH" }, + { 6, 4, "pCCH" }, + { 7, 7, "dL-CCCH" }, + { 8, 7, "dL-DCCH" }, + { 9, 7, "uL-CCCH" }, + { 10, 7, "uL-DCCH" }, + { 11, 7, "sC-MCCH" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RRCclass_LTE_enum2value_1[] = { + 0, /* bCCH-BCH(0) */ + 1, /* bCCH-BCH-MBMS(1) */ + 2, /* bCCH-DL-SCH(2) */ + 3, /* bCCH-DL-SCH-BR(3) */ + 4, /* bCCH-DL-SCH-MBMS(4) */ + 7, /* dL-CCCH(7) */ + 8, /* dL-DCCH(8) */ + 5, /* mCCH(5) */ + 6, /* pCCH(6) */ + 11, /* sC-MCCH(11) */ + 9, /* uL-CCCH(9) */ + 10 /* uL-DCCH(10) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RRCclass_LTE_specs_1 = { + asn_MAP_RRCclass_LTE_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RRCclass_LTE_enum2value_1, /* N => "tag"; sorted by N */ + 12, /* Number of elements in the maps */ + 13, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RRCclass_LTE_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RRCclass_LTE = { + "RRCclass-LTE", + "RRCclass-LTE", + &asn_OP_NativeEnumerated, + asn_DEF_RRCclass_LTE_tags_1, + sizeof(asn_DEF_RRCclass_LTE_tags_1) + /sizeof(asn_DEF_RRCclass_LTE_tags_1[0]), /* 1 */ + asn_DEF_RRCclass_LTE_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCclass_LTE_tags_1) + /sizeof(asn_DEF_RRCclass_LTE_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RRCclass_LTE_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RRCclass_LTE_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/RRCclass-NR.c b/e2sm/lib/RRCclass-NR.c new file mode 100644 index 0000000..e85da53 --- /dev/null +++ b/e2sm/lib/RRCclass-NR.c @@ -0,0 +1,67 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "RRCclass-NR.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_RRCclass_NR_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 7 } /* (0..7,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_RRCclass_NR_value2enum_1[] = { + { 0, 8, "bCCH-BCH" }, + { 1, 11, "bCCH-DL-SCH" }, + { 2, 7, "dL-CCCH" }, + { 3, 7, "dL-DCCH" }, + { 4, 4, "pCCH" }, + { 5, 7, "uL-CCCH" }, + { 6, 8, "uL-CCCH1" }, + { 7, 7, "uL-DCCH" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_RRCclass_NR_enum2value_1[] = { + 0, /* bCCH-BCH(0) */ + 1, /* bCCH-DL-SCH(1) */ + 2, /* dL-CCCH(2) */ + 3, /* dL-DCCH(3) */ + 4, /* pCCH(4) */ + 5, /* uL-CCCH(5) */ + 6, /* uL-CCCH1(6) */ + 7 /* uL-DCCH(7) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_RRCclass_NR_specs_1 = { + asn_MAP_RRCclass_NR_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RRCclass_NR_enum2value_1, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 9, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_RRCclass_NR_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RRCclass_NR = { + "RRCclass-NR", + "RRCclass-NR", + &asn_OP_NativeEnumerated, + asn_DEF_RRCclass_NR_tags_1, + sizeof(asn_DEF_RRCclass_NR_tags_1) + /sizeof(asn_DEF_RRCclass_NR_tags_1[0]), /* 1 */ + asn_DEF_RRCclass_NR_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCclass_NR_tags_1) + /sizeof(asn_DEF_RRCclass_NR_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_RRCclass_NR_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RRCclass_NR_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/S-NSSAI.c b/e2sm/lib/S-NSSAI.c new file mode 100644 index 0000000..f5eadec --- /dev/null +++ b/e2sm/lib/S-NSSAI.c @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "S-NSSAI.h" + +asn_TYPE_member_t asn_MBR_S_NSSAI_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct S_NSSAI, sST), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SST, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sST" + }, + { ATF_POINTER, 1, offsetof(struct S_NSSAI, sD), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SD, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "sD" + }, +}; +static const int asn_MAP_S_NSSAI_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_S_NSSAI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_S_NSSAI_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sST */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sD */ +}; +asn_SEQUENCE_specifics_t asn_SPC_S_NSSAI_specs_1 = { + sizeof(struct S_NSSAI), + offsetof(struct S_NSSAI, _asn_ctx), + asn_MAP_S_NSSAI_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_S_NSSAI_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_S_NSSAI = { + "S-NSSAI", + "S-NSSAI", + &asn_OP_SEQUENCE, + asn_DEF_S_NSSAI_tags_1, + sizeof(asn_DEF_S_NSSAI_tags_1) + /sizeof(asn_DEF_S_NSSAI_tags_1[0]), /* 1 */ + asn_DEF_S_NSSAI_tags_1, /* Same as above */ + sizeof(asn_DEF_S_NSSAI_tags_1) + /sizeof(asn_DEF_S_NSSAI_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_S_NSSAI_1, + 2, /* Elements count */ + &asn_SPC_S_NSSAI_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/SD.c b/e2sm/lib/SD.c new file mode 100644 index 0000000..fcbcce8 --- /dev/null +++ b/e2sm/lib/SD.c @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "SD.h" + +int +SD_constraint(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 == 3)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_SD_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 3, 3 } /* (SIZE(3..3)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_SD_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_SD = { + "SD", + "SD", + &asn_OP_OCTET_STRING, + asn_DEF_SD_tags_1, + sizeof(asn_DEF_SD_tags_1) + /sizeof(asn_DEF_SD_tags_1[0]), /* 1 */ + asn_DEF_SD_tags_1, /* Same as above */ + sizeof(asn_DEF_SD_tags_1) + /sizeof(asn_DEF_SD_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_SD_constr_1, SD_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/e2sm/lib/SST.c b/e2sm/lib/SST.c new file mode 100644 index 0000000..cb7f498 --- /dev/null +++ b/e2sm/lib/SST.c @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "SST.h" + +int +SST_constraint(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 == 1)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_SST_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 1, 1 } /* (SIZE(1..1)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_SST_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_SST = { + "SST", + "SST", + &asn_OP_OCTET_STRING, + asn_DEF_SST_tags_1, + sizeof(asn_DEF_SST_tags_1) + /sizeof(asn_DEF_SST_tags_1[0]), /* 1 */ + asn_DEF_SST_tags_1, /* Same as above */ + sizeof(asn_DEF_SST_tags_1) + /sizeof(asn_DEF_SST_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_SST_constr_1, SST_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/e2sm/lib/ServingCell-ARFCN.c b/e2sm/lib/ServingCell-ARFCN.c new file mode 100644 index 0000000..a4df51f --- /dev/null +++ b/e2sm/lib/ServingCell-ARFCN.c @@ -0,0 +1,63 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "ServingCell-ARFCN.h" + +#include "NR-ARFCN.h" +static asn_per_constraints_t asn_PER_type_ServingCell_ARFCN_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ServingCell_ARFCN_1[] = { + { ATF_POINTER, 0, offsetof(struct ServingCell_ARFCN, choice.nR), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NR_ARFCN, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nR" + }, + { ATF_NOFLAGS, 0, offsetof(struct ServingCell_ARFCN, choice.eUTRA), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_UTRA_ARFCN, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eUTRA" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_ServingCell_ARFCN_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nR */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* eUTRA */ +}; +static asn_CHOICE_specifics_t asn_SPC_ServingCell_ARFCN_specs_1 = { + sizeof(struct ServingCell_ARFCN), + offsetof(struct ServingCell_ARFCN, _asn_ctx), + offsetof(struct ServingCell_ARFCN, present), + sizeof(((struct ServingCell_ARFCN *)0)->present), + asn_MAP_ServingCell_ARFCN_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_ServingCell_ARFCN = { + "ServingCell-ARFCN", + "ServingCell-ARFCN", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_ServingCell_ARFCN_constr_1, CHOICE_constraint }, + asn_MBR_ServingCell_ARFCN_1, + 2, /* Elements count */ + &asn_SPC_ServingCell_ARFCN_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/ServingCell-PCI.c b/e2sm/lib/ServingCell-PCI.c new file mode 100644 index 0000000..349468e --- /dev/null +++ b/e2sm/lib/ServingCell-PCI.c @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "ServingCell-PCI.h" + +static asn_per_constraints_t asn_PER_type_ServingCell_PCI_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ServingCell_PCI_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ServingCell_PCI, choice.nR), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NR_PCI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "nR" + }, + { ATF_NOFLAGS, 0, offsetof(struct ServingCell_PCI, choice.eUTRA), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_UTRA_PCI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eUTRA" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_ServingCell_PCI_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nR */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* eUTRA */ +}; +static asn_CHOICE_specifics_t asn_SPC_ServingCell_PCI_specs_1 = { + sizeof(struct ServingCell_PCI), + offsetof(struct ServingCell_PCI, _asn_ctx), + offsetof(struct ServingCell_PCI, present), + sizeof(((struct ServingCell_PCI *)0)->present), + asn_MAP_ServingCell_PCI_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_ServingCell_PCI = { + "ServingCell-PCI", + "ServingCell-PCI", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_ServingCell_PCI_constr_1, CHOICE_constraint }, + asn_MBR_ServingCell_PCI_1, + 2, /* Elements count */ + &asn_SPC_ServingCell_PCI_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/SubscriberProfileIDforRFP.c b/e2sm/lib/SubscriberProfileIDforRFP.c new file mode 100644 index 0000000..de6ac12 --- /dev/null +++ b/e2sm/lib/SubscriberProfileIDforRFP.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "SubscriberProfileIDforRFP.h" + +int +SubscriberProfileIDforRFP_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 256)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_SubscriberProfileIDforRFP_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED, 8, 8, 1, 256 } /* (1..256) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_SubscriberProfileIDforRFP_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_SubscriberProfileIDforRFP = { + "SubscriberProfileIDforRFP", + "SubscriberProfileIDforRFP", + &asn_OP_NativeInteger, + asn_DEF_SubscriberProfileIDforRFP_tags_1, + sizeof(asn_DEF_SubscriberProfileIDforRFP_tags_1) + /sizeof(asn_DEF_SubscriberProfileIDforRFP_tags_1[0]), /* 1 */ + asn_DEF_SubscriberProfileIDforRFP_tags_1, /* Same as above */ + sizeof(asn_DEF_SubscriberProfileIDforRFP_tags_1) + /sizeof(asn_DEF_SubscriberProfileIDforRFP_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_SubscriberProfileIDforRFP_constr_1, SubscriberProfileIDforRFP_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/e2sm/lib/SupportedSULBandList.c b/e2sm/lib/SupportedSULBandList.c new file mode 100644 index 0000000..94d81c5 --- /dev/null +++ b/e2sm/lib/SupportedSULBandList.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "SupportedSULBandList.h" + +#include "SupportedSULFreqBandItem.h" +asn_per_constraints_t asn_PER_type_SupportedSULBandList_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 0, 32 } /* (SIZE(0..32)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_SupportedSULBandList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SupportedSULFreqBandItem, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_SupportedSULBandList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_SupportedSULBandList_specs_1 = { + sizeof(struct SupportedSULBandList), + offsetof(struct SupportedSULBandList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_SupportedSULBandList = { + "SupportedSULBandList", + "SupportedSULBandList", + &asn_OP_SEQUENCE_OF, + asn_DEF_SupportedSULBandList_tags_1, + sizeof(asn_DEF_SupportedSULBandList_tags_1) + /sizeof(asn_DEF_SupportedSULBandList_tags_1[0]), /* 1 */ + asn_DEF_SupportedSULBandList_tags_1, /* Same as above */ + sizeof(asn_DEF_SupportedSULBandList_tags_1) + /sizeof(asn_DEF_SupportedSULBandList_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_SupportedSULBandList_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_SupportedSULBandList_1, + 1, /* Single element */ + &asn_SPC_SupportedSULBandList_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/SupportedSULFreqBandItem.c b/e2sm/lib/SupportedSULFreqBandItem.c new file mode 100644 index 0000000..4e64674 --- /dev/null +++ b/e2sm/lib/SupportedSULFreqBandItem.c @@ -0,0 +1,80 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "SupportedSULFreqBandItem.h" + +static int +memb_freqBandIndicatorNr_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 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_per_constraints_t asn_PER_memb_freqBandIndicatorNr_constr_2 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 10, 10, 1, 1024 } /* (1..1024,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_SupportedSULFreqBandItem_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SupportedSULFreqBandItem, freqBandIndicatorNr), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, &asn_PER_memb_freqBandIndicatorNr_constr_2, memb_freqBandIndicatorNr_constraint_1 }, + 0, 0, /* No default value */ + "freqBandIndicatorNr" + }, +}; +static const ber_tlv_tag_t asn_DEF_SupportedSULFreqBandItem_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SupportedSULFreqBandItem_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* freqBandIndicatorNr */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SupportedSULFreqBandItem_specs_1 = { + sizeof(struct SupportedSULFreqBandItem), + offsetof(struct SupportedSULFreqBandItem, _asn_ctx), + asn_MAP_SupportedSULFreqBandItem_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SupportedSULFreqBandItem = { + "SupportedSULFreqBandItem", + "SupportedSULFreqBandItem", + &asn_OP_SEQUENCE, + asn_DEF_SupportedSULFreqBandItem_tags_1, + sizeof(asn_DEF_SupportedSULFreqBandItem_tags_1) + /sizeof(asn_DEF_SupportedSULFreqBandItem_tags_1[0]), /* 1 */ + asn_DEF_SupportedSULFreqBandItem_tags_1, /* Same as above */ + sizeof(asn_DEF_SupportedSULFreqBandItem_tags_1) + /sizeof(asn_DEF_SupportedSULFreqBandItem_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SupportedSULFreqBandItem_1, + 1, /* Elements count */ + &asn_SPC_SupportedSULFreqBandItem_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/T61String.c b/e2sm/lib/T61String.c new file mode 100644 index 0000000..d3de88b --- /dev/null +++ b/e2sm/lib/T61String.c @@ -0,0 +1,58 @@ +/*- + * Copyright (c) 2003 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* + * T61String basic type description. + */ +static const ber_tlv_tag_t asn_DEF_T61String_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (20 << 2)), /* [UNIVERSAL 20] IMPLICIT ...*/ + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) /* ... OCTET STRING */ +}; +asn_TYPE_operation_t asn_OP_T61String = { + OCTET_STRING_free, + OCTET_STRING_print, /* non-ascii string */ + OCTET_STRING_compare, + OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_hex, + OCTET_STRING_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + OCTET_STRING_decode_oer, + OCTET_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + OCTET_STRING_decode_uper, + OCTET_STRING_encode_uper, + OCTET_STRING_decode_aper, + OCTET_STRING_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + OCTET_STRING_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_T61String = { + "T61String", + "T61String", + &asn_OP_T61String, + asn_DEF_T61String_tags, + sizeof(asn_DEF_T61String_tags) + / sizeof(asn_DEF_T61String_tags[0]) - 1, + asn_DEF_T61String_tags, + sizeof(asn_DEF_T61String_tags) + / sizeof(asn_DEF_T61String_tags[0]), + { 0, 0, asn_generic_unknown_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/e2sm/lib/TeletexString.c b/e2sm/lib/TeletexString.c new file mode 100644 index 0000000..9756c72 --- /dev/null +++ b/e2sm/lib/TeletexString.c @@ -0,0 +1,194 @@ +/*- + * Copyright (c) 2003, 2006 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* + * TeletexString basic type description. + */ +static const ber_tlv_tag_t asn_DEF_TeletexString_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (20 << 2)), /* [UNIVERSAL 20] IMPLICIT ...*/ + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), /* ... OCTET STRING */ +}; +asn_TYPE_operation_t asn_OP_TeletexString = { + OCTET_STRING_free, + OCTET_STRING_print, /* non-ascii string */ + OCTET_STRING_compare, + OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_hex, + OCTET_STRING_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + OCTET_STRING_decode_oer, + OCTET_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + OCTET_STRING_decode_uper, + OCTET_STRING_encode_uper, + OCTET_STRING_decode_aper, + OCTET_STRING_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + OCTET_STRING_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_TeletexString = { + "TeletexString", + "TeletexString", + &asn_OP_TeletexString, + asn_DEF_TeletexString_tags, + sizeof(asn_DEF_TeletexString_tags) + / sizeof(asn_DEF_TeletexString_tags[0]) - 1, + asn_DEF_TeletexString_tags, + sizeof(asn_DEF_TeletexString_tags) + / sizeof(asn_DEF_TeletexString_tags[0]), + { 0, 0, asn_generic_unknown_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +/* + * Here is a formal attempt at creating a mapping from TeletexString + * (T61String) of the latest ASN.1 standard (X.680:2002) into the Unicode + * character set. -- Lev Walkin + * + * The first thing to keep in mind is that TeletexString (T61String) + * is defined in ASN.1, and is not really a T.61 string. + * The T.61 standard is withdrawn by ITU-T and is no longer an authoritative + * reference. See http://www.itu.int/rec/T-REC-T.61 + * + * The X.680 specifies TeletexString (T61String) as a combination of the + * character sets specified by the registration numbers listed in + * ISO International Register of Coded Character Sets to be used with + * Escape Sequences (ISO-2375): + * 6, 87, 102, 103, 106, 107, 126, 144, 150, 153, 156, 164, 165, 168, + * plus SPACE and DELETE characters. + * In addition to that, the X.680 Table 6 NOTE 2 allows using register entries + * 6 and 156 instead of 102 and 103. + * + * The ISO Register itself is available at http://www.itscj.ipsj.or.jp/ISO-IR/ + * + * #6 is ASCII. http://www.itscj.ipsj.or.jp/ISO-IR/006.pdf + * Escapes into: + * G0: ESC 2/8 4/2 ("(B") + * G1: ESC 2/9 4/2 (")B") + * The range is [0x21 .. 0x7e]. Conversion into Unicode + * is simple, because it has one-to-one correspondence. + * #87 is a "Japanese Graphic Character Set for Information Interchange". + * Is a multiple-byte set of 6877 characters. + * The character set is JIS X 0208-1983 (originally JIS C 6226-1983). + * Escapes into: + * G0: ESC 2/4 4/2 ("$B") + * G1: ESC 2/4 2/9 4/2 ("$)B") + * G2: ESC 2/4 2/10 4/2 ("$*B") + * G3: ESC 2/4 2/11 4/2 ("$+B") + * #102 is "Teletex Primary Set of Graphic Characters" and is almost ASCII. + * Escapes into: + * G0: ESC 2/8 7/5 ("(u") + * G1: ESC 2/9 7/5 (")u") + * G2: ESC 2/10 7/5 ("*u") + * G3: ESC 2/11 7/5 ("+u") + * It is almost identical to ASCII, except for ASCII position for '$' + * (DOLLAR SIGN) is filled with '¤' (CURRENCY SIGN), which is U+00A4. + * Also, ASCII positions for '`', '\', '^', '{', '}', '~' are marked + * as "should not be used". + * #103 is a supplementary set of characters used in combination with #102. + * Escapes into: + * G0: ESC 2/8 7/6 ("(v") + * G1: ESC 2/9 7/6 (")v") + * G2: ESC 2/10 7/6 ("*v") + * G3: ESC 2/11 7/6 ("+v") + * Some characters in that character set are combining characters, + * which can only be restrictively used with certain basic Latin letters. + * It can be thought of as a subset of #156 with the exception of 4/12 + * which is UNDERLINE in #103 and absent in #156. + * #106 is a primary set of control functions, used in combination with #107. + * Escapes into: + * C0: ESC 2/1 4/5 ("!E") + * This set is so short I can list it here: + * 0x08 BS BACKSPACE -- same as Unicode + * 0x0a LF LINE FEED -- same as Unicode + * 0x0c FF FORM FEED -- same as Unicode + * 0x0d CR CARRIAGE RETURN -- same as Unicode + * 0x0e LS1 LOCKING SHIFT ONE + * 0x0f LS0 LOCKING SHIFT ZERO + * 0x19 SS2 SINGLE SHIFT TWO + * 0x1a SUB SUBSTITUTE CHARACTER + * 0x1b ESC ESCAPE -- same as Unicode + * 0x1d SS3 SINGLE SHIFT THREE + * The LS1 and LS0 are two magical functions which, respectively, invoke + * the currently designated G1 or G0 set into positions 2/1 to 7/14 + * The SS2 and SS3, respectively, invoke one character of the + * currently designated set G2 and G3. + * The SUB is wholly equivalent to U+001a (SUBSTITUTE) + * #107 is a supplementary set of control functions, used with #106. + * Escapes into: + * C1: ESC 2/2 4/8 ('"H') + * This set contains three special control codes: + * 0x8b PLD PARTIAL LINE DOWN -- similar to + * 0x8c PLU PARTIAL LINE UP -- sumilar to + * 0x9b CSI CONTROL SEQUENCE INTRODUCER + * This set is so out of world we can probably safely ignore it. + * #126 is a "Right-hand Part of the Latin/Greek Alphabet". + * Comprises of 90 characters, including accented letters. + * Escapes into: + * G1: ESC 2/13 4/6 ("-F") + * G2: ESC 2/14 4/6 (".F") + * G3: ESC 2/15 4/6 ("/F") + * Note: This Registration is a subset of ISO-IR 227. + * #144 is a "Cyrillic part of the Latin/Cyrillic Alphabet". + * Comprises of 95 characters. + * Escapes into: + * G1: ESC 2/13 4/12 ("-L") + * G2: ESC 2/14 4/12 (".L") + * G3: ESC 2/15 4/12 ("/L") + * #150 is a "Greek Primary Set of Graphic Characters". + * Comprises of 94 characters. + * Escapes into: + * G0: ESC 2/8 2/1 4/0 ("(!@") + * G1: ESC 2/9 2/1 4/0 (")!@") + * G2: ESC 2/10 2/1 4/0 ("*!@") + * G3: ESC 2/11 2/1 4/0 ("+!@") + * #153 is a "Basic Cyrillic Character Set for 8-bit codes". + * Comprises of 68 characters. + * Escapes into: + * G1: ESC 2/13 4/15 ("-O") + * G2: ESC 2/14 4/15 (".O") + * G3: ESC 2/15 4/15 ("/O") + * #156 is a "Supplementary Set of ISO/IEC 6937:1992" for use with #6 + * Comprises of 87 characters. + * Escapes into: + * G1: ESC 2/13 5/2 ("-R") + * G2: ESC 2/14 5/2 (".R") + * G3: ESC 2/15 5/2 ("/R") + * #164 is a "Hebrew Supplementary Set of Graphic Characters" + * Comprises of 27 characters. + * Escapes into: + * G1: ESC 2/13 5/3 ("-S") + * G2: ESC 2/14 5/3 (".S") + * G3: ESC 2/15 5/3 ("/S") + * #165 is a set of "Codes of the Chinese graphic character set" + * Is a multiple-byte set of 8446 characters. + * Escapes into: + * G0: ESC 2/4 2/8 4/5 ("$(E") + * G1: ESC 2/4 2/9 4/5 ("$)E") + * G2: ESC 2/4 2/10 4/5 ("$*E") + * G3: ESC 2/4 2/11 4/5 ("$+E") + * #168 is a "Japanese Graphic Character Set for Information Interchange" + * A multiple-byte set of 6879 characters updated from #87. + * Escapes into: + * G0: ESC 2/6 4/0 ESC 2/4 4/2 ("&@" "$B") + * G1: ESC 2/6 4/0 ESC 2/4 2/9 4/2 ("&@" "$)B") + * G2: ESC 2/6 4/0 ESC 2/4 2/10 4/2 ("&@" "$*B") + * G3: ESC 2/6 4/0 ESC 2/4 2/11 4/2 ("&@" "$+B") + */ + diff --git a/e2sm/lib/TestCond-Expression.c b/e2sm/lib/TestCond-Expression.c new file mode 100644 index 0000000..808341d --- /dev/null +++ b/e2sm/lib/TestCond-Expression.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "TestCond-Expression.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_TestCond_Expression_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 4 } /* (0..4,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_TestCond_Expression_value2enum_1[] = { + { 0, 5, "equal" }, + { 1, 11, "greaterthan" }, + { 2, 8, "lessthan" }, + { 3, 8, "contains" }, + { 4, 7, "present" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_TestCond_Expression_enum2value_1[] = { + 3, /* contains(3) */ + 0, /* equal(0) */ + 1, /* greaterthan(1) */ + 2, /* lessthan(2) */ + 4 /* present(4) */ + /* This list is extensible */ +}; +const asn_INTEGER_specifics_t asn_SPC_TestCond_Expression_specs_1 = { + asn_MAP_TestCond_Expression_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_TestCond_Expression_enum2value_1, /* N => "tag"; sorted by N */ + 5, /* Number of elements in the maps */ + 6, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_TestCond_Expression_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TestCond_Expression = { + "TestCond-Expression", + "TestCond-Expression", + &asn_OP_NativeEnumerated, + asn_DEF_TestCond_Expression_tags_1, + sizeof(asn_DEF_TestCond_Expression_tags_1) + /sizeof(asn_DEF_TestCond_Expression_tags_1[0]), /* 1 */ + asn_DEF_TestCond_Expression_tags_1, /* Same as above */ + sizeof(asn_DEF_TestCond_Expression_tags_1) + /sizeof(asn_DEF_TestCond_Expression_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_TestCond_Expression_constr_1, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_TestCond_Expression_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/TestCond-Type.c b/e2sm/lib/TestCond-Type.c new file mode 100644 index 0000000..103efdf --- /dev/null +++ b/e2sm/lib/TestCond-Type.c @@ -0,0 +1,378 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "TestCond-Type.h" + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static asn_per_constraints_t asn_PER_type_gBR_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_per_constraints_t asn_PER_type_aMBR_constr_5 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_per_constraints_t asn_PER_type_isStat_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 */ +}; +static asn_per_constraints_t asn_PER_type_isCatM_constr_11 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_per_constraints_t asn_PER_type_rSRP_constr_14 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_per_constraints_t asn_PER_type_rSRQ_constr_17 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_per_constraints_t asn_PER_type_TestCond_Type_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 5 } /* (0..5,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_gBR_value2enum_2[] = { + { 0, 4, "true" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_gBR_enum2value_2[] = { + 0 /* true(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_gBR_specs_2 = { + asn_MAP_gBR_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_gBR_enum2value_2, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_gBR_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_gBR_2 = { + "gBR", + "gBR", + &asn_OP_NativeEnumerated, + asn_DEF_gBR_tags_2, + sizeof(asn_DEF_gBR_tags_2) + /sizeof(asn_DEF_gBR_tags_2[0]) - 1, /* 1 */ + asn_DEF_gBR_tags_2, /* Same as above */ + sizeof(asn_DEF_gBR_tags_2) + /sizeof(asn_DEF_gBR_tags_2[0]), /* 2 */ + { 0, &asn_PER_type_gBR_constr_2, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_gBR_specs_2 /* Additional specs */ +}; + +static const asn_INTEGER_enum_map_t asn_MAP_aMBR_value2enum_5[] = { + { 0, 4, "true" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_aMBR_enum2value_5[] = { + 0 /* true(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_aMBR_specs_5 = { + asn_MAP_aMBR_value2enum_5, /* "tag" => N; sorted by tag */ + asn_MAP_aMBR_enum2value_5, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_aMBR_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_aMBR_5 = { + "aMBR", + "aMBR", + &asn_OP_NativeEnumerated, + asn_DEF_aMBR_tags_5, + sizeof(asn_DEF_aMBR_tags_5) + /sizeof(asn_DEF_aMBR_tags_5[0]) - 1, /* 1 */ + asn_DEF_aMBR_tags_5, /* Same as above */ + sizeof(asn_DEF_aMBR_tags_5) + /sizeof(asn_DEF_aMBR_tags_5[0]), /* 2 */ + { 0, &asn_PER_type_aMBR_constr_5, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_aMBR_specs_5 /* Additional specs */ +}; + +static const asn_INTEGER_enum_map_t asn_MAP_isStat_value2enum_8[] = { + { 0, 4, "true" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_isStat_enum2value_8[] = { + 0 /* true(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_isStat_specs_8 = { + asn_MAP_isStat_value2enum_8, /* "tag" => N; sorted by tag */ + asn_MAP_isStat_enum2value_8, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_isStat_tags_8[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_isStat_8 = { + "isStat", + "isStat", + &asn_OP_NativeEnumerated, + asn_DEF_isStat_tags_8, + sizeof(asn_DEF_isStat_tags_8) + /sizeof(asn_DEF_isStat_tags_8[0]) - 1, /* 1 */ + asn_DEF_isStat_tags_8, /* Same as above */ + sizeof(asn_DEF_isStat_tags_8) + /sizeof(asn_DEF_isStat_tags_8[0]), /* 2 */ + { 0, &asn_PER_type_isStat_constr_8, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_isStat_specs_8 /* Additional specs */ +}; + +static const asn_INTEGER_enum_map_t asn_MAP_isCatM_value2enum_11[] = { + { 0, 4, "true" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_isCatM_enum2value_11[] = { + 0 /* true(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_isCatM_specs_11 = { + asn_MAP_isCatM_value2enum_11, /* "tag" => N; sorted by tag */ + asn_MAP_isCatM_enum2value_11, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_isCatM_tags_11[] = { + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_isCatM_11 = { + "isCatM", + "isCatM", + &asn_OP_NativeEnumerated, + asn_DEF_isCatM_tags_11, + sizeof(asn_DEF_isCatM_tags_11) + /sizeof(asn_DEF_isCatM_tags_11[0]) - 1, /* 1 */ + asn_DEF_isCatM_tags_11, /* Same as above */ + sizeof(asn_DEF_isCatM_tags_11) + /sizeof(asn_DEF_isCatM_tags_11[0]), /* 2 */ + { 0, &asn_PER_type_isCatM_constr_11, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_isCatM_specs_11 /* Additional specs */ +}; + +static const asn_INTEGER_enum_map_t asn_MAP_rSRP_value2enum_14[] = { + { 0, 4, "true" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_rSRP_enum2value_14[] = { + 0 /* true(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_rSRP_specs_14 = { + asn_MAP_rSRP_value2enum_14, /* "tag" => N; sorted by tag */ + asn_MAP_rSRP_enum2value_14, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_rSRP_tags_14[] = { + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_rSRP_14 = { + "rSRP", + "rSRP", + &asn_OP_NativeEnumerated, + asn_DEF_rSRP_tags_14, + sizeof(asn_DEF_rSRP_tags_14) + /sizeof(asn_DEF_rSRP_tags_14[0]) - 1, /* 1 */ + asn_DEF_rSRP_tags_14, /* Same as above */ + sizeof(asn_DEF_rSRP_tags_14) + /sizeof(asn_DEF_rSRP_tags_14[0]), /* 2 */ + { 0, &asn_PER_type_rSRP_constr_14, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_rSRP_specs_14 /* Additional specs */ +}; + +static const asn_INTEGER_enum_map_t asn_MAP_rSRQ_value2enum_17[] = { + { 0, 4, "true" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_rSRQ_enum2value_17[] = { + 0 /* true(0) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_rSRQ_specs_17 = { + asn_MAP_rSRQ_value2enum_17, /* "tag" => N; sorted by tag */ + asn_MAP_rSRQ_enum2value_17, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 2, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_rSRQ_tags_17[] = { + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_rSRQ_17 = { + "rSRQ", + "rSRQ", + &asn_OP_NativeEnumerated, + asn_DEF_rSRQ_tags_17, + sizeof(asn_DEF_rSRQ_tags_17) + /sizeof(asn_DEF_rSRQ_tags_17[0]) - 1, /* 1 */ + asn_DEF_rSRQ_tags_17, /* Same as above */ + sizeof(asn_DEF_rSRQ_tags_17) + /sizeof(asn_DEF_rSRQ_tags_17[0]), /* 2 */ + { 0, &asn_PER_type_rSRQ_constr_17, NativeEnumerated_constraint }, + 0, 0, /* Defined elsewhere */ + &asn_SPC_rSRQ_specs_17 /* Additional specs */ +}; + +asn_TYPE_member_t asn_MBR_TestCond_Type_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct TestCond_Type, choice.gBR), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_gBR_2, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gBR" + }, + { ATF_NOFLAGS, 0, offsetof(struct TestCond_Type, choice.aMBR), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_aMBR_5, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "aMBR" + }, + { ATF_NOFLAGS, 0, offsetof(struct TestCond_Type, choice.isStat), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_isStat_8, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "isStat" + }, + { ATF_NOFLAGS, 0, offsetof(struct TestCond_Type, choice.isCatM), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_isCatM_11, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "isCatM" + }, + { ATF_NOFLAGS, 0, offsetof(struct TestCond_Type, choice.rSRP), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_rSRP_14, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "rSRP" + }, + { ATF_NOFLAGS, 0, offsetof(struct TestCond_Type, choice.rSRQ), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_rSRQ_17, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "rSRQ" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_TestCond_Type_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gBR */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* aMBR */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* isStat */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* isCatM */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* rSRP */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* rSRQ */ +}; +asn_CHOICE_specifics_t asn_SPC_TestCond_Type_specs_1 = { + sizeof(struct TestCond_Type), + offsetof(struct TestCond_Type, _asn_ctx), + offsetof(struct TestCond_Type, present), + sizeof(((struct TestCond_Type *)0)->present), + asn_MAP_TestCond_Type_tag2el_1, + 6, /* Count of tags in the map */ + 0, 0, + 6 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_TestCond_Type = { + "TestCond-Type", + "TestCond-Type", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_TestCond_Type_constr_1, CHOICE_constraint }, + asn_MBR_TestCond_Type_1, + 6, /* Elements count */ + &asn_SPC_TestCond_Type_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/TestCond-Value.c b/e2sm/lib/TestCond-Value.c new file mode 100644 index 0000000..0b6a55d --- /dev/null +++ b/e2sm/lib/TestCond-Value.c @@ -0,0 +1,102 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "TestCond-Value.h" + +asn_per_constraints_t asn_PER_type_TestCond_Value_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 5 } /* (0..5,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_TestCond_Value_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct TestCond_Value, choice.valueInt), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "valueInt" + }, + { ATF_NOFLAGS, 0, offsetof(struct TestCond_Value, choice.valueEnum), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "valueEnum" + }, + { ATF_NOFLAGS, 0, offsetof(struct TestCond_Value, choice.valueBool), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "valueBool" + }, + { ATF_NOFLAGS, 0, offsetof(struct TestCond_Value, choice.valueBitS), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "valueBitS" + }, + { ATF_NOFLAGS, 0, offsetof(struct TestCond_Value, choice.valueOctS), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "valueOctS" + }, + { ATF_NOFLAGS, 0, offsetof(struct TestCond_Value, choice.valuePrtS), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PrintableString, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "valuePrtS" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_TestCond_Value_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* valueInt */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* valueEnum */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* valueBool */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* valueBitS */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* valueOctS */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* valuePrtS */ +}; +asn_CHOICE_specifics_t asn_SPC_TestCond_Value_specs_1 = { + sizeof(struct TestCond_Value), + offsetof(struct TestCond_Value, _asn_ctx), + offsetof(struct TestCond_Value, present), + sizeof(((struct TestCond_Value *)0)->present), + asn_MAP_TestCond_Value_tag2el_1, + 6, /* Count of tags in the map */ + 0, 0, + 6 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_TestCond_Value = { + "TestCond-Value", + "TestCond-Value", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_TestCond_Value_constr_1, CHOICE_constraint }, + asn_MBR_TestCond_Value_1, + 6, /* Elements count */ + &asn_SPC_TestCond_Value_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/TestCondInfo.c b/e2sm/lib/TestCondInfo.c new file mode 100644 index 0000000..6b5be85 --- /dev/null +++ b/e2sm/lib/TestCondInfo.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "TestCondInfo.h" + +asn_TYPE_member_t asn_MBR_TestCondInfo_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct TestCondInfo, testType), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_TestCond_Type, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "testType" + }, + { ATF_NOFLAGS, 0, offsetof(struct TestCondInfo, testExpr), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TestCond_Expression, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "testExpr" + }, + { ATF_NOFLAGS, 0, offsetof(struct TestCondInfo, testValue), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_TestCond_Value, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "testValue" + }, +}; +static const ber_tlv_tag_t asn_DEF_TestCondInfo_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_TestCondInfo_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* testType */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* testExpr */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* testValue */ +}; +asn_SEQUENCE_specifics_t asn_SPC_TestCondInfo_specs_1 = { + sizeof(struct TestCondInfo), + offsetof(struct TestCondInfo, _asn_ctx), + asn_MAP_TestCondInfo_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 3, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_TestCondInfo = { + "TestCondInfo", + "TestCondInfo", + &asn_OP_SEQUENCE, + asn_DEF_TestCondInfo_tags_1, + sizeof(asn_DEF_TestCondInfo_tags_1) + /sizeof(asn_DEF_TestCondInfo_tags_1[0]), /* 1 */ + asn_DEF_TestCondInfo_tags_1, /* Same as above */ + sizeof(asn_DEF_TestCondInfo_tags_1) + /sizeof(asn_DEF_TestCondInfo_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_TestCondInfo_1, + 3, /* Elements count */ + &asn_SPC_TestCondInfo_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/TimeStamp.c b/e2sm/lib/TimeStamp.c new file mode 100644 index 0000000..36a5f47 --- /dev/null +++ b/e2sm/lib/TimeStamp.c @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-KPM-IEs" + * found in "kpmv2.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "TimeStamp.h" + +int +TimeStamp_constraint(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 == 4)) { + /* Constraint check succeeded */ + return 0; + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +asn_per_constraints_t asn_PER_type_TimeStamp_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 4, 4 } /* (SIZE(4..4)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_TimeStamp_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TimeStamp = { + "TimeStamp", + "TimeStamp", + &asn_OP_OCTET_STRING, + asn_DEF_TimeStamp_tags_1, + sizeof(asn_DEF_TimeStamp_tags_1) + /sizeof(asn_DEF_TimeStamp_tags_1[0]), /* 1 */ + asn_DEF_TimeStamp_tags_1, /* Same as above */ + sizeof(asn_DEF_TimeStamp_tags_1) + /sizeof(asn_DEF_TimeStamp_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_TimeStamp_constr_1, TimeStamp_constraint }, + 0, 0, /* No members */ + &asn_SPC_OCTET_STRING_specs /* Additional specs */ +}; + diff --git a/e2sm/lib/UEID-EN-GNB.c b/e2sm/lib/UEID-EN-GNB.c new file mode 100644 index 0000000..16c48e6 --- /dev/null +++ b/e2sm/lib/UEID-EN-GNB.c @@ -0,0 +1,103 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "UEID-EN-GNB.h" + +#include "UEID-GNB-CU-CP-E1AP-ID-List.h" +asn_TYPE_member_t asn_MBR_UEID_EN_GNB_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UEID_EN_GNB, m_eNB_UE_X2AP_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ENB_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "m-eNB-UE-X2AP-ID" + }, + { ATF_POINTER, 1, offsetof(struct UEID_EN_GNB, m_eNB_UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ENB_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "m-eNB-UE-X2AP-ID-Extension" + }, + { ATF_NOFLAGS, 0, offsetof(struct UEID_EN_GNB, globalENB_ID), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "globalENB-ID" + }, + { ATF_POINTER, 3, offsetof(struct UEID_EN_GNB, gNB_CU_UE_F1AP_ID), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_UE_F1AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-UE-F1AP-ID" + }, + { ATF_POINTER, 2, offsetof(struct UEID_EN_GNB, gNB_CU_CP_UE_E1AP_ID_List), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UEID_GNB_CU_CP_E1AP_ID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-CP-UE-E1AP-ID-List" + }, + { ATF_POINTER, 1, offsetof(struct UEID_EN_GNB, ran_UEID), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANUEID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ran-UEID" + }, +}; +static const int asn_MAP_UEID_EN_GNB_oms_1[] = { 1, 3, 4, 5 }; +static const ber_tlv_tag_t asn_DEF_UEID_EN_GNB_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UEID_EN_GNB_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* m-eNB-UE-X2AP-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* m-eNB-UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* globalENB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* gNB-CU-UE-F1AP-ID */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* gNB-CU-CP-UE-E1AP-ID-List */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* ran-UEID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UEID_EN_GNB_specs_1 = { + sizeof(struct UEID_EN_GNB), + offsetof(struct UEID_EN_GNB, _asn_ctx), + asn_MAP_UEID_EN_GNB_tag2el_1, + 6, /* Count of tags in the map */ + asn_MAP_UEID_EN_GNB_oms_1, /* Optional members */ + 4, 0, /* Root/Additions */ + 6, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UEID_EN_GNB = { + "UEID-EN-GNB", + "UEID-EN-GNB", + &asn_OP_SEQUENCE, + asn_DEF_UEID_EN_GNB_tags_1, + sizeof(asn_DEF_UEID_EN_GNB_tags_1) + /sizeof(asn_DEF_UEID_EN_GNB_tags_1[0]), /* 1 */ + asn_DEF_UEID_EN_GNB_tags_1, /* Same as above */ + sizeof(asn_DEF_UEID_EN_GNB_tags_1) + /sizeof(asn_DEF_UEID_EN_GNB_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UEID_EN_GNB_1, + 6, /* Elements count */ + &asn_SPC_UEID_EN_GNB_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/UEID-ENB.c b/e2sm/lib/UEID-ENB.c new file mode 100644 index 0000000..4897f16 --- /dev/null +++ b/e2sm/lib/UEID-ENB.c @@ -0,0 +1,93 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "UEID-ENB.h" + +#include "GlobalENB-ID.h" +asn_TYPE_member_t asn_MBR_UEID_ENB_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UEID_ENB, mME_UE_S1AP_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MME_UE_S1AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "mME-UE-S1AP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct UEID_ENB, gUMMEI), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GUMMEI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gUMMEI" + }, + { ATF_POINTER, 3, offsetof(struct UEID_ENB, m_eNB_UE_X2AP_ID), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ENB_UE_X2AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "m-eNB-UE-X2AP-ID" + }, + { ATF_POINTER, 2, offsetof(struct UEID_ENB, m_eNB_UE_X2AP_ID_Extension), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ENB_UE_X2AP_ID_Extension, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "m-eNB-UE-X2AP-ID-Extension" + }, + { ATF_POINTER, 1, offsetof(struct UEID_ENB, globalENB_ID), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "globalENB-ID" + }, +}; +static const int asn_MAP_UEID_ENB_oms_1[] = { 2, 3, 4 }; +static const ber_tlv_tag_t asn_DEF_UEID_ENB_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UEID_ENB_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* mME-UE-S1AP-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gUMMEI */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* m-eNB-UE-X2AP-ID */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* m-eNB-UE-X2AP-ID-Extension */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* globalENB-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UEID_ENB_specs_1 = { + sizeof(struct UEID_ENB), + offsetof(struct UEID_ENB, _asn_ctx), + asn_MAP_UEID_ENB_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_UEID_ENB_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + 5, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UEID_ENB = { + "UEID-ENB", + "UEID-ENB", + &asn_OP_SEQUENCE, + asn_DEF_UEID_ENB_tags_1, + sizeof(asn_DEF_UEID_ENB_tags_1) + /sizeof(asn_DEF_UEID_ENB_tags_1[0]), /* 1 */ + asn_DEF_UEID_ENB_tags_1, /* Same as above */ + sizeof(asn_DEF_UEID_ENB_tags_1) + /sizeof(asn_DEF_UEID_ENB_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UEID_ENB_1, + 5, /* Elements count */ + &asn_SPC_UEID_ENB_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/UEID-GNB-CU-CP-E1AP-ID-Item.c b/e2sm/lib/UEID-GNB-CU-CP-E1AP-ID-Item.c new file mode 100644 index 0000000..05cfbc3 --- /dev/null +++ b/e2sm/lib/UEID-GNB-CU-CP-E1AP-ID-Item.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "UEID-GNB-CU-CP-E1AP-ID-Item.h" + +asn_TYPE_member_t asn_MBR_UEID_GNB_CU_CP_E1AP_ID_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UEID_GNB_CU_CP_E1AP_ID_Item, gNB_CU_CP_UE_E1AP_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_CP_UE_E1AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-CP-UE-E1AP-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_UEID_GNB_CU_CP_E1AP_ID_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UEID_GNB_CU_CP_E1AP_ID_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* gNB-CU-CP-UE-E1AP-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UEID_GNB_CU_CP_E1AP_ID_Item_specs_1 = { + sizeof(struct UEID_GNB_CU_CP_E1AP_ID_Item), + offsetof(struct UEID_GNB_CU_CP_E1AP_ID_Item, _asn_ctx), + asn_MAP_UEID_GNB_CU_CP_E1AP_ID_Item_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UEID_GNB_CU_CP_E1AP_ID_Item = { + "UEID-GNB-CU-CP-E1AP-ID-Item", + "UEID-GNB-CU-CP-E1AP-ID-Item", + &asn_OP_SEQUENCE, + asn_DEF_UEID_GNB_CU_CP_E1AP_ID_Item_tags_1, + sizeof(asn_DEF_UEID_GNB_CU_CP_E1AP_ID_Item_tags_1) + /sizeof(asn_DEF_UEID_GNB_CU_CP_E1AP_ID_Item_tags_1[0]), /* 1 */ + asn_DEF_UEID_GNB_CU_CP_E1AP_ID_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_UEID_GNB_CU_CP_E1AP_ID_Item_tags_1) + /sizeof(asn_DEF_UEID_GNB_CU_CP_E1AP_ID_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UEID_GNB_CU_CP_E1AP_ID_Item_1, + 1, /* Elements count */ + &asn_SPC_UEID_GNB_CU_CP_E1AP_ID_Item_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/UEID-GNB-CU-CP-E1AP-ID-List.c b/e2sm/lib/UEID-GNB-CU-CP-E1AP-ID-List.c new file mode 100644 index 0000000..427847d --- /dev/null +++ b/e2sm/lib/UEID-GNB-CU-CP-E1AP-ID-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "UEID-GNB-CU-CP-E1AP-ID-List.h" + +#include "UEID-GNB-CU-CP-E1AP-ID-Item.h" +asn_per_constraints_t asn_PER_type_UEID_GNB_CU_CP_E1AP_ID_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 16, 16, 1, 65535 } /* (SIZE(1..65535)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_UEID_GNB_CU_CP_E1AP_ID_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UEID_GNB_CU_CP_E1AP_ID_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_UEID_GNB_CU_CP_E1AP_ID_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_UEID_GNB_CU_CP_E1AP_ID_List_specs_1 = { + sizeof(struct UEID_GNB_CU_CP_E1AP_ID_List), + offsetof(struct UEID_GNB_CU_CP_E1AP_ID_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_UEID_GNB_CU_CP_E1AP_ID_List = { + "UEID-GNB-CU-CP-E1AP-ID-List", + "UEID-GNB-CU-CP-E1AP-ID-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_UEID_GNB_CU_CP_E1AP_ID_List_tags_1, + sizeof(asn_DEF_UEID_GNB_CU_CP_E1AP_ID_List_tags_1) + /sizeof(asn_DEF_UEID_GNB_CU_CP_E1AP_ID_List_tags_1[0]), /* 1 */ + asn_DEF_UEID_GNB_CU_CP_E1AP_ID_List_tags_1, /* Same as above */ + sizeof(asn_DEF_UEID_GNB_CU_CP_E1AP_ID_List_tags_1) + /sizeof(asn_DEF_UEID_GNB_CU_CP_E1AP_ID_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_UEID_GNB_CU_CP_E1AP_ID_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_UEID_GNB_CU_CP_E1AP_ID_List_1, + 1, /* Single element */ + &asn_SPC_UEID_GNB_CU_CP_E1AP_ID_List_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/UEID-GNB-CU-CP-F1AP-ID-Item.c b/e2sm/lib/UEID-GNB-CU-CP-F1AP-ID-Item.c new file mode 100644 index 0000000..4c1cedd --- /dev/null +++ b/e2sm/lib/UEID-GNB-CU-CP-F1AP-ID-Item.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "UEID-GNB-CU-CP-F1AP-ID-Item.h" + +asn_TYPE_member_t asn_MBR_UEID_GNB_CU_CP_F1AP_ID_Item_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UEID_GNB_CU_CP_F1AP_ID_Item, gNB_CU_UE_F1AP_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_UE_F1AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-UE-F1AP-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_UEID_GNB_CU_CP_F1AP_ID_Item_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UEID_GNB_CU_CP_F1AP_ID_Item_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* gNB-CU-UE-F1AP-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UEID_GNB_CU_CP_F1AP_ID_Item_specs_1 = { + sizeof(struct UEID_GNB_CU_CP_F1AP_ID_Item), + offsetof(struct UEID_GNB_CU_CP_F1AP_ID_Item, _asn_ctx), + asn_MAP_UEID_GNB_CU_CP_F1AP_ID_Item_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UEID_GNB_CU_CP_F1AP_ID_Item = { + "UEID-GNB-CU-CP-F1AP-ID-Item", + "UEID-GNB-CU-CP-F1AP-ID-Item", + &asn_OP_SEQUENCE, + asn_DEF_UEID_GNB_CU_CP_F1AP_ID_Item_tags_1, + sizeof(asn_DEF_UEID_GNB_CU_CP_F1AP_ID_Item_tags_1) + /sizeof(asn_DEF_UEID_GNB_CU_CP_F1AP_ID_Item_tags_1[0]), /* 1 */ + asn_DEF_UEID_GNB_CU_CP_F1AP_ID_Item_tags_1, /* Same as above */ + sizeof(asn_DEF_UEID_GNB_CU_CP_F1AP_ID_Item_tags_1) + /sizeof(asn_DEF_UEID_GNB_CU_CP_F1AP_ID_Item_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UEID_GNB_CU_CP_F1AP_ID_Item_1, + 1, /* Elements count */ + &asn_SPC_UEID_GNB_CU_CP_F1AP_ID_Item_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/UEID-GNB-CU-F1AP-ID-List.c b/e2sm/lib/UEID-GNB-CU-F1AP-ID-List.c new file mode 100644 index 0000000..578eedc --- /dev/null +++ b/e2sm/lib/UEID-GNB-CU-F1AP-ID-List.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "UEID-GNB-CU-F1AP-ID-List.h" + +#include "UEID-GNB-CU-CP-F1AP-ID-Item.h" +asn_per_constraints_t asn_PER_type_UEID_GNB_CU_F1AP_ID_List_constr_1 CC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 2, 2, 1, 4 } /* (SIZE(1..4)) */, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_UEID_GNB_CU_F1AP_ID_List_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UEID_GNB_CU_CP_F1AP_ID_Item, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_UEID_GNB_CU_F1AP_ID_List_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_SET_OF_specifics_t asn_SPC_UEID_GNB_CU_F1AP_ID_List_specs_1 = { + sizeof(struct UEID_GNB_CU_F1AP_ID_List), + offsetof(struct UEID_GNB_CU_F1AP_ID_List, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_UEID_GNB_CU_F1AP_ID_List = { + "UEID-GNB-CU-F1AP-ID-List", + "UEID-GNB-CU-F1AP-ID-List", + &asn_OP_SEQUENCE_OF, + asn_DEF_UEID_GNB_CU_F1AP_ID_List_tags_1, + sizeof(asn_DEF_UEID_GNB_CU_F1AP_ID_List_tags_1) + /sizeof(asn_DEF_UEID_GNB_CU_F1AP_ID_List_tags_1[0]), /* 1 */ + asn_DEF_UEID_GNB_CU_F1AP_ID_List_tags_1, /* Same as above */ + sizeof(asn_DEF_UEID_GNB_CU_F1AP_ID_List_tags_1) + /sizeof(asn_DEF_UEID_GNB_CU_F1AP_ID_List_tags_1[0]), /* 1 */ + { 0, &asn_PER_type_UEID_GNB_CU_F1AP_ID_List_constr_1, SEQUENCE_OF_constraint }, + asn_MBR_UEID_GNB_CU_F1AP_ID_List_1, + 1, /* Single element */ + &asn_SPC_UEID_GNB_CU_F1AP_ID_List_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/UEID-GNB-CU-UP.c b/e2sm/lib/UEID-GNB-CU-UP.c new file mode 100644 index 0000000..d8f4b1c --- /dev/null +++ b/e2sm/lib/UEID-GNB-CU-UP.c @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "UEID-GNB-CU-UP.h" + +asn_TYPE_member_t asn_MBR_UEID_GNB_CU_UP_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UEID_GNB_CU_UP, gNB_CU_CP_UE_E1AP_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_CP_UE_E1AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-CP-UE-E1AP-ID" + }, + { ATF_POINTER, 1, offsetof(struct UEID_GNB_CU_UP, ran_UEID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANUEID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ran-UEID" + }, +}; +static const int asn_MAP_UEID_GNB_CU_UP_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_UEID_GNB_CU_UP_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UEID_GNB_CU_UP_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB-CU-CP-UE-E1AP-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ran-UEID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UEID_GNB_CU_UP_specs_1 = { + sizeof(struct UEID_GNB_CU_UP), + offsetof(struct UEID_GNB_CU_UP, _asn_ctx), + asn_MAP_UEID_GNB_CU_UP_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_UEID_GNB_CU_UP_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UEID_GNB_CU_UP = { + "UEID-GNB-CU-UP", + "UEID-GNB-CU-UP", + &asn_OP_SEQUENCE, + asn_DEF_UEID_GNB_CU_UP_tags_1, + sizeof(asn_DEF_UEID_GNB_CU_UP_tags_1) + /sizeof(asn_DEF_UEID_GNB_CU_UP_tags_1[0]), /* 1 */ + asn_DEF_UEID_GNB_CU_UP_tags_1, /* Same as above */ + sizeof(asn_DEF_UEID_GNB_CU_UP_tags_1) + /sizeof(asn_DEF_UEID_GNB_CU_UP_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UEID_GNB_CU_UP_1, + 2, /* Elements count */ + &asn_SPC_UEID_GNB_CU_UP_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/UEID-GNB-DU.c b/e2sm/lib/UEID-GNB-DU.c new file mode 100644 index 0000000..3b2eae6 --- /dev/null +++ b/e2sm/lib/UEID-GNB-DU.c @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "UEID-GNB-DU.h" + +asn_TYPE_member_t asn_MBR_UEID_GNB_DU_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UEID_GNB_DU, gNB_CU_UE_F1AP_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GNB_CU_UE_F1AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-UE-F1AP-ID" + }, + { ATF_POINTER, 1, offsetof(struct UEID_GNB_DU, ran_UEID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANUEID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ran-UEID" + }, +}; +static const int asn_MAP_UEID_GNB_DU_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_UEID_GNB_DU_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UEID_GNB_DU_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB-CU-UE-F1AP-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ran-UEID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UEID_GNB_DU_specs_1 = { + sizeof(struct UEID_GNB_DU), + offsetof(struct UEID_GNB_DU, _asn_ctx), + asn_MAP_UEID_GNB_DU_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_UEID_GNB_DU_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UEID_GNB_DU = { + "UEID-GNB-DU", + "UEID-GNB-DU", + &asn_OP_SEQUENCE, + asn_DEF_UEID_GNB_DU_tags_1, + sizeof(asn_DEF_UEID_GNB_DU_tags_1) + /sizeof(asn_DEF_UEID_GNB_DU_tags_1[0]), /* 1 */ + asn_DEF_UEID_GNB_DU_tags_1, /* Same as above */ + sizeof(asn_DEF_UEID_GNB_DU_tags_1) + /sizeof(asn_DEF_UEID_GNB_DU_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UEID_GNB_DU_1, + 2, /* Elements count */ + &asn_SPC_UEID_GNB_DU_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/UEID-GNB.c b/e2sm/lib/UEID-GNB.c new file mode 100644 index 0000000..812dbf0 --- /dev/null +++ b/e2sm/lib/UEID-GNB.c @@ -0,0 +1,126 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "UEID-GNB.h" + +#include "UEID-GNB-CU-F1AP-ID-List.h" +#include "UEID-GNB-CU-CP-E1AP-ID-List.h" +#include "GlobalGNB-ID.h" +#include "GlobalNGRANNodeID.h" +asn_TYPE_member_t asn_MBR_UEID_GNB_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UEID_GNB, amf_UE_NGAP_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AMF_UE_NGAP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "amf-UE-NGAP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct UEID_GNB, guami), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GUAMI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "guami" + }, + { ATF_POINTER, 6, offsetof(struct UEID_GNB, gNB_CU_UE_F1AP_ID_List), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UEID_GNB_CU_F1AP_ID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-UE-F1AP-ID-List" + }, + { ATF_POINTER, 5, offsetof(struct UEID_GNB, gNB_CU_CP_UE_E1AP_ID_List), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UEID_GNB_CU_CP_E1AP_ID_List, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-CP-UE-E1AP-ID-List" + }, + { ATF_POINTER, 4, offsetof(struct UEID_GNB, ran_UEID), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RANUEID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ran-UEID" + }, + { ATF_POINTER, 3, offsetof(struct UEID_GNB, m_NG_RAN_UE_XnAP_ID), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NG_RANnodeUEXnAPID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "m-NG-RAN-UE-XnAP-ID" + }, + { ATF_POINTER, 2, offsetof(struct UEID_GNB, globalGNB_ID), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalGNB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "globalGNB-ID" + }, + { ATF_POINTER, 1, offsetof(struct UEID_GNB, globalNG_RANNode_ID), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_GlobalNGRANNodeID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "globalNG-RANNode-ID" + }, +}; +static const int asn_MAP_UEID_GNB_oms_1[] = { 2, 3, 4, 5, 6, 7 }; +static const ber_tlv_tag_t asn_DEF_UEID_GNB_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UEID_GNB_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* amf-UE-NGAP-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* guami */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* gNB-CU-UE-F1AP-ID-List */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* gNB-CU-CP-UE-E1AP-ID-List */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* ran-UEID */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* m-NG-RAN-UE-XnAP-ID */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* globalGNB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* globalNG-RANNode-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UEID_GNB_specs_1 = { + sizeof(struct UEID_GNB), + offsetof(struct UEID_GNB, _asn_ctx), + asn_MAP_UEID_GNB_tag2el_1, + 8, /* Count of tags in the map */ + asn_MAP_UEID_GNB_oms_1, /* Optional members */ + 5, 1, /* Root/Additions */ + 7, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UEID_GNB = { + "UEID-GNB", + "UEID-GNB", + &asn_OP_SEQUENCE, + asn_DEF_UEID_GNB_tags_1, + sizeof(asn_DEF_UEID_GNB_tags_1) + /sizeof(asn_DEF_UEID_GNB_tags_1[0]), /* 1 */ + asn_DEF_UEID_GNB_tags_1, /* Same as above */ + sizeof(asn_DEF_UEID_GNB_tags_1) + /sizeof(asn_DEF_UEID_GNB_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UEID_GNB_1, + 8, /* Elements count */ + &asn_SPC_UEID_GNB_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/UEID-NG-ENB-DU.c b/e2sm/lib/UEID-NG-ENB-DU.c new file mode 100644 index 0000000..36a652d --- /dev/null +++ b/e2sm/lib/UEID-NG-ENB-DU.c @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "UEID-NG-ENB-DU.h" + +asn_TYPE_member_t asn_MBR_UEID_NG_ENB_DU_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UEID_NG_ENB_DU, ng_eNB_CU_UE_W1AP_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NGENB_CU_UE_W1AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ng-eNB-CU-UE-W1AP-ID" + }, +}; +static const ber_tlv_tag_t asn_DEF_UEID_NG_ENB_DU_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UEID_NG_ENB_DU_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ng-eNB-CU-UE-W1AP-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UEID_NG_ENB_DU_specs_1 = { + sizeof(struct UEID_NG_ENB_DU), + offsetof(struct UEID_NG_ENB_DU, _asn_ctx), + asn_MAP_UEID_NG_ENB_DU_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UEID_NG_ENB_DU = { + "UEID-NG-ENB-DU", + "UEID-NG-ENB-DU", + &asn_OP_SEQUENCE, + asn_DEF_UEID_NG_ENB_DU_tags_1, + sizeof(asn_DEF_UEID_NG_ENB_DU_tags_1) + /sizeof(asn_DEF_UEID_NG_ENB_DU_tags_1[0]), /* 1 */ + asn_DEF_UEID_NG_ENB_DU_tags_1, /* Same as above */ + sizeof(asn_DEF_UEID_NG_ENB_DU_tags_1) + /sizeof(asn_DEF_UEID_NG_ENB_DU_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UEID_NG_ENB_DU_1, + 1, /* Elements count */ + &asn_SPC_UEID_NG_ENB_DU_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/UEID-NG-ENB.c b/e2sm/lib/UEID-NG-ENB.c new file mode 100644 index 0000000..cf9fd1e --- /dev/null +++ b/e2sm/lib/UEID-NG-ENB.c @@ -0,0 +1,104 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "UEID-NG-ENB.h" + +#include "GlobalNgENB-ID.h" +#include "GlobalNGRANNodeID.h" +asn_TYPE_member_t asn_MBR_UEID_NG_ENB_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UEID_NG_ENB, amf_UE_NGAP_ID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AMF_UE_NGAP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "amf-UE-NGAP-ID" + }, + { ATF_NOFLAGS, 0, offsetof(struct UEID_NG_ENB, guami), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GUAMI, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "guami" + }, + { ATF_POINTER, 4, offsetof(struct UEID_NG_ENB, ng_eNB_CU_UE_W1AP_ID), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NGENB_CU_UE_W1AP_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ng-eNB-CU-UE-W1AP-ID" + }, + { ATF_POINTER, 3, offsetof(struct UEID_NG_ENB, m_NG_RAN_UE_XnAP_ID), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NG_RANnodeUEXnAPID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "m-NG-RAN-UE-XnAP-ID" + }, + { ATF_POINTER, 2, offsetof(struct UEID_NG_ENB, globalNgENB_ID), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_GlobalNgENB_ID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "globalNgENB-ID" + }, + { ATF_POINTER, 1, offsetof(struct UEID_NG_ENB, globalNG_RANNode_ID), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_GlobalNGRANNodeID, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "globalNG-RANNode-ID" + }, +}; +static const int asn_MAP_UEID_NG_ENB_oms_1[] = { 2, 3, 4, 5 }; +static const ber_tlv_tag_t asn_DEF_UEID_NG_ENB_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UEID_NG_ENB_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* amf-UE-NGAP-ID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* guami */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ng-eNB-CU-UE-W1AP-ID */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* m-NG-RAN-UE-XnAP-ID */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* globalNgENB-ID */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* globalNG-RANNode-ID */ +}; +asn_SEQUENCE_specifics_t asn_SPC_UEID_NG_ENB_specs_1 = { + sizeof(struct UEID_NG_ENB), + offsetof(struct UEID_NG_ENB, _asn_ctx), + asn_MAP_UEID_NG_ENB_tag2el_1, + 6, /* Count of tags in the map */ + asn_MAP_UEID_NG_ENB_oms_1, /* Optional members */ + 3, 1, /* Root/Additions */ + 5, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_UEID_NG_ENB = { + "UEID-NG-ENB", + "UEID-NG-ENB", + &asn_OP_SEQUENCE, + asn_DEF_UEID_NG_ENB_tags_1, + sizeof(asn_DEF_UEID_NG_ENB_tags_1) + /sizeof(asn_DEF_UEID_NG_ENB_tags_1[0]), /* 1 */ + asn_DEF_UEID_NG_ENB_tags_1, /* Same as above */ + sizeof(asn_DEF_UEID_NG_ENB_tags_1) + /sizeof(asn_DEF_UEID_NG_ENB_tags_1[0]), /* 1 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_UEID_NG_ENB_1, + 6, /* Elements count */ + &asn_SPC_UEID_NG_ENB_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/UEID.c b/e2sm/lib/UEID.c new file mode 100644 index 0000000..fcce55c --- /dev/null +++ b/e2sm/lib/UEID.c @@ -0,0 +1,119 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "E2SM-COMMON-IEs" + * found in "E2SM-COMMON-IEs.asn" + * `asn1c -pdu=auto -fincludes-quoted -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example` + */ + +#include "UEID.h" + +#include "UEID-GNB.h" +#include "UEID-GNB-DU.h" +#include "UEID-GNB-CU-UP.h" +#include "UEID-NG-ENB.h" +#include "UEID-NG-ENB-DU.h" +#include "UEID-EN-GNB.h" +#include "UEID-ENB.h" +asn_per_constraints_t asn_PER_type_UEID_constr_1 CC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 6 } /* (0..6,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +asn_TYPE_member_t asn_MBR_UEID_1[] = { + { ATF_POINTER, 0, offsetof(struct UEID, choice.gNB_UEID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UEID_GNB, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-UEID" + }, + { ATF_POINTER, 0, offsetof(struct UEID, choice.gNB_DU_UEID), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UEID_GNB_DU, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-DU-UEID" + }, + { ATF_POINTER, 0, offsetof(struct UEID, choice.gNB_CU_UP_UEID), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UEID_GNB_CU_UP, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "gNB-CU-UP-UEID" + }, + { ATF_POINTER, 0, offsetof(struct UEID, choice.ng_eNB_UEID), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UEID_NG_ENB, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ng-eNB-UEID" + }, + { ATF_POINTER, 0, offsetof(struct UEID, choice.ng_eNB_DU_UEID), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UEID_NG_ENB_DU, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "ng-eNB-DU-UEID" + }, + { ATF_POINTER, 0, offsetof(struct UEID, choice.en_gNB_UEID), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UEID_EN_GNB, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "en-gNB-UEID" + }, + { ATF_POINTER, 0, offsetof(struct UEID, choice.eNB_UEID), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UEID_ENB, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "eNB-UEID" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_UEID_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gNB-UEID */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* gNB-DU-UEID */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* gNB-CU-UP-UEID */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* ng-eNB-UEID */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* ng-eNB-DU-UEID */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* en-gNB-UEID */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* eNB-UEID */ +}; +asn_CHOICE_specifics_t asn_SPC_UEID_specs_1 = { + sizeof(struct UEID), + offsetof(struct UEID, _asn_ctx), + offsetof(struct UEID, present), + sizeof(((struct UEID *)0)->present), + asn_MAP_UEID_tag2el_1, + 7, /* Count of tags in the map */ + 0, 0, + 7 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_UEID = { + "UEID", + "UEID", + &asn_OP_CHOICE, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + { 0, &asn_PER_type_UEID_constr_1, CHOICE_constraint }, + asn_MBR_UEID_1, + 7, /* Elements count */ + &asn_SPC_UEID_specs_1 /* Additional specs */ +}; + diff --git a/e2sm/lib/UTCTime.c b/e2sm/lib/UTCTime.c new file mode 100644 index 0000000..07891ac --- /dev/null +++ b/e2sm/lib/UTCTime.c @@ -0,0 +1,277 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include + +#ifdef __CYGWIN__ +#include "/usr/include/time.h" +#else +#include +#endif /* __CYGWIN__ */ + +#ifndef ASN___INTERNAL_TEST_MODE + +/* + * UTCTime basic type description. + */ +static const ber_tlv_tag_t asn_DEF_UTCTime_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (23 << 2)), /* [UNIVERSAL 23] IMPLICIT ...*/ + (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)), /* [UNIVERSAL 26] IMPLICIT ...*/ + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) /* ... OCTET STRING */ +}; +static asn_per_constraints_t asn_DEF_UTCTime_constraints = { + { APC_CONSTRAINED, 7, 7, 0x20, 0x7e }, /* Value */ + { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, /* Size */ + 0, 0 +}; +asn_TYPE_operation_t asn_OP_UTCTime = { + OCTET_STRING_free, + UTCTime_print, + UTCTime_compare, + OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_encode_der, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_decode_xer_utf8, + UTCTime_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + OCTET_STRING_decode_oer, + OCTET_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + OCTET_STRING_decode_uper, + OCTET_STRING_encode_uper, + OCTET_STRING_decode_aper, + OCTET_STRING_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + UTCTime_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_UTCTime = { + "UTCTime", + "UTCTime", + &asn_OP_UTCTime, + asn_DEF_UTCTime_tags, + sizeof(asn_DEF_UTCTime_tags) + / sizeof(asn_DEF_UTCTime_tags[0]) - 2, + asn_DEF_UTCTime_tags, + sizeof(asn_DEF_UTCTime_tags) + / sizeof(asn_DEF_UTCTime_tags[0]), + { 0, &asn_DEF_UTCTime_constraints, UTCTime_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +#endif /* ASN___INTERNAL_TEST_MODE */ + +/* + * Check that the time looks like the time. + */ +int +UTCTime_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const UTCTime_t *st = (const UTCTime_t *)sptr; + time_t tloc; + + errno = EPERM; /* Just an unlikely error code */ + tloc = asn_UT2time(st, 0, 0); + if(tloc == -1 && errno != EPERM) { + ASN__CTFAIL(app_key, td, sptr, "%s: Invalid time format: %s (%s:%d)", + td->name, strerror(errno), __FILE__, __LINE__); + return -1; + } + + return 0; +} + +#ifndef ASN___INTERNAL_TEST_MODE + +asn_enc_rval_t +UTCTime_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + if(flags & XER_F_CANONICAL) { + asn_enc_rval_t rv; + UTCTime_t *ut; + struct tm tm; + + errno = EPERM; + if(asn_UT2time((const UTCTime_t *)sptr, &tm, 1) == -1 + && errno != EPERM) + ASN__ENCODE_FAILED; + + /* Fractions are not allowed in UTCTime */ + ut = asn_time2UT(0, &tm, 1); + if(!ut) ASN__ENCODE_FAILED; + + rv = OCTET_STRING_encode_xer_utf8(td, sptr, ilevel, flags, + cb, app_key); + OCTET_STRING_free(&asn_DEF_UTCTime, ut, 0); + return rv; + } else { + return OCTET_STRING_encode_xer_utf8(td, sptr, ilevel, flags, + cb, app_key); + } +} + +#endif /* ASN___INTERNAL_TEST_MODE */ + +int +UTCTime_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + const UTCTime_t *st = (const UTCTime_t *)sptr; + + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(st && st->buf) { + char buf[32]; + struct tm tm; + int ret; + + errno = EPERM; + if(asn_UT2time(st, &tm, 1) == -1 && errno != EPERM) + return (cb("", 11, app_key) < 0) ? -1 : 0; + + ret = snprintf(buf, sizeof(buf), + "%04d-%02d-%02d %02d:%02d:%02d (GMT)", + tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, + tm.tm_hour, tm.tm_min, tm.tm_sec); + assert(ret > 0 && ret < (int)sizeof(buf)); + return (cb(buf, ret, app_key) < 0) ? -1 : 0; + } else { + return (cb("", 8, app_key) < 0) ? -1 : 0; + } +} + +time_t +asn_UT2time(const UTCTime_t *st, struct tm *_tm, int as_gmt) { + char buf[24]; /* "AAMMJJhhmmss+hhmm" + cushion */ + GeneralizedTime_t gt; + + if(!st || !st->buf + || st->size < 11 || st->size >= ((int)sizeof(buf) - 2)) { + errno = EINVAL; + return -1; + } + + gt.buf = (unsigned char *)buf; + gt.size = st->size + 2; + memcpy(gt.buf + 2, st->buf, st->size); + if(st->buf[0] > 0x35) { + /* 19xx */ + gt.buf[0] = 0x31; + gt.buf[1] = 0x39; + } else { + /* 20xx */ + gt.buf[0] = 0x32; + gt.buf[1] = 0x30; + } + + return asn_GT2time(>, _tm, as_gmt); +} + +UTCTime_t * +asn_time2UT(UTCTime_t *opt_ut, const struct tm *tm, int force_gmt) { + GeneralizedTime_t *gt = (GeneralizedTime_t *)opt_ut; + + gt = asn_time2GT(gt, tm, force_gmt); + if(gt == 0) return 0; + + assert(gt->size >= 2); + gt->size -= 2; + memmove(gt->buf, gt->buf + 2, gt->size + 1); + + return (UTCTime_t *)gt; +} + + +asn_random_fill_result_t +UTCTime_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + static const char *values[] = { + "700101000000", "700101000000-0000", "700101000000+0000", + "700101000000Z", "821106210623", "691106210827-0500", + "821106210629Z", + }; + size_t rnd = asn_random_between(0, sizeof(values)/sizeof(values[0])-1); + + (void)constraints; + + if(max_length < sizeof("yymmddhhmmss") && !*sptr) { + return result_skipped; + } + + if(*sptr) { + if(OCTET_STRING_fromBuf(*sptr, values[rnd], -1) != 0) { + if(!sptr) return result_failed; + } + } else { + *sptr = OCTET_STRING_new_fromBuf(td, values[rnd], -1); + if(!sptr) return result_failed; + } + + return result_ok; +} + +int +UTCTime_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + const GeneralizedTime_t *a = aptr; + const GeneralizedTime_t *b = bptr; + + (void)td; + + if(a && b) { + time_t at, bt; + int aerr, berr; + + errno = EPERM; + at = asn_UT2time(a, 0, 0); + aerr = errno; + errno = EPERM; + bt = asn_UT2time(b, 0, 0); + berr = errno; + + if(at == -1 && aerr != EPERM) { + if(bt == -1 && berr != EPERM) { + return OCTET_STRING_compare(td, aptr, bptr); + } else { + return -1; + } + } else if(bt == -1 && berr != EPERM) { + return 1; + } else { + /* Both values are valid. */ + } + + if(at < bt) { + return -1; + } else if(at > bt) { + return 1; + } else { + return 0; + } + } else if(!a && !b) { + return 0; + } else if(!a) { + return -1; + } else { + return 1; + } +} + diff --git a/e2sm/lib/UTF8String.c b/e2sm/lib/UTF8String.c new file mode 100644 index 0000000..c023ca1 --- /dev/null +++ b/e2sm/lib/UTF8String.c @@ -0,0 +1,294 @@ +/*- + * Copyright (c) 2003, 2004, 2006 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* + * UTF8String basic type description. + */ +static const ber_tlv_tag_t asn_DEF_UTF8String_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (12 << 2)), /* [UNIVERSAL 12] IMPLICIT ...*/ + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), /* ... OCTET STRING */ +}; +asn_TYPE_operation_t asn_OP_UTF8String = { + OCTET_STRING_free, + UTF8String_print, + OCTET_STRING_compare, + OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_utf8, + OCTET_STRING_encode_xer_utf8, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + OCTET_STRING_decode_oer, + OCTET_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + OCTET_STRING_decode_uper, + OCTET_STRING_encode_uper, + OCTET_STRING_decode_aper, + OCTET_STRING_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + UTF8String_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_UTF8String = { + "UTF8String", + "UTF8String", + &asn_OP_UTF8String, + asn_DEF_UTF8String_tags, + sizeof(asn_DEF_UTF8String_tags) + / sizeof(asn_DEF_UTF8String_tags[0]) - 1, + asn_DEF_UTF8String_tags, + sizeof(asn_DEF_UTF8String_tags) + / sizeof(asn_DEF_UTF8String_tags[0]), + { 0, 0, UTF8String_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +/* + * This is the table of length expectations. + * The second half of this table is only applicable to the long sequences. + */ +static const int UTF8String_ht[2][16] = { + { /* 0x0 ... 0x7 */ + /* 0000..0111 */ + 1, 1, 1, 1, 1, 1, 1, 1, + /* 1000..1011(0), 1100..1101(2), 1110(3), 1111(-1) */ + 0, 0, 0, 0, 2, 2, 3, -1 }, + { /* 0xF0 .. 0xF7 */ + /* 11110000..11110111 */ + 4, 4, 4, 4, 4, 4, 4, 4, + 5, 5, 5, 5, 6, 6, -1, -1 } +}; +static const int32_t UTF8String_mv[7] = { 0, 0, + 0x00000080, + 0x00000800, + 0x00010000, + 0x00200000, + 0x04000000 +}; + +/* Internal aliases for return codes */ +#define U8E_TRUNC -1 /* UTF-8 sequence truncated */ +#define U8E_ILLSTART -2 /* Illegal UTF-8 sequence start */ +#define U8E_NOTCONT -3 /* Continuation expectation failed */ +#define U8E_NOTMIN -4 /* Not minimal length encoding */ +#define U8E_EINVAL -5 /* Invalid arguments */ + +int +UTF8String_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + ssize_t len = UTF8String_length((const UTF8String_t *)sptr); + switch(len) { + case U8E_EINVAL: + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given", td->name); + break; + case U8E_TRUNC: + ASN__CTFAIL(app_key, td, sptr, + "%s: truncated UTF-8 sequence (%s:%d)", + td->name, __FILE__, __LINE__); + break; + case U8E_ILLSTART: + ASN__CTFAIL(app_key, td, sptr, + "%s: UTF-8 illegal start of encoding (%s:%d)", + td->name, __FILE__, __LINE__); + break; + case U8E_NOTCONT: + ASN__CTFAIL(app_key, td, sptr, + "%s: UTF-8 not continuation (%s:%d)", + td->name, __FILE__, __LINE__); + break; + case U8E_NOTMIN: + ASN__CTFAIL(app_key, td, sptr, + "%s: UTF-8 not minimal sequence (%s:%d)", + td->name, __FILE__, __LINE__); + break; + } + return (len < 0) ? -1 : 0; +} + +static ssize_t +UTF8String__process(const UTF8String_t *st, uint32_t *dst, size_t dstlen) { + size_t length; + uint8_t *buf = st->buf; + uint8_t *end = buf + st->size; + uint32_t *dstend = dst + dstlen; + + for(length = 0; buf < end; length++) { + int ch = *buf; + uint8_t *cend; + int32_t value; + int want; + + /* Compute the sequence length */ + want = UTF8String_ht[0][ch >> 4]; + switch(want) { + case -1: + /* Second half of the table, long sequence */ + want = UTF8String_ht[1][ch & 0x0F]; + if(want != -1) break; + /* Fall through */ + case 0: + return U8E_ILLSTART; + } + + /* assert(want >= 1 && want <= 6) */ + + /* Check character sequence length */ + if(buf + want > end) return U8E_TRUNC; + + value = ch & (0xff >> want); + cend = buf + want; + for(buf++; buf < cend; buf++) { + ch = *buf; + if(ch < 0x80 || ch > 0xbf) return U8E_NOTCONT; + value = (value << 6) | (ch & 0x3F); + } + if(value < UTF8String_mv[want]) + return U8E_NOTMIN; + if(dst < dstend) + *dst++ = value; /* Record value */ + } + + if(dst < dstend) *dst = 0; /* zero-terminate */ + + return length; +} + + +ssize_t +UTF8String_length(const UTF8String_t *st) { + if(st && st->buf) { + return UTF8String__process(st, 0, 0); + } else { + return U8E_EINVAL; + } +} + +size_t +UTF8String_to_wcs(const UTF8String_t *st, uint32_t *dst, size_t dstlen) { + if(st && st->buf) { + ssize_t ret = UTF8String__process(st, dst, dstlen); + return (ret < 0) ? 0 : ret; + } else { + return 0; + } +} + +int +UTF8String_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + const UTF8String_t *st = (const UTF8String_t *)sptr; + + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(st && st->buf) { + return (cb(st->buf, st->size, app_key) < 0) ? -1 : 0; + } else { + return (cb("", 8, app_key) < 0) ? -1 : 0; + } +} + + +/* + * Biased function for randomizing UTF-8 sequences. + */ +static size_t +UTF8String__random_char(uint8_t *b, size_t size) { + static const struct rnd_value { + const char *value; + size_t size; + } values[] = {{"\0", 1}, + {"\x01", 1}, + {"\x7f", 1}, + {"\xc2\xa2", 2}, + {"\xe2\x82\xac", 3}, + {"\xf0\x90\x8d\x88", 4}, + {"\xf4\x8f\xbf\xbf", 4}}; + + const struct rnd_value *v; + size_t max_idx = 0; + + switch(size) { + case 0: + assert(size != 0); + return 0; + case 1: + max_idx = 2; + break; + case 2: + max_idx = 3; + break; + default: + case 4: + max_idx = sizeof(values) / sizeof(values[0]) - 1; + break; + } + + v = &values[asn_random_between(0, max_idx)]; + memcpy(b, v->value, v->size); + return v->size; +} + +asn_random_fill_result_t +UTF8String_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constraints, + size_t max_length) { + asn_random_fill_result_t result_ok = {ARFILL_OK, 1}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + uint8_t *buf; + uint8_t *bend; + uint8_t *b; + size_t rnd_len; + size_t idx; + UTF8String_t *st; + + if(max_length == 0 && !*sptr) return result_skipped; + + /* Figure out how far we should go */ + rnd_len = OCTET_STRING_random_length_constrained(td, constraints, + max_length / 4); + + buf = CALLOC(4, rnd_len + 1); + if(!buf) return result_failed; + + bend = &buf[4 * rnd_len]; + + for(b = buf, idx = 0; idx < rnd_len; idx++) { + b += UTF8String__random_char(b, (bend - b)); + } + *(uint8_t *)b = 0; + + if(*sptr) { + st = *sptr; + FREEMEM(st->buf); + } else { + st = (OCTET_STRING_t *)(*sptr = CALLOC(1, sizeof(UTF8String_t))); + if(!st) { + FREEMEM(buf); + return result_failed; + } + } + + st->buf = buf; + st->size = b - buf; + + assert(UTF8String_length(st) == (ssize_t)rnd_len); + + return result_ok; +} diff --git a/e2sm/lib/UniversalString.c b/e2sm/lib/UniversalString.c new file mode 100644 index 0000000..0f6d796 --- /dev/null +++ b/e2sm/lib/UniversalString.c @@ -0,0 +1,243 @@ +/*- + * Copyright (c) 2003-2017 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * UniversalString basic type description. + */ +static const ber_tlv_tag_t asn_DEF_UniversalString_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (28 << 2)), /* [UNIVERSAL 28] IMPLICIT ...*/ + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) /* ... OCTET STRING */ +}; +asn_OCTET_STRING_specifics_t asn_SPC_UniversalString_specs = { + sizeof(UniversalString_t), + offsetof(UniversalString_t, _asn_ctx), + ASN_OSUBV_U32 /* 32-bits character */ +}; +static asn_per_constraints_t asn_DEF_UniversalString_per_constraints = { + { APC_CONSTRAINED, 32, 32, 0, 2147483647 }, + { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, + 0, 0 +}; +asn_TYPE_operation_t asn_OP_UniversalString = { + OCTET_STRING_free, + UniversalString_print, /* Convert into UTF8 and print */ + OCTET_STRING_compare, + OCTET_STRING_decode_ber, + OCTET_STRING_encode_der, + UniversalString_decode_xer, /* Convert from UTF-8 */ + UniversalString_encode_xer, /* Convert into UTF-8 */ +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + OCTET_STRING_decode_oer, + OCTET_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + OCTET_STRING_decode_uper, + OCTET_STRING_encode_uper, + OCTET_STRING_decode_aper, + OCTET_STRING_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + OCTET_STRING_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_UniversalString = { + "UniversalString", + "UniversalString", + &asn_OP_UniversalString, + asn_DEF_UniversalString_tags, + sizeof(asn_DEF_UniversalString_tags) + / sizeof(asn_DEF_UniversalString_tags[0]) - 1, + asn_DEF_UniversalString_tags, + sizeof(asn_DEF_UniversalString_tags) + / sizeof(asn_DEF_UniversalString_tags[0]), + { 0, &asn_DEF_UniversalString_per_constraints, UniversalString_constraint }, + 0, 0, /* No members */ + &asn_SPC_UniversalString_specs +}; + +int +UniversalString_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, + void *app_key) { + const UniversalString_t *st = (const UniversalString_t *)sptr; + + if(st && st->buf) { + if(st->size % 4) { + ASN__CTFAIL(app_key, td, sptr, + "%s: invalid size %" ASN_PRI_SIZE " not divisible by 4 (%s:%d)", + td->name, st->size, __FILE__, __LINE__); + return -1; + } + } else { + ASN__CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, + __FILE__, __LINE__); + return -1; + } + + return 0; +} + +static ssize_t +UniversalString__dump(const UniversalString_t *st, + asn_app_consume_bytes_f *cb, void *app_key) { + char scratch[128]; /* Scratchpad buffer */ + char *p = scratch; + ssize_t wrote = 0; + uint8_t *ch; + uint8_t *end; + + ch = st->buf; + end = (st->buf + st->size); + for(end -= 3; ch < end; ch += 4) { + uint32_t wc = (ch[0] << 24) + | (ch[1] << 16) + | (ch[2] << 8) + | ch[3]; /* 4 bytes */ + if(sizeof(scratch) - (p - scratch) < 6) { + wrote += p - scratch; + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + p = scratch; + } + if(wc < 0x80) { + *p++ = (char)wc; + } else if(wc < 0x800) { + *p++ = 0xc0 | ((wc >> 6)); + *p++ = 0x80 | ((wc & 0x3f)); + } else if(wc < 0x10000) { + *p++ = 0xe0 | ((wc >> 12)); + *p++ = 0x80 | ((wc >> 6) & 0x3f); + *p++ = 0x80 | ((wc & 0x3f)); + } else if(wc < 0x200000) { + *p++ = 0xf0 | ((wc >> 18)); + *p++ = 0x80 | ((wc >> 12) & 0x3f); + *p++ = 0x80 | ((wc >> 6) & 0x3f); + *p++ = 0x80 | ((wc & 0x3f)); + } else if(wc < 0x4000000) { + *p++ = 0xf8 | ((wc >> 24)); + *p++ = 0x80 | ((wc >> 18) & 0x3f); + *p++ = 0x80 | ((wc >> 12) & 0x3f); + *p++ = 0x80 | ((wc >> 6) & 0x3f); + *p++ = 0x80 | ((wc & 0x3f)); + } else { + *p++ = 0xfc | ((wc >> 30) & 0x1); + *p++ = 0x80 | ((wc >> 24) & 0x3f); + *p++ = 0x80 | ((wc >> 18) & 0x3f); + *p++ = 0x80 | ((wc >> 12) & 0x3f); + *p++ = 0x80 | ((wc >> 6) & 0x3f); + *p++ = 0x80 | ((wc & 0x3f)); + } + } + + wrote += p - scratch; + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + + return wrote; +} + +asn_dec_rval_t +UniversalString_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, + size_t size) { + asn_dec_rval_t rc; + + rc = OCTET_STRING_decode_xer_utf8(opt_codec_ctx, td, sptr, opt_mname, + buf_ptr, size); + if(rc.code == RC_OK) { + /* + * Now we have a whole string in UTF-8 format. + * Convert it into UCS-4. + */ + uint32_t *wcs; + size_t wcs_len; + UTF8String_t *st; +#ifndef WORDS_BIGENDIAN + int little_endian = 1; +#endif + + assert(*sptr); + st = (UTF8String_t *)*sptr; + assert(st->buf); + wcs_len = UTF8String_to_wcs(st, 0, 0); + + wcs = (uint32_t *)MALLOC(4 * (wcs_len + 1)); + if(wcs == 0 || UTF8String_to_wcs(st, wcs, wcs_len) != wcs_len) { + rc.code = RC_FAIL; + rc.consumed = 0; + return rc; + } else { + wcs[wcs_len] = 0; /* nul-terminate */ + } + +#ifndef WORDS_BIGENDIAN + if(*(char *)&little_endian) { + /* Swap byte order in encoding */ + uint32_t *wc = wcs; + uint32_t *wc_end = wcs + wcs_len; + for(; wc < wc_end; wc++) { + /* *wc = htonl(*wc); */ + uint32_t wch = *wc; + *((uint8_t *)wc + 0) = wch >> 24; + *((uint8_t *)wc + 1) = wch >> 16; + *((uint8_t *)wc + 2) = wch >> 8; + *((uint8_t *)wc + 3) = wch; + } + } +#endif /* WORDS_BIGENDIAN */ + + FREEMEM(st->buf); + st->buf = (uint8_t *)wcs; + st->size = 4 * wcs_len; + } + return rc; +} + +asn_enc_rval_t +UniversalString_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const UniversalString_t *st = (const UniversalString_t *)sptr; + asn_enc_rval_t er = {0,0,0}; + + (void)ilevel; + (void)flags; + + if(!st || !st->buf) + ASN__ENCODE_FAILED; + + er.encoded = UniversalString__dump(st, cb, app_key); + if(er.encoded < 0) ASN__ENCODE_FAILED; + + ASN__ENCODED_OK(er); +} + +int +UniversalString_print(const asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + const UniversalString_t *st = (const UniversalString_t *)sptr; + + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(!st || !st->buf) return (cb("", 8, app_key) < 0) ? -1 : 0; + + if(UniversalString__dump(st, cb, app_key) < 0) + return -1; + + return 0; +} + diff --git a/e2sm/lib/VideotexString.c b/e2sm/lib/VideotexString.c new file mode 100644 index 0000000..69417bd --- /dev/null +++ b/e2sm/lib/VideotexString.c @@ -0,0 +1,58 @@ +/*- + * Copyright (c) 2003 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* + * VideotexString basic type description. + */ +static const ber_tlv_tag_t asn_DEF_VideotexString_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (21 << 2)), /* [UNIVERSAL 21] IMPLICIT */ + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) /* ... OCTET STRING */ +}; +asn_TYPE_operation_t asn_OP_VideotexString = { + OCTET_STRING_free, + OCTET_STRING_print, /* non-ascii string */ + OCTET_STRING_compare, + OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_hex, + OCTET_STRING_encode_xer, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + OCTET_STRING_decode_oer, + OCTET_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + OCTET_STRING_decode_uper, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_encode_uper, + OCTET_STRING_decode_aper, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + OCTET_STRING_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_VideotexString = { + "VideotexString", + "VideotexString", + &asn_OP_VideotexString, + asn_DEF_VideotexString_tags, + sizeof(asn_DEF_VideotexString_tags) + / sizeof(asn_DEF_VideotexString_tags[0]) - 1, + asn_DEF_VideotexString_tags, + sizeof(asn_DEF_VideotexString_tags) + / sizeof(asn_DEF_VideotexString_tags[0]), + { 0, 0, asn_generic_unknown_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/e2sm/lib/VisibleString.c b/e2sm/lib/VisibleString.c new file mode 100644 index 0000000..03fef8b --- /dev/null +++ b/e2sm/lib/VisibleString.c @@ -0,0 +1,99 @@ +/*- + * Copyright (c) 2003, 2006 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* + * VisibleString basic type description. + */ +static const ber_tlv_tag_t asn_DEF_VisibleString_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)), /* [UNIVERSAL 26] IMPLICIT ...*/ + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) /* ... OCTET STRING */ +}; +static asn_per_constraints_t asn_DEF_VisibleString_constraints = { + { APC_CONSTRAINED, 7, 7, 0x20, 0x7e }, /* Value */ + { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, /* Size */ + 0, 0 +}; +asn_TYPE_operation_t asn_OP_VisibleString = { + OCTET_STRING_free, + OCTET_STRING_print_utf8, /* ASCII subset */ + OCTET_STRING_compare, + OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_utf8, + OCTET_STRING_encode_xer_utf8, +#ifdef ASN_DISABLE_OER_SUPPORT + 0, + 0, +#else + OCTET_STRING_decode_oer, + OCTET_STRING_encode_oer, +#endif /* ASN_DISABLE_OER_SUPPORT */ +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, + 0, + 0, +#else + OCTET_STRING_decode_uper, + OCTET_STRING_encode_uper, + OCTET_STRING_decode_aper, + OCTET_STRING_encode_aper, +#endif /* ASN_DISABLE_PER_SUPPORT */ + OCTET_STRING_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; +asn_TYPE_descriptor_t asn_DEF_VisibleString = { + "VisibleString", + "VisibleString", + &asn_OP_VisibleString, + asn_DEF_VisibleString_tags, + sizeof(asn_DEF_VisibleString_tags) + / sizeof(asn_DEF_VisibleString_tags[0]) - 1, + asn_DEF_VisibleString_tags, + sizeof(asn_DEF_VisibleString_tags) + / sizeof(asn_DEF_VisibleString_tags[0]), + { 0, &asn_DEF_VisibleString_constraints, VisibleString_constraint }, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +int +VisibleString_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const VisibleString_t *st = (const VisibleString_t *)sptr; + + if(st && st->buf) { + uint8_t *buf = st->buf; + uint8_t *end = buf + st->size; + + /* + * Check the alphabet of the VisibleString. + * ISO646, ISOReg#6 + * The alphabet is a subset of ASCII between the space + * and "~" (tilde). + */ + for(; buf < end; buf++) { + if(*buf < 0x20 || *buf > 0x7e) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value byte %ld (%d) " + "not in VisibleString alphabet (%s:%d)", + td->name, + (long)((buf - st->buf) + 1), + *buf, + __FILE__, __LINE__); + return -1; + } + } + } else { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + return 0; +} diff --git a/e2sm/lib/asn_internal.c b/e2sm/lib/asn_internal.c index 1aff95f..004660b 100644 --- a/e2sm/lib/asn_internal.c +++ b/e2sm/lib/asn_internal.c @@ -26,11 +26,12 @@ asn__format_to_callback(int (*cb)(const void *, size_t, void *key), void *key, buf_size <<= 1; if(buf == scratch) { buf = MALLOC(buf_size); - if(!buf) return -1; + if(!buf) { va_end(args); return -1; } } else { void *p = REALLOC(buf, buf_size); if(!p) { FREEMEM(buf); + va_end(args); return -1; } buf = p; diff --git a/e2sm/lib/constr_SET.c b/e2sm/lib/constr_SET.c new file mode 100644 index 0000000..554a7dd --- /dev/null +++ b/e2sm/lib/constr_SET.c @@ -0,0 +1,1149 @@ +/* + * Copyright (c) 2003-2017 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* Check that all the mandatory members are present */ +static int _SET_is_populated(const asn_TYPE_descriptor_t *td, const void *st); + +/* + * Number of bytes left for this structure. + * (ctx->left) indicates the number of bytes _transferred_ for the structure. + * (size) contains the number of bytes in the buffer passed. + */ +#define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) + +/* + * If the subprocessor function returns with an indication that it wants + * more data, it may well be a fatal decoding problem, because the + * size is constrained by the 's L, even if the buffer size allows + * reading more data. + * For example, consider the buffer containing the following TLVs: + * ... + * The TLV length clearly indicates that one byte is expected in V, but + * if the V processor returns with "want more data" even if the buffer + * contains way more data than the V processor have seen. + */ +#define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num;\ + size -= num; \ + if(ctx->left >= 0) \ + ctx->left -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#define NEXT_PHASE(ctx) do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself;\ + return rval; \ + } while(0) + +/* + * Tags are canonically sorted in the tag2element map. + */ +static int +_t2e_cmp(const void *ap, const void *bp) { + const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap; + const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp; + + int a_class = BER_TAG_CLASS(a->el_tag); + int b_class = BER_TAG_CLASS(b->el_tag); + + if(a_class == b_class) { + ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag); + ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag); + + if(a_value == b_value) + return 0; + else if(a_value < b_value) + return -1; + else + return 1; + } else if(a_class < b_class) { + return -1; + } else { + return 1; + } +} + +/* + * The decoder of the SET type. + */ +asn_dec_rval_t +SET_decode_ber(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const void *ptr, size_t size, int tag_mode) { + /* + * Bring closer parts of structure description. + */ + const asn_SET_specifics_t *specs = (const asn_SET_specifics_t *)td->specifics; + const asn_TYPE_member_t *elements = td->elements; + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + ber_tlv_tag_t tlv_tag; /* T from TLV */ + asn_dec_rval_t rval; /* Return code from subparsers */ + + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + size_t edx; /* SET element's index */ + + ASN_DEBUG("Decoding %s as SET", td->name); + + if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) + ASN__DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously + */ + switch(ctx->phase) { + case 0: + /* + * PHASE 0. + * Check that the set of tags associated with given structure + * perfectly fits our expectations. + */ + + rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, + tag_mode, 1, &ctx->left, 0); + if(rval.code != RC_OK) { + ASN_DEBUG("%s tagging check failed: %d", + td->name, rval.code); + return rval; + } + + if(ctx->left >= 0) + ctx->left += rval.consumed; /* ?Substracted below! */ + ADVANCE(rval.consumed); + + NEXT_PHASE(ctx); + + ASN_DEBUG("Structure advertised %ld bytes, " + "buffer contains %ld", (long)ctx->left, (long)size); + + /* Fall through */ + case 1: + /* + * PHASE 1. + * From the place where we've left it previously, + * try to decode the next member from the list of + * this structure's elements. + * Note that elements in BER may arrive out of + * order, yet DER mandates that they shall arive in the + * canonical order of their tags. So, there is a room + * for optimization. + */ + for(;; ctx->step = 0) { + const asn_TYPE_tag2member_t *t2m; + asn_TYPE_tag2member_t key; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + ssize_t tag_len; /* Length of TLV's T */ + + if(ctx->step & 1) { + edx = ctx->step >> 1; + goto microphase2; + } + + /* + * MICROPHASE 1: Synchronize decoding. + */ + + if(ctx->left == 0) + /* + * No more things to decode. + * Exit out of here and check whether all mandatory + * elements have been received (in the next phase). + */ + break; + + /* + * Fetch the T from TLV. + */ + tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); + switch(tag_len) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + if(ctx->left < 0 && ((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) + RETURN(RC_FAIL); + else + RETURN(RC_WMORE); + } else if(((const uint8_t *)ptr)[1] == 0) { + /* + * Found the terminator of the + * indefinite length structure. + * Invoke the generic finalization function. + */ + goto phase3; + } + } + + key.el_tag = tlv_tag; + t2m = (const asn_TYPE_tag2member_t *)bsearch(&key, + specs->tag2el, specs->tag2el_count, + sizeof(specs->tag2el[0]), _t2e_cmp); + if(t2m) { + /* + * Found the element corresponding to the tag. + */ + edx = t2m->el_no; + ctx->step = (edx << 1) + 1; + ASN_DEBUG("Got tag %s (%s), edx %" ASN_PRI_SSIZE "", + ber_tlv_tag_string(tlv_tag), td->name, edx); + } else if(specs->extensible == 0) { + ASN_DEBUG("Unexpected tag %s " + "in non-extensible SET %s", + ber_tlv_tag_string(tlv_tag), td->name); + RETURN(RC_FAIL); + } else { + /* Skip this tag */ + ssize_t skip; + + ASN_DEBUG("Skipping unknown tag %s", + ber_tlv_tag_string(tlv_tag)); + + skip = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + (const char *)ptr + tag_len, LEFT - tag_len); + + switch(skip) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + ADVANCE(skip + tag_len); + continue; /* Try again with the next tag */ + } + + /* + * MICROPHASE 2: Invoke the member-specific decoder. + */ + microphase2: + + /* + * Check for duplications: must not overwrite + * already decoded elements. + */ + if(ASN_SET_ISPRESENT2((char *)st + specs->pres_offset, edx)) { + ASN_DEBUG("SET %s: Duplicate element %s (%" ASN_PRI_SSIZE ")", + td->name, elements[edx].name, edx); + RETURN(RC_FAIL); + } + + /* + * Compute the position of the member inside a structure, + * and also a type of containment (it may be contained + * as pointer or using inline inclusion). + */ + if(elements[edx].flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elements[edx].memb_offset); + } else { + /* + * A pointer to a pointer + * holding the start of the structure + */ + memb_ptr = (char *)st + elements[edx].memb_offset; + memb_ptr2 = &memb_ptr; + } + /* + * Invoke the member fetch routine according to member's type + */ + rval = elements[edx].type->op->ber_decoder(opt_codec_ctx, + elements[edx].type, + memb_ptr2, ptr, LEFT, + elements[edx].tag_mode); + switch(rval.code) { + case RC_OK: + ASN_SET_MKPRESENT((char *)st + specs->pres_offset, edx); + break; + case RC_WMORE: /* More data expected */ + if(!SIZE_VIOLATION) { + ADVANCE(rval.consumed); + RETURN(RC_WMORE); + } + /* Fall through */ + case RC_FAIL: /* Fatal error */ + RETURN(RC_FAIL); + } /* switch(rval) */ + + ADVANCE(rval.consumed); + } /* for(all structure members) */ + + phase3: + ctx->phase = 3; + /* Fall through */ + case 3: + case 4: /* Only 00 is expected */ + ASN_DEBUG("SET %s Leftover: %ld, size = %ld", + td->name, (long)ctx->left, (long)size); + + /* + * Skip everything until the end of the SET. + */ + while(ctx->left) { + ssize_t tl, ll; + + tl = ber_fetch_tag(ptr, LEFT, &tlv_tag); + switch(tl) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + /* + * If expected <0><0>... + */ + if(ctx->left < 0 + && ((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) + RETURN(RC_FAIL); + else + RETURN(RC_WMORE); + } else if(((const uint8_t *)ptr)[1] == 0) { + /* + * Correctly finished with <0><0>. + */ + ADVANCE(2); + ctx->left++; + ctx->phase = 4; + continue; + } + } + + if(specs->extensible == 0 || ctx->phase == 4) { + ASN_DEBUG("Unexpected continuation " + "of a non-extensible type %s " + "(ptr=%02x)", + td->name, *(const uint8_t *)ptr); + RETURN(RC_FAIL); + } + + ll = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + (const char *)ptr + tl, LEFT - tl); + switch(ll) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + ADVANCE(tl + ll); + } + + ctx->phase = 5; + /* Fall through */ + case 5: + /* Check that all mandatory elements are present. */ + if(!_SET_is_populated(td, st)) + RETURN(RC_FAIL); + + NEXT_PHASE(ctx); + } + + RETURN(RC_OK); +} + +static int +_SET_is_populated(const asn_TYPE_descriptor_t *td, const void *st) { + const asn_SET_specifics_t *specs = (const asn_SET_specifics_t *)td->specifics; + size_t edx; + + /* + * Check that all mandatory elements are present. + */ + for(edx = 0; edx < td->elements_count; + edx += (8 * sizeof(specs->_mandatory_elements[0]))) { + unsigned int midx, pres, must; + + midx = edx/(8 * sizeof(specs->_mandatory_elements[0])); + pres = ((const unsigned int *)((const char *)st + + specs->pres_offset))[midx]; + must = sys_ntohl(specs->_mandatory_elements[midx]); + + if((pres & must) == must) { + /* + * Yes, everything seems to be in place. + */ + } else { + ASN_DEBUG("One or more mandatory elements " + "of a SET %s %d (%08x.%08x)=%08x " + "are not present", + td->name, + midx, + pres, + must, + (~(pres & must) & must) + ); + return 0; + } + } + + return 1; +} + +/* + * The DER encoder of the SET type. + */ +asn_enc_rval_t +SET_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, int tag_mode, + ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { + const asn_SET_specifics_t *specs = (const asn_SET_specifics_t *)td->specifics; + size_t computed_size = 0; + asn_enc_rval_t er; + int t2m_build_own = (specs->tag2el_count != td->elements_count); + const asn_TYPE_tag2member_t *t2m; + asn_TYPE_tag2member_t *t2m_build; + size_t t2m_count; + ssize_t ret; + size_t edx; + + /* + * Use existing, or build our own tags map. + */ + if(t2m_build_own) { + t2m_build = (asn_TYPE_tag2member_t *)CALLOC(td->elements_count, + sizeof(t2m_build[0])); + if(!t2m_build) ASN__ENCODE_FAILED; + t2m_count = 0; + } else { + t2m_build = NULL; + /* + * There is no untagged CHOICE in this SET. + * Employ existing table. + */ + } + + /* + * Gather the length of the underlying members sequence. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + asn_enc_rval_t tmper; + const void *memb_ptr_dontuse; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + + /* + * Compute the length of the encoding of this member. + */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + if(!*memb_ptr2) { + if(!elm->optional) { + /* Mandatory elements missing */ + FREEMEM(t2m_build); + ASN__ENCODE_FAILED; + } + if(t2m_build) { + t2m_build[t2m_count].el_no = edx; + t2m_build[t2m_count].el_tag = 0; + t2m_count++; + } + continue; + } + } else { + memb_ptr_dontuse = + (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr_dontuse; /* Only use of memb_ptr_dontuse */ + } + + /* Eliminate default values */ + if(elm->default_value_cmp && elm->default_value_cmp(*memb_ptr2) == 0) { + if(t2m_build) { + t2m_build[t2m_count].el_no = edx; + t2m_build[t2m_count].el_tag = 0; + t2m_count++; + } + continue; + } + + tmper = elm->type->op->der_encoder(elm->type, *memb_ptr2, + elm->tag_mode, elm->tag, + 0, 0); + if(tmper.encoded == -1) + return tmper; + computed_size += tmper.encoded; + + /* + * Remember the outmost tag of this member. + */ + if(t2m_build) { + t2m_build[t2m_count].el_no = edx; + t2m_build[t2m_count].el_tag = asn_TYPE_outmost_tag( + elm->type, *memb_ptr2, elm->tag_mode, elm->tag); + t2m_count++; + } else { + /* + * No dynamic sorting is necessary. + */ + } + } + + /* + * Finalize order of the components. + */ + if(t2m_build) { + /* + * Sort the underlying members according to their + * canonical tags order. DER encoding mandates it. + */ + qsort(t2m_build, t2m_count, sizeof(specs->tag2el[0]), _t2e_cmp); + t2m = t2m_build; + } else { + /* + * Tags are already sorted by the compiler. + */ + t2m = specs->tag2el; + t2m_count = specs->tag2el_count; + } + assert(t2m_count == td->elements_count); + + /* + * Encode the TLV for the sequence itself. + */ + ret = der_write_tags(td, computed_size, tag_mode, 1, tag, cb, app_key); + if(ret == -1) { + FREEMEM(t2m_build); + ASN__ENCODE_FAILED; + } + er.encoded = computed_size + ret; + + if(!cb) { + FREEMEM(t2m_build); + ASN__ENCODED_OK(er); + } + + /* + * Encode all members. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm; + asn_enc_rval_t tmper; + + const void *memb_ptr_dontuse; /* Pointer to the member */ + const void *const *memb_ptr2; /* Pointer to that pointer */ + + /* Encode according to the tag order */ + elm = &td->elements[t2m[edx].el_no]; + + if(elm->flags & ATF_POINTER) { + memb_ptr2 = + (const void *const *)((const char *)sptr + elm->memb_offset); + if(!*memb_ptr2) continue; + } else { + memb_ptr_dontuse = + (const void *)((const char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr_dontuse; /* Only use of memb_ptr_dontuse */ + } + + /* Eliminate default values */ + if(elm->default_value_cmp && elm->default_value_cmp(*memb_ptr2) == 0) + continue; + + tmper = elm->type->op->der_encoder(elm->type, *memb_ptr2, + elm->tag_mode, elm->tag, cb, app_key); + if(tmper.encoded == -1) + return tmper; + computed_size -= tmper.encoded; + } + + if(computed_size != 0) { + /* + * Encoded size is not equal to the computed size. + */ + FREEMEM(t2m_build); + ASN__ENCODE_FAILED; + } + + FREEMEM(t2m_build); + ASN__ENCODED_OK(er); +} + +#undef XER_ADVANCE +#define XER_ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + buf_ptr = ((const char *)buf_ptr) + num;\ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Decode the XER (XML) data. + */ +asn_dec_rval_t +SET_decode_xer(const asn_codec_ctx_t *opt_codec_ctx, + const asn_TYPE_descriptor_t *td, void **struct_ptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + /* + * Bring closer parts of structure description. + */ + const asn_SET_specifics_t *specs = (const asn_SET_specifics_t *)td->specifics; + const asn_TYPE_member_t *elements = td->elements; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + + /* + * ... and parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + asn_dec_rval_t rval; /* Return value from a decoder */ + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + size_t edx; /* Element index */ + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) RETURN(RC_FAIL); + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + * Phase 2: Processing inner type. + * Phase 3: Skipping unknown extensions. + * Phase 4: PHASED OUT + */ + for(edx = ctx->step; ctx->phase <= 3;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + const asn_TYPE_member_t *elm; + + /* + * Go inside the inner member of a set. + */ + if(ctx->phase == 2) { + asn_dec_rval_t tmprval; + void *memb_ptr_dontuse; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + + if(ASN_SET_ISPRESENT2((char *)st + specs->pres_offset, + edx)) { + ASN_DEBUG("SET %s: Duplicate element %s (%" ASN_PRI_SSIZE ")", + td->name, elements[edx].name, edx); + RETURN(RC_FAIL); + } + + elm = &elements[edx]; + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr_dontuse = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr_dontuse; /* Only use of memb_ptr_dontuse */ + } + + /* Invoke the inner type decoder, m.b. multiple times */ + tmprval = elm->type->op->xer_decoder(opt_codec_ctx, + elm->type, memb_ptr2, elm->name, + buf_ptr, size); + XER_ADVANCE(tmprval.consumed); + if(tmprval.code != RC_OK) + RETURN(tmprval.code); + ctx->phase = 1; /* Back to body processing */ + ASN_SET_MKPRESENT((char *)st + specs->pres_offset, edx); + ASN_DEBUG("XER/SET phase => %d", ctx->phase); + /* Fall through */ + } + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, + buf_ptr, size, &ch_type); + if(ch_size == -1) { + RETURN(RC_FAIL); + } else { + switch(ch_type) { + case PXER_WMORE: + RETURN(RC_WMORE); + case PXER_COMMENT: /* Got XML comment */ + case PXER_TEXT: /* Ignore free-standing text */ + XER_ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); + ASN_DEBUG("XER/SET: tcv = %d, ph=%d", tcv, ctx->phase); + + /* Skip the extensions section */ + if(ctx->phase == 3) { + switch(xer_skip_unknown(tcv, &ctx->left)) { + case -1: + ctx->phase = 4; + RETURN(RC_FAIL); + case 1: + ctx->phase = 1; + /* Fall through */ + case 0: + XER_ADVANCE(ch_size); + continue; + case 2: + ctx->phase = 1; + break; + } + } + + switch(tcv) { + case XCT_CLOSING: + if(ctx->phase == 0) break; + ctx->phase = 0; + /* Fall through */ + case XCT_BOTH: + if(ctx->phase == 0) { + if(_SET_is_populated(td, st)) { + XER_ADVANCE(ch_size); + ctx->phase = 4; /* Phase out */ + RETURN(RC_OK); + } else { + ASN_DEBUG("Premature end of XER SET"); + RETURN(RC_FAIL); + } + } + /* Fall through */ + case XCT_OPENING: + if(ctx->phase == 0) { + XER_ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + } + /* Fall through */ + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + + ASN_DEBUG("XER/SET: tcv=%d, ph=%d", tcv, ctx->phase); + if(ctx->phase != 1) + break; /* Really unexpected */ + + /* + * Search which member corresponds to this tag. + */ + for(edx = 0; edx < td->elements_count; edx++) { + switch(xer_check_tag(buf_ptr, ch_size, + elements[edx].name)) { + case XCT_BOTH: + case XCT_OPENING: + /* + * Process this member. + */ + ctx->step = edx; + ctx->phase = 2; + break; + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + continue; + default: + edx = td->elements_count; + break; /* Phase out */ + } + break; + } + if(edx != td->elements_count) + continue; + + /* It is expected extension */ + if(specs->extensible) { + ASN_DEBUG("Got anticipated extension"); + /* + * Check for (XCT_BOTH or XCT_UNKNOWN_BO) + * By using a mask. Only record a pure + * tags. + */ + if(tcv & XCT_CLOSING) { + /* Found without body */ + } else { + ctx->left = 1; + ctx->phase = 3; /* Skip ...'s */ + } + XER_ADVANCE(ch_size); + continue; + } + + /* Fall through */ + default: + break; + } + + ASN_DEBUG("Unexpected XML tag in SET, expected \"%s\"", + xml_tag); + break; + } + + ctx->phase = 4; /* "Phase out" on hard failure */ + RETURN(RC_FAIL); +} + +asn_enc_rval_t +SET_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, + void *app_key) { + const asn_SET_specifics_t *specs = (const asn_SET_specifics_t *)td->specifics; + asn_enc_rval_t er; + int xcan = (flags & XER_F_CANONICAL); + const asn_TYPE_tag2member_t *t2m = specs->tag2el_cxer; + size_t t2m_count = specs->tag2el_cxer_count; + size_t edx; + + if(!sptr) + ASN__ENCODE_FAILED; + + assert(t2m_count == td->elements_count); + + er.encoded = 0; + + for(edx = 0; edx < t2m_count; edx++) { + asn_enc_rval_t tmper; + asn_TYPE_member_t *elm; + const void *memb_ptr; + const char *mname; + size_t mlen; + + elm = &td->elements[t2m[edx].el_no]; + mname = elm->name; + mlen = strlen(elm->name); + + if(elm->flags & ATF_POINTER) { + memb_ptr = + *(const void *const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + if(elm->optional) + continue; + /* Mandatory element missing */ + ASN__ENCODE_FAILED; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + if(!xcan) + ASN__TEXT_INDENT(1, ilevel); + ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); + + /* Print the member itself */ + tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, + ilevel + 1, flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + er.encoded += tmper.encoded; + + ASN__CALLBACK3("", 1); + } + + if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); + + ASN__ENCODED_OK(er); +cb_failed: + ASN__ENCODE_FAILED; +} + +int +SET_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + size_t edx; + int ret; + + if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* Dump preamble */ + if(cb(td->name, strlen(td->name), app_key) < 0 + || cb(" ::= {", 6, app_key) < 0) + return -1; + + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + if(elm->optional) continue; + /* Print line */ + /* Fall through */ + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + _i_INDENT(1); + + /* Print the member's name and stuff */ + if(cb(elm->name, strlen(elm->name), app_key) < 0 + || cb(": ", 2, app_key) < 0) + return -1; + + /* Print the member itself */ + ret = elm->type->op->print_struct(elm->type, memb_ptr, ilevel + 1, + cb, app_key); + if(ret) return ret; + } + + ilevel--; + _i_INDENT(1); + + return (cb("}", 1, app_key) < 0) ? -1 : 0; +} + +void +SET_free(const asn_TYPE_descriptor_t *td, void *ptr, + enum asn_struct_free_method method) { + size_t edx; + + if(!td || !ptr) + return; + + ASN_DEBUG("Freeing %s as SET", td->name); + + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; + if(elm->flags & ATF_POINTER) { + memb_ptr = *(void **)((char *)ptr + elm->memb_offset); + if(memb_ptr) + ASN_STRUCT_FREE(*elm->type, memb_ptr); + } else { + memb_ptr = (void *)((char *)ptr + elm->memb_offset); + ASN_STRUCT_FREE_CONTENTS_ONLY(*elm->type, memb_ptr); + } + } + + switch(method) { + case ASFM_FREE_EVERYTHING: + FREEMEM(ptr); + break; + case ASFM_FREE_UNDERLYING: + break; + case ASFM_FREE_UNDERLYING_AND_RESET: + memset(ptr, 0, + ((const asn_SET_specifics_t *)(td->specifics))->struct_size); + break; + } +} + +int +SET_constraint(const asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t edx; + + if(!sptr) { + ASN__CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* + * Iterate over structure members and check their validity. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + if(elm->optional) + continue; + ASN__CTFAIL(app_key, td, sptr, + "%s: mandatory element %s absent (%s:%d)", + td->name, elm->name, __FILE__, __LINE__); + return -1; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + if(elm->encoding_constraints.general_constraints) { + return elm->encoding_constraints.general_constraints( + elm->type, memb_ptr, ctfailcb, app_key); + } else { + return elm->type->encoding_constraints.general_constraints( + elm->type, memb_ptr, ctfailcb, app_key); + } + } + + return 0; +} + +int +SET_compare(const asn_TYPE_descriptor_t *td, const void *aptr, + const void *bptr) { + size_t edx; + + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *amemb; + const void *bmemb; + int ret; + + if(elm->flags & ATF_POINTER) { + amemb = + *(const void *const *)((const char *)aptr + elm->memb_offset); + bmemb = + *(const void *const *)((const char *)bptr + elm->memb_offset); + if(!amemb) { + if(!bmemb) continue; + return -1; + } else if(!bmemb) { + return 1; + } + } else { + amemb = (const void *)((const char *)aptr + elm->memb_offset); + bmemb = (const void *)((const char *)bptr + elm->memb_offset); + } + + ret = elm->type->op->compare_struct(elm->type, amemb, bmemb); + if(ret != 0) return ret; + } + + return 0; +} + + +asn_TYPE_operation_t asn_OP_SET = { + SET_free, + SET_print, + SET_compare, + SET_decode_ber, + SET_encode_der, + SET_decode_xer, + SET_encode_xer, + 0, /* SET_decode_oer */ + 0, /* SET_encode_oer */ + 0, /* SET_decode_uper */ + 0, /* SET_encode_uper */ + 0, /* SET_decode_aper */ + 0, /* SET_encode_aper */ + SET_random_fill, + 0 /* Use generic outmost tag fetcher */ +}; + + +asn_random_fill_result_t +SET_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, + const asn_encoding_constraints_t *constr, + size_t max_length) { + const asn_SET_specifics_t *specs = + (const asn_SET_specifics_t *)td->specifics; + asn_random_fill_result_t result_ok = {ARFILL_OK, 0}; + asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0}; + asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0}; + void *st = *sptr; + size_t edx; + + if(max_length == 0) return result_skipped; + + (void)constr; + + if(st == NULL) { + st = CALLOC(1, specs->struct_size); + if(st == NULL) { + return result_failed; + } + } + + for(edx = 0; edx < td->elements_count; edx++) { + const asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + asn_random_fill_result_t tmpres; + + if(elm->optional && asn_random_between(0, 4) == 2) { + /* Sometimes decide not to fill the optional value */ + continue; + } + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + tmpres = elm->type->op->random_fill( + elm->type, memb_ptr2, &elm->encoding_constraints, + max_length > result_ok.length ? max_length - result_ok.length : 0); + switch(tmpres.code) { + case ARFILL_OK: + result_ok.length += tmpres.length; + continue; + case ARFILL_SKIPPED: + assert(!(elm->flags & ATF_POINTER) || *memb_ptr2 == NULL); + continue; + case ARFILL_FAILED: + if(st == *sptr) { + ASN_STRUCT_RESET(*td, st); + } else { + ASN_STRUCT_FREE(*td, st); + } + return tmpres; + } + } + + *sptr = st; + + return result_ok; +} + diff --git a/e2sm/lib/cscope.out b/e2sm/lib/cscope.out new file mode 100644 index 0000000..9b3ad35 --- /dev/null +++ b/e2sm/lib/cscope.out @@ -0,0 +1,116022 @@ +cscope 15 $HOME/Desktop/kpimon/e2sm/lib 0000709974 + @AMF-UE-NGAP-ID.c + +8  + ~"AMF-UE-NGAP-ID.h +" + +11 + $AMF_UE_NGAP_ID_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13 cÚ¡ +INTEGER_t + * +¡ + = (cÚ¡ INTEGER_ˆ*) +¥Œ +; + +14  +v®ue +; + +16 if(! +¥Œ +) { + +17 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +19 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +23 if( + `a¢_INTEGER2lÚg +( +¡ +, & +v®ue +)) { + +24 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +26 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +30 if(( +v®ue + >= 0 && value <= 1099511627775)) { + +34 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +36 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +39 + } +} + +45 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_AMF_UE_NGAP_ID_cÚ¡r_1 + + gCC_NOTUSED + = { + +46 { +APC_CONSTRAINED +, 40, -1, 0, 1099511627775 } , + +47 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +50 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_AMF_UE_NGAP_ID_gs_1 +[] = { + +51 ( +ASN_TAG_CLASS_UNIVERSAL + | (2 << 2)) + +53 +a¢_TYPE_desütÜ_t + + ga¢_DEF_AMF_UE_NGAP_ID + = { + +56 & +a¢_OP_INTEGER +, + +57 +a¢_DEF_AMF_UE_NGAP_ID_gs_1 +, + +58 ( +a¢_DEF_AMF_UE_NGAP_ID_gs_1 +) + +59 /( +a¢_DEF_AMF_UE_NGAP_ID_gs_1 +[0]), + +60 +a¢_DEF_AMF_UE_NGAP_ID_gs_1 +, + +61 ( +a¢_DEF_AMF_UE_NGAP_ID_gs_1 +) + +62 /( +a¢_DEF_AMF_UE_NGAP_ID_gs_1 +[0]), + +63 { 0, & +a¢_PER_ty³_AMF_UE_NGAP_ID_cÚ¡r_1 +, +AMF_UE_NGAP_ID_cÚ¡¿št + }, + + @AMFPointer.c + +8  + ~"AMFPoš‹r.h +" + +11 + $AMFPoš‹r_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13 cÚ¡ +BIT_STRING_t + * +¡ + = (cÚ¡ BIT_STRING_ˆ*) +¥Œ +; + +14 +size_t + +size +; + +16 if(! +¥Œ +) { + +17 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +19 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +23 if( +¡ +-> +size + > 0) { + +25 +size + = 8 * +¡ +->siz- (¡-> +b™s_unu£d + & 0x07); + +27 +size + = 0; + +30 if(( +size + == 6)) { + +34 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +36 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +39 + } +} + +45 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_AMFPoš‹r_cÚ¡r_1 + + gCC_NOTUSED + = { + +46 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +47 { +APC_CONSTRAINED +, 0, 0, 6, 6 } , + +50 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_AMFPoš‹r_gs_1 +[] = { + +51 ( +ASN_TAG_CLASS_UNIVERSAL + | (3 << 2)) + +53 +a¢_TYPE_desütÜ_t + + ga¢_DEF_AMFPoš‹r + = { + +56 & +a¢_OP_BIT_STRING +, + +57 +a¢_DEF_AMFPoš‹r_gs_1 +, + +58 ( +a¢_DEF_AMFPoš‹r_gs_1 +) + +59 /( +a¢_DEF_AMFPoš‹r_gs_1 +[0]), + +60 +a¢_DEF_AMFPoš‹r_gs_1 +, + +61 ( +a¢_DEF_AMFPoš‹r_gs_1 +) + +62 /( +a¢_DEF_AMFPoš‹r_gs_1 +[0]), + +63 { 0, & +a¢_PER_ty³_AMFPoš‹r_cÚ¡r_1 +, +AMFPoš‹r_cÚ¡¿št + }, + +65 & +a¢_SPC_BIT_STRING_¥ecs + + + @AMFRegionID.c + +8  + ~"AMFRegiÚID.h +" + +11 + $AMFRegiÚID_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13 cÚ¡ +BIT_STRING_t + * +¡ + = (cÚ¡ BIT_STRING_ˆ*) +¥Œ +; + +14 +size_t + +size +; + +16 if(! +¥Œ +) { + +17 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +19 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +23 if( +¡ +-> +size + > 0) { + +25 +size + = 8 * +¡ +->siz- (¡-> +b™s_unu£d + & 0x07); + +27 +size + = 0; + +30 if(( +size + == 8)) { + +34 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +36 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +39 + } +} + +45 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_AMFRegiÚID_cÚ¡r_1 + + gCC_NOTUSED + = { + +46 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +47 { +APC_CONSTRAINED +, 0, 0, 8, 8 } , + +50 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_AMFRegiÚID_gs_1 +[] = { + +51 ( +ASN_TAG_CLASS_UNIVERSAL + | (3 << 2)) + +53 +a¢_TYPE_desütÜ_t + + ga¢_DEF_AMFRegiÚID + = { + +56 & +a¢_OP_BIT_STRING +, + +57 +a¢_DEF_AMFRegiÚID_gs_1 +, + +58 ( +a¢_DEF_AMFRegiÚID_gs_1 +) + +59 /( +a¢_DEF_AMFRegiÚID_gs_1 +[0]), + +60 +a¢_DEF_AMFRegiÚID_gs_1 +, + +61 ( +a¢_DEF_AMFRegiÚID_gs_1 +) + +62 /( +a¢_DEF_AMFRegiÚID_gs_1 +[0]), + +63 { 0, & +a¢_PER_ty³_AMFRegiÚID_cÚ¡r_1 +, +AMFRegiÚID_cÚ¡¿št + }, + +65 & +a¢_SPC_BIT_STRING_¥ecs + + + @AMFSetID.c + +8  + ~"AMFS‘ID.h +" + +11 + $AMFS‘ID_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13 cÚ¡ +BIT_STRING_t + * +¡ + = (cÚ¡ BIT_STRING_ˆ*) +¥Œ +; + +14 +size_t + +size +; + +16 if(! +¥Œ +) { + +17 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +19 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +23 if( +¡ +-> +size + > 0) { + +25 +size + = 8 * +¡ +->siz- (¡-> +b™s_unu£d + & 0x07); + +27 +size + = 0; + +30 if(( +size + == 10)) { + +34 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +36 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +39 + } +} + +45 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_AMFS‘ID_cÚ¡r_1 + + gCC_NOTUSED + = { + +46 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +47 { +APC_CONSTRAINED +, 0, 0, 10, 10 } , + +50 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_AMFS‘ID_gs_1 +[] = { + +51 ( +ASN_TAG_CLASS_UNIVERSAL + | (3 << 2)) + +53 +a¢_TYPE_desütÜ_t + + ga¢_DEF_AMFS‘ID + = { + +56 & +a¢_OP_BIT_STRING +, + +57 +a¢_DEF_AMFS‘ID_gs_1 +, + +58 ( +a¢_DEF_AMFS‘ID_gs_1 +) + +59 /( +a¢_DEF_AMFS‘ID_gs_1 +[0]), + +60 +a¢_DEF_AMFS‘ID_gs_1 +, + +61 ( +a¢_DEF_AMFS‘ID_gs_1 +) + +62 /( +a¢_DEF_AMFS‘ID_gs_1 +[0]), + +63 { 0, & +a¢_PER_ty³_AMFS‘ID_cÚ¡r_1 +, +AMFS‘ID_cÚ¡¿št + }, + +65 & +a¢_SPC_BIT_STRING_¥ecs + + + @BIT_STRING.c + +5  + ~ + +6  + ~ + +7  + ~ + +12 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_BIT_STRING_gs +[] = { + +13 ( +ASN_TAG_CLASS_UNIVERSAL + | (3 << 2)) + +15 +a¢_OCTET_STRING_¥ecifics_t + + ga¢_SPC_BIT_STRING_¥ecs + = { + +16 ( +BIT_STRING_t +), + +17 +off£tof +( +BIT_STRING_t +, +_a¢_ùx +), + +18 +ASN_OSUBV_BIT + + +20 +a¢_TYPE_ݔ©iÚ_t + + ga¢_OP_BIT_STRING + = { + +21 +OCTET_STRING_ä“ +, + +22 +BIT_STRING_´št +, + +23 +BIT_STRING_com·» +, + +24 +OCTET_STRING_decode_b” +, + +25 +OCTET_STRING_’code_d” +, + +26 +OCTET_STRING_decode_x”_bš¬y +, + +27 +BIT_STRING_’code_x” +, + +28 #ifdef +ASN_DISABLE_OER_SUPPORT + + +32 +BIT_STRING_decode_Ûr +, + +33 +BIT_STRING_’code_Ûr +, + +35 #ifdef +ASN_DISABLE_PER_SUPPORT + + +41 +BIT_STRING_decode_u³r +, + +42 +BIT_STRING_’code_u³r +, + +43 +OCTET_STRING_decode_­” +, + +44 +OCTET_STRING_’code_­” +, + +46 +BIT_STRING_¿ndom_fžl +, + +49 +a¢_TYPE_desütÜ_t + + ga¢_DEF_BIT_STRING + = { + +52 & +a¢_OP_BIT_STRING +, + +53 +a¢_DEF_BIT_STRING_gs +, + +54 ( +a¢_DEF_BIT_STRING_gs +) + +55 / ( +a¢_DEF_BIT_STRING_gs +[0]), + +56 +a¢_DEF_BIT_STRING_gs +, + +57 ( +a¢_DEF_BIT_STRING_gs +) + +58 / ( +a¢_DEF_BIT_STRING_gs +[0]), + +59 { 0, 0, +BIT_STRING_cÚ¡¿št + }, + +61 & +a¢_SPC_BIT_STRING_¥ecs + + +68 + $BIT_STRING_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +69 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +70 cÚ¡ +BIT_STRING_t + * +¡ + = (cÚ¡ BIT_STRING_ˆ*) +¥Œ +; + +72 if( +¡ + && st-> +buf +) { + +73 if(( +¡ +-> +size + =ð0 && st-> +b™s_unu£d +) + +74 || +¡ +-> +b™s_unu£d + < 0 || st->bits_unused > 7) { + +75 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +77 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +81 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +83 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +88 + } +} + +90 cÚ¡ * + g_b™_·‰”n +[16] = { + +95 +a¢_’c_rv®_t + + +96 + $BIT_STRING_’code_x” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +97  +žev– +, +x”_’cod”_æags_e + +æags +, + +98 +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +99 +a¢_’c_rv®_t + +” + = {0, 0, 0}; + +100  +sü©ch +[128]; + +101 * +p + = +sü©ch +; + +102 * +sûnd + = +sü©ch + + ((scratch) - 10); + +103 cÚ¡ +BIT_STRING_t + * +¡ + = (cÚ¡ BIT_STRING_ˆ*) +¥Œ +; + +104  +xÿn + = ( +æags + & +XER_F_CANONICAL +); + +105 +ušt8_t + * +buf +; + +106 +ušt8_t + * +’d +; + +108 if(! +¡ + || !¡-> +buf +) + +109 +ASN__ENCODE_FAILED +; + +111 +” +. +’coded + = 0; + +113 +buf + = +¡ +->buf; + +114 +’d + = +buf + + +¡ +-> +size + - 1; + +119 ; +buf + < +’d +; buf++) { + +120  +v + = * +buf +; + +121  +ƚe + = +xÿn +?0:((( +buf + - +¡ +->buf) % 8) == 0); + +122 if( +p + >ð +sûnd + || +ƚe +) { + +123 + `ASN__CALLBACK +( +sü©ch +, +p + - scratch); + +124 +p + = +sü©ch +; + +125 if( +ƚe +è + `ASN__TEXT_INDENT +(1, +žev– +); + +127 + `memýy +( +p + + 0, +_b™_·‰”n +[ +v + >> 4], 4); + +128 + `memýy +( +p + + 4, +_b™_·‰”n +[ +v + & 0x0f], 4); + +129 +p + += 8; + +132 if(! +xÿn + && (( +buf + - +¡ +->buf) % 8) == 0) + +133 + `ASN__TEXT_INDENT +(1, +žev– +); + +134 + `ASN__CALLBACK +( +sü©ch +, +p + - scratch); + +135 +p + = +sü©ch +; + +137 if( +buf + =ð +’d +) { + +138  +v + = * +buf +; + +139  +ub™s + = +¡ +-> +b™s_unu£d +; + +140  +i +; + +141  +i + = 7; i >ð +ub™s +; i--) + +142 * +p +++ = ( +v + & (1 << +i +)) ? 0x31 : 0x30; + +143 + `ASN__CALLBACK +( +sü©ch +, +p + - scratch); + +146 if(! +xÿn +è + `ASN__TEXT_INDENT +(1, +žev– + - 1); + +148 + `ASN__ENCODED_OK +( +” +); + +149 +cb_çžed +: + +150 +ASN__ENCODE_FAILED +; + +151 + } +} + +158 + $BIT_STRING_´št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +,  +žev– +, + +159 +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +160 cÚ¡ * cÚ¡ +h2c + = "0123456789ABCDEF"; + +161  +sü©ch +[64]; + +162 cÚ¡ +BIT_STRING_t + * +¡ + = (cÚ¡ BIT_STRING_ˆ*) +¥Œ +; + +163 +ušt8_t + * +buf +; + +164 +ušt8_t + * +’d +; + +165 * +p + = +sü©ch +; + +167 () +td +; + +169 if(! +¡ + || !¡-> +buf +) + +170  ( + `cb +("", 8, +­p_key +) < 0) ? -1 : 0; + +172 +žev– +++; + +173 +buf + = +¡ +->buf; + +174 +’d + = +buf + + +¡ +-> +size +; + +179 ; +buf + < +’d +; buf++) { + +180 if(( +buf + - +¡ +->bufè% 16 =ð0 && (¡-> +size + > 16) + +181 && +buf + !ð +¡ +->buf) { + +182 + `_i_INDENT +(1); + +184 if( + `cb +( +sü©ch +, +p + - sü©ch, +­p_key +) < 0)  -1; + +185 +p + = +sü©ch +; + +187 * +p +++ = +h2c +[* +buf + >> 4]; + +188 * +p +++ = +h2c +[* +buf + & 0x0F]; + +189 * +p +++ = 0x20; + +192 if( +p + > +sü©ch +) { + +193 +p +--; + +195 if(( +¡ +-> +size + > 16)) { + +196 + `_i_INDENT +(1); + +200 if( + `cb +( +sü©ch +, +p + - sü©ch, +­p_key +) < 0) + +204 if( +¡ +-> +b™s_unu£d +) { + +205  +»t + = + `¢´štf +( +sü©ch +, (scratch), " (%d bit%s unused)", + +206 +¡ +-> +b™s_unu£d +, st->bits_unused == 1 ? "" : "s"); + +207 + `as£¹ +( +»t + > 0 &&„‘ < ( +ssize_t +)( +sü©ch +)); + +208 if( +»t + > 0 &&„‘ < ( +ssize_t +)( +sü©ch +) + +209 && + `cb +( +sü©ch +, +»t +, +­p_key +) < 0) + +214 + } +} + +219 cÚ¡ +BIT_STRING_t + * + +220 + $BIT_STRING__com·ùify +(cÚ¡ +BIT_STRING_t + * +¡ +, BIT_STRING_ˆ* +tmp +) { + +221 cÚ¡ +ušt8_t + * +b +; + +223 cÚ¡ +ušt8_t + * +c_buf +; + +224 +ušt8_t + * +nc_buf +; + +225 } +uncÚ¡ +; + +227 if( +¡ +-> +size + == 0) { + +228 + `as£¹ +( +¡ +-> +b™s_unu£d + == 0); + +229  +¡ +; + +231  +b + = & +¡ +-> +buf +[¡-> +size + - 1]; b > st->buf && *b == 0; b--) { + +235 if(* +b +) { + +236  +unu£d + = 7; + +237 +ušt8_t + +v + = * +b +; + +238 +v + &ð-( +št8_t +)v; + +239 if( +v + & 0x0Fè +unu£d + -= 4; + +240 if( +v + & 0x33è +unu£d + -= 2; + +241 if( +v + & 0x55è +unu£d + -= 1; + +242 +tmp +-> +size + = +b +- +¡ +-> +buf + + 1; + +243 +tmp +-> +b™s_unu£d + = +unu£d +; + +245 +tmp +-> +size + = +b +- +¡ +-> +buf +; + +246 +tmp +-> +b™s_unu£d + = 0; + +249 + `as£¹ +( +b + >ð +¡ +-> +buf +); + +252 +uncÚ¡ +. +c_buf + = +¡ +-> +buf +; + +253 +tmp +-> +buf + = +uncÚ¡ +. +nc_buf +; + +254  +tmp +; + +255 + } +} + +262 + $BIT_STRING_com·» +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +­Œ +, + +263 cÚ¡ * +b±r +) { + +269 +BIT_STRING_t + +com·ù_a +, +com·ù_b +; + +270 cÚ¡ +BIT_STRING_t + * +a + = + `BIT_STRING__com·ùify +( +­Œ +, & +com·ù_a +); + +271 cÚ¡ +BIT_STRING_t + * +b + = + `BIT_STRING__com·ùify +( +b±r +, & +com·ù_b +); + +272 cÚ¡ +a¢_OCTET_STRING_¥ecifics_t + * +¥ecs + = +td +-> +¥ecifics +; + +274 + `as£¹ +( +¥ecs + && s³cs-> +subv¬ŸÁ + =ð +ASN_OSUBV_BIT +); + +276 if( +a + && +b +) { + +277 +size_t + +commÚ_´efix_size + = +a +-> +size + <ð +b +->size ?‡->size : b->size; + +278  +»t + = + `memcmp +( +a +-> +buf +, +b +->buf, +commÚ_´efix_size +); + +279 if( +»t + == 0) { + +281 if( +a +-> +size + < +b +->size) { + +283 } if( +a +-> +size + > +b +->size) { + +287 if( +a +-> +b™s_unu£d + > +b +->bits_unused) { + +289 } if( +a +-> +b™s_unu£d + < +b +->bits_unused) { + +296  +»t +; + +298 } if(! +a + && ! +b +) { + +300 } if(! +a +) { + +305 + } +} + +307 #iâdeà +ASN_DISABLE_PER_SUPPORT + + +309 #undeà +RETURN + + +310  + #RETURN +( +_code +) \ + +312 +a¢_dec_rv®_t + +tm´v® +; \ + +313 +tm´v® +. +code + = +_code +; \ + +314 +tm´v® +. +cÚsumed + = +cÚsumed_my£lf +; \ + +315  +tm´v® +; \ + +316 } 0) + + ) + +318  +a¢_³r_cÚ¡¿št_t + + ga¢_DEF_BIT_STRING_cÚ¡¿št_size + = { + +319 +APC_SEMI_CONSTRAINED +, -1, -1, 0, 0}; + +321 +a¢_dec_rv®_t + + +322 + $BIT_STRING_decode_u³r +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +323 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +324 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, ** +¥Œ +, + +325 +a¢_³r_d©a_t + * +pd +) { + +326 cÚ¡ +a¢_OCTET_STRING_¥ecifics_t + * +¥ecs + = +td +-> +¥ecifics + + +327 ? (cÚ¡ +a¢_OCTET_STRING_¥ecifics_t + *) +td +-> +¥ecifics + + +328 : & +a¢_SPC_BIT_STRING_¥ecs +; + +329 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +pc + = + +330 +cÚ¡¿šts + ? cÚ¡¿št : +td +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +; + +331 cÚ¡ +a¢_³r_cÚ¡¿št_t + * +csiz +; + +332 +a¢_dec_rv®_t + +rv® + = { +RC_OK +, 0 }; + +333 +BIT_STRING_t + * +¡ + = (BIT_STRING_ˆ*)* +¥Œ +; + +334 +ssize_t + +cÚsumed_my£lf + = 0; + +335  +»³© +; + +337 () +Ýt_codec_ùx +; + +339 if( +pc +) { + +340 +csiz + = & +pc +-> +size +; + +342 +csiz + = & +a¢_DEF_BIT_STRING_cÚ¡¿št_size +; + +345 if( +¥ecs +-> +subv¬ŸÁ + !ð +ASN_OSUBV_BIT +) { + +346 + `ASN_DEBUG +("Subv¬ŸÁ %d i nÙ BIT OSUBV_BIT", +¥ecs +-> +subv¬ŸÁ +); + +347 + `RETURN +( +RC_FAIL +); + +353 if(! +¡ +) { + +354 +¡ + = ( +BIT_STRING_t + *)(* +¥Œ + = + `CALLOC +(1, +¥ecs +-> +¡ruù_size +)); + +355 if(! +¡ +è + `RETURN +( +RC_FAIL +); + +358 + `ASN_DEBUG +("PER Decoding %s size %ld .. %ld bits %d", + +359 +csiz +-> +æags + & +APC_EXTENSIBLE + ? "extensible" : "non-extensible", + +360 +csiz +-> +low”_bound +, csiz-> +uµ”_bound +, csiz-> +efãùive_b™s +); + +362 if( +csiz +-> +æags + & +APC_EXTENSIBLE +) { + +363  +šext + = + `³r_g‘_ãw_b™s +( +pd +, 1); + +364 if( +šext + < 0è + `RETURN +( +RC_WMORE +); + +365 if( +šext +) { + +366 +csiz + = & +a¢_DEF_BIT_STRING_cÚ¡¿št_size +; + +370 if( +csiz +-> +efãùive_b™s + >= 0) { + +371 + `FREEMEM +( +¡ +-> +buf +); + +372 +¡ +-> +size + = ( +csiz +-> +uµ”_bound + + 7) >> 3; + +373 +¡ +-> +buf + = ( +ušt8_t + *) + `MALLOC +(¡-> +size + + 1); + +374 if(! +¡ +-> +buf +è{ st-> +size + = 0; + `RETURN +( +RC_FAIL +); } + +380 if( +csiz +-> +efãùive_b™s + == 0) { + +381  +»t +; + +382 + `ASN_DEBUG +("Encodšg BIT STRING siz%ld", +csiz +-> +uµ”_bound +); + +383 +»t + = + `³r_g‘_mªy_b™s +( +pd +, +¡ +-> +buf +, 0, +csiz +-> +uµ”_bound +); + +384 if( +»t + < 0è + `RETURN +( +RC_WMORE +); + +385 +cÚsumed_my£lf + +ð +csiz +-> +uµ”_bound +; + +386 +¡ +-> +buf +[¡-> +size +] = 0; + +387 +¡ +-> +b™s_unu£d + = (8 - ( +csiz +-> +uµ”_bound + & 0x7)) & 0x7; + +388 + `RETURN +( +RC_OK +); + +391 +¡ +-> +size + = 0; + +393 +ssize_t + +¿w_Ën +; + +394 +ssize_t + +Ën_by‹s +; + +395 +ssize_t + +Ën_b™s +; + +396 * +p +; + +397  +»t +; + +400 +¿w_Ën + = + `u³r_g‘_Ëngth +( +pd +, +csiz +-> +efãùive_b™s +, csiz-> +low”_bound +, + +401 & +»³© +); + +402 if( +¿w_Ën + < 0è + `RETURN +( +RC_WMORE +); + +403 if( +¿w_Ën + =ð0 && +¡ +-> +buf +) ; + +405 + `ASN_DEBUG +("Got PER†engthƒb %ld,†en %ld, %s (%s)", + +406 () +csiz +-> +efãùive_b™s +, () +¿w_Ën +, + +407 +»³© + ? "»³©" : "Úû", +td +-> +Çme +); + +408 +Ën_b™s + = +¿w_Ën +; + +409 +Ën_by‹s + = ( +Ën_b™s + + 7) >> 3; + +410 if( +Ën_b™s + & 0x7è +¡ +-> +b™s_unu£d + = 8 - (len_bits & 0x7); + +412 +p + = + `REALLOC +( +¡ +-> +buf +, st-> +size + + +Ën_by‹s + + 1); + +413 if(! +p +è + `RETURN +( +RC_FAIL +); + +414 +¡ +-> +buf + = ( +ušt8_t + *) +p +; + +416 +»t + = + `³r_g‘_mªy_b™s +( +pd +, & +¡ +-> +buf +[¡-> +size +], 0, +Ën_b™s +); + +417 if( +»t + < 0è + `RETURN +( +RC_WMORE +); + +418 +¡ +-> +size + +ð +Ën_by‹s +; + +419 }  +»³© +); + +420 +¡ +-> +buf +[¡-> +size +] = 0; + +422  +rv® +; + +423 + } +} + +425 +a¢_’c_rv®_t + + +426 + $BIT_STRING_’code_u³r +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +427 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +428 cÚ¡ * +¥Œ +, +a¢_³r_ou_t + * +po +) { + +429 cÚ¡ +a¢_OCTET_STRING_¥ecifics_t + * +¥ecs + = + +430 +td +-> +¥ecifics + ? (cÚ¡ +a¢_OCTET_STRING_¥ecifics_t + *)td->specifics + +431 : & +a¢_SPC_BIT_STRING_¥ecs +; + +432 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +pc + = + +433 +cÚ¡¿šts + ? cÚ¡¿št : +td +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +; + +434 cÚ¡ +a¢_³r_cÚ¡¿št_t + * +csiz +; + +435 cÚ¡ +BIT_STRING_t + * +¡ + = (cÚ¡ BIT_STRING_ˆ*) +¥Œ +; + +436 +BIT_STRING_t + +com·ù_b¡r +; + +437 +a¢_’c_rv®_t + +” + = { 0, 0, 0 }; + +438  +šext + = 0; + +439 +size_t + +size_š_b™s +; + +440 cÚ¡ +ušt8_t + * +buf +; + +441  +»t +; + +442  +ù_ex‹nsibË +; + +444 if(! +¡ + || (!¡-> +buf + && st-> +size +)) + +445 +ASN__ENCODE_FAILED +; + +447 if( +¥ecs +-> +subv¬ŸÁ + =ð +ASN_OSUBV_BIT +) { + +448 if(( +¡ +-> +size + =ð0 && st-> +b™s_unu£d +) || (st->bits_unused & ~7)) + +449 +ASN__ENCODE_FAILED +; + +451 +ASN__ENCODE_FAILED +; + +454 if( +pc +) { + +455 +csiz + = & +pc +-> +size +; + +457 +csiz + = & +a¢_DEF_BIT_STRING_cÚ¡¿št_size +; + +459 +ù_ex‹nsibË + = +csiz +-> +æags + & +APC_EXTENSIBLE +; + +462 +¡ + = + `BIT_STRING__com·ùify +(¡, & +com·ù_b¡r +); + +463 +size_š_b™s + = 8 * +¡ +-> +size + - st-> +b™s_unu£d +; + +465 + `ASN_DEBUG +( + +466 "Encodšg % štØ%" +ASN_PRI_SIZE + " bits" + +468 +td +-> +Çme +, +size_š_b™s +, +csiz +-> +low”_bound +, csiz-> +uµ”_bound +, + +469 +csiz +-> +efãùive_b™s +, +ù_ex‹nsibË + ? " EXT" : ""); + +473 if( +csiz +-> +efãùive_b™s + >= 0) { + +474 if(( +ssize_t +) +size_š_b™s + > +csiz +-> +uµ”_bound +) { + +475 if( +ù_ex‹nsibË +) { + +476 +csiz + = & +a¢_DEF_BIT_STRING_cÚ¡¿št_size +; + +477 +šext + = 1; + +479 +ASN__ENCODE_FAILED +; + +483 +šext + = 0; + +486 if( +ù_ex‹nsibË +) { + +488 if( + `³r_put_ãw_b™s +( +po +, +šext +, 1)) + +489 +ASN__ENCODE_FAILED +; + +492 if( +csiz +-> +efãùive_b™s + >ð0 && ! +šext +) { + +493  +add_Œaž” + = ( +ssize_t +) +size_š_b™s + < +csiz +-> +low”_bound +; + +494 + `ASN_DEBUG +( + +495 "Encodšg %" +ASN_PRI_SIZE + " bytes (%ld),†ength (in %d bits)railer %d;‡ctual " + +496 "v®u%" +ASN_PRI_SSIZE + "", + +497 +¡ +-> +size +, +size_š_b™s + - +csiz +-> +low”_bound +, csiz-> +efãùive_b™s +, + +498 +add_Œaž” +, + +499 +add_Œaž” + ? 0 : ( +ssize_t +) +size_š_b™s + - +csiz +-> +low”_bound +); + +500 +»t + = + `³r_put_ãw_b™s +( + +501 +po +, +add_Œaž” + ? 0 : ( +ssize_t +) +size_š_b™s + - +csiz +-> +low”_bound +, + +502 +csiz +-> +efãùive_b™s +); + +503 if( +»t +è +ASN__ENCODE_FAILED +; + +504 +»t + = + `³r_put_mªy_b™s +( +po +, +¡ +-> +buf +, +size_š_b™s +); + +505 if( +»t +è +ASN__ENCODE_FAILED +; + +506 if( +add_Œaž” +) { + +507 cÚ¡ +ušt8_t + +z”os +[16]; + +508 +size_t + +Œažšg_z”o_b™s + = +csiz +-> +low”_bound + - +size_š_b™s +; + +509  +Œažšg_z”o_b™s + > 0) { + +510 if( +Œažšg_z”o_b™s + > 8 * ( +z”os +)) { + +511 +»t + = + `³r_put_mªy_b™s +( +po +, +z”os +, 8 * (zeros)); + +512 +Œažšg_z”o_b™s + -ð8 * ( +z”os +); + +514 +»t + = + `³r_put_mªy_b™s +( +po +, +z”os +, +Œažšg_z”o_b™s +); + +515 +Œažšg_z”o_b™s + = 0; + +517 if( +»t +è +ASN__ENCODE_FAILED +; + +520 + `ASN__ENCODED_OK +( +” +); + +523 + `ASN_DEBUG +("Encodšg %" +ASN_PRI_SIZE + " by‹s", +¡ +-> +size +); + +525 +buf + = +¡ +->buf; + +527  +Ãed_eom + = 0; + +528 +ssize_t + +maySave + = + `u³r_put_Ëngth +( +po +, +size_š_b™s +, & +Ãed_eom +); + +529 if( +maySave + < 0è +ASN__ENCODE_FAILED +; + +531 + `ASN_DEBUG +("Encodšg %" +ASN_PRI_SSIZE + " oà%" +ASN_PRI_SIZE + "", +maySave +, +size_š_b™s +); + +533 +»t + = + `³r_put_mªy_b™s +( +po +, +buf +, +maySave +); + +534 if( +»t +è +ASN__ENCODE_FAILED +; + +536 +buf + +ð +maySave + >> 3; + +537 +size_š_b™s + -ð +maySave +; + +538 + `as£¹ +(!( +maySave + & 0x07è|| ! +size_š_b™s +); + +539 if( +Ãed_eom + && + `u³r_put_Ëngth +( +po +, 0, 0)) + +540 +ASN__ENCODE_FAILED +; + +541 }  +size_š_b™s +); + +543 + `ASN__ENCODED_OK +( +” +); + +544 + } +} + +548 +a¢_¿ndom_fžl_»suÉ_t + + +549 + $BIT_STRING_¿ndom_fžl +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¥Œ +, + +550 cÚ¡ +a¢_’codšg_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +551 +size_t + +max_Ëngth +) { + +552 cÚ¡ +a¢_OCTET_STRING_¥ecifics_t + * +¥ecs + = + +553 +td +-> +¥ecifics + ? (cÚ¡ +a¢_OCTET_STRING_¥ecifics_t + *)td->specifics + +554 : & +a¢_SPC_BIT_STRING_¥ecs +; + +555 +a¢_¿ndom_fžl_»suÉ_t + +»suÉ_ok + = { +ARFILL_OK +, 1}; + +556 +a¢_¿ndom_fžl_»suÉ_t + +»suÉ_çžed + = { +ARFILL_FAILED +, 0}; + +557 +a¢_¿ndom_fžl_»suÉ_t + +»suÉ_sk³d + = { +ARFILL_SKIPPED +, 0}; + +558  +Ëngths +[] = {0, 1, 2, 3, 4, 8, + +561 +ušt8_t + * +buf +; + +562 +ušt8_t + * +b’d +; + +563 +ušt8_t + * +b +; + +564 +size_t + +ºd_b™s +, +ºd_Ën +; + +565 +BIT_STRING_t + * +¡ +; + +567 if( +max_Ëngth + =ð0è +»suÉ_sk³d +; + +569  +¥ecs +-> +subv¬ŸÁ +) { + +570  +ASN_OSUBV_ANY +: + +571  +»suÉ_çžed +; + +572  +ASN_OSUBV_BIT +: + +579 +ºd_b™s + = +Ëngths +[ + `a¢_¿ndom_b‘w“n +( + +580 0, ( +Ëngths +) / (lengths[0]) - 1)]; + +581 if(! +cÚ¡¿šts + || !cÚ¡¿šts-> +³r_cÚ¡¿šts +) + +582 +cÚ¡¿šts + = & +td +-> +’codšg_cÚ¡¿šts +; + +583 if( +cÚ¡¿šts +-> +³r_cÚ¡¿šts +) { + +584 cÚ¡ +a¢_³r_cÚ¡¿št_t + * +pc + = & +cÚ¡¿šts +-> +³r_cÚ¡¿šts +-> +size +; + +585 if( +pc +-> +æags + & +APC_CONSTRAINED +) { + +586  +sugge¡ed_uµ”_bound + = +pc +-> +uµ”_bound + < ( +ssize_t +) +max_Ëngth + + +587 ? +pc +-> +uµ”_bound + + +588 : ( +ssize_t +) +max_Ëngth +; + +589 if( +max_Ëngth + < ( +size_t +) +pc +-> +low”_bound +) { + +590  +»suÉ_sk³d +; + +592 if( +pc +-> +æags + & +APC_EXTENSIBLE +) { + +593  + `a¢_¿ndom_b‘w“n +(0, 5)) { + +595 if( +pc +-> +low”_bound + > 0) { + +596 +ºd_b™s + = +pc +-> +low”_bound + - 1; + +601 +ºd_b™s + = +pc +-> +uµ”_bound + + 1; + +605 if( +ºd_b™s + < +max_Ëngth +) { + +610 +ºd_b™s + = + `a¢_¿ndom_b‘w“n +( +pc +-> +low”_bound +, + +611 +sugge¡ed_uµ”_bound +); + +614 +ºd_b™s + = + +615 + `a¢_¿ndom_b‘w“n +( +pc +-> +low”_bound +, +sugge¡ed_uµ”_bound +); + +618 +ºd_b™s + = + `a¢_¿ndom_b‘w“n +(0, +max_Ëngth + - 1); + +620 } if( +ºd_b™s + >ð +max_Ëngth +) { + +621 +ºd_b™s + = + `a¢_¿ndom_b‘w“n +(0, +max_Ëngth + - 1); + +624 +ºd_Ën + = ( +ºd_b™s + + 7) / 8; + +625 +buf + = + `CALLOC +(1, +ºd_Ën + + 1); + +626 if(! +buf +è +»suÉ_çžed +; + +628 +b’d + = & +buf +[ +ºd_Ën +]; + +630  +b + = +buf +; b < +b’d +; b++) { + +631 *( +ušt8_t + *) +b + = + `a¢_¿ndom_b‘w“n +(0, 255); + +633 * +b + = 0; + +635 if(* +¥Œ +) { + +636 +¡ + = * +¥Œ +; + +637 + `FREEMEM +( +¡ +-> +buf +); + +639 +¡ + = ( +BIT_STRING_t + *)(* +¥Œ + = + `CALLOC +(1, +¥ecs +-> +¡ruù_size +)); + +640 if(! +¡ +) { + +641 + `FREEMEM +( +buf +); + +642  +»suÉ_çžed +; + +646 +¡ +-> +buf + = buf; + +647 +¡ +-> +size + = +ºd_Ën +; + +648 +¡ +-> +b™s_unu£d + = (8 - ( +ºd_b™s + & 0x7)) & 0x7; + +649 if( +¡ +-> +b™s_unu£d +) { + +650 + `as£¹ +( +¡ +-> +size + > 0); + +651 +¡ +-> +buf +[¡-> +size +-1] &ð0xfà<< st-> +b™s_unu£d +; + +654 +»suÉ_ok +. +Ëngth + = +¡ +-> +size +; + +655  +»suÉ_ok +; + +656 + } +} + + @BOOLEAN.c + +5  + ~ + +6  + ~ + +7  + ~ + +12 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_BOOLEAN_gs +[] = { + +13 ( +ASN_TAG_CLASS_UNIVERSAL + | (1 << 2)) + +15 +a¢_TYPE_ݔ©iÚ_t + + ga¢_OP_BOOLEAN + = { + +16 +BOOLEAN_ä“ +, + +17 +BOOLEAN_´št +, + +18 +BOOLEAN_com·» +, + +19 +BOOLEAN_decode_b” +, + +20 +BOOLEAN_’code_d” +, + +21 +BOOLEAN_decode_x” +, + +22 +BOOLEAN_’code_x” +, + +23 #ifdef +ASN_DISABLE_OER_SUPPORT + + +27 +BOOLEAN_decode_Ûr +, + +28 +BOOLEAN_’code_Ûr +, + +30 #ifdef +ASN_DISABLE_PER_SUPPORT + + +36 +BOOLEAN_decode_u³r +, + +37 +BOOLEAN_’code_u³r +, + +38 +BOOLEAN_decode_­” +, + +39 +BOOLEAN_’code_­” +, + +41 +BOOLEAN_¿ndom_fžl +, + +44 +a¢_TYPE_desütÜ_t + + ga¢_DEF_BOOLEAN + = { + +47 & +a¢_OP_BOOLEAN +, + +48 +a¢_DEF_BOOLEAN_gs +, + +49 ( +a¢_DEF_BOOLEAN_gs +) / (asn_DEF_BOOLEAN_tags[0]), + +50 +a¢_DEF_BOOLEAN_gs +, + +51 ( +a¢_DEF_BOOLEAN_gs +) / (asn_DEF_BOOLEAN_tags[0]), + +52 { 0, 0, +a¢_g’”ic_no_cÚ¡¿št + }, + +60 +a¢_dec_rv®_t + + +61 + $BOOLEAN_decode_b” +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +62 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +boÞ_v®ue +, + +63 cÚ¡ * +buf_±r +, +size_t + +size +,  +g_mode +) { + +64 +BOOLEAN_t + * +¡ + = (BOOLEAN_ˆ*)* +boÞ_v®ue +; + +65 +a¢_dec_rv®_t + +rv® +; + +66 +b”_Žv_Ën_t + +Ëngth +; + +67 +b”_Žv_Ën_t + +lidx +; + +69 if( +¡ + =ð +NULL +) { + +70 +¡ + = ( +BOOLEAN_t + *)(* +boÞ_v®ue + = + `CALLOC +(1, (*st))); + +71 if( +¡ + =ð +NULL +) { + +72 +rv® +. +code + = +RC_FAIL +; + +73 +rv® +. +cÚsumed + = 0; + +74  +rv® +; + +78 + `ASN_DEBUG +("Decoding %s‡s BOOLEAN (tm=%d)", + +79 +td +-> +Çme +, +g_mode +); + +84 +rv® + = + `b”_check_gs +( +Ýt_codec_ùx +, +td +, 0, +buf_±r +, +size +, + +85 +g_mode +, 0, & +Ëngth +, 0); + +86 if( +rv® +. +code + !ð +RC_OK +) + +87  +rv® +; + +89 + `ASN_DEBUG +("BoޗÀËngth i %d by‹s", () +Ëngth +); + +91 +buf_±r + = ((cÚ¡ *)buf_±rè+ +rv® +. +cÚsumed +; + +92 +size + -ð +rv® +. +cÚsumed +; + +93 if( +Ëngth + > ( +b”_Žv_Ën_t +) +size +) { + +94 +rv® +. +code + = +RC_WMORE +; + +95 +rv® +. +cÚsumed + = 0; + +96  +rv® +; + +102 * +¡ + = 0, +lidx + = 0; + +103 ( +lidx + < +Ëngth +è&& * +¡ + == 0;†idx++) { + +109 * +¡ + |ð((cÚ¡ +ušt8_t + *) +buf_±r +)[ +lidx +]; + +112 +rv® +. +code + = +RC_OK +; + +113 +rv® +. +cÚsumed + +ð +Ëngth +; + +115 + `ASN_DEBUG +("Took %ld/%ld bytesoƒncode %s, value=%d", + +116 () +rv® +. +cÚsumed +, () +Ëngth +, + +117 +td +-> +Çme +, * +¡ +); + +119  +rv® +; + +120 + } +} + +122 +a¢_’c_rv®_t + + +123 + $BOOLEAN_’code_d” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +124  +g_mode +, +b”_Žv_g_t + +g +, +a¢_­p_cÚsume_by‹s_f + * +cb +, + +125 * +­p_key +) { + +126 +a¢_’c_rv®_t + +”v® + = {0,0,0}; + +127 cÚ¡ +BOOLEAN_t + * +¡ + = (cÚ¡ BOOLEAN_ˆ*) +¥Œ +; + +129 +”v® +. +’coded + = + `d”_wr™e_gs +( +td +, 1, +g_mode +, 0, +g +, +cb +, +­p_key +); + +130 if( +”v® +. +’coded + == -1) { + +131 +”v® +. +çžed_ty³ + = +td +; + +132 +”v® +. +¡ruùu»_±r + = +¥Œ +; + +133  +”v® +; + +136 if( +cb +) { + +137 +ušt8_t + +boÞ_v®ue +; + +139 +boÞ_v®ue + = * +¡ + ? 0xff : 0; + +141 if( + `cb +(& +boÞ_v®ue +, 1, +­p_key +) < 0) { + +142 +”v® +. +’coded + = -1; + +143 +”v® +. +çžed_ty³ + = +td +; + +144 +”v® +. +¡ruùu»_±r + = +¥Œ +; + +145  +”v® +; + +149 +”v® +. +’coded + += 1; + +151 + `ASN__ENCODED_OK +( +”v® +); + +152 + } +} + +158  +x”_pbd_rv® + + +159 + $BOOLEAN__x”_body_decode +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, * +¥Œ +, + +160 cÚ¡ * +chunk_buf +, +size_t + +chunk_size +) { + +161 +BOOLEAN_t + * +¡ + = (BOOLEAN_ˆ*) +¥Œ +; + +162 cÚ¡ * +p + = (cÚ¡ *) +chunk_buf +; + +164 () +td +; + +166 if( +chunk_size + && +p +[0] == 0x3c ) { + +167  + `x”_check_g +( +chunk_buf +, +chunk_size +, "false")) { + +168  +XCT_BOTH +: + +170 * +¡ + = 0; + +172  +XCT_UNKNOWN_BO +: + +173 if( + `x”_check_g +( +chunk_buf +, +chunk_size +, "true") + +174 !ð +XCT_BOTH +) + +175  +XPBD_BROKEN_ENCODING +; + +177 * +¡ + = 1; + +180  +XPBD_BROKEN_ENCODING +; + +182  +XPBD_BODY_CONSUMED +; + +184  +XPBD_BROKEN_ENCODING +; + +186 + } +} + +189 +a¢_dec_rv®_t + + +190 + $BOOLEAN_decode_x” +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +191 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¥Œ +, + +192 cÚ¡ * +Ýt_mÇme +, cÚ¡ * +buf_±r +, +size_t + +size +) { + +193  + `x”_decode_´im™ive +( +Ýt_codec_ùx +, +td +, + +194 +¥Œ +, ( +BOOLEAN_t +), +Ýt_mÇme +, +buf_±r +, +size +, + +195 +BOOLEAN__x”_body_decode +); + +196 + } +} + +198 +a¢_’c_rv®_t + + +199 + $BOOLEAN_’code_x” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +200  +žev– +, +x”_’cod”_æags_e + +æags +, + +201 +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +202 cÚ¡ +BOOLEAN_t + * +¡ + = (cÚ¡ BOOLEAN_ˆ*) +¥Œ +; + +203 +a¢_’c_rv®_t + +” + = {0, 0, 0}; + +205 () +žev– +; + +206 () +æags +; + +208 if(! +¡ +è +ASN__ENCODE_FAILED +; + +210 if(* +¡ +) { + +211 + `ASN__CALLBACK +("", 7); + +213 + `ASN__CALLBACK +("", 8); + +216 + `ASN__ENCODED_OK +( +” +); + +217 +cb_çžed +: + +218 +ASN__ENCODE_FAILED +; + +219 + } +} + +222 + $BOOLEAN_´št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +,  +žev– +, + +223 +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +224 cÚ¡ +BOOLEAN_t + * +¡ + = (cÚ¡ BOOLEAN_ˆ*) +¥Œ +; + +225 cÚ¡ * +buf +; + +226 +size_t + +buæ’ +; + +228 () +td +; + +229 () +žev– +; + +231 if( +¡ +) { + +232 if(* +¡ +) { + +233 +buf + = "TRUE"; + +234 +buæ’ + = 4; + +236 +buf + = "FALSE"; + +237 +buæ’ + = 5; + +240 +buf + = ""; + +241 +buæ’ + = 8; + +244  ( + `cb +( +buf +, +buæ’ +, +­p_key +) < 0) ? -1 : 0; + +245 + } +} + +248 + $BOOLEAN_ä“ +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, * +±r +, + +249 +a¢_¡ruù_ä“_m‘hod + +m‘hod +) { + +250 if( +td + && +±r +) { + +251  +m‘hod +) { + +252  +ASFM_FREE_EVERYTHING +: + +253 + `FREEMEM +( +±r +); + +255  +ASFM_FREE_UNDERLYING +: + +257  +ASFM_FREE_UNDERLYING_AND_RESET +: + +258 + `mem£t +( +±r +, 0, ( +BOOLEAN_t +)); + +262 + } +} + +264 #iâdeà +ASN_DISABLE_PER_SUPPORT + + +266 +a¢_dec_rv®_t + + +267 + $BOOLEAN_decode_u³r +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +268 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +269 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, ** +¥Œ +, + +270 +a¢_³r_d©a_t + * +pd +) { + +271 +a¢_dec_rv®_t + +rv +; + +272 +BOOLEAN_t + * +¡ + = (BOOLEAN_ˆ*)* +¥Œ +; + +274 () +Ýt_codec_ùx +; + +275 () +td +; + +276 () +cÚ¡¿šts +; + +278 if(! +¡ +) { + +279 +¡ + = ( +BOOLEAN_t + *)(* +¥Œ + = + `MALLOC +((*st))); + +280 if(! +¡ +è +ASN__DECODE_FAILED +; + +286  + `³r_g‘_ãw_b™s +( +pd +, 1)) { + +287 1: * +¡ + = 1; ; + +288 0: * +¡ + = 0; ; + +289 -1: : +ASN__DECODE_STARVED +; + +292 + `ASN_DEBUG +("% decoded‡ %s", +td +-> +Çme +, * +¡ + ? "TRUE" : "FALSE"); + +294 +rv +. +code + = +RC_OK +; + +295 +rv +. +cÚsumed + = 1; + +296  +rv +; + +297 + } +} + +300 +a¢_’c_rv®_t + + +301 + $BOOLEAN_’code_u³r +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +302 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, cÚ¡ * +¥Œ +, + +303 +a¢_³r_ou_t + * +po +) { + +304 cÚ¡ +BOOLEAN_t + * +¡ + = (cÚ¡ BOOLEAN_ˆ*) +¥Œ +; + +305 +a¢_’c_rv®_t + +” + = { 0, 0, 0 }; + +307 () +cÚ¡¿šts +; + +309 if(! +¡ +è +ASN__ENCODE_FAILED +; + +311 if( + `³r_put_ãw_b™s +( +po +, * +¡ + ? 1 : 0, 1)) + +312 +ASN__ENCODE_FAILED +; + +314 + `ASN__ENCODED_OK +( +” +); + +315 + } +} + +317 +a¢_dec_rv®_t + + +318 + $BOOLEAN_decode_­” +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +319 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, ** +¥Œ +, +a¢_³r_d©a_t + * +pd +) { + +320 +a¢_dec_rv®_t + +rv +; + +321 +BOOLEAN_t + * +¡ + = (BOOLEAN_ˆ*)* +¥Œ +; + +323 () +Ýt_codec_ùx +; + +324 () +cÚ¡¿šts +; + +325 () +td +; + +327 if(! +¡ +) { + +328 +¡ + = ( +BOOLEAN_t + *)(* +¥Œ + = + `MALLOC +((*st))); + +329 if(! +¡ +è +ASN__DECODE_FAILED +; + +335  + `³r_g‘_ãw_b™s +( +pd +, 1)) { + +337 * +¡ + = 1; + +340 * +¡ + = 0; + +344 +ASN__DECODE_STARVED +; + +347 + `ASN_DEBUG +("% decoded‡ %s", +td +-> +Çme +, * +¡ + ? "TRUE" : "FALSE"); + +349 +rv +. +code + = +RC_OK +; + +350 +rv +. +cÚsumed + = 1; + +351  +rv +; + +352 + } +} + +354 +a¢_’c_rv®_t + + +355 + $BOOLEAN_’code_­” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +356 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +357 cÚ¡ * +¥Œ +, +a¢_³r_ou_t + * +po +) { + +358 cÚ¡ +BOOLEAN_t + * +¡ + = (cÚ¡ BOOLEAN_ˆ*) +¥Œ +; + +359 +a¢_’c_rv®_t + +” + = { 0, 0, 0 }; + +361 () +cÚ¡¿šts +; + +363 if(! +¡ +è +ASN__ENCODE_FAILED +; + +365 if( + `³r_put_ãw_b™s +( +po +, * +¡ + ? 1 : 0, 1)) + +366 +ASN__ENCODE_FAILED +; + +368 + `ASN__ENCODED_OK +( +” +); + +369 + } +} + +373 #iâdeà +ASN_DISABLE_OER_SUPPORT + + +378 +a¢_’c_rv®_t + + +379 + $BOOLEAN_’code_Ûr +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +380 cÚ¡ +a¢_Ûr_cÚ¡¿šts_t + * +cÚ¡¿šts +, cÚ¡ * +¥Œ +, + +381 +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +382 +a¢_’c_rv®_t + +” + = { 1, 0, 0 }; + +383 cÚ¡ +BOOLEAN_t + * +¡ + = +¥Œ +; + +384 +ušt8_t + +boÞ_v®ue + = * +¡ + ? 0xff : 0; + +386 () +td +; + +387 () +cÚ¡¿šts +; + +389 if( + `cb +(& +boÞ_v®ue +, 1, +­p_key +) < 0) { + +390 +ASN__ENCODE_FAILED +; + +392 + `ASN__ENCODED_OK +( +” +); + +394 + } +} + +396 +a¢_dec_rv®_t + + +397 + $BOOLEAN_decode_Ûr +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +398 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +399 cÚ¡ +a¢_Ûr_cÚ¡¿šts_t + * +cÚ¡¿šts +, ** +¥Œ +, + +400 cÚ¡ * +±r +, +size_t + +size +) { + +401 +a¢_dec_rv®_t + +ok + = { +RC_OK +, 1}; + +402 +BOOLEAN_t + * +¡ +; + +404 () +Ýt_codec_ùx +; + +405 () +td +; + +406 () +cÚ¡¿šts +; + +408 if( +size + < 1) { + +409 +ASN__DECODE_STARVED +; + +412 if(!( +¡ + = * +¥Œ +)) { + +413 +¡ + = ( +BOOLEAN_t + *)(* +¥Œ + = + `CALLOC +(1, (*st))); + +414 if(! +¡ +è +ASN__DECODE_FAILED +; + +417 * +¡ + = *(cÚ¡ +ušt8_t + *) +±r +; + +419  +ok +; + +420 + } +} + +427 + $BOOLEAN_com·» +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +­Œ +, + +428 cÚ¡ * +b±r +) { + +429 cÚ¡ +BOOLEAN_t + * +a + = +­Œ +; + +430 cÚ¡ +BOOLEAN_t + * +b + = +b±r +; + +432 () +td +; + +434 if( +a + && +b +) { + +435 if(!* +a + =ð!* +b +) { + +437 } if(!* +a +) { + +442 } if(! +a +) { + +447 + } +} + +449 +a¢_¿ndom_fžl_»suÉ_t + + +450 + $BOOLEAN_¿ndom_fžl +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¥Œ +, + +451 cÚ¡ +a¢_’codšg_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +452 +size_t + +max_Ëngth +) { + +453 +a¢_¿ndom_fžl_»suÉ_t + +»suÉ_ok + = { +ARFILL_OK +, 1}; + +454 +a¢_¿ndom_fžl_»suÉ_t + +»suÉ_çžed + = { +ARFILL_FAILED +, 0}; + +455 +a¢_¿ndom_fžl_»suÉ_t + +»suÉ_sk³d + = { +ARFILL_SKIPPED +, 0}; + +456 +BOOLEAN_t + * +¡ + = * +¥Œ +; + +458 if( +max_Ëngth + =ð0è +»suÉ_sk³d +; + +460 if( +¡ + =ð +NULL +) { + +461 +¡ + = ( +BOOLEAN_t + *)(* +¥Œ + = + `CALLOC +(1, (*st))); + +462 if( +¡ + =ð +NULL +) { + +463  +»suÉ_çžed +; + +467 if(! +cÚ¡¿šts + || !cÚ¡¿šts-> +³r_cÚ¡¿šts +) + +468 +cÚ¡¿šts + = & +td +-> +’codšg_cÚ¡¿šts +; + +469 if( +cÚ¡¿šts +-> +³r_cÚ¡¿šts +) { + +470 cÚ¡ +a¢_³r_cÚ¡¿št_t + * +pc + = & +cÚ¡¿šts +-> +³r_cÚ¡¿šts +-> +v®ue +; + +471 if( +pc +-> +æags + & +APC_CONSTRAINED +) { + +472 * +¡ + = + `a¢_¿ndom_b‘w“n +( +pc +-> +low”_bound +,…c-> +uµ”_bound +); + +473  +»suÉ_ok +; + +478  + `a¢_¿ndom_b‘w“n +(0, 7)) { + +482 * +¡ + = 0; ; + +483 3: * +¡ + = -1; ; + +484 4: * +¡ + = 1; ; + +485 5: * +¡ + = +INT_MIN +; ; + +486 6: * +¡ + = +INT_MAX +; ; + +488 * +¡ + = + `a¢_¿ndom_b‘w“n +( +INT_MIN +, +INT_MAX +); + +491  +»suÉ_ok +; + +492 + } +} + + @CGI.c + +8  + ~"CGI.h +" + +10  + ~"NR-CGI.h +" + +11  + ~"EUTRA-CGI.h +" + +12 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_CGI_cÚ¡r_1 + + gCC_NOTUSED + = { + +13 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 1, 1, 0, 1 } , + +14 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +17 +a¢_TYPE_memb”_t + + ga¢_MBR_CGI_1 +[] = { + +18 { +ATF_POINTER +, 0, +off£tof +( +CGI +, +choiû +. +nR_CGI +), + +19 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +21 & +a¢_DEF_NR_CGI +, + +27 { +ATF_POINTER +, 0, +off£tof +( +CGI +, +choiû +. +eUTRA_CGI +), + +28 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +30 & +a¢_DEF_EUTRA_CGI +, + +37 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_CGI_g2–_1 +[] = { + +38 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +39 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 } + +41 +a¢_CHOICE_¥ecifics_t + + ga¢_SPC_CGI_¥ecs_1 + = { + +42 ( +CGI +), + +43 +off£tof +( +CGI +, +_a¢_ùx +), + +44 +off£tof +( +CGI +, +´e£Á +), + +45 ((( +CGI + *)0)-> +´e£Á +), + +46 +a¢_MAP_CGI_g2–_1 +, + +51 +a¢_TYPE_desütÜ_t + + ga¢_DEF_CGI + = { + +54 & +a¢_OP_CHOICE +, + +59 { 0, & +a¢_PER_ty³_CGI_cÚ¡r_1 +, +CHOICE_cÚ¡¿št + }, + +60 +a¢_MBR_CGI_1 +, + +62 & +a¢_SPC_CGI_¥ecs_1 + + + @CoreCPID.c + +8  + ~"CÜeCPID.h +" + +10  + ~"GUAMI.h +" + +11  + ~"GUMMEI.h +" + +12  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_CÜeCPID_cÚ¡r_1 + + gCC_NOTUSED + = { + +13 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 1, 1, 0, 1 } , + +14 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +17  +a¢_TYPE_memb”_t + + ga¢_MBR_CÜeCPID_1 +[] = { + +18 { +ATF_POINTER +, 0, +off£tof +( +CÜeCPID +, +choiû +. +fiveGC +), + +19 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +21 & +a¢_DEF_GUAMI +, + +27 { +ATF_POINTER +, 0, +off£tof +( +CÜeCPID +, +choiû +. +ePC +), + +28 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +30 & +a¢_DEF_GUMMEI +, + +37 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_CÜeCPID_g2–_1 +[] = { + +38 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +39 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 } + +41  +a¢_CHOICE_¥ecifics_t + + ga¢_SPC_CÜeCPID_¥ecs_1 + = { + +42 ( +CÜeCPID +), + +43 +off£tof +( +CÜeCPID +, +_a¢_ùx +), + +44 +off£tof +( +CÜeCPID +, +´e£Á +), + +45 ((( +CÜeCPID + *)0)-> +´e£Á +), + +46 +a¢_MAP_CÜeCPID_g2–_1 +, + +51 +a¢_TYPE_desütÜ_t + + ga¢_DEF_CÜeCPID + = { + +54 & +a¢_OP_CHOICE +, + +59 { 0, & +a¢_PER_ty³_CÜeCPID_cÚ¡r_1 +, +CHOICE_cÚ¡¿št + }, + +60 +a¢_MBR_CÜeCPID_1 +, + +62 & +a¢_SPC_CÜeCPID_¥ecs_1 + + + @E-UTRA-ARFCN.c + +8  + ~"E-UTRA-ARFCN.h +" + +11 + $E_UTRA_ARFCN_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13  +v®ue +; + +15 if(! +¥Œ +) { + +16 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +18 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +22 +v®ue + = *(cÚ¡ *) +¥Œ +; + +24 if(( +v®ue + >= 0 && value <= 65535)) { + +28 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +30 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +33 + } +} + +39 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_E_UTRA_ARFCN_cÚ¡r_1 + + gCC_NOTUSED + = { + +40 { +APC_CONSTRAINED +, 16, 16, 0, 65535 } , + +41 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +44 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_E_UTRA_ARFCN_gs_1 +[] = { + +45 ( +ASN_TAG_CLASS_UNIVERSAL + | (2 << 2)) + +47 +a¢_TYPE_desütÜ_t + + ga¢_DEF_E_UTRA_ARFCN + = { + +50 & +a¢_OP_N©iveIÁeg” +, + +51 +a¢_DEF_E_UTRA_ARFCN_gs_1 +, + +52 ( +a¢_DEF_E_UTRA_ARFCN_gs_1 +) + +53 /( +a¢_DEF_E_UTRA_ARFCN_gs_1 +[0]), + +54 +a¢_DEF_E_UTRA_ARFCN_gs_1 +, + +55 ( +a¢_DEF_E_UTRA_ARFCN_gs_1 +) + +56 /( +a¢_DEF_E_UTRA_ARFCN_gs_1 +[0]), + +57 { 0, & +a¢_PER_ty³_E_UTRA_ARFCN_cÚ¡r_1 +, +E_UTRA_ARFCN_cÚ¡¿št + }, + + @E-UTRA-PCI.c + +8  + ~"E-UTRA-PCI.h +" + +11 + $E_UTRA_PCI_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13  +v®ue +; + +15 if(! +¥Œ +) { + +16 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +18 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +22 +v®ue + = *(cÚ¡ *) +¥Œ +; + +24 if(( +v®ue + >= 0 && value <= 503)) { + +28 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +30 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +33 + } +} + +39 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_E_UTRA_PCI_cÚ¡r_1 + + gCC_NOTUSED + = { + +40 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 9, 9, 0, 503 } , + +41 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +44 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_E_UTRA_PCI_gs_1 +[] = { + +45 ( +ASN_TAG_CLASS_UNIVERSAL + | (2 << 2)) + +47 +a¢_TYPE_desütÜ_t + + ga¢_DEF_E_UTRA_PCI + = { + +50 & +a¢_OP_N©iveIÁeg” +, + +51 +a¢_DEF_E_UTRA_PCI_gs_1 +, + +52 ( +a¢_DEF_E_UTRA_PCI_gs_1 +) + +53 /( +a¢_DEF_E_UTRA_PCI_gs_1 +[0]), + +54 +a¢_DEF_E_UTRA_PCI_gs_1 +, + +55 ( +a¢_DEF_E_UTRA_PCI_gs_1 +) + +56 /( +a¢_DEF_E_UTRA_PCI_gs_1 +[0]), + +57 { 0, & +a¢_PER_ty³_E_UTRA_PCI_cÚ¡r_1 +, +E_UTRA_PCI_cÚ¡¿št + }, + + @E-UTRA-TAC.c + +8  + ~"E-UTRA-TAC.h +" + +11 + $E_UTRA_TAC_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13 cÚ¡ +OCTET_STRING_t + * +¡ + = (cÚ¡ OCTET_STRING_ˆ*) +¥Œ +; + +14 +size_t + +size +; + +16 if(! +¥Œ +) { + +17 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +19 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +23 +size + = +¡ +->size; + +25 if(( +size + == 2)) { + +29 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +31 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +34 + } +} + +40  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_E_UTRA_TAC_cÚ¡r_1 + + gCC_NOTUSED + = { + +41 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +42 { +APC_CONSTRAINED +, 0, 0, 2, 2 } , + +45 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_E_UTRA_TAC_gs_1 +[] = { + +46 ( +ASN_TAG_CLASS_UNIVERSAL + | (4 << 2)) + +48 +a¢_TYPE_desütÜ_t + + ga¢_DEF_E_UTRA_TAC + = { + +51 & +a¢_OP_OCTET_STRING +, + +52 +a¢_DEF_E_UTRA_TAC_gs_1 +, + +53 ( +a¢_DEF_E_UTRA_TAC_gs_1 +) + +54 /( +a¢_DEF_E_UTRA_TAC_gs_1 +[0]), + +55 +a¢_DEF_E_UTRA_TAC_gs_1 +, + +56 ( +a¢_DEF_E_UTRA_TAC_gs_1 +) + +57 /( +a¢_DEF_E_UTRA_TAC_gs_1 +[0]), + +58 { 0, & +a¢_PER_ty³_E_UTRA_TAC_cÚ¡r_1 +, +E_UTRA_TAC_cÚ¡¿št + }, + +60 & +a¢_SPC_OCTET_STRING_¥ecs + + + @E2SM-KPM-ActionDefinition-Format1.c + +8  + ~"E2SM-KPM-AùiÚDefš™iÚ-FÜm©1.h +" + +10  + ~"CGI.h +" + +11 +a¢_TYPE_memb”_t + + ga¢_MBR_E2SM_KPM_AùiÚDefš™iÚ_FÜm©1_1 +[] = { + +12 { +ATF_NOFLAGS +, 0, +off£tof +( +E2SM_KPM_AùiÚDefš™iÚ_FÜm©1 +, +m—sInfoLi¡ +), + +13 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +15 & +a¢_DEF_M—su»m’tInfoLi¡ +, + +21 { +ATF_NOFLAGS +, 0, +off£tof +( +E2SM_KPM_AùiÚDefš™iÚ_FÜm©1 +, +g¿nulP”iod +), + +22 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +24 & +a¢_DEF_G¿nuÏr™yP”iod +, + +30 { +ATF_POINTER +, 1, +off£tof +( +E2SM_KPM_AùiÚDefš™iÚ_FÜm©1 +, +ûÎGlob®ID +), + +31 ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), + +33 & +a¢_DEF_CGI +, + +40 cÚ¡  + ga¢_MAP_E2SM_KPM_AùiÚDefš™iÚ_FÜm©1_oms_1 +[] = { 2 }; + +41 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_E2SM_KPM_AùiÚDefš™iÚ_FÜm©1_gs_1 +[] = { + +42 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +44 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_E2SM_KPM_AùiÚDefš™iÚ_FÜm©1_g2–_1 +[] = { + +45 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +46 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 }, + +47 { ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), 2, 0, 0 } + +49 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_E2SM_KPM_AùiÚDefš™iÚ_FÜm©1_¥ecs_1 + = { + +50 ( +E2SM_KPM_AùiÚDefš™iÚ_FÜm©1 +), + +51 +off£tof +( +E2SM_KPM_AùiÚDefš™iÚ_FÜm©1 +, +_a¢_ùx +), + +52 +a¢_MAP_E2SM_KPM_AùiÚDefš™iÚ_FÜm©1_g2–_1 +, + +54 +a¢_MAP_E2SM_KPM_AùiÚDefš™iÚ_FÜm©1_oms_1 +, + +58 +a¢_TYPE_desütÜ_t + + ga¢_DEF_E2SM_KPM_AùiÚDefš™iÚ_FÜm©1 + = { + +61 & +a¢_OP_SEQUENCE +, + +62 +a¢_DEF_E2SM_KPM_AùiÚDefš™iÚ_FÜm©1_gs_1 +, + +63 ( +a¢_DEF_E2SM_KPM_AùiÚDefš™iÚ_FÜm©1_gs_1 +) + +64 /( +a¢_DEF_E2SM_KPM_AùiÚDefš™iÚ_FÜm©1_gs_1 +[0]), + +65 +a¢_DEF_E2SM_KPM_AùiÚDefš™iÚ_FÜm©1_gs_1 +, + +66 ( +a¢_DEF_E2SM_KPM_AùiÚDefš™iÚ_FÜm©1_gs_1 +) + +67 /( +a¢_DEF_E2SM_KPM_AùiÚDefš™iÚ_FÜm©1_gs_1 +[0]), + +68 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +69 +a¢_MBR_E2SM_KPM_AùiÚDefš™iÚ_FÜm©1_1 +, + +71 & +a¢_SPC_E2SM_KPM_AùiÚDefš™iÚ_FÜm©1_¥ecs_1 + + + @E2SM-KPM-ActionDefinition-Format2.c + +8  + ~"E2SM-KPM-AùiÚDefš™iÚ-FÜm©2.h +" + +10 +a¢_TYPE_memb”_t + + ga¢_MBR_E2SM_KPM_AùiÚDefš™iÚ_FÜm©2_1 +[] = { + +11 { +ATF_NOFLAGS +, 0, +off£tof +( +E2SM_KPM_AùiÚDefš™iÚ_FÜm©2 +, +ueID +), + +12 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +14 & +a¢_DEF_UEID +, + +20 { +ATF_NOFLAGS +, 0, +off£tof +( +E2SM_KPM_AùiÚDefš™iÚ_FÜm©2 +, +subsütInfo +), + +21 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +23 & +a¢_DEF_E2SM_KPM_AùiÚDefš™iÚ_FÜm©1 +, + +30 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_E2SM_KPM_AùiÚDefš™iÚ_FÜm©2_gs_1 +[] = { + +31 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +33 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_E2SM_KPM_AùiÚDefš™iÚ_FÜm©2_g2–_1 +[] = { + +34 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +35 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 } + +37 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_E2SM_KPM_AùiÚDefš™iÚ_FÜm©2_¥ecs_1 + = { + +38 ( +E2SM_KPM_AùiÚDefš™iÚ_FÜm©2 +), + +39 +off£tof +( +E2SM_KPM_AùiÚDefš™iÚ_FÜm©2 +, +_a¢_ùx +), + +40 +a¢_MAP_E2SM_KPM_AùiÚDefš™iÚ_FÜm©2_g2–_1 +, + +45 +a¢_TYPE_desütÜ_t + + ga¢_DEF_E2SM_KPM_AùiÚDefš™iÚ_FÜm©2 + = { + +48 & +a¢_OP_SEQUENCE +, + +49 +a¢_DEF_E2SM_KPM_AùiÚDefš™iÚ_FÜm©2_gs_1 +, + +50 ( +a¢_DEF_E2SM_KPM_AùiÚDefš™iÚ_FÜm©2_gs_1 +) + +51 /( +a¢_DEF_E2SM_KPM_AùiÚDefš™iÚ_FÜm©2_gs_1 +[0]), + +52 +a¢_DEF_E2SM_KPM_AùiÚDefš™iÚ_FÜm©2_gs_1 +, + +53 ( +a¢_DEF_E2SM_KPM_AùiÚDefš™iÚ_FÜm©2_gs_1 +) + +54 /( +a¢_DEF_E2SM_KPM_AùiÚDefš™iÚ_FÜm©2_gs_1 +[0]), + +55 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +56 +a¢_MBR_E2SM_KPM_AùiÚDefš™iÚ_FÜm©2_1 +, + +58 & +a¢_SPC_E2SM_KPM_AùiÚDefš™iÚ_FÜm©2_¥ecs_1 + + + @E2SM-KPM-ActionDefinition-Format3.c + +8  + ~"E2SM-KPM-AùiÚDefš™iÚ-FÜm©3.h +" + +10  + ~"CGI.h +" + +11 +a¢_TYPE_memb”_t + + ga¢_MBR_E2SM_KPM_AùiÚDefš™iÚ_FÜm©3_1 +[] = { + +12 { +ATF_NOFLAGS +, 0, +off£tof +( +E2SM_KPM_AùiÚDefš™iÚ_FÜm©3 +, +m—sCÚdLi¡ +), + +13 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +15 & +a¢_DEF_M—su»m’tCÚdLi¡ +, + +21 { +ATF_NOFLAGS +, 0, +off£tof +( +E2SM_KPM_AùiÚDefš™iÚ_FÜm©3 +, +g¿nulP”iod +), + +22 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +24 & +a¢_DEF_G¿nuÏr™yP”iod +, + +30 { +ATF_POINTER +, 1, +off£tof +( +E2SM_KPM_AùiÚDefš™iÚ_FÜm©3 +, +ûÎGlob®ID +), + +31 ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), + +33 & +a¢_DEF_CGI +, + +40 cÚ¡  + ga¢_MAP_E2SM_KPM_AùiÚDefš™iÚ_FÜm©3_oms_1 +[] = { 2 }; + +41 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_E2SM_KPM_AùiÚDefš™iÚ_FÜm©3_gs_1 +[] = { + +42 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +44 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_E2SM_KPM_AùiÚDefš™iÚ_FÜm©3_g2–_1 +[] = { + +45 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +46 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 }, + +47 { ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), 2, 0, 0 } + +49 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_E2SM_KPM_AùiÚDefš™iÚ_FÜm©3_¥ecs_1 + = { + +50 ( +E2SM_KPM_AùiÚDefš™iÚ_FÜm©3 +), + +51 +off£tof +( +E2SM_KPM_AùiÚDefš™iÚ_FÜm©3 +, +_a¢_ùx +), + +52 +a¢_MAP_E2SM_KPM_AùiÚDefš™iÚ_FÜm©3_g2–_1 +, + +54 +a¢_MAP_E2SM_KPM_AùiÚDefš™iÚ_FÜm©3_oms_1 +, + +58 +a¢_TYPE_desütÜ_t + + ga¢_DEF_E2SM_KPM_AùiÚDefš™iÚ_FÜm©3 + = { + +61 & +a¢_OP_SEQUENCE +, + +62 +a¢_DEF_E2SM_KPM_AùiÚDefš™iÚ_FÜm©3_gs_1 +, + +63 ( +a¢_DEF_E2SM_KPM_AùiÚDefš™iÚ_FÜm©3_gs_1 +) + +64 /( +a¢_DEF_E2SM_KPM_AùiÚDefš™iÚ_FÜm©3_gs_1 +[0]), + +65 +a¢_DEF_E2SM_KPM_AùiÚDefš™iÚ_FÜm©3_gs_1 +, + +66 ( +a¢_DEF_E2SM_KPM_AùiÚDefš™iÚ_FÜm©3_gs_1 +) + +67 /( +a¢_DEF_E2SM_KPM_AùiÚDefš™iÚ_FÜm©3_gs_1 +[0]), + +68 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +69 +a¢_MBR_E2SM_KPM_AùiÚDefš™iÚ_FÜm©3_1 +, + +71 & +a¢_SPC_E2SM_KPM_AùiÚDefš™iÚ_FÜm©3_¥ecs_1 + + + @E2SM-KPM-ActionDefinition.c + +8  + ~"E2SM-KPM-AùiÚDefš™iÚ.h +" + +10  + ~"E2SM-KPM-AùiÚDefš™iÚ-FÜm©1.h +" + +11  + ~"E2SM-KPM-AùiÚDefš™iÚ-FÜm©2.h +" + +12  + ~"E2SM-KPM-AùiÚDefš™iÚ-FÜm©3.h +" + +13  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_aùiÚDefš™iÚ_fÜm©s_cÚ¡r_3 + + gCC_NOTUSED + = { + +14 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 2, 2, 0, 2 } , + +15 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +18  +a¢_TYPE_memb”_t + + ga¢_MBR_aùiÚDefš™iÚ_fÜm©s_3 +[] = { + +19 { +ATF_POINTER +, 0, +off£tof +( +E2SM_KPM_AùiÚDefš™iÚ__aùiÚDefš™iÚ_fÜm©s +, +choiû +. +aùiÚDefš™iÚ_FÜm©1 +), + +20 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +22 & +a¢_DEF_E2SM_KPM_AùiÚDefš™iÚ_FÜm©1 +, + +28 { +ATF_POINTER +, 0, +off£tof +( +E2SM_KPM_AùiÚDefš™iÚ__aùiÚDefš™iÚ_fÜm©s +, +choiû +. +aùiÚDefš™iÚ_FÜm©2 +), + +29 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +31 & +a¢_DEF_E2SM_KPM_AùiÚDefš™iÚ_FÜm©2 +, + +37 { +ATF_POINTER +, 0, +off£tof +( +E2SM_KPM_AùiÚDefš™iÚ__aùiÚDefš™iÚ_fÜm©s +, +choiû +. +aùiÚDefš™iÚ_FÜm©3 +), + +38 ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), + +40 & +a¢_DEF_E2SM_KPM_AùiÚDefš™iÚ_FÜm©3 +, + +47 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_aùiÚDefš™iÚ_fÜm©s_g2–_3 +[] = { + +48 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +49 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 }, + +50 { ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), 2, 0, 0 } + +52  +a¢_CHOICE_¥ecifics_t + + ga¢_SPC_aùiÚDefš™iÚ_fÜm©s_¥ecs_3 + = { + +53 ( +E2SM_KPM_AùiÚDefš™iÚ__aùiÚDefš™iÚ_fÜm©s +), + +54 +off£tof +( +E2SM_KPM_AùiÚDefš™iÚ__aùiÚDefš™iÚ_fÜm©s +, +_a¢_ùx +), + +55 +off£tof +( +E2SM_KPM_AùiÚDefš™iÚ__aùiÚDefš™iÚ_fÜm©s +, +´e£Á +), + +56 ((( +E2SM_KPM_AùiÚDefš™iÚ__aùiÚDefš™iÚ_fÜm©s + *)0)-> +´e£Á +), + +57 +a¢_MAP_aùiÚDefš™iÚ_fÜm©s_g2–_3 +, + +63 +a¢_TYPE_desütÜ_t + + ga¢_DEF_aùiÚDefš™iÚ_fÜm©s_3 + = { + +66 & +a¢_OP_CHOICE +, + +71 { 0, & +a¢_PER_ty³_aùiÚDefš™iÚ_fÜm©s_cÚ¡r_3 +, +CHOICE_cÚ¡¿št + }, + +72 +a¢_MBR_aùiÚDefš™iÚ_fÜm©s_3 +, + +74 & +a¢_SPC_aùiÚDefš™iÚ_fÜm©s_¥ecs_3 + + +77  +a¢_TYPE_memb”_t + + ga¢_MBR_E2SM_KPM_AùiÚDefš™iÚ_1 +[] = { + +78 { +ATF_NOFLAGS +, 0, +off£tof +( +E2SM_KPM_AùiÚDefš™iÚ +, +ric_StyË_Ty³ +), + +79 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +81 & +a¢_DEF_RIC_StyË_Ty³ +, + +87 { +ATF_NOFLAGS +, 0, +off£tof +( +E2SM_KPM_AùiÚDefš™iÚ +, +aùiÚDefš™iÚ_fÜm©s +), + +88 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +90 & +a¢_DEF_aùiÚDefš™iÚ_fÜm©s_3 +, + +97 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_E2SM_KPM_AùiÚDefš™iÚ_gs_1 +[] = { + +98 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +100 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_E2SM_KPM_AùiÚDefš™iÚ_g2–_1 +[] = { + +101 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +102 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 } + +104  +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_E2SM_KPM_AùiÚDefš™iÚ_¥ecs_1 + = { + +105 ( +E2SM_KPM_AùiÚDefš™iÚ +), + +106 +off£tof +( +E2SM_KPM_AùiÚDefš™iÚ +, +_a¢_ùx +), + +107 +a¢_MAP_E2SM_KPM_AùiÚDefš™iÚ_g2–_1 +, + +112 +a¢_TYPE_desütÜ_t + + ga¢_DEF_E2SM_KPM_AùiÚDefš™iÚ + = { + +115 & +a¢_OP_SEQUENCE +, + +116 +a¢_DEF_E2SM_KPM_AùiÚDefš™iÚ_gs_1 +, + +117 ( +a¢_DEF_E2SM_KPM_AùiÚDefš™iÚ_gs_1 +) + +118 /( +a¢_DEF_E2SM_KPM_AùiÚDefš™iÚ_gs_1 +[0]), + +119 +a¢_DEF_E2SM_KPM_AùiÚDefš™iÚ_gs_1 +, + +120 ( +a¢_DEF_E2SM_KPM_AùiÚDefš™iÚ_gs_1 +) + +121 /( +a¢_DEF_E2SM_KPM_AùiÚDefš™iÚ_gs_1 +[0]), + +122 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +123 +a¢_MBR_E2SM_KPM_AùiÚDefš™iÚ_1 +, + +125 & +a¢_SPC_E2SM_KPM_AùiÚDefš™iÚ_¥ecs_1 + + + @E2SM-KPM-EventTriggerDefinition-Format1.c + +8  + ~"E2SM-KPM-Ev’tTrigg”Defš™iÚ-FÜm©1.h +" + +11 + $»pÜtšgP”iod_2_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13  +v®ue +; + +15 if(! +¥Œ +) { + +16 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +18 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +22 +v®ue + = *(cÚ¡ *) +¥Œ +; + +24 if(( +v®ue + >= 1 && value <= 4294967295)) { + +28 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +30 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +33 + } +} + +40 + $memb_»pÜtšgP”iod_cÚ¡¿št_1 +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +41 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +42  +v®ue +; + +44 if(! +¥Œ +) { + +45 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +47 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +51 +v®ue + = *(cÚ¡ *) +¥Œ +; + +53 if(( +v®ue + >= 1 && value <= 4294967295)) { + +57 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +59 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +62 + } +} + +64  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_»pÜtšgP”iod_cÚ¡r_2 + + gCC_NOTUSED + = { + +65 { +APC_CONSTRAINED +, 32, -1, 1, 4294967295 } , + +66 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +69  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_memb_»pÜtšgP”iod_cÚ¡r_2 + + gCC_NOTUSED + = { + +70 { +APC_CONSTRAINED +, 32, -1, 1, 4294967295 } , + +71 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +74 cÚ¡ +a¢_INTEGER_¥ecifics_t + + ga¢_SPC_»pÜtšgP”iod_¥ecs_2 + = { + +79 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_»pÜtšgP”iod_gs_2 +[] = { + +80 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +81 ( +ASN_TAG_CLASS_UNIVERSAL + | (2 << 2)) + +84 +a¢_TYPE_desütÜ_t + + ga¢_DEF_»pÜtšgP”iod_2 + = { + +87 & +a¢_OP_N©iveIÁeg” +, + +88 +a¢_DEF_»pÜtšgP”iod_gs_2 +, + +89 ( +a¢_DEF_»pÜtšgP”iod_gs_2 +) + +90 /( +a¢_DEF_»pÜtšgP”iod_gs_2 +[0]) - 1, + +91 +a¢_DEF_»pÜtšgP”iod_gs_2 +, + +92 ( +a¢_DEF_»pÜtšgP”iod_gs_2 +) + +93 /( +a¢_DEF_»pÜtšgP”iod_gs_2 +[0]), + +94 { 0, & +a¢_PER_ty³_»pÜtšgP”iod_cÚ¡r_2 +, +»pÜtšgP”iod_2_cÚ¡¿št + }, + +96 & +a¢_SPC_»pÜtšgP”iod_¥ecs_2 + + +99 +a¢_TYPE_memb”_t + + ga¢_MBR_E2SM_KPM_Ev’tTrigg”Defš™iÚ_FÜm©1_1 +[] = { + +100 { +ATF_NOFLAGS +, 0, +off£tof +( +E2SM_KPM_Ev’tTrigg”Defš™iÚ_FÜm©1 +, +»pÜtšgP”iod +), + +101 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +103 & +a¢_DEF_»pÜtšgP”iod_2 +, + +105 { 0, & +a¢_PER_memb_»pÜtšgP”iod_cÚ¡r_2 +, +memb_»pÜtšgP”iod_cÚ¡¿št_1 + }, + +110 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_E2SM_KPM_Ev’tTrigg”Defš™iÚ_FÜm©1_gs_1 +[] = { + +111 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +113 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_E2SM_KPM_Ev’tTrigg”Defš™iÚ_FÜm©1_g2–_1 +[] = { + +114 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 } + +116 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_E2SM_KPM_Ev’tTrigg”Defš™iÚ_FÜm©1_¥ecs_1 + = { + +117 ( +E2SM_KPM_Ev’tTrigg”Defš™iÚ_FÜm©1 +), + +118 +off£tof +( +E2SM_KPM_Ev’tTrigg”Defš™iÚ_FÜm©1 +, +_a¢_ùx +), + +119 +a¢_MAP_E2SM_KPM_Ev’tTrigg”Defš™iÚ_FÜm©1_g2–_1 +, + +124 +a¢_TYPE_desütÜ_t + + ga¢_DEF_E2SM_KPM_Ev’tTrigg”Defš™iÚ_FÜm©1 + = { + +127 & +a¢_OP_SEQUENCE +, + +128 +a¢_DEF_E2SM_KPM_Ev’tTrigg”Defš™iÚ_FÜm©1_gs_1 +, + +129 ( +a¢_DEF_E2SM_KPM_Ev’tTrigg”Defš™iÚ_FÜm©1_gs_1 +) + +130 /( +a¢_DEF_E2SM_KPM_Ev’tTrigg”Defš™iÚ_FÜm©1_gs_1 +[0]), + +131 +a¢_DEF_E2SM_KPM_Ev’tTrigg”Defš™iÚ_FÜm©1_gs_1 +, + +132 ( +a¢_DEF_E2SM_KPM_Ev’tTrigg”Defš™iÚ_FÜm©1_gs_1 +) + +133 /( +a¢_DEF_E2SM_KPM_Ev’tTrigg”Defš™iÚ_FÜm©1_gs_1 +[0]), + +134 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +135 +a¢_MBR_E2SM_KPM_Ev’tTrigg”Defš™iÚ_FÜm©1_1 +, + +137 & +a¢_SPC_E2SM_KPM_Ev’tTrigg”Defš™iÚ_FÜm©1_¥ecs_1 + + + @E2SM-KPM-EventTriggerDefinition.c + +8  + ~"E2SM-KPM-Ev’tTrigg”Defš™iÚ.h +" + +10  + ~"E2SM-KPM-Ev’tTrigg”Defš™iÚ-FÜm©1.h +" + +11  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_ev’tDefš™iÚ_fÜm©s_cÚ¡r_2 + + gCC_NOTUSED + = { + +12 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 0, 0, 0, 0 } , + +13 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +16  +a¢_TYPE_memb”_t + + ga¢_MBR_ev’tDefš™iÚ_fÜm©s_2 +[] = { + +17 { +ATF_POINTER +, 0, +off£tof +( +E2SM_KPM_Ev’tTrigg”Defš™iÚ__ev’tDefš™iÚ_fÜm©s +, +choiû +. +ev’tDefš™iÚ_FÜm©1 +), + +18 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +20 & +a¢_DEF_E2SM_KPM_Ev’tTrigg”Defš™iÚ_FÜm©1 +, + +27 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_ev’tDefš™iÚ_fÜm©s_g2–_2 +[] = { + +28 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 } + +30  +a¢_CHOICE_¥ecifics_t + + ga¢_SPC_ev’tDefš™iÚ_fÜm©s_¥ecs_2 + = { + +31 ( +E2SM_KPM_Ev’tTrigg”Defš™iÚ__ev’tDefš™iÚ_fÜm©s +), + +32 +off£tof +( +E2SM_KPM_Ev’tTrigg”Defš™iÚ__ev’tDefš™iÚ_fÜm©s +, +_a¢_ùx +), + +33 +off£tof +( +E2SM_KPM_Ev’tTrigg”Defš™iÚ__ev’tDefš™iÚ_fÜm©s +, +´e£Á +), + +34 ((( +E2SM_KPM_Ev’tTrigg”Defš™iÚ__ev’tDefš™iÚ_fÜm©s + *)0)-> +´e£Á +), + +35 +a¢_MAP_ev’tDefš™iÚ_fÜm©s_g2–_2 +, + +41 +a¢_TYPE_desütÜ_t + + ga¢_DEF_ev’tDefš™iÚ_fÜm©s_2 + = { + +44 & +a¢_OP_CHOICE +, + +49 { 0, & +a¢_PER_ty³_ev’tDefš™iÚ_fÜm©s_cÚ¡r_2 +, +CHOICE_cÚ¡¿št + }, + +50 +a¢_MBR_ev’tDefš™iÚ_fÜm©s_2 +, + +52 & +a¢_SPC_ev’tDefš™iÚ_fÜm©s_¥ecs_2 + + +55  +a¢_TYPE_memb”_t + + ga¢_MBR_E2SM_KPM_Ev’tTrigg”Defš™iÚ_1 +[] = { + +56 { +ATF_NOFLAGS +, 0, +off£tof +( +E2SM_KPM_Ev’tTrigg”Defš™iÚ +, +ev’tDefš™iÚ_fÜm©s +), + +57 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +59 & +a¢_DEF_ev’tDefš™iÚ_fÜm©s_2 +, + +66 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_E2SM_KPM_Ev’tTrigg”Defš™iÚ_gs_1 +[] = { + +67 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +69 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_E2SM_KPM_Ev’tTrigg”Defš™iÚ_g2–_1 +[] = { + +70 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 } + +72  +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_E2SM_KPM_Ev’tTrigg”Defš™iÚ_¥ecs_1 + = { + +73 ( +E2SM_KPM_Ev’tTrigg”Defš™iÚ +), + +74 +off£tof +( +E2SM_KPM_Ev’tTrigg”Defš™iÚ +, +_a¢_ùx +), + +75 +a¢_MAP_E2SM_KPM_Ev’tTrigg”Defš™iÚ_g2–_1 +, + +80 +a¢_TYPE_desütÜ_t + + ga¢_DEF_E2SM_KPM_Ev’tTrigg”Defš™iÚ + = { + +83 & +a¢_OP_SEQUENCE +, + +84 +a¢_DEF_E2SM_KPM_Ev’tTrigg”Defš™iÚ_gs_1 +, + +85 ( +a¢_DEF_E2SM_KPM_Ev’tTrigg”Defš™iÚ_gs_1 +) + +86 /( +a¢_DEF_E2SM_KPM_Ev’tTrigg”Defš™iÚ_gs_1 +[0]), + +87 +a¢_DEF_E2SM_KPM_Ev’tTrigg”Defš™iÚ_gs_1 +, + +88 ( +a¢_DEF_E2SM_KPM_Ev’tTrigg”Defš™iÚ_gs_1 +) + +89 /( +a¢_DEF_E2SM_KPM_Ev’tTrigg”Defš™iÚ_gs_1 +[0]), + +90 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +91 +a¢_MBR_E2SM_KPM_Ev’tTrigg”Defš™iÚ_1 +, + +93 & +a¢_SPC_E2SM_KPM_Ev’tTrigg”Defš™iÚ_¥ecs_1 + + + @E2SM-KPM-IndicationHeader-Format1.c + +8  + ~"E2SM-KPM-IndiÿtiÚH—d”-FÜm©1.h +" + +10 cÚ¡  + g³rm™‹d_®phab‘_bË_3 +[256] = { + +20 cÚ¡  + g³rm™‹d_®phab‘_code2v®ue_3 +[74] = { + +28  + $check_³rm™‹d_®phab‘_3 +(cÚ¡ * +¥Œ +) { + +29 cÚ¡ * +bË + = +³rm™‹d_®phab‘_bË_3 +; + +31 cÚ¡ +PršbËSŒšg_t + * +¡ + = (cÚ¡ PršbËSŒšg_ˆ*) +¥Œ +; + +32 cÚ¡ +ušt8_t + * +ch + = +¡ +-> +buf +; + +33 cÚ¡ +ušt8_t + * +’d + = +ch + + +¡ +-> +size +; + +35 ; +ch + < +’d +; ch++) { + +36 +ušt8_t + +cv + = * +ch +; + +37 if(! +bË +[ +cv +])  -1; + +40 + } +} + +42 cÚ¡  + g³rm™‹d_®phab‘_bË_4 +[256] = { + +52 cÚ¡  + g³rm™‹d_®phab‘_code2v®ue_4 +[74] = { + +60  + $check_³rm™‹d_®phab‘_4 +(cÚ¡ * +¥Œ +) { + +61 cÚ¡ * +bË + = +³rm™‹d_®phab‘_bË_4 +; + +63 cÚ¡ +PršbËSŒšg_t + * +¡ + = (cÚ¡ PršbËSŒšg_ˆ*) +¥Œ +; + +64 cÚ¡ +ušt8_t + * +ch + = +¡ +-> +buf +; + +65 cÚ¡ +ušt8_t + * +’d + = +ch + + +¡ +-> +size +; + +67 ; +ch + < +’d +; ch++) { + +68 +ušt8_t + +cv + = * +ch +; + +69 if(! +bË +[ +cv +])  -1; + +72 + } +} + +74 cÚ¡  + g³rm™‹d_®phab‘_bË_5 +[256] = { + +84 cÚ¡  + g³rm™‹d_®phab‘_code2v®ue_5 +[74] = { + +92  + $check_³rm™‹d_®phab‘_5 +(cÚ¡ * +¥Œ +) { + +93 cÚ¡ * +bË + = +³rm™‹d_®phab‘_bË_5 +; + +95 cÚ¡ +PršbËSŒšg_t + * +¡ + = (cÚ¡ PršbËSŒšg_ˆ*) +¥Œ +; + +96 cÚ¡ +ušt8_t + * +ch + = +¡ +-> +buf +; + +97 cÚ¡ +ušt8_t + * +’d + = +ch + + +¡ +-> +size +; + +99 ; +ch + < +’d +; ch++) { + +100 +ušt8_t + +cv + = * +ch +; + +101 if(! +bË +[ +cv +])  -1; + +104 + } +} + +106 cÚ¡  + g³rm™‹d_®phab‘_bË_6 +[256] = { + +116 cÚ¡  + g³rm™‹d_®phab‘_code2v®ue_6 +[74] = { + +124  + $check_³rm™‹d_®phab‘_6 +(cÚ¡ * +¥Œ +) { + +125 cÚ¡ * +bË + = +³rm™‹d_®phab‘_bË_6 +; + +127 cÚ¡ +PršbËSŒšg_t + * +¡ + = (cÚ¡ PršbËSŒšg_ˆ*) +¥Œ +; + +128 cÚ¡ +ušt8_t + * +ch + = +¡ +-> +buf +; + +129 cÚ¡ +ušt8_t + * +’d + = +ch + + +¡ +-> +size +; + +131 ; +ch + < +’d +; ch++) { + +132 +ušt8_t + +cv + = * +ch +; + +133 if(! +bË +[ +cv +])  -1; + +136 + } +} + +139 + $memb_fžeFÜm©v”siÚ_cÚ¡¿št_1 +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +140 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +141 cÚ¡ +PršbËSŒšg_t + * +¡ + = (cÚ¡ PršbËSŒšg_ˆ*) +¥Œ +; + +142 +size_t + +size +; + +144 if(! +¥Œ +) { + +145 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +147 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +151 +size + = +¡ +->size; + +153 if(( +size + <= 15) + +154 && ! + `check_³rm™‹d_®phab‘_3 +( +¡ +)) { + +158 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +160 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +163 + } +} + +165  + $a¢_PER_MAP_fžeFÜm©v”siÚ_3_v2c +( +v®ue +) { + +166 if( +v®ue + >ð( +³rm™‹d_®phab‘_bË_3 +)/(permitted_alphabet_table_3[0])) + +168  +³rm™‹d_®phab‘_bË_3 +[ +v®ue +] - 1; + +169 + } +} + +170  + $a¢_PER_MAP_fžeFÜm©v”siÚ_3_c2v +( +code +) { + +171 if( +code + >ð( +³rm™‹d_®phab‘_code2v®ue_3 +)/(permitted_alphabet_code2value_3[0])) + +173  +³rm™‹d_®phab‘_code2v®ue_3 +[ +code +]; + +174 + } +} + +176 + $memb_£nd”Name_cÚ¡¿št_1 +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +177 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +178 cÚ¡ +PršbËSŒšg_t + * +¡ + = (cÚ¡ PršbËSŒšg_ˆ*) +¥Œ +; + +179 +size_t + +size +; + +181 if(! +¥Œ +) { + +182 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +184 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +188 +size + = +¡ +->size; + +190 if(( +size + <= 400) + +191 && ! + `check_³rm™‹d_®phab‘_4 +( +¡ +)) { + +195 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +197 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +200 + } +} + +202  + $a¢_PER_MAP_£nd”Name_4_v2c +( +v®ue +) { + +203 if( +v®ue + >ð( +³rm™‹d_®phab‘_bË_4 +)/(permitted_alphabet_table_4[0])) + +205  +³rm™‹d_®phab‘_bË_4 +[ +v®ue +] - 1; + +206 + } +} + +207  + $a¢_PER_MAP_£nd”Name_4_c2v +( +code +) { + +208 if( +code + >ð( +³rm™‹d_®phab‘_code2v®ue_4 +)/(permitted_alphabet_code2value_4[0])) + +210  +³rm™‹d_®phab‘_code2v®ue_4 +[ +code +]; + +211 + } +} + +213 + $memb_£nd”Ty³_cÚ¡¿št_1 +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +214 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +215 cÚ¡ +PršbËSŒšg_t + * +¡ + = (cÚ¡ PršbËSŒšg_ˆ*) +¥Œ +; + +216 +size_t + +size +; + +218 if(! +¥Œ +) { + +219 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +221 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +225 +size + = +¡ +->size; + +227 if(( +size + <= 8) + +228 && ! + `check_³rm™‹d_®phab‘_5 +( +¡ +)) { + +232 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +234 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +237 + } +} + +239  + $a¢_PER_MAP_£nd”Ty³_5_v2c +( +v®ue +) { + +240 if( +v®ue + >ð( +³rm™‹d_®phab‘_bË_5 +)/(permitted_alphabet_table_5[0])) + +242  +³rm™‹d_®phab‘_bË_5 +[ +v®ue +] - 1; + +243 + } +} + +244  + $a¢_PER_MAP_£nd”Ty³_5_c2v +( +code +) { + +245 if( +code + >ð( +³rm™‹d_®phab‘_code2v®ue_5 +)/(permitted_alphabet_code2value_5[0])) + +247  +³rm™‹d_®phab‘_code2v®ue_5 +[ +code +]; + +248 + } +} + +250 + $memb_v’dÜName_cÚ¡¿št_1 +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +251 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +252 cÚ¡ +PršbËSŒšg_t + * +¡ + = (cÚ¡ PršbËSŒšg_ˆ*) +¥Œ +; + +253 +size_t + +size +; + +255 if(! +¥Œ +) { + +256 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +258 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +262 +size + = +¡ +->size; + +264 if(( +size + <= 32) + +265 && ! + `check_³rm™‹d_®phab‘_6 +( +¡ +)) { + +269 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +271 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +274 + } +} + +276  + $a¢_PER_MAP_v’dÜName_6_v2c +( +v®ue +) { + +277 if( +v®ue + >ð( +³rm™‹d_®phab‘_bË_6 +)/(permitted_alphabet_table_6[0])) + +279  +³rm™‹d_®phab‘_bË_6 +[ +v®ue +] - 1; + +280 + } +} + +281  + $a¢_PER_MAP_v’dÜName_6_c2v +( +code +) { + +282 if( +code + >ð( +³rm™‹d_®phab‘_code2v®ue_6 +)/(permitted_alphabet_code2value_6[0])) + +284  +³rm™‹d_®phab‘_code2v®ue_6 +[ +code +]; + +285 + } +} + +286  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_memb_fžeFÜm©v”siÚ_cÚ¡r_3 + + gCC_NOTUSED + = { + +287 { +APC_CONSTRAINED +, 7, 7, 32, 122 } , + +288 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 4, 4, 0, 15 } , + +289 +a¢_PER_MAP_fžeFÜm©v”siÚ_3_v2c +, + +290 +a¢_PER_MAP_fžeFÜm©v”siÚ_3_c2v + + +292  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_memb_£nd”Name_cÚ¡r_4 + + gCC_NOTUSED + = { + +293 { +APC_CONSTRAINED +, 7, 7, 32, 122 } , + +294 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 9, 9, 0, 400 } , + +295 +a¢_PER_MAP_£nd”Name_4_v2c +, + +296 +a¢_PER_MAP_£nd”Name_4_c2v + + +298  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_memb_£nd”Ty³_cÚ¡r_5 + + gCC_NOTUSED + = { + +299 { +APC_CONSTRAINED +, 7, 7, 32, 122 } , + +300 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 4, 4, 0, 8 } , + +301 +a¢_PER_MAP_£nd”Ty³_5_v2c +, + +302 +a¢_PER_MAP_£nd”Ty³_5_c2v + + +304  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_memb_v’dÜName_cÚ¡r_6 + + gCC_NOTUSED + = { + +305 { +APC_CONSTRAINED +, 7, 7, 32, 122 } , + +306 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 6, 6, 0, 32 } , + +307 +a¢_PER_MAP_v’dÜName_6_v2c +, + +308 +a¢_PER_MAP_v’dÜName_6_c2v + + +310 +a¢_TYPE_memb”_t + + ga¢_MBR_E2SM_KPM_IndiÿtiÚH—d”_FÜm©1_1 +[] = { + +311 { +ATF_NOFLAGS +, 0, +off£tof +( +E2SM_KPM_IndiÿtiÚH—d”_FÜm©1 +, +cÞËtS¹Time +), + +312 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +314 & +a¢_DEF_TimeSmp +, + +320 { +ATF_POINTER +, 4, +off£tof +( +E2SM_KPM_IndiÿtiÚH—d”_FÜm©1 +, +fžeFÜm©v”siÚ +), + +321 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +323 & +a¢_DEF_PršbËSŒšg +, + +325 { 0, & +a¢_PER_memb_fžeFÜm©v”siÚ_cÚ¡r_3 +, +memb_fžeFÜm©v”siÚ_cÚ¡¿št_1 + }, + +329 { +ATF_POINTER +, 3, +off£tof +( +E2SM_KPM_IndiÿtiÚH—d”_FÜm©1 +, +£nd”Name +), + +330 ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), + +332 & +a¢_DEF_PršbËSŒšg +, + +334 { 0, & +a¢_PER_memb_£nd”Name_cÚ¡r_4 +, +memb_£nd”Name_cÚ¡¿št_1 + }, + +338 { +ATF_POINTER +, 2, +off£tof +( +E2SM_KPM_IndiÿtiÚH—d”_FÜm©1 +, +£nd”Ty³ +), + +339 ( +ASN_TAG_CLASS_CONTEXT + | (3 << 2)), + +341 & +a¢_DEF_PršbËSŒšg +, + +343 { 0, & +a¢_PER_memb_£nd”Ty³_cÚ¡r_5 +, +memb_£nd”Ty³_cÚ¡¿št_1 + }, + +347 { +ATF_POINTER +, 1, +off£tof +( +E2SM_KPM_IndiÿtiÚH—d”_FÜm©1 +, +v’dÜName +), + +348 ( +ASN_TAG_CLASS_CONTEXT + | (4 << 2)), + +350 & +a¢_DEF_PršbËSŒšg +, + +352 { 0, & +a¢_PER_memb_v’dÜName_cÚ¡r_6 +, +memb_v’dÜName_cÚ¡¿št_1 + }, + +357 cÚ¡  + ga¢_MAP_E2SM_KPM_IndiÿtiÚH—d”_FÜm©1_oms_1 +[] = { 1, 2, 3, 4 }; + +358 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_E2SM_KPM_IndiÿtiÚH—d”_FÜm©1_gs_1 +[] = { + +359 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +361 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_E2SM_KPM_IndiÿtiÚH—d”_FÜm©1_g2–_1 +[] = { + +362 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +363 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 }, + +364 { ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), 2, 0, 0 }, + +365 { ( +ASN_TAG_CLASS_CONTEXT + | (3 << 2)), 3, 0, 0 }, + +366 { ( +ASN_TAG_CLASS_CONTEXT + | (4 << 2)), 4, 0, 0 } + +368 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_E2SM_KPM_IndiÿtiÚH—d”_FÜm©1_¥ecs_1 + = { + +369 ( +E2SM_KPM_IndiÿtiÚH—d”_FÜm©1 +), + +370 +off£tof +( +E2SM_KPM_IndiÿtiÚH—d”_FÜm©1 +, +_a¢_ùx +), + +371 +a¢_MAP_E2SM_KPM_IndiÿtiÚH—d”_FÜm©1_g2–_1 +, + +373 +a¢_MAP_E2SM_KPM_IndiÿtiÚH—d”_FÜm©1_oms_1 +, + +377 +a¢_TYPE_desütÜ_t + + ga¢_DEF_E2SM_KPM_IndiÿtiÚH—d”_FÜm©1 + = { + +380 & +a¢_OP_SEQUENCE +, + +381 +a¢_DEF_E2SM_KPM_IndiÿtiÚH—d”_FÜm©1_gs_1 +, + +382 ( +a¢_DEF_E2SM_KPM_IndiÿtiÚH—d”_FÜm©1_gs_1 +) + +383 /( +a¢_DEF_E2SM_KPM_IndiÿtiÚH—d”_FÜm©1_gs_1 +[0]), + +384 +a¢_DEF_E2SM_KPM_IndiÿtiÚH—d”_FÜm©1_gs_1 +, + +385 ( +a¢_DEF_E2SM_KPM_IndiÿtiÚH—d”_FÜm©1_gs_1 +) + +386 /( +a¢_DEF_E2SM_KPM_IndiÿtiÚH—d”_FÜm©1_gs_1 +[0]), + +387 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +388 +a¢_MBR_E2SM_KPM_IndiÿtiÚH—d”_FÜm©1_1 +, + +390 & +a¢_SPC_E2SM_KPM_IndiÿtiÚH—d”_FÜm©1_¥ecs_1 + + + @E2SM-KPM-IndicationHeader.c + +8  + ~"E2SM-KPM-IndiÿtiÚH—d”.h +" + +10  + ~"E2SM-KPM-IndiÿtiÚH—d”-FÜm©1.h +" + +11  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_šdiÿtiÚH—d”_fÜm©s_cÚ¡r_2 + + gCC_NOTUSED + = { + +12 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 0, 0, 0, 0 } , + +13 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +16  +a¢_TYPE_memb”_t + + ga¢_MBR_šdiÿtiÚH—d”_fÜm©s_2 +[] = { + +17 { +ATF_POINTER +, 0, +off£tof +( +E2SM_KPM_IndiÿtiÚH—d”__šdiÿtiÚH—d”_fÜm©s +, +choiû +. +šdiÿtiÚH—d”_FÜm©1 +), + +18 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +20 & +a¢_DEF_E2SM_KPM_IndiÿtiÚH—d”_FÜm©1 +, + +27 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_šdiÿtiÚH—d”_fÜm©s_g2–_2 +[] = { + +28 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 } + +30  +a¢_CHOICE_¥ecifics_t + + ga¢_SPC_šdiÿtiÚH—d”_fÜm©s_¥ecs_2 + = { + +31 ( +E2SM_KPM_IndiÿtiÚH—d”__šdiÿtiÚH—d”_fÜm©s +), + +32 +off£tof +( +E2SM_KPM_IndiÿtiÚH—d”__šdiÿtiÚH—d”_fÜm©s +, +_a¢_ùx +), + +33 +off£tof +( +E2SM_KPM_IndiÿtiÚH—d”__šdiÿtiÚH—d”_fÜm©s +, +´e£Á +), + +34 ((( +E2SM_KPM_IndiÿtiÚH—d”__šdiÿtiÚH—d”_fÜm©s + *)0)-> +´e£Á +), + +35 +a¢_MAP_šdiÿtiÚH—d”_fÜm©s_g2–_2 +, + +41 +a¢_TYPE_desütÜ_t + + ga¢_DEF_šdiÿtiÚH—d”_fÜm©s_2 + = { + +44 & +a¢_OP_CHOICE +, + +49 { 0, & +a¢_PER_ty³_šdiÿtiÚH—d”_fÜm©s_cÚ¡r_2 +, +CHOICE_cÚ¡¿št + }, + +50 +a¢_MBR_šdiÿtiÚH—d”_fÜm©s_2 +, + +52 & +a¢_SPC_šdiÿtiÚH—d”_fÜm©s_¥ecs_2 + + +55  +a¢_TYPE_memb”_t + + ga¢_MBR_E2SM_KPM_IndiÿtiÚH—d”_1 +[] = { + +56 { +ATF_NOFLAGS +, 0, +off£tof +( +E2SM_KPM_IndiÿtiÚH—d” +, +šdiÿtiÚH—d”_fÜm©s +), + +57 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +59 & +a¢_DEF_šdiÿtiÚH—d”_fÜm©s_2 +, + +66 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_E2SM_KPM_IndiÿtiÚH—d”_gs_1 +[] = { + +67 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +69 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_E2SM_KPM_IndiÿtiÚH—d”_g2–_1 +[] = { + +70 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 } + +72  +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_E2SM_KPM_IndiÿtiÚH—d”_¥ecs_1 + = { + +73 ( +E2SM_KPM_IndiÿtiÚH—d” +), + +74 +off£tof +( +E2SM_KPM_IndiÿtiÚH—d” +, +_a¢_ùx +), + +75 +a¢_MAP_E2SM_KPM_IndiÿtiÚH—d”_g2–_1 +, + +80 +a¢_TYPE_desütÜ_t + + ga¢_DEF_E2SM_KPM_IndiÿtiÚH—d” + = { + +83 & +a¢_OP_SEQUENCE +, + +84 +a¢_DEF_E2SM_KPM_IndiÿtiÚH—d”_gs_1 +, + +85 ( +a¢_DEF_E2SM_KPM_IndiÿtiÚH—d”_gs_1 +) + +86 /( +a¢_DEF_E2SM_KPM_IndiÿtiÚH—d”_gs_1 +[0]), + +87 +a¢_DEF_E2SM_KPM_IndiÿtiÚH—d”_gs_1 +, + +88 ( +a¢_DEF_E2SM_KPM_IndiÿtiÚH—d”_gs_1 +) + +89 /( +a¢_DEF_E2SM_KPM_IndiÿtiÚH—d”_gs_1 +[0]), + +90 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +91 +a¢_MBR_E2SM_KPM_IndiÿtiÚH—d”_1 +, + +93 & +a¢_SPC_E2SM_KPM_IndiÿtiÚH—d”_¥ecs_1 + + + @E2SM-KPM-IndicationMessage-Format1.c + +8  + ~"E2SM-KPM-IndiÿtiÚMes§ge-FÜm©1.h +" + +10  + ~"M—su»m’tInfoLi¡.h +" + +11 +a¢_TYPE_memb”_t + + ga¢_MBR_E2SM_KPM_IndiÿtiÚMes§ge_FÜm©1_1 +[] = { + +12 { +ATF_NOFLAGS +, 0, +off£tof +( +E2SM_KPM_IndiÿtiÚMes§ge_FÜm©1 +, +m—sD©a +), + +13 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +15 & +a¢_DEF_M—su»m’tD©a +, + +21 { +ATF_POINTER +, 2, +off£tof +( +E2SM_KPM_IndiÿtiÚMes§ge_FÜm©1 +, +m—sInfoLi¡ +), + +22 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +24 & +a¢_DEF_M—su»m’tInfoLi¡ +, + +30 { +ATF_POINTER +, 1, +off£tof +( +E2SM_KPM_IndiÿtiÚMes§ge_FÜm©1 +, +g¿nulP”iod +), + +31 ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), + +33 & +a¢_DEF_G¿nuÏr™yP”iod +, + +40 cÚ¡  + ga¢_MAP_E2SM_KPM_IndiÿtiÚMes§ge_FÜm©1_oms_1 +[] = { 1, 2 }; + +41 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_E2SM_KPM_IndiÿtiÚMes§ge_FÜm©1_gs_1 +[] = { + +42 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +44 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_E2SM_KPM_IndiÿtiÚMes§ge_FÜm©1_g2–_1 +[] = { + +45 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +46 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 }, + +47 { ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), 2, 0, 0 } + +49 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_E2SM_KPM_IndiÿtiÚMes§ge_FÜm©1_¥ecs_1 + = { + +50 ( +E2SM_KPM_IndiÿtiÚMes§ge_FÜm©1 +), + +51 +off£tof +( +E2SM_KPM_IndiÿtiÚMes§ge_FÜm©1 +, +_a¢_ùx +), + +52 +a¢_MAP_E2SM_KPM_IndiÿtiÚMes§ge_FÜm©1_g2–_1 +, + +54 +a¢_MAP_E2SM_KPM_IndiÿtiÚMes§ge_FÜm©1_oms_1 +, + +58 +a¢_TYPE_desütÜ_t + + ga¢_DEF_E2SM_KPM_IndiÿtiÚMes§ge_FÜm©1 + = { + +61 & +a¢_OP_SEQUENCE +, + +62 +a¢_DEF_E2SM_KPM_IndiÿtiÚMes§ge_FÜm©1_gs_1 +, + +63 ( +a¢_DEF_E2SM_KPM_IndiÿtiÚMes§ge_FÜm©1_gs_1 +) + +64 /( +a¢_DEF_E2SM_KPM_IndiÿtiÚMes§ge_FÜm©1_gs_1 +[0]), + +65 +a¢_DEF_E2SM_KPM_IndiÿtiÚMes§ge_FÜm©1_gs_1 +, + +66 ( +a¢_DEF_E2SM_KPM_IndiÿtiÚMes§ge_FÜm©1_gs_1 +) + +67 /( +a¢_DEF_E2SM_KPM_IndiÿtiÚMes§ge_FÜm©1_gs_1 +[0]), + +68 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +69 +a¢_MBR_E2SM_KPM_IndiÿtiÚMes§ge_FÜm©1_1 +, + +71 & +a¢_SPC_E2SM_KPM_IndiÿtiÚMes§ge_FÜm©1_¥ecs_1 + + + @E2SM-KPM-IndicationMessage-Format2.c + +8  + ~"E2SM-KPM-IndiÿtiÚMes§ge-FÜm©2.h +" + +10 +a¢_TYPE_memb”_t + + ga¢_MBR_E2SM_KPM_IndiÿtiÚMes§ge_FÜm©2_1 +[] = { + +11 { +ATF_NOFLAGS +, 0, +off£tof +( +E2SM_KPM_IndiÿtiÚMes§ge_FÜm©2 +, +m—sD©a +), + +12 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +14 & +a¢_DEF_M—su»m’tD©a +, + +20 { +ATF_NOFLAGS +, 0, +off£tof +( +E2SM_KPM_IndiÿtiÚMes§ge_FÜm©2 +, +m—sCÚdUEidLi¡ +), + +21 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +23 & +a¢_DEF_M—su»m’tCÚdUEidLi¡ +, + +29 { +ATF_POINTER +, 1, +off£tof +( +E2SM_KPM_IndiÿtiÚMes§ge_FÜm©2 +, +g¿nulP”iod +), + +30 ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), + +32 & +a¢_DEF_G¿nuÏr™yP”iod +, + +39 cÚ¡  + ga¢_MAP_E2SM_KPM_IndiÿtiÚMes§ge_FÜm©2_oms_1 +[] = { 2 }; + +40 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_E2SM_KPM_IndiÿtiÚMes§ge_FÜm©2_gs_1 +[] = { + +41 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +43 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_E2SM_KPM_IndiÿtiÚMes§ge_FÜm©2_g2–_1 +[] = { + +44 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +45 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 }, + +46 { ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), 2, 0, 0 } + +48 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_E2SM_KPM_IndiÿtiÚMes§ge_FÜm©2_¥ecs_1 + = { + +49 ( +E2SM_KPM_IndiÿtiÚMes§ge_FÜm©2 +), + +50 +off£tof +( +E2SM_KPM_IndiÿtiÚMes§ge_FÜm©2 +, +_a¢_ùx +), + +51 +a¢_MAP_E2SM_KPM_IndiÿtiÚMes§ge_FÜm©2_g2–_1 +, + +53 +a¢_MAP_E2SM_KPM_IndiÿtiÚMes§ge_FÜm©2_oms_1 +, + +57 +a¢_TYPE_desütÜ_t + + ga¢_DEF_E2SM_KPM_IndiÿtiÚMes§ge_FÜm©2 + = { + +60 & +a¢_OP_SEQUENCE +, + +61 +a¢_DEF_E2SM_KPM_IndiÿtiÚMes§ge_FÜm©2_gs_1 +, + +62 ( +a¢_DEF_E2SM_KPM_IndiÿtiÚMes§ge_FÜm©2_gs_1 +) + +63 /( +a¢_DEF_E2SM_KPM_IndiÿtiÚMes§ge_FÜm©2_gs_1 +[0]), + +64 +a¢_DEF_E2SM_KPM_IndiÿtiÚMes§ge_FÜm©2_gs_1 +, + +65 ( +a¢_DEF_E2SM_KPM_IndiÿtiÚMes§ge_FÜm©2_gs_1 +) + +66 /( +a¢_DEF_E2SM_KPM_IndiÿtiÚMes§ge_FÜm©2_gs_1 +[0]), + +67 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +68 +a¢_MBR_E2SM_KPM_IndiÿtiÚMes§ge_FÜm©2_1 +, + +70 & +a¢_SPC_E2SM_KPM_IndiÿtiÚMes§ge_FÜm©2_¥ecs_1 + + + @E2SM-KPM-IndicationMessage.c + +8  + ~"E2SM-KPM-IndiÿtiÚMes§ge.h +" + +10  + ~"E2SM-KPM-IndiÿtiÚMes§ge-FÜm©1.h +" + +11  + ~"E2SM-KPM-IndiÿtiÚMes§ge-FÜm©2.h +" + +12  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_šdiÿtiÚMes§ge_fÜm©s_cÚ¡r_2 + + gCC_NOTUSED + = { + +13 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 1, 1, 0, 1 } , + +14 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +17  +a¢_TYPE_memb”_t + + ga¢_MBR_šdiÿtiÚMes§ge_fÜm©s_2 +[] = { + +18 { +ATF_POINTER +, 0, +off£tof +( +E2SM_KPM_IndiÿtiÚMes§ge__šdiÿtiÚMes§ge_fÜm©s +, +choiû +. +šdiÿtiÚMes§ge_FÜm©1 +), + +19 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +21 & +a¢_DEF_E2SM_KPM_IndiÿtiÚMes§ge_FÜm©1 +, + +27 { +ATF_POINTER +, 0, +off£tof +( +E2SM_KPM_IndiÿtiÚMes§ge__šdiÿtiÚMes§ge_fÜm©s +, +choiû +. +šdiÿtiÚMes§ge_FÜm©2 +), + +28 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +30 & +a¢_DEF_E2SM_KPM_IndiÿtiÚMes§ge_FÜm©2 +, + +37 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_šdiÿtiÚMes§ge_fÜm©s_g2–_2 +[] = { + +38 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +39 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 } + +41  +a¢_CHOICE_¥ecifics_t + + ga¢_SPC_šdiÿtiÚMes§ge_fÜm©s_¥ecs_2 + = { + +42 ( +E2SM_KPM_IndiÿtiÚMes§ge__šdiÿtiÚMes§ge_fÜm©s +), + +43 +off£tof +( +E2SM_KPM_IndiÿtiÚMes§ge__šdiÿtiÚMes§ge_fÜm©s +, +_a¢_ùx +), + +44 +off£tof +( +E2SM_KPM_IndiÿtiÚMes§ge__šdiÿtiÚMes§ge_fÜm©s +, +´e£Á +), + +45 ((( +E2SM_KPM_IndiÿtiÚMes§ge__šdiÿtiÚMes§ge_fÜm©s + *)0)-> +´e£Á +), + +46 +a¢_MAP_šdiÿtiÚMes§ge_fÜm©s_g2–_2 +, + +52 +a¢_TYPE_desütÜ_t + + ga¢_DEF_šdiÿtiÚMes§ge_fÜm©s_2 + = { + +55 & +a¢_OP_CHOICE +, + +60 { 0, & +a¢_PER_ty³_šdiÿtiÚMes§ge_fÜm©s_cÚ¡r_2 +, +CHOICE_cÚ¡¿št + }, + +61 +a¢_MBR_šdiÿtiÚMes§ge_fÜm©s_2 +, + +63 & +a¢_SPC_šdiÿtiÚMes§ge_fÜm©s_¥ecs_2 + + +66  +a¢_TYPE_memb”_t + + ga¢_MBR_E2SM_KPM_IndiÿtiÚMes§ge_1 +[] = { + +67 { +ATF_NOFLAGS +, 0, +off£tof +( +E2SM_KPM_IndiÿtiÚMes§ge +, +šdiÿtiÚMes§ge_fÜm©s +), + +68 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +70 & +a¢_DEF_šdiÿtiÚMes§ge_fÜm©s_2 +, + +77 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_E2SM_KPM_IndiÿtiÚMes§ge_gs_1 +[] = { + +78 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +80 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_E2SM_KPM_IndiÿtiÚMes§ge_g2–_1 +[] = { + +81 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 } + +83  +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_E2SM_KPM_IndiÿtiÚMes§ge_¥ecs_1 + = { + +84 ( +E2SM_KPM_IndiÿtiÚMes§ge +), + +85 +off£tof +( +E2SM_KPM_IndiÿtiÚMes§ge +, +_a¢_ùx +), + +86 +a¢_MAP_E2SM_KPM_IndiÿtiÚMes§ge_g2–_1 +, + +91 +a¢_TYPE_desütÜ_t + + ga¢_DEF_E2SM_KPM_IndiÿtiÚMes§ge + = { + +94 & +a¢_OP_SEQUENCE +, + +95 +a¢_DEF_E2SM_KPM_IndiÿtiÚMes§ge_gs_1 +, + +96 ( +a¢_DEF_E2SM_KPM_IndiÿtiÚMes§ge_gs_1 +) + +97 /( +a¢_DEF_E2SM_KPM_IndiÿtiÚMes§ge_gs_1 +[0]), + +98 +a¢_DEF_E2SM_KPM_IndiÿtiÚMes§ge_gs_1 +, + +99 ( +a¢_DEF_E2SM_KPM_IndiÿtiÚMes§ge_gs_1 +) + +100 /( +a¢_DEF_E2SM_KPM_IndiÿtiÚMes§ge_gs_1 +[0]), + +101 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +102 +a¢_MBR_E2SM_KPM_IndiÿtiÚMes§ge_1 +, + +104 & +a¢_SPC_E2SM_KPM_IndiÿtiÚMes§ge_¥ecs_1 + + + @E2SM-KPM-RANfunction-Description.c + +8  + ~"E2SM-KPM-RANfunùiÚ-DesütiÚ.h +" + +10  + ~"RIC-Ev’tTrigg”StyË-I‹m.h +" + +11  + ~"RIC-R•ÜtStyË-I‹m.h +" + +13 + $memb_ric_Ev’tTrigg”StyË_Li¡_cÚ¡¿št_1 +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +14 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +15 +size_t + +size +; + +17 if(! +¥Œ +) { + +18 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +20 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +25 +size + = + `_A_CSEQUENCE_FROM_VOID +( +¥Œ +)-> +couÁ +; + +27 if(( +size + >= 1 && size <= 63)) { + +29  +td +-> +’codšg_cÚ¡¿šts +. + `g’”®_cÚ¡¿šts +Ñd, +¥Œ +, +ùçžcb +, +­p_key +); + +31 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +33 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +36 + } +} + +39 + $memb_ric_R•ÜtStyË_Li¡_cÚ¡¿št_1 +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +40 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +41 +size_t + +size +; + +43 if(! +¥Œ +) { + +44 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +46 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +51 +size + = + `_A_CSEQUENCE_FROM_VOID +( +¥Œ +)-> +couÁ +; + +53 if(( +size + >= 1 && size <= 63)) { + +55  +td +-> +’codšg_cÚ¡¿šts +. + `g’”®_cÚ¡¿šts +Ñd, +¥Œ +, +ùçžcb +, +­p_key +); + +57 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +59 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +62 + } +} + +64  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_ric_Ev’tTrigg”StyË_Li¡_cÚ¡r_3 + + gCC_NOTUSED + = { + +65 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +66 { +APC_CONSTRAINED +, 6, 6, 1, 63 } , + +69  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_ric_R•ÜtStyË_Li¡_cÚ¡r_5 + + gCC_NOTUSED + = { + +70 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +71 { +APC_CONSTRAINED +, 6, 6, 1, 63 } , + +74  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_memb_ric_Ev’tTrigg”StyË_Li¡_cÚ¡r_3 + + gCC_NOTUSED + = { + +75 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +76 { +APC_CONSTRAINED +, 6, 6, 1, 63 } , + +79  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_memb_ric_R•ÜtStyË_Li¡_cÚ¡r_5 + + gCC_NOTUSED + = { + +80 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +81 { +APC_CONSTRAINED +, 6, 6, 1, 63 } , + +84  +a¢_TYPE_memb”_t + + ga¢_MBR_ric_Ev’tTrigg”StyË_Li¡_3 +[] = { + +85 { +ATF_POINTER +, 0, 0, + +86 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)), + +88 & +a¢_DEF_RIC_Ev’tTrigg”StyË_I‹m +, + +95 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_ric_Ev’tTrigg”StyË_Li¡_gs_3 +[] = { + +96 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +97 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +99  +a¢_SET_OF_¥ecifics_t + + ga¢_SPC_ric_Ev’tTrigg”StyË_Li¡_¥ecs_3 + = { + +100 ( +E2SM_KPM_RANfunùiÚ_DesütiÚ__ric_Ev’tTrigg”StyË_Li¡ +), + +101 +off£tof +( +E2SM_KPM_RANfunùiÚ_DesütiÚ__ric_Ev’tTrigg”StyË_Li¡ +, +_a¢_ùx +), + +105 +a¢_TYPE_desütÜ_t + + ga¢_DEF_ric_Ev’tTrigg”StyË_Li¡_3 + = { + +108 & +a¢_OP_SEQUENCE_OF +, + +109 +a¢_DEF_ric_Ev’tTrigg”StyË_Li¡_gs_3 +, + +110 ( +a¢_DEF_ric_Ev’tTrigg”StyË_Li¡_gs_3 +) + +111 /( +a¢_DEF_ric_Ev’tTrigg”StyË_Li¡_gs_3 +[0]) - 1, + +112 +a¢_DEF_ric_Ev’tTrigg”StyË_Li¡_gs_3 +, + +113 ( +a¢_DEF_ric_Ev’tTrigg”StyË_Li¡_gs_3 +) + +114 /( +a¢_DEF_ric_Ev’tTrigg”StyË_Li¡_gs_3 +[0]), + +115 { 0, & +a¢_PER_ty³_ric_Ev’tTrigg”StyË_Li¡_cÚ¡r_3 +, +SEQUENCE_OF_cÚ¡¿št + }, + +116 +a¢_MBR_ric_Ev’tTrigg”StyË_Li¡_3 +, + +118 & +a¢_SPC_ric_Ev’tTrigg”StyË_Li¡_¥ecs_3 + + +121  +a¢_TYPE_memb”_t + + ga¢_MBR_ric_R•ÜtStyË_Li¡_5 +[] = { + +122 { +ATF_POINTER +, 0, 0, + +123 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)), + +125 & +a¢_DEF_RIC_R•ÜtStyË_I‹m +, + +132 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_ric_R•ÜtStyË_Li¡_gs_5 +[] = { + +133 ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), + +134 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +136  +a¢_SET_OF_¥ecifics_t + + ga¢_SPC_ric_R•ÜtStyË_Li¡_¥ecs_5 + = { + +137 ( +E2SM_KPM_RANfunùiÚ_DesütiÚ__ric_R•ÜtStyË_Li¡ +), + +138 +off£tof +( +E2SM_KPM_RANfunùiÚ_DesütiÚ__ric_R•ÜtStyË_Li¡ +, +_a¢_ùx +), + +142 +a¢_TYPE_desütÜ_t + + ga¢_DEF_ric_R•ÜtStyË_Li¡_5 + = { + +145 & +a¢_OP_SEQUENCE_OF +, + +146 +a¢_DEF_ric_R•ÜtStyË_Li¡_gs_5 +, + +147 ( +a¢_DEF_ric_R•ÜtStyË_Li¡_gs_5 +) + +148 /( +a¢_DEF_ric_R•ÜtStyË_Li¡_gs_5 +[0]) - 1, + +149 +a¢_DEF_ric_R•ÜtStyË_Li¡_gs_5 +, + +150 ( +a¢_DEF_ric_R•ÜtStyË_Li¡_gs_5 +) + +151 /( +a¢_DEF_ric_R•ÜtStyË_Li¡_gs_5 +[0]), + +152 { 0, & +a¢_PER_ty³_ric_R•ÜtStyË_Li¡_cÚ¡r_5 +, +SEQUENCE_OF_cÚ¡¿št + }, + +153 +a¢_MBR_ric_R•ÜtStyË_Li¡_5 +, + +155 & +a¢_SPC_ric_R•ÜtStyË_Li¡_¥ecs_5 + + +158  +a¢_TYPE_memb”_t + + ga¢_MBR_E2SM_KPM_RANfunùiÚ_DesütiÚ_1 +[] = { + +159 { +ATF_NOFLAGS +, 0, +off£tof +( +E2SM_KPM_RANfunùiÚ_DesütiÚ +, +¿nFunùiÚ_Name +), + +160 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +162 & +a¢_DEF_RANfunùiÚ_Name +, + +168 { +ATF_POINTER +, 2, +off£tof +( +E2SM_KPM_RANfunùiÚ_DesütiÚ +, +ric_Ev’tTrigg”StyË_Li¡ +), + +169 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +171 & +a¢_DEF_ric_Ev’tTrigg”StyË_Li¡_3 +, + +173 { 0, & +a¢_PER_memb_ric_Ev’tTrigg”StyË_Li¡_cÚ¡r_3 +, +memb_ric_Ev’tTrigg”StyË_Li¡_cÚ¡¿št_1 + }, + +177 { +ATF_POINTER +, 1, +off£tof +( +E2SM_KPM_RANfunùiÚ_DesütiÚ +, +ric_R•ÜtStyË_Li¡ +), + +178 ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), + +180 & +a¢_DEF_ric_R•ÜtStyË_Li¡_5 +, + +182 { 0, & +a¢_PER_memb_ric_R•ÜtStyË_Li¡_cÚ¡r_5 +, +memb_ric_R•ÜtStyË_Li¡_cÚ¡¿št_1 + }, + +187 cÚ¡  + ga¢_MAP_E2SM_KPM_RANfunùiÚ_DesütiÚ_oms_1 +[] = { 1, 2 }; + +188 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_E2SM_KPM_RANfunùiÚ_DesütiÚ_gs_1 +[] = { + +189 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +191 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_E2SM_KPM_RANfunùiÚ_DesütiÚ_g2–_1 +[] = { + +192 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +193 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 }, + +194 { ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), 2, 0, 0 } + +196  +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_E2SM_KPM_RANfunùiÚ_DesütiÚ_¥ecs_1 + = { + +197 ( +E2SM_KPM_RANfunùiÚ_DesütiÚ +), + +198 +off£tof +( +E2SM_KPM_RANfunùiÚ_DesütiÚ +, +_a¢_ùx +), + +199 +a¢_MAP_E2SM_KPM_RANfunùiÚ_DesütiÚ_g2–_1 +, + +201 +a¢_MAP_E2SM_KPM_RANfunùiÚ_DesütiÚ_oms_1 +, + +205 +a¢_TYPE_desütÜ_t + + ga¢_DEF_E2SM_KPM_RANfunùiÚ_DesütiÚ + = { + +208 & +a¢_OP_SEQUENCE +, + +209 +a¢_DEF_E2SM_KPM_RANfunùiÚ_DesütiÚ_gs_1 +, + +210 ( +a¢_DEF_E2SM_KPM_RANfunùiÚ_DesütiÚ_gs_1 +) + +211 /( +a¢_DEF_E2SM_KPM_RANfunùiÚ_DesütiÚ_gs_1 +[0]), + +212 +a¢_DEF_E2SM_KPM_RANfunùiÚ_DesütiÚ_gs_1 +, + +213 ( +a¢_DEF_E2SM_KPM_RANfunùiÚ_DesütiÚ_gs_1 +) + +214 /( +a¢_DEF_E2SM_KPM_RANfunùiÚ_DesütiÚ_gs_1 +[0]), + +215 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +216 +a¢_MBR_E2SM_KPM_RANfunùiÚ_DesütiÚ_1 +, + +218 & +a¢_SPC_E2SM_KPM_RANfunùiÚ_DesütiÚ_¥ecs_1 + + + @EN-GNB-ID.c + +8  + ~"EN-GNB-ID.h +" + +11 + $memb_’_gNB_ID_cÚ¡¿št_1 +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13 cÚ¡ +BIT_STRING_t + * +¡ + = (cÚ¡ BIT_STRING_ˆ*) +¥Œ +; + +14 +size_t + +size +; + +16 if(! +¥Œ +) { + +17 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +19 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +23 if( +¡ +-> +size + > 0) { + +25 +size + = 8 * +¡ +->siz- (¡-> +b™s_unu£d + & 0x07); + +27 +size + = 0; + +30 if(( +size + >= 22 && size <= 32)) { + +34 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +36 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +39 + } +} + +41  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_memb_’_gNB_ID_cÚ¡r_2 + + gCC_NOTUSED + = { + +42 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +43 { +APC_CONSTRAINED +, 4, 4, 22, 32 } , + +46 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_EN_GNB_ID_cÚ¡r_1 + + gCC_NOTUSED + = { + +47 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 0, 0, 0, 0 } , + +48 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +51 +a¢_TYPE_memb”_t + + ga¢_MBR_EN_GNB_ID_1 +[] = { + +52 { +ATF_NOFLAGS +, 0, +off£tof +( +EN_GNB_ID +, +choiû +. +’_gNB_ID +), + +53 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +55 & +a¢_DEF_BIT_STRING +, + +57 { 0, & +a¢_PER_memb_’_gNB_ID_cÚ¡r_2 +, +memb_’_gNB_ID_cÚ¡¿št_1 + }, + +62 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_EN_GNB_ID_g2–_1 +[] = { + +63 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 } + +65 +a¢_CHOICE_¥ecifics_t + + ga¢_SPC_EN_GNB_ID_¥ecs_1 + = { + +66 ( +EN_GNB_ID +), + +67 +off£tof +( +EN_GNB_ID +, +_a¢_ùx +), + +68 +off£tof +( +EN_GNB_ID +, +´e£Á +), + +69 ((( +EN_GNB_ID + *)0)-> +´e£Á +), + +70 +a¢_MAP_EN_GNB_ID_g2–_1 +, + +75 +a¢_TYPE_desütÜ_t + + ga¢_DEF_EN_GNB_ID + = { + +78 & +a¢_OP_CHOICE +, + +83 { 0, & +a¢_PER_ty³_EN_GNB_ID_cÚ¡r_1 +, +CHOICE_cÚ¡¿št + }, + +84 +a¢_MBR_EN_GNB_ID_1 +, + +86 & +a¢_SPC_EN_GNB_ID_¥ecs_1 + + + @ENB-ID.c + +8  + ~"ENB-ID.h +" + +11 + $memb_maüo_eNB_ID_cÚ¡¿št_1 +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13 cÚ¡ +BIT_STRING_t + * +¡ + = (cÚ¡ BIT_STRING_ˆ*) +¥Œ +; + +14 +size_t + +size +; + +16 if(! +¥Œ +) { + +17 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +19 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +23 if( +¡ +-> +size + > 0) { + +25 +size + = 8 * +¡ +->siz- (¡-> +b™s_unu£d + & 0x07); + +27 +size + = 0; + +30 if(( +size + == 20)) { + +34 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +36 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +39 + } +} + +42 + $memb_home_eNB_ID_cÚ¡¿št_1 +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +43 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +44 cÚ¡ +BIT_STRING_t + * +¡ + = (cÚ¡ BIT_STRING_ˆ*) +¥Œ +; + +45 +size_t + +size +; + +47 if(! +¥Œ +) { + +48 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +50 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +54 if( +¡ +-> +size + > 0) { + +56 +size + = 8 * +¡ +->siz- (¡-> +b™s_unu£d + & 0x07); + +58 +size + = 0; + +61 if(( +size + == 28)) { + +65 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +67 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +70 + } +} + +73 + $memb_shÜt_Maüo_eNB_ID_cÚ¡¿št_1 +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +74 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +75 cÚ¡ +BIT_STRING_t + * +¡ + = (cÚ¡ BIT_STRING_ˆ*) +¥Œ +; + +76 +size_t + +size +; + +78 if(! +¥Œ +) { + +79 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +81 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +85 if( +¡ +-> +size + > 0) { + +87 +size + = 8 * +¡ +->siz- (¡-> +b™s_unu£d + & 0x07); + +89 +size + = 0; + +92 if(( +size + == 18)) { + +96 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +98 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +101 + } +} + +104 + $memb_lÚg_Maüo_eNB_ID_cÚ¡¿št_1 +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +105 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +106 cÚ¡ +BIT_STRING_t + * +¡ + = (cÚ¡ BIT_STRING_ˆ*) +¥Œ +; + +107 +size_t + +size +; + +109 if(! +¥Œ +) { + +110 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +112 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +116 if( +¡ +-> +size + > 0) { + +118 +size + = 8 * +¡ +->siz- (¡-> +b™s_unu£d + & 0x07); + +120 +size + = 0; + +123 if(( +size + == 21)) { + +127 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +129 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +132 + } +} + +134  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_memb_maüo_eNB_ID_cÚ¡r_2 + + gCC_NOTUSED + = { + +135 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +136 { +APC_CONSTRAINED +, 0, 0, 20, 20 } , + +139  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_memb_home_eNB_ID_cÚ¡r_3 + + gCC_NOTUSED + = { + +140 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +141 { +APC_CONSTRAINED +, 0, 0, 28, 28 } , + +144  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_memb_shÜt_Maüo_eNB_ID_cÚ¡r_5 + + gCC_NOTUSED + = { + +145 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +146 { +APC_CONSTRAINED +, 0, 0, 18, 18 } , + +149  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_memb_lÚg_Maüo_eNB_ID_cÚ¡r_6 + + gCC_NOTUSED + = { + +150 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +151 { +APC_CONSTRAINED +, 0, 0, 21, 21 } , + +154 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_ENB_ID_cÚ¡r_1 + + gCC_NOTUSED + = { + +155 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 1, 1, 0, 1 } , + +156 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +159 +a¢_TYPE_memb”_t + + ga¢_MBR_ENB_ID_1 +[] = { + +160 { +ATF_NOFLAGS +, 0, +off£tof +( +ENB_ID +, +choiû +. +maüo_eNB_ID +), + +161 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +163 & +a¢_DEF_BIT_STRING +, + +165 { 0, & +a¢_PER_memb_maüo_eNB_ID_cÚ¡r_2 +, +memb_maüo_eNB_ID_cÚ¡¿št_1 + }, + +169 { +ATF_NOFLAGS +, 0, +off£tof +( +ENB_ID +, +choiû +. +home_eNB_ID +), + +170 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +172 & +a¢_DEF_BIT_STRING +, + +174 { 0, & +a¢_PER_memb_home_eNB_ID_cÚ¡r_3 +, +memb_home_eNB_ID_cÚ¡¿št_1 + }, + +178 { +ATF_NOFLAGS +, 0, +off£tof +( +ENB_ID +, +choiû +. +shÜt_Maüo_eNB_ID +), + +179 ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), + +181 & +a¢_DEF_BIT_STRING +, + +183 { 0, & +a¢_PER_memb_shÜt_Maüo_eNB_ID_cÚ¡r_5 +, +memb_shÜt_Maüo_eNB_ID_cÚ¡¿št_1 + }, + +187 { +ATF_NOFLAGS +, 0, +off£tof +( +ENB_ID +, +choiû +. +lÚg_Maüo_eNB_ID +), + +188 ( +ASN_TAG_CLASS_CONTEXT + | (3 << 2)), + +190 & +a¢_DEF_BIT_STRING +, + +192 { 0, & +a¢_PER_memb_lÚg_Maüo_eNB_ID_cÚ¡r_6 +, +memb_lÚg_Maüo_eNB_ID_cÚ¡¿št_1 + }, + +197 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_ENB_ID_g2–_1 +[] = { + +198 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +199 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 }, + +200 { ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), 2, 0, 0 }, + +201 { ( +ASN_TAG_CLASS_CONTEXT + | (3 << 2)), 3, 0, 0 } + +203 +a¢_CHOICE_¥ecifics_t + + ga¢_SPC_ENB_ID_¥ecs_1 + = { + +204 ( +ENB_ID +), + +205 +off£tof +( +ENB_ID +, +_a¢_ùx +), + +206 +off£tof +( +ENB_ID +, +´e£Á +), + +207 ((( +ENB_ID + *)0)-> +´e£Á +), + +208 +a¢_MAP_ENB_ID_g2–_1 +, + +213 +a¢_TYPE_desütÜ_t + + ga¢_DEF_ENB_ID + = { + +216 & +a¢_OP_CHOICE +, + +221 { 0, & +a¢_PER_ty³_ENB_ID_cÚ¡r_1 +, +CHOICE_cÚ¡¿št + }, + +222 +a¢_MBR_ENB_ID_1 +, + +224 & +a¢_SPC_ENB_ID_¥ecs_1 + + + @ENB-UE-X2AP-ID-Extension.c + +8  + ~"ENB-UE-X2AP-ID-Ex‹nsiÚ.h +" + +11 + $ENB_UE_X2AP_ID_Ex‹nsiÚ_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13  +v®ue +; + +15 if(! +¥Œ +) { + +16 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +18 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +22 +v®ue + = *(cÚ¡ *) +¥Œ +; + +24 if(( +v®ue + >= 0 && value <= 4095)) { + +28 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +30 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +33 + } +} + +39 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_ENB_UE_X2AP_ID_Ex‹nsiÚ_cÚ¡r_1 + + gCC_NOTUSED + = { + +40 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 12, 12, 0, 4095 } , + +41 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +44 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_ENB_UE_X2AP_ID_Ex‹nsiÚ_gs_1 +[] = { + +45 ( +ASN_TAG_CLASS_UNIVERSAL + | (2 << 2)) + +47 +a¢_TYPE_desütÜ_t + + ga¢_DEF_ENB_UE_X2AP_ID_Ex‹nsiÚ + = { + +50 & +a¢_OP_N©iveIÁeg” +, + +51 +a¢_DEF_ENB_UE_X2AP_ID_Ex‹nsiÚ_gs_1 +, + +52 ( +a¢_DEF_ENB_UE_X2AP_ID_Ex‹nsiÚ_gs_1 +) + +53 /( +a¢_DEF_ENB_UE_X2AP_ID_Ex‹nsiÚ_gs_1 +[0]), + +54 +a¢_DEF_ENB_UE_X2AP_ID_Ex‹nsiÚ_gs_1 +, + +55 ( +a¢_DEF_ENB_UE_X2AP_ID_Ex‹nsiÚ_gs_1 +) + +56 /( +a¢_DEF_ENB_UE_X2AP_ID_Ex‹nsiÚ_gs_1 +[0]), + +57 { 0, & +a¢_PER_ty³_ENB_UE_X2AP_ID_Ex‹nsiÚ_cÚ¡r_1 +, +ENB_UE_X2AP_ID_Ex‹nsiÚ_cÚ¡¿št + }, + + @ENB-UE-X2AP-ID.c + +8  + ~"ENB-UE-X2AP-ID.h +" + +11 + $ENB_UE_X2AP_ID_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13  +v®ue +; + +15 if(! +¥Œ +) { + +16 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +18 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +22 +v®ue + = *(cÚ¡ *) +¥Œ +; + +24 if(( +v®ue + >= 0 && value <= 4095)) { + +28 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +30 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +33 + } +} + +39 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_ENB_UE_X2AP_ID_cÚ¡r_1 + + gCC_NOTUSED + = { + +40 { +APC_CONSTRAINED +, 12, 12, 0, 4095 } , + +41 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +44 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_ENB_UE_X2AP_ID_gs_1 +[] = { + +45 ( +ASN_TAG_CLASS_UNIVERSAL + | (2 << 2)) + +47 +a¢_TYPE_desütÜ_t + + ga¢_DEF_ENB_UE_X2AP_ID + = { + +50 & +a¢_OP_N©iveIÁeg” +, + +51 +a¢_DEF_ENB_UE_X2AP_ID_gs_1 +, + +52 ( +a¢_DEF_ENB_UE_X2AP_ID_gs_1 +) + +53 /( +a¢_DEF_ENB_UE_X2AP_ID_gs_1 +[0]), + +54 +a¢_DEF_ENB_UE_X2AP_ID_gs_1 +, + +55 ( +a¢_DEF_ENB_UE_X2AP_ID_gs_1 +) + +56 /( +a¢_DEF_ENB_UE_X2AP_ID_gs_1 +[0]), + +57 { 0, & +a¢_PER_ty³_ENB_UE_X2AP_ID_cÚ¡r_1 +, +ENB_UE_X2AP_ID_cÚ¡¿št + }, + + @EUTRA-CGI.c + +8  + ~"EUTRA-CGI.h +" + +10 +a¢_TYPE_memb”_t + + ga¢_MBR_EUTRA_CGI_1 +[] = { + +11 { +ATF_NOFLAGS +, 0, +off£tof +( +EUTRA_CGI +, +pLMNId’t™y +), + +12 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +14 & +a¢_DEF_PLMNId’t™y +, + +20 { +ATF_NOFLAGS +, 0, +off£tof +( +EUTRA_CGI +, +eUTRAC–lId’t™y +), + +21 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +23 & +a¢_DEF_EUTRAC–lId’t™y +, + +30 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_EUTRA_CGI_gs_1 +[] = { + +31 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +33 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_EUTRA_CGI_g2–_1 +[] = { + +34 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +35 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 } + +37 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_EUTRA_CGI_¥ecs_1 + = { + +38 ( +EUTRA_CGI +), + +39 +off£tof +( +EUTRA_CGI +, +_a¢_ùx +), + +40 +a¢_MAP_EUTRA_CGI_g2–_1 +, + +45 +a¢_TYPE_desütÜ_t + + ga¢_DEF_EUTRA_CGI + = { + +48 & +a¢_OP_SEQUENCE +, + +49 +a¢_DEF_EUTRA_CGI_gs_1 +, + +50 ( +a¢_DEF_EUTRA_CGI_gs_1 +) + +51 /( +a¢_DEF_EUTRA_CGI_gs_1 +[0]), + +52 +a¢_DEF_EUTRA_CGI_gs_1 +, + +53 ( +a¢_DEF_EUTRA_CGI_gs_1 +) + +54 /( +a¢_DEF_EUTRA_CGI_gs_1 +[0]), + +55 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +56 +a¢_MBR_EUTRA_CGI_1 +, + +58 & +a¢_SPC_EUTRA_CGI_¥ecs_1 + + + @EUTRACellIdentity.c + +8  + ~"EUTRAC–lId’t™y.h +" + +11 + $EUTRAC–lId’t™y_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13 cÚ¡ +BIT_STRING_t + * +¡ + = (cÚ¡ BIT_STRING_ˆ*) +¥Œ +; + +14 +size_t + +size +; + +16 if(! +¥Œ +) { + +17 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +19 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +23 if( +¡ +-> +size + > 0) { + +25 +size + = 8 * +¡ +->siz- (¡-> +b™s_unu£d + & 0x07); + +27 +size + = 0; + +30 if(( +size + == 28)) { + +34 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +36 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +39 + } +} + +45 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_EUTRAC–lId’t™y_cÚ¡r_1 + + gCC_NOTUSED + = { + +46 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +47 { +APC_CONSTRAINED +, 0, 0, 28, 28 } , + +50 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_EUTRAC–lId’t™y_gs_1 +[] = { + +51 ( +ASN_TAG_CLASS_UNIVERSAL + | (3 << 2)) + +53 +a¢_TYPE_desütÜ_t + + ga¢_DEF_EUTRAC–lId’t™y + = { + +56 & +a¢_OP_BIT_STRING +, + +57 +a¢_DEF_EUTRAC–lId’t™y_gs_1 +, + +58 ( +a¢_DEF_EUTRAC–lId’t™y_gs_1 +) + +59 /( +a¢_DEF_EUTRAC–lId’t™y_gs_1 +[0]), + +60 +a¢_DEF_EUTRAC–lId’t™y_gs_1 +, + +61 ( +a¢_DEF_EUTRAC–lId’t™y_gs_1 +) + +62 /( +a¢_DEF_EUTRAC–lId’t™y_gs_1 +[0]), + +63 { 0, & +a¢_PER_ty³_EUTRAC–lId’t™y_cÚ¡r_1 +, +EUTRAC–lId’t™y_cÚ¡¿št + }, + +65 & +a¢_SPC_BIT_STRING_¥ecs + + + @FiveGS-TAC.c + +8  + ~"FiveGS-TAC.h +" + +11 + $FiveGS_TAC_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13 cÚ¡ +OCTET_STRING_t + * +¡ + = (cÚ¡ OCTET_STRING_ˆ*) +¥Œ +; + +14 +size_t + +size +; + +16 if(! +¥Œ +) { + +17 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +19 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +23 +size + = +¡ +->size; + +25 if(( +size + == 3)) { + +29 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +31 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +34 + } +} + +40  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_FiveGS_TAC_cÚ¡r_1 + + gCC_NOTUSED + = { + +41 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +42 { +APC_CONSTRAINED +, 0, 0, 3, 3 } , + +45 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_FiveGS_TAC_gs_1 +[] = { + +46 ( +ASN_TAG_CLASS_UNIVERSAL + | (4 << 2)) + +48 +a¢_TYPE_desütÜ_t + + ga¢_DEF_FiveGS_TAC + = { + +51 & +a¢_OP_OCTET_STRING +, + +52 +a¢_DEF_FiveGS_TAC_gs_1 +, + +53 ( +a¢_DEF_FiveGS_TAC_gs_1 +) + +54 /( +a¢_DEF_FiveGS_TAC_gs_1 +[0]), + +55 +a¢_DEF_FiveGS_TAC_gs_1 +, + +56 ( +a¢_DEF_FiveGS_TAC_gs_1 +) + +57 /( +a¢_DEF_FiveGS_TAC_gs_1 +[0]), + +58 { 0, & +a¢_PER_ty³_FiveGS_TAC_cÚ¡r_1 +, +FiveGS_TAC_cÚ¡¿št + }, + +60 & +a¢_SPC_OCTET_STRING_¥ecs + + + @FiveQI.c + +8  + ~"FiveQI.h +" + +11 + $FiveQI_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13  +v®ue +; + +15 if(! +¥Œ +) { + +16 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +18 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +22 +v®ue + = *(cÚ¡ *) +¥Œ +; + +24 if(( +v®ue + >= 0 && value <= 255)) { + +28 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +30 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +33 + } +} + +39 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_FiveQI_cÚ¡r_1 + + gCC_NOTUSED + = { + +40 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 8, 8, 0, 255 } , + +41 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +44 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_FiveQI_gs_1 +[] = { + +45 ( +ASN_TAG_CLASS_UNIVERSAL + | (2 << 2)) + +47 +a¢_TYPE_desütÜ_t + + ga¢_DEF_FiveQI + = { + +50 & +a¢_OP_N©iveIÁeg” +, + +51 +a¢_DEF_FiveQI_gs_1 +, + +52 ( +a¢_DEF_FiveQI_gs_1 +) + +53 /( +a¢_DEF_FiveQI_gs_1 +[0]), + +54 +a¢_DEF_FiveQI_gs_1 +, + +55 ( +a¢_DEF_FiveQI_gs_1 +) + +56 /( +a¢_DEF_FiveQI_gs_1 +[0]), + +57 { 0, & +a¢_PER_ty³_FiveQI_cÚ¡r_1 +, +FiveQI_cÚ¡¿št + }, + + @FreqBandNrItem.c + +8  + ~"F»qBªdNrI‹m.h +" + +11 + $memb_äeqBªdIndiÿtÜNr_cÚ¡¿št_1 +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13  +v®ue +; + +15 if(! +¥Œ +) { + +16 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +18 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +22 +v®ue + = *(cÚ¡ *) +¥Œ +; + +24 if(( +v®ue + >= 1 && value <= 1024)) { + +28 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +30 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +33 + } +} + +35  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_memb_äeqBªdIndiÿtÜNr_cÚ¡r_2 + + gCC_NOTUSED + = { + +36 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 10, 10, 1, 1024 } , + +37 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +40  +a¢_TYPE_memb”_t + + ga¢_MBR_F»qBªdNrI‹m_1 +[] = { + +41 { +ATF_NOFLAGS +, 0, +off£tof +( +F»qBªdNrI‹m +, +äeqBªdIndiÿtÜNr +), + +42 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +44 & +a¢_DEF_N©iveIÁeg” +, + +46 { 0, & +a¢_PER_memb_äeqBªdIndiÿtÜNr_cÚ¡r_2 +, +memb_äeqBªdIndiÿtÜNr_cÚ¡¿št_1 + }, + +51 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_F»qBªdNrI‹m_gs_1 +[] = { + +52 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +54 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_F»qBªdNrI‹m_g2–_1 +[] = { + +55 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 } + +57  +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_F»qBªdNrI‹m_¥ecs_1 + = { + +58 ( +F»qBªdNrI‹m +), + +59 +off£tof +( +F»qBªdNrI‹m +, +_a¢_ùx +), + +60 +a¢_MAP_F»qBªdNrI‹m_g2–_1 +, + +65 +a¢_TYPE_desütÜ_t + + ga¢_DEF_F»qBªdNrI‹m + = { + +68 & +a¢_OP_SEQUENCE +, + +69 +a¢_DEF_F»qBªdNrI‹m_gs_1 +, + +70 ( +a¢_DEF_F»qBªdNrI‹m_gs_1 +) + +71 /( +a¢_DEF_F»qBªdNrI‹m_gs_1 +[0]), + +72 +a¢_DEF_F»qBªdNrI‹m_gs_1 +, + +73 ( +a¢_DEF_F»qBªdNrI‹m_gs_1 +) + +74 /( +a¢_DEF_F»qBªdNrI‹m_gs_1 +[0]), + +75 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +76 +a¢_MBR_F»qBªdNrI‹m_1 +, + +78 & +a¢_SPC_F»qBªdNrI‹m_¥ecs_1 + + + @GNB-CU-CP-UE-E1AP-ID.c + +8  + ~"GNB-CU-CP-UE-E1AP-ID.h +" + +11 + $GNB_CU_CP_UE_E1AP_ID_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +14 if(! +¥Œ +) { + +15 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +17 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +24 + } +} + +30 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_GNB_CU_CP_UE_E1AP_ID_cÚ¡r_1 + + gCC_NOTUSED + = { + +31 { +APC_CONSTRAINED +, 32, -1, 0, 4294967295 } , + +32 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +35 cÚ¡ +a¢_INTEGER_¥ecifics_t + + ga¢_SPC_GNB_CU_CP_UE_E1AP_ID_¥ecs_1 + = { + +40 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_GNB_CU_CP_UE_E1AP_ID_gs_1 +[] = { + +41 ( +ASN_TAG_CLASS_UNIVERSAL + | (2 << 2)) + +43 +a¢_TYPE_desütÜ_t + + ga¢_DEF_GNB_CU_CP_UE_E1AP_ID + = { + +46 & +a¢_OP_N©iveIÁeg” +, + +47 +a¢_DEF_GNB_CU_CP_UE_E1AP_ID_gs_1 +, + +48 ( +a¢_DEF_GNB_CU_CP_UE_E1AP_ID_gs_1 +) + +49 /( +a¢_DEF_GNB_CU_CP_UE_E1AP_ID_gs_1 +[0]), + +50 +a¢_DEF_GNB_CU_CP_UE_E1AP_ID_gs_1 +, + +51 ( +a¢_DEF_GNB_CU_CP_UE_E1AP_ID_gs_1 +) + +52 /( +a¢_DEF_GNB_CU_CP_UE_E1AP_ID_gs_1 +[0]), + +53 { 0, & +a¢_PER_ty³_GNB_CU_CP_UE_E1AP_ID_cÚ¡r_1 +, +GNB_CU_CP_UE_E1AP_ID_cÚ¡¿št + }, + +55 & +a¢_SPC_GNB_CU_CP_UE_E1AP_ID_¥ecs_1 + + + @GNB-CU-UE-F1AP-ID.c + +8  + ~"GNB-CU-UE-F1AP-ID.h +" + +11 + $GNB_CU_UE_F1AP_ID_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +14 if(! +¥Œ +) { + +15 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +17 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +24 + } +} + +30 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_GNB_CU_UE_F1AP_ID_cÚ¡r_1 + + gCC_NOTUSED + = { + +31 { +APC_CONSTRAINED +, 32, -1, 0, 4294967295 } , + +32 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +35 cÚ¡ +a¢_INTEGER_¥ecifics_t + + ga¢_SPC_GNB_CU_UE_F1AP_ID_¥ecs_1 + = { + +40 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_GNB_CU_UE_F1AP_ID_gs_1 +[] = { + +41 ( +ASN_TAG_CLASS_UNIVERSAL + | (2 << 2)) + +43 +a¢_TYPE_desütÜ_t + + ga¢_DEF_GNB_CU_UE_F1AP_ID + = { + +46 & +a¢_OP_N©iveIÁeg” +, + +47 +a¢_DEF_GNB_CU_UE_F1AP_ID_gs_1 +, + +48 ( +a¢_DEF_GNB_CU_UE_F1AP_ID_gs_1 +) + +49 /( +a¢_DEF_GNB_CU_UE_F1AP_ID_gs_1 +[0]), + +50 +a¢_DEF_GNB_CU_UE_F1AP_ID_gs_1 +, + +51 ( +a¢_DEF_GNB_CU_UE_F1AP_ID_gs_1 +) + +52 /( +a¢_DEF_GNB_CU_UE_F1AP_ID_gs_1 +[0]), + +53 { 0, & +a¢_PER_ty³_GNB_CU_UE_F1AP_ID_cÚ¡r_1 +, +GNB_CU_UE_F1AP_ID_cÚ¡¿št + }, + +55 & +a¢_SPC_GNB_CU_UE_F1AP_ID_¥ecs_1 + + + @GNB-CU-UP-ID.c + +8  + ~"GNB-CU-UP-ID.h +" + +11 + $GNB_CU_UP_ID_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13 cÚ¡ +INTEGER_t + * +¡ + = (cÚ¡ INTEGER_ˆ*) +¥Œ +; + +14  +v®ue +; + +16 if(! +¥Œ +) { + +17 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +19 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +23 if( + `a¢_INTEGER2lÚg +( +¡ +, & +v®ue +)) { + +24 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +26 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +30 if(( +v®ue + >= 0 && value <= 68719476735)) { + +34 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +36 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +39 + } +} + +45 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_GNB_CU_UP_ID_cÚ¡r_1 + + gCC_NOTUSED + = { + +46 { +APC_CONSTRAINED +, 36, -1, 0, 68719476735 } , + +47 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +50 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_GNB_CU_UP_ID_gs_1 +[] = { + +51 ( +ASN_TAG_CLASS_UNIVERSAL + | (2 << 2)) + +53 +a¢_TYPE_desütÜ_t + + ga¢_DEF_GNB_CU_UP_ID + = { + +56 & +a¢_OP_INTEGER +, + +57 +a¢_DEF_GNB_CU_UP_ID_gs_1 +, + +58 ( +a¢_DEF_GNB_CU_UP_ID_gs_1 +) + +59 /( +a¢_DEF_GNB_CU_UP_ID_gs_1 +[0]), + +60 +a¢_DEF_GNB_CU_UP_ID_gs_1 +, + +61 ( +a¢_DEF_GNB_CU_UP_ID_gs_1 +) + +62 /( +a¢_DEF_GNB_CU_UP_ID_gs_1 +[0]), + +63 { 0, & +a¢_PER_ty³_GNB_CU_UP_ID_cÚ¡r_1 +, +GNB_CU_UP_ID_cÚ¡¿št + }, + + @GNB-DU-ID.c + +8  + ~"GNB-DU-ID.h +" + +11 + $GNB_DU_ID_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13 cÚ¡ +INTEGER_t + * +¡ + = (cÚ¡ INTEGER_ˆ*) +¥Œ +; + +14  +v®ue +; + +16 if(! +¥Œ +) { + +17 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +19 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +23 if( + `a¢_INTEGER2lÚg +( +¡ +, & +v®ue +)) { + +24 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +26 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +30 if(( +v®ue + >= 0 && value <= 68719476735)) { + +34 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +36 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +39 + } +} + +45 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_GNB_DU_ID_cÚ¡r_1 + + gCC_NOTUSED + = { + +46 { +APC_CONSTRAINED +, 36, -1, 0, 68719476735 } , + +47 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +50 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_GNB_DU_ID_gs_1 +[] = { + +51 ( +ASN_TAG_CLASS_UNIVERSAL + | (2 << 2)) + +53 +a¢_TYPE_desütÜ_t + + ga¢_DEF_GNB_DU_ID + = { + +56 & +a¢_OP_INTEGER +, + +57 +a¢_DEF_GNB_DU_ID_gs_1 +, + +58 ( +a¢_DEF_GNB_DU_ID_gs_1 +) + +59 /( +a¢_DEF_GNB_DU_ID_gs_1 +[0]), + +60 +a¢_DEF_GNB_DU_ID_gs_1 +, + +61 ( +a¢_DEF_GNB_DU_ID_gs_1 +) + +62 /( +a¢_DEF_GNB_DU_ID_gs_1 +[0]), + +63 { 0, & +a¢_PER_ty³_GNB_DU_ID_cÚ¡r_1 +, +GNB_DU_ID_cÚ¡¿št + }, + + @GNB-ID.c + +8  + ~"GNB-ID.h +" + +11 + $memb_gNB_ID_cÚ¡¿št_1 +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13 cÚ¡ +BIT_STRING_t + * +¡ + = (cÚ¡ BIT_STRING_ˆ*) +¥Œ +; + +14 +size_t + +size +; + +16 if(! +¥Œ +) { + +17 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +19 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +23 if( +¡ +-> +size + > 0) { + +25 +size + = 8 * +¡ +->siz- (¡-> +b™s_unu£d + & 0x07); + +27 +size + = 0; + +30 if(( +size + >= 22 && size <= 32)) { + +34 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +36 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +39 + } +} + +41  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_memb_gNB_ID_cÚ¡r_2 + + gCC_NOTUSED + = { + +42 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +43 { +APC_CONSTRAINED +, 4, 4, 22, 32 } , + +46 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_GNB_ID_cÚ¡r_1 + + gCC_NOTUSED + = { + +47 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 0, 0, 0, 0 } , + +48 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +51 +a¢_TYPE_memb”_t + + ga¢_MBR_GNB_ID_1 +[] = { + +52 { +ATF_NOFLAGS +, 0, +off£tof +( +GNB_ID +, +choiû +. +gNB_ID +), + +53 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +55 & +a¢_DEF_BIT_STRING +, + +57 { 0, & +a¢_PER_memb_gNB_ID_cÚ¡r_2 +, +memb_gNB_ID_cÚ¡¿št_1 + }, + +62 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_GNB_ID_g2–_1 +[] = { + +63 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 } + +65 +a¢_CHOICE_¥ecifics_t + + ga¢_SPC_GNB_ID_¥ecs_1 + = { + +66 ( +GNB_ID +), + +67 +off£tof +( +GNB_ID +, +_a¢_ùx +), + +68 +off£tof +( +GNB_ID +, +´e£Á +), + +69 ((( +GNB_ID + *)0)-> +´e£Á +), + +70 +a¢_MAP_GNB_ID_g2–_1 +, + +75 +a¢_TYPE_desütÜ_t + + ga¢_DEF_GNB_ID + = { + +78 & +a¢_OP_CHOICE +, + +83 { 0, & +a¢_PER_ty³_GNB_ID_cÚ¡r_1 +, +CHOICE_cÚ¡¿št + }, + +84 +a¢_MBR_GNB_ID_1 +, + +86 & +a¢_SPC_GNB_ID_¥ecs_1 + + + @GUAMI.c + +8  + ~"GUAMI.h +" + +10 +a¢_TYPE_memb”_t + + ga¢_MBR_GUAMI_1 +[] = { + +11 { +ATF_NOFLAGS +, 0, +off£tof +( +GUAMI +, +pLMNId’t™y +), + +12 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +14 & +a¢_DEF_PLMNId’t™y +, + +20 { +ATF_NOFLAGS +, 0, +off£tof +( +GUAMI +, +aMFRegiÚID +), + +21 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +23 & +a¢_DEF_AMFRegiÚID +, + +29 { +ATF_NOFLAGS +, 0, +off£tof +( +GUAMI +, +aMFS‘ID +), + +30 ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), + +32 & +a¢_DEF_AMFS‘ID +, + +38 { +ATF_NOFLAGS +, 0, +off£tof +( +GUAMI +, +aMFPoš‹r +), + +39 ( +ASN_TAG_CLASS_CONTEXT + | (3 << 2)), + +41 & +a¢_DEF_AMFPoš‹r +, + +48 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_GUAMI_gs_1 +[] = { + +49 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +51 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_GUAMI_g2–_1 +[] = { + +52 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +53 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 }, + +54 { ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), 2, 0, 0 }, + +55 { ( +ASN_TAG_CLASS_CONTEXT + | (3 << 2)), 3, 0, 0 } + +57 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_GUAMI_¥ecs_1 + = { + +58 ( +GUAMI +), + +59 +off£tof +( +GUAMI +, +_a¢_ùx +), + +60 +a¢_MAP_GUAMI_g2–_1 +, + +65 +a¢_TYPE_desütÜ_t + + ga¢_DEF_GUAMI + = { + +68 & +a¢_OP_SEQUENCE +, + +69 +a¢_DEF_GUAMI_gs_1 +, + +70 ( +a¢_DEF_GUAMI_gs_1 +) + +71 /( +a¢_DEF_GUAMI_gs_1 +[0]), + +72 +a¢_DEF_GUAMI_gs_1 +, + +73 ( +a¢_DEF_GUAMI_gs_1 +) + +74 /( +a¢_DEF_GUAMI_gs_1 +[0]), + +75 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +76 +a¢_MBR_GUAMI_1 +, + +78 & +a¢_SPC_GUAMI_¥ecs_1 + + + @GUMMEI.c + +8  + ~"GUMMEI.h +" + +10 +a¢_TYPE_memb”_t + + ga¢_MBR_GUMMEI_1 +[] = { + +11 { +ATF_NOFLAGS +, 0, +off£tof +( +GUMMEI +, +pLMN_Id’t™y +), + +12 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +14 & +a¢_DEF_PLMNId’t™y +, + +20 { +ATF_NOFLAGS +, 0, +off£tof +( +GUMMEI +, +mME_Group_ID +), + +21 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +23 & +a¢_DEF_MME_Group_ID +, + +29 { +ATF_NOFLAGS +, 0, +off£tof +( +GUMMEI +, +mME_Code +), + +30 ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), + +32 & +a¢_DEF_MME_Code +, + +39 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_GUMMEI_gs_1 +[] = { + +40 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +42 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_GUMMEI_g2–_1 +[] = { + +43 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +44 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 }, + +45 { ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), 2, 0, 0 } + +47 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_GUMMEI_¥ecs_1 + = { + +48 ( +GUMMEI +), + +49 +off£tof +( +GUMMEI +, +_a¢_ùx +), + +50 +a¢_MAP_GUMMEI_g2–_1 +, + +55 +a¢_TYPE_desütÜ_t + + ga¢_DEF_GUMMEI + = { + +58 & +a¢_OP_SEQUENCE +, + +59 +a¢_DEF_GUMMEI_gs_1 +, + +60 ( +a¢_DEF_GUMMEI_gs_1 +) + +61 /( +a¢_DEF_GUMMEI_gs_1 +[0]), + +62 +a¢_DEF_GUMMEI_gs_1 +, + +63 ( +a¢_DEF_GUMMEI_gs_1 +) + +64 /( +a¢_DEF_GUMMEI_gs_1 +[0]), + +65 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +66 +a¢_MBR_GUMMEI_1 +, + +68 & +a¢_SPC_GUMMEI_¥ecs_1 + + + @GlobalENB-ID.c + +8  + ~"Glob®ENB-ID.h +" + +10 +a¢_TYPE_memb”_t + + ga¢_MBR_Glob®ENB_ID_1 +[] = { + +11 { +ATF_NOFLAGS +, 0, +off£tof +( +Glob®ENB_ID +, +pLMNId’t™y +), + +12 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +14 & +a¢_DEF_PLMNId’t™y +, + +20 { +ATF_NOFLAGS +, 0, +off£tof +( +Glob®ENB_ID +, +eNB_ID +), + +21 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +23 & +a¢_DEF_ENB_ID +, + +30 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_Glob®ENB_ID_gs_1 +[] = { + +31 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +33 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_Glob®ENB_ID_g2–_1 +[] = { + +34 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +35 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 } + +37 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_Glob®ENB_ID_¥ecs_1 + = { + +38 ( +Glob®ENB_ID +), + +39 +off£tof +( +Glob®ENB_ID +, +_a¢_ùx +), + +40 +a¢_MAP_Glob®ENB_ID_g2–_1 +, + +45 +a¢_TYPE_desütÜ_t + + ga¢_DEF_Glob®ENB_ID + = { + +48 & +a¢_OP_SEQUENCE +, + +49 +a¢_DEF_Glob®ENB_ID_gs_1 +, + +50 ( +a¢_DEF_Glob®ENB_ID_gs_1 +) + +51 /( +a¢_DEF_Glob®ENB_ID_gs_1 +[0]), + +52 +a¢_DEF_Glob®ENB_ID_gs_1 +, + +53 ( +a¢_DEF_Glob®ENB_ID_gs_1 +) + +54 /( +a¢_DEF_Glob®ENB_ID_gs_1 +[0]), + +55 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +56 +a¢_MBR_Glob®ENB_ID_1 +, + +58 & +a¢_SPC_Glob®ENB_ID_¥ecs_1 + + + @GlobalGNB-ID.c + +8  + ~"Glob®GNB-ID.h +" + +10 +a¢_TYPE_memb”_t + + ga¢_MBR_Glob®GNB_ID_1 +[] = { + +11 { +ATF_NOFLAGS +, 0, +off£tof +( +Glob®GNB_ID +, +pLMNId’t™y +), + +12 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +14 & +a¢_DEF_PLMNId’t™y +, + +20 { +ATF_NOFLAGS +, 0, +off£tof +( +Glob®GNB_ID +, +gNB_ID +), + +21 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +23 & +a¢_DEF_GNB_ID +, + +30 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_Glob®GNB_ID_gs_1 +[] = { + +31 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +33 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_Glob®GNB_ID_g2–_1 +[] = { + +34 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +35 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 } + +37 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_Glob®GNB_ID_¥ecs_1 + = { + +38 ( +Glob®GNB_ID +), + +39 +off£tof +( +Glob®GNB_ID +, +_a¢_ùx +), + +40 +a¢_MAP_Glob®GNB_ID_g2–_1 +, + +45 +a¢_TYPE_desütÜ_t + + ga¢_DEF_Glob®GNB_ID + = { + +48 & +a¢_OP_SEQUENCE +, + +49 +a¢_DEF_Glob®GNB_ID_gs_1 +, + +50 ( +a¢_DEF_Glob®GNB_ID_gs_1 +) + +51 /( +a¢_DEF_Glob®GNB_ID_gs_1 +[0]), + +52 +a¢_DEF_Glob®GNB_ID_gs_1 +, + +53 ( +a¢_DEF_Glob®GNB_ID_gs_1 +) + +54 /( +a¢_DEF_Glob®GNB_ID_gs_1 +[0]), + +55 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +56 +a¢_MBR_Glob®GNB_ID_1 +, + +58 & +a¢_SPC_Glob®GNB_ID_¥ecs_1 + + + @GlobalNGRANNodeID.c + +8  + ~"Glob®NGRANNodeID.h +" + +10  + ~"Glob®GNB-ID.h +" + +11  + ~"Glob®NgENB-ID.h +" + +12 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_Glob®NGRANNodeID_cÚ¡r_1 + + gCC_NOTUSED + = { + +13 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 1, 1, 0, 1 } , + +14 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +17 +a¢_TYPE_memb”_t + + ga¢_MBR_Glob®NGRANNodeID_1 +[] = { + +18 { +ATF_POINTER +, 0, +off£tof +( +Glob®NGRANNodeID +, +choiû +. +gNB +), + +19 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +21 & +a¢_DEF_Glob®GNB_ID +, + +27 { +ATF_POINTER +, 0, +off£tof +( +Glob®NGRANNodeID +, +choiû +. +ng_eNB +), + +28 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +30 & +a¢_DEF_Glob®NgENB_ID +, + +37 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_Glob®NGRANNodeID_g2–_1 +[] = { + +38 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +39 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 } + +41 +a¢_CHOICE_¥ecifics_t + + ga¢_SPC_Glob®NGRANNodeID_¥ecs_1 + = { + +42 ( +Glob®NGRANNodeID +), + +43 +off£tof +( +Glob®NGRANNodeID +, +_a¢_ùx +), + +44 +off£tof +( +Glob®NGRANNodeID +, +´e£Á +), + +45 ((( +Glob®NGRANNodeID + *)0)-> +´e£Á +), + +46 +a¢_MAP_Glob®NGRANNodeID_g2–_1 +, + +51 +a¢_TYPE_desütÜ_t + + ga¢_DEF_Glob®NGRANNodeID + = { + +54 & +a¢_OP_CHOICE +, + +59 { 0, & +a¢_PER_ty³_Glob®NGRANNodeID_cÚ¡r_1 +, +CHOICE_cÚ¡¿št + }, + +60 +a¢_MBR_Glob®NGRANNodeID_1 +, + +62 & +a¢_SPC_Glob®NGRANNodeID_¥ecs_1 + + + @GlobalNgENB-ID.c + +8  + ~"Glob®NgENB-ID.h +" + +10 +a¢_TYPE_memb”_t + + ga¢_MBR_Glob®NgENB_ID_1 +[] = { + +11 { +ATF_NOFLAGS +, 0, +off£tof +( +Glob®NgENB_ID +, +pLMNId’t™y +), + +12 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +14 & +a¢_DEF_PLMNId’t™y +, + +20 { +ATF_NOFLAGS +, 0, +off£tof +( +Glob®NgENB_ID +, +ngENB_ID +), + +21 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +23 & +a¢_DEF_NgENB_ID +, + +30 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_Glob®NgENB_ID_gs_1 +[] = { + +31 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +33 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_Glob®NgENB_ID_g2–_1 +[] = { + +34 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +35 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 } + +37 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_Glob®NgENB_ID_¥ecs_1 + = { + +38 ( +Glob®NgENB_ID +), + +39 +off£tof +( +Glob®NgENB_ID +, +_a¢_ùx +), + +40 +a¢_MAP_Glob®NgENB_ID_g2–_1 +, + +45 +a¢_TYPE_desütÜ_t + + ga¢_DEF_Glob®NgENB_ID + = { + +48 & +a¢_OP_SEQUENCE +, + +49 +a¢_DEF_Glob®NgENB_ID_gs_1 +, + +50 ( +a¢_DEF_Glob®NgENB_ID_gs_1 +) + +51 /( +a¢_DEF_Glob®NgENB_ID_gs_1 +[0]), + +52 +a¢_DEF_Glob®NgENB_ID_gs_1 +, + +53 ( +a¢_DEF_Glob®NgENB_ID_gs_1 +) + +54 /( +a¢_DEF_Glob®NgENB_ID_gs_1 +[0]), + +55 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +56 +a¢_MBR_Glob®NgENB_ID_1 +, + +58 & +a¢_SPC_Glob®NgENB_ID_¥ecs_1 + + + @GlobalenGNB-ID.c + +8  + ~"Glob®’GNB-ID.h +" + +10 +a¢_TYPE_memb”_t + + ga¢_MBR_Glob®’GNB_ID_1 +[] = { + +11 { +ATF_NOFLAGS +, 0, +off£tof +( +Glob®’GNB_ID +, +pLMN_Id’t™y +), + +12 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +14 & +a¢_DEF_PLMNId’t™y +, + +20 { +ATF_NOFLAGS +, 0, +off£tof +( +Glob®’GNB_ID +, +’_gNB_ID +), + +21 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +23 & +a¢_DEF_EN_GNB_ID +, + +30 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_Glob®’GNB_ID_gs_1 +[] = { + +31 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +33 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_Glob®’GNB_ID_g2–_1 +[] = { + +34 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +35 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 } + +37 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_Glob®’GNB_ID_¥ecs_1 + = { + +38 ( +Glob®’GNB_ID +), + +39 +off£tof +( +Glob®’GNB_ID +, +_a¢_ùx +), + +40 +a¢_MAP_Glob®’GNB_ID_g2–_1 +, + +45 +a¢_TYPE_desütÜ_t + + ga¢_DEF_Glob®’GNB_ID + = { + +48 & +a¢_OP_SEQUENCE +, + +49 +a¢_DEF_Glob®’GNB_ID_gs_1 +, + +50 ( +a¢_DEF_Glob®’GNB_ID_gs_1 +) + +51 /( +a¢_DEF_Glob®’GNB_ID_gs_1 +[0]), + +52 +a¢_DEF_Glob®’GNB_ID_gs_1 +, + +53 ( +a¢_DEF_Glob®’GNB_ID_gs_1 +) + +54 /( +a¢_DEF_Glob®’GNB_ID_gs_1 +[0]), + +55 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +56 +a¢_MBR_Glob®’GNB_ID_1 +, + +58 & +a¢_SPC_Glob®’GNB_ID_¥ecs_1 + + + @GranularityPeriod.c + +8  + ~"G¿nuÏr™yP”iod.h +" + +11 + $G¿nuÏr™yP”iod_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13  +v®ue +; + +15 if(! +¥Œ +) { + +16 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +18 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +22 +v®ue + = *(cÚ¡ *) +¥Œ +; + +24 if(( +v®ue + >= 1 && value <= 4294967295)) { + +28 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +30 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +33 + } +} + +39 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_G¿nuÏr™yP”iod_cÚ¡r_1 + + gCC_NOTUSED + = { + +40 { +APC_CONSTRAINED +, 32, -1, 1, 4294967295 } , + +41 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +44 cÚ¡ +a¢_INTEGER_¥ecifics_t + + ga¢_SPC_G¿nuÏr™yP”iod_¥ecs_1 + = { + +49 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_G¿nuÏr™yP”iod_gs_1 +[] = { + +50 ( +ASN_TAG_CLASS_UNIVERSAL + | (2 << 2)) + +52 +a¢_TYPE_desütÜ_t + + ga¢_DEF_G¿nuÏr™yP”iod + = { + +55 & +a¢_OP_N©iveIÁeg” +, + +56 +a¢_DEF_G¿nuÏr™yP”iod_gs_1 +, + +57 ( +a¢_DEF_G¿nuÏr™yP”iod_gs_1 +) + +58 /( +a¢_DEF_G¿nuÏr™yP”iod_gs_1 +[0]), + +59 +a¢_DEF_G¿nuÏr™yP”iod_gs_1 +, + +60 ( +a¢_DEF_G¿nuÏr™yP”iod_gs_1 +) + +61 /( +a¢_DEF_G¿nuÏr™yP”iod_gs_1 +[0]), + +62 { 0, & +a¢_PER_ty³_G¿nuÏr™yP”iod_cÚ¡r_1 +, +G¿nuÏr™yP”iod_cÚ¡¿št + }, + +64 & +a¢_SPC_G¿nuÏr™yP”iod_¥ecs_1 + + + @GroupID.c + +8  + ~"GroupID.h +" + +10  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_GroupID_cÚ¡r_1 + + gCC_NOTUSED + = { + +11 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 1, 1, 0, 1 } , + +12 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +15  +a¢_TYPE_memb”_t + + ga¢_MBR_GroupID_1 +[] = { + +16 { +ATF_NOFLAGS +, 0, +off£tof +( +GroupID +, +choiû +. +fiveGC +), + +17 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +19 & +a¢_DEF_FiveQI +, + +25 { +ATF_NOFLAGS +, 0, +off£tof +( +GroupID +, +choiû +. +ePC +), + +26 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +28 & +a¢_DEF_QCI +, + +35 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_GroupID_g2–_1 +[] = { + +36 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +37 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 } + +39  +a¢_CHOICE_¥ecifics_t + + ga¢_SPC_GroupID_¥ecs_1 + = { + +40 ( +GroupID +), + +41 +off£tof +( +GroupID +, +_a¢_ùx +), + +42 +off£tof +( +GroupID +, +´e£Á +), + +43 ((( +GroupID + *)0)-> +´e£Á +), + +44 +a¢_MAP_GroupID_g2–_1 +, + +49 +a¢_TYPE_desütÜ_t + + ga¢_DEF_GroupID + = { + +52 & +a¢_OP_CHOICE +, + +57 { 0, & +a¢_PER_ty³_GroupID_cÚ¡r_1 +, +CHOICE_cÚ¡¿št + }, + +58 +a¢_MBR_GroupID_1 +, + +60 & +a¢_SPC_GroupID_¥ecs_1 + + + @INTEGER.c + +6  + ~ + +7  + ~ + +8  + ~ + +9  + ~<”ºo.h +> + +14 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_INTEGER_gs +[] = { + +15 ( +ASN_TAG_CLASS_UNIVERSAL + | (2 << 2)) + +17 +a¢_TYPE_ݔ©iÚ_t + + ga¢_OP_INTEGER + = { + +18 +INTEGER_ä“ +, + +19 +INTEGER_´št +, + +20 +INTEGER_com·» +, + +21 +b”_decode_´im™ive +, + +22 +INTEGER_’code_d” +, + +23 +INTEGER_decode_x” +, + +24 +INTEGER_’code_x” +, + +25 #ifdeà +ASN_DISABLE_OER_SUPPORT + + +29 +INTEGER_decode_Ûr +, + +30 +INTEGER_’code_Ûr +, + +32 #ifdef +ASN_DISABLE_PER_SUPPORT + + +38 +INTEGER_decode_u³r +, + +39 +INTEGER_’code_u³r +, + +40 +INTEGER_decode_­” +, + +41 +INTEGER_’code_­” +, + +43 +INTEGER_¿ndom_fžl +, + +46 +a¢_TYPE_desütÜ_t + + ga¢_DEF_INTEGER + = { + +49 & +a¢_OP_INTEGER +, + +50 +a¢_DEF_INTEGER_gs +, + +51 ( +a¢_DEF_INTEGER_gs +) / (asn_DEF_INTEGER_tags[0]), + +52 +a¢_DEF_INTEGER_gs +, + +53 ( +a¢_DEF_INTEGER_gs +) / (asn_DEF_INTEGER_tags[0]), + +54 { 0, 0, +a¢_g’”ic_no_cÚ¡¿št + }, + +62 +a¢_’c_rv®_t + + +63 + $INTEGER_’code_d” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +64  +g_mode +, +b”_Žv_g_t + +g +, +a¢_­p_cÚsume_by‹s_f + * +cb +, + +65 * +­p_key +) { + +66 cÚ¡ +INTEGER_t + * +¡ + = (cÚ¡ INTEGER_ˆ*) +¥Œ +; + +67 +a¢_’c_rv®_t + +rv® +; + +68 +INTEGER_t + +efãùive_š‹g” +; + +70 + `ASN_DEBUG +("%s %s‡s INTEGER (tm=%d)", + +71 +cb +?"Encodšg":"E¡im©šg", +td +-> +Çme +, +g_mode +); + +77 if( +¡ +-> +buf +) { + +78 +ušt8_t + * +buf + = +¡ +->buf; + +79 +ušt8_t + * +’d1 + = +buf + + +¡ +-> +size + - 1; + +80  +shiá +; + +83 ; +buf + < +’d1 +; buf++) { + +91 * +buf +) { + +92 0x00: if(( +buf +[1] & 0x80) == 0) + +95 0xff: if(( +buf +[1] & 0x80)) + +103 +shiá + = +buf + - +¡ +->buf; + +104 if( +shiá +) { + +106 cÚ¡ +ušt8_t + * +c_buf +; + +107 +ušt8_t + * +nc_buf +; + +108 } +uncÚ¡ +; + +109 +uncÚ¡ +. +c_buf + = +¡ +-> +buf +; + +110 +efãùive_š‹g” +. +buf + = +uncÚ¡ +. +nc_buf + + +shiá +; + +111 +efãùive_š‹g” +. +size + = +¡ +->siz- +shiá +; + +113 +¡ + = & +efãùive_š‹g” +; + +117 +rv® + = + `d”_’code_´im™ive +( +td +, +¡ +, +g_mode +, +g +, +cb +, +­p_key +); + +118 if( +rv® +. +¡ruùu»_±r + =ð& +efãùive_š‹g” +) { + +119 +rv® +. +¡ruùu»_±r + = +¥Œ +; + +121  +rv® +; + +122 + } +} + +124 cÚ¡ +a¢_INTEGER_’um_m­_t + * +INTEGER_m­_’um2v®ue +( + +125 cÚ¡ +a¢_INTEGER_¥ecifics_t + * +¥ecs +, cÚ¡ * +l¡¬t +, + +126 cÚ¡ * +l¡Ý +); + +131  +ssize_t + + +132 + $INTEGER__dump +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ +INTEGER_t + * +¡ +, +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +,  +¶ašOrXER +) { + +133 cÚ¡ +a¢_INTEGER_¥ecifics_t + * +¥ecs + = + +134 (cÚ¡ +a¢_INTEGER_¥ecifics_t + *) +td +-> +¥ecifics +; + +135  +sü©ch +[32]; + +136 +ušt8_t + * +buf + = +¡ +->buf; + +137 +ušt8_t + * +buf_’d + = +¡ +-> +buf + + st-> +size +; + +138 +štmax_t + +v®ue +; + +139 +ssize_t + +wrÙe + = 0; + +140 * +p +; + +141  +»t +; + +143 if( +¥ecs + && s³cs-> +f›ld_unsigÃd +) + +144 +»t + = + `a¢_INTEGER2umax +( +¡ +, ( +uštmax_t + *)& +v®ue +); + +146 +»t + = + `a¢_INTEGER2imax +( +¡ +, & +v®ue +); + +149 if( +»t + == 0) { + +150 cÚ¡ +a¢_INTEGER_’um_m­_t + * +– +; + +151 +– + = ( +v®ue + >ð0 || ! +¥ecs + || !¥ecs-> +f›ld_unsigÃd +) + +152 ? + `INTEGER_m­_v®ue2’um +( +¥ecs +, +v®ue +) : 0; + +153 if( +– +) { + +154 if( +¶ašOrXER + == 0) + +155  + `a¢__fÜm©_to_ÿÎback +( +cb +, +­p_key +, + +156 "%" +ASN_PRIdMAX + " (%s)", +v®ue +, +– +-> +’um_Çme +); + +158  + `a¢__fÜm©_to_ÿÎback +( +cb +, +­p_key +, + +159 "<%s/>", +– +-> +’um_Çme +); + +160 } if( +¶ašOrXER + && +¥ecs + && s³cs-> +¡riù_’um”©iÚ +) { + +161 + `ASN_DEBUG +("ASN.1 forbids dealing with " + +163 +”ºo + = +EPERM +; + +166  + `a¢__fÜm©_to_ÿÎback +( +cb +, +­p_key +, + +167 ( +¥ecs + && s³cs-> +f›ld_unsigÃd +) + +168 ? "%" +ASN_PRIuMAX + + +169 : "%" +ASN_PRIdMAX +, + +170 +v®ue +); + +172 } if( +¶ašOrXER + && +¥ecs + && s³cs-> +¡riù_’um”©iÚ +) { + +177 + `ASN_DEBUG +("ASN.1 forbids dealing with " + +179 +”ºo + = +EPERM +; + +185  +p + = +sü©ch +; +buf + < +buf_’d +; buf++) { + +186 cÚ¡ * cÚ¡ +h2c + = "0123456789ABCDEF"; + +187 if(( +p + - +sü©ch +è>ð( +ssize_t +)((scratch) - 4)) { + +189 if( + `cb +( +sü©ch +, +p + - sü©ch, +­p_key +) < 0) + +191 +wrÙe + +ð +p + - +sü©ch +; + +192 +p + = +sü©ch +; + +194 * +p +++ = +h2c +[* +buf + >> 4]; + +195 * +p +++ = +h2c +[* +buf + & 0x0F]; + +196 * +p +++ = 0x3a; + +198 if( +p + !ð +sü©ch +) + +199 +p +--; + +201 +wrÙe + +ð +p + - +sü©ch +; + +202  ( + `cb +( +sü©ch +, +p + - sü©ch, +­p_key +è< 0è? -1 : +wrÙe +; + +203 + } +} + +209 + $INTEGER_´št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +,  +žev– +, + +210 +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +211 cÚ¡ +INTEGER_t + * +¡ + = (cÚ¡ INTEGER_ˆ*) +¥Œ +; + +212 +ssize_t + +»t +; + +214 () +žev– +; + +216 if(! +¡ + || !¡-> +buf +) + +217 +»t + = + `cb +("", 8, +­p_key +); + +219 +»t + = + `INTEGER__dump +( +td +, +¡ +, +cb +, +­p_key +, 0); + +221  ( +»t + < 0) ? -1 : 0; + +222 + } +} + +224  + se2v_key + { + +225 cÚ¡ * + m¡¬t +; + +226 cÚ¡ * + m¡Ý +; + +227 cÚ¡ +a¢_INTEGER_’um_m­_t + * + mvem­ +; + +228 cÚ¡ * + mevm­ +; + +231 + $INTEGER__com·r_’um2v®ue +(cÚ¡ * +kp +, cÚ¡ * +am +) { + +232 cÚ¡  +e2v_key + * +key + = (cÚ¡ e2v_key *) +kp +; + +233 cÚ¡ +a¢_INTEGER_’um_m­_t + * +– + = (cÚ¡‡¢_INTEGER_’um_m­_ˆ*) +am +; + +234 cÚ¡ * +±r +, * +’d +, * +Çme +; + +237 +– + = +key +-> +vem­ + + key-> +evm­ +[el - key->vemap]; + +240  +±r + = +key +-> +¡¬t +, +’d + = key-> +¡Ý +, +Çme + = +– +-> +’um_Çme +; + +241 +±r + < +’d +;…Œ++, +Çme +++) { + +242 if(* +±r + !ð* +Çme + || !*name) + +243  *(cÚ¡ *) +±r + + +244 - *(cÚ¡ *) +Çme +; + +246  +Çme +[0] ? -1 : 0; + +247 + } +} + +249 cÚ¡ +a¢_INTEGER_’um_m­_t + * + +250 + $INTEGER_m­_’um2v®ue +(cÚ¡ +a¢_INTEGER_¥ecifics_t + * +¥ecs +, cÚ¡ * +l¡¬t +, + +251 cÚ¡ * +l¡Ý +) { + +252 cÚ¡ +a¢_INTEGER_’um_m­_t + * +–_found +; + +253  +couÁ + = +¥ecs + ? s³cs-> +m­_couÁ + : 0; + +254  +e2v_key + +key +; + +255 cÚ¡ * +Í +; + +257 if(! +couÁ +è +NULL +; + +261  +l¡¬t +++, +Í + =†¡¬t;†°< +l¡Ý +;†p++) { + +262 * +Í +) { + +271 if( +Í + =ð +l¡Ý +è +NULL +; + +272 +l¡Ý + = +Í +; + +274 +key +. +¡¬t + = +l¡¬t +; + +275 +key +. +¡Ý + = +l¡Ý +; + +276 +key +. +vem­ + = +¥ecs +-> +v®ue2’um +; + +277 +key +. +evm­ + = +¥ecs +-> +’um2v®ue +; + +278 +–_found + = ( +a¢_INTEGER_’um_m­_t + *) + `b£¬ch +(& +key +, + +279 +¥ecs +-> +v®ue2’um +, +couÁ +, (specs->value2enum[0]), + +280 +INTEGER__com·r_’um2v®ue +); + +281 if( +–_found +) { + +283 +–_found + = +key +. +vem­ + + key. +evm­ +[el_found - key.vemap]; + +285  +–_found +; + +286 + } +} + +289 + $INTEGER__com·r_v®ue2’um +(cÚ¡ * +kp +, cÚ¡ * +am +) { + +290  +a + = *(cÚ¡ *) +kp +; + +291 cÚ¡ +a¢_INTEGER_’um_m­_t + * +– + = (cÚ¡‡¢_INTEGER_’um_m­_ˆ*) +am +; + +292  +b + = +– +-> +Çt_v®ue +; + +293 if( +a + < +b +)  -1; + +294 if( +a + =ð +b +)  0; + +296 + } +} + +298 cÚ¡ +a¢_INTEGER_’um_m­_t + * + +299 + $INTEGER_m­_v®ue2’um +(cÚ¡ +a¢_INTEGER_¥ecifics_t + * +¥ecs +,  +v®ue +) { + +300  +couÁ + = +¥ecs + ? s³cs-> +m­_couÁ + : 0; + +301 if(! +couÁ +)  0; + +302  ( +a¢_INTEGER_’um_m­_t + *) + `b£¬ch +(& +v®ue +, +¥ecs +-> +v®ue2’um +, + +303 +couÁ +, ( +¥ecs +-> +v®ue2’um +[0]), + +304 +INTEGER__com·r_v®ue2’um +); + +305 + } +} + +308 + $INTEGER_¡_´—Îoc +( +INTEGER_t + * +¡ +,  +mš_size +) { + +309 * +p + = + `MALLOC +( +mš_size + + 1); + +310 if( +p +) { + +311 * +b + = +¡ +-> +buf +; + +312 +¡ +-> +size + = 0; + +313 +¡ +-> +buf + = +p +; + +314 + `FREEMEM +( +b +); + +319 + } +} + +324  +x”_pbd_rv® + + +325 + $INTEGER__x”_body_decode +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, * +¥Œ +, + +326 cÚ¡ * +chunk_buf +, +size_t + +chunk_size +) { + +327 cÚ¡ +a¢_INTEGER_¥ecifics_t + * +¥ecs + = + +328 (cÚ¡ +a¢_INTEGER_¥ecifics_t + *) +td +-> +¥ecifics +; + +329 +INTEGER_t + * +¡ + = (INTEGER_ˆ*) +¥Œ +; + +330 +štmax_t + +dec_v®ue +; + +331 +štmax_t + +hex_v®ue + = 0; + +332 cÚ¡ * +Í +; + +333 cÚ¡ * +l¡¬t + = (cÚ¡ *) +chunk_buf +; + +334 cÚ¡ * +l¡Ý + = +l¡¬t + + +chunk_size +; + +336 +ST_LEADSPACE +, + +337 +ST_SKIPSPHEX +, + +338 +ST_WAITDIGITS +, + +339 +ST_DIGITS +, + +340 +ST_DIGITS_TRAILSPACE +, + +341 +ST_HEXDIGIT1 +, + +342 +ST_HEXDIGIT2 +, + +343 +ST_HEXDIGITS_TRAILSPACE +, + +344 +ST_HEXCOLON +, + +345 +ST_END_ENUM +, + +346 +ST_UNEXPECTED + + +347 } +¡©e + = +ST_LEADSPACE +; + +348 cÚ¡ * +dec_v®ue_¡¬t + = 0; + +349 cÚ¡ * +dec_v®ue_’d + = 0; + +351 if( +chunk_size +) + +352 + `ASN_DEBUG +("INTEGER body %ld 0x%2x..0x%2x", + +353 () +chunk_size +, * +l¡¬t +, +l¡Ý +[-1]); + +355 if( + `INTEGER_¡_´—Îoc +( +¡ +, ( +chunk_size +/3) + 1)) + +356  +XPBD_SYSTEM_FAILURE +; + +362  +Í + = +l¡¬t +;†°< +l¡Ý +;†p++) { + +363  +lv + = * +Í +; + +364  +lv +) { + +366  +¡©e +) { + +367  +ST_LEADSPACE +: + +368  +ST_DIGITS_TRAILSPACE +: + +369  +ST_HEXDIGITS_TRAILSPACE +: + +370  +ST_SKIPSPHEX +: + +372  +ST_DIGITS +: + +373 +dec_v®ue_’d + = +Í +; + +374 +¡©e + = +ST_DIGITS_TRAILSPACE +; + +376  +ST_HEXCOLON +: + +377 +¡©e + = +ST_HEXDIGITS_TRAILSPACE +; + +384 if( +¡©e + =ð +ST_LEADSPACE +) { + +385 +dec_v®ue + = 0; + +386 +dec_v®ue_¡¬t + = +Í +; + +387 +¡©e + = +ST_WAITDIGITS +; + +392 if( +¡©e + =ð +ST_LEADSPACE +) { + +393 +dec_v®ue + = 0; + +394 +dec_v®ue_¡¬t + = +Í +; + +395 +¡©e + = +ST_WAITDIGITS +; + +401  +¡©e +) { + +402  +ST_DIGITS +: ; + +403  +ST_SKIPSPHEX +: + +404  +ST_HEXDIGIT1 +: + +405 +hex_v®ue + = ( +lv + - 0x30) << 4; + +406 +¡©e + = +ST_HEXDIGIT2 +; + +408  +ST_HEXDIGIT2 +: + +409 +hex_v®ue + +ð( +lv + - 0x30); + +410 +¡©e + = +ST_HEXCOLON +; + +411 +¡ +-> +buf +[¡-> +size +++] = ( +ušt8_t +) +hex_v®ue +; + +413  +ST_HEXCOLON +: + +414  +XPBD_BROKEN_ENCODING +; + +415  +ST_LEADSPACE +: + +416 +dec_v®ue + = 0; + +417 +dec_v®ue_¡¬t + = +Í +; + +419  +ST_WAITDIGITS +: + +420 +¡©e + = +ST_DIGITS +; + +427 if( +¡©e + =ð +ST_LEADSPACE +) { + +428 cÚ¡ +a¢_INTEGER_’um_m­_t + * +– +; + +429 +– + = + `INTEGER_m­_’um2v®ue +( + +430 (cÚ¡ +a¢_INTEGER_¥ecifics_t + *) + +431 +td +-> +¥ecifics +, +l¡¬t +, +l¡Ý +); + +432 if( +– +) { + +433 + `ASN_DEBUG +("Found \"%s\" => %ld", + +434 +– +-> +’um_Çme +,ƒl-> +Çt_v®ue +); + +435 +dec_v®ue + = +– +-> +Çt_v®ue +; + +436 +¡©e + = +ST_END_ENUM +; + +437 +Í + = +l¡Ý + - 1; + +440 + `ASN_DEBUG +("Unknown identifier for INTEGER"); + +442  +XPBD_BROKEN_ENCODING +; + +444 if( +¡©e + =ð +ST_HEXCOLON +) { + +446 +¡©e + = +ST_HEXDIGIT1 +; + +448 } if( +¡©e + =ð +ST_DIGITS +) { + +453 + `ASN_DEBUG +("INTEGER„e-evaluate‡s hex form"); + +454 +¡©e + = +ST_SKIPSPHEX +; + +455 +dec_v®ue_¡¬t + = 0; + +456 +Í + = +l¡¬t + - 1; + +459 + `ASN_DEBUG +("¡©%d‡ˆ%ld", +¡©e +, ()( +Í + - +l¡¬t +)); + +465  +¡©e +) { + +466  +ST_SKIPSPHEX +: + +467  +ST_LEADSPACE +: + +468  +ST_HEXDIGIT1 +: + +469 +hex_v®ue + = +lv + - ((lv < 0x61) ? 0x41 : 0x61); + +470 +hex_v®ue + += 10; + +471 +hex_v®ue + <<= 4; + +472 +¡©e + = +ST_HEXDIGIT2 +; + +474  +ST_HEXDIGIT2 +: + +475 +hex_v®ue + +ð +lv + - ((lv < 0x61) ? 0x41 : 0x61); + +476 +hex_v®ue + += 10; + +477 +¡ +-> +buf +[¡-> +size +++] = ( +ušt8_t +) +hex_v®ue +; + +478 +¡©e + = +ST_HEXCOLON +; + +480  +ST_DIGITS +: + +481 + `ASN_DEBUG +("INTEGER„e-evaluate‡s hex form"); + +482 +¡©e + = +ST_SKIPSPHEX +; + +483 +dec_v®ue_¡¬t + = 0; + +484 +Í + = +l¡¬t + - 1; + +493 + `ASN_DEBUG +("INTEGER :: Found‚on-numeric 0x%2x‡t %ld", + +494 +lv +, ()( +Í + - +l¡¬t +)); + +495 +¡©e + = +ST_UNEXPECTED +; + +499  +¡©e +) { + +500  +ST_END_ENUM +: + +503  +ST_DIGITS +: + +504 +dec_v®ue_’d + = +l¡Ý +; + +506  +ST_DIGITS_TRAILSPACE +: + +508  + `a¢_¡¹oimax_lim +( +dec_v®ue_¡¬t +, & +dec_v®ue_’d +, & +dec_v®ue +)) { + +509  +ASN_STRTOX_OK +: + +510 if( +¥ecs + && s³cs-> +f›ld_unsigÃd + && ( +uštmax_t +è +dec_v®ue + <ð +ULONG_MAX +) { + +512 } if( +dec_v®ue + >ð +LONG_MIN + && dec_v®u<ð +LONG_MAX +) { + +519 + `ASN_DEBUG +("INTEGERƒxceeds†ong„ange"); + +522  +ASN_STRTOX_ERROR_RANGE +: + +523 + `ASN_DEBUG +("INTEGER decod% h™„ªglim™", +td +-> +Çme +); + +524  +XPBD_DECODER_LIMIT +; + +525  +ASN_STRTOX_ERROR_INVAL +: + +526  +ASN_STRTOX_EXPECT_MORE +: + +527  +ASN_STRTOX_EXTRA_DATA +: + +528  +XPBD_BROKEN_ENCODING +; + +531  +ST_HEXCOLON +: + +532  +ST_HEXDIGITS_TRAILSPACE +: + +533 +¡ +-> +buf +[¡-> +size +] = 0; + +534  +XPBD_BODY_CONSUMED +; + +535  +ST_HEXDIGIT1 +: + +536  +ST_HEXDIGIT2 +: + +537  +ST_SKIPSPHEX +: + +538  +XPBD_BROKEN_ENCODING +; + +539  +ST_LEADSPACE +: + +541  +XPBD_NOT_BODY_IGNORE +; + +542  +ST_WAITDIGITS +: + +543  +ST_UNEXPECTED +: + +544 + `ASN_DEBUG +("INTEGER: NØu£fuÈdig™ (¡©%d)", +¡©e +); + +545  +XPBD_BROKEN_ENCODING +; + +552 if( + `a¢_imax2INTEGER +( +¡ +, +dec_v®ue +)) { + +553 + `ASN_DEBUG +("INTEGER decod% cÚv”siÚ fažed", +td +-> +Çme +); + +554  +XPBD_SYSTEM_FAILURE +; + +557  +XPBD_BODY_CONSUMED +; + +558 + } +} + +560 +a¢_dec_rv®_t + + +561 + $INTEGER_decode_x” +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +562 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¥Œ +, + +563 cÚ¡ * +Ýt_mÇme +, cÚ¡ * +buf_±r +, +size_t + +size +) { + +564  + `x”_decode_´im™ive +( +Ýt_codec_ùx +, +td +, + +565 +¥Œ +, ( +INTEGER_t +), +Ýt_mÇme +, + +566 +buf_±r +, +size +, +INTEGER__x”_body_decode +); + +567 + } +} + +569 +a¢_’c_rv®_t + + +570 + $INTEGER_’code_x” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +571  +žev– +, +x”_’cod”_æags_e + +æags +, + +572 +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +573 cÚ¡ +INTEGER_t + * +¡ + = (cÚ¡ INTEGER_ˆ*) +¥Œ +; + +574 +a¢_’c_rv®_t + +” + = {0,0,0}; + +576 () +žev– +; + +577 () +æags +; + +579 if(! +¡ + || !¡-> +buf +) + +580 +ASN__ENCODE_FAILED +; + +582 +” +. +’coded + = + `INTEGER__dump +( +td +, +¡ +, +cb +, +­p_key +, 1); + +583 if( +” +. +’coded + < 0è +ASN__ENCODE_FAILED +; + +585 + `ASN__ENCODED_OK +( +” +); + +586 + } +} + +588 #iâdef +ASN_DISABLE_PER_SUPPORT + + +590 +a¢_dec_rv®_t + + +591 + $INTEGER_decode_u³r +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +592 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +593 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, ** +¥Œ +, + +594 +a¢_³r_d©a_t + * +pd +) { + +595 cÚ¡ +a¢_INTEGER_¥ecifics_t + * +¥ecs + = + +596 (cÚ¡ +a¢_INTEGER_¥ecifics_t + *) +td +-> +¥ecifics +; + +597 +a¢_dec_rv®_t + +rv® + = { +RC_OK +, 0 }; + +598 +INTEGER_t + * +¡ + = (INTEGER_ˆ*)* +¥Œ +; + +599 cÚ¡ +a¢_³r_cÚ¡¿št_t + * +ù +; + +600  +»³© +; + +602 () +Ýt_codec_ùx +; + +604 if(! +¡ +) { + +605 +¡ + = ( +INTEGER_t + *)(* +¥Œ + = + `CALLOC +(1, (*st))); + +606 if(! +¡ +è +ASN__DECODE_FAILED +; + +609 if(! +cÚ¡¿šts +ècÚ¡¿št ð +td +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +; + +610 +ù + = +cÚ¡¿šts + ? &cÚ¡¿šts-> +v®ue + : 0; + +612 if( +ù + && ct-> +æags + & +APC_EXTENSIBLE +) { + +613  +šext + = + `³r_g‘_ãw_b™s +( +pd +, 1); + +614 if( +šext + < 0è +ASN__DECODE_STARVED +; + +615 if( +šext +è +ù + = 0; + +618 + `FREEMEM +( +¡ +-> +buf +); + +619 +¡ +-> +buf + = 0; + +620 +¡ +-> +size + = 0; + +621 if( +ù +) { + +622 if( +ù +-> +æags + & +APC_SEMI_CONSTRAINED +) { + +623 +¡ +-> +buf + = ( +ušt8_t + *) + `CALLOC +(1, 2); + +624 if(! +¡ +-> +buf +è +ASN__DECODE_FAILED +; + +625 +¡ +-> +size + = 1; + +626 } if( +ù +-> +æags + & +APC_CONSTRAINED + && ct-> +¿nge_b™s + >= 0) { + +627 +size_t + +size + = ( +ù +-> +¿nge_b™s + + 7) >> 3; + +628 +¡ +-> +buf + = ( +ušt8_t + *) + `MALLOC +(1 + +size + + 1); + +629 if(! +¡ +-> +buf +è +ASN__DECODE_FAILED +; + +630 +¡ +-> +size + = size; + +635 if( +ù + && ct-> +æags + !ð +APC_UNCONSTRAINED +) { + +637 + `ASN_DEBUG +("IÁeg” w™h„ªg%d b™s", +ù +-> +¿nge_b™s +); + +638 if( +ù +-> +¿nge_b™s + >= 0) { + +639 if(( +size_t +) +ù +-> +¿nge_b™s + > 8 * ()) + +640 +ASN__DECODE_FAILED +; + +642 if( +¥ecs + && s³cs-> +f›ld_unsigÃd +) { + +643  +uv®ue + = 0; + +644 if( + `u³r_g‘_cÚ¡¿šed_whÞe_numb” +( +pd +, + +645 & +uv®ue +, +ù +-> +¿nge_b™s +)) + +646 +ASN__DECODE_STARVED +; + +647 + `ASN_DEBUG +("Got value %lu +†ow %ld", + +648 +uv®ue +, +ù +-> +low”_bound +); + +649 +uv®ue + +ð +ù +-> +low”_bound +; + +650 if( + `a¢_ulÚg2INTEGER +( +¡ +, +uv®ue +)) + +651 +ASN__DECODE_FAILED +; + +653  +uv®ue + = 0; + +654  +sv®ue +; + +655 if( + `u³r_g‘_cÚ¡¿šed_whÞe_numb” +( +pd +, + +656 & +uv®ue +, +ù +-> +¿nge_b™s +)) + +657 +ASN__DECODE_STARVED +; + +658 + `ASN_DEBUG +("Got value %lu +†ow %ld", + +659 +uv®ue +, +ù +-> +low”_bound +); + +660 if( + `³r_lÚg_¿nge_uÄeba£ +( +uv®ue +, +ù +-> +low”_bound +, + +661 +ù +-> +uµ”_bound +, & +sv®ue +) + +662 || + `a¢_lÚg2INTEGER +( +¡ +, +sv®ue +)) { + +663 +ASN__DECODE_FAILED +; + +666  +rv® +; + +669 + `ASN_DEBUG +("Decodšg uncÚ¡¿šed iÁeg” %s", +td +-> +Çme +); + +674 +ssize_t + +Ën + = 0; + +675 * +p + = +NULL +; + +676  +»t + = 0; + +679 +Ën + = + `u³r_g‘_Ëngth +( +pd +, -1, 0, & +»³© +); + +680 if( +Ën + < 0è +ASN__DECODE_STARVED +; + +682 +p + = + `REALLOC +( +¡ +-> +buf +, st-> +size + + +Ën + + 1); + +683 if(! +p +è +ASN__DECODE_FAILED +; + +684 +¡ +-> +buf + = ( +ušt8_t + *) +p +; + +686 +»t + = + `³r_g‘_mªy_b™s +( +pd +, & +¡ +-> +buf +[¡-> +size +], 0, 8 * +Ën +); + +687 if( +»t + < 0è +ASN__DECODE_STARVED +; + +688 +¡ +-> +size + +ð +Ën +; + +689 }  +»³© +); + +690 +¡ +-> +buf +[¡-> +size +] = 0; + +693 if( +ù + && ct-> +low”_bound +) { + +697  +v®ue + = 0; + +698 if( + `a¢_INTEGER2lÚg +( +¡ +, & +v®ue +)) + +699 +ASN__DECODE_FAILED +; + +700 if( + `a¢_imax2INTEGER +( +¡ +, +v®ue + + +ù +-> +low”_bound +)) + +701 +ASN__DECODE_FAILED +; + +704  +rv® +; + +705 + } +} + +707 +a¢_’c_rv®_t + + +708 + $INTEGER_’code_u³r +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +709 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, cÚ¡ * +¥Œ +, + +710 +a¢_³r_ou_t + * +po +) { + +711 cÚ¡ +a¢_INTEGER_¥ecifics_t + * +¥ecs + = + +712 (cÚ¡ +a¢_INTEGER_¥ecifics_t + *) +td +-> +¥ecifics +; + +713 +a¢_’c_rv®_t + +” + = {0,0,0}; + +714 cÚ¡ +INTEGER_t + * +¡ + = (cÚ¡ INTEGER_ˆ*) +¥Œ +; + +715 cÚ¡ +ušt8_t + * +buf +; + +716 cÚ¡ +ušt8_t + * +’d +; + +717 cÚ¡ +a¢_³r_cÚ¡¿št_t + * +ù +; + +718  +v®ue + = 0; + +720 if(! +¡ + || st-> +size + =ð0è +ASN__ENCODE_FAILED +; + +722 if(! +cÚ¡¿šts +ècÚ¡¿št ð +td +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +; + +723 +ù + = +cÚ¡¿šts + ? &cÚ¡¿šts-> +v®ue + : 0; + +725 +” +. +’coded + = 0; + +727 if( +ù +) { + +728  +šext + = 0; + +729 if( +¥ecs + && s³cs-> +f›ld_unsigÃd +) { + +730  +uv® +; + +731 if( + `a¢_INTEGER2ulÚg +( +¡ +, & +uv® +)) + +732 +ASN__ENCODE_FAILED +; + +734 if( +ù +-> +æags + & +APC_SEMI_CONSTRAINED +) { + +735 if( +uv® + < () +ù +-> +low”_bound +) + +736 +šext + = 1; + +737 } if( +ù +-> +¿nge_b™s + >= 0) { + +738 if( +uv® + < () +ù +-> +low”_bound + + +739 || +uv® + > () +ù +-> +uµ”_bound +) + +740 +šext + = 1; + +742 + `ASN_DEBUG +("V®u%lu (%02x/%" +ASN_PRI_SIZE + ")†b %lu ub %lu %s", + +743 +uv® +, +¡ +-> +buf +[0], st-> +size +, + +744 +ù +-> +low”_bound +, ct-> +uµ”_bound +, + +745 +šext + ? "ext" : "fix"); + +746 +v®ue + = +uv® +; + +748 if( + `a¢_INTEGER2lÚg +( +¡ +, & +v®ue +)) + +749 +ASN__ENCODE_FAILED +; + +751 if( +ù +-> +æags + & +APC_SEMI_CONSTRAINED +) { + +752 if( +v®ue + < +ù +-> +low”_bound +) + +753 +šext + = 1; + +754 } if( +ù +-> +¿nge_b™s + >= 0) { + +755 if( +v®ue + < +ù +-> +low”_bound + + +756 || +v®ue + > +ù +-> +uµ”_bound +) + +757 +šext + = 1; + +759 + `ASN_DEBUG +("V®u%ld (%02x/%" +ASN_PRI_SIZE + ")†b %ld ub %ld %s", + +760 +v®ue +, +¡ +-> +buf +[0], st-> +size +, + +761 +ù +-> +low”_bound +, ct-> +uµ”_bound +, + +762 +šext + ? "ext" : "fix"); + +764 if( +ù +-> +æags + & +APC_EXTENSIBLE +) { + +765 if( + `³r_put_ãw_b™s +( +po +, +šext +, 1)) + +766 +ASN__ENCODE_FAILED +; + +767 if( +šext +è +ù + = 0; + +768 } if( +šext +) { + +769 +ASN__ENCODE_FAILED +; + +775 if( +ù + && ct-> +¿nge_b™s + >= 0) { + +776  +v +; + +778 + `ASN_DEBUG +("Encoding integer %ld (%lu) with„ange %d bits", + +779 +v®ue +, v®u- +ù +-> +low”_bound +, ct-> +¿nge_b™s +); + +780 if( +¥ecs + && s³cs-> +f›ld_unsigÃd +) { + +781 iàÐ(() +ù +-> +low”_bound + > ()(ù-> +uµ”_bound +) + +782 || (() +v®ue + < () +ù +-> +low”_bound +)) + +783 || (() +v®ue + > () +ù +-> +uµ”_bound +) + +785 + `ASN_DEBUG +("Value %luo-be-encoded is outsidehe bounds [%lu, %lu]!", + +786 +v®ue +, +ù +-> +low”_bound +, ct-> +uµ”_bound +); + +787 +ASN__ENCODE_FAILED +; + +789 +v + = () +v®ue + - () +ù +-> +low”_bound +; + +791 if( + `³r_lÚg_¿nge_»ba£ +( +v®ue +, +ù +-> +low”_bound +, ct-> +uµ”_bound +, & +v +)) { + +792 +ASN__ENCODE_FAILED +; + +795 if( + `u³r_put_cÚ¡¿šed_whÞe_numb”_u +( +po +, +v +, +ù +-> +¿nge_b™s +)) + +796 +ASN__ENCODE_FAILED +; + +797 + `ASN__ENCODED_OK +( +” +); + +800 if( +ù + && ct-> +low”_bound +) { + +801 + `ASN_DEBUG +("Adju¡†ow” boundØ%ld", +ù +-> +low”_bound +); + +803 +ASN__ENCODE_FAILED +; + +806  +buf + = +¡ +->buf, +’d + = st->buà+ st-> +size +; buf <ƒnd;) { + +807  +Ãed_eom + = 0; + +808 +ssize_t + +mayEncode + = + `u³r_put_Ëngth +( +po +, +’d + - +buf +, & +Ãed_eom +); + +809 if( +mayEncode + < 0) + +810 +ASN__ENCODE_FAILED +; + +811 if( + `³r_put_mªy_b™s +( +po +, +buf +, 8 * +mayEncode +)) + +812 +ASN__ENCODE_FAILED +; + +813 +buf + +ð +mayEncode +; + +814 if( +Ãed_eom + && + `u³r_put_Ëngth +( +po +, 0, 0)è +ASN__ENCODE_FAILED +; + +817 + `ASN__ENCODED_OK +( +” +); + +818 + } +} + +820 +a¢_dec_rv®_t + + +821 + $INTEGER_decode_­” +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +822 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +823 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, ** +¥Œ +, +a¢_³r_d©a_t + * +pd +) { + +824 cÚ¡ +a¢_INTEGER_¥ecifics_t + * +¥ecs + = (cÚ¡‡¢_INTEGER_¥ecifics_ˆ*) +td +-> +¥ecifics +; + +825 +a¢_dec_rv®_t + +rv® + = { +RC_OK +, 0 }; + +826 +INTEGER_t + * +¡ + = (INTEGER_ˆ*)* +¥Œ +; + +827 cÚ¡ +a¢_³r_cÚ¡¿št_t + * +ù +; + +828  +»³© +; + +830 () +Ýt_codec_ùx +; + +832 if(! +¡ +) { + +833 +¡ + = ( +INTEGER_t + *)(* +¥Œ + = + `CALLOC +(1, (*st))); + +834 if(! +¡ +è +ASN__DECODE_FAILED +; + +837 if(! +cÚ¡¿šts +ècÚ¡¿št ð +td +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +; + +838 +ù + = +cÚ¡¿šts + ? &cÚ¡¿šts-> +v®ue + : 0; + +840 if( +ù + && ct-> +æags + & +APC_EXTENSIBLE +) { + +841  +šext + = + `³r_g‘_ãw_b™s +( +pd +, 1); + +842 if( +šext + < 0è +ASN__DECODE_STARVED +; + +843 if( +šext +è +ù + = 0; + +846 + `FREEMEM +( +¡ +-> +buf +); + +847 +¡ +-> +buf + = 0; + +848 +¡ +-> +size + = 0; + +849 if( +ù +) { + +850 if( +ù +-> +æags + & +APC_SEMI_CONSTRAINED +) { + +851 +¡ +-> +buf + = ( +ušt8_t + *) + `CALLOC +(1, 2); + +852 if(! +¡ +-> +buf +è +ASN__DECODE_FAILED +; + +853 +¡ +-> +size + = 1; + +854 } if( +ù +-> +æags + & +APC_CONSTRAINED + && ct-> +¿nge_b™s + >= 0) { + +855 +size_t + +size + = ( +ù +-> +¿nge_b™s + + 7) >> 3; + +856 +¡ +-> +buf + = ( +ušt8_t + *) + `MALLOC +(1 + +size + + 1); + +857 if(! +¡ +-> +buf +è +ASN__DECODE_FAILED +; + +858 +¡ +-> +size + = size; + +863 if( +ù + && ct-> +æags + !ð +APC_UNCONSTRAINED +) { + +865 + `ASN_DEBUG +("IÁeg” w™h„ªg%d b™s", +ù +-> +¿nge_b™s +); + +866 if( +ù +-> +¿nge_b™s + >= 0) { + +867 ià( +ù +-> +¿nge_b™s + > 16) { + +868  +max_¿nge_by‹s + = ( +ù +-> +¿nge_b™s + >> 3) + + +869 ((( +ù +-> +¿nge_b™s + % 8) > 0) ? 1 : 0); + +870  +Ëngth + = 0, +i +; + +871  +v®ue + = 0; + +873  +i + = 1; ; i++) { + +874  +uµ” + = 1 << +i +; + +875 ià( +uµ” + >ð +max_¿nge_by‹s +) + +878 + `ASN_DEBUG +("Cªƒncod%d (%d by‹sèš %d b™s", +ù +-> +¿nge_b™s +, + +879 +max_¿nge_by‹s +, +i +); + +881 ià(( +Ëngth + = + `³r_g‘_ãw_b™s +( +pd +, +i +)) < 0) + +882 +ASN__DECODE_FAILED +; + +885 +Ëngth + += 1; + +886 + `ASN_DEBUG +("Gن’gth %d", +Ëngth +); + +887 ià( + `­”_g‘_®ign +( +pd +) != 0) + +888 +ASN__DECODE_FAILED +; + +889  +Ëngth +--) { + +890  +buf + = + `³r_g‘_ãw_b™s +( +pd +, 8); + +891 ià( +buf + < 0) + +892 +ASN__DECODE_FAILED +; + +893 +v®ue + +ð((() +buf +è<< (8 * +Ëngth +)); + +896 +v®ue + +ð +ù +-> +low”_bound +; + +897 if(( +¥ecs + && s³cs-> +f›ld_unsigÃd +) + +898 ? + `a¢_ušt642INTEGER +( +¡ +, () +v®ue +) + +899 : + `a¢_št642INTEGER +( +¡ +, +v®ue +)) + +900 +ASN__DECODE_FAILED +; + +901 + `ASN_DEBUG +("Got value %ld +†ow %ld", + +902 +v®ue +, +ù +-> +low”_bound +); + +904  +v®ue + = 0; + +905 ià( +ù +-> +¿nge_b™s + < 8) { + +906 +v®ue + = + `³r_g‘_ãw_b™s +( +pd +, +ù +-> +¿nge_b™s +); + +907 if( +v®ue + < 0è +ASN__DECODE_STARVED +; + +908 } ià( +ù +-> +¿nge_b™s + == 8) { + +909 ià( + `­”_g‘_®ign +( +pd +) < 0) + +910 +ASN__DECODE_FAILED +; + +911 +v®ue + = + `³r_g‘_ãw_b™s +( +pd +, +ù +-> +¿nge_b™s +); + +912 if( +v®ue + < 0è +ASN__DECODE_STARVED +; + +915 ià( + `­”_g‘_®ign +( +pd +) < 0) + +916 +ASN__DECODE_FAILED +; + +917 +v®ue + = + `³r_g‘_ãw_b™s +( +pd +, 16); + +918 if( +v®ue + < 0è +ASN__DECODE_STARVED +; + +920 +v®ue + +ð +ù +-> +low”_bound +; + +921 if(( +¥ecs + && s³cs-> +f›ld_unsigÃd +) + +922 ? + `a¢_ulÚg2INTEGER +( +¡ +, +v®ue +) + +923 : + `a¢_lÚg2INTEGER +( +¡ +, +v®ue +)) + +924 +ASN__DECODE_FAILED +; + +925 + `ASN_DEBUG +("Got value %ld +†ow %ld", + +926 +v®ue +, +ù +-> +low”_bound +); + +928  +rv® +; + +930 +ASN__DECODE_FAILED +; + +933 + `ASN_DEBUG +("Decodšg uncÚ¡¿šed iÁeg” %s", +td +-> +Çme +); + +938 +ssize_t + +Ën +; + +939 * +p +; + +940  +»t +; + +943 +Ën + = + `­”_g‘_Ëngth +( +pd +, -1, -1, & +»³© +); + +944 if( +Ën + < 0è +ASN__DECODE_STARVED +; + +946 +p + = + `REALLOC +( +¡ +-> +buf +, st-> +size + + +Ën + + 1); + +947 if(! +p +è +ASN__DECODE_FAILED +; + +948 +¡ +-> +buf + = ( +ušt8_t + *) +p +; + +950 +»t + = + `³r_g‘_mªy_b™s +( +pd +, & +¡ +-> +buf +[¡-> +size +], 0, 8 * +Ën +); + +951 if( +»t + < 0è +ASN__DECODE_STARVED +; + +952 +¡ +-> +size + +ð +Ën +; + +953 }  +»³© +); + +954 +¡ +-> +buf +[¡-> +size +] = 0; + +957 if( +ù + && ct-> +low”_bound +) { + +961  +v®ue +; + +962 if( + `a¢_INTEGER2lÚg +( +¡ +, & +v®ue +)) + +963 +ASN__DECODE_FAILED +; + +964 if( + `a¢_lÚg2INTEGER +( +¡ +, +v®ue + + +ù +-> +low”_bound +)) + +965 +ASN__DECODE_FAILED +; + +968  +rv® +; + +969 + } +} + +971 +a¢_’c_rv®_t + + +972 + $INTEGER_’code_­” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +973 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +974 cÚ¡ * +¥Œ +, +a¢_³r_ou_t + * +po +) { + +975 cÚ¡ +a¢_INTEGER_¥ecifics_t + * +¥ecs + = (cÚ¡‡¢_INTEGER_¥ecifics_ˆ*) +td +-> +¥ecifics +; + +976 +a¢_’c_rv®_t + +” + = {0,0,0}; + +977 cÚ¡ +INTEGER_t + * +¡ + = (cÚ¡ INTEGER_ˆ*) +¥Œ +; + +978 cÚ¡ +ušt8_t + * +buf +; + +979 cÚ¡ +ušt8_t + * +’d +; + +980 cÚ¡ +a¢_³r_cÚ¡¿št_t + * +ù +; + +981  +v®ue + = 0; + +983 if(! +¡ + || st-> +size + =ð0è +ASN__ENCODE_FAILED +; + +985 if(! +cÚ¡¿šts +ècÚ¡¿št ð +td +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +; + +986 +ù + = +cÚ¡¿šts + ? &cÚ¡¿šts-> +v®ue + : 0; + +988 +” +. +’coded + = 0; + +990 if( +ù +) { + +991  +šext + = 0; + +992 if( +¥ecs + && s³cs-> +f›ld_unsigÃd +) { + +993  +uv® +; + +994 if( + `a¢_INTEGER2ulÚg +( +¡ +, & +uv® +)) + +995 +ASN__ENCODE_FAILED +; + +997 if( +ù +-> +æags + & +APC_SEMI_CONSTRAINED +) { + +998 if( +uv® + < () +ù +-> +low”_bound +) + +999 +šext + = 1; + +1000 } if( +ù +-> +¿nge_b™s + >= 0) { + +1001 if( +uv® + < () +ù +-> +low”_bound + + +1002 || +uv® + > () +ù +-> +uµ”_bound +) + +1003 +šext + = 1; + +1005 + `ASN_DEBUG +("Value %lu (%02x/%lu)†b %ld ub %ld %s", + +1006 +uv® +, +¡ +-> +buf +[0], st-> +size +, + +1007 +ù +-> +low”_bound +, ct-> +uµ”_bound +, + +1008 +šext + ? "ext" : "fix"); + +1009 +v®ue + = +uv® +; + +1011 if( + `a¢_INTEGER2lÚg +( +¡ +, & +v®ue +)è +ASN__ENCODE_FAILED +; + +1013 if( +ù +-> +æags + & +APC_SEMI_CONSTRAINED +) { + +1014 if( +v®ue + < +ù +-> +low”_bound +) + +1015 +šext + = 1; + +1016 } if( +ù +-> +¿nge_b™s + >= 0) { + +1017 if( +v®ue + < +ù +-> +low”_bound + + +1018 || +v®ue + > +ù +-> +uµ”_bound +) + +1019 +šext + = 1; + +1021 + `ASN_DEBUG +("Value %lu (%02x/%lu)†b %ld ub %ld %s", + +1022 +v®ue +, +¡ +-> +buf +[0], st-> +size +, + +1023 +ù +-> +low”_bound +, ct-> +uµ”_bound +, + +1024 +šext + ? "ext" : "fix"); + +1026 if( +ù +-> +æags + & +APC_EXTENSIBLE +) { + +1027 if( + `³r_put_ãw_b™s +( +po +, +šext +, 1)) + +1028 +ASN__ENCODE_FAILED +; + +1029 if( +šext +è +ù + = 0; + +1030 } if( +šext +) { + +1031 +ASN__ENCODE_FAILED +; + +1036 if( +ù + && ct-> +¿nge_b™s + >= 0) { + +1037  +v +; + +1040 + `ASN_DEBUG +("Encoding integer %ld (%lu) with„ange %d bits", + +1041 +v®ue +, v®u- +ù +-> +low”_bound +, ct-> +¿nge_b™s +); + +1043 +v + = +v®ue + - +ù +-> +low”_bound +; + +1046 ià( +ù +-> +¿nge_b™s + < 8) { + +1047 if( + `³r_put_ãw_b™s +( +po +, 0x00 | +v +, +ù +-> +¿nge_b™s +)) + +1048 +ASN__ENCODE_FAILED +; + +1049 } ià( +ù +-> +¿nge_b™s + == 8) { + +1050 if( + `­”_put_®ign +( +po +) < 0) + +1051 +ASN__ENCODE_FAILED +; + +1052 if( + `³r_put_ãw_b™s +( +po +, 0x00 | +v +, +ù +-> +¿nge_b™s +)) + +1053 +ASN__ENCODE_FAILED +; + +1054 } ià( +ù +-> +¿nge_b™s + <= 16) { + +1056 if( + `­”_put_®ign +( +po +) < 0) + +1057 +ASN__ENCODE_FAILED +; + +1058 if( + `³r_put_ãw_b™s +( +po +, 0x0000 | +v +, + +1060 +ASN__ENCODE_FAILED +; + +1063 +št64_t + +v64 + = +v +; + +1064  +i +, +j +; + +1065  +max_¿nge_by‹s + = ( +ù +-> +¿nge_b™s + >> 3) + + +1066 ((( +ù +-> +¿nge_b™s + % 8) > 0) ? 1 : 0); + +1068  +i + = 1; ; i++) { + +1069  +uµ” + = 1 << +i +; + +1070 ià( +uµ” + >ð +max_¿nge_by‹s +) + +1074  +j + = ( +št64_t +) -1; j != 0; j--) { + +1075 +št64_t + +v® +; + +1076 +v® + = +v64 + >> ( +j + * 8); + +1077 ià( +v® + != 0) + +1082 ià( + `³r_put_ãw_b™s +( +po +, +j +, +i +)) + +1083 +ASN__ENCODE_FAILED +; + +1086 ià( + `­”_put_®ign +( +po +) < 0) + +1087 +ASN__ENCODE_FAILED +; + +1089  +i + = 0; i <ð +j +; i++) { + +1090 if( + `³r_put_ãw_b™s +( +po +, ( +v64 + >> (8 * ( +j + - +i +))) & 0xff, 8)) + +1091 +ASN__ENCODE_FAILED +; + +1094 + `ASN__ENCODED_OK +( +” +); + +1097 if( +ù + && ct-> +low”_bound +) { + +1098 + `ASN_DEBUG +("Adju¡†ow” boundØ%ld", +ù +-> +low”_bound +); + +1100 +ASN__ENCODE_FAILED +; + +1103  +buf + = +¡ +->buf, +’d + = st->buà+ st-> +size +; buf <ƒnd;) { + +1104 +ssize_t + +mayEncode + = + `­”_put_Ëngth +( +po +, -1, +’d + - +buf +); + +1105 if( +mayEncode + < 0) + +1106 +ASN__ENCODE_FAILED +; + +1107 if( + `³r_put_mªy_b™s +( +po +, +buf +, 8 * +mayEncode +)) + +1108 +ASN__ENCODE_FAILED +; + +1109 +buf + +ð +mayEncode +; + +1112 + `ASN__ENCODED_OK +( +” +); + +1113 + } +} + +1117  +štmax_t + + +1118 + $a¢__š‹g”_cÚv”t +(cÚ¡ +ušt8_t + * +b +, cÚ¡ ušt8_ˆ* +’d +) { + +1119 +uštmax_t + +v®ue +; + +1123 if((* +b + >> 7)) { + +1124 +v®ue + = ( +uštmax_t +)(-1); + +1126 +v®ue + = 0; + +1130 ; +b + < +’d +; b++) { + +1131 +v®ue + = (v®u<< 8è| * +b +; + +1134  +v®ue +; + +1135 + } +} + +1138 + $a¢_INTEGER2imax +(cÚ¡ +INTEGER_t + * +Œ +, +štmax_t + * +͌ +) { + +1139 +ušt8_t + * +b +, * +’d +; + +1140 +size_t + +size +; + +1143 if(! +Œ + || !Œ-> +buf + || ! +͌ +) { + +1144 +”ºo + = +EINVAL +; + +1149 +b + = +Œ +-> +buf +; + +1150 +size + = +Œ +->size; + +1151 +’d + = +b + + +size +; + +1153 if( +size + > ( +štmax_t +)) { + +1154 +ušt8_t + * +’d1 + = +’d + - 1; + +1162 ; +b + < +’d1 +; b++) { + +1163 * +b +) { + +1164 0x00: if(( +b +[1] & 0x80) == 0) ; ; + +1165 0xff: if(( +b +[1] & 0x80) != 0) ; ; + +1170 +size + = +’d + - +b +; + +1171 if( +size + > ( +štmax_t +)) { + +1173 +”ºo + = +ERANGE +; + +1179 if( +’d + =ð +b +) { + +1180 * +͌ + = 0; + +1184 * +͌ + = + `a¢__š‹g”_cÚv”t +( +b +, +’d +); + +1186 + } +} + +1190 + $a¢_INTEGER2umax +(cÚ¡ +INTEGER_t + * +Œ +, +uštmax_t + * +͌ +) { + +1191 +ušt8_t + * +b +, * +’d +; + +1192 +uštmax_t + +v®ue +; + +1193 +size_t + +size +; + +1195 if(! +Œ + || !Œ-> +buf + || ! +͌ +) { + +1196 +”ºo + = +EINVAL +; + +1200 +b + = +Œ +-> +buf +; + +1201 +size + = +Œ +->size; + +1202 +’d + = +b + + +size +; + +1205 ; +size + > ( +v®ue +); +b +++, size--) { + +1206 if(* +b +) { + +1208 +”ºo + = +ERANGE +; + +1214  +v®ue + = 0; +b + < +’d +; b++) + +1215 +v®ue + = (v®u<< 8è| * +b +; + +1217 * +͌ + = +v®ue +; + +1219 + } +} + +1222 + $a¢_umax2INTEGER +( +INTEGER_t + * +¡ +, +uštmax_t + +v®ue +) { + +1223 +ušt8_t + * +buf +; + +1224 +ušt8_t + * +’d +; + +1225 +ušt8_t + * +b +; + +1226  +shr +; + +1228 if( +v®ue + <ð((~( +uštmax_t +)0) >> 1)) { + +1229  + `a¢_imax2INTEGER +( +¡ +, +v®ue +); + +1232 +buf + = ( +ušt8_t + *) + `MALLOC +(1 + ( +v®ue +)); + +1233 if(! +buf +)  -1; + +1235 +’d + = +buf + + (( +v®ue +) + 1); + +1236 +buf +[0] = 0; + +1237  +b + = +buf + + 1, +shr + = (( +v®ue +è- 1è* 8; b < +’d +; shr -= 8, b++) + +1238 * +b + = ( +ušt8_t +)( +v®ue + >> +shr +); + +1240 if( +¡ +-> +buf +è + `FREEMEM +(st->buf); + +1241 +¡ +-> +buf + = buf; + +1242 +¡ +-> +size + = 1 + ( +v®ue +); + +1245 + } +} + +1248 + $a¢_imax2INTEGER +( +INTEGER_t + * +¡ +, +štmax_t + +v®ue +) { + +1249 +ušt8_t + * +buf +, * +bp +; + +1250 +ušt8_t + * +p +; + +1251 +ušt8_t + * +p¡¬t +; + +1252 +ušt8_t + * +³nd1 +; + +1253  +l™ŽeEndŸn + = 1; + +1254  +add +; + +1256 if(! +¡ +) { + +1257 +”ºo + = +EINVAL +; + +1261 +buf + = ( +ušt8_t + *)(*) + `MALLOC +(( +v®ue +)); + +1262 if(! +buf +)  -1; + +1264 if(*(*)& +l™ŽeEndŸn +) { + +1265 +p¡¬t + = ( +ušt8_t + *)& +v®ue + + (value) - 1; + +1266 +³nd1 + = ( +ušt8_t + *)& +v®ue +; + +1267 +add + = -1; + +1269 +p¡¬t + = ( +ušt8_t + *)& +v®ue +; + +1270 +³nd1 + = +p¡¬t + + ( +v®ue +) - 1; + +1271 +add + = 1; + +1280  +p + = +p¡¬t +;… !ð +³nd1 +;… +ð +add +) { + +1281 * +p +) { + +1282 0x00: if((*( +p ++ +add +) & 0x80) == 0) + +1285 0xff: if((*( +p ++ +add +) & 0x80)) + +1292  +bp + = +buf +, +³nd1 + +ð +add +; +p + !=…end1;… +=‡dd) + +1293 * +bp +++ = * +p +; + +1295 if( +¡ +-> +buf +è + `FREEMEM +(st->buf); + +1296 +¡ +-> +buf + = buf; + +1297 +¡ +-> +size + = +bp + - +buf +; + +1300 + } +} + +1303 + $a¢_INTEGER2lÚg +(cÚ¡ +INTEGER_t + * +Œ +, * +l +) { + +1304 +štmax_t + +v +; + +1305 if( + `a¢_INTEGER2imax +( +Œ +, & +v +) == 0) { + +1306 if( +v + < +LONG_MIN + || v > +LONG_MAX +) { + +1307 +”ºo + = +ERANGE +; + +1310 * +l + = +v +; + +1315 + } +} + +1318 + $a¢_INTEGER2ulÚg +(cÚ¡ +INTEGER_t + * +Œ +, * +l +) { + +1319 +uštmax_t + +v +; + +1320 if( + `a¢_INTEGER2umax +( +Œ +, & +v +) == 0) { + +1321 if( +v + > +ULONG_MAX +) { + +1322 +”ºo + = +ERANGE +; + +1325 * +l + = +v +; + +1330 + } +} + +1333 + $a¢_lÚg2INTEGER +( +INTEGER_t + * +¡ +,  +v®ue +) { + +1334  + `a¢_imax2INTEGER +( +¡ +, +v®ue +); + +1335 + } +} + +1338 + $a¢_ulÚg2INTEGER +( +INTEGER_t + * +¡ +,  +v®ue +) { + +1339  + `a¢_imax2INTEGER +( +¡ +, +v®ue +); + +1340 + } +} + +1344 + $a¢_ušt642INTEGER +( +INTEGER_t + * +¡ +, +ušt64_t + +v®ue +) { + +1345 +ušt8_t + * +buf +; + +1346 +ušt8_t + * +’d +; + +1347 +ušt8_t + * +b +; + +1348  +shr +; + +1350 if( +v®ue + <ð +INT64_MAX +) + +1351  + `a¢_št642INTEGER +( +¡ +, +v®ue +); + +1353 +buf + = ( +ušt8_t + *) + `MALLOC +(1 + ( +v®ue +)); + +1354 if(! +buf +)  -1; + +1356 +’d + = +buf + + (( +v®ue +) + 1); + +1357 +buf +[0] = 0; + +1358  +b + = +buf + + 1, +shr + = (( +v®ue +)-1)*8; b < +’d +; shr -= 8, b++) + +1359 * +b + = ( +ušt8_t +)( +v®ue + >> +shr +); + +1361 if( +¡ +-> +buf +è + `FREEMEM +(st->buf); + +1362 +¡ +-> +buf + = buf; + +1363 +¡ +-> +size + = 1 + ( +v®ue +); + +1366 + } +} + +1369 + $a¢_št642INTEGER +( +INTEGER_t + * +¡ +, +št64_t + +v®ue +) { + +1370 +ušt8_t + * +buf +, * +bp +; + +1371 +ušt8_t + * +p +; + +1372 +ušt8_t + * +p¡¬t +; + +1373 +ušt8_t + * +³nd1 +; + +1374  +l™ŽeEndŸn + = 1; + +1375  +add +; + +1377 if(! +¡ +) { + +1378 +”ºo + = +EINVAL +; + +1382 +buf + = ( +ušt8_t + *) + `MALLOC +(( +v®ue +)); + +1383 if(! +buf +)  -1; + +1385 if(*(*)& +l™ŽeEndŸn +) { + +1386 +p¡¬t + = ( +ušt8_t + *)& +v®ue + + (value) - 1; + +1387 +³nd1 + = ( +ušt8_t + *)& +v®ue +; + +1388 +add + = -1; + +1390 +p¡¬t + = ( +ušt8_t + *)& +v®ue +; + +1391 +³nd1 + = +p¡¬t + + ( +v®ue +) - 1; + +1392 +add + = 1; + +1401  +p + = +p¡¬t +;… !ð +³nd1 +;… +ð +add +) { + +1402 * +p +) { + +1403 0x00: if((*( +p ++ +add +) & 0x80) == 0) + +1406 0xff: if((*( +p ++ +add +) & 0x80)) + +1413  +p¡¬t + = +p +, +bp + = +buf +, +³nd1 + +ð +add +;… !=…end1;… +=‡dd) + +1414 * +bp +++ = * +p +; + +1416 if( +¡ +-> +buf +è + `FREEMEM +(st->buf); + +1417 +¡ +-> +buf + = buf; + +1418 +¡ +-> +size + = +bp + - +buf +; + +1421 + } +} + +1429 +a¢_¡¹ox_»suÉ_e + + +1430 + $a¢_¡¹oimax_lim +(cÚ¡ * +¡r +, cÚ¡ ** +’d +, +štmax_t + * +š +) { + +1431  +sign + = 1; + +1432 +štmax_t + +v®ue +; + +1434  + #ASN1_INTMAX_MAX + ((~( +uštmax_t +)0è>> 1) + + ) + +1435 cÚ¡ +štmax_t + +uµ”_bound¬y + = +ASN1_INTMAX_MAX + / 10; + +1436 +štmax_t + +Ï¡_dig™_max + = +ASN1_INTMAX_MAX + % 10; + +1437 #undeà +ASN1_INTMAX_MAX + + +1439 if( +¡r + >ð* +’d +è +ASN_STRTOX_ERROR_INVAL +; + +1441 * +¡r +) { + +1443 +Ï¡_dig™_max +++; + +1444 +sign + = -1; + +1447 +¡r +++; + +1448 if( +¡r + >ð* +’d +) { + +1449 * +’d + = +¡r +; + +1450  +ASN_STRTOX_EXPECT_MORE +; + +1454  +v®ue + = 0; +¡r + < (* +’d +); str++) { + +1455 * +¡r +) { + +1458  +d + = * +¡r + - '0'; + +1459 if( +v®ue + < +uµ”_bound¬y +) { + +1460 +v®ue + = v®u* 10 + +d +; + +1461 } if( +v®ue + =ð +uµ”_bound¬y +) { + +1462 if( +d + <ð +Ï¡_dig™_max +) { + +1463 if( +sign + > 0) { + +1464 +v®ue + = v®u* 10 + +d +; + +1466 +sign + = 1; + +1467 +v®ue + = -v®u* 10 - +d +; + +1470 * +’d + = +¡r +; + +1471  +ASN_STRTOX_ERROR_RANGE +; + +1474 * +’d + = +¡r +; + +1475  +ASN_STRTOX_ERROR_RANGE +; + +1480 * +’d + = +¡r +; + +1481 * +š + = +sign + * +v®ue +; + +1482  +ASN_STRTOX_EXTRA_DATA +; + +1486 * +’d + = +¡r +; + +1487 * +š + = +sign + * +v®ue +; + +1488  +ASN_STRTOX_OK +; + +1489 + } +} + +1497 +a¢_¡¹ox_»suÉ_e + + +1498 + $a¢_¡¹oumax_lim +(cÚ¡ * +¡r +, cÚ¡ ** +’d +, +uštmax_t + * +uš +) { + +1499 +uštmax_t + +v®ue +; + +1501  + #ASN1_UINTMAX_MAX + ((~( +uštmax_t +)0)) + + ) + +1502 cÚ¡ +uštmax_t + +uµ”_bound¬y + = +ASN1_UINTMAX_MAX + / 10; + +1503 +uštmax_t + +Ï¡_dig™_max + = +ASN1_UINTMAX_MAX + % 10; + +1504 #undeà +ASN1_UINTMAX_MAX + + +1506 if( +¡r + >ð* +’d +è +ASN_STRTOX_ERROR_INVAL +; + +1508 * +¡r +) { + +1510  +ASN_STRTOX_ERROR_INVAL +; + +1512 +¡r +++; + +1513 if( +¡r + >ð* +’d +) { + +1514 * +’d + = +¡r +; + +1515  +ASN_STRTOX_EXPECT_MORE +; + +1519  +v®ue + = 0; +¡r + < (* +’d +); str++) { + +1520 * +¡r +) { + +1523  +d + = * +¡r + - '0'; + +1524 if( +v®ue + < +uµ”_bound¬y +) { + +1525 +v®ue + = v®u* 10 + +d +; + +1526 } if( +v®ue + =ð +uµ”_bound¬y +) { + +1527 if( +d + <ð +Ï¡_dig™_max +) { + +1528 +v®ue + = v®u* 10 + +d +; + +1530 * +’d + = +¡r +; + +1531  +ASN_STRTOX_ERROR_RANGE +; + +1534 * +’d + = +¡r +; + +1535  +ASN_STRTOX_ERROR_RANGE +; + +1540 * +’d + = +¡r +; + +1541 * +uš + = +v®ue +; + +1542  +ASN_STRTOX_EXTRA_DATA +; + +1546 * +’d + = +¡r +; + +1547 * +uš + = +v®ue +; + +1548  +ASN_STRTOX_OK +; + +1549 + } +} + +1551 +a¢_¡¹ox_»suÉ_e + + +1552 + $a¢_¡¹Þ_lim +(cÚ¡ * +¡r +, cÚ¡ ** +’d +, * +Í +) { + +1553 +štmax_t + +v®ue +; + +1554  + `a¢_¡¹oimax_lim +( +¡r +, +’d +, & +v®ue +)) { + +1555  +ASN_STRTOX_ERROR_RANGE +: + +1556  +ASN_STRTOX_ERROR_RANGE +; + +1557  +ASN_STRTOX_ERROR_INVAL +: + +1558  +ASN_STRTOX_ERROR_INVAL +; + +1559  +ASN_STRTOX_EXPECT_MORE +: + +1560  +ASN_STRTOX_EXPECT_MORE +; + +1561  +ASN_STRTOX_OK +: + +1562 if( +v®ue + >ð +LONG_MIN + && v®u<ð +LONG_MAX +) { + +1563 * +Í + = +v®ue +; + +1564  +ASN_STRTOX_OK +; + +1566  +ASN_STRTOX_ERROR_RANGE +; + +1568  +ASN_STRTOX_EXTRA_DATA +: + +1569 if( +v®ue + >ð +LONG_MIN + && v®u<ð +LONG_MAX +) { + +1570 * +Í + = +v®ue +; + +1571  +ASN_STRTOX_EXTRA_DATA +; + +1573  +ASN_STRTOX_ERROR_RANGE +; + +1577 + `as£¹ +(!"Unreachable"); + +1578  +ASN_STRTOX_ERROR_INVAL +; + +1579 + } +} + +1581 +a¢_¡¹ox_»suÉ_e + + +1582 + $a¢_¡¹oul_lim +(cÚ¡ * +¡r +, cÚ¡ ** +’d +, * +uÍ +) { + +1583 +uštmax_t + +v®ue +; + +1584  + `a¢_¡¹oumax_lim +( +¡r +, +’d +, & +v®ue +)) { + +1585  +ASN_STRTOX_ERROR_RANGE +: + +1586  +ASN_STRTOX_ERROR_RANGE +; + +1587  +ASN_STRTOX_ERROR_INVAL +: + +1588  +ASN_STRTOX_ERROR_INVAL +; + +1589  +ASN_STRTOX_EXPECT_MORE +: + +1590  +ASN_STRTOX_EXPECT_MORE +; + +1591  +ASN_STRTOX_OK +: + +1592 if( +v®ue + <ð +ULONG_MAX +) { + +1593 * +uÍ + = +v®ue +; + +1594  +ASN_STRTOX_OK +; + +1596  +ASN_STRTOX_ERROR_RANGE +; + +1598  +ASN_STRTOX_EXTRA_DATA +: + +1599 if( +v®ue + <ð +ULONG_MAX +) { + +1600 * +uÍ + = +v®ue +; + +1601  +ASN_STRTOX_EXTRA_DATA +; + +1603  +ASN_STRTOX_ERROR_RANGE +; + +1607 + `as£¹ +(!"Unreachable"); + +1608  +ASN_STRTOX_ERROR_INVAL +; + +1609 + } +} + +1612 + $INTEGER_com·» +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +­Œ +, + +1613 cÚ¡ * +b±r +) { + +1614 cÚ¡ +INTEGER_t + * +a + = +­Œ +; + +1615 cÚ¡ +INTEGER_t + * +b + = +b±r +; + +1617 () +td +; + +1619 if( +a + && +b +) { + +1620 if( +a +-> +size + && +b +->size) { + +1621  +sign_a + = ( +a +-> +buf +[0] & 0x80) ? -1 : 1; + +1622  +sign_b + = ( +b +-> +buf +[0] & 0x80) ? -1 : 1; + +1624 if( +sign_a + < +sign_b +)  -1; + +1625 if( +sign_a + > +sign_b +)  1; + +1628 if( +a +-> +size + < +b +->size) { + +1629  -1 * +sign_a +; + +1630 } if( +a +-> +size + > +b +->size) { + +1631  1 * +sign_b +; + +1634  +sign_a + * + `memcmp +( +a +-> +buf +, +b +->buf,‡-> +size +); + +1635 } if( +a +-> +size +) { + +1636  +sign + = ( +a +-> +buf +[0] & 0x80) ? -1 : 1; + +1637  (1è* +sign +; + +1638 } if( +b +-> +size +) { + +1639  +sign + = ( +a +-> +buf +[0] & 0x80) ? -1 : 1; + +1640  (-1è* +sign +; + +1644 } if(! +a + && ! +b +) { + +1646 } if(! +a +) { + +1652 + } +} + +1654 +a¢_¿ndom_fžl_»suÉ_t + + +1655 + $INTEGER_¿ndom_fžl +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¥Œ +, + +1656 cÚ¡ +a¢_’codšg_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +1657 +size_t + +max_Ëngth +) { + +1658 cÚ¡ +a¢_INTEGER_¥ecifics_t + * +¥ecs + = + +1659 (cÚ¡ +a¢_INTEGER_¥ecifics_t + *) +td +-> +¥ecifics +; + +1660 +a¢_¿ndom_fžl_»suÉ_t + +»suÉ_ok + = { +ARFILL_OK +, 1}; + +1661 +a¢_¿ndom_fžl_»suÉ_t + +»suÉ_çžed + = { +ARFILL_FAILED +, 0}; + +1662 +a¢_¿ndom_fžl_»suÉ_t + +»suÉ_sk³d + = { +ARFILL_SKIPPED +, 0}; + +1663 +INTEGER_t + * +¡ + = * +¥Œ +; + +1664 cÚ¡ +a¢_INTEGER_’um_m­_t + * +em­ +; + +1665 +size_t + +em­_Ën +; + +1666 +štmax_t + +v®ue +; + +1667  +fšd_šside_m­ +; + +1669 if( +max_Ëngth + =ð0è +»suÉ_sk³d +; + +1671 if( +¡ + =ð +NULL +) { + +1672 +¡ + = ( +INTEGER_t + *) + `CALLOC +(1, (*st)); + +1673 if( +¡ + =ð +NULL +) { + +1674  +»suÉ_çžed +; + +1678 if( +¥ecs +) { + +1679 +em­ + = +¥ecs +-> +v®ue2’um +; + +1680 +em­_Ën + = +¥ecs +-> +m­_couÁ +; + +1681 if( +¥ecs +-> +¡riù_’um”©iÚ +) { + +1682 +fšd_šside_m­ + = +em­_Ën + > 0; + +1684 +fšd_šside_m­ + = +em­_Ën + ? + `a¢_¿ndom_b‘w“n +(0, 1) : 0; + +1687 +em­ + = 0; + +1688 +em­_Ën + = 0; + +1689 +fšd_šside_m­ + = 0; + +1692 if( +fšd_šside_m­ +) { + +1693 + `as£¹ +( +em­_Ën + > 0); + +1694 +v®ue + = +em­ +[ + `a¢_¿ndom_b‘w“n +(0, +em­_Ën + - 1)]. +Çt_v®ue +; + +1696 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +ù +; + +1698 cÚ¡  +v¬ŸÁs +[] = { + +1704 if( +¥ecs + && s³cs-> +f›ld_unsigÃd +) { + +1705 + `as£¹ +( +v¬ŸÁs +[18] == 0); + +1706 +v®ue + = +v¬ŸÁs +[ + `a¢_¿ndom_b‘w“n +( + +1707 18, ( +v¬ŸÁs +) / (variants[0]) - 1)]; + +1709 +v®ue + = +v¬ŸÁs +[ + `a¢_¿ndom_b‘w“n +( + +1710 0, ( +v¬ŸÁs +) / (variants[0]) - 1)]; + +1713 if(! +cÚ¡¿šts +ècÚ¡¿št ð& +td +-> +’codšg_cÚ¡¿šts +; + +1714 +ù + = +cÚ¡¿šts + ? cÚ¡¿šts-> +³r_cÚ¡¿šts + : 0; + +1715 if( +ù + && (ù-> +v®ue +. +æags + & +APC_CONSTRAINED +)) { + +1716 if( +v®ue + < +ù +->v®ue. +low”_bound + || v®u> ct->v®ue. +uµ”_bound +) { + +1717 +v®ue + = + `a¢_¿ndom_b‘w“n +( +ù +->v®ue. +low”_bound +, + +1718 +ù +-> +v®ue +. +uµ”_bound +); + +1723 if( + `a¢_imax2INTEGER +( +¡ +, +v®ue +)) { + +1724 if( +¡ + =ð* +¥Œ +) { + +1725 + `ASN_STRUCT_RESET +(* +td +, +¡ +); + +1727 + `ASN_STRUCT_FREE +(* +td +, +¡ +); + +1729  +»suÉ_çžed +; + +1731 * +¥Œ + = +¡ +; + +1732 +»suÉ_ok +. +Ëngth + = +¡ +-> +size +; + +1733  +»suÉ_ok +; + +1735 + } +} + + @IndexToRFSP.c + +8  + ~"IndexToRFSP.h +" + +11 + $IndexToRFSP_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13  +v®ue +; + +15 if(! +¥Œ +) { + +16 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +18 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +22 +v®ue + = *(cÚ¡ *) +¥Œ +; + +24 if(( +v®ue + >= 1 && value <= 256)) { + +28 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +30 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +33 + } +} + +39  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_IndexToRFSP_cÚ¡r_1 + + gCC_NOTUSED + = { + +40 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 8, 8, 1, 256 } , + +41 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +44 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_IndexToRFSP_gs_1 +[] = { + +45 ( +ASN_TAG_CLASS_UNIVERSAL + | (2 << 2)) + +47 +a¢_TYPE_desütÜ_t + + ga¢_DEF_IndexToRFSP + = { + +50 & +a¢_OP_N©iveIÁeg” +, + +51 +a¢_DEF_IndexToRFSP_gs_1 +, + +52 ( +a¢_DEF_IndexToRFSP_gs_1 +) + +53 /( +a¢_DEF_IndexToRFSP_gs_1 +[0]), + +54 +a¢_DEF_IndexToRFSP_gs_1 +, + +55 ( +a¢_DEF_IndexToRFSP_gs_1 +) + +56 /( +a¢_DEF_IndexToRFSP_gs_1 +[0]), + +57 { 0, & +a¢_PER_ty³_IndexToRFSP_cÚ¡r_1 +, +IndexToRFSP_cÚ¡¿št + }, + + @Interface-MessageID.c + +8  + ~"IÁ”çû-Mes§geID.h +" + +14  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_mes§geTy³_cÚ¡r_3 + + gCC_NOTUSED + = { + +15 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 2, 2, 0, 2 } , + +16 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +19 cÚ¡ +a¢_INTEGER_’um_m­_t + + ga¢_MAP_mes§geTy³_v®ue2’um_3 +[] = { + +25 cÚ¡  + ga¢_MAP_mes§geTy³_’um2v®ue_3 +[] = { + +31 cÚ¡ +a¢_INTEGER_¥ecifics_t + + ga¢_SPC_mes§geTy³_¥ecs_3 + = { + +32 +a¢_MAP_mes§geTy³_v®ue2’um_3 +, + +33 +a¢_MAP_mes§geTy³_’um2v®ue_3 +, + +40 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_mes§geTy³_gs_3 +[] = { + +41 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +42 ( +ASN_TAG_CLASS_UNIVERSAL + | (10 << 2)) + +45 +a¢_TYPE_desütÜ_t + + ga¢_DEF_mes§geTy³_3 + = { + +48 & +a¢_OP_N©iveEnum”©ed +, + +49 +a¢_DEF_mes§geTy³_gs_3 +, + +50 ( +a¢_DEF_mes§geTy³_gs_3 +) + +51 /( +a¢_DEF_mes§geTy³_gs_3 +[0]) - 1, + +52 +a¢_DEF_mes§geTy³_gs_3 +, + +53 ( +a¢_DEF_mes§geTy³_gs_3 +) + +54 /( +a¢_DEF_mes§geTy³_gs_3 +[0]), + +55 { 0, & +a¢_PER_ty³_mes§geTy³_cÚ¡r_3 +, +N©iveEnum”©ed_cÚ¡¿št + }, + +57 & +a¢_SPC_mes§geTy³_¥ecs_3 + + +60  +a¢_TYPE_memb”_t + + ga¢_MBR_IÁ”çû_Mes§geID_1 +[] = { + +61 { +ATF_NOFLAGS +, 0, +off£tof +( +IÁ”çû_Mes§geID +, +š‹rçûProûdu»ID +), + +62 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +64 & +a¢_DEF_N©iveIÁeg” +, + +70 { +ATF_NOFLAGS +, 0, +off£tof +( +IÁ”çû_Mes§geID +, +mes§geTy³ +), + +71 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +73 & +a¢_DEF_mes§geTy³_3 +, + +80 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_IÁ”çû_Mes§geID_gs_1 +[] = { + +81 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +83 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_IÁ”çû_Mes§geID_g2–_1 +[] = { + +84 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +85 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 } + +87  +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_IÁ”çû_Mes§geID_¥ecs_1 + = { + +88 ( +IÁ”çû_Mes§geID +), + +89 +off£tof +( +IÁ”çû_Mes§geID +, +_a¢_ùx +), + +90 +a¢_MAP_IÁ”çû_Mes§geID_g2–_1 +, + +95 +a¢_TYPE_desütÜ_t + + ga¢_DEF_IÁ”çû_Mes§geID + = { + +98 & +a¢_OP_SEQUENCE +, + +99 +a¢_DEF_IÁ”çû_Mes§geID_gs_1 +, + +100 ( +a¢_DEF_IÁ”çû_Mes§geID_gs_1 +) + +101 /( +a¢_DEF_IÁ”çû_Mes§geID_gs_1 +[0]), + +102 +a¢_DEF_IÁ”çû_Mes§geID_gs_1 +, + +103 ( +a¢_DEF_IÁ”çû_Mes§geID_gs_1 +) + +104 /( +a¢_DEF_IÁ”çû_Mes§geID_gs_1 +[0]), + +105 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +106 +a¢_MBR_IÁ”çû_Mes§geID_1 +, + +108 & +a¢_SPC_IÁ”çû_Mes§geID_¥ecs_1 + + + @InterfaceID-E1.c + +8  + ~"IÁ”çûID-E1.h +" + +10 +a¢_TYPE_memb”_t + + ga¢_MBR_IÁ”çûID_E1_1 +[] = { + +11 { +ATF_NOFLAGS +, 0, +off£tof +( +IÁ”çûID_E1 +, +glob®GNB_ID +), + +12 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +14 & +a¢_DEF_Glob®GNB_ID +, + +20 { +ATF_NOFLAGS +, 0, +off£tof +( +IÁ”çûID_E1 +, +gNB_CU_UP_ID +), + +21 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +23 & +a¢_DEF_GNB_CU_UP_ID +, + +30 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_IÁ”çûID_E1_gs_1 +[] = { + +31 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +33 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_IÁ”çûID_E1_g2–_1 +[] = { + +34 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +35 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 } + +37 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_IÁ”çûID_E1_¥ecs_1 + = { + +38 ( +IÁ”çûID_E1 +), + +39 +off£tof +( +IÁ”çûID_E1 +, +_a¢_ùx +), + +40 +a¢_MAP_IÁ”çûID_E1_g2–_1 +, + +45 +a¢_TYPE_desütÜ_t + + ga¢_DEF_IÁ”çûID_E1 + = { + +48 & +a¢_OP_SEQUENCE +, + +49 +a¢_DEF_IÁ”çûID_E1_gs_1 +, + +50 ( +a¢_DEF_IÁ”çûID_E1_gs_1 +) + +51 /( +a¢_DEF_IÁ”çûID_E1_gs_1 +[0]), + +52 +a¢_DEF_IÁ”çûID_E1_gs_1 +, + +53 ( +a¢_DEF_IÁ”çûID_E1_gs_1 +) + +54 /( +a¢_DEF_IÁ”çûID_E1_gs_1 +[0]), + +55 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +56 +a¢_MBR_IÁ”çûID_E1_1 +, + +58 & +a¢_SPC_IÁ”çûID_E1_¥ecs_1 + + + @InterfaceID-F1.c + +8  + ~"IÁ”çûID-F1.h +" + +10 +a¢_TYPE_memb”_t + + ga¢_MBR_IÁ”çûID_F1_1 +[] = { + +11 { +ATF_NOFLAGS +, 0, +off£tof +( +IÁ”çûID_F1 +, +glob®GNB_ID +), + +12 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +14 & +a¢_DEF_Glob®GNB_ID +, + +20 { +ATF_NOFLAGS +, 0, +off£tof +( +IÁ”çûID_F1 +, +gNB_DU_ID +), + +21 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +23 & +a¢_DEF_GNB_DU_ID +, + +30 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_IÁ”çûID_F1_gs_1 +[] = { + +31 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +33 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_IÁ”çûID_F1_g2–_1 +[] = { + +34 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +35 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 } + +37 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_IÁ”çûID_F1_¥ecs_1 + = { + +38 ( +IÁ”çûID_F1 +), + +39 +off£tof +( +IÁ”çûID_F1 +, +_a¢_ùx +), + +40 +a¢_MAP_IÁ”çûID_F1_g2–_1 +, + +45 +a¢_TYPE_desütÜ_t + + ga¢_DEF_IÁ”çûID_F1 + = { + +48 & +a¢_OP_SEQUENCE +, + +49 +a¢_DEF_IÁ”çûID_F1_gs_1 +, + +50 ( +a¢_DEF_IÁ”çûID_F1_gs_1 +) + +51 /( +a¢_DEF_IÁ”çûID_F1_gs_1 +[0]), + +52 +a¢_DEF_IÁ”çûID_F1_gs_1 +, + +53 ( +a¢_DEF_IÁ”çûID_F1_gs_1 +) + +54 /( +a¢_DEF_IÁ”çûID_F1_gs_1 +[0]), + +55 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +56 +a¢_MBR_IÁ”çûID_F1_1 +, + +58 & +a¢_SPC_IÁ”çûID_F1_¥ecs_1 + + + @InterfaceID-NG.c + +8  + ~"IÁ”çûID-NG.h +" + +10 +a¢_TYPE_memb”_t + + ga¢_MBR_IÁ”çûID_NG_1 +[] = { + +11 { +ATF_NOFLAGS +, 0, +off£tof +( +IÁ”çûID_NG +, +guami +), + +12 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +14 & +a¢_DEF_GUAMI +, + +21 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_IÁ”çûID_NG_gs_1 +[] = { + +22 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +24 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_IÁ”çûID_NG_g2–_1 +[] = { + +25 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 } + +27 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_IÁ”çûID_NG_¥ecs_1 + = { + +28 ( +IÁ”çûID_NG +), + +29 +off£tof +( +IÁ”çûID_NG +, +_a¢_ùx +), + +30 +a¢_MAP_IÁ”çûID_NG_g2–_1 +, + +35 +a¢_TYPE_desütÜ_t + + ga¢_DEF_IÁ”çûID_NG + = { + +38 & +a¢_OP_SEQUENCE +, + +39 +a¢_DEF_IÁ”çûID_NG_gs_1 +, + +40 ( +a¢_DEF_IÁ”çûID_NG_gs_1 +) + +41 /( +a¢_DEF_IÁ”çûID_NG_gs_1 +[0]), + +42 +a¢_DEF_IÁ”çûID_NG_gs_1 +, + +43 ( +a¢_DEF_IÁ”çûID_NG_gs_1 +) + +44 /( +a¢_DEF_IÁ”çûID_NG_gs_1 +[0]), + +45 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +46 +a¢_MBR_IÁ”çûID_NG_1 +, + +48 & +a¢_SPC_IÁ”çûID_NG_¥ecs_1 + + + @InterfaceID-S1.c + +8  + ~"IÁ”çûID-S1.h +" + +10 +a¢_TYPE_memb”_t + + ga¢_MBR_IÁ”çûID_S1_1 +[] = { + +11 { +ATF_NOFLAGS +, 0, +off£tof +( +IÁ”çûID_S1 +, +gUMMEI +), + +12 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +14 & +a¢_DEF_GUMMEI +, + +21 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_IÁ”çûID_S1_gs_1 +[] = { + +22 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +24 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_IÁ”çûID_S1_g2–_1 +[] = { + +25 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 } + +27 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_IÁ”çûID_S1_¥ecs_1 + = { + +28 ( +IÁ”çûID_S1 +), + +29 +off£tof +( +IÁ”çûID_S1 +, +_a¢_ùx +), + +30 +a¢_MAP_IÁ”çûID_S1_g2–_1 +, + +35 +a¢_TYPE_desütÜ_t + + ga¢_DEF_IÁ”çûID_S1 + = { + +38 & +a¢_OP_SEQUENCE +, + +39 +a¢_DEF_IÁ”çûID_S1_gs_1 +, + +40 ( +a¢_DEF_IÁ”çûID_S1_gs_1 +) + +41 /( +a¢_DEF_IÁ”çûID_S1_gs_1 +[0]), + +42 +a¢_DEF_IÁ”çûID_S1_gs_1 +, + +43 ( +a¢_DEF_IÁ”çûID_S1_gs_1 +) + +44 /( +a¢_DEF_IÁ”çûID_S1_gs_1 +[0]), + +45 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +46 +a¢_MBR_IÁ”çûID_S1_1 +, + +48 & +a¢_SPC_IÁ”çûID_S1_¥ecs_1 + + + @InterfaceID-W1.c + +8  + ~"IÁ”çûID-W1.h +" + +10 +a¢_TYPE_memb”_t + + ga¢_MBR_IÁ”çûID_W1_1 +[] = { + +11 { +ATF_NOFLAGS +, 0, +off£tof +( +IÁ”çûID_W1 +, +glob®_ng_eNB_ID +), + +12 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +14 & +a¢_DEF_Glob®NgENB_ID +, + +20 { +ATF_NOFLAGS +, 0, +off£tof +( +IÁ”çûID_W1 +, +ng_eNB_DU_ID +), + +21 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +23 & +a¢_DEF_NGENB_DU_ID +, + +30 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_IÁ”çûID_W1_gs_1 +[] = { + +31 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +33 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_IÁ”çûID_W1_g2–_1 +[] = { + +34 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +35 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 } + +37 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_IÁ”çûID_W1_¥ecs_1 + = { + +38 ( +IÁ”çûID_W1 +), + +39 +off£tof +( +IÁ”çûID_W1 +, +_a¢_ùx +), + +40 +a¢_MAP_IÁ”çûID_W1_g2–_1 +, + +45 +a¢_TYPE_desütÜ_t + + ga¢_DEF_IÁ”çûID_W1 + = { + +48 & +a¢_OP_SEQUENCE +, + +49 +a¢_DEF_IÁ”çûID_W1_gs_1 +, + +50 ( +a¢_DEF_IÁ”çûID_W1_gs_1 +) + +51 /( +a¢_DEF_IÁ”çûID_W1_gs_1 +[0]), + +52 +a¢_DEF_IÁ”çûID_W1_gs_1 +, + +53 ( +a¢_DEF_IÁ”çûID_W1_gs_1 +) + +54 /( +a¢_DEF_IÁ”çûID_W1_gs_1 +[0]), + +55 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +56 +a¢_MBR_IÁ”çûID_W1_1 +, + +58 & +a¢_SPC_IÁ”çûID_W1_¥ecs_1 + + + @InterfaceID-X2.c + +8  + ~"IÁ”çûID-X2.h +" + +10  + ~"Glob®ENB-ID.h +" + +11  + ~"Glob®’GNB-ID.h +" + +12  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_nodeTy³_cÚ¡r_2 + + gCC_NOTUSED + = { + +13 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 1, 1, 0, 1 } , + +14 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +17  +a¢_TYPE_memb”_t + + ga¢_MBR_nodeTy³_2 +[] = { + +18 { +ATF_POINTER +, 0, +off£tof +( +IÁ”çûID_X2__nodeTy³ +, +choiû +. +glob®_eNB_ID +), + +19 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +21 & +a¢_DEF_Glob®ENB_ID +, + +27 { +ATF_POINTER +, 0, +off£tof +( +IÁ”çûID_X2__nodeTy³ +, +choiû +. +glob®_’_gNB_ID +), + +28 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +30 & +a¢_DEF_Glob®’GNB_ID +, + +37 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_nodeTy³_g2–_2 +[] = { + +38 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +39 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 } + +41  +a¢_CHOICE_¥ecifics_t + + ga¢_SPC_nodeTy³_¥ecs_2 + = { + +42 ( +IÁ”çûID_X2__nodeTy³ +), + +43 +off£tof +( +IÁ”çûID_X2__nodeTy³ +, +_a¢_ùx +), + +44 +off£tof +( +IÁ”çûID_X2__nodeTy³ +, +´e£Á +), + +45 ((( +IÁ”çûID_X2__nodeTy³ + *)0)-> +´e£Á +), + +46 +a¢_MAP_nodeTy³_g2–_2 +, + +52 +a¢_TYPE_desütÜ_t + + ga¢_DEF_nodeTy³_2 + = { + +55 & +a¢_OP_CHOICE +, + +60 { 0, & +a¢_PER_ty³_nodeTy³_cÚ¡r_2 +, +CHOICE_cÚ¡¿št + }, + +61 +a¢_MBR_nodeTy³_2 +, + +63 & +a¢_SPC_nodeTy³_¥ecs_2 + + +66 +a¢_TYPE_memb”_t + + ga¢_MBR_IÁ”çûID_X2_1 +[] = { + +67 { +ATF_NOFLAGS +, 0, +off£tof +( +IÁ”çûID_X2 +, +nodeTy³ +), + +68 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +70 & +a¢_DEF_nodeTy³_2 +, + +77 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_IÁ”çûID_X2_gs_1 +[] = { + +78 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +80 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_IÁ”çûID_X2_g2–_1 +[] = { + +81 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 } + +83 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_IÁ”çûID_X2_¥ecs_1 + = { + +84 ( +IÁ”çûID_X2 +), + +85 +off£tof +( +IÁ”çûID_X2 +, +_a¢_ùx +), + +86 +a¢_MAP_IÁ”çûID_X2_g2–_1 +, + +91 +a¢_TYPE_desütÜ_t + + ga¢_DEF_IÁ”çûID_X2 + = { + +94 & +a¢_OP_SEQUENCE +, + +95 +a¢_DEF_IÁ”çûID_X2_gs_1 +, + +96 ( +a¢_DEF_IÁ”çûID_X2_gs_1 +) + +97 /( +a¢_DEF_IÁ”çûID_X2_gs_1 +[0]), + +98 +a¢_DEF_IÁ”çûID_X2_gs_1 +, + +99 ( +a¢_DEF_IÁ”çûID_X2_gs_1 +) + +100 /( +a¢_DEF_IÁ”çûID_X2_gs_1 +[0]), + +101 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +102 +a¢_MBR_IÁ”çûID_X2_1 +, + +104 & +a¢_SPC_IÁ”çûID_X2_¥ecs_1 + + + @InterfaceID-Xn.c + +8  + ~"IÁ”çûID-Xn.h +" + +10 +a¢_TYPE_memb”_t + + ga¢_MBR_IÁ”çûID_Xn_1 +[] = { + +11 { +ATF_NOFLAGS +, 0, +off£tof +( +IÁ”çûID_Xn +, +glob®_NG_RAN_ID +), + +12 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +14 & +a¢_DEF_Glob®NGRANNodeID +, + +21 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_IÁ”çûID_Xn_gs_1 +[] = { + +22 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +24 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_IÁ”çûID_Xn_g2–_1 +[] = { + +25 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 } + +27 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_IÁ”çûID_Xn_¥ecs_1 + = { + +28 ( +IÁ”çûID_Xn +), + +29 +off£tof +( +IÁ”çûID_Xn +, +_a¢_ùx +), + +30 +a¢_MAP_IÁ”çûID_Xn_g2–_1 +, + +35 +a¢_TYPE_desütÜ_t + + ga¢_DEF_IÁ”çûID_Xn + = { + +38 & +a¢_OP_SEQUENCE +, + +39 +a¢_DEF_IÁ”çûID_Xn_gs_1 +, + +40 ( +a¢_DEF_IÁ”çûID_Xn_gs_1 +) + +41 /( +a¢_DEF_IÁ”çûID_Xn_gs_1 +[0]), + +42 +a¢_DEF_IÁ”çûID_Xn_gs_1 +, + +43 ( +a¢_DEF_IÁ”çûID_Xn_gs_1 +) + +44 /( +a¢_DEF_IÁ”çûID_Xn_gs_1 +[0]), + +45 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +46 +a¢_MBR_IÁ”çûID_Xn_1 +, + +48 & +a¢_SPC_IÁ”çûID_Xn_¥ecs_1 + + + @InterfaceIdentifier.c + +8  + ~"IÁ”çûId’tif›r.h +" + +10  + ~"IÁ”çûID-NG.h +" + +11  + ~"IÁ”çûID-Xn.h +" + +12  + ~"IÁ”çûID-F1.h +" + +13  + ~"IÁ”çûID-E1.h +" + +14  + ~"IÁ”çûID-S1.h +" + +15  + ~"IÁ”çûID-X2.h +" + +16  + ~"IÁ”çûID-W1.h +" + +17  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_IÁ”çûId’tif›r_cÚ¡r_1 + + gCC_NOTUSED + = { + +18 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 3, 3, 0, 6 } , + +19 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +22  +a¢_TYPE_memb”_t + + ga¢_MBR_IÁ”çûId’tif›r_1 +[] = { + +23 { +ATF_POINTER +, 0, +off£tof +( +IÁ”çûId’tif›r +, +choiû +. +nG +), + +24 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +26 & +a¢_DEF_IÁ”çûID_NG +, + +32 { +ATF_POINTER +, 0, +off£tof +( +IÁ”çûId’tif›r +, +choiû +. +xN +), + +33 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +35 & +a¢_DEF_IÁ”çûID_Xn +, + +41 { +ATF_POINTER +, 0, +off£tof +( +IÁ”çûId’tif›r +, +choiû +. +f1 +), + +42 ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), + +44 & +a¢_DEF_IÁ”çûID_F1 +, + +50 { +ATF_POINTER +, 0, +off£tof +( +IÁ”çûId’tif›r +, +choiû +. +e1 +), + +51 ( +ASN_TAG_CLASS_CONTEXT + | (3 << 2)), + +53 & +a¢_DEF_IÁ”çûID_E1 +, + +59 { +ATF_POINTER +, 0, +off£tof +( +IÁ”çûId’tif›r +, +choiû +. +s1 +), + +60 ( +ASN_TAG_CLASS_CONTEXT + | (4 << 2)), + +62 & +a¢_DEF_IÁ”çûID_S1 +, + +68 { +ATF_POINTER +, 0, +off£tof +( +IÁ”çûId’tif›r +, +choiû +. +x2 +), + +69 ( +ASN_TAG_CLASS_CONTEXT + | (5 << 2)), + +71 & +a¢_DEF_IÁ”çûID_X2 +, + +77 { +ATF_POINTER +, 0, +off£tof +( +IÁ”çûId’tif›r +, +choiû +. +w1 +), + +78 ( +ASN_TAG_CLASS_CONTEXT + | (6 << 2)), + +80 & +a¢_DEF_IÁ”çûID_W1 +, + +87 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_IÁ”çûId’tif›r_g2–_1 +[] = { + +88 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +89 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 }, + +90 { ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), 2, 0, 0 }, + +91 { ( +ASN_TAG_CLASS_CONTEXT + | (3 << 2)), 3, 0, 0 }, + +92 { ( +ASN_TAG_CLASS_CONTEXT + | (4 << 2)), 4, 0, 0 }, + +93 { ( +ASN_TAG_CLASS_CONTEXT + | (5 << 2)), 5, 0, 0 }, + +94 { ( +ASN_TAG_CLASS_CONTEXT + | (6 << 2)), 6, 0, 0 } + +96  +a¢_CHOICE_¥ecifics_t + + ga¢_SPC_IÁ”çûId’tif›r_¥ecs_1 + = { + +97 ( +IÁ”çûId’tif›r +), + +98 +off£tof +( +IÁ”çûId’tif›r +, +_a¢_ùx +), + +99 +off£tof +( +IÁ”çûId’tif›r +, +´e£Á +), + +100 ((( +IÁ”çûId’tif›r + *)0)-> +´e£Á +), + +101 +a¢_MAP_IÁ”çûId’tif›r_g2–_1 +, + +106 +a¢_TYPE_desütÜ_t + + ga¢_DEF_IÁ”çûId’tif›r + = { + +109 & +a¢_OP_CHOICE +, + +114 { 0, & +a¢_PER_ty³_IÁ”çûId’tif›r_cÚ¡r_1 +, +CHOICE_cÚ¡¿št + }, + +115 +a¢_MBR_IÁ”çûId’tif›r_1 +, + +117 & +a¢_SPC_IÁ”çûId’tif›r_¥ecs_1 + + + @InterfaceType.c + +8  + ~"IÁ”çûTy³.h +" + +14  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_IÁ”çûTy³_cÚ¡r_1 + + gCC_NOTUSED + = { + +15 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 3, 3, 0, 6 } , + +16 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +19 cÚ¡ +a¢_INTEGER_’um_m­_t + + ga¢_MAP_IÁ”çûTy³_v®ue2’um_1 +[] = { + +29 cÚ¡  + ga¢_MAP_IÁ”çûTy³_’um2v®ue_1 +[] = { + +39 cÚ¡ +a¢_INTEGER_¥ecifics_t + + ga¢_SPC_IÁ”çûTy³_¥ecs_1 + = { + +40 +a¢_MAP_IÁ”çûTy³_v®ue2’um_1 +, + +41 +a¢_MAP_IÁ”çûTy³_’um2v®ue_1 +, + +48 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_IÁ”çûTy³_gs_1 +[] = { + +49 ( +ASN_TAG_CLASS_UNIVERSAL + | (10 << 2)) + +51 +a¢_TYPE_desütÜ_t + + ga¢_DEF_IÁ”çûTy³ + = { + +54 & +a¢_OP_N©iveEnum”©ed +, + +55 +a¢_DEF_IÁ”çûTy³_gs_1 +, + +56 ( +a¢_DEF_IÁ”çûTy³_gs_1 +) + +57 /( +a¢_DEF_IÁ”çûTy³_gs_1 +[0]), + +58 +a¢_DEF_IÁ”çûTy³_gs_1 +, + +59 ( +a¢_DEF_IÁ”çûTy³_gs_1 +) + +60 /( +a¢_DEF_IÁ”çûTy³_gs_1 +[0]), + +61 { 0, & +a¢_PER_ty³_IÁ”çûTy³_cÚ¡r_1 +, +N©iveEnum”©ed_cÚ¡¿št + }, + +63 & +a¢_SPC_IÁ”çûTy³_¥ecs_1 + + + @LabelInfoItem.c + +8  + ~"Lab–InfoI‹m.h +" + +10 +a¢_TYPE_memb”_t + + ga¢_MBR_Lab–InfoI‹m_1 +[] = { + +11 { +ATF_NOFLAGS +, 0, +off£tof +( +Lab–InfoI‹m +, +m—sLab– +), + +12 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +14 & +a¢_DEF_M—su»m’tLab– +, + +21 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_Lab–InfoI‹m_gs_1 +[] = { + +22 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +24 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_Lab–InfoI‹m_g2–_1 +[] = { + +25 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 } + +27 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_Lab–InfoI‹m_¥ecs_1 + = { + +28 ( +Lab–InfoI‹m +), + +29 +off£tof +( +Lab–InfoI‹m +, +_a¢_ùx +), + +30 +a¢_MAP_Lab–InfoI‹m_g2–_1 +, + +35 +a¢_TYPE_desütÜ_t + + ga¢_DEF_Lab–InfoI‹m + = { + +38 & +a¢_OP_SEQUENCE +, + +39 +a¢_DEF_Lab–InfoI‹m_gs_1 +, + +40 ( +a¢_DEF_Lab–InfoI‹m_gs_1 +) + +41 /( +a¢_DEF_Lab–InfoI‹m_gs_1 +[0]), + +42 +a¢_DEF_Lab–InfoI‹m_gs_1 +, + +43 ( +a¢_DEF_Lab–InfoI‹m_gs_1 +) + +44 /( +a¢_DEF_Lab–InfoI‹m_gs_1 +[0]), + +45 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +46 +a¢_MBR_Lab–InfoI‹m_1 +, + +48 & +a¢_SPC_Lab–InfoI‹m_¥ecs_1 + + + @LabelInfoList.c + +8  + ~"Lab–InfoLi¡.h +" + +10  + ~"Lab–InfoI‹m.h +" + +11 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_Lab–InfoLi¡_cÚ¡r_1 + + gCC_NOTUSED + = { + +12 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +13 { +APC_CONSTRAINED +, 31, -1, 1, 2147483647 } , + +16 +a¢_TYPE_memb”_t + + ga¢_MBR_Lab–InfoLi¡_1 +[] = { + +17 { +ATF_POINTER +, 0, 0, + +18 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)), + +20 & +a¢_DEF_Lab–InfoI‹m +, + +27 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_Lab–InfoLi¡_gs_1 +[] = { + +28 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +30 +a¢_SET_OF_¥ecifics_t + + ga¢_SPC_Lab–InfoLi¡_¥ecs_1 + = { + +31 ( +Lab–InfoLi¡ +), + +32 +off£tof +( +Lab–InfoLi¡ +, +_a¢_ùx +), + +35 +a¢_TYPE_desütÜ_t + + ga¢_DEF_Lab–InfoLi¡ + = { + +38 & +a¢_OP_SEQUENCE_OF +, + +39 +a¢_DEF_Lab–InfoLi¡_gs_1 +, + +40 ( +a¢_DEF_Lab–InfoLi¡_gs_1 +) + +41 /( +a¢_DEF_Lab–InfoLi¡_gs_1 +[0]), + +42 +a¢_DEF_Lab–InfoLi¡_gs_1 +, + +43 ( +a¢_DEF_Lab–InfoLi¡_gs_1 +) + +44 /( +a¢_DEF_Lab–InfoLi¡_gs_1 +[0]), + +45 { 0, & +a¢_PER_ty³_Lab–InfoLi¡_cÚ¡r_1 +, +SEQUENCE_OF_cÚ¡¿št + }, + +46 +a¢_MBR_Lab–InfoLi¡_1 +, + +48 & +a¢_SPC_Lab–InfoLi¡_¥ecs_1 + + + @MME-Code.c + +8  + ~"MME-Code.h +" + +11 + $MME_Code_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13 cÚ¡ +OCTET_STRING_t + * +¡ + = (cÚ¡ OCTET_STRING_ˆ*) +¥Œ +; + +14 +size_t + +size +; + +16 if(! +¥Œ +) { + +17 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +19 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +23 +size + = +¡ +->size; + +25 if(( +size + == 1)) { + +29 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +31 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +34 + } +} + +40 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_MME_Code_cÚ¡r_1 + + gCC_NOTUSED + = { + +41 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +42 { +APC_CONSTRAINED +, 0, 0, 1, 1 } , + +45 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_MME_Code_gs_1 +[] = { + +46 ( +ASN_TAG_CLASS_UNIVERSAL + | (4 << 2)) + +48 +a¢_TYPE_desütÜ_t + + ga¢_DEF_MME_Code + = { + +51 & +a¢_OP_OCTET_STRING +, + +52 +a¢_DEF_MME_Code_gs_1 +, + +53 ( +a¢_DEF_MME_Code_gs_1 +) + +54 /( +a¢_DEF_MME_Code_gs_1 +[0]), + +55 +a¢_DEF_MME_Code_gs_1 +, + +56 ( +a¢_DEF_MME_Code_gs_1 +) + +57 /( +a¢_DEF_MME_Code_gs_1 +[0]), + +58 { 0, & +a¢_PER_ty³_MME_Code_cÚ¡r_1 +, +MME_Code_cÚ¡¿št + }, + +60 & +a¢_SPC_OCTET_STRING_¥ecs + + + @MME-Group-ID.c + +8  + ~"MME-Group-ID.h +" + +11 + $MME_Group_ID_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13 cÚ¡ +OCTET_STRING_t + * +¡ + = (cÚ¡ OCTET_STRING_ˆ*) +¥Œ +; + +14 +size_t + +size +; + +16 if(! +¥Œ +) { + +17 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +19 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +23 +size + = +¡ +->size; + +25 if(( +size + == 2)) { + +29 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +31 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +34 + } +} + +40 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_MME_Group_ID_cÚ¡r_1 + + gCC_NOTUSED + = { + +41 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +42 { +APC_CONSTRAINED +, 0, 0, 2, 2 } , + +45 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_MME_Group_ID_gs_1 +[] = { + +46 ( +ASN_TAG_CLASS_UNIVERSAL + | (4 << 2)) + +48 +a¢_TYPE_desütÜ_t + + ga¢_DEF_MME_Group_ID + = { + +51 & +a¢_OP_OCTET_STRING +, + +52 +a¢_DEF_MME_Group_ID_gs_1 +, + +53 ( +a¢_DEF_MME_Group_ID_gs_1 +) + +54 /( +a¢_DEF_MME_Group_ID_gs_1 +[0]), + +55 +a¢_DEF_MME_Group_ID_gs_1 +, + +56 ( +a¢_DEF_MME_Group_ID_gs_1 +) + +57 /( +a¢_DEF_MME_Group_ID_gs_1 +[0]), + +58 { 0, & +a¢_PER_ty³_MME_Group_ID_cÚ¡r_1 +, +MME_Group_ID_cÚ¡¿št + }, + +60 & +a¢_SPC_OCTET_STRING_¥ecs + + + @MME-UE-S1AP-ID.c + +8  + ~"MME-UE-S1AP-ID.h +" + +11 + $MME_UE_S1AP_ID_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +14 if(! +¥Œ +) { + +15 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +17 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +24 + } +} + +30 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_MME_UE_S1AP_ID_cÚ¡r_1 + + gCC_NOTUSED + = { + +31 { +APC_CONSTRAINED +, 32, -1, 0, 4294967295 } , + +32 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +35 cÚ¡ +a¢_INTEGER_¥ecifics_t + + ga¢_SPC_MME_UE_S1AP_ID_¥ecs_1 + = { + +40 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_MME_UE_S1AP_ID_gs_1 +[] = { + +41 ( +ASN_TAG_CLASS_UNIVERSAL + | (2 << 2)) + +43 +a¢_TYPE_desütÜ_t + + ga¢_DEF_MME_UE_S1AP_ID + = { + +46 & +a¢_OP_N©iveIÁeg” +, + +47 +a¢_DEF_MME_UE_S1AP_ID_gs_1 +, + +48 ( +a¢_DEF_MME_UE_S1AP_ID_gs_1 +) + +49 /( +a¢_DEF_MME_UE_S1AP_ID_gs_1 +[0]), + +50 +a¢_DEF_MME_UE_S1AP_ID_gs_1 +, + +51 ( +a¢_DEF_MME_UE_S1AP_ID_gs_1 +) + +52 /( +a¢_DEF_MME_UE_S1AP_ID_gs_1 +[0]), + +53 { 0, & +a¢_PER_ty³_MME_UE_S1AP_ID_cÚ¡r_1 +, +MME_UE_S1AP_ID_cÚ¡¿št + }, + +55 & +a¢_SPC_MME_UE_S1AP_ID_¥ecs_1 + + + @MatchingCondItem.c + +8  + ~"M©chšgCÚdI‹m.h +" + +10  + ~"M—su»m’tLab–.h +" + +11  + ~"Te¡CÚdInfo.h +" + +12 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_M©chšgCÚdI‹m_cÚ¡r_1 + + gCC_NOTUSED + = { + +13 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 1, 1, 0, 1 } , + +14 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +17 +a¢_TYPE_memb”_t + + ga¢_MBR_M©chšgCÚdI‹m_1 +[] = { + +18 { +ATF_POINTER +, 0, +off£tof +( +M©chšgCÚdI‹m +, +choiû +. +m—sLab– +), + +19 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +21 & +a¢_DEF_M—su»m’tLab– +, + +27 { +ATF_POINTER +, 0, +off£tof +( +M©chšgCÚdI‹m +, +choiû +. +‹¡CÚdInfo +), + +28 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +30 & +a¢_DEF_Te¡CÚdInfo +, + +37 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_M©chšgCÚdI‹m_g2–_1 +[] = { + +38 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +39 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 } + +41 +a¢_CHOICE_¥ecifics_t + + ga¢_SPC_M©chšgCÚdI‹m_¥ecs_1 + = { + +42 ( +M©chšgCÚdI‹m +), + +43 +off£tof +( +M©chšgCÚdI‹m +, +_a¢_ùx +), + +44 +off£tof +( +M©chšgCÚdI‹m +, +´e£Á +), + +45 ((( +M©chšgCÚdI‹m + *)0)-> +´e£Á +), + +46 +a¢_MAP_M©chšgCÚdI‹m_g2–_1 +, + +51 +a¢_TYPE_desütÜ_t + + ga¢_DEF_M©chšgCÚdI‹m + = { + +54 & +a¢_OP_CHOICE +, + +59 { 0, & +a¢_PER_ty³_M©chšgCÚdI‹m_cÚ¡r_1 +, +CHOICE_cÚ¡¿št + }, + +60 +a¢_MBR_M©chšgCÚdI‹m_1 +, + +62 & +a¢_SPC_M©chšgCÚdI‹m_¥ecs_1 + + + @MatchingCondList.c + +8  + ~"M©chšgCÚdLi¡.h +" + +10  + ~"M©chšgCÚdI‹m.h +" + +11 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_M©chšgCÚdLi¡_cÚ¡r_1 + + gCC_NOTUSED + = { + +12 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +13 { +APC_CONSTRAINED +, 15, 15, 1, 32768 } , + +16 +a¢_TYPE_memb”_t + + ga¢_MBR_M©chšgCÚdLi¡_1 +[] = { + +17 { +ATF_POINTER +, 0, 0, + +20 & +a¢_DEF_M©chšgCÚdI‹m +, + +27 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_M©chšgCÚdLi¡_gs_1 +[] = { + +28 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +30 +a¢_SET_OF_¥ecifics_t + + ga¢_SPC_M©chšgCÚdLi¡_¥ecs_1 + = { + +31 ( +M©chšgCÚdLi¡ +), + +32 +off£tof +( +M©chšgCÚdLi¡ +, +_a¢_ùx +), + +35 +a¢_TYPE_desütÜ_t + + ga¢_DEF_M©chšgCÚdLi¡ + = { + +38 & +a¢_OP_SEQUENCE_OF +, + +39 +a¢_DEF_M©chšgCÚdLi¡_gs_1 +, + +40 ( +a¢_DEF_M©chšgCÚdLi¡_gs_1 +) + +41 /( +a¢_DEF_M©chšgCÚdLi¡_gs_1 +[0]), + +42 +a¢_DEF_M©chšgCÚdLi¡_gs_1 +, + +43 ( +a¢_DEF_M©chšgCÚdLi¡_gs_1 +) + +44 /( +a¢_DEF_M©chšgCÚdLi¡_gs_1 +[0]), + +45 { 0, & +a¢_PER_ty³_M©chšgCÚdLi¡_cÚ¡r_1 +, +SEQUENCE_OF_cÚ¡¿št + }, + +46 +a¢_MBR_M©chšgCÚdLi¡_1 +, + +48 & +a¢_SPC_M©chšgCÚdLi¡_¥ecs_1 + + + @MatchingUEidItem.c + +8  + ~"M©chšgUEidI‹m.h +" + +10 +a¢_TYPE_memb”_t + + ga¢_MBR_M©chšgUEidI‹m_1 +[] = { + +11 { +ATF_NOFLAGS +, 0, +off£tof +( +M©chšgUEidI‹m +, +ueID +), + +12 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +14 & +a¢_DEF_UEID +, + +21 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_M©chšgUEidI‹m_gs_1 +[] = { + +22 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +24 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_M©chšgUEidI‹m_g2–_1 +[] = { + +25 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 } + +27 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_M©chšgUEidI‹m_¥ecs_1 + = { + +28 ( +M©chšgUEidI‹m +), + +29 +off£tof +( +M©chšgUEidI‹m +, +_a¢_ùx +), + +30 +a¢_MAP_M©chšgUEidI‹m_g2–_1 +, + +35 +a¢_TYPE_desütÜ_t + + ga¢_DEF_M©chšgUEidI‹m + = { + +38 & +a¢_OP_SEQUENCE +, + +39 +a¢_DEF_M©chšgUEidI‹m_gs_1 +, + +40 ( +a¢_DEF_M©chšgUEidI‹m_gs_1 +) + +41 /( +a¢_DEF_M©chšgUEidI‹m_gs_1 +[0]), + +42 +a¢_DEF_M©chšgUEidI‹m_gs_1 +, + +43 ( +a¢_DEF_M©chšgUEidI‹m_gs_1 +) + +44 /( +a¢_DEF_M©chšgUEidI‹m_gs_1 +[0]), + +45 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +46 +a¢_MBR_M©chšgUEidI‹m_1 +, + +48 & +a¢_SPC_M©chšgUEidI‹m_¥ecs_1 + + + @MatchingUEidList.c + +8  + ~"M©chšgUEidLi¡.h +" + +10  + ~"M©chšgUEidI‹m.h +" + +11 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_M©chšgUEidLi¡_cÚ¡r_1 + + gCC_NOTUSED + = { + +12 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +13 { +APC_CONSTRAINED +, 16, 16, 1, 65535 } , + +16 +a¢_TYPE_memb”_t + + ga¢_MBR_M©chšgUEidLi¡_1 +[] = { + +17 { +ATF_POINTER +, 0, 0, + +18 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)), + +20 & +a¢_DEF_M©chšgUEidI‹m +, + +27 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_M©chšgUEidLi¡_gs_1 +[] = { + +28 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +30 +a¢_SET_OF_¥ecifics_t + + ga¢_SPC_M©chšgUEidLi¡_¥ecs_1 + = { + +31 ( +M©chšgUEidLi¡ +), + +32 +off£tof +( +M©chšgUEidLi¡ +, +_a¢_ùx +), + +35 +a¢_TYPE_desütÜ_t + + ga¢_DEF_M©chšgUEidLi¡ + = { + +38 & +a¢_OP_SEQUENCE_OF +, + +39 +a¢_DEF_M©chšgUEidLi¡_gs_1 +, + +40 ( +a¢_DEF_M©chšgUEidLi¡_gs_1 +) + +41 /( +a¢_DEF_M©chšgUEidLi¡_gs_1 +[0]), + +42 +a¢_DEF_M©chšgUEidLi¡_gs_1 +, + +43 ( +a¢_DEF_M©chšgUEidLi¡_gs_1 +) + +44 /( +a¢_DEF_M©chšgUEidLi¡_gs_1 +[0]), + +45 { 0, & +a¢_PER_ty³_M©chšgUEidLi¡_cÚ¡r_1 +, +SEQUENCE_OF_cÚ¡¿št + }, + +46 +a¢_MBR_M©chšgUEidLi¡_1 +, + +48 & +a¢_SPC_M©chšgUEidLi¡_¥ecs_1 + + + @MeasurementCondItem.c + +8  + ~"M—su»m’tCÚdI‹m.h +" + +10 +a¢_TYPE_memb”_t + + ga¢_MBR_M—su»m’tCÚdI‹m_1 +[] = { + +11 { +ATF_NOFLAGS +, 0, +off£tof +( +M—su»m’tCÚdI‹m +, +m—sTy³ +), + +12 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +14 & +a¢_DEF_M—su»m’tTy³ +, + +20 { +ATF_NOFLAGS +, 0, +off£tof +( +M—su»m’tCÚdI‹m +, +m©chšgCÚd +), + +21 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +23 & +a¢_DEF_M©chšgCÚdLi¡ +, + +30 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_M—su»m’tCÚdI‹m_gs_1 +[] = { + +31 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +33 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_M—su»m’tCÚdI‹m_g2–_1 +[] = { + +34 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +35 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 } + +37 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_M—su»m’tCÚdI‹m_¥ecs_1 + = { + +38 ( +M—su»m’tCÚdI‹m +), + +39 +off£tof +( +M—su»m’tCÚdI‹m +, +_a¢_ùx +), + +40 +a¢_MAP_M—su»m’tCÚdI‹m_g2–_1 +, + +45 +a¢_TYPE_desütÜ_t + + ga¢_DEF_M—su»m’tCÚdI‹m + = { + +48 & +a¢_OP_SEQUENCE +, + +49 +a¢_DEF_M—su»m’tCÚdI‹m_gs_1 +, + +50 ( +a¢_DEF_M—su»m’tCÚdI‹m_gs_1 +) + +51 /( +a¢_DEF_M—su»m’tCÚdI‹m_gs_1 +[0]), + +52 +a¢_DEF_M—su»m’tCÚdI‹m_gs_1 +, + +53 ( +a¢_DEF_M—su»m’tCÚdI‹m_gs_1 +) + +54 /( +a¢_DEF_M—su»m’tCÚdI‹m_gs_1 +[0]), + +55 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +56 +a¢_MBR_M—su»m’tCÚdI‹m_1 +, + +58 & +a¢_SPC_M—su»m’tCÚdI‹m_¥ecs_1 + + + @MeasurementCondList.c + +8  + ~"M—su»m’tCÚdLi¡.h +" + +10  + ~"M—su»m’tCÚdI‹m.h +" + +11 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_M—su»m’tCÚdLi¡_cÚ¡r_1 + + gCC_NOTUSED + = { + +12 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +13 { +APC_CONSTRAINED +, 16, 16, 1, 65535 } , + +16 +a¢_TYPE_memb”_t + + ga¢_MBR_M—su»m’tCÚdLi¡_1 +[] = { + +17 { +ATF_POINTER +, 0, 0, + +18 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)), + +20 & +a¢_DEF_M—su»m’tCÚdI‹m +, + +27 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_M—su»m’tCÚdLi¡_gs_1 +[] = { + +28 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +30 +a¢_SET_OF_¥ecifics_t + + ga¢_SPC_M—su»m’tCÚdLi¡_¥ecs_1 + = { + +31 ( +M—su»m’tCÚdLi¡ +), + +32 +off£tof +( +M—su»m’tCÚdLi¡ +, +_a¢_ùx +), + +35 +a¢_TYPE_desütÜ_t + + ga¢_DEF_M—su»m’tCÚdLi¡ + = { + +38 & +a¢_OP_SEQUENCE_OF +, + +39 +a¢_DEF_M—su»m’tCÚdLi¡_gs_1 +, + +40 ( +a¢_DEF_M—su»m’tCÚdLi¡_gs_1 +) + +41 /( +a¢_DEF_M—su»m’tCÚdLi¡_gs_1 +[0]), + +42 +a¢_DEF_M—su»m’tCÚdLi¡_gs_1 +, + +43 ( +a¢_DEF_M—su»m’tCÚdLi¡_gs_1 +) + +44 /( +a¢_DEF_M—su»m’tCÚdLi¡_gs_1 +[0]), + +45 { 0, & +a¢_PER_ty³_M—su»m’tCÚdLi¡_cÚ¡r_1 +, +SEQUENCE_OF_cÚ¡¿št + }, + +46 +a¢_MBR_M—su»m’tCÚdLi¡_1 +, + +48 & +a¢_SPC_M—su»m’tCÚdLi¡_¥ecs_1 + + + @MeasurementCondUEidItem.c + +8  + ~"M—su»m’tCÚdUEidI‹m.h +" + +10  + ~"M©chšgUEidLi¡.h +" + +11 +a¢_TYPE_memb”_t + + ga¢_MBR_M—su»m’tCÚdUEidI‹m_1 +[] = { + +12 { +ATF_NOFLAGS +, 0, +off£tof +( +M—su»m’tCÚdUEidI‹m +, +m—sTy³ +), + +13 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +15 & +a¢_DEF_M—su»m’tTy³ +, + +21 { +ATF_NOFLAGS +, 0, +off£tof +( +M—su»m’tCÚdUEidI‹m +, +m©chšgCÚd +), + +22 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +24 & +a¢_DEF_M©chšgCÚdLi¡ +, + +30 { +ATF_POINTER +, 1, +off£tof +( +M—su»m’tCÚdUEidI‹m +, +m©chšgUEidLi¡ +), + +31 ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), + +33 & +a¢_DEF_M©chšgUEidLi¡ +, + +40 cÚ¡  + ga¢_MAP_M—su»m’tCÚdUEidI‹m_oms_1 +[] = { 2 }; + +41 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_M—su»m’tCÚdUEidI‹m_gs_1 +[] = { + +42 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +44 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_M—su»m’tCÚdUEidI‹m_g2–_1 +[] = { + +45 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +46 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 }, + +47 { ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), 2, 0, 0 } + +49 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_M—su»m’tCÚdUEidI‹m_¥ecs_1 + = { + +50 ( +M—su»m’tCÚdUEidI‹m +), + +51 +off£tof +( +M—su»m’tCÚdUEidI‹m +, +_a¢_ùx +), + +52 +a¢_MAP_M—su»m’tCÚdUEidI‹m_g2–_1 +, + +54 +a¢_MAP_M—su»m’tCÚdUEidI‹m_oms_1 +, + +58 +a¢_TYPE_desütÜ_t + + ga¢_DEF_M—su»m’tCÚdUEidI‹m + = { + +61 & +a¢_OP_SEQUENCE +, + +62 +a¢_DEF_M—su»m’tCÚdUEidI‹m_gs_1 +, + +63 ( +a¢_DEF_M—su»m’tCÚdUEidI‹m_gs_1 +) + +64 /( +a¢_DEF_M—su»m’tCÚdUEidI‹m_gs_1 +[0]), + +65 +a¢_DEF_M—su»m’tCÚdUEidI‹m_gs_1 +, + +66 ( +a¢_DEF_M—su»m’tCÚdUEidI‹m_gs_1 +) + +67 /( +a¢_DEF_M—su»m’tCÚdUEidI‹m_gs_1 +[0]), + +68 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +69 +a¢_MBR_M—su»m’tCÚdUEidI‹m_1 +, + +71 & +a¢_SPC_M—su»m’tCÚdUEidI‹m_¥ecs_1 + + + @MeasurementCondUEidList.c + +8  + ~"M—su»m’tCÚdUEidLi¡.h +" + +10  + ~"M—su»m’tCÚdUEidI‹m.h +" + +11 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_M—su»m’tCÚdUEidLi¡_cÚ¡r_1 + + gCC_NOTUSED + = { + +12 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +13 { +APC_CONSTRAINED +, 16, 16, 1, 65535 } , + +16 +a¢_TYPE_memb”_t + + ga¢_MBR_M—su»m’tCÚdUEidLi¡_1 +[] = { + +17 { +ATF_POINTER +, 0, 0, + +18 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)), + +20 & +a¢_DEF_M—su»m’tCÚdUEidI‹m +, + +27 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_M—su»m’tCÚdUEidLi¡_gs_1 +[] = { + +28 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +30 +a¢_SET_OF_¥ecifics_t + + ga¢_SPC_M—su»m’tCÚdUEidLi¡_¥ecs_1 + = { + +31 ( +M—su»m’tCÚdUEidLi¡ +), + +32 +off£tof +( +M—su»m’tCÚdUEidLi¡ +, +_a¢_ùx +), + +35 +a¢_TYPE_desütÜ_t + + ga¢_DEF_M—su»m’tCÚdUEidLi¡ + = { + +38 & +a¢_OP_SEQUENCE_OF +, + +39 +a¢_DEF_M—su»m’tCÚdUEidLi¡_gs_1 +, + +40 ( +a¢_DEF_M—su»m’tCÚdUEidLi¡_gs_1 +) + +41 /( +a¢_DEF_M—su»m’tCÚdUEidLi¡_gs_1 +[0]), + +42 +a¢_DEF_M—su»m’tCÚdUEidLi¡_gs_1 +, + +43 ( +a¢_DEF_M—su»m’tCÚdUEidLi¡_gs_1 +) + +44 /( +a¢_DEF_M—su»m’tCÚdUEidLi¡_gs_1 +[0]), + +45 { 0, & +a¢_PER_ty³_M—su»m’tCÚdUEidLi¡_cÚ¡r_1 +, +SEQUENCE_OF_cÚ¡¿št + }, + +46 +a¢_MBR_M—su»m’tCÚdUEidLi¡_1 +, + +48 & +a¢_SPC_M—su»m’tCÚdUEidLi¡_¥ecs_1 + + + @MeasurementData.c + +8  + ~"M—su»m’tD©a.h +" + +10  + ~"M—su»m’tD©aI‹m.h +" + +11 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_M—su»m’tD©a_cÚ¡r_1 + + gCC_NOTUSED + = { + +12 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +13 { +APC_CONSTRAINED +, 16, 16, 1, 65535 } , + +16 +a¢_TYPE_memb”_t + + ga¢_MBR_M—su»m’tD©a_1 +[] = { + +17 { +ATF_POINTER +, 0, 0, + +18 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)), + +20 & +a¢_DEF_M—su»m’tD©aI‹m +, + +27 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_M—su»m’tD©a_gs_1 +[] = { + +28 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +30 +a¢_SET_OF_¥ecifics_t + + ga¢_SPC_M—su»m’tD©a_¥ecs_1 + = { + +31 ( +M—su»m’tD©a +), + +32 +off£tof +( +M—su»m’tD©a +, +_a¢_ùx +), + +35 +a¢_TYPE_desütÜ_t + + ga¢_DEF_M—su»m’tD©a + = { + +38 & +a¢_OP_SEQUENCE_OF +, + +39 +a¢_DEF_M—su»m’tD©a_gs_1 +, + +40 ( +a¢_DEF_M—su»m’tD©a_gs_1 +) + +41 /( +a¢_DEF_M—su»m’tD©a_gs_1 +[0]), + +42 +a¢_DEF_M—su»m’tD©a_gs_1 +, + +43 ( +a¢_DEF_M—su»m’tD©a_gs_1 +) + +44 /( +a¢_DEF_M—su»m’tD©a_gs_1 +[0]), + +45 { 0, & +a¢_PER_ty³_M—su»m’tD©a_cÚ¡r_1 +, +SEQUENCE_OF_cÚ¡¿št + }, + +46 +a¢_MBR_M—su»m’tD©a_1 +, + +48 & +a¢_SPC_M—su»m’tD©a_¥ecs_1 + + + @MeasurementDataItem.c + +8  + ~"M—su»m’tD©aI‹m.h +" + +14  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_šcom¶‘eFÏg_cÚ¡r_3 + + gCC_NOTUSED + = { + +15 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 0, 0, 0, 0 } , + +16 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +19 cÚ¡ +a¢_INTEGER_’um_m­_t + + ga¢_MAP_šcom¶‘eFÏg_v®ue2’um_3 +[] = { + +23 cÚ¡  + ga¢_MAP_šcom¶‘eFÏg_’um2v®ue_3 +[] = { + +27 cÚ¡ +a¢_INTEGER_¥ecifics_t + + ga¢_SPC_šcom¶‘eFÏg_¥ecs_3 + = { + +28 +a¢_MAP_šcom¶‘eFÏg_v®ue2’um_3 +, + +29 +a¢_MAP_šcom¶‘eFÏg_’um2v®ue_3 +, + +36 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_šcom¶‘eFÏg_gs_3 +[] = { + +37 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +38 ( +ASN_TAG_CLASS_UNIVERSAL + | (10 << 2)) + +41 +a¢_TYPE_desütÜ_t + + ga¢_DEF_šcom¶‘eFÏg_3 + = { + +44 & +a¢_OP_N©iveEnum”©ed +, + +45 +a¢_DEF_šcom¶‘eFÏg_gs_3 +, + +46 ( +a¢_DEF_šcom¶‘eFÏg_gs_3 +) + +47 /( +a¢_DEF_šcom¶‘eFÏg_gs_3 +[0]) - 1, + +48 +a¢_DEF_šcom¶‘eFÏg_gs_3 +, + +49 ( +a¢_DEF_šcom¶‘eFÏg_gs_3 +) + +50 /( +a¢_DEF_šcom¶‘eFÏg_gs_3 +[0]), + +51 { 0, & +a¢_PER_ty³_šcom¶‘eFÏg_cÚ¡r_3 +, +N©iveEnum”©ed_cÚ¡¿št + }, + +53 & +a¢_SPC_šcom¶‘eFÏg_¥ecs_3 + + +56 +a¢_TYPE_memb”_t + + ga¢_MBR_M—su»m’tD©aI‹m_1 +[] = { + +57 { +ATF_NOFLAGS +, 0, +off£tof +( +M—su»m’tD©aI‹m +, +m—sRecÜd +), + +58 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +60 & +a¢_DEF_M—su»m’tRecÜd +, + +66 { +ATF_POINTER +, 1, +off£tof +( +M—su»m’tD©aI‹m +, +šcom¶‘eFÏg +), + +67 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +69 & +a¢_DEF_šcom¶‘eFÏg_3 +, + +76 cÚ¡  + ga¢_MAP_M—su»m’tD©aI‹m_oms_1 +[] = { 1 }; + +77 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_M—su»m’tD©aI‹m_gs_1 +[] = { + +78 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +80 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_M—su»m’tD©aI‹m_g2–_1 +[] = { + +81 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +82 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 } + +84 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_M—su»m’tD©aI‹m_¥ecs_1 + = { + +85 ( +M—su»m’tD©aI‹m +), + +86 +off£tof +( +M—su»m’tD©aI‹m +, +_a¢_ùx +), + +87 +a¢_MAP_M—su»m’tD©aI‹m_g2–_1 +, + +89 +a¢_MAP_M—su»m’tD©aI‹m_oms_1 +, + +93 +a¢_TYPE_desütÜ_t + + ga¢_DEF_M—su»m’tD©aI‹m + = { + +96 & +a¢_OP_SEQUENCE +, + +97 +a¢_DEF_M—su»m’tD©aI‹m_gs_1 +, + +98 ( +a¢_DEF_M—su»m’tD©aI‹m_gs_1 +) + +99 /( +a¢_DEF_M—su»m’tD©aI‹m_gs_1 +[0]), + +100 +a¢_DEF_M—su»m’tD©aI‹m_gs_1 +, + +101 ( +a¢_DEF_M—su»m’tD©aI‹m_gs_1 +) + +102 /( +a¢_DEF_M—su»m’tD©aI‹m_gs_1 +[0]), + +103 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +104 +a¢_MBR_M—su»m’tD©aI‹m_1 +, + +106 & +a¢_SPC_M—su»m’tD©aI‹m_¥ecs_1 + + + @MeasurementInfo-Action-Item.c + +8  + ~"M—su»m’tInfo-AùiÚ-I‹m.h +" + +10 +a¢_TYPE_memb”_t + + ga¢_MBR_M—su»m’tInfo_AùiÚ_I‹m_1 +[] = { + +11 { +ATF_NOFLAGS +, 0, +off£tof +( +M—su»m’tInfo_AùiÚ_I‹m +, +m—sName +), + +12 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +14 & +a¢_DEF_M—su»m’tTy³Name +, + +20 { +ATF_POINTER +, 1, +off£tof +( +M—su»m’tInfo_AùiÚ_I‹m +, +m—sID +), + +21 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +23 & +a¢_DEF_M—su»m’tTy³ID +, + +30 cÚ¡  + ga¢_MAP_M—su»m’tInfo_AùiÚ_I‹m_oms_1 +[] = { 1 }; + +31 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_M—su»m’tInfo_AùiÚ_I‹m_gs_1 +[] = { + +32 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +34 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_M—su»m’tInfo_AùiÚ_I‹m_g2–_1 +[] = { + +35 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +36 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 } + +38 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_M—su»m’tInfo_AùiÚ_I‹m_¥ecs_1 + = { + +39 ( +M—su»m’tInfo_AùiÚ_I‹m +), + +40 +off£tof +( +M—su»m’tInfo_AùiÚ_I‹m +, +_a¢_ùx +), + +41 +a¢_MAP_M—su»m’tInfo_AùiÚ_I‹m_g2–_1 +, + +43 +a¢_MAP_M—su»m’tInfo_AùiÚ_I‹m_oms_1 +, + +47 +a¢_TYPE_desütÜ_t + + ga¢_DEF_M—su»m’tInfo_AùiÚ_I‹m + = { + +50 & +a¢_OP_SEQUENCE +, + +51 +a¢_DEF_M—su»m’tInfo_AùiÚ_I‹m_gs_1 +, + +52 ( +a¢_DEF_M—su»m’tInfo_AùiÚ_I‹m_gs_1 +) + +53 /( +a¢_DEF_M—su»m’tInfo_AùiÚ_I‹m_gs_1 +[0]), + +54 +a¢_DEF_M—su»m’tInfo_AùiÚ_I‹m_gs_1 +, + +55 ( +a¢_DEF_M—su»m’tInfo_AùiÚ_I‹m_gs_1 +) + +56 /( +a¢_DEF_M—su»m’tInfo_AùiÚ_I‹m_gs_1 +[0]), + +57 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +58 +a¢_MBR_M—su»m’tInfo_AùiÚ_I‹m_1 +, + +60 & +a¢_SPC_M—su»m’tInfo_AùiÚ_I‹m_¥ecs_1 + + + @MeasurementInfo-Action-List.c + +8  + ~"M—su»m’tInfo-AùiÚ-Li¡.h +" + +10  + ~"M—su»m’tInfo-AùiÚ-I‹m.h +" + +11 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_M—su»m’tInfo_AùiÚ_Li¡_cÚ¡r_1 + + gCC_NOTUSED + = { + +12 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +13 { +APC_CONSTRAINED +, 16, 16, 1, 65535 } , + +16 +a¢_TYPE_memb”_t + + ga¢_MBR_M—su»m’tInfo_AùiÚ_Li¡_1 +[] = { + +17 { +ATF_POINTER +, 0, 0, + +18 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)), + +20 & +a¢_DEF_M—su»m’tInfo_AùiÚ_I‹m +, + +27 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_M—su»m’tInfo_AùiÚ_Li¡_gs_1 +[] = { + +28 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +30 +a¢_SET_OF_¥ecifics_t + + ga¢_SPC_M—su»m’tInfo_AùiÚ_Li¡_¥ecs_1 + = { + +31 ( +M—su»m’tInfo_AùiÚ_Li¡ +), + +32 +off£tof +( +M—su»m’tInfo_AùiÚ_Li¡ +, +_a¢_ùx +), + +35 +a¢_TYPE_desütÜ_t + + ga¢_DEF_M—su»m’tInfo_AùiÚ_Li¡ + = { + +38 & +a¢_OP_SEQUENCE_OF +, + +39 +a¢_DEF_M—su»m’tInfo_AùiÚ_Li¡_gs_1 +, + +40 ( +a¢_DEF_M—su»m’tInfo_AùiÚ_Li¡_gs_1 +) + +41 /( +a¢_DEF_M—su»m’tInfo_AùiÚ_Li¡_gs_1 +[0]), + +42 +a¢_DEF_M—su»m’tInfo_AùiÚ_Li¡_gs_1 +, + +43 ( +a¢_DEF_M—su»m’tInfo_AùiÚ_Li¡_gs_1 +) + +44 /( +a¢_DEF_M—su»m’tInfo_AùiÚ_Li¡_gs_1 +[0]), + +45 { 0, & +a¢_PER_ty³_M—su»m’tInfo_AùiÚ_Li¡_cÚ¡r_1 +, +SEQUENCE_OF_cÚ¡¿št + }, + +46 +a¢_MBR_M—su»m’tInfo_AùiÚ_Li¡_1 +, + +48 & +a¢_SPC_M—su»m’tInfo_AùiÚ_Li¡_¥ecs_1 + + + @MeasurementInfoItem.c + +8  + ~"M—su»m’tInfoI‹m.h +" + +10 +a¢_TYPE_memb”_t + + ga¢_MBR_M—su»m’tInfoI‹m_1 +[] = { + +11 { +ATF_NOFLAGS +, 0, +off£tof +( +M—su»m’tInfoI‹m +, +m—sTy³ +), + +12 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +14 & +a¢_DEF_M—su»m’tTy³ +, + +20 { +ATF_NOFLAGS +, 0, +off£tof +( +M—su»m’tInfoI‹m +, +Ïb–InfoLi¡ +), + +21 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +23 & +a¢_DEF_Lab–InfoLi¡ +, + +30 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_M—su»m’tInfoI‹m_gs_1 +[] = { + +31 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +33 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_M—su»m’tInfoI‹m_g2–_1 +[] = { + +34 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +35 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 } + +37 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_M—su»m’tInfoI‹m_¥ecs_1 + = { + +38 ( +M—su»m’tInfoI‹m +), + +39 +off£tof +( +M—su»m’tInfoI‹m +, +_a¢_ùx +), + +40 +a¢_MAP_M—su»m’tInfoI‹m_g2–_1 +, + +45 +a¢_TYPE_desütÜ_t + + ga¢_DEF_M—su»m’tInfoI‹m + = { + +48 & +a¢_OP_SEQUENCE +, + +49 +a¢_DEF_M—su»m’tInfoI‹m_gs_1 +, + +50 ( +a¢_DEF_M—su»m’tInfoI‹m_gs_1 +) + +51 /( +a¢_DEF_M—su»m’tInfoI‹m_gs_1 +[0]), + +52 +a¢_DEF_M—su»m’tInfoI‹m_gs_1 +, + +53 ( +a¢_DEF_M—su»m’tInfoI‹m_gs_1 +) + +54 /( +a¢_DEF_M—su»m’tInfoI‹m_gs_1 +[0]), + +55 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +56 +a¢_MBR_M—su»m’tInfoI‹m_1 +, + +58 & +a¢_SPC_M—su»m’tInfoI‹m_¥ecs_1 + + + @MeasurementInfoList.c + +8  + ~"M—su»m’tInfoLi¡.h +" + +10  + ~"M—su»m’tInfoI‹m.h +" + +11 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_M—su»m’tInfoLi¡_cÚ¡r_1 + + gCC_NOTUSED + = { + +12 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +13 { +APC_CONSTRAINED +, 16, 16, 1, 65535 } , + +16 +a¢_TYPE_memb”_t + + ga¢_MBR_M—su»m’tInfoLi¡_1 +[] = { + +17 { +ATF_POINTER +, 0, 0, + +18 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)), + +20 & +a¢_DEF_M—su»m’tInfoI‹m +, + +27 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_M—su»m’tInfoLi¡_gs_1 +[] = { + +28 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +30 +a¢_SET_OF_¥ecifics_t + + ga¢_SPC_M—su»m’tInfoLi¡_¥ecs_1 + = { + +31 ( +M—su»m’tInfoLi¡ +), + +32 +off£tof +( +M—su»m’tInfoLi¡ +, +_a¢_ùx +), + +35 +a¢_TYPE_desütÜ_t + + ga¢_DEF_M—su»m’tInfoLi¡ + = { + +38 & +a¢_OP_SEQUENCE_OF +, + +39 +a¢_DEF_M—su»m’tInfoLi¡_gs_1 +, + +40 ( +a¢_DEF_M—su»m’tInfoLi¡_gs_1 +) + +41 /( +a¢_DEF_M—su»m’tInfoLi¡_gs_1 +[0]), + +42 +a¢_DEF_M—su»m’tInfoLi¡_gs_1 +, + +43 ( +a¢_DEF_M—su»m’tInfoLi¡_gs_1 +) + +44 /( +a¢_DEF_M—su»m’tInfoLi¡_gs_1 +[0]), + +45 { 0, & +a¢_PER_ty³_M—su»m’tInfoLi¡_cÚ¡r_1 +, +SEQUENCE_OF_cÚ¡¿št + }, + +46 +a¢_MBR_M—su»m’tInfoLi¡_1 +, + +48 & +a¢_SPC_M—su»m’tInfoLi¡_¥ecs_1 + + + @MeasurementLabel.c + +8  + ~"M—su»m’tLab–.h +" + +10  + ~"S-NSSAI.h +" + +40 + $memb_aRPmax_cÚ¡¿št_1 +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +41 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +42  +v®ue +; + +44 if(! +¥Œ +) { + +45 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +47 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +51 +v®ue + = *(cÚ¡ *) +¥Œ +; + +53 if(( +v®ue + >= 1 && value <= 15)) { + +57 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +59 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +62 + } +} + +65 + $memb_aRPmš_cÚ¡¿št_1 +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +66 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +67  +v®ue +; + +69 if(! +¥Œ +) { + +70 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +72 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +76 +v®ue + = *(cÚ¡ *) +¥Œ +; + +78 if(( +v®ue + >= 1 && value <= 15)) { + +82 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +84 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +87 + } +} + +90 + $memb_b™¿‹Rªge_cÚ¡¿št_1 +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +91 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +92  +v®ue +; + +94 if(! +¥Œ +) { + +95 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +97 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +101 +v®ue + = *(cÚ¡ *) +¥Œ +; + +103 if(( +v®ue + >= 1 && value <= 65535)) { + +107 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +109 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +112 + } +} + +115 + $memb_Ïy”MU_MIMO_cÚ¡¿št_1 +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +116 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +117  +v®ue +; + +119 if(! +¥Œ +) { + +120 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +122 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +126 +v®ue + = *(cÚ¡ *) +¥Œ +; + +128 if(( +v®ue + >= 1 && value <= 65535)) { + +132 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +134 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +137 + } +} + +140 + $memb_di¡BšX_cÚ¡¿št_1 +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +141 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +142  +v®ue +; + +144 if(! +¥Œ +) { + +145 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +147 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +151 +v®ue + = *(cÚ¡ *) +¥Œ +; + +153 if(( +v®ue + >= 1 && value <= 65535)) { + +157 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +159 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +162 + } +} + +165 + $memb_di¡BšY_cÚ¡¿št_1 +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +166 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +167  +v®ue +; + +169 if(! +¥Œ +) { + +170 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +172 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +176 +v®ue + = *(cÚ¡ *) +¥Œ +; + +178 if(( +v®ue + >= 1 && value <= 65535)) { + +182 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +184 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +187 + } +} + +190 + $memb_di¡BšZ_cÚ¡¿št_1 +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +191 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +192  +v®ue +; + +194 if(! +¥Œ +) { + +195 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +197 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +201 +v®ue + = *(cÚ¡ *) +¥Œ +; + +203 if(( +v®ue + >= 1 && value <= 65535)) { + +207 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +209 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +212 + } +} + +214  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_noLab–_cÚ¡r_2 + + gCC_NOTUSED + = { + +215 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 0, 0, 0, 0 } , + +216 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +219  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_sUM_cÚ¡r_16 + + gCC_NOTUSED + = { + +220 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 0, 0, 0, 0 } , + +221 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +224  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_´eLab–Ov”ride_cÚ¡r_22 + + gCC_NOTUSED + = { + +225 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 0, 0, 0, 0 } , + +226 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +229  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_¡¬tEndInd_cÚ¡r_25 + + gCC_NOTUSED + = { + +230 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 1, 1, 0, 1 } , + +231 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +234  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_mš_cÚ¡r_29 + + gCC_NOTUSED + = { + +235 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 0, 0, 0, 0 } , + +236 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +239  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_max_cÚ¡r_32 + + gCC_NOTUSED + = { + +240 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 0, 0, 0, 0 } , + +241 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +244  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_avg_cÚ¡r_35 + + gCC_NOTUSED + = { + +245 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 0, 0, 0, 0 } , + +246 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +249  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_memb_aRPmax_cÚ¡r_12 + + gCC_NOTUSED + = { + +250 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 4, 4, 1, 15 } , + +251 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +254  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_memb_aRPmš_cÚ¡r_13 + + gCC_NOTUSED + = { + +255 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 4, 4, 1, 15 } , + +256 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +259  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_memb_b™¿‹Rªge_cÚ¡r_14 + + gCC_NOTUSED + = { + +260 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 16, 16, 1, 65535 } , + +261 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +264  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_memb_Ïy”MU_MIMO_cÚ¡r_15 + + gCC_NOTUSED + = { + +265 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 16, 16, 1, 65535 } , + +266 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +269  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_memb_di¡BšX_cÚ¡r_19 + + gCC_NOTUSED + = { + +270 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 16, 16, 1, 65535 } , + +271 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +274  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_memb_di¡BšY_cÚ¡r_20 + + gCC_NOTUSED + = { + +275 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 16, 16, 1, 65535 } , + +276 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +279  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_memb_di¡BšZ_cÚ¡r_21 + + gCC_NOTUSED + = { + +280 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 16, 16, 1, 65535 } , + +281 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +284 cÚ¡ +a¢_INTEGER_’um_m­_t + + ga¢_MAP_noLab–_v®ue2’um_2 +[] = { + +288 cÚ¡  + ga¢_MAP_noLab–_’um2v®ue_2 +[] = { + +292 cÚ¡ +a¢_INTEGER_¥ecifics_t + + ga¢_SPC_noLab–_¥ecs_2 + = { + +293 +a¢_MAP_noLab–_v®ue2’um_2 +, + +294 +a¢_MAP_noLab–_’um2v®ue_2 +, + +301 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_noLab–_gs_2 +[] = { + +302 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +303 ( +ASN_TAG_CLASS_UNIVERSAL + | (10 << 2)) + +306 +a¢_TYPE_desütÜ_t + + ga¢_DEF_noLab–_2 + = { + +309 & +a¢_OP_N©iveEnum”©ed +, + +310 +a¢_DEF_noLab–_gs_2 +, + +311 ( +a¢_DEF_noLab–_gs_2 +) + +312 /( +a¢_DEF_noLab–_gs_2 +[0]) - 1, + +313 +a¢_DEF_noLab–_gs_2 +, + +314 ( +a¢_DEF_noLab–_gs_2 +) + +315 /( +a¢_DEF_noLab–_gs_2 +[0]), + +316 { 0, & +a¢_PER_ty³_noLab–_cÚ¡r_2 +, +N©iveEnum”©ed_cÚ¡¿št + }, + +318 & +a¢_SPC_noLab–_¥ecs_2 + + +321 cÚ¡ +a¢_INTEGER_’um_m­_t + + ga¢_MAP_sUM_v®ue2’um_16 +[] = { + +325 cÚ¡  + ga¢_MAP_sUM_’um2v®ue_16 +[] = { + +329 cÚ¡ +a¢_INTEGER_¥ecifics_t + + ga¢_SPC_sUM_¥ecs_16 + = { + +330 +a¢_MAP_sUM_v®ue2’um_16 +, + +331 +a¢_MAP_sUM_’um2v®ue_16 +, + +338 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_sUM_gs_16 +[] = { + +339 ( +ASN_TAG_CLASS_CONTEXT + | (12 << 2)), + +340 ( +ASN_TAG_CLASS_UNIVERSAL + | (10 << 2)) + +343 +a¢_TYPE_desütÜ_t + + ga¢_DEF_sUM_16 + = { + +346 & +a¢_OP_N©iveEnum”©ed +, + +347 +a¢_DEF_sUM_gs_16 +, + +348 ( +a¢_DEF_sUM_gs_16 +) + +349 /( +a¢_DEF_sUM_gs_16 +[0]) - 1, + +350 +a¢_DEF_sUM_gs_16 +, + +351 ( +a¢_DEF_sUM_gs_16 +) + +352 /( +a¢_DEF_sUM_gs_16 +[0]), + +353 { 0, & +a¢_PER_ty³_sUM_cÚ¡r_16 +, +N©iveEnum”©ed_cÚ¡¿št + }, + +355 & +a¢_SPC_sUM_¥ecs_16 + + +358 cÚ¡ +a¢_INTEGER_’um_m­_t + + ga¢_MAP_´eLab–Ov”ride_v®ue2’um_22 +[] = { + +362 cÚ¡  + ga¢_MAP_´eLab–Ov”ride_’um2v®ue_22 +[] = { + +366 cÚ¡ +a¢_INTEGER_¥ecifics_t + + ga¢_SPC_´eLab–Ov”ride_¥ecs_22 + = { + +367 +a¢_MAP_´eLab–Ov”ride_v®ue2’um_22 +, + +368 +a¢_MAP_´eLab–Ov”ride_’um2v®ue_22 +, + +375 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_´eLab–Ov”ride_gs_22 +[] = { + +376 ( +ASN_TAG_CLASS_CONTEXT + | (16 << 2)), + +377 ( +ASN_TAG_CLASS_UNIVERSAL + | (10 << 2)) + +380 +a¢_TYPE_desütÜ_t + + ga¢_DEF_´eLab–Ov”ride_22 + = { + +383 & +a¢_OP_N©iveEnum”©ed +, + +384 +a¢_DEF_´eLab–Ov”ride_gs_22 +, + +385 ( +a¢_DEF_´eLab–Ov”ride_gs_22 +) + +386 /( +a¢_DEF_´eLab–Ov”ride_gs_22 +[0]) - 1, + +387 +a¢_DEF_´eLab–Ov”ride_gs_22 +, + +388 ( +a¢_DEF_´eLab–Ov”ride_gs_22 +) + +389 /( +a¢_DEF_´eLab–Ov”ride_gs_22 +[0]), + +390 { 0, & +a¢_PER_ty³_´eLab–Ov”ride_cÚ¡r_22 +, +N©iveEnum”©ed_cÚ¡¿št + }, + +392 & +a¢_SPC_´eLab–Ov”ride_¥ecs_22 + + +395 cÚ¡ +a¢_INTEGER_’um_m­_t + + ga¢_MAP_¡¬tEndInd_v®ue2’um_25 +[] = { + +400 cÚ¡  + ga¢_MAP_¡¬tEndInd_’um2v®ue_25 +[] = { + +405 cÚ¡ +a¢_INTEGER_¥ecifics_t + + ga¢_SPC_¡¬tEndInd_¥ecs_25 + = { + +406 +a¢_MAP_¡¬tEndInd_v®ue2’um_25 +, + +407 +a¢_MAP_¡¬tEndInd_’um2v®ue_25 +, + +414 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_¡¬tEndInd_gs_25 +[] = { + +415 ( +ASN_TAG_CLASS_CONTEXT + | (17 << 2)), + +416 ( +ASN_TAG_CLASS_UNIVERSAL + | (10 << 2)) + +419 +a¢_TYPE_desütÜ_t + + ga¢_DEF_¡¬tEndInd_25 + = { + +422 & +a¢_OP_N©iveEnum”©ed +, + +423 +a¢_DEF_¡¬tEndInd_gs_25 +, + +424 ( +a¢_DEF_¡¬tEndInd_gs_25 +) + +425 /( +a¢_DEF_¡¬tEndInd_gs_25 +[0]) - 1, + +426 +a¢_DEF_¡¬tEndInd_gs_25 +, + +427 ( +a¢_DEF_¡¬tEndInd_gs_25 +) + +428 /( +a¢_DEF_¡¬tEndInd_gs_25 +[0]), + +429 { 0, & +a¢_PER_ty³_¡¬tEndInd_cÚ¡r_25 +, +N©iveEnum”©ed_cÚ¡¿št + }, + +431 & +a¢_SPC_¡¬tEndInd_¥ecs_25 + + +434 cÚ¡ +a¢_INTEGER_’um_m­_t + + ga¢_MAP_mš_v®ue2’um_29 +[] = { + +438 cÚ¡  + ga¢_MAP_mš_’um2v®ue_29 +[] = { + +442 cÚ¡ +a¢_INTEGER_¥ecifics_t + + ga¢_SPC_mš_¥ecs_29 + = { + +443 +a¢_MAP_mš_v®ue2’um_29 +, + +444 +a¢_MAP_mš_’um2v®ue_29 +, + +451 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_mš_gs_29 +[] = { + +452 ( +ASN_TAG_CLASS_CONTEXT + | (18 << 2)), + +453 ( +ASN_TAG_CLASS_UNIVERSAL + | (10 << 2)) + +456 +a¢_TYPE_desütÜ_t + + ga¢_DEF_mš_29 + = { + +459 & +a¢_OP_N©iveEnum”©ed +, + +460 +a¢_DEF_mš_gs_29 +, + +461 ( +a¢_DEF_mš_gs_29 +) + +462 /( +a¢_DEF_mš_gs_29 +[0]) - 1, + +463 +a¢_DEF_mš_gs_29 +, + +464 ( +a¢_DEF_mš_gs_29 +) + +465 /( +a¢_DEF_mš_gs_29 +[0]), + +466 { 0, & +a¢_PER_ty³_mš_cÚ¡r_29 +, +N©iveEnum”©ed_cÚ¡¿št + }, + +468 & +a¢_SPC_mš_¥ecs_29 + + +471 cÚ¡ +a¢_INTEGER_’um_m­_t + + ga¢_MAP_max_v®ue2’um_32 +[] = { + +475 cÚ¡  + ga¢_MAP_max_’um2v®ue_32 +[] = { + +479 cÚ¡ +a¢_INTEGER_¥ecifics_t + + ga¢_SPC_max_¥ecs_32 + = { + +480 +a¢_MAP_max_v®ue2’um_32 +, + +481 +a¢_MAP_max_’um2v®ue_32 +, + +488 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_max_gs_32 +[] = { + +489 ( +ASN_TAG_CLASS_CONTEXT + | (19 << 2)), + +490 ( +ASN_TAG_CLASS_UNIVERSAL + | (10 << 2)) + +493 +a¢_TYPE_desütÜ_t + + ga¢_DEF_max_32 + = { + +496 & +a¢_OP_N©iveEnum”©ed +, + +497 +a¢_DEF_max_gs_32 +, + +498 ( +a¢_DEF_max_gs_32 +) + +499 /( +a¢_DEF_max_gs_32 +[0]) - 1, + +500 +a¢_DEF_max_gs_32 +, + +501 ( +a¢_DEF_max_gs_32 +) + +502 /( +a¢_DEF_max_gs_32 +[0]), + +503 { 0, & +a¢_PER_ty³_max_cÚ¡r_32 +, +N©iveEnum”©ed_cÚ¡¿št + }, + +505 & +a¢_SPC_max_¥ecs_32 + + +508 cÚ¡ +a¢_INTEGER_’um_m­_t + + ga¢_MAP_avg_v®ue2’um_35 +[] = { + +512 cÚ¡  + ga¢_MAP_avg_’um2v®ue_35 +[] = { + +516 cÚ¡ +a¢_INTEGER_¥ecifics_t + + ga¢_SPC_avg_¥ecs_35 + = { + +517 +a¢_MAP_avg_v®ue2’um_35 +, + +518 +a¢_MAP_avg_’um2v®ue_35 +, + +525 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_avg_gs_35 +[] = { + +526 ( +ASN_TAG_CLASS_CONTEXT + | (20 << 2)), + +527 ( +ASN_TAG_CLASS_UNIVERSAL + | (10 << 2)) + +530 +a¢_TYPE_desütÜ_t + + ga¢_DEF_avg_35 + = { + +533 & +a¢_OP_N©iveEnum”©ed +, + +534 +a¢_DEF_avg_gs_35 +, + +535 ( +a¢_DEF_avg_gs_35 +) + +536 /( +a¢_DEF_avg_gs_35 +[0]) - 1, + +537 +a¢_DEF_avg_gs_35 +, + +538 ( +a¢_DEF_avg_gs_35 +) + +539 /( +a¢_DEF_avg_gs_35 +[0]), + +540 { 0, & +a¢_PER_ty³_avg_cÚ¡r_35 +, +N©iveEnum”©ed_cÚ¡¿št + }, + +542 & +a¢_SPC_avg_¥ecs_35 + + +545 +a¢_TYPE_memb”_t + + ga¢_MBR_M—su»m’tLab–_1 +[] = { + +546 { +ATF_POINTER +, 21, +off£tof +( +M—su»m’tLab– +, +noLab– +), + +547 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +549 & +a¢_DEF_noLab–_2 +, + +555 { +ATF_POINTER +, 20, +off£tof +( +M—su»m’tLab– +, +¶mnID +), + +556 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +558 & +a¢_DEF_PLMNId’t™y +, + +564 { +ATF_POINTER +, 19, +off£tof +( +M—su»m’tLab– +, +¦iûID +), + +565 ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), + +567 & +a¢_DEF_S_NSSAI +, + +573 { +ATF_POINTER +, 18, +off£tof +( +M—su»m’tLab– +, +fiveQI +), + +574 ( +ASN_TAG_CLASS_CONTEXT + | (3 << 2)), + +576 & +a¢_DEF_FiveQI +, + +582 { +ATF_POINTER +, 17, +off£tof +( +M—su»m’tLab– +, +qFI +), + +583 ( +ASN_TAG_CLASS_CONTEXT + | (4 << 2)), + +585 & +a¢_DEF_QosFlowId’tif›r +, + +591 { +ATF_POINTER +, 16, +off£tof +( +M—su»m’tLab– +, +qCI +), + +592 ( +ASN_TAG_CLASS_CONTEXT + | (5 << 2)), + +594 & +a¢_DEF_QCI +, + +600 { +ATF_POINTER +, 15, +off£tof +( +M—su»m’tLab– +, +qCImax +), + +601 ( +ASN_TAG_CLASS_CONTEXT + | (6 << 2)), + +603 & +a¢_DEF_QCI +, + +609 { +ATF_POINTER +, 14, +off£tof +( +M—su»m’tLab– +, +qCImš +), + +610 ( +ASN_TAG_CLASS_CONTEXT + | (7 << 2)), + +612 & +a¢_DEF_QCI +, + +618 { +ATF_POINTER +, 13, +off£tof +( +M—su»m’tLab– +, +aRPmax +), + +619 ( +ASN_TAG_CLASS_CONTEXT + | (8 << 2)), + +621 & +a¢_DEF_N©iveIÁeg” +, + +623 { 0, & +a¢_PER_memb_aRPmax_cÚ¡r_12 +, +memb_aRPmax_cÚ¡¿št_1 + }, + +627 { +ATF_POINTER +, 12, +off£tof +( +M—su»m’tLab– +, +aRPmš +), + +628 ( +ASN_TAG_CLASS_CONTEXT + | (9 << 2)), + +630 & +a¢_DEF_N©iveIÁeg” +, + +632 { 0, & +a¢_PER_memb_aRPmš_cÚ¡r_13 +, +memb_aRPmš_cÚ¡¿št_1 + }, + +636 { +ATF_POINTER +, 11, +off£tof +( +M—su»m’tLab– +, +b™¿‹Rªge +), + +637 ( +ASN_TAG_CLASS_CONTEXT + | (10 << 2)), + +639 & +a¢_DEF_N©iveIÁeg” +, + +641 { 0, & +a¢_PER_memb_b™¿‹Rªge_cÚ¡r_14 +, +memb_b™¿‹Rªge_cÚ¡¿št_1 + }, + +645 { +ATF_POINTER +, 10, +off£tof +( +M—su»m’tLab– +, +Ïy”MU_MIMO +), + +646 ( +ASN_TAG_CLASS_CONTEXT + | (11 << 2)), + +648 & +a¢_DEF_N©iveIÁeg” +, + +650 { 0, & +a¢_PER_memb_Ïy”MU_MIMO_cÚ¡r_15 +, +memb_Ïy”MU_MIMO_cÚ¡¿št_1 + }, + +654 { +ATF_POINTER +, 9, +off£tof +( +M—su»m’tLab– +, +sUM +), + +655 ( +ASN_TAG_CLASS_CONTEXT + | (12 << 2)), + +657 & +a¢_DEF_sUM_16 +, + +663 { +ATF_POINTER +, 8, +off£tof +( +M—su»m’tLab– +, +di¡BšX +), + +664 ( +ASN_TAG_CLASS_CONTEXT + | (13 << 2)), + +666 & +a¢_DEF_N©iveIÁeg” +, + +668 { 0, & +a¢_PER_memb_di¡BšX_cÚ¡r_19 +, +memb_di¡BšX_cÚ¡¿št_1 + }, + +672 { +ATF_POINTER +, 7, +off£tof +( +M—su»m’tLab– +, +di¡BšY +), + +673 ( +ASN_TAG_CLASS_CONTEXT + | (14 << 2)), + +675 & +a¢_DEF_N©iveIÁeg” +, + +677 { 0, & +a¢_PER_memb_di¡BšY_cÚ¡r_20 +, +memb_di¡BšY_cÚ¡¿št_1 + }, + +681 { +ATF_POINTER +, 6, +off£tof +( +M—su»m’tLab– +, +di¡BšZ +), + +682 ( +ASN_TAG_CLASS_CONTEXT + | (15 << 2)), + +684 & +a¢_DEF_N©iveIÁeg” +, + +686 { 0, & +a¢_PER_memb_di¡BšZ_cÚ¡r_21 +, +memb_di¡BšZ_cÚ¡¿št_1 + }, + +690 { +ATF_POINTER +, 5, +off£tof +( +M—su»m’tLab– +, +´eLab–Ov”ride +), + +691 ( +ASN_TAG_CLASS_CONTEXT + | (16 << 2)), + +693 & +a¢_DEF_´eLab–Ov”ride_22 +, + +699 { +ATF_POINTER +, 4, +off£tof +( +M—su»m’tLab– +, +¡¬tEndInd +), + +700 ( +ASN_TAG_CLASS_CONTEXT + | (17 << 2)), + +702 & +a¢_DEF_¡¬tEndInd_25 +, + +708 { +ATF_POINTER +, 3, +off£tof +( +M—su»m’tLab– +, +mš +), + +709 ( +ASN_TAG_CLASS_CONTEXT + | (18 << 2)), + +711 & +a¢_DEF_mš_29 +, + +717 { +ATF_POINTER +, 2, +off£tof +( +M—su»m’tLab– +, +max +), + +718 ( +ASN_TAG_CLASS_CONTEXT + | (19 << 2)), + +720 & +a¢_DEF_max_32 +, + +726 { +ATF_POINTER +, 1, +off£tof +( +M—su»m’tLab– +, +avg +), + +727 ( +ASN_TAG_CLASS_CONTEXT + | (20 << 2)), + +729 & +a¢_DEF_avg_35 +, + +736 cÚ¡  + ga¢_MAP_M—su»m’tLab–_oms_1 +[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 }; + +737 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_M—su»m’tLab–_gs_1 +[] = { + +738 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +740 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_M—su»m’tLab–_g2–_1 +[] = { + +741 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +742 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 }, + +743 { ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), 2, 0, 0 }, + +744 { ( +ASN_TAG_CLASS_CONTEXT + | (3 << 2)), 3, 0, 0 }, + +745 { ( +ASN_TAG_CLASS_CONTEXT + | (4 << 2)), 4, 0, 0 }, + +746 { ( +ASN_TAG_CLASS_CONTEXT + | (5 << 2)), 5, 0, 0 }, + +747 { ( +ASN_TAG_CLASS_CONTEXT + | (6 << 2)), 6, 0, 0 }, + +748 { ( +ASN_TAG_CLASS_CONTEXT + | (7 << 2)), 7, 0, 0 }, + +749 { ( +ASN_TAG_CLASS_CONTEXT + | (8 << 2)), 8, 0, 0 }, + +750 { ( +ASN_TAG_CLASS_CONTEXT + | (9 << 2)), 9, 0, 0 }, + +751 { ( +ASN_TAG_CLASS_CONTEXT + | (10 << 2)), 10, 0, 0 }, + +752 { ( +ASN_TAG_CLASS_CONTEXT + | (11 << 2)), 11, 0, 0 }, + +753 { ( +ASN_TAG_CLASS_CONTEXT + | (12 << 2)), 12, 0, 0 }, + +754 { ( +ASN_TAG_CLASS_CONTEXT + | (13 << 2)), 13, 0, 0 }, + +755 { ( +ASN_TAG_CLASS_CONTEXT + | (14 << 2)), 14, 0, 0 }, + +756 { ( +ASN_TAG_CLASS_CONTEXT + | (15 << 2)), 15, 0, 0 }, + +757 { ( +ASN_TAG_CLASS_CONTEXT + | (16 << 2)), 16, 0, 0 }, + +758 { ( +ASN_TAG_CLASS_CONTEXT + | (17 << 2)), 17, 0, 0 }, + +759 { ( +ASN_TAG_CLASS_CONTEXT + | (18 << 2)), 18, 0, 0 }, + +760 { ( +ASN_TAG_CLASS_CONTEXT + | (19 << 2)), 19, 0, 0 }, + +761 { ( +ASN_TAG_CLASS_CONTEXT + | (20 << 2)), 20, 0, 0 } + +763 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_M—su»m’tLab–_¥ecs_1 + = { + +764 ( +M—su»m’tLab– +), + +765 +off£tof +( +M—su»m’tLab– +, +_a¢_ùx +), + +766 +a¢_MAP_M—su»m’tLab–_g2–_1 +, + +768 +a¢_MAP_M—su»m’tLab–_oms_1 +, + +772 +a¢_TYPE_desütÜ_t + + ga¢_DEF_M—su»m’tLab– + = { + +775 & +a¢_OP_SEQUENCE +, + +776 +a¢_DEF_M—su»m’tLab–_gs_1 +, + +777 ( +a¢_DEF_M—su»m’tLab–_gs_1 +) + +778 /( +a¢_DEF_M—su»m’tLab–_gs_1 +[0]), + +779 +a¢_DEF_M—su»m’tLab–_gs_1 +, + +780 ( +a¢_DEF_M—su»m’tLab–_gs_1 +) + +781 /( +a¢_DEF_M—su»m’tLab–_gs_1 +[0]), + +782 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +783 +a¢_MBR_M—su»m’tLab–_1 +, + +785 & +a¢_SPC_M—su»m’tLab–_¥ecs_1 + + + @MeasurementRecord.c + +8  + ~"M—su»m’tRecÜd.h +" + +10  + ~"M—su»m’tRecÜdI‹m.h +" + +11 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_M—su»m’tRecÜd_cÚ¡r_1 + + gCC_NOTUSED + = { + +12 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +13 { +APC_CONSTRAINED +, 31, -1, 1, 2147483647 } , + +16 +a¢_TYPE_memb”_t + + ga¢_MBR_M—su»m’tRecÜd_1 +[] = { + +17 { +ATF_POINTER +, 0, 0, + +20 & +a¢_DEF_M—su»m’tRecÜdI‹m +, + +27 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_M—su»m’tRecÜd_gs_1 +[] = { + +28 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +30 +a¢_SET_OF_¥ecifics_t + + ga¢_SPC_M—su»m’tRecÜd_¥ecs_1 + = { + +31 ( +M—su»m’tRecÜd +), + +32 +off£tof +( +M—su»m’tRecÜd +, +_a¢_ùx +), + +35 +a¢_TYPE_desütÜ_t + + ga¢_DEF_M—su»m’tRecÜd + = { + +38 & +a¢_OP_SEQUENCE_OF +, + +39 +a¢_DEF_M—su»m’tRecÜd_gs_1 +, + +40 ( +a¢_DEF_M—su»m’tRecÜd_gs_1 +) + +41 /( +a¢_DEF_M—su»m’tRecÜd_gs_1 +[0]), + +42 +a¢_DEF_M—su»m’tRecÜd_gs_1 +, + +43 ( +a¢_DEF_M—su»m’tRecÜd_gs_1 +) + +44 /( +a¢_DEF_M—su»m’tRecÜd_gs_1 +[0]), + +45 { 0, & +a¢_PER_ty³_M—su»m’tRecÜd_cÚ¡r_1 +, +SEQUENCE_OF_cÚ¡¿št + }, + +46 +a¢_MBR_M—su»m’tRecÜd_1 +, + +48 & +a¢_SPC_M—su»m’tRecÜd_¥ecs_1 + + + @MeasurementRecordItem.c + +8  + ~"M—su»m’tRecÜdI‹m.h +" + +11 + $š‹g”_2_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +14 if(! +¥Œ +) { + +15 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +17 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +24 + } +} + +31 + $memb_š‹g”_cÚ¡¿št_1 +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +32 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +34 if(! +¥Œ +) { + +35 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +37 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +44 + } +} + +46  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_š‹g”_cÚ¡r_2 + + gCC_NOTUSED + = { + +47 { +APC_CONSTRAINED +, 32, -1, 0, 4294967295 } , + +48 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +51  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_memb_š‹g”_cÚ¡r_2 + + gCC_NOTUSED + = { + +52 { +APC_CONSTRAINED +, 32, -1, 0, 4294967295 } , + +53 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +56 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_M—su»m’tRecÜdI‹m_cÚ¡r_1 + + gCC_NOTUSED + = { + +57 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 2, 2, 0, 2 } , + +58 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +61 cÚ¡ +a¢_INTEGER_¥ecifics_t + + ga¢_SPC_š‹g”_¥ecs_2 + = { + +66 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_š‹g”_gs_2 +[] = { + +67 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +68 ( +ASN_TAG_CLASS_UNIVERSAL + | (2 << 2)) + +71 +a¢_TYPE_desütÜ_t + + ga¢_DEF_š‹g”_2 + = { + +74 & +a¢_OP_N©iveIÁeg” +, + +75 +a¢_DEF_š‹g”_gs_2 +, + +76 ( +a¢_DEF_š‹g”_gs_2 +) + +77 /( +a¢_DEF_š‹g”_gs_2 +[0]) - 1, + +78 +a¢_DEF_š‹g”_gs_2 +, + +79 ( +a¢_DEF_š‹g”_gs_2 +) + +80 /( +a¢_DEF_š‹g”_gs_2 +[0]), + +81 { 0, & +a¢_PER_ty³_š‹g”_cÚ¡r_2 +, +š‹g”_2_cÚ¡¿št + }, + +83 & +a¢_SPC_š‹g”_¥ecs_2 + + +86 +a¢_TYPE_memb”_t + + ga¢_MBR_M—su»m’tRecÜdI‹m_1 +[] = { + +87 { +ATF_NOFLAGS +, 0, +off£tof +( +M—su»m’tRecÜdI‹m +, +choiû +. +š‹g” +), + +88 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +90 & +a¢_DEF_š‹g”_2 +, + +92 { 0, & +a¢_PER_memb_š‹g”_cÚ¡r_2 +, +memb_š‹g”_cÚ¡¿št_1 + }, + +96 { +ATF_NOFLAGS +, 0, +off£tof +( +M—su»m’tRecÜdI‹m +, +choiû +. +»® +), + +97 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +99 & +a¢_DEF_N©iveR—l +, + +105 { +ATF_NOFLAGS +, 0, +off£tof +( +M—su»m’tRecÜdI‹m +, +choiû +. +noV®ue +), + +106 ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), + +108 & +a¢_DEF_NULL +, + +115 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_M—su»m’tRecÜdI‹m_g2–_1 +[] = { + +116 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +117 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 }, + +118 { ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), 2, 0, 0 } + +120 +a¢_CHOICE_¥ecifics_t + + ga¢_SPC_M—su»m’tRecÜdI‹m_¥ecs_1 + = { + +121 ( +M—su»m’tRecÜdI‹m +), + +122 +off£tof +( +M—su»m’tRecÜdI‹m +, +_a¢_ùx +), + +123 +off£tof +( +M—su»m’tRecÜdI‹m +, +´e£Á +), + +124 ((( +M—su»m’tRecÜdI‹m + *)0)-> +´e£Á +), + +125 +a¢_MAP_M—su»m’tRecÜdI‹m_g2–_1 +, + +130 +a¢_TYPE_desütÜ_t + + ga¢_DEF_M—su»m’tRecÜdI‹m + = { + +133 & +a¢_OP_CHOICE +, + +138 { 0, & +a¢_PER_ty³_M—su»m’tRecÜdI‹m_cÚ¡r_1 +, +CHOICE_cÚ¡¿št + }, + +139 +a¢_MBR_M—su»m’tRecÜdI‹m_1 +, + +141 & +a¢_SPC_M—su»m’tRecÜdI‹m_¥ecs_1 + + + @MeasurementType.c + +8  + ~"M—su»m’tTy³.h +" + +10 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_M—su»m’tTy³_cÚ¡r_1 + + gCC_NOTUSED + = { + +11 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 1, 1, 0, 1 } , + +12 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +15 +a¢_TYPE_memb”_t + + ga¢_MBR_M—su»m’tTy³_1 +[] = { + +16 { +ATF_NOFLAGS +, 0, +off£tof +( +M—su»m’tTy³ +, +choiû +. +m—sName +), + +17 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +19 & +a¢_DEF_M—su»m’tTy³Name +, + +25 { +ATF_NOFLAGS +, 0, +off£tof +( +M—su»m’tTy³ +, +choiû +. +m—sID +), + +26 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +28 & +a¢_DEF_M—su»m’tTy³ID +, + +35 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_M—su»m’tTy³_g2–_1 +[] = { + +36 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +37 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 } + +39 +a¢_CHOICE_¥ecifics_t + + ga¢_SPC_M—su»m’tTy³_¥ecs_1 + = { + +40 ( +M—su»m’tTy³ +), + +41 +off£tof +( +M—su»m’tTy³ +, +_a¢_ùx +), + +42 +off£tof +( +M—su»m’tTy³ +, +´e£Á +), + +43 ((( +M—su»m’tTy³ + *)0)-> +´e£Á +), + +44 +a¢_MAP_M—su»m’tTy³_g2–_1 +, + +49 +a¢_TYPE_desütÜ_t + + ga¢_DEF_M—su»m’tTy³ + = { + +52 & +a¢_OP_CHOICE +, + +57 { 0, & +a¢_PER_ty³_M—su»m’tTy³_cÚ¡r_1 +, +CHOICE_cÚ¡¿št + }, + +58 +a¢_MBR_M—su»m’tTy³_1 +, + +60 & +a¢_SPC_M—su»m’tTy³_¥ecs_1 + + + @MeasurementTypeID.c + +8  + ~"M—su»m’tTy³ID.h +" + +11 + $M—su»m’tTy³ID_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13  +v®ue +; + +15 if(! +¥Œ +) { + +16 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +18 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +22 +v®ue + = *(cÚ¡ *) +¥Œ +; + +24 if(( +v®ue + >= 1 && value <= 65536)) { + +28 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +30 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +33 + } +} + +39 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_M—su»m’tTy³ID_cÚ¡r_1 + + gCC_NOTUSED + = { + +40 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 16, -1, 1, 65536 } , + +41 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +44 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_M—su»m’tTy³ID_gs_1 +[] = { + +45 ( +ASN_TAG_CLASS_UNIVERSAL + | (2 << 2)) + +47 +a¢_TYPE_desütÜ_t + + ga¢_DEF_M—su»m’tTy³ID + = { + +50 & +a¢_OP_N©iveIÁeg” +, + +51 +a¢_DEF_M—su»m’tTy³ID_gs_1 +, + +52 ( +a¢_DEF_M—su»m’tTy³ID_gs_1 +) + +53 /( +a¢_DEF_M—su»m’tTy³ID_gs_1 +[0]), + +54 +a¢_DEF_M—su»m’tTy³ID_gs_1 +, + +55 ( +a¢_DEF_M—su»m’tTy³ID_gs_1 +) + +56 /( +a¢_DEF_M—su»m’tTy³ID_gs_1 +[0]), + +57 { 0, & +a¢_PER_ty³_M—su»m’tTy³ID_cÚ¡r_1 +, +M—su»m’tTy³ID_cÚ¡¿št + }, + + @MeasurementTypeName.c + +8  + ~"M—su»m’tTy³Name.h +" + +10 cÚ¡  + g³rm™‹d_®phab‘_bË_1 +[256] = { + +20 cÚ¡  + g³rm™‹d_®phab‘_code2v®ue_1 +[74] = { + +28  + $check_³rm™‹d_®phab‘_1 +(cÚ¡ * +¥Œ +) { + +29 cÚ¡ * +bË + = +³rm™‹d_®phab‘_bË_1 +; + +31 cÚ¡ +PršbËSŒšg_t + * +¡ + = (cÚ¡ PršbËSŒšg_ˆ*) +¥Œ +; + +32 cÚ¡ +ušt8_t + * +ch + = +¡ +-> +buf +; + +33 cÚ¡ +ušt8_t + * +’d + = +ch + + +¡ +-> +size +; + +35 ; +ch + < +’d +; ch++) { + +36 +ušt8_t + +cv + = * +ch +; + +37 if(! +bË +[ +cv +])  -1; + +40 + } +} + +43 + $M—su»m’tTy³Name_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +44 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +45 cÚ¡ +PršbËSŒšg_t + * +¡ + = (cÚ¡ PršbËSŒšg_ˆ*) +¥Œ +; + +46 +size_t + +size +; + +48 if(! +¥Œ +) { + +49 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +51 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +55 +size + = +¡ +->size; + +57 if(( +size + >= 1 && size <= 150) + +58 && ! + `check_³rm™‹d_®phab‘_1 +( +¡ +)) { + +62 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +64 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +67 + } +} + +69  + $a¢_PER_MAP_M—su»m’tTy³Name_1_v2c +( +v®ue +) { + +70 if( +v®ue + >ð( +³rm™‹d_®phab‘_bË_1 +)/(permitted_alphabet_table_1[0])) + +72  +³rm™‹d_®phab‘_bË_1 +[ +v®ue +] - 1; + +73 + } +} + +74  + $a¢_PER_MAP_M—su»m’tTy³Name_1_c2v +( +code +) { + +75 if( +code + >ð( +³rm™‹d_®phab‘_code2v®ue_1 +)/(permitted_alphabet_code2value_1[0])) + +77  +³rm™‹d_®phab‘_code2v®ue_1 +[ +code +]; + +78 + } +} + +83 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_M—su»m’tTy³Name_cÚ¡r_1 + + gCC_NOTUSED + = { + +84 { +APC_CONSTRAINED +, 7, 7, 32, 122 } , + +85 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 8, 8, 1, 150 } , + +86 +a¢_PER_MAP_M—su»m’tTy³Name_1_v2c +, + +87 +a¢_PER_MAP_M—su»m’tTy³Name_1_c2v + + +89 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_M—su»m’tTy³Name_gs_1 +[] = { + +90 ( +ASN_TAG_CLASS_UNIVERSAL + | (19 << 2)) + +92 +a¢_TYPE_desütÜ_t + + ga¢_DEF_M—su»m’tTy³Name + = { + +95 & +a¢_OP_PršbËSŒšg +, + +96 +a¢_DEF_M—su»m’tTy³Name_gs_1 +, + +97 ( +a¢_DEF_M—su»m’tTy³Name_gs_1 +) + +98 /( +a¢_DEF_M—su»m’tTy³Name_gs_1 +[0]), + +99 +a¢_DEF_M—su»m’tTy³Name_gs_1 +, + +100 ( +a¢_DEF_M—su»m’tTy³Name_gs_1 +) + +101 /( +a¢_DEF_M—su»m’tTy³Name_gs_1 +[0]), + +102 { 0, & +a¢_PER_ty³_M—su»m’tTy³Name_cÚ¡r_1 +, +M—su»m’tTy³Name_cÚ¡¿št + }, + + @NG-RANnodeUEXnAPID.c + +8  + ~"NG-RANnodeUEXnAPID.h +" + +11 + $NG_RANnodeUEXnAPID_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +14 if(! +¥Œ +) { + +15 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +17 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +24 + } +} + +30 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_NG_RANnodeUEXnAPID_cÚ¡r_1 + + gCC_NOTUSED + = { + +31 { +APC_CONSTRAINED +, 32, -1, 0, 4294967295 } , + +32 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +35 cÚ¡ +a¢_INTEGER_¥ecifics_t + + ga¢_SPC_NG_RANnodeUEXnAPID_¥ecs_1 + = { + +40 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_NG_RANnodeUEXnAPID_gs_1 +[] = { + +41 ( +ASN_TAG_CLASS_UNIVERSAL + | (2 << 2)) + +43 +a¢_TYPE_desütÜ_t + + ga¢_DEF_NG_RANnodeUEXnAPID + = { + +46 & +a¢_OP_N©iveIÁeg” +, + +47 +a¢_DEF_NG_RANnodeUEXnAPID_gs_1 +, + +48 ( +a¢_DEF_NG_RANnodeUEXnAPID_gs_1 +) + +49 /( +a¢_DEF_NG_RANnodeUEXnAPID_gs_1 +[0]), + +50 +a¢_DEF_NG_RANnodeUEXnAPID_gs_1 +, + +51 ( +a¢_DEF_NG_RANnodeUEXnAPID_gs_1 +) + +52 /( +a¢_DEF_NG_RANnodeUEXnAPID_gs_1 +[0]), + +53 { 0, & +a¢_PER_ty³_NG_RANnodeUEXnAPID_cÚ¡r_1 +, +NG_RANnodeUEXnAPID_cÚ¡¿št + }, + +55 & +a¢_SPC_NG_RANnodeUEXnAPID_¥ecs_1 + + + @NGENB-CU-UE-W1AP-ID.c + +8  + ~"NGENB-CU-UE-W1AP-ID.h +" + +11 + $NGENB_CU_UE_W1AP_ID_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +14 if(! +¥Œ +) { + +15 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +17 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +24 + } +} + +30 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_NGENB_CU_UE_W1AP_ID_cÚ¡r_1 + + gCC_NOTUSED + = { + +31 { +APC_CONSTRAINED +, 32, -1, 0, 4294967295 } , + +32 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +35 cÚ¡ +a¢_INTEGER_¥ecifics_t + + ga¢_SPC_NGENB_CU_UE_W1AP_ID_¥ecs_1 + = { + +40 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_NGENB_CU_UE_W1AP_ID_gs_1 +[] = { + +41 ( +ASN_TAG_CLASS_UNIVERSAL + | (2 << 2)) + +43 +a¢_TYPE_desütÜ_t + + ga¢_DEF_NGENB_CU_UE_W1AP_ID + = { + +46 & +a¢_OP_N©iveIÁeg” +, + +47 +a¢_DEF_NGENB_CU_UE_W1AP_ID_gs_1 +, + +48 ( +a¢_DEF_NGENB_CU_UE_W1AP_ID_gs_1 +) + +49 /( +a¢_DEF_NGENB_CU_UE_W1AP_ID_gs_1 +[0]), + +50 +a¢_DEF_NGENB_CU_UE_W1AP_ID_gs_1 +, + +51 ( +a¢_DEF_NGENB_CU_UE_W1AP_ID_gs_1 +) + +52 /( +a¢_DEF_NGENB_CU_UE_W1AP_ID_gs_1 +[0]), + +53 { 0, & +a¢_PER_ty³_NGENB_CU_UE_W1AP_ID_cÚ¡r_1 +, +NGENB_CU_UE_W1AP_ID_cÚ¡¿št + }, + +55 & +a¢_SPC_NGENB_CU_UE_W1AP_ID_¥ecs_1 + + + @NGENB-DU-ID.c + +8  + ~"NGENB-DU-ID.h +" + +11 + $NGENB_DU_ID_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13 cÚ¡ +INTEGER_t + * +¡ + = (cÚ¡ INTEGER_ˆ*) +¥Œ +; + +14  +v®ue +; + +16 if(! +¥Œ +) { + +17 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +19 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +23 if( + `a¢_INTEGER2lÚg +( +¡ +, & +v®ue +)) { + +24 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +26 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +30 if(( +v®ue + >= 0 && value <= 68719476735)) { + +34 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +36 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +39 + } +} + +45 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_NGENB_DU_ID_cÚ¡r_1 + + gCC_NOTUSED + = { + +46 { +APC_CONSTRAINED +, 36, -1, 0, 68719476735 } , + +47 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +50 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_NGENB_DU_ID_gs_1 +[] = { + +51 ( +ASN_TAG_CLASS_UNIVERSAL + | (2 << 2)) + +53 +a¢_TYPE_desütÜ_t + + ga¢_DEF_NGENB_DU_ID + = { + +56 & +a¢_OP_INTEGER +, + +57 +a¢_DEF_NGENB_DU_ID_gs_1 +, + +58 ( +a¢_DEF_NGENB_DU_ID_gs_1 +) + +59 /( +a¢_DEF_NGENB_DU_ID_gs_1 +[0]), + +60 +a¢_DEF_NGENB_DU_ID_gs_1 +, + +61 ( +a¢_DEF_NGENB_DU_ID_gs_1 +) + +62 /( +a¢_DEF_NGENB_DU_ID_gs_1 +[0]), + +63 { 0, & +a¢_PER_ty³_NGENB_DU_ID_cÚ¡r_1 +, +NGENB_DU_ID_cÚ¡¿št + }, + + @NR-ARFCN.c + +8  + ~"NR-ARFCN.h +" + +11 + $memb_nRARFCN_cÚ¡¿št_1 +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13  +v®ue +; + +15 if(! +¥Œ +) { + +16 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +18 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +22 +v®ue + = *(cÚ¡ *) +¥Œ +; + +24 if(( +v®ue + >= 0 && value <= 3279165)) { + +28 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +30 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +33 + } +} + +35  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_memb_nRARFCN_cÚ¡r_2 + + gCC_NOTUSED + = { + +36 { +APC_CONSTRAINED +, 22, -1, 0, 3279165 } , + +37 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +40 +a¢_TYPE_memb”_t + + ga¢_MBR_NR_ARFCN_1 +[] = { + +41 { +ATF_NOFLAGS +, 0, +off£tof +( +NR_ARFCN +, +nRARFCN +), + +42 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +44 & +a¢_DEF_N©iveIÁeg” +, + +46 { 0, & +a¢_PER_memb_nRARFCN_cÚ¡r_2 +, +memb_nRARFCN_cÚ¡¿št_1 + }, + +51 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_NR_ARFCN_gs_1 +[] = { + +52 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +54 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_NR_ARFCN_g2–_1 +[] = { + +55 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 } + +57 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_NR_ARFCN_¥ecs_1 + = { + +58 ( +NR_ARFCN +), + +59 +off£tof +( +NR_ARFCN +, +_a¢_ùx +), + +60 +a¢_MAP_NR_ARFCN_g2–_1 +, + +65 +a¢_TYPE_desütÜ_t + + ga¢_DEF_NR_ARFCN + = { + +68 & +a¢_OP_SEQUENCE +, + +69 +a¢_DEF_NR_ARFCN_gs_1 +, + +70 ( +a¢_DEF_NR_ARFCN_gs_1 +) + +71 /( +a¢_DEF_NR_ARFCN_gs_1 +[0]), + +72 +a¢_DEF_NR_ARFCN_gs_1 +, + +73 ( +a¢_DEF_NR_ARFCN_gs_1 +) + +74 /( +a¢_DEF_NR_ARFCN_gs_1 +[0]), + +75 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +76 +a¢_MBR_NR_ARFCN_1 +, + +78 & +a¢_SPC_NR_ARFCN_¥ecs_1 + + + @NR-CGI.c + +8  + ~"NR-CGI.h +" + +10 +a¢_TYPE_memb”_t + + ga¢_MBR_NR_CGI_1 +[] = { + +11 { +ATF_NOFLAGS +, 0, +off£tof +( +NR_CGI +, +pLMNId’t™y +), + +12 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +14 & +a¢_DEF_PLMNId’t™y +, + +20 { +ATF_NOFLAGS +, 0, +off£tof +( +NR_CGI +, +nRC–lId’t™y +), + +21 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +23 & +a¢_DEF_NRC–lId’t™y +, + +30 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_NR_CGI_gs_1 +[] = { + +31 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +33 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_NR_CGI_g2–_1 +[] = { + +34 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +35 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 } + +37 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_NR_CGI_¥ecs_1 + = { + +38 ( +NR_CGI +), + +39 +off£tof +( +NR_CGI +, +_a¢_ùx +), + +40 +a¢_MAP_NR_CGI_g2–_1 +, + +45 +a¢_TYPE_desütÜ_t + + ga¢_DEF_NR_CGI + = { + +48 & +a¢_OP_SEQUENCE +, + +49 +a¢_DEF_NR_CGI_gs_1 +, + +50 ( +a¢_DEF_NR_CGI_gs_1 +) + +51 /( +a¢_DEF_NR_CGI_gs_1 +[0]), + +52 +a¢_DEF_NR_CGI_gs_1 +, + +53 ( +a¢_DEF_NR_CGI_gs_1 +) + +54 /( +a¢_DEF_NR_CGI_gs_1 +[0]), + +55 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +56 +a¢_MBR_NR_CGI_1 +, + +58 & +a¢_SPC_NR_CGI_¥ecs_1 + + + @NR-PCI.c + +8  + ~"NR-PCI.h +" + +11 + $NR_PCI_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13  +v®ue +; + +15 if(! +¥Œ +) { + +16 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +18 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +22 +v®ue + = *(cÚ¡ *) +¥Œ +; + +24 if(( +v®ue + >= 0 && value <= 1007)) { + +28 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +30 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +33 + } +} + +39 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_NR_PCI_cÚ¡r_1 + + gCC_NOTUSED + = { + +40 { +APC_CONSTRAINED +, 10, 10, 0, 1007 } , + +41 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +44 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_NR_PCI_gs_1 +[] = { + +45 ( +ASN_TAG_CLASS_UNIVERSAL + | (2 << 2)) + +47 +a¢_TYPE_desütÜ_t + + ga¢_DEF_NR_PCI + = { + +50 & +a¢_OP_N©iveIÁeg” +, + +51 +a¢_DEF_NR_PCI_gs_1 +, + +52 ( +a¢_DEF_NR_PCI_gs_1 +) + +53 /( +a¢_DEF_NR_PCI_gs_1 +[0]), + +54 +a¢_DEF_NR_PCI_gs_1 +, + +55 ( +a¢_DEF_NR_PCI_gs_1 +) + +56 /( +a¢_DEF_NR_PCI_gs_1 +[0]), + +57 { 0, & +a¢_PER_ty³_NR_PCI_cÚ¡r_1 +, +NR_PCI_cÚ¡¿št + }, + + @NRCellIdentity.c + +8  + ~"NRC–lId’t™y.h +" + +11 + $NRC–lId’t™y_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13 cÚ¡ +BIT_STRING_t + * +¡ + = (cÚ¡ BIT_STRING_ˆ*) +¥Œ +; + +14 +size_t + +size +; + +16 if(! +¥Œ +) { + +17 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +19 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +23 if( +¡ +-> +size + > 0) { + +25 +size + = 8 * +¡ +->siz- (¡-> +b™s_unu£d + & 0x07); + +27 +size + = 0; + +30 if(( +size + == 36)) { + +34 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +36 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +39 + } +} + +45 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_NRC–lId’t™y_cÚ¡r_1 + + gCC_NOTUSED + = { + +46 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +47 { +APC_CONSTRAINED +, 0, 0, 36, 36 } , + +50 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_NRC–lId’t™y_gs_1 +[] = { + +51 ( +ASN_TAG_CLASS_UNIVERSAL + | (3 << 2)) + +53 +a¢_TYPE_desütÜ_t + + ga¢_DEF_NRC–lId’t™y + = { + +56 & +a¢_OP_BIT_STRING +, + +57 +a¢_DEF_NRC–lId’t™y_gs_1 +, + +58 ( +a¢_DEF_NRC–lId’t™y_gs_1 +) + +59 /( +a¢_DEF_NRC–lId’t™y_gs_1 +[0]), + +60 +a¢_DEF_NRC–lId’t™y_gs_1 +, + +61 ( +a¢_DEF_NRC–lId’t™y_gs_1 +) + +62 /( +a¢_DEF_NRC–lId’t™y_gs_1 +[0]), + +63 { 0, & +a¢_PER_ty³_NRC–lId’t™y_cÚ¡r_1 +, +NRC–lId’t™y_cÚ¡¿št + }, + +65 & +a¢_SPC_BIT_STRING_¥ecs + + + @NRFrequencyBand-List.c + +8  + ~"NRF»qu’cyBªd-Li¡.h +" + +10  + ~"NRF»qu’cyBªdI‹m.h +" + +11 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_NRF»qu’cyBªd_Li¡_cÚ¡r_1 + + gCC_NOTUSED + = { + +12 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +13 { +APC_CONSTRAINED +, 5, 5, 1, 32 } , + +16 +a¢_TYPE_memb”_t + + ga¢_MBR_NRF»qu’cyBªd_Li¡_1 +[] = { + +17 { +ATF_POINTER +, 0, 0, + +18 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)), + +20 & +a¢_DEF_NRF»qu’cyBªdI‹m +, + +27 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_NRF»qu’cyBªd_Li¡_gs_1 +[] = { + +28 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +30 +a¢_SET_OF_¥ecifics_t + + ga¢_SPC_NRF»qu’cyBªd_Li¡_¥ecs_1 + = { + +31 ( +NRF»qu’cyBªd_Li¡ +), + +32 +off£tof +( +NRF»qu’cyBªd_Li¡ +, +_a¢_ùx +), + +35 +a¢_TYPE_desütÜ_t + + ga¢_DEF_NRF»qu’cyBªd_Li¡ + = { + +38 & +a¢_OP_SEQUENCE_OF +, + +39 +a¢_DEF_NRF»qu’cyBªd_Li¡_gs_1 +, + +40 ( +a¢_DEF_NRF»qu’cyBªd_Li¡_gs_1 +) + +41 /( +a¢_DEF_NRF»qu’cyBªd_Li¡_gs_1 +[0]), + +42 +a¢_DEF_NRF»qu’cyBªd_Li¡_gs_1 +, + +43 ( +a¢_DEF_NRF»qu’cyBªd_Li¡_gs_1 +) + +44 /( +a¢_DEF_NRF»qu’cyBªd_Li¡_gs_1 +[0]), + +45 { 0, & +a¢_PER_ty³_NRF»qu’cyBªd_Li¡_cÚ¡r_1 +, +SEQUENCE_OF_cÚ¡¿št + }, + +46 +a¢_MBR_NRF»qu’cyBªd_Li¡_1 +, + +48 & +a¢_SPC_NRF»qu’cyBªd_Li¡_¥ecs_1 + + + @NRFrequencyBandItem.c + +8  + ~"NRF»qu’cyBªdI‹m.h +" + +11 + $memb_äeqBªdIndiÿtÜNr_cÚ¡¿št_1 +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13  +v®ue +; + +15 if(! +¥Œ +) { + +16 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +18 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +22 +v®ue + = *(cÚ¡ *) +¥Œ +; + +24 if(( +v®ue + >= 1 && value <= 1024)) { + +28 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +30 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +33 + } +} + +35  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_memb_äeqBªdIndiÿtÜNr_cÚ¡r_2 + + gCC_NOTUSED + = { + +36 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 10, 10, 1, 1024 } , + +37 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +40 +a¢_TYPE_memb”_t + + ga¢_MBR_NRF»qu’cyBªdI‹m_1 +[] = { + +41 { +ATF_NOFLAGS +, 0, +off£tof +( +NRF»qu’cyBªdI‹m +, +äeqBªdIndiÿtÜNr +), + +42 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +44 & +a¢_DEF_N©iveIÁeg” +, + +46 { 0, & +a¢_PER_memb_äeqBªdIndiÿtÜNr_cÚ¡r_2 +, +memb_äeqBªdIndiÿtÜNr_cÚ¡¿št_1 + }, + +50 { +ATF_NOFLAGS +, 0, +off£tof +( +NRF»qu’cyBªdI‹m +, +suµÜ‹dSULBªdLi¡ +), + +51 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +53 & +a¢_DEF_SuµÜ‹dSULBªdLi¡ +, + +60 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_NRF»qu’cyBªdI‹m_gs_1 +[] = { + +61 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +63 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_NRF»qu’cyBªdI‹m_g2–_1 +[] = { + +64 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +65 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 } + +67 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_NRF»qu’cyBªdI‹m_¥ecs_1 + = { + +68 ( +NRF»qu’cyBªdI‹m +), + +69 +off£tof +( +NRF»qu’cyBªdI‹m +, +_a¢_ùx +), + +70 +a¢_MAP_NRF»qu’cyBªdI‹m_g2–_1 +, + +75 +a¢_TYPE_desütÜ_t + + ga¢_DEF_NRF»qu’cyBªdI‹m + = { + +78 & +a¢_OP_SEQUENCE +, + +79 +a¢_DEF_NRF»qu’cyBªdI‹m_gs_1 +, + +80 ( +a¢_DEF_NRF»qu’cyBªdI‹m_gs_1 +) + +81 /( +a¢_DEF_NRF»qu’cyBªdI‹m_gs_1 +[0]), + +82 +a¢_DEF_NRF»qu’cyBªdI‹m_gs_1 +, + +83 ( +a¢_DEF_NRF»qu’cyBªdI‹m_gs_1 +) + +84 /( +a¢_DEF_NRF»qu’cyBªdI‹m_gs_1 +[0]), + +85 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +86 +a¢_MBR_NRF»qu’cyBªdI‹m_1 +, + +88 & +a¢_SPC_NRF»qu’cyBªdI‹m_¥ecs_1 + + + @NRFrequencyInfo.c + +8  + ~"NRF»qu’cyInfo.h +" + +10  +a¢_TYPE_memb”_t + + ga¢_MBR_NRF»qu’cyInfo_1 +[] = { + +11 { +ATF_NOFLAGS +, 0, +off£tof +( +NRF»qu’cyInfo +, +ÄARFCN +), + +12 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +14 & +a¢_DEF_NR_ARFCN +, + +20 { +ATF_NOFLAGS +, 0, +off£tof +( +NRF»qu’cyInfo +, +äequ’cyBªd_Li¡ +), + +21 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +23 & +a¢_DEF_NRF»qu’cyBªd_Li¡ +, + +29 { +ATF_POINTER +, 1, +off£tof +( +NRF»qu’cyInfo +, +äequ’cyShiá7p5khz +), + +30 ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), + +32 & +a¢_DEF_NRF»qu’cyShiá7p5khz +, + +39 cÚ¡  + ga¢_MAP_NRF»qu’cyInfo_oms_1 +[] = { 2 }; + +40 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_NRF»qu’cyInfo_gs_1 +[] = { + +41 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +43 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_NRF»qu’cyInfo_g2–_1 +[] = { + +44 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +45 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 }, + +46 { ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), 2, 0, 0 } + +48  +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_NRF»qu’cyInfo_¥ecs_1 + = { + +49 ( +NRF»qu’cyInfo +), + +50 +off£tof +( +NRF»qu’cyInfo +, +_a¢_ùx +), + +51 +a¢_MAP_NRF»qu’cyInfo_g2–_1 +, + +53 +a¢_MAP_NRF»qu’cyInfo_oms_1 +, + +57 +a¢_TYPE_desütÜ_t + + ga¢_DEF_NRF»qu’cyInfo + = { + +60 & +a¢_OP_SEQUENCE +, + +61 +a¢_DEF_NRF»qu’cyInfo_gs_1 +, + +62 ( +a¢_DEF_NRF»qu’cyInfo_gs_1 +) + +63 /( +a¢_DEF_NRF»qu’cyInfo_gs_1 +[0]), + +64 +a¢_DEF_NRF»qu’cyInfo_gs_1 +, + +65 ( +a¢_DEF_NRF»qu’cyInfo_gs_1 +) + +66 /( +a¢_DEF_NRF»qu’cyInfo_gs_1 +[0]), + +67 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +68 +a¢_MBR_NRF»qu’cyInfo_1 +, + +70 & +a¢_SPC_NRF»qu’cyInfo_¥ecs_1 + + + @NRFrequencyShift7p5khz.c + +8  + ~"NRF»qu’cyShiá7p5khz.h +" + +14 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_NRF»qu’cyShiá7p5khz_cÚ¡r_1 + + gCC_NOTUSED + = { + +15 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 1, 1, 0, 1 } , + +16 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +19 cÚ¡ +a¢_INTEGER_’um_m­_t + + ga¢_MAP_NRF»qu’cyShiá7p5khz_v®ue2’um_1 +[] = { + +24 cÚ¡  + ga¢_MAP_NRF»qu’cyShiá7p5khz_’um2v®ue_1 +[] = { + +29 cÚ¡ +a¢_INTEGER_¥ecifics_t + + ga¢_SPC_NRF»qu’cyShiá7p5khz_¥ecs_1 + = { + +30 +a¢_MAP_NRF»qu’cyShiá7p5khz_v®ue2’um_1 +, + +31 +a¢_MAP_NRF»qu’cyShiá7p5khz_’um2v®ue_1 +, + +38 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_NRF»qu’cyShiá7p5khz_gs_1 +[] = { + +39 ( +ASN_TAG_CLASS_UNIVERSAL + | (10 << 2)) + +41 +a¢_TYPE_desütÜ_t + + ga¢_DEF_NRF»qu’cyShiá7p5khz + = { + +44 & +a¢_OP_N©iveEnum”©ed +, + +45 +a¢_DEF_NRF»qu’cyShiá7p5khz_gs_1 +, + +46 ( +a¢_DEF_NRF»qu’cyShiá7p5khz_gs_1 +) + +47 /( +a¢_DEF_NRF»qu’cyShiá7p5khz_gs_1 +[0]), + +48 +a¢_DEF_NRF»qu’cyShiá7p5khz_gs_1 +, + +49 ( +a¢_DEF_NRF»qu’cyShiá7p5khz_gs_1 +) + +50 /( +a¢_DEF_NRF»qu’cyShiá7p5khz_gs_1 +[0]), + +51 { 0, & +a¢_PER_ty³_NRF»qu’cyShiá7p5khz_cÚ¡r_1 +, +N©iveEnum”©ed_cÚ¡¿št + }, + +53 & +a¢_SPC_NRF»qu’cyShiá7p5khz_¥ecs_1 + + + @NULL.c + +5  + ~ + +6  + ~ + +7  + ~ + +8  + ~ + +13 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_NULL_gs +[] = { + +14 ( +ASN_TAG_CLASS_UNIVERSAL + | (5 << 2)) + +16 +a¢_TYPE_ݔ©iÚ_t + + ga¢_OP_NULL + = { + +17 +BOOLEAN_ä“ +, + +18 +NULL_´št +, + +19 +NULL_com·» +, + +20 +BOOLEAN_decode_b” +, + +21 +NULL_’code_d” +, + +22 +NULL_decode_x” +, + +23 +NULL_’code_x” +, + +24 #ifdef +ASN_DISABLE_OER_SUPPORT + + +28 +NULL_decode_Ûr +, + +29 +NULL_’code_Ûr +, + +31 #ifdef +ASN_DISABLE_PER_SUPPORT + + +37 +NULL_decode_u³r +, + +38 +NULL_’code_u³r +, + +39 +NULL_decode_­” +, + +40 +NULL_’code_­” +, + +42 +NULL_¿ndom_fžl +, + +45 +a¢_TYPE_desütÜ_t + + ga¢_DEF_NULL + = { + +48 & +a¢_OP_NULL +, + +49 +a¢_DEF_NULL_gs +, + +50 ( +a¢_DEF_NULL_gs +) / (asn_DEF_NULL_tags[0]), + +51 +a¢_DEF_NULL_gs +, + +52 ( +a¢_DEF_NULL_gs +) / (asn_DEF_NULL_tags[0]), + +53 { 0, 0, +a¢_g’”ic_no_cÚ¡¿št + }, + +58 +a¢_’c_rv®_t + + +59 + $NULL_’code_d” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +±r +,  +g_mode +, + +60 +b”_Žv_g_t + +g +, +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +61 +a¢_’c_rv®_t + +”v® + = {0,0,0}; + +63 +”v® +. +’coded + = + `d”_wr™e_gs +( +td +, 0, +g_mode +, 0, +g +, +cb +, +­p_key +); + +64 if( +”v® +. +’coded + == -1) { + +65 +”v® +. +çžed_ty³ + = +td +; + +66 +”v® +. +¡ruùu»_±r + = +±r +; + +69 + `ASN__ENCODED_OK +( +”v® +); + +70 + } +} + +72 +a¢_’c_rv®_t + + +73 + $NULL_’code_x” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +,  +žev– +, + +74 +x”_’cod”_æags_e + +æags +, +a¢_­p_cÚsume_by‹s_f + * +cb +, + +75 * +­p_key +) { + +76 +a¢_’c_rv®_t + +” + = {0,0,0}; + +78 () +td +; + +79 () +¥Œ +; + +80 () +žev– +; + +81 () +æags +; + +82 () +cb +; + +83 () +­p_key +; + +86 +” +. +’coded + = 0; + +87 + `ASN__ENCODED_OK +( +” +); + +88 + } +} + +91  +x”_pbd_rv® + + +92 + $NULL__x”_body_decode +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, * +¥Œ +, + +93 cÚ¡ * +chunk_buf +, +size_t + +chunk_size +) { + +94 () +td +; + +95 () +¥Œ +; + +96 () +chunk_buf +; + +101 if( +chunk_size +) + +102  +XPBD_BROKEN_ENCODING +; + +104  +XPBD_BODY_CONSUMED +; + +105 + } +} + +107 +a¢_dec_rv®_t + + +108 + $NULL_decode_x” +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +109 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¥Œ +, + +110 cÚ¡ * +Ýt_mÇme +, cÚ¡ * +buf_±r +, +size_t + +size +) { + +111  + `x”_decode_´im™ive +( +Ýt_codec_ùx +, +td +, + +112 +¥Œ +, ( +NULL_t +), +Ýt_mÇme +, +buf_±r +, +size +, + +113 +NULL__x”_body_decode +); + +114 + } +} + +117 + $NULL_com·» +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +a +, cÚ¡ * +b +) { + +118 () +td +; + +119 () +a +; + +120 () +b +; + +122 + } +} + +125 + $NULL_´št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +,  +žev– +, + +126 +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +127 () +td +; + +128 () +žev– +; + +130 if( +¥Œ +) { + +131  ( + `cb +("<´e£Á>", 9, +­p_key +) < 0) ? -1 : 0; + +133  ( + `cb +("", 8, +­p_key +) < 0) ? -1 : 0; + +135 + } +} + +137 #iâdeà +ASN_DISABLE_OER_SUPPORT + + +139 +a¢_dec_rv®_t + + +140 + $NULL_decode_Ûr +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +141 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +142 cÚ¡ +a¢_Ûr_cÚ¡¿šts_t + * +cÚ¡¿šts +, ** +¥Œ +, + +143 cÚ¡ * +±r +, +size_t + +size +) { + +144 +a¢_dec_rv®_t + +rv + = { +RC_OK +, 0}; + +145 () +Ýt_codec_ùx +; + +146 () +td +; + +147 () +cÚ¡¿šts +; + +148 () +±r +; + +149 () +size +; + +151 if(!* +¥Œ +) { + +152 * +¥Œ + = + `MALLOC +(( +NULL_t +)); + +153 if(* +¥Œ +) { + +154 *( +NULL_t + *)* +¥Œ + = 0; + +156 +ASN__DECODE_FAILED +; + +160  +rv +; + +161 + } +} + +163 +a¢_’c_rv®_t + + +164 + $NULL_’code_Ûr +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +165 cÚ¡ +a¢_Ûr_cÚ¡¿šts_t + * +cÚ¡¿šts +, cÚ¡ * +¥Œ +, + +166 +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +167 +a¢_’c_rv®_t + +” + = {0,0,0}; + +169 () +td +; + +170 () +¥Œ +; + +171 () +cÚ¡¿šts +; + +172 () +cb +; + +173 () +­p_key +; + +175 +” +. +’coded + = 0; + +177 + `ASN__ENCODED_OK +( +” +); + +178 + } +} + +182 #iâdeà +ASN_DISABLE_PER_SUPPORT + + +184 +a¢_dec_rv®_t + + +185 + $NULL_decode_u³r +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +186 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +187 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, ** +¥Œ +, + +188 +a¢_³r_d©a_t + * +pd +) { + +189 +a¢_dec_rv®_t + +rv +; + +191 () +Ýt_codec_ùx +; + +192 () +td +; + +193 () +cÚ¡¿šts +; + +194 () +pd +; + +196 if(!* +¥Œ +) { + +197 * +¥Œ + = + `MALLOC +(( +NULL_t +)); + +198 if(* +¥Œ +) { + +199 *( +NULL_t + *)* +¥Œ + = 0; + +201 +ASN__DECODE_FAILED +; + +209 +rv +. +code + = +RC_OK +; + +210 +rv +. +cÚsumed + = 0; + +211  +rv +; + +212 + } +} + +214 +a¢_’c_rv®_t + + +215 + $NULL_’code_u³r +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +216 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, cÚ¡ * +¥Œ +, + +217 +a¢_³r_ou_t + * +po +) { + +218 +a¢_’c_rv®_t + +” + = {0,0,0}; + +220 () +td +; + +221 () +cÚ¡¿šts +; + +222 () +¥Œ +; + +223 () +po +; + +225 +” +. +’coded + = 0; + +226 + `ASN__ENCODED_OK +( +” +); + +227 + } +} + +229 +a¢_dec_rv®_t + + +230 + $NULL_decode_­” +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +231 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +232 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, ** +¥Œ +, +a¢_³r_d©a_t + * +pd +) { + +233 +a¢_dec_rv®_t + +rv + = { +RC_OK +, 0}; + +235 () +Ýt_codec_ùx +; + +236 () +td +; + +237 () +cÚ¡¿šts +; + +238 () +pd +; + +240 if(!* +¥Œ +) { + +241 * +¥Œ + = + `MALLOC +(( +NULL_t +)); + +242 if(* +¥Œ +) { + +243 *( +NULL_t + *)* +¥Œ + = 0; + +245 +ASN__DECODE_FAILED +; + +253 +rv +. +code + = +RC_OK +; + +254 +rv +. +cÚsumed + = 0; + +255  +rv +; + +256 + } +} + +259 +a¢_’c_rv®_t + + +260 + $NULL_’code_­” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +261 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +262 cÚ¡ * +¥Œ +, +a¢_³r_ou_t + * +po +) { + +263 +a¢_’c_rv®_t + +” + = {0,0,0}; + +265 () +td +; + +266 () +cÚ¡¿šts +; + +267 () +¥Œ +; + +268 () +po +; + +270 +” +. +’coded + = 0; + +271 + `ASN__ENCODED_OK +( +” +); + +272 + } +} + +276 +a¢_¿ndom_fžl_»suÉ_t + + +277 + $NULL_¿ndom_fžl +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¥Œ +, + +278 cÚ¡ +a¢_’codšg_cÚ¡¿šts_t + * +cÚ¡r +, + +279 +size_t + +max_Ëngth +) { + +280 +a¢_¿ndom_fžl_»suÉ_t + +»suÉ_ok + = { +ARFILL_OK +, 1}; + +281 +a¢_¿ndom_fžl_»suÉ_t + +»suÉ_çžed + = { +ARFILL_FAILED +, 0}; + +282 +a¢_¿ndom_fžl_»suÉ_t + +»suÉ_sk³d + = { +ARFILL_SKIPPED +, 0}; + +283 +NULL_t + * +¡ + = * +¥Œ +; + +285 () +td +; + +286 () +cÚ¡r +; + +288 if( +max_Ëngth + =ð0è +»suÉ_sk³d +; + +290 if( +¡ + =ð +NULL +) { + +291 +¡ + = ( +NULL_t + *)(* +¥Œ + = + `CALLOC +(1, (*st))); + +292 if( +¡ + =ð +NULL +) { + +293  +»suÉ_çžed +; + +297  +»suÉ_ok +; + +298 + } +} + + @NativeEnumerated.c + +12  + ~ + +13  + ~ + +18 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_N©iveEnum”©ed_gs +[] = { + +19 ( +ASN_TAG_CLASS_UNIVERSAL + | (10 << 2)) + +21 +a¢_TYPE_ݔ©iÚ_t + + ga¢_OP_N©iveEnum”©ed + = { + +22 +N©iveIÁeg”_ä“ +, + +23 +N©iveIÁeg”_´št +, + +24 +N©iveIÁeg”_com·» +, + +25 +N©iveIÁeg”_decode_b” +, + +26 +N©iveIÁeg”_’code_d” +, + +27 +N©iveIÁeg”_decode_x” +, + +28 +N©iveEnum”©ed_’code_x” +, + +29 #ifdef +ASN_DISABLE_OER_SUPPORT + + +33 +N©iveEnum”©ed_decode_Ûr +, + +34 +N©iveEnum”©ed_’code_Ûr +, + +36 #ifdef +ASN_DISABLE_PER_SUPPORT + + +42 +N©iveEnum”©ed_decode_u³r +, + +43 +N©iveEnum”©ed_’code_u³r +, + +44 +N©iveEnum”©ed_decode_­” +, + +45 +N©iveEnum”©ed_’code_­” +, + +47 +N©iveEnum”©ed_¿ndom_fžl +, + +50 +a¢_TYPE_desütÜ_t + + ga¢_DEF_N©iveEnum”©ed + = { + +53 & +a¢_OP_N©iveEnum”©ed +, + +54 +a¢_DEF_N©iveEnum”©ed_gs +, + +55 ( +a¢_DEF_N©iveEnum”©ed_gs +) / (asn_DEF_NativeEnumerated_tags[0]), + +56 +a¢_DEF_N©iveEnum”©ed_gs +, + +57 ( +a¢_DEF_N©iveEnum”©ed_gs +) / (asn_DEF_NativeEnumerated_tags[0]), + +58 { 0, 0, +a¢_g’”ic_no_cÚ¡¿št + }, + +63 +a¢_’c_rv®_t + + +64 + $N©iveEnum”©ed_’code_x” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +65  +žev– +, +x”_’cod”_æags_e + +æags +, + +66 +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +67 cÚ¡ +a¢_INTEGER_¥ecifics_t + * +¥ecs + = + +68 (cÚ¡ +a¢_INTEGER_¥ecifics_t + *) +td +-> +¥ecifics +; + +69 +a¢_’c_rv®_t + +” + = {0,0,0}; + +70 cÚ¡ * +Çtive + = (cÚ¡ *) +¥Œ +; + +71 cÚ¡ +a¢_INTEGER_’um_m­_t + * +– +; + +73 () +žev– +; + +74 () +æags +; + +76 if(! +Çtive +è +ASN__ENCODE_FAILED +; + +78 +– + = + `INTEGER_m­_v®ue2’um +( +¥ecs +, * +Çtive +); + +79 if( +– +) { + +80 +” +. +’coded + = + +81 + `a¢__fÜm©_to_ÿÎback +( +cb +, +­p_key +, "<%s/>", +– +-> +’um_Çme +); + +82 if( +” +. +’coded + < 0è +ASN__ENCODE_FAILED +; + +83 + `ASN__ENCODED_OK +( +” +); + +85 + `ASN_DEBUG +( + +88 +ASN__ENCODE_FAILED +; + +90 + } +} + +92 +a¢_dec_rv®_t + + +93 + $N©iveEnum”©ed_decode_u³r +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +94 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +95 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +96 ** +¥Œ +, +a¢_³r_d©a_t + * +pd +) { + +97 cÚ¡ +a¢_INTEGER_¥ecifics_t + * +¥ecs + = +td +-> +¥ecifics +; + +98 +a¢_dec_rv®_t + +rv® + = { +RC_OK +, 0 }; + +99 * +Çtive + = (*)* +¥Œ +; + +100 cÚ¡ +a¢_³r_cÚ¡¿št_t + * +ù + = +NULL +; + +101  +v®ue +; + +103 () +Ýt_codec_ùx +; + +105 if( +cÚ¡¿šts +è +ù + = &cÚ¡¿šts-> +v®ue +; + +106 if( +td +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +) + +107 +ù + = & +td +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +-> +v®ue +; + +108 +ASN__DECODE_FAILED +; + +109 if(! +¥ecs +è +ASN__DECODE_FAILED +; + +111 if(! +Çtive +) { + +112 +Çtive + = (*)(* +¥Œ + = + `CALLOC +(1, (*native))); + +113 if(! +Çtive +è +ASN__DECODE_FAILED +; + +116 + `ASN_DEBUG +("Decodšg % a N©iveEnum”©ed", +td +-> +Çme +); + +118 if( +ù + && ct-> +æags + & +APC_EXTENSIBLE +) { + +119  +šext + = + `³r_g‘_ãw_b™s +( +pd +, 1); + +120 if( +šext + < 0è +ASN__DECODE_STARVED +; + +121 if( +šext +è +ù + = 0; + +124 if( +ù + && ct-> +¿nge_b™s + >= 0) { + +125 +v®ue + = + `³r_g‘_ãw_b™s +( +pd +, +ù +-> +¿nge_b™s +); + +126 if( +v®ue + < 0è +ASN__DECODE_STARVED +; + +127 if( +v®ue + >ð( +¥ecs +-> +ex‹nsiÚ + + +128 ? +¥ecs +-> +ex‹nsiÚ + - 1 : s³cs-> +m­_couÁ +)) + +129 +ASN__DECODE_FAILED +; + +131 if(! +¥ecs +-> +ex‹nsiÚ +) + +132 +ASN__DECODE_FAILED +; + +136 +v®ue + = + `u³r_g‘_n¢nwn +( +pd +); + +137 if( +v®ue + < 0è +ASN__DECODE_STARVED +; + +138 +v®ue + +ð +¥ecs +-> +ex‹nsiÚ + - 1; + +139 if( +v®ue + >ð +¥ecs +-> +m­_couÁ +) + +140 +ASN__DECODE_FAILED +; + +143 * +Çtive + = +¥ecs +-> +v®ue2’um +[ +v®ue +]. +Çt_v®ue +; + +144 + `ASN_DEBUG +("Decoded % ð%ld", +td +-> +Çme +, * +Çtive +); + +146  +rv® +; + +147 + } +} + +150 + $N©iveEnum”©ed__com·r_v®ue2’um +(cÚ¡ * +­ +, cÚ¡ * +bp +) { + +151 cÚ¡ +a¢_INTEGER_’um_m­_t + * +a + = +­ +; + +152 cÚ¡ +a¢_INTEGER_’um_m­_t + * +b + = +bp +; + +153 if( +a +-> +Çt_v®ue + =ð +b +->nat_value) + +155 if( +a +-> +Çt_v®ue + < +b +->nat_value) + +158 + } +} + +160 +a¢_’c_rv®_t + + +161 + $N©iveEnum”©ed_’code_u³r +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +162 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +163 cÚ¡ * +¥Œ +, +a¢_³r_ou_t + * +po +) { + +164 cÚ¡ +a¢_INTEGER_¥ecifics_t + * +¥ecs + = + +165 (cÚ¡ +a¢_INTEGER_¥ecifics_t + *) +td +-> +¥ecifics +; + +166 +a¢_’c_rv®_t + +” + = {0,0,0}; + +167  +Çtive +, +v®ue +; + +168 cÚ¡ +a¢_³r_cÚ¡¿št_t + * +ù + = +NULL +; + +169  +šext + = 0; + +170 +a¢_INTEGER_’um_m­_t + +key +; + +171 cÚ¡ +a¢_INTEGER_’um_m­_t + * +kf +; + +173 if(! +¥Œ +è +ASN__ENCODE_FAILED +; + +174 if(! +¥ecs +è +ASN__ENCODE_FAILED +; + +176 if( +cÚ¡¿šts +è +ù + = &cÚ¡¿šts-> +v®ue +; + +177 if( +td +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +) + +178 +ù + = & +td +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +-> +v®ue +; + +179 +ASN__ENCODE_FAILED +; + +181 + `ASN_DEBUG +("Encodšg % a N©iveEnum”©ed", +td +-> +Çme +); + +183 +” +. +’coded + = 0; + +185 +Çtive + = *(cÚ¡ *) +¥Œ +; + +187 +key +. +Çt_v®ue + = +Çtive +; + +188 +kf + = + `b£¬ch +(& +key +, +¥ecs +-> +v®ue2’um +, s³cs-> +m­_couÁ +, + +189 ( +key +), +N©iveEnum”©ed__com·r_v®ue2’um +); + +190 if(! +kf +) { + +191 + `ASN_DEBUG +("Nؖem’ˆcÜ»¥Úd tØ%ld", +Çtive +); + +192 +ASN__ENCODE_FAILED +; + +194 +v®ue + = +kf + - +¥ecs +-> +v®ue2’um +; + +196 if( +ù + && ct-> +¿nge_b™s + >= 0) { + +197  +cmpW™h + = +¥ecs +-> +ex‹nsiÚ + + +198 ? +¥ecs +-> +ex‹nsiÚ + - 1 : s³cs-> +m­_couÁ +; + +199 if( +v®ue + >ð +cmpW™h +) + +200 +šext + = 1; + +202 if( +ù + && ct-> +æags + & +APC_EXTENSIBLE +) { + +203 if( + `³r_put_ãw_b™s +( +po +, +šext +, 1)) + +204 +ASN__ENCODE_FAILED +; + +205 if( +šext +è +ù + = 0; + +206 } if( +šext +) { + +207 +ASN__ENCODE_FAILED +; + +210 if( +ù + && ct-> +¿nge_b™s + >= 0) { + +211 if( + `³r_put_ãw_b™s +( +po +, +v®ue +, +ù +-> +¿nge_b™s +)) + +212 +ASN__ENCODE_FAILED +; + +213 + `ASN__ENCODED_OK +( +” +); + +216 if(! +¥ecs +-> +ex‹nsiÚ +) + +217 +ASN__ENCODE_FAILED +; + +222 + `ASN_DEBUG +("value = %ld,ƒxt = %d, inext = %d,„es = %ld", + +223 +v®ue +, +¥ecs +-> +ex‹nsiÚ +, +šext +, + +224 +v®ue + - ( +šext + ? ( +¥ecs +-> +ex‹nsiÚ + - 1) : 0)); + +225 if( + `u³r_put_n¢nwn +( +po +, +v®ue + - ( +šext + ? ( +¥ecs +-> +ex‹nsiÚ + - 1) : 0))) + +226 +ASN__ENCODE_FAILED +; + +228 + `ASN__ENCODED_OK +( +” +); + +229 + } +} + +231 +a¢_dec_rv®_t + + +232 + $N©iveEnum”©ed_decode_­” +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +233 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +234 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +235 ** +¥Œ +, +a¢_³r_d©a_t + * +pd +) { + +236 cÚ¡ +a¢_INTEGER_¥ecifics_t + * +¥ecs + = (cÚ¡‡¢_INTEGER_¥ecifics_ˆ*) +td +-> +¥ecifics +; + +237 +a¢_dec_rv®_t + +rv® + = { +RC_OK +, 0 }; + +238 * +Çtive + = (*)* +¥Œ +; + +239 cÚ¡ +a¢_³r_cÚ¡¿št_t + * +ù + = +NULL +; + +240  +v®ue +; + +242 () +Ýt_codec_ùx +; + +244 if( +cÚ¡¿šts +è +ù + = &cÚ¡¿šts-> +v®ue +; + +245 if( +td +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +) + +246 +ù + = & +td +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +-> +v®ue +; + +247 +ASN__DECODE_FAILED +; + +248 if(! +¥ecs +è +ASN__DECODE_FAILED +; + +250 if(! +Çtive +) { + +251 +Çtive + = (*)(* +¥Œ + = + `CALLOC +(1, (*native))); + +252 if(! +Çtive +è +ASN__DECODE_FAILED +; + +255 + `ASN_DEBUG +("Decodšg % a N©iveEnum”©ed", +td +-> +Çme +); + +257 if( +ù + && ct-> +æags + & +APC_EXTENSIBLE +) { + +258  +šext + = + `³r_g‘_ãw_b™s +( +pd +, 1); + +259 if( +šext + < 0è +ASN__DECODE_STARVED +; + +260 if( +šext +è +ù + = 0; + +264 if( +ù + && ct-> +uµ”_bound + >= 255) { + +265  +·ddšg + = 0; + +266 +·ddšg + = (8 - ( +pd +-> +moved + % 8)) % 8; + +267 + `ASN_DEBUG +("FÜ N©iveEnum”©ed %s,off£tð%lu Paddšg b™ ð%d", +td +-> +Çme +, +pd +-> +moved +, +·ddšg +); + +268 + `ASN_DEBUG +("FÜ N©iveEnum”©ed %s, uµ” bound = %lu", +td +-> +Çme +, +ù +-> +uµ”_bound +); + +269 if( +·ddšg + > 0) + +270 + `³r_g‘_ãw_b™s +( +pd +, +·ddšg +); + +273 if( +ù + && ct-> +¿nge_b™s + >= 0) { + +274 +v®ue + = + `³r_g‘_ãw_b™s +( +pd +, +ù +-> +¿nge_b™s +); + +275 if( +v®ue + < 0è +ASN__DECODE_STARVED +; + +276 if( +v®ue + >ð( +¥ecs +-> +ex‹nsiÚ + + +277 ? +¥ecs +-> +ex‹nsiÚ + - 1 : s³cs-> +m­_couÁ +)) + +278 +ASN__DECODE_FAILED +; + +280 if(! +¥ecs +-> +ex‹nsiÚ +) + +281 +ASN__DECODE_FAILED +; + +285 +v®ue + = + `u³r_g‘_n¢nwn +( +pd +); + +286 if( +v®ue + < 0è +ASN__DECODE_STARVED +; + +287 +v®ue + +ð +¥ecs +-> +ex‹nsiÚ + - 1; + +288 if( +v®ue + >ð +¥ecs +-> +m­_couÁ +) + +289 +ASN__DECODE_FAILED +; + +292 * +Çtive + = +¥ecs +-> +v®ue2’um +[ +v®ue +]. +Çt_v®ue +; + +293 + `ASN_DEBUG +("Decoded % ð%ld", +td +-> +Çme +, * +Çtive +); + +295  +rv® +; + +296 + } +} + +298 +a¢_’c_rv®_t + + +299 + $N©iveEnum”©ed_’code_­” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +300 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +301 cÚ¡ * +¥Œ +, +a¢_³r_ou_t + * +po +) { + +302 cÚ¡ +a¢_INTEGER_¥ecifics_t + * +¥ecs + = (cÚ¡‡¢_INTEGER_¥ecifics_ˆ*) +td +-> +¥ecifics +; + +303 +a¢_’c_rv®_t + +” + = {0,0,0}; + +304  +Çtive +, +v®ue +; + +305 cÚ¡ +a¢_³r_cÚ¡¿št_t + * +ù + = +NULL +; + +306  +šext + = 0; + +307 +a¢_INTEGER_’um_m­_t + +key +; + +308 +a¢_INTEGER_’um_m­_t + * +kf +; + +310 if(! +¥Œ +è +ASN__ENCODE_FAILED +; + +311 if(! +¥ecs +è +ASN__ENCODE_FAILED +; + +313 if( +cÚ¡¿šts +è +ù + = &cÚ¡¿šts-> +v®ue +; + +314 if( +td +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +) + +315 +ù + = & +td +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +-> +v®ue +; + +316 +ASN__ENCODE_FAILED +; + +318 + `ASN_DEBUG +("Encodšg % a N©iveEnum”©ed", +td +-> +Çme +); + +320 +” +. +’coded + = 0; + +322 +Çtive + = *(cÚ¡ *) +¥Œ +; + +323 if( +Çtive + < 0è +ASN__ENCODE_FAILED +; + +325 +key +. +Çt_v®ue + = +Çtive +; + +326 +kf + = + `b£¬ch +(& +key +, +¥ecs +-> +v®ue2’um +, s³cs-> +m­_couÁ +, + +327 ( +key +), +N©iveEnum”©ed__com·r_v®ue2’um +); + +328 if(! +kf +) { + +329 + `ASN_DEBUG +("Nؖem’ˆcÜ»¥Úd tØ%ld", +Çtive +); + +330 +ASN__ENCODE_FAILED +; + +332 +v®ue + = +kf + - +¥ecs +-> +v®ue2’um +; + +334 if( +ù + && ct-> +¿nge_b™s + >= 0) { + +335  +cmpW™h + = +¥ecs +-> +ex‹nsiÚ + + +336 ? +¥ecs +-> +ex‹nsiÚ + - 1 : s³cs-> +m­_couÁ +; + +337 if( +v®ue + >ð +cmpW™h +) + +338 +šext + = 1; + +340 if( +ù + && ct-> +æags + & +APC_EXTENSIBLE +) { + +341 if( + `³r_put_ãw_b™s +( +po +, +šext +, 1)) + +342 +ASN__ENCODE_FAILED +; + +343 if( +šext +è +ù + = 0; + +344 } if( +šext +) { + +345 +ASN__ENCODE_FAILED +; + +348 if( +ù + && ct-> +¿nge_b™s + >= 0) { + +349 if( + `³r_put_ãw_b™s +( +po +, +v®ue +, +ù +-> +¿nge_b™s +)) + +350 +ASN__ENCODE_FAILED +; + +351 + `ASN__ENCODED_OK +( +” +); + +354 if(! +¥ecs +-> +ex‹nsiÚ +) + +355 +ASN__ENCODE_FAILED +; + +360 + `ASN_DEBUG +("value = %ld,ƒxt = %d, inext = %d,„es = %ld", + +361 +v®ue +, +¥ecs +-> +ex‹nsiÚ +, +šext +, + +362 +v®ue + - ( +šext + ? ( +¥ecs +-> +ex‹nsiÚ + - 1) : 0)); + +363 if( + `u³r_put_n¢nwn +( +po +, +v®ue + - ( +šext + ? ( +¥ecs +-> +ex‹nsiÚ + - 1) : 0))) + +364 +ASN__ENCODE_FAILED +; + +366 + `ASN__ENCODED_OK +( +” +); + +367 + } +} + + @NativeInteger.c + +13  + ~ + +14  + ~ + +19 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_N©iveIÁeg”_gs +[] = { + +20 ( +ASN_TAG_CLASS_UNIVERSAL + | (2 << 2)) + +22 +a¢_TYPE_ݔ©iÚ_t + + ga¢_OP_N©iveIÁeg” + = { + +23 +N©iveIÁeg”_ä“ +, + +24 +N©iveIÁeg”_´št +, + +25 +N©iveIÁeg”_com·» +, + +26 +N©iveIÁeg”_decode_b” +, + +27 +N©iveIÁeg”_’code_d” +, + +28 +N©iveIÁeg”_decode_x” +, + +29 +N©iveIÁeg”_’code_x” +, + +30 #ifdef +ASN_DISABLE_OER_SUPPORT + + +34 +N©iveIÁeg”_decode_Ûr +, + +35 +N©iveIÁeg”_’code_Ûr +, + +37 #ifdef +ASN_DISABLE_PER_SUPPORT + + +43 +N©iveIÁeg”_decode_u³r +, + +44 +N©iveIÁeg”_’code_u³r +, + +45 +N©iveIÁeg”_decode_­” +, + +46 +N©iveIÁeg”_’code_­” +, + +48 +N©iveIÁeg”_¿ndom_fžl +, + +51 +a¢_TYPE_desütÜ_t + + ga¢_DEF_N©iveIÁeg” + = { + +54 & +a¢_OP_N©iveIÁeg” +, + +55 +a¢_DEF_N©iveIÁeg”_gs +, + +56 ( +a¢_DEF_N©iveIÁeg”_gs +) / (asn_DEF_NativeInteger_tags[0]), + +57 +a¢_DEF_N©iveIÁeg”_gs +, + +58 ( +a¢_DEF_N©iveIÁeg”_gs +) / (asn_DEF_NativeInteger_tags[0]), + +59 { 0, 0, +a¢_g’”ic_no_cÚ¡¿št + }, + +67 +a¢_dec_rv®_t + + +68 + $N©iveIÁeg”_decode_b” +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +69 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +nšt_±r +, + +70 cÚ¡ * +buf_±r +, +size_t + +size +,  +g_mode +) { + +71 cÚ¡ +a¢_INTEGER_¥ecifics_t + * +¥ecs + = + +72 (cÚ¡ +a¢_INTEGER_¥ecifics_t + *) +td +-> +¥ecifics +; + +73 * +Çtive + = (*)* +nšt_±r +; + +74 +a¢_dec_rv®_t + +rv® +; + +75 +b”_Žv_Ën_t + +Ëngth +; + +80 if( +Çtive + =ð +NULL +) { + +81 +Çtive + = (*)(* +nšt_±r + = + `CALLOC +(1, (*native))); + +82 if( +Çtive + =ð +NULL +) { + +83 +rv® +. +code + = +RC_FAIL +; + +84 +rv® +. +cÚsumed + = 0; + +85  +rv® +; + +89 + `ASN_DEBUG +("Decoding %s‡s INTEGER (tm=%d)", + +90 +td +-> +Çme +, +g_mode +); + +95 +rv® + = + `b”_check_gs +( +Ýt_codec_ùx +, +td +, 0, +buf_±r +, +size +, + +96 +g_mode +, 0, & +Ëngth +, 0); + +97 if( +rv® +. +code + !ð +RC_OK +) + +98  +rv® +; + +100 + `ASN_DEBUG +("% Ëngth i %d by‹s", +td +-> +Çme +, () +Ëngth +); + +105 +buf_±r + = ((cÚ¡ *)buf_±rè+ +rv® +. +cÚsumed +; + +106 +size + -ð +rv® +. +cÚsumed +; + +107 if( +Ëngth + > ( +b”_Žv_Ën_t +) +size +) { + +108 +rv® +. +code + = +RC_WMORE +; + +109 +rv® +. +cÚsumed + = 0; + +110  +rv® +; + +119 +INTEGER_t + +tmp +; + +121 cÚ¡ * +cÚ¡buf +; + +122 * +nÚcÚ¡buf +; + +123 } +uncÚ¡_buf +; + +124  +l +; + +126 +uncÚ¡_buf +. +cÚ¡buf + = +buf_±r +; + +127 +tmp +. +buf + = ( +ušt8_t + *) +uncÚ¡_buf +. +nÚcÚ¡buf +; + +128 +tmp +. +size + = +Ëngth +; + +130 if(( +¥ecs +&&¥ecs-> +f›ld_unsigÃd +) + +131 ? + `a¢_INTEGER2ulÚg +(& +tmp +, (*)& +l +) + +132 : + `a¢_INTEGER2lÚg +(& +tmp +, & +l +)) { + +133 +rv® +. +code + = +RC_FAIL +; + +134 +rv® +. +cÚsumed + = 0; + +135  +rv® +; + +138 * +Çtive + = +l +; + +141 +rv® +. +code + = +RC_OK +; + +142 +rv® +. +cÚsumed + +ð +Ëngth +; + +144 + `ASN_DEBUG +("Took %ld/%ld bytesoƒncode %s (%ld)", + +145 () +rv® +. +cÚsumed +, () +Ëngth +, +td +-> +Çme +, ()* +Çtive +); + +147  +rv® +; + +148 + } +} + +153 +a¢_’c_rv®_t + + +154 + $N©iveIÁeg”_’code_d” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +sd +, cÚ¡ * +±r +, + +155  +g_mode +, +b”_Žv_g_t + +g +, + +156 +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +157  +Çtive + = *(cÚ¡ *) +±r +; + +158 +a¢_’c_rv®_t + +”v® + = {0,0,0}; + +159 +INTEGER_t + +tmp +; + +161 #ifdef +WORDS_BIGENDIAN + + +163 +tmp +. +buf + = ( +ušt8_t + *)& +Çtive +; + +164 +tmp +. +size + = ( +Çtive +); + +167 +ušt8_t + +buf +[( +Çtive +)]; + +168 +ušt8_t + * +p +; + +171  +p + = +buf + + (bufè- 1;… >ðbuf;…--, +Çtive + >>= 8) + +172 * +p + = ( +ušt8_t +) +Çtive +; + +174 +tmp +. +buf + = buf; + +175 +tmp +. +size + = ( +buf +); + +179 +”v® + = + `INTEGER_’code_d” +( +sd +, & +tmp +, +g_mode +, +g +, +cb +, +­p_key +); + +180 if( +”v® +. +¡ruùu»_±r + =ð& +tmp +) { + +181 +”v® +. +¡ruùu»_±r + = +±r +; + +183  +”v® +; + +184 + } +} + +189 +a¢_dec_rv®_t + + +190 + $N©iveIÁeg”_decode_x” +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +191 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¥Œ +, + +192 cÚ¡ * +Ýt_mÇme +, cÚ¡ * +buf_±r +, + +193 +size_t + +size +) { + +194 cÚ¡ +a¢_INTEGER_¥ecifics_t + * +¥ecs + = + +195 (cÚ¡ +a¢_INTEGER_¥ecifics_t + *) +td +-> +¥ecifics +; + +196 +a¢_dec_rv®_t + +rv® +; + +197 +INTEGER_t + +¡ +; + +198 * +¡_±r + = (*)& +¡ +; + +199 * +Çtive + = (*)* +¥Œ +; + +201 if(! +Çtive +) { + +202 +Çtive + = (*)(* +¥Œ + = + `CALLOC +(1, (*native))); + +203 if(! +Çtive +è +ASN__DECODE_FAILED +; + +206 + `mem£t +(& +¡ +, 0, (st)); + +207 +rv® + = + `INTEGER_decode_x” +( +Ýt_codec_ùx +, +td +, & +¡_±r +, + +208 +Ýt_mÇme +, +buf_±r +, +size +); + +209 if( +rv® +. +code + =ð +RC_OK +) { + +210  +l +; + +211 if(( +¥ecs +&&¥ecs-> +f›ld_unsigÃd +) + +212 ? + `a¢_INTEGER2ulÚg +(& +¡ +, (*)& +l +) + +213 : + `a¢_INTEGER2lÚg +(& +¡ +, & +l +)) { + +214 +rv® +. +code + = +RC_FAIL +; + +215 +rv® +. +cÚsumed + = 0; + +217 * +Çtive + = +l +; + +225 +rv® +. +cÚsumed + = 0; + +227 + `ASN_STRUCT_FREE_CONTENTS_ONLY +( +a¢_DEF_INTEGER +, & +¡ +); + +228  +rv® +; + +229 + } +} + +232 +a¢_’c_rv®_t + + +233 + $N©iveIÁeg”_’code_x” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +234  +žev– +, +x”_’cod”_æags_e + +æags +, + +235 +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +236 cÚ¡ +a¢_INTEGER_¥ecifics_t + * +¥ecs + = + +237 (cÚ¡ +a¢_INTEGER_¥ecifics_t + *) +td +-> +¥ecifics +; + +238  +sü©ch +[32]; + +239 +a¢_’c_rv®_t + +” + = {0,0,0}; + +240 cÚ¡ * +Çtive + = (cÚ¡ *) +¥Œ +; + +242 () +žev– +; + +243 () +æags +; + +245 if(! +Çtive +è +ASN__ENCODE_FAILED +; + +247 +” +. +’coded + = + `¢´štf +( +sü©ch +, (scratch), + +248 ( +¥ecs + && s³cs-> +f›ld_unsigÃd +) + +249 ? "%lu" : "%ld", * +Çtive +); + +250 if( +” +. +’coded + <ð0 || ( +size_t +ër.’coded >ð( +sü©ch +) + +251 || + `cb +( +sü©ch +, +” +. +’coded +, +­p_key +) < 0) + +252 +ASN__ENCODE_FAILED +; + +254 + `ASN__ENCODED_OK +( +” +); + +255 + } +} + +257 #iâdeà +ASN_DISABLE_PER_SUPPORT + + +259 +a¢_dec_rv®_t + + +260 + $N©iveIÁeg”_decode_u³r +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +261 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +262 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, ** +¥Œ +, + +263 +a¢_³r_d©a_t + * +pd +) { + +264 cÚ¡ +a¢_INTEGER_¥ecifics_t + * +¥ecs + = + +265 (cÚ¡ +a¢_INTEGER_¥ecifics_t + *) +td +-> +¥ecifics +; + +266 +a¢_dec_rv®_t + +rv® +; + +267 * +Çtive + = (*)* +¥Œ +; + +268 +INTEGER_t + +tmpšt +; + +269 * +tmpšŒ + = & +tmpšt +; + +271 () +Ýt_codec_ùx +; + +272 + `ASN_DEBUG +("Decodšg N©iveIÁeg” % (UPER)", +td +-> +Çme +); + +274 if(! +Çtive +) { + +275 +Çtive + = (*)(* +¥Œ + = + `CALLOC +(1, (*native))); + +276 if(! +Çtive +è +ASN__DECODE_FAILED +; + +279 + `mem£t +(& +tmpšt +, 0, mpint); + +280 +rv® + = + `INTEGER_decode_u³r +( +Ýt_codec_ùx +, +td +, +cÚ¡¿šts +, + +281 & +tmpšŒ +, +pd +); + +282 if( +rv® +. +code + =ð +RC_OK +) { + +283 if(( +¥ecs +&&¥ecs-> +f›ld_unsigÃd +) + +284 ? + `a¢_INTEGER2ulÚg +(& +tmpšt +, (*) +Çtive +) + +285 : + `a¢_INTEGER2lÚg +(& +tmpšt +, +Çtive +)) + +286 +rv® +. +code + = +RC_FAIL +; + +288 + `ASN_DEBUG +("NativeInteger %s got value %ld", + +289 +td +-> +Çme +, * +Çtive +); + +291 + `ASN_STRUCT_FREE_CONTENTS_ONLY +( +a¢_DEF_INTEGER +, & +tmpšt +); + +293  +rv® +; + +294 + } +} + +296 +a¢_’c_rv®_t + + +297 + $N©iveIÁeg”_’code_u³r +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +298 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +299 cÚ¡ * +¥Œ +, +a¢_³r_ou_t + * +po +) { + +300 cÚ¡ +a¢_INTEGER_¥ecifics_t + * +¥ecs + = + +301 (cÚ¡ +a¢_INTEGER_¥ecifics_t + *) +td +-> +¥ecifics +; + +302 +a¢_’c_rv®_t + +” + = {0,0,0}; + +303  +Çtive +; + +304 +INTEGER_t + +tmpšt +; + +306 if(! +¥Œ +è +ASN__ENCODE_FAILED +; + +308 +Çtive + = *(cÚ¡ *) +¥Œ +; + +310 + `ASN_DEBUG +("Encodšg N©iveIÁeg” % %ld (UPER)", +td +-> +Çme +, +Çtive +); + +312 + `mem£t +(& +tmpšt +, 0, (tmpint)); + +313 if(( +¥ecs +&&¥ecs-> +f›ld_unsigÃd +) + +314 ? + `a¢_ulÚg2INTEGER +(& +tmpšt +, +Çtive +) + +315 : + `a¢_lÚg2INTEGER +(& +tmpšt +, +Çtive +)) + +316 +ASN__ENCODE_FAILED +; + +317 +” + = + `INTEGER_’code_u³r +( +td +, +cÚ¡¿šts +, & +tmpšt +, +po +); + +318 + `ASN_STRUCT_FREE_CONTENTS_ONLY +( +a¢_DEF_INTEGER +, & +tmpšt +); + +319  +” +; + +320 + } +} + +322 +a¢_dec_rv®_t + + +323 + $N©iveIÁeg”_decode_­” +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +324 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +325 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, ** +¥Œ +, +a¢_³r_d©a_t + * +pd +) { + +327 cÚ¡ +a¢_INTEGER_¥ecifics_t + * +¥ecs + = (cÚ¡‡¢_INTEGER_¥ecifics_ˆ*) +td +-> +¥ecifics +; + +328 +a¢_dec_rv®_t + +rv® +; + +329 * +Çtive + = (*)* +¥Œ +; + +330 +INTEGER_t + +tmpšt +; + +331 * +tmpšŒ + = & +tmpšt +; + +333 () +Ýt_codec_ùx +; + +334 + `ASN_DEBUG +("Decodšg N©iveIÁeg” % (APER)", +td +-> +Çme +); + +336 if(! +Çtive +) { + +337 +Çtive + = (*)(* +¥Œ + = + `CALLOC +(1, (*native))); + +338 if(! +Çtive +è +ASN__DECODE_FAILED +; + +341 + `mem£t +(& +tmpšt +, 0, mpint); + +342 +rv® + = + `INTEGER_decode_­” +( +Ýt_codec_ùx +, +td +, +cÚ¡¿šts +, + +343 & +tmpšŒ +, +pd +); + +344 if( +rv® +. +code + =ð +RC_OK +) { + +345 if(( +¥ecs +&&¥ecs-> +f›ld_unsigÃd +) + +346 ? + `a¢_INTEGER2ulÚg +(& +tmpšt +, (*) +Çtive +) + +347 : + `a¢_INTEGER2lÚg +(& +tmpšt +, +Çtive +)) + +348 +rv® +. +code + = +RC_FAIL +; + +350 + `ASN_DEBUG +("NativeInteger %s got value %ld", + +351 +td +-> +Çme +, * +Çtive +); + +353 + `ASN_STRUCT_FREE_CONTENTS_ONLY +( +a¢_DEF_INTEGER +, & +tmpšt +); + +355  +rv® +; + +356 + } +} + +358 +a¢_’c_rv®_t + + +359 + $N©iveIÁeg”_’code_­” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +360 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +361 cÚ¡ * +¥Œ +, +a¢_³r_ou_t + * +po +) { + +363 cÚ¡ +a¢_INTEGER_¥ecifics_t + * +¥ecs + = (cÚ¡‡¢_INTEGER_¥ecifics_ˆ*) +td +-> +¥ecifics +; + +364 +a¢_’c_rv®_t + +” + = {0,0,0}; + +365  +Çtive +; + +366 +INTEGER_t + +tmpšt +; + +368 if(! +¥Œ +è +ASN__ENCODE_FAILED +; + +370 +Çtive + = *(cÚ¡ *) +¥Œ +; + +372 + `ASN_DEBUG +("Encodšg N©iveIÁeg” % %ld (APER)", +td +-> +Çme +, +Çtive +); + +374 + `mem£t +(& +tmpšt +, 0, (tmpint)); + +375 if(( +¥ecs +&&¥ecs-> +f›ld_unsigÃd +) + +376 ? + `a¢_ulÚg2INTEGER +(& +tmpšt +, () +Çtive +) + +377 : + `a¢_lÚg2INTEGER +(& +tmpšt +, +Çtive +)) + +378 +ASN__ENCODE_FAILED +; + +379 +” + = + `INTEGER_’code_­” +( +td +, +cÚ¡¿šts +, & +tmpšt +, +po +); + +380 + `ASN_STRUCT_FREE_CONTENTS_ONLY +( +a¢_DEF_INTEGER +, & +tmpšt +); + +381  +” +; + +382 + } +} + +390 + $N©iveIÁeg”_´št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +391  +žev– +, +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +392 cÚ¡ +a¢_INTEGER_¥ecifics_t + * +¥ecs + = + +393 (cÚ¡ +a¢_INTEGER_¥ecifics_t + *) +td +-> +¥ecifics +; + +394 cÚ¡ * +Çtive + = (cÚ¡ *) +¥Œ +; + +395  +sü©ch +[32]; + +396  +»t +; + +398 () +td +; + +399 () +žev– +; + +401 if( +Çtive +) { + +402  +v®ue + = * +Çtive +; + +403 +»t + = + `¢´štf +( +sü©ch +, (scratch), + +404 ( +¥ecs + && s³cs-> +f›ld_unsigÃd +è? "%lu" : "%ld", +v®ue +); + +405 + `as£¹ +( +»t + > 0 && ( +size_t +ì‘ < ( +sü©ch +)); + +406 if( + `cb +( +sü©ch +, +»t +, +­p_key +) < 0)  -1; + +407 if( +¥ecs + && ( +v®ue + >ð0 || !¥ecs-> +f›ld_unsigÃd +)) { + +408 cÚ¡ +a¢_INTEGER_’um_m­_t + * +– + = + +409 + `INTEGER_m­_v®ue2’um +( +¥ecs +, +v®ue +); + +410 if( +– +) { + +411 if( + `cb +(" (", 2, +­p_key +) < 0)  -1; + +412 if( + `cb +( +– +-> +’um_Çme +,ƒl-> +’um_Ën +, +­p_key +) < 0)  -1; + +413 if( + `cb +(")", 1, +­p_key +) < 0)  -1; + +418  ( + `cb +("", 8, +­p_key +) < 0) ? -1 : 0; + +420 + } +} + +423 + $N©iveIÁeg”_ä“ +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, * +±r +, + +424 +a¢_¡ruù_ä“_m‘hod + +m‘hod +) { + +425 if(! +td + || ! +±r +) + +428 + `ASN_DEBUG +("Freeing %s‡s INTEGER (%d, %p, Native)", + +429 +td +-> +Çme +, +m‘hod +, +±r +); + +431  +m‘hod +) { + +432  +ASFM_FREE_EVERYTHING +: + +433 + `FREEMEM +( +±r +); + +435  +ASFM_FREE_UNDERLYING +: + +437  +ASFM_FREE_UNDERLYING_AND_RESET +: + +438 + `mem£t +( +±r +, 0, ()); + +441 + } +} + +444 + $N©iveIÁeg”_com·» +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +­Œ +, cÚ¡ * +b±r +) { + +445 () +td +; + +447 if( +­Œ + && +b±r +) { + +448 cÚ¡ +a¢_INTEGER_¥ecifics_t + * +¥ecs + = + +449 (cÚ¡ +a¢_INTEGER_¥ecifics_t + *) +td +-> +¥ecifics +; + +450 if( +¥ecs + && s³cs-> +f›ld_unsigÃd +) { + +451 cÚ¡ * +a + = +­Œ +; + +452 cÚ¡ * +b + = +b±r +; + +453 if(* +a + < * +b +) { + +455 } if(* +a + > * +b +) { + +461 cÚ¡ * +a + = +­Œ +; + +462 cÚ¡ * +b + = +b±r +; + +463 if(* +a + < * +b +) { + +465 } if(* +a + > * +b +) { + +471 } if(! +­Œ +) { + +476 + } +} + +478 +a¢_¿ndom_fžl_»suÉ_t + + +479 + $N©iveIÁeg”_¿ndom_fžl +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¥Œ +, + +480 cÚ¡ +a¢_’codšg_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +481 +size_t + +max_Ëngth +) { + +482 cÚ¡ +a¢_INTEGER_¥ecifics_t + * +¥ecs + = + +483 (cÚ¡ +a¢_INTEGER_¥ecifics_t + *) +td +-> +¥ecifics +; + +484 +a¢_¿ndom_fžl_»suÉ_t + +»suÉ_ok + = { +ARFILL_OK +, 1}; + +485 +a¢_¿ndom_fžl_»suÉ_t + +»suÉ_çžed + = { +ARFILL_FAILED +, 0}; + +486 +a¢_¿ndom_fžl_»suÉ_t + +»suÉ_sk³d + = { +ARFILL_SKIPPED +, 0}; + +487 * +¡ + = * +¥Œ +; + +488 cÚ¡ +a¢_INTEGER_’um_m­_t + * +em­ +; + +489 +size_t + +em­_Ën +; + +490 +štmax_t + +v®ue +; + +491  +fšd_šside_m­ +; + +493 if( +max_Ëngth + =ð0è +»suÉ_sk³d +; + +495 if( +¡ + =ð +NULL +) { + +496 +¡ + = (*) + `CALLOC +(1, (*st)); + +497 if( +¡ + =ð +NULL +) { + +498  +»suÉ_çžed +; + +502 if( +¥ecs +) { + +503 +em­ + = +¥ecs +-> +v®ue2’um +; + +504 +em­_Ën + = +¥ecs +-> +m­_couÁ +; + +505 if( +¥ecs +-> +¡riù_’um”©iÚ +) { + +506 +fšd_šside_m­ + = +em­_Ën + > 0; + +508 +fšd_šside_m­ + = +em­_Ën + ? + `a¢_¿ndom_b‘w“n +(0, 1) : 0; + +511 +em­ + = 0; + +512 +em­_Ën + = 0; + +513 +fšd_šside_m­ + = 0; + +516 if( +fšd_šside_m­ +) { + +517 + `as£¹ +( +em­_Ën + > 0); + +518 +v®ue + = +em­ +[ + `a¢_¿ndom_b‘w“n +(0, +em­_Ën + - 1)]. +Çt_v®ue +; + +520 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +ù +; + +522 cÚ¡  +v¬ŸÁs +[] = { + +528 if( +¥ecs + && s³cs-> +f›ld_unsigÃd +) { + +529 + `as£¹ +( +v¬ŸÁs +[18] == 0); + +530 +v®ue + = +v¬ŸÁs +[ + `a¢_¿ndom_b‘w“n +( + +531 18, ( +v¬ŸÁs +) / (variants[0]) - 1)]; + +533 +v®ue + = +v¬ŸÁs +[ + `a¢_¿ndom_b‘w“n +( + +534 0, ( +v¬ŸÁs +) / (variants[0]) - 1)]; + +537 if(! +cÚ¡¿šts +ècÚ¡¿št ð& +td +-> +’codšg_cÚ¡¿šts +; + +538 +ù + = +cÚ¡¿šts + ? cÚ¡¿šts-> +³r_cÚ¡¿šts + : 0; + +539 if( +ù + && (ù-> +v®ue +. +æags + & +APC_CONSTRAINED +)) { + +540 if( +v®ue + < +ù +->v®ue. +low”_bound + || v®u> ct->v®ue. +uµ”_bound +) { + +541 +v®ue + = + `a¢_¿ndom_b‘w“n +( +ù +->v®ue. +low”_bound +, + +542 +ù +-> +v®ue +. +uµ”_bound +); + +547 * +¥Œ + = +¡ +; + +548 * +¡ + = +v®ue +; + +549  +»suÉ_ok +; + +550 + } +} + + @NativeReal.c + +12  + ~ + +13  + ~ + +14  + ~ + +15  + ~ + +16  + ~ + +17  + ~<æßt.h +> + +19 #ià +defšed +( +__þªg__ +) + +27 #´agm¨ +þªg + +dŸgno¡ic + +push + + +28 #´agm¨ +þªg + +dŸgno¡ic + +ignÜed + "-Wc11-extensions" + +29  + $a¢_i¢ª +( +d +) { + +30  + `i¢ª +( +d +); + +31 + } +} + +32 #´agm¨ +þªg + +dŸgno¡ic + +pÝ + + +34  + #a¢_i¢ª +( +v +è + `i¢ª +(v) + + ) + +40 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_N©iveR—l_gs +[] = { + +41 ( +ASN_TAG_CLASS_UNIVERSAL + | (9 << 2)) + +43 +a¢_TYPE_ݔ©iÚ_t + + ga¢_OP_N©iveR—l + = { + +44 +N©iveR—l_ä“ +, + +45 +N©iveR—l_´št +, + +46 +N©iveR—l_com·» +, + +47 +N©iveR—l_decode_b” +, + +48 +N©iveR—l_’code_d” +, + +49 +N©iveR—l_decode_x” +, + +50 +N©iveR—l_’code_x” +, + +51 #ifdef +ASN_DISABLE_OER_SUPPORT + + +55 +N©iveR—l_decode_Ûr +, + +56 +N©iveR—l_’code_Ûr +, + +58 #ifdef +ASN_DISABLE_PER_SUPPORT + + +64 +N©iveR—l_decode_u³r +, + +65 +N©iveR—l_’code_u³r +, + +66 +N©iveR—l_decode_­” +, + +67 +N©iveR—l_’code_­” +, + +69 +N©iveR—l_¿ndom_fžl +, + +72 +a¢_TYPE_desütÜ_t + + ga¢_DEF_N©iveR—l + = { + +75 & +a¢_OP_N©iveR—l +, + +76 +a¢_DEF_N©iveR—l_gs +, + +77 ( +a¢_DEF_N©iveR—l_gs +) / (asn_DEF_NativeReal_tags[0]), + +78 +a¢_DEF_N©iveR—l_gs +, + +79 ( +a¢_DEF_N©iveR—l_gs +) / (asn_DEF_NativeReal_tags[0]), + +80 { 0, 0, +a¢_g’”ic_no_cÚ¡¿št + }, + +85  +size_t + +N©iveR—l__æßt_size +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +); + +86  +N©iveR—l__g‘_doubË +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +87 cÚ¡ * +±r +); + +88  +ssize_t + +N©iveR—l__£t +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¥Œ +, + +89  +d +); + +94 +a¢_dec_rv®_t + + +95 + $N©iveR—l_decode_b” +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +96 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¥Œ +, + +97 cÚ¡ * +buf_±r +, +size_t + +size +,  +g_mode +) { + +98 +a¢_dec_rv®_t + +rv® +; + +99 +b”_Žv_Ën_t + +Ëngth +; + +101 + `ASN_DEBUG +("Decodšg % a REAL (tm=%d)", +td +-> +Çme +, +g_mode +); + +106 +rv® + = + `b”_check_gs +( +Ýt_codec_ùx +, +td +, 0, +buf_±r +, +size +, +g_mode +, 0, + +107 & +Ëngth +, 0); + +108 if( +rv® +. +code + !ð +RC_OK +) „val; + +109 + `as£¹ +( +Ëngth + >= 0); + +111 + `ASN_DEBUG +("% Ëngth i %d by‹s", +td +-> +Çme +, () +Ëngth +); + +116 +buf_±r + = ((cÚ¡ *)buf_±rè+ +rv® +. +cÚsumed +; + +117 +size + -ð +rv® +. +cÚsumed +; + +118 if( +Ëngth + > ( +b”_Žv_Ën_t +) +size +) { + +119 +rv® +. +code + = +RC_WMORE +; + +120 +rv® +. +cÚsumed + = 0; + +121  +rv® +; + +130 +ušt8_t + +sü©ch +[24]; + +131 +REAL_t + +tmp +; + +132  +d +; + +133  +»t +; + +135 if(( +size_t +) +Ëngth + < ( +sü©ch +)) { + +136 +tmp +. +buf + = +sü©ch +; + +137 +tmp +. +size + = +Ëngth +; + +140 +tmp +. +buf + = + `CALLOC +(1, +Ëngth + + 1); + +141 +tmp +. +size + = +Ëngth +; + +142 if(! +tmp +. +buf +) { + +143 +rv® +. +code + = +RC_FAIL +; + +144 +rv® +. +cÚsumed + = 0; + +145  +rv® +; + +149 + `memýy +( +tmp +. +buf +, +buf_±r +, +Ëngth +); + +150 +tmp +. +buf +[ +Ëngth +] = '\0'; + +152 +»t + = + `a¢_REAL2doubË +(& +tmp +, & +d +); + +153 if( +tmp +. +buf + !ð +sü©ch +è + `FREEMEM +(tmp.buf); + +154 if( +»t +) { + +155 +rv® +. +code + = +RC_FAIL +; + +156 +rv® +. +cÚsumed + = 0; + +157  +rv® +; + +160 if( + `N©iveR—l__£t +( +td +, +¥Œ +, +d +) < 0) + +161 +ASN__DECODE_FAILED +; + +164 +rv® +. +code + = +RC_OK +; + +165 +rv® +. +cÚsumed + +ð +Ëngth +; + +167 + `ASN_DEBUG +("Took %ld/%ld by‹ tؒcod%s", () +rv® +. +cÚsumed +, + +168 () +Ëngth +, +td +-> +Çme +); + +170  +rv® +; + +171 + } +} + +176 +a¢_’c_rv®_t + + +177 + $N©iveR—l_’code_d” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +178  +g_mode +, +b”_Žv_g_t + +g +, + +179 +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +180  +d + = + `N©iveR—l__g‘_doubË +( +td +, +¥Œ +); + +181 +a¢_’c_rv®_t + +”v® + = {0,0,0}; + +182 +REAL_t + +tmp +; + +185 + `mem£t +(& +tmp +, 0, (tmp)); + +187 if( + `a¢_doubË2REAL +(& +tmp +, +d +)) + +188 +ASN__ENCODE_FAILED +; + +191 +”v® + = + `d”_’code_´im™ive +( +td +, & +tmp +, +g_mode +, +g +, +cb +, +­p_key +); + +192 if( +”v® +. +’coded + == -1) { + +193 + `as£¹ +( +”v® +. +¡ruùu»_±r + =ð& +tmp +); + +194 +”v® +. +¡ruùu»_±r + = +¥Œ +; + +198 + `ASN_STRUCT_FREE_CONTENTS_ONLY +( +a¢_DEF_REAL +, & +tmp +); + +200  +”v® +; + +201 + } +} + +203 #iâdeà +ASN_DISABLE_PER_SUPPORT + + +208 +a¢_dec_rv®_t + + +209 + $N©iveR—l_decode_u³r +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +210 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +211 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, ** +¥Œ +, + +212 +a¢_³r_d©a_t + * +pd +) { + +213 +a¢_dec_rv®_t + +rv® +; + +214  +d +; + +215 +REAL_t + +tmp +; + +216 * +±mp + = & +tmp +; + +217  +»t +; + +219 () +cÚ¡¿šts +; + +221 + `mem£t +(& +tmp +, 0, (tmp)); + +222 +rv® + = + `OCTET_STRING_decode_u³r +( +Ýt_codec_ùx +, & +a¢_DEF_REAL +, + +223 +NULL +, & +±mp +, +pd +); + +224 if( +rv® +. +code + !ð +RC_OK +) { + +225 + `ASN_STRUCT_FREE_CONTENTS_ONLY +( +a¢_DEF_REAL +, & +tmp +); + +226  +rv® +; + +229 +»t + = + `a¢_REAL2doubË +(& +tmp +, & +d +); + +230 + `ASN_STRUCT_FREE_CONTENTS_ONLY +( +a¢_DEF_REAL +, & +tmp +); + +231 if( +»t +è +ASN__DECODE_FAILED +; + +233 if( + `N©iveR—l__£t +( +td +, +¥Œ +, +d +) < 0 ) + +234 +ASN__DECODE_FAILED +; + +236  +rv® +; + +237 + } +} + +242 +a¢_’c_rv®_t + + +243 + $N©iveR—l_’code_u³r +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +244 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +245 cÚ¡ * +¥Œ +, +a¢_³r_ou_t + * +po +) { + +246  +d + = + `N©iveR—l__g‘_doubË +( +td +, +¥Œ +); + +247 +a¢_’c_rv®_t + +”v® + = {0,0,0}; + +248 +REAL_t + +tmp +; + +250 () +cÚ¡¿šts +; + +253 + `mem£t +(& +tmp +, 0, (tmp)); + +255 if( + `a¢_doubË2REAL +(& +tmp +, +d +)) + +256 +ASN__ENCODE_FAILED +; + +259 +”v® + = + `OCTET_STRING_’code_u³r +(& +a¢_DEF_REAL +, +NULL +, & +tmp +, +po +); + +260 if( +”v® +. +’coded + == -1) + +261 +”v® +. +¡ruùu»_±r + = +¥Œ +; + +264 + `ASN_STRUCT_FREE_CONTENTS_ONLY +( +a¢_DEF_REAL +, & +tmp +); + +266  +”v® +; + +267 + } +} + +270 +a¢_dec_rv®_t + + +271 + $N©iveR—l_decode_­” +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +272 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +273 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +274 ** +dbl_±r +, +a¢_³r_d©a_t + * +pd +) { + +275 * +Dbl + = (*)* +dbl_±r +; + +276 +a¢_dec_rv®_t + +rv® +; + +277 +REAL_t + +tmp +; + +278 * +±mp + = & +tmp +; + +279  +»t +; + +281 () +cÚ¡¿šts +; + +286 if( +Dbl + =ð +NULL +) { + +287 * +dbl_±r + = + `CALLOC +(1, (* +Dbl +)); + +288 +Dbl + = (*)* +dbl_±r +; + +289 if( +Dbl + =ð +NULL +) + +290 +ASN__DECODE_FAILED +; + +293 + `mem£t +(& +tmp +, 0, (tmp)); + +294 +rv® + = + `OCTET_STRING_decode_­” +( +Ýt_codec_ùx +, +td +, +NULL +, + +295 & +±mp +, +pd +); + +296 if( +rv® +. +code + !ð +RC_OK +) { + +297 + `ASN_STRUCT_FREE_CONTENTS_ONLY +( +a¢_DEF_REAL +, & +tmp +); + +298  +rv® +; + +301 +»t + = + `a¢_REAL2doubË +(& +tmp +, +Dbl +); + +302 + `ASN_STRUCT_FREE_CONTENTS_ONLY +( +a¢_DEF_REAL +, & +tmp +); + +303 if( +»t +è +ASN__DECODE_FAILED +; + +305  +rv® +; + +306 + } +} + +308 +a¢_’c_rv®_t + + +309 + $N©iveR—l_’code_­” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +310 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +311 cÚ¡ * +¥Œ +, +a¢_³r_ou_t + * +po +) { + +312  +Dbl + = *(cÚ¡ *) +¥Œ +; + +313 +a¢_’c_rv®_t + +”v® + = {0,0,0}; + +314 +REAL_t + +tmp +; + +316 () +cÚ¡¿šts +; + +319 + `mem£t +(& +tmp +, 0, (tmp)); + +321 if( + `a¢_doubË2REAL +(& +tmp +, +Dbl +)) + +322 +ASN__ENCODE_FAILED +; + +325 +”v® + = + `OCTET_STRING_’code_­” +( +td +, +NULL +, & +tmp +, +po +); + +326 if( +”v® +. +’coded + == -1) + +327 +”v® +. +¡ruùu»_±r + = +¥Œ +; + +330 + `ASN_STRUCT_FREE_CONTENTS_ONLY +( +a¢_DEF_REAL +, & +tmp +); + +332  +”v® +; + +333 + } +} + +337 #iâdeà +ASN_DISABLE_OER_SUPPORT + + +344 + $N©iveR—l__ÃtwÜk_sw­ +( +size_t + +æßt_size +, cÚ¡ * +¤ý +, +ušt8_t + * +d¡ +) { + +345 cÚ¡ +ušt8_t + * +¤c + = +¤ý +; + +346  +‹¡ + = -0.0; + +347  +æßt_big_’dŸn + = *(cÚ¡ *)& +‹¡ + != 0; + +349 cÚ¡  +sizeof_doubË_is_8_a +[()-7] +CC_NOTUSED +; + +350 cÚ¡  +sizeof_doubË_is_8_b +[9-()] +CC_NOTUSED +; + +352 cÚ¡  +sizeof_æßt_is_4_a +[()-3] +CC_NOTUSED +; + +353 cÚ¡  +sizeof_æßt_is_4_b +[5-()] +CC_NOTUSED +; + +355  +æßt_size +) { + +357 + `as£¹ +(() == 8); + +358 if( +æßt_big_’dŸn +) { + +359 +d¡ +[0] = +¤c +[0]; + +360 +d¡ +[1] = +¤c +[1]; + +361 +d¡ +[2] = +¤c +[2]; + +362 +d¡ +[3] = +¤c +[3]; + +363 +d¡ +[4] = +¤c +[4]; + +364 +d¡ +[5] = +¤c +[5]; + +365 +d¡ +[6] = +¤c +[6]; + +366 +d¡ +[7] = +¤c +[7]; + +368 +d¡ +[0] = +¤c +[7]; + +369 +d¡ +[1] = +¤c +[6]; + +370 +d¡ +[2] = +¤c +[5]; + +371 +d¡ +[3] = +¤c +[4]; + +372 +d¡ +[4] = +¤c +[3]; + +373 +d¡ +[5] = +¤c +[2]; + +374 +d¡ +[6] = +¤c +[1]; + +375 +d¡ +[7] = +¤c +[0]; + +379 + `as£¹ +(() == 4); + +380 if( +æßt_big_’dŸn +) { + +381 +d¡ +[0] = +¤c +[0]; + +382 +d¡ +[1] = +¤c +[1]; + +383 +d¡ +[2] = +¤c +[2]; + +384 +d¡ +[3] = +¤c +[3]; + +386 +d¡ +[0] = +¤c +[3]; + +387 +d¡ +[1] = +¤c +[2]; + +388 +d¡ +[2] = +¤c +[1]; + +389 +d¡ +[3] = +¤c +[0]; + +393 + } +} + +398 +a¢_’c_rv®_t + + +399 + $N©iveR—l_’code_Ûr +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +400 cÚ¡ +a¢_Ûr_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +401 cÚ¡ * +¥Œ +, +a¢_­p_cÚsume_by‹s_f + * +cb +, + +402 * +­p_key +) { + +403 +a¢_’c_rv®_t + +” + = {0, 0, 0}; + +405 if(! +cÚ¡¿šts +ècÚ¡¿št ð +td +-> +’codšg_cÚ¡¿šts +. +Ûr_cÚ¡¿šts +; + +406 if( +cÚ¡¿šts + && cÚ¡¿šts-> +v®ue +. +width + != 0) { + +408 +ušt8_t + +sü©ch +[()]; + +409 cÚ¡ +a¢_N©iveR—l_¥ecifics_t + * +¥ecs + = + +410 (cÚ¡ +a¢_N©iveR—l_¥ecifics_t + *) +td +-> +¥ecifics +; + +411 +size_t + +wœe_size + = +cÚ¡¿šts +-> +v®ue +. +width +; + +413 if( +¥ecs + ? ( +wœe_size + =ð¥ecs-> +æßt_size +) + +414 : ( +wœe_size + == ())) { + +420 + `as£¹ +(( +wœe_size + == ()) + +421 || ( +¥ecs + && s³cs-> +æßt_size + =ð +wœe_size +)); + +422 +ASN__ENCODE_FAILED +; + +429 + `N©iveR—l__ÃtwÜk_sw­ +( +wœe_size +, +¥Œ +, +sü©ch +); + +430 if( + `cb +( +sü©ch +, +wœe_size +, +­p_key +) < 0) { + +431 +ASN__ENCODE_FAILED +; + +433 +” +. +’coded + = +wœe_size +; + +434 + `ASN__ENCODED_OK +( +” +); + +437  +d + = + `N©iveR—l__g‘_doubË +( +td +, +¥Œ +); + +438 +ssize_t + +Ën_Ën +; + +439 +REAL_t + +tmp +; + +442 + `mem£t +(& +tmp +, 0, (tmp)); + +444 if( + `a¢_doubË2REAL +(& +tmp +, +d +)) { + +445 +ASN__ENCODE_FAILED +; + +449 +Ën_Ën + = + `Ûr_£rŸlize_Ëngth +( +tmp +. +size +, +cb +, +­p_key +); + +450 if( +Ën_Ën + < 0 || + `cb +( +tmp +. +buf +,mp. +size +, +­p_key +) < 0) { + +451 + `ASN_STRUCT_FREE_CONTENTS_ONLY +( +a¢_DEF_REAL +, & +tmp +); + +452 +ASN__ENCODE_FAILED +; + +454 +” +. +’coded + = +Ën_Ën + + +tmp +. +size +; + +455 + `ASN_STRUCT_FREE_CONTENTS_ONLY +( +a¢_DEF_REAL +, & +tmp +); + +456 + `ASN__ENCODED_OK +( +” +); + +459 + } +} + +461 +a¢_dec_rv®_t + + +462 + $N©iveR—l_decode_Ûr +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +463 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +464 cÚ¡ +a¢_Ûr_cÚ¡¿šts_t + * +cÚ¡¿šts +, ** +¥Œ +, + +465 cÚ¡ * +±r +, +size_t + +size +) { + +466 +a¢_dec_rv®_t + +ok + = { +RC_OK +, 0}; + +467  +d +; + +468 +ssize_t + +Ën_Ën +; + +469 +size_t + +»®_body_Ën +; + +471 () +Ýt_codec_ùx +; + +473 if(! +cÚ¡¿šts +ècÚ¡¿št ð +td +-> +’codšg_cÚ¡¿šts +. +Ûr_cÚ¡¿šts +; + +474 if( +cÚ¡¿šts + && cÚ¡¿šts-> +v®ue +. +width + != 0) { + +476 +ušt8_t + +sü©ch +[()]; + +477 +size_t + +wœe_size + = +cÚ¡¿šts +-> +v®ue +. +width +; + +479 if( +size + < +wœe_size +) + +480 +ASN__DECODE_STARVED +; + +486 + `N©iveR—l__ÃtwÜk_sw­ +( +wœe_size +, +±r +, +sü©ch +); + +489  +wœe_size +) { + +492  +tmp +; + +493 + `memýy +(& +tmp +, +sü©ch +, ()); + +494 if( + `N©iveR—l__£t +( +td +, +¥Œ +, +tmp +) < 0) + +495 +ASN__DECODE_FAILED +; + +500  +tmp +; + +501 + `memýy +(& +tmp +, +sü©ch +, ()); + +502 if( + `N©iveR—l__£t +( +td +, +¥Œ +, +tmp +) < 0) + +503 +ASN__DECODE_FAILED +; + +507 +ASN__DECODE_FAILED +; + +510 +ok +. +cÚsumed + = +wœe_size +; + +511  +ok +; + +514 +Ën_Ën + = + `Ûr_ãtch_Ëngth +( +±r +, +size +, & +»®_body_Ën +); + +515 if( +Ën_Ën + < 0è +ASN__DECODE_FAILED +; + +516 if( +Ën_Ën + =ð0è +ASN__DECODE_STARVED +; + +518 +±r + = (cÚ¡ *íŒ + +Ën_Ën +; + +519 +size + -ð +Ën_Ën +; + +521 if( +»®_body_Ën + > +size +è +ASN__DECODE_STARVED +; + +524 +ušt8_t + +sü©ch +[24]; + +525 +REAL_t + +tmp +; + +526  +»t +; + +528 if( +»®_body_Ën + < ( +sü©ch +)) { + +529 +tmp +. +buf + = +sü©ch +; + +530 +tmp +. +size + = +»®_body_Ën +; + +533 +tmp +. +buf + = + `CALLOC +(1, +»®_body_Ën + + 1); + +534 +tmp +. +size + = +»®_body_Ën +; + +535 if(! +tmp +. +buf +) { + +536 +ASN__DECODE_FAILED +; + +540 + `memýy +( +tmp +. +buf +, +±r +, +»®_body_Ën +); + +541 +tmp +. +buf +[ +»®_body_Ën +] = '\0'; + +543 +»t + = + `a¢_REAL2doubË +(& +tmp +, & +d +); + +544 if( +tmp +. +buf + !ð +sü©ch +è + `FREEMEM +(tmp.buf); + +545 if( +»t +) { + +546 + `ASN_DEBUG +("REAL decoded iÀ%" +ASN_PRI_SIZE + " bytes, but can't convert double", + +547 +»®_body_Ën +); + +548 +ASN__DECODE_FAILED +; + +552 if( + `N©iveR—l__£t +( +td +, +¥Œ +, +d +) < 0) + +553 +ASN__DECODE_FAILED +; + +555 +ok +. +cÚsumed + = +Ën_Ën + + +»®_body_Ën +; + +556  +ok +; + +557 + } +} + +564 +a¢_dec_rv®_t + + +565 + $N©iveR—l_decode_x” +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +566 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¥Œ +, + +567 cÚ¡ * +Ýt_mÇme +, cÚ¡ * +buf_±r +, +size_t + +size +) { + +568 +a¢_dec_rv®_t + +rv® +; + +569 +REAL_t + +¡ + = { 0, 0 }; + +570 +REAL_t + * +¡p + = & +¡ +; + +572 +rv® + = + `REAL_decode_x” +( +Ýt_codec_ùx +, +td +, (**)& +¡p +, +Ýt_mÇme +, + +573 +buf_±r +, +size +); + +574 if( +rv® +. +code + =ð +RC_OK +) { + +575  +d +; + +576 if( + `a¢_REAL2doubË +(& +¡ +, & +d +è|| + `N©iveR—l__£t +( +td +, +¥Œ +, d) < 0) { + +577 +rv® +. +code + = +RC_FAIL +; + +578 +rv® +. +cÚsumed + = 0; + +582 +rv® +. +cÚsumed + = 0; + +584 + `ASN_STRUCT_FREE_CONTENTS_ONLY +( +a¢_DEF_REAL +, & +¡ +); + +585  +rv® +; + +586 + } +} + +588 +a¢_’c_rv®_t + + +589 + $N©iveR—l_’code_x” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +590  +žev– +, +x”_’cod”_æags_e + +æags +, + +591 +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +592  +d + = + `N©iveR—l__g‘_doubË +( +td +, +¥Œ +); + +593 +a¢_’c_rv®_t + +” + = {0,0,0}; + +595 () +žev– +; + +597 +” +. +’coded + = + `REAL__dump +( +d +, +æags + & +XER_F_CANONICAL +, +cb +, +­p_key +); + +598 if( +” +. +’coded + < 0è +ASN__ENCODE_FAILED +; + +600 + `ASN__ENCODED_OK +( +” +); + +601 + } +} + +607 + $N©iveR—l_´št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +,  +žev– +, + +608 +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +609 () +žev– +; + +611 if( +¥Œ +) { + +612  +d + = + `N©iveR—l__g‘_doubË +( +td +, +¥Œ +); + +613  ( + `REAL__dump +( +d +, 0, +cb +, +­p_key +) < 0) ? -1 : 0; + +615  ( + `cb +("", 8, +­p_key +) < 0) ? -1 : 0; + +617 + } +} + +620 + $N©iveR—l_com·» +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +­Œ +, + +621 cÚ¡ * +b±r +) { + +623 if( +­Œ + && +b±r +) { + +624  +a + = + `N©iveR—l__g‘_doubË +( +td +, +­Œ +); + +625  +b + = + `N©iveR—l__g‘_doubË +( +td +, +b±r +); + +628 if( + `a¢_i¢ª +( +a +)) { + +629 if( + `a¢_i¢ª +( +b +)) { + +634 } if( + `a¢_i¢ª +( +b +)) { + +638 if( +a + < +b +) { + +640 } if( +a + > +b +) { + +645 } if(! +­Œ +) { + +650 + } +} + +653 + $N©iveR—l_ä“ +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, * +±r +, + +654 +a¢_¡ruù_ä“_m‘hod + +m‘hod +) { + +655 if(! +td + || ! +±r +) + +658 + `ASN_DEBUG +("Freeing %s‡s REAL (%d, %p, Native)", + +659 +td +-> +Çme +, +m‘hod +, +±r +); + +661  +m‘hod +) { + +662  +ASFM_FREE_EVERYTHING +: + +663 + `FREEMEM +( +±r +); + +665  +ASFM_FREE_UNDERLYING +: + +667  +ASFM_FREE_UNDERLYING_AND_RESET +: { + +668 cÚ¡ +a¢_N©iveR—l_¥ecifics_t + * +¥ecs +; + +669 +size_t + +æßt_size +; + +670 +¥ecs + = (cÚ¡ +a¢_N©iveR—l_¥ecifics_t + *) +td +-> +¥ecifics +; + +671 +æßt_size + = +¥ecs + ? specs->float_size : (); + +672 + `mem£t +( +±r +, 0, +æßt_size +); + +675 + } +} + +677 +a¢_¿ndom_fžl_»suÉ_t + + +678 + $N©iveR—l_¿ndom_fžl +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¥Œ +, + +679 cÚ¡ +a¢_’codšg_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +680 +size_t + +max_Ëngth +) { + +681 +a¢_¿ndom_fžl_»suÉ_t + +»suÉ_ok + = { +ARFILL_OK +, 0}; + +682 +a¢_¿ndom_fžl_»suÉ_t + +»suÉ_çžed + = { +ARFILL_FAILED +, 0}; + +683 +a¢_¿ndom_fžl_»suÉ_t + +»suÉ_sk³d + = { +ARFILL_SKIPPED +, 0}; + +684 #iâdeà +INFINITY + + +685  + #INFINITY + (1.0/0.0) + + ) + +687 #iâdeà +NAN + + +688  + #NAN + (0.0/0.0) + + ) + +690 cÚ¡  +doubË_v®ues +[] = { + +691 - +M_E +, M_E, - +M_PI +, M_PI, + +699 - +DBL_MIN +, DBL_MIN, + +700 - +DBL_MAX +, DBL_MAX, + +701 #ifdeà +DBL_TRUE_MIN + + +702 - +DBL_TRUE_MIN +, DBL_TRUE_MIN + +705 cÚ¡  +æßt_v®ues +[] = { + +706 0, -0.0, -1, 1, - +M_E +, M_E, -3.14, 3.14, - +M_PI +, M_PI, -255, 255, + +707 - +FLT_MIN +, FLT_MIN, + +708 - +FLT_MAX +, FLT_MAX, + +709 #ifdeà +FLT_TRUE_MIN + + +710 - +FLT_TRUE_MIN +, FLT_TRUE_MIN, + +712 +INFINITY +, -INFINITY, +NAN + + +714 +ssize_t + +æßt_£t_size + = + `N©iveR—l__æßt_size +( +td +); + +715 cÚ¡ +size_t + +n_doubËs + = ( +doubË_v®ues +) / (double_values[0]); + +716 cÚ¡ +size_t + +n_æßts + = ( +æßt_v®ues +) / (float_values[0]); + +717  +d +; + +719 () +cÚ¡¿šts +; + +721 if( +max_Ëngth + =ð0è +»suÉ_sk³d +; + +723 if( +æßt_£t_size + =ð(è&& + `a¢_¿ndom_b‘w“n +(0, 1) == 0) { + +724 +d + = +doubË_v®ues +[ + `a¢_¿ndom_b‘w“n +(0, +n_doubËs + - 1)]; + +726 +d + = +æßt_v®ues +[ + `a¢_¿ndom_b‘w“n +(0, +n_æßts + - 1)]; + +729 if( + `N©iveR—l__£t +( +td +, +¥Œ +, +d +) < 0) { + +730  +»suÉ_çžed +; + +733 +»suÉ_ok +. +Ëngth + = +æßt_£t_size +; + +734  +»suÉ_ok +; + +735 + } +} + +742  +size_t + + +743 + $N©iveR—l__æßt_size +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +) { + +744 cÚ¡ +a¢_N©iveR—l_¥ecifics_t + * +¥ecs + = + +745 (cÚ¡ +a¢_N©iveR—l_¥ecifics_t + *) +td +-> +¥ecifics +; + +746  +¥ecs + ? s³cs-> +æßt_size + : (); + +747 + } +} + +750 + $N©iveR—l__g‘_doubË +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +±r +) { + +751 +size_t + +æßt_size + = + `N©iveR—l__æßt_size +( +td +); + +752 if( +æßt_size + == ()) { + +753  *(cÚ¡ *) +±r +; + +755  *(cÚ¡ *) +±r +; + +757 + } +} + +759  +ssize_t + + +760 + $N©iveR—l__£t +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¥Œ +,  +d +) { + +761 +size_t + +æßt_size + = + `N©iveR—l__æßt_size +( +td +); + +762 * +Çtive +; + +764 if(!( +Çtive + = * +¥Œ +)) { + +765 +Çtive + = (* +¥Œ + = + `CALLOC +(1, +æßt_size +)); + +766 if(! +Çtive +) { + +771 if( +æßt_size + == ()) { + +772 if( + `a¢_doubË2æßt +( +d +, (*) +Çtive +)) { + +776 *(*) +Çtive + = +d +; + +779  +æßt_size +; + +780 + } +} + + @NgENB-ID.c + +8  + ~"NgENB-ID.h +" + +11 + $memb_maüoNgENB_ID_cÚ¡¿št_1 +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13 cÚ¡ +BIT_STRING_t + * +¡ + = (cÚ¡ BIT_STRING_ˆ*) +¥Œ +; + +14 +size_t + +size +; + +16 if(! +¥Œ +) { + +17 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +19 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +23 if( +¡ +-> +size + > 0) { + +25 +size + = 8 * +¡ +->siz- (¡-> +b™s_unu£d + & 0x07); + +27 +size + = 0; + +30 if(( +size + == 20)) { + +34 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +36 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +39 + } +} + +42 + $memb_shÜtMaüoNgENB_ID_cÚ¡¿št_1 +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +43 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +44 cÚ¡ +BIT_STRING_t + * +¡ + = (cÚ¡ BIT_STRING_ˆ*) +¥Œ +; + +45 +size_t + +size +; + +47 if(! +¥Œ +) { + +48 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +50 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +54 if( +¡ +-> +size + > 0) { + +56 +size + = 8 * +¡ +->siz- (¡-> +b™s_unu£d + & 0x07); + +58 +size + = 0; + +61 if(( +size + == 18)) { + +65 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +67 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +70 + } +} + +73 + $memb_lÚgMaüoNgENB_ID_cÚ¡¿št_1 +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +74 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +75 cÚ¡ +BIT_STRING_t + * +¡ + = (cÚ¡ BIT_STRING_ˆ*) +¥Œ +; + +76 +size_t + +size +; + +78 if(! +¥Œ +) { + +79 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +81 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +85 if( +¡ +-> +size + > 0) { + +87 +size + = 8 * +¡ +->siz- (¡-> +b™s_unu£d + & 0x07); + +89 +size + = 0; + +92 if(( +size + == 21)) { + +96 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +98 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +101 + } +} + +103  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_memb_maüoNgENB_ID_cÚ¡r_2 + + gCC_NOTUSED + = { + +104 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +105 { +APC_CONSTRAINED +, 0, 0, 20, 20 } , + +108  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_memb_shÜtMaüoNgENB_ID_cÚ¡r_3 + + gCC_NOTUSED + = { + +109 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +110 { +APC_CONSTRAINED +, 0, 0, 18, 18 } , + +113  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_memb_lÚgMaüoNgENB_ID_cÚ¡r_4 + + gCC_NOTUSED + = { + +114 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +115 { +APC_CONSTRAINED +, 0, 0, 21, 21 } , + +118 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_NgENB_ID_cÚ¡r_1 + + gCC_NOTUSED + = { + +119 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 2, 2, 0, 2 } , + +120 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +123 +a¢_TYPE_memb”_t + + ga¢_MBR_NgENB_ID_1 +[] = { + +124 { +ATF_NOFLAGS +, 0, +off£tof +( +NgENB_ID +, +choiû +. +maüoNgENB_ID +), + +125 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +127 & +a¢_DEF_BIT_STRING +, + +129 { 0, & +a¢_PER_memb_maüoNgENB_ID_cÚ¡r_2 +, +memb_maüoNgENB_ID_cÚ¡¿št_1 + }, + +133 { +ATF_NOFLAGS +, 0, +off£tof +( +NgENB_ID +, +choiû +. +shÜtMaüoNgENB_ID +), + +134 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +136 & +a¢_DEF_BIT_STRING +, + +138 { 0, & +a¢_PER_memb_shÜtMaüoNgENB_ID_cÚ¡r_3 +, +memb_shÜtMaüoNgENB_ID_cÚ¡¿št_1 + }, + +142 { +ATF_NOFLAGS +, 0, +off£tof +( +NgENB_ID +, +choiû +. +lÚgMaüoNgENB_ID +), + +143 ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), + +145 & +a¢_DEF_BIT_STRING +, + +147 { 0, & +a¢_PER_memb_lÚgMaüoNgENB_ID_cÚ¡r_4 +, +memb_lÚgMaüoNgENB_ID_cÚ¡¿št_1 + }, + +152 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_NgENB_ID_g2–_1 +[] = { + +153 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +154 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 }, + +155 { ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), 2, 0, 0 } + +157 +a¢_CHOICE_¥ecifics_t + + ga¢_SPC_NgENB_ID_¥ecs_1 + = { + +158 ( +NgENB_ID +), + +159 +off£tof +( +NgENB_ID +, +_a¢_ùx +), + +160 +off£tof +( +NgENB_ID +, +´e£Á +), + +161 ((( +NgENB_ID + *)0)-> +´e£Á +), + +162 +a¢_MAP_NgENB_ID_g2–_1 +, + +167 +a¢_TYPE_desütÜ_t + + ga¢_DEF_NgENB_ID + = { + +170 & +a¢_OP_CHOICE +, + +175 { 0, & +a¢_PER_ty³_NgENB_ID_cÚ¡r_1 +, +CHOICE_cÚ¡¿št + }, + +176 +a¢_MBR_NgENB_ID_1 +, + +178 & +a¢_SPC_NgENB_ID_¥ecs_1 + + + @OCTET_STRING.c + +6  + ~ + +7  + ~ + +8  + ~ + +9  + ~<”ºo.h +> + +14 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_OCTET_STRING_gs +[] = { + +15 ( +ASN_TAG_CLASS_UNIVERSAL + | (4 << 2)) + +17 +a¢_OCTET_STRING_¥ecifics_t + + ga¢_SPC_OCTET_STRING_¥ecs + = { + +18 ( +OCTET_STRING_t +), + +19 +off£tof +( +OCTET_STRING_t +, +_a¢_ùx +), + +20 +ASN_OSUBV_STR + + +23 +a¢_TYPE_ݔ©iÚ_t + + ga¢_OP_OCTET_STRING + = { + +24 +OCTET_STRING_ä“ +, + +25 +OCTET_STRING_´št +, + +26 +OCTET_STRING_com·» +, + +27 +OCTET_STRING_decode_b” +, + +28 +OCTET_STRING_’code_d” +, + +29 +OCTET_STRING_decode_x”_hex +, + +30 +OCTET_STRING_’code_x” +, + +31 #ifdef +ASN_DISABLE_OER_SUPPORT + + +35 +OCTET_STRING_decode_Ûr +, + +36 +OCTET_STRING_’code_Ûr +, + +38 #ifdef +ASN_DISABLE_PER_SUPPORT + + +44 +OCTET_STRING_decode_u³r +, + +45 +OCTET_STRING_’code_u³r +, + +46 +OCTET_STRING_decode_­” +, + +47 +OCTET_STRING_’code_­” +, + +49 +OCTET_STRING_¿ndom_fžl +, + +52 +a¢_TYPE_desütÜ_t + + ga¢_DEF_OCTET_STRING + = { + +55 & +a¢_OP_OCTET_STRING +, + +56 +a¢_DEF_OCTET_STRING_gs +, + +57 ( +a¢_DEF_OCTET_STRING_gs +) + +58 / ( +a¢_DEF_OCTET_STRING_gs +[0]), + +59 +a¢_DEF_OCTET_STRING_gs +, + +60 ( +a¢_DEF_OCTET_STRING_gs +) + +61 / ( +a¢_DEF_OCTET_STRING_gs +[0]), + +62 { 0, 0, +a¢_g’”ic_no_cÚ¡¿št + }, + +64 & +a¢_SPC_OCTET_STRING_¥ecs + + +67 #undeà +_CH_PHASE + + +68 #undeà +NEXT_PHASE + + +69 #undeà +PREV_PHASE + + +70  + #_CH_PHASE +( +ùx +, +šc +) do { \ + +71 if( +ùx +-> +pha£ + == 0) \ + +72 +ùx +-> +cڋxt + = 0; \ + +73 +ùx +-> +pha£ + +ð +šc +; \ + +74 } 0) + + ) + +75  + #NEXT_PHASE +( +ùx +è + `_CH_PHASE +(ùx, +1) + + ) + +76  + #PREV_PHASE +( +ùx +è + `_CH_PHASE +(ùx, -1) + + ) + +78 #undeà +ADVANCE + + +79  + #ADVANCE +( +num_by‹s +) do { \ + +80 +size_t + +num + = ( +num_by‹s +); \ + +81 +buf_±r + = ((cÚ¡ *)buf_±rè+ +num +; \ + +82 +size + -ð +num +; \ + +83 +cÚsumed_my£lf + +ð +num +; \ + +84 } 0) + + ) + +86 #undeà +RETURN + + +87  + #RETURN +( +_code +) do { \ + +88 +a¢_dec_rv®_t + +tm´v® +; \ + +89 +tm´v® +. +code + = +_code +; \ + +90 +tm´v® +. +cÚsumed + = +cÚsumed_my£lf +; \ + +91  +tm´v® +; \ + +92 } 0) + + ) + +94 #undeà +APPEND + + +95  + #APPEND +( +buåŒ +, +bufsize +) do { \ + +96 +size_t + +_bs + = ( +bufsize +); \ + +97 +size_t + +_ns + = +ùx +-> +cڋxt +; \ + +98 +size_t + +_es + = +¡ +-> +size + + +_bs +; \ + +100 if(() +_es + < 0è + `RETURN +( +RC_FAIL +); \ + +101 if( +_ns + <ð +_es +) { \ + +102 * +±r +; \ + +104 dØ{ +_ns + = _ns ? _ns << 1 : 16; } \ + +105  +_ns + <ð +_es +); \ + +107 if(() +_ns + < 0è + `RETURN +( +RC_FAIL +); \ + +108 +±r + = + `REALLOC +( +¡ +-> +buf +, +_ns +); \ + +109 if( +±r +) { \ + +110 +¡ +-> +buf + = ( +ušt8_t + *) +±r +; \ + +111 +ùx +-> +cڋxt + = +_ns +; \ + +113 + `RETURN +( +RC_FAIL +); \ + +115 + `ASN_DEBUG +("R—Îoÿtšg iÁØ%ld", () +_ns +); \ + +117 + `memýy +( +¡ +-> +buf + + st-> +size +, +buåŒ +, +_bs +); \ + +119 +¡ +-> +buf +[ +_es +] = '\0'; \ + +120 +¡ +-> +size + = +_es +; \ + +121 } 0) + + ) + +129  + s_¡ack_– + { + +130 +b”_Žv_Ën_t + + mËá +; + +131 +b”_Žv_Ën_t + + mgÙ +; + +132  + mcÚt_Ëv– +; + +133  + mwªt_nuÎs +; + +134  + mb™s_chݳd +; + +135 +b”_Žv_g_t + + mg +; + +136  +_¡ack_– + * + m´ev +; + +137  +_¡ack_– + * + mÃxt +; + +139  + s_¡ack + { + +140  +_¡ack_– + * + mž +; + +141  +_¡ack_– + * + mcur_±r +; + +144  +_¡ack_– + * + +145 + $OS__add_¡ack_– +( +_¡ack + * +¡ +) { + +146  +_¡ack_– + * +Ãl +; + +151 if( +¡ +-> +cur_±r + && st->cur_±r-> +Ãxt +) { + +152 +Ãl + = +¡ +-> +cur_±r +-> +Ãxt +; + +153 +Ãl +-> +b™s_chݳd + = 0; + +154 +Ãl +-> +gÙ + = 0; + +157 +Ãl + = ( +_¡ack_– + *) + `CALLOC +(1, (_stack_el)); + +158 if( +Ãl + =ð +NULL +) + +159  +NULL +; + +161 if( +¡ +-> +ž +) { + +163 +Ãl +-> +cÚt_Ëv– + = +¡ +-> +ž +->cont_level + 1; + +164 +¡ +-> +ž +-> +Ãxt + = +Ãl +; + +166 +Ãl +-> +´ev + = +¡ +-> +ž +; + +167 +¡ +-> +ž + = +Ãl +; + +170 +¡ +-> +cur_±r + = +Ãl +; + +172  +Ãl +; + +173 + } +} + +175  +_¡ack + * + +176 + $_Ãw_¡ack +() { + +177  ( +_¡ack + *) + `CALLOC +(1, (_stack)); + +178 + } +} + +183 +a¢_dec_rv®_t + + +184 + $OCTET_STRING_decode_b” +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +185 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¥Œ +, + +186 cÚ¡ * +buf_±r +, +size_t + +size +,  +g_mode +) { + +187 cÚ¡ +a¢_OCTET_STRING_¥ecifics_t + * +¥ecs + = +td +-> +¥ecifics + + +188 ? (cÚ¡ +a¢_OCTET_STRING_¥ecifics_t + *) +td +-> +¥ecifics + + +189 : & +a¢_SPC_OCTET_STRING_¥ecs +; + +190 +BIT_STRING_t + * +¡ + = (BIT_STRING_ˆ*)* +¥Œ +; + +191 +a¢_dec_rv®_t + +rv® +; + +192 +a¢_¡ruù_ùx_t + * +ùx +; + +193 +ssize_t + +cÚsumed_my£lf + = 0; + +194  +_¡ack + * +¡ck +; + +195  +_¡ack_– + * +£l + = 0; + +196  +Žv_cÚ¡r +; + +197 +a¢_OS_Subv¬ŸÁ + +ty³_v¬ŸÁ + = +¥ecs +-> +subv¬ŸÁ +; + +199 + `ASN_DEBUG +("Decoding %s‡s %s (frame %ld)", + +200 +td +-> +Çme +, + +201 ( +ty³_v¬ŸÁ + =ð +ASN_OSUBV_STR +) ? + +203 () +size +); + +208 if( +¡ + =ð +NULL +) { + +209 +¡ + = ( +BIT_STRING_t + *)(* +¥Œ + = + `CALLOC +(1, +¥ecs +-> +¡ruù_size +)); + +210 if( +¡ + =ð +NULL +è + `RETURN +( +RC_FAIL +); + +214 +ùx + = ( +a¢_¡ruù_ùx_t + *)((*) +¡ + + +¥ecs +-> +ùx_off£t +); + +216  +ùx +-> +pha£ +) { + +221 +rv® + = + `b”_check_gs +( +Ýt_codec_ùx +, +td +, +ùx +, + +222 +buf_±r +, +size +, +g_mode +, -1, + +223 & +ùx +-> +Ëá +, & +Žv_cÚ¡r +); + +224 if( +rv® +. +code + !ð +RC_OK +) + +225  +rv® +; + +227 if( +Žv_cÚ¡r +) { + +231 +ùx +-> +±r + = + `_Ãw_¡ack +(); + +232 if(! +ùx +-> +±r +) { + +233 + `RETURN +( +RC_FAIL +); + +239 + `_CH_PHASE +( +ùx +, 3); + +240 if( +ty³_v¬ŸÁ + =ð +ASN_OSUBV_ANY + && +g_mode + != 1) + +241 + `APPEND +( +buf_±r +, +rv® +. +cÚsumed +); + +242 + `ADVANCE +( +rv® +. +cÚsumed +); + +243  +pha£3 +; + +246 + `NEXT_PHASE +( +ùx +); + +249 +pha£1 +: + +253 +¡ck + = ( +_¡ack + *) +ùx +-> +±r +; + +254 +£l + = +¡ck +-> +cur_±r +; + +256 +b”_Žv_g_t + +Žv_g +; + +257 +b”_Žv_Ën_t + +Žv_Ën +; + +258 +b”_Žv_g_t + +ex³ùed_g +; + +259 +ssize_t + +Ž +, +Î +, +Žvl +; + +261 +size_t + +Leá + = ((! +£l +||(size_t)£l-> +Ëá + >ð +size +) + +262 ? +size +:( +size_t +) +£l +-> +Ëá +); + +265 + `ASN_DEBUG +("%p, s->l=%ld, s->wn=%ld, s->g=%ld\n", (*) +£l +, + +266 ()( +£l +?£l-> +Ëá +:0), + +267 ()( +£l +?£l-> +wªt_nuÎs +:0), + +268 ()( +£l +?£l-> +gÙ +:0) + +270 if( +£l + && s–-> +Ëá + <ð0 && s–-> +wªt_nuÎs + == 0) { + +271 if( +£l +-> +´ev +) { + +272  +_¡ack_– + * +´ev + = +£l +->prev; + +273 if( +´ev +-> +Ëá + != -1) { + +274 if( +´ev +-> +Ëá + < +£l +-> +gÙ +) + +275 + `RETURN +( +RC_FAIL +); + +276 +´ev +-> +Ëá + -ð +£l +-> +gÙ +; + +278 +´ev +-> +gÙ + +ð +£l +->got; + +279 +£l + = +¡ck +-> +cur_±r + = +´ev +; + +280 if(! +£l +) ; + +281 +Žv_cÚ¡r + = 1; + +284 +£l + = +¡ck +-> +cur_±r + = 0; + +289 +Ž + = + `b”_ãtch_g +( +buf_±r +, +Leá +, & +Žv_g +); + +290 + `ASN_DEBUG +("fetchag(size=%ld,L=%ld), %sstack,†eft=%ld, wn=%ld,l=%ld", + +291 () +size +, () +Leá +, +£l +?"":"!", + +292 ()( +£l +?£l-> +Ëá +:0), + +293 ()( +£l +?£l-> +wªt_nuÎs +:0), + +294 () +Ž +); + +295  +Ž +) { + +296 -1: + `RETURN +( +RC_FAIL +); + +297 0: + `RETURN +( +RC_WMORE +); + +300 +Žv_cÚ¡r + = + `BER_TLV_CONSTRUCTED +( +buf_±r +); + +302 +Î + = + `b”_ãtch_Ëngth +( +Žv_cÚ¡r +, + +303 (cÚ¡ *) +buf_±r + + +Ž +, +Leá + -l,& +Žv_Ën +); + +304 + `ASN_DEBUG +("Gotag=%s,c=%d,†eft=%ld,l=%ld,†en=%ld,†l=%ld", + +305 + `b”_Žv_g_¡ršg +( +Žv_g +), +Žv_cÚ¡r +, + +306 () +Leá +, () +Ž +, () +Žv_Ën +, () +Î +); + +307  +Î +) { + +308 -1: + `RETURN +( +RC_FAIL +); + +309 0: + `RETURN +( +RC_WMORE +); + +312 if( +£l + && s–-> +wªt_nuÎs + + +313 && ((cÚ¡ +ušt8_t + *) +buf_±r +)[0] == 0 + +314 && ((cÚ¡ +ušt8_t + *) +buf_±r +)[1] == 0) + +317 + `ASN_DEBUG +("E© EOC; wn=%d--", +£l +-> +wªt_nuÎs +); + +319 if( +ty³_v¬ŸÁ + =ð +ASN_OSUBV_ANY + + +320 && ( +g_mode + !ð1 || +£l +-> +cÚt_Ëv– +)) + +321 + `APPEND +("\0\0", 2); + +323 + `ADVANCE +(2); + +324 +£l +-> +gÙ + += 2; + +325 if( +£l +-> +Ëá + != -1) { + +326 +£l +-> +Ëá + -= 2; + +329 +£l +-> +wªt_nuÎs +--; + +330 if( +£l +-> +wªt_nuÎs + == 0) { + +332 +£l +-> +Ëá + = 0; + +333 +Žv_cÚ¡r + = 1; + +343  +ty³_v¬ŸÁ +) { + +344  +ASN_OSUBV_BIT +: + +347  +ASN_OSUBV_STR +: + +349 if( +£l +) { + +350  +Ëv– + = +£l +-> +cÚt_Ëv– +; + +351 if( +Ëv– + < +td +-> +®l_gs_couÁ +) { + +352 +ex³ùed_g + = +td +-> +®l_gs +[ +Ëv– +]; + +354 } if( +td +-> +®l_gs_couÁ +) { + +355 +ex³ùed_g + = +td +-> +®l_gs + + +356 [ +td +-> +®l_gs_couÁ + - 1]; + +362  +ASN_OSUBV_ANY +: + +363 +ex³ùed_g + = +Žv_g +; + +368 if( +Žv_g + !ð +ex³ùed_g +) { + +369  +buf +[2][32]; + +370 + `b”_Žv_g_¢´št +( +Žv_g +, + +371 +buf +[0], (buf[0])); + +372 + `b”_Žv_g_¢´št +( +td +-> +gs +[td-> +gs_couÁ +-1], + +373 +buf +[1], (buf[1])); + +374 + `ASN_DEBUG +("Tag does‚ot matchƒxpectation: %s != %s", + +375 +buf +[0], buf[1]); + +376 + `RETURN +( +RC_FAIL +); + +379 +Žvl + = +Ž + + +Î +; + +380 if(( +Žv_Ën + + +Žvl +) < 0) { + +382 + `ASN_DEBUG +("TLVƒncoding +†ength (%ld) isoo big", + +383 () +Žv_Ën +); + +384 + `RETURN +( +RC_FAIL +); + +390 +£l + = + `OS__add_¡ack_– +( +¡ck +); + +391 if(! +£l +è + `RETURN +( +RC_FAIL +); + +393 +£l +-> +g + = +Žv_g +; + +395 +£l +-> +wªt_nuÎs + = ( +Žv_Ën +==-1); + +396 if( +£l +-> +´ev + && s–->´ev-> +Ëá + != -1) { + +398 if( +£l +-> +´ev +-> +Ëá + < +Žvl + + ( +Žv_Ën +==-1?0:tlv_len)) + +399 + `RETURN +( +RC_FAIL +); + +400 if( +Žv_Ën + == -1) + +401 +£l +-> +Ëá + = s–-> +´ev +->Ëá - +Žvl +; + +403 +£l +-> +Ëá + = +Žv_Ën +; + +405 +£l +-> +Ëá + = +Žv_Ën +; + +407 if( +ty³_v¬ŸÁ + =ð +ASN_OSUBV_ANY + + +408 && ( +g_mode + !ð1 || +£l +-> +cÚt_Ëv– +)) + +409 + `APPEND +( +buf_±r +, +Žvl +); + +410 +£l +-> +gÙ + +ð +Žvl +; + +411 + `ADVANCE +( +Žvl +); + +413 + `ASN_DEBUG +("+EXPECT2 got=%ld†eft=%ld, wn=%d, clvl=%u", + +414 () +£l +-> +gÙ +, ()£l-> +Ëá +, + +415 +£l +-> +wªt_nuÎs +, s–-> +cÚt_Ëv– +); + +417 }  +Žv_cÚ¡r +); + +418 if( +£l + =ð +NULL +) { + +420 + `ASN_DEBUG +("Phase out"); + +421 + `_CH_PHASE +( +ùx +, +3); + +425 + `NEXT_PHASE +( +ùx +); + +428 +¡ck + = ( +_¡ack + *) +ùx +-> +±r +; + +429 +£l + = +¡ck +-> +cur_±r +; + +430 + `ASN_DEBUG +("Phase 2: Need %ld bytes, size=%ld,‡lrg=%ld, wn=%d", + +431 () +£l +-> +Ëá +, () +size +, ()£l-> +gÙ +, + +432 +£l +-> +wªt_nuÎs +); + +434 +b”_Žv_Ën_t + +Ën +; + +436 + `as£¹ +( +£l +-> +Ëá + >= 0); + +438 +Ën + = (( +b”_Žv_Ën_t +) +size + < +£l +-> +Ëá +) + +439 ? ( +b”_Žv_Ën_t +) +size + : +£l +-> +Ëá +; + +440 if( +Ën + > 0) { + +441 if( +ty³_v¬ŸÁ + =ð +ASN_OSUBV_BIT + + +442 && +£l +-> +b™s_chݳd + == 0) { + +444 +¡ +-> +b™s_unu£d + = *(cÚ¡ +ušt8_t + *) +buf_±r +; + +445 + `APPEND +(((cÚ¡ *) +buf_±r ++1), ( +Ën + - 1)); + +446 +£l +-> +b™s_chݳd + = 1; + +448 + `APPEND +( +buf_±r +, +Ën +); + +450 + `ADVANCE +( +Ën +); + +451 +£l +-> +Ëá + -ð +Ën +; + +452 +£l +-> +gÙ + +ð +Ën +; + +455 if( +£l +-> +Ëá +) { + +456 + `ASN_DEBUG +("OS†eft %ld, size = %ld, wn=%d\n", + +457 () +£l +-> +Ëá +, () +size +, s–-> +wªt_nuÎs +); + +458 + `RETURN +( +RC_WMORE +); + +461 + `PREV_PHASE +( +ùx +); + +462  +pha£1 +; + +466 +pha£3 +: + +470 + `as£¹ +( +ùx +-> +Ëá + >= 0); + +472 if( +size + < ( +size_t +) +ùx +-> +Ëá +) { + +473 if(! +size +è + `RETURN +( +RC_WMORE +); + +474 if( +ty³_v¬ŸÁ + =ð +ASN_OSUBV_BIT + && ! +ùx +-> +cڋxt +) { + +475 +¡ +-> +b™s_unu£d + = *(cÚ¡ +ušt8_t + *) +buf_±r +; + +476 +ùx +-> +Ëá +--; + +477 + `ADVANCE +(1); + +479 + `APPEND +( +buf_±r +, +size +); + +480 + `as£¹ +( +ùx +-> +cڋxt + > 0); + +481 +ùx +-> +Ëá + -ð +size +; + +482 + `ADVANCE +( +size +); + +483 + `RETURN +( +RC_WMORE +); + +485 if( +ty³_v¬ŸÁ + =ð +ASN_OSUBV_BIT + + +486 && ! +ùx +-> +cڋxt + && ctx-> +Ëá +) { + +487 +¡ +-> +b™s_unu£d + = *(cÚ¡ +ušt8_t + *) +buf_±r +; + +488 +ùx +-> +Ëá +--; + +489 + `ADVANCE +(1); + +491 + `APPEND +( +buf_±r +, +ùx +-> +Ëá +); + +492 + `ADVANCE +( +ùx +-> +Ëá +); + +493 +ùx +-> +Ëá + = 0; + +495 + `NEXT_PHASE +( +ùx +); + +500 if( +£l +) { + +501 + `ASN_DEBUG +("3sel…=%p, wn=%d,†=%ld, g=%ld, size=%ld", + +502 (*) +£l +-> +´ev +, s–-> +wªt_nuÎs +, + +503 () +£l +-> +Ëá +, ()£l-> +gÙ +, () +size +); + +504 if( +£l +-> +´ev + || s–-> +wªt_nuÎs + > 1 || s–-> +Ëá + > 0) { + +505 + `RETURN +( +RC_WMORE +); + +512 if( +ty³_v¬ŸÁ + =ð +ASN_OSUBV_BIT +) { + +513 if( +¡ +-> +size +) { + +514 if( +¡ +-> +b™s_unu£d + < 0 || st->bits_unused > 7) { + +515 + `RETURN +( +RC_FAIL +); + +518 +¡ +-> +buf +[¡-> +size +-1] &ð0xfà<< st-> +b™s_unu£d +; + +520 if( +¡ +-> +b™s_unu£d +) { + +521 + `RETURN +( +RC_FAIL +); + +526 + `ASN_DEBUG +("Took %ld bytesoƒncode %s: [%s]:%ld", + +527 () +cÚsumed_my£lf +, +td +-> +Çme +, + +528 ( +ty³_v¬ŸÁ + =ð +ASN_OSUBV_STR +è? (*) +¡ +-> +buf + : "", + +529 () +¡ +-> +size +); + +532 + `RETURN +( +RC_OK +); + +533 + } +} + +538 +a¢_’c_rv®_t + + +539 + $OCTET_STRING_’code_d” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +540  +g_mode +, +b”_Žv_g_t + +g +, + +541 +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +542 +a¢_’c_rv®_t + +” + = { 0, 0, 0 }; + +543 cÚ¡ +a¢_OCTET_STRING_¥ecifics_t + * +¥ecs + = +td +-> +¥ecifics + + +544 ? (cÚ¡ +a¢_OCTET_STRING_¥ecifics_t + *) +td +-> +¥ecifics + + +545 : & +a¢_SPC_OCTET_STRING_¥ecs +; + +546 cÚ¡ +BIT_STRING_t + * +¡ + = (cÚ¡ BIT_STRING_ˆ*) +¥Œ +; + +547 +a¢_OS_Subv¬ŸÁ + +ty³_v¬ŸÁ + = +¥ecs +-> +subv¬ŸÁ +; + +548  +fix_Ï¡_by‹ + = 0; + +550 + `ASN_DEBUG +("%s %s‡s OCTET STRING", + +551 +cb +?"E¡im©šg":"Encodšg", +td +-> +Çme +); + +556 if( +ty³_v¬ŸÁ + !ð +ASN_OSUBV_ANY + || +g_mode + == 1) { + +557 +” +. +’coded + = + `d”_wr™e_gs +( +td +, + +558 ( +ty³_v¬ŸÁ + =ð +ASN_OSUBV_BIT +è+ +¡ +-> +size +, + +559 +g_mode +, +ty³_v¬ŸÁ + =ð +ASN_OSUBV_ANY +, +g +, + +560 +cb +, +­p_key +); + +561 if( +” +. +’coded + == -1) { + +562 +” +. +çžed_ty³ + = +td +; + +563 +” +. +¡ruùu»_±r + = +¥Œ +; + +564  +” +; + +568 + `as£¹ +( +ty³_v¬ŸÁ + !ð +ASN_OSUBV_ANY + || +g_mode + != -1); + +569 +” +. +’coded + = 0; + +572 if(! +cb +) { + +573 +” +. +’coded + +ð( +ty³_v¬ŸÁ + =ð +ASN_OSUBV_BIT +è+ +¡ +-> +size +; + +574 + `ASN__ENCODED_OK +( +” +); + +580 if( +ty³_v¬ŸÁ + =ð +ASN_OSUBV_BIT +) { + +581 +ušt8_t + +b + = +¡ +-> +b™s_unu£d + & 0x07; + +582 if( +b + && +¡ +-> +size +è +fix_Ï¡_by‹ + = 1; + +583 + `ASN__CALLBACK +(& +b +, 1); + +587 + `ASN__CALLBACK +( +¡ +-> +buf +, st-> +size + - +fix_Ï¡_by‹ +); + +590 if( +fix_Ï¡_by‹ +) { + +591 +ušt8_t + +b + = +¡ +-> +buf +[¡-> +size +-1] & (0xfà<< st-> +b™s_unu£d +); + +592 + `ASN__CALLBACK +(& +b +, 1); + +595 + `ASN__ENCODED_OK +( +” +); + +596 +cb_çžed +: + +597 +ASN__ENCODE_FAILED +; + +598 + } +} + +600 +a¢_’c_rv®_t + + +601 + $OCTET_STRING_’code_x” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +602  +žev– +, +x”_’cod”_æags_e + +æags +, + +603 +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +604 cÚ¡ * cÚ¡ +h2c + = "0123456789ABCDEF"; + +605 cÚ¡ +OCTET_STRING_t + * +¡ + = (cÚ¡ OCTET_STRING_ˆ*) +¥Œ +; + +606 +a¢_’c_rv®_t + +” + = { 0, 0, 0 }; + +607  +sü©ch +[16 * 3 + 4]; + +608 * +p + = +sü©ch +; + +609 +ušt8_t + * +buf +; + +610 +ušt8_t + * +’d +; + +611 +size_t + +i +; + +613 if(! +¡ + || (!¡-> +buf + && st-> +size +)) + +614 +ASN__ENCODE_FAILED +; + +616 +” +. +’coded + = 0; + +621 +buf + = +¡ +->buf; + +622 +’d + = +buf + + +¡ +-> +size +; + +623 if( +æags + & +XER_F_CANONICAL +) { + +624 * +sûnd + = +sü©ch + + ((scratch) - 2); + +625 ; +buf + < +’d +; buf++) { + +626 if( +p + >ð +sûnd +) { + +627 + `ASN__CALLBACK +( +sü©ch +, +p + - scratch); + +628 +p + = +sü©ch +; + +630 * +p +++ = +h2c +[(* +buf + >> 4) & 0x0F]; + +631 * +p +++ = +h2c +[* +buf + & 0x0F]; + +634 + `ASN__CALLBACK +( +sü©ch +, +p +-scratch); + +636  +i + = 0; +buf + < +’d +; buf++, i++) { + +637 if(!( +i + % 16è&& (˜|| +¡ +-> +size + > 16)) { + +638 + `ASN__CALLBACK +( +sü©ch +, +p +-scratch); + +639 +p + = +sü©ch +; + +640 + `ASN__TEXT_INDENT +(1, +žev– +); + +642 * +p +++ = +h2c +[(* +buf + >> 4) & 0x0F]; + +643 * +p +++ = +h2c +[* +buf + & 0x0F]; + +644 * +p +++ = 0x20; + +646 if( +p + - +sü©ch +) { + +647 +p +--; + +648 + `ASN__CALLBACK +( +sü©ch +, +p +-scratch); + +649 if( +¡ +-> +size + > 16) + +650 + `ASN__TEXT_INDENT +(1, +žev– +-1); + +654 + `ASN__ENCODED_OK +( +” +); + +655 +cb_çžed +: + +656 +ASN__ENCODE_FAILED +; + +657 + } +} + +659 cÚ¡  + sOCTET_STRING__x”_esÿ³_bË_s + { + +660 cÚ¡ * + m¡ršg +; + +661  + msize +; + +662 } + gOCTET_STRING__x”_esÿ³_bË +[] = { + +663  + #OSXET +( +s +è{ s, (sè- 1 } + + ) + +664 +OSXET +("\074\156\165\154\057\076"), + +665 +OSXET +("\074\163\157\150\057\076"), + +666 +OSXET +("\074\163\164\170\057\076"), + +667 +OSXET +("\074\145\164\170\057\076"), + +668 +OSXET +("\074\145\157\164\057\076"), + +669 +OSXET +("\074\145\156\161\057\076"), + +670 +OSXET +("\074\141\143\153\057\076"), + +671 +OSXET +("\074\142\145\154\057\076"), + +672 +OSXET +("\074\142\163\057\076"), + +673 +OSXET +("\011"), + +674 +OSXET +("\012"), + +675 +OSXET +("\074\166\164\057\076"), + +676 +OSXET +("\074\146\146\057\076"), + +677 +OSXET +("\015"), + +678 +OSXET +("\074\163\157\057\076"), + +679 +OSXET +("\074\163\151\057\076"), + +680 +OSXET +("\074\144\154\145\057\076"), + +681 +OSXET +("\074\144\143\061\057\076"), + +682 +OSXET +("\074\144\143\062\057\076"), + +683 +OSXET +("\074\144\143\063\057\076"), + +684 +OSXET +("\074\144\143\064\057\076"), + +685 +OSXET +("\074\156\141\153\057\076"), + +686 +OSXET +("\074\163\171\156\057\076"), + +687 +OSXET +("\074\145\164\142\057\076"), + +688 +OSXET +("\074\143\141\156\057\076"), + +689 +OSXET +("\074\145\155\057\076"), + +690 +OSXET +("\074\163\165\142\057\076"), + +691 +OSXET +("\074\145\163\143\057\076"), + +692 +OSXET +("\074\151\163\064\057\076"), + +693 +OSXET +("\074\151\163\063\057\076"), + +694 +OSXET +("\074\151\163\062\057\076"), + +695 +OSXET +("\074\151\163\061\057\076"), + +702 +OSXET +("\046\141\155\160\073"), + +707 +OSXET +("\046\154\164\073"), + +709 +OSXET +("\046\147\164\073"), + +713 + $OS__check_esÿ³d_cڌÞ_ch¬ +(cÚ¡ * +buf +,  +size +) { + +714 +size_t + +i +; + +721  +i + = 0; i < 32 ; i++) { + +722 cÚ¡  +OCTET_STRING__x”_esÿ³_bË_s + * +– +; + +723 +– + = & +OCTET_STRING__x”_esÿ³_bË +[ +i +]; + +724 if( +– +-> +size + =ðsiz&& + `memcmp +( +buf +,ƒl-> +¡ršg +, size) == 0) + +725  +i +; + +728 + } +} + +731 + $OCTET_STRING__hªdË_cڌÞ_ch¬s +(* +¡ruù_±r +, cÚ¡ * +chunk_buf +, +size_t + +chunk_size +) { + +737  +cڌÞ_ch¬ + = + `OS__check_esÿ³d_cڌÞ_ch¬ +( +chunk_buf +, +chunk_size +); + +738 if( +cڌÞ_ch¬ + >= 0) { + +739 +OCTET_STRING_t + * +¡ + = (OCTET_STRING_ˆ*) +¡ruù_±r +; + +740 * +p + = + `REALLOC +( +¡ +-> +buf +, st-> +size + + 2); + +741 if( +p +) { + +742 +¡ +-> +buf + = ( +ušt8_t + *) +p +; + +743 +¡ +-> +buf +[¡-> +size +++] = +cڌÞ_ch¬ +; + +744 +¡ +-> +buf +[¡-> +size +] = '\0'; + +750 + } +} + +752 +a¢_’c_rv®_t + + +753 + $OCTET_STRING_’code_x”_utf8 +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +754  +žev– +, +x”_’cod”_æags_e + +æags +, + +755 +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +756 cÚ¡ +OCTET_STRING_t + * +¡ + = (cÚ¡ OCTET_STRING_ˆ*) +¥Œ +; + +757 +a¢_’c_rv®_t + +” + = { 0, 0, 0 }; + +758 +ušt8_t + * +buf +, * +’d +; + +759 +ušt8_t + * +ss +; + +760 +ssize_t + +’coded_Ën + = 0; + +762 () +žev– +; + +763 () +æags +; + +765 if(! +¡ + || (!¡-> +buf + && st-> +size +)) + +766 +ASN__ENCODE_FAILED +; + +768 +buf + = +¡ +->buf; + +769 +’d + = +buf + + +¡ +-> +size +; + +770  +ss + = +buf +; buà< +’d +; buf++) { + +771  +ch + = * +buf +; + +772  +s_Ën +; + +777 if( +ch + < ( +OCTET_STRING__x”_esÿ³_bË +) + +778 /( +OCTET_STRING__x”_esÿ³_bË +[0]) + +779 && ( +s_Ën + = +OCTET_STRING__x”_esÿ³_bË +[ +ch +]. +size +)) { + +780 if((( +buf + - +ss +è&& + `cb +(ss, buà- ss, +­p_key +) < 0) + +781 || + `cb +( +OCTET_STRING__x”_esÿ³_bË +[ +ch +]. +¡ršg +, +s_Ën +, + +782 +­p_key +) < 0) + +783 +ASN__ENCODE_FAILED +; + +784 +’coded_Ën + +ð( +buf + - +ss +è+ +s_Ën +; + +785 +ss + = +buf + + 1; + +789 +’coded_Ën + +ð( +buf + - +ss +); + +790 if(( +buf + - +ss +è&& + `cb +(ss, buà- ss, +­p_key +) < 0) + +791 +ASN__ENCODE_FAILED +; + +793 +” +. +’coded + = +’coded_Ën +; + +794 + `ASN__ENCODED_OK +( +” +); + +795 + } +} + +800  +ssize_t + + $OCTET_STRING__cÚv”t_hexadecim® +(* +¥Œ +, cÚ¡ * +chunk_buf +, +size_t + +chunk_size +,  +have_mÜe +) { + +801 +OCTET_STRING_t + * +¡ + = (OCTET_STRING_ˆ*) +¥Œ +; + +802 cÚ¡ * +chunk_¡Ý + = (cÚ¡ *) +chunk_buf +; + +803 cÚ¡ * +p + = +chunk_¡Ý +; + +804 cÚ¡ * +³nd + = +p + + +chunk_size +; + +805  +þv + = 0; + +806  +h®f + = 0; + +807 +ušt8_t + * +buf +; + +810 +size_t + +Ãw_size + = +¡ +-> +size + + ( +chunk_size + + 1) / 2; + +811 * +Ō + = + `REALLOC +( +¡ +-> +buf +, +Ãw_size + + 1); + +812 if(! +Ō +)  -1; + +813 +¡ +-> +buf + = ( +ušt8_t + *) +Ō +; + +814 +buf + = +¡ +->buà+ st-> +size +; + +821 ; +p + < +³nd +;…++) { + +822  +ch + = *(cÚ¡ *) +p +; + +823  +ch +) { + +830 +þv + = (þv << 4è+ ( +ch + - 0x30); + +834 +þv + = (þv << 4è+ ( +ch + - 0x41 + 10); + +838 +þv + = (þv << 4è+ ( +ch + - 0x61 + 10); + +841 * +buf + = 0; + +844 if( +h®f +++) { + +845 +h®f + = 0; + +846 * +buf +++ = +þv +; + +847 +chunk_¡Ý + = +p + + 1; + +854 if( +h®f +) { + +855 if( +have_mÜe +) { + +860 * +buf +++ = +þv + << 4; + +861 +chunk_¡Ý + = +p +; + +864 +chunk_¡Ý + = +p +; + +867 +¡ +-> +size + = +buf + - st->buf; + +868 + `as£¹ +( +¡ +-> +size + <ð +Ãw_size +); + +869 +¡ +-> +buf +[¡-> +size +] = 0; + +871  ( +chunk_¡Ý + - (cÚ¡ *) +chunk_buf +); + +872 + } +} + +877  +ssize_t + + $OCTET_STRING__cÚv”t_bš¬y +(* +¥Œ +, cÚ¡ * +chunk_buf +, +size_t + +chunk_size +,  +have_mÜe +) { + +878 +BIT_STRING_t + * +¡ + = (BIT_STRING_ˆ*) +¥Œ +; + +879 cÚ¡ * +p + = (cÚ¡ *) +chunk_buf +; + +880 cÚ¡ * +³nd + = +p + + +chunk_size +; + +881  +b™s_unu£d + = +¡ +->bits_unused & 0x7; + +882 +ušt8_t + * +buf +; + +885 +size_t + +Ãw_size + = +¡ +-> +size + + ( +chunk_size + + 7) / 8; + +886 * +Ō + = + `REALLOC +( +¡ +-> +buf +, +Ãw_size + + 1); + +887 if(! +Ō +)  -1; + +888 +¡ +-> +buf + = ( +ušt8_t + *) +Ō +; + +889 +buf + = +¡ +->buà+ st-> +size +; + +891 () +have_mÜe +; + +893 if( +b™s_unu£d + == 0) + +894 +b™s_unu£d + = 8; + +895 if( +¡ +-> +size +) + +896 +buf +--; + +901 ; +p + < +³nd +;…++) { + +902  +ch + = *(cÚ¡ *) +p +; + +903  +ch +) { + +910 if( +b™s_unu£d +-- <= 0) { + +911 *++ +buf + = 0; + +912 +b™s_unu£d + = 7; + +914 * +buf + |ð( +ch +&1è<< +b™s_unu£d +; + +917 +¡ +-> +b™s_unu£d + = bits_unused; + +922 if( +b™s_unu£d + == 8) { + +923 +¡ +-> +size + = +buf + - st->buf; + +924 +¡ +-> +b™s_unu£d + = 0; + +926 +¡ +-> +size + = +buf + - st->buf + 1; + +927 +¡ +-> +b™s_unu£d + = bits_unused; + +930 + `as£¹ +( +¡ +-> +size + <ð +Ãw_size +); + +931 +¡ +-> +buf +[¡-> +size +] = 0; + +933  +chunk_size +; + +934 + } +} + +940 + $OS__¡¹ÛÁ +( +ba£ +, cÚ¡ * +buf +, cÚ¡ * +’d +, +št32_t + * +»t_v®ue +) { + +941 cÚ¡ +št32_t + +Ï¡_unicode_cod•ošt + = 0x10ffff; + +942 +št32_t + +v® + = 0; + +943 cÚ¡ * +p +; + +945  +p + = +buf +;… < +’d +;…++) { + +946  +ch + = * +p +; + +948  +ch +) { + +951 +v® + = v® * +ba£ + + ( +ch + - 0x30); + +955 +v® + = v® * +ba£ + + ( +ch + - 0x41 + 10); + +959 +v® + = v® * +ba£ + + ( +ch + - 0x61 + 10); + +962 * +»t_v®ue + = +v® +; + +963  ( +p + - +buf +) + 1; + +969 if( +v® + > +Ï¡_unicode_cod•ošt +) { + +974 * +»t_v®ue + = -1; + +975  ( +p + - +buf +); + +976 + } +} + +981  +ssize_t + + +982 + $OCTET_STRING__cÚv”t_’Œefs +(* +¥Œ +, cÚ¡ * +chunk_buf +, + +983 +size_t + +chunk_size +,  +have_mÜe +) { + +984 +OCTET_STRING_t + * +¡ + = (OCTET_STRING_ˆ*) +¥Œ +; + +985 cÚ¡ * +p + = (cÚ¡ *) +chunk_buf +; + +986 cÚ¡ * +³nd + = +p + + +chunk_size +; + +987 +ušt8_t + * +buf +; + +990 +size_t + +Ãw_size + = +¡ +-> +size + + +chunk_size +; + +991 * +Ō + = + `REALLOC +( +¡ +-> +buf +, +Ãw_size + + 1); + +992 if(! +Ō +)  -1; + +993 +¡ +-> +buf + = ( +ušt8_t + *) +Ō +; + +994 +buf + = +¡ +->buà+ st-> +size +; + +999 ; +p + < +³nd +;…++) { + +1000  +ch + = *(cÚ¡ *) +p +; + +1001  +Ën +; + +1003 if( +ch + != 0x26 ) { + +1004 * +buf +++ = +ch +; + +1011 +Ën + = +chunk_size + - ( +p + - (cÚ¡ *) +chunk_buf +); + +1012 if( +Ën + =ð1 )  +wªt_mÜe +; + +1013 if( +p +[1] == 0x23 ) { + +1014 cÚ¡ * +pv® +; + +1015 +št32_t + +v® + = 0; + +1016  +ba£ +; + +1018 if( +Ën + =ð2 )  +wªt_mÜe +; + +1019 if( +p +[2] == 0x78 ) + +1020 +pv® + = +p + + 3, +ba£ + = 16; + +1022 +pv® + = +p + + 2, +ba£ + = 10; + +1023 +Ën + = + `OS__¡¹ÛÁ +( +ba£ +, +pv® +, +p + +†’, & +v® +); + +1024 if( +Ën + == -1) { + +1026 * +buf +++ = +ch +; + +1029 if(! +Ën + || +pv® +[Ën-1] !ð0x3bè +wªt_mÜe +; + +1030 + `as£¹ +( +v® + > 0); + +1031 +p + +ð( +pv® + -…è+ +Ën + - 1; + +1033 if( +v® + < 0x80) { + +1034 * +buf +++ = () +v® +; + +1035 } if( +v® + < 0x800) { + +1036 * +buf +++ = 0xc0 | (( +v® + >> 6)); + +1037 * +buf +++ = 0x80 | (( +v® + & 0x3f)); + +1038 } if( +v® + < 0x10000) { + +1039 * +buf +++ = 0xe0 | (( +v® + >> 12)); + +1040 * +buf +++ = 0x80 | (( +v® + >> 6) & 0x3f); + +1041 * +buf +++ = 0x80 | (( +v® + & 0x3f)); + +1042 } if( +v® + < 0x200000) { + +1043 * +buf +++ = 0xf0 | (( +v® + >> 18)); + +1044 * +buf +++ = 0x80 | (( +v® + >> 12) & 0x3f); + +1045 * +buf +++ = 0x80 | (( +v® + >> 6) & 0x3f); + +1046 * +buf +++ = 0x80 | (( +v® + & 0x3f)); + +1047 } if( +v® + < 0x4000000) { + +1048 * +buf +++ = 0xf8 | (( +v® + >> 24)); + +1049 * +buf +++ = 0x80 | (( +v® + >> 18) & 0x3f); + +1050 * +buf +++ = 0x80 | (( +v® + >> 12) & 0x3f); + +1051 * +buf +++ = 0x80 | (( +v® + >> 6) & 0x3f); + +1052 * +buf +++ = 0x80 | (( +v® + & 0x3f)); + +1054 * +buf +++ = 0xfø| (( +v® + >> 30) & 0x1); + +1055 * +buf +++ = 0x80 | (( +v® + >> 24) & 0x3f); + +1056 * +buf +++ = 0x80 | (( +v® + >> 18) & 0x3f); + +1057 * +buf +++ = 0x80 | (( +v® + >> 12) & 0x3f); + +1058 * +buf +++ = 0x80 | (( +v® + >> 6) & 0x3f); + +1059 * +buf +++ = 0x80 | (( +v® + & 0x3f)); + +1065 * +sc + = (*) + `memchr +( +p +, 0x3b, +Ën + > 5 ? 5 :†en); + +1066 if(! +sc +è +wªt_mÜe +; + +1067 if(( +sc + - +p +) == 4 + +1068 && +p +[1] == 0x61 + +1069 && +p +[2] == 0x6d + +1070 && +p +[3] == 0x70 ) { + +1071 * +buf +++ = 0x26; + +1072 +p + = +sc +; + +1075 if(( +sc + - +p +) == 3) { + +1076 if( +p +[1] == 0x6c) { + +1077 * +buf + = 0x3c; + +1078 } if( +p +[1] == 0x67) { + +1079 * +buf + = 0x3e; + +1082 * +buf +++ = +ch +; + +1085 if( +p +[2] != 0x74) { + +1087 * +buf +++ = +ch +; + +1090 +buf +++; + +1091 +p + = +sc +; + +1095 * +buf +++ = +ch +; + +1099 +wªt_mÜe +: + +1100 if( +have_mÜe +) { + +1105 * +buf +++ = +ch +; + +1108 +chunk_size + = ( +p + - (cÚ¡ *) +chunk_buf +); + +1113 +¡ +-> +size + = +buf + - st->buf; + +1114 + `as£¹ +( +¡ +-> +size + <ð +Ãw_size +); + +1115 +¡ +-> +buf +[¡-> +size +] = 0; + +1117  +chunk_size +; + +1118 + } +} + +1123  +a¢_dec_rv®_t + + +1124 + $OCTET_STRING__decode_x” +( + +1125 cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +1126 ** +¥Œ +, cÚ¡ * +Ýt_mÇme +, cÚ¡ * +buf_±r +, +size_t + +size +, + +1127 (* +Ýt_uÃx³ùed_g_decod” +)(* +¡ruù_±r +, cÚ¡ * +chunk_buf +, + +1128 +size_t + +chunk_size +), + +1129 + $ssize_t + (* +body_»ûiv” +)(* +¡ruù_±r +, cÚ¡ * +chunk_buf +, + +1130 +size_t + +chunk_size +,  +have_mÜe +)) { + +1131 +OCTET_STRING_t + * +¡ + = (OCTET_STRING_ˆ*)* +¥Œ +; + +1132 cÚ¡ +a¢_OCTET_STRING_¥ecifics_t + * +¥ecs + = +td +-> +¥ecifics + + +1133 ? (cÚ¡ +a¢_OCTET_STRING_¥ecifics_t + *) +td +-> +¥ecifics + + +1134 : & +a¢_SPC_OCTET_STRING_¥ecs +; + +1135 cÚ¡ * +xml_g + = +Ýt_mÇme + ? o±_mÇm: +td +->xml_tag; + +1136 +a¢_¡ruù_ùx_t + * +ùx +; + +1137 +a¢_dec_rv®_t + +rv® +; + +1138  +¡_®loÿ‹d +; + +1143 if(! +¡ +) { + +1144 +¡ + = ( +OCTET_STRING_t + *) + `CALLOC +(1, +¥ecs +-> +¡ruù_size +); + +1145 * +¥Œ + = (*) +¡ +; + +1146 if(! +¡ +è +¡a_çžed +; + +1147 +¡_®loÿ‹d + = 1; + +1149 +¡_®loÿ‹d + = 0; + +1151 if(! +¡ +-> +buf +) { + +1153 +¡ +-> +buf + = ( +ušt8_t + *) + `CALLOC +(1, 1); + +1154 if(! +¡ +-> +buf +) { + +1155 if( +¡_®loÿ‹d +) { + +1156 * +¥Œ + = 0; + +1157  +¡b_çžed +; + +1159  +¡a_çžed +; + +1165 +ùx + = ( +a¢_¡ruù_ùx_t + *)(((*)* +¥Œ +è+ +¥ecs +-> +ùx_off£t +); + +1167  + `x”_decode_g’”® +( +Ýt_codec_ùx +, +ùx +, * +¥Œ +, +xml_g +, + +1168 +buf_±r +, +size +, +Ýt_uÃx³ùed_g_decod” +, +body_»ûiv” +); + +1170 +¡b_çžed +: + +1171 + `FREEMEM +( +¡ +); + +1172 +¡a_çžed +: + +1173 +rv® +. +code + = +RC_FAIL +; + +1174 +rv® +. +cÚsumed + = 0; + +1175  +rv® +; + +1176 + } +} + +1181 +a¢_dec_rv®_t + + +1182 + $OCTET_STRING_decode_x”_hex +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +1183 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¥Œ +, + +1184 cÚ¡ * +Ýt_mÇme +, cÚ¡ * +buf_±r +, + +1185 +size_t + +size +) { + +1186  + `OCTET_STRING__decode_x” +( +Ýt_codec_ùx +, +td +, +¥Œ +, +Ýt_mÇme +, + +1187 +buf_±r +, +size +, 0, +OCTET_STRING__cÚv”t_hexadecim® +); + +1188 + } +} + +1193 +a¢_dec_rv®_t + + +1194 + $OCTET_STRING_decode_x”_bš¬y +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +1195 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¥Œ +, + +1196 cÚ¡ * +Ýt_mÇme +, cÚ¡ * +buf_±r +, + +1197 +size_t + +size +) { + +1198  + `OCTET_STRING__decode_x” +( +Ýt_codec_ùx +, +td +, +¥Œ +, +Ýt_mÇme +, + +1199 +buf_±r +, +size +, 0, +OCTET_STRING__cÚv”t_bš¬y +); + +1200 + } +} + +1205 +a¢_dec_rv®_t + + +1206 + $OCTET_STRING_decode_x”_utf8 +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +1207 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¥Œ +, + +1208 cÚ¡ * +Ýt_mÇme +, cÚ¡ * +buf_±r +, + +1209 +size_t + +size +) { + +1210  + `OCTET_STRING__decode_x” +( +Ýt_codec_ùx +, +td +, +¥Œ +, +Ýt_mÇme +, + +1211 +buf_±r +, +size +, + +1212 +OCTET_STRING__hªdË_cڌÞ_ch¬s +, + +1213 +OCTET_STRING__cÚv”t_’Œefs +); + +1214 + } +} + +1216 #iâdeà +ASN_DISABLE_PER_SUPPORT + + +1219 + $OCTET_STRING_³r_g‘_ch¬aù”s +( +a¢_³r_d©a_t + * +po +, +ušt8_t + * +buf +, + +1220 +size_t + +un™s +,  +bpc +,  +un™_b™s +, + +1221  +lb +,  +ub +, cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +pc +) { + +1222 +ušt8_t + * +’d + = +buf + + +un™s + * +bpc +; + +1224 + `ASN_DEBUG +("Expanding %d characters into (%ld..%ld):%d", + +1225 () +un™s +, +lb +, +ub +, +un™_b™s +); + +1228 if(() +ub + <ð(()2 << ( +un™_b™s + - 1))) { + +1230 +lb + = 0; + +1231 } if( +pc + &&…c-> +code2v®ue +) { + +1232 if( +un™_b™s + > 16) + +1236 ; +buf + < +’d +; buà+ð +bpc +) { + +1237  +v®ue +; + +1238  +code + = + `³r_g‘_ãw_b™s +( +po +, +un™_b™s +); + +1239 if( +code + < 0)  -1; + +1240 +v®ue + = +pc +-> + `code2v®ue +( +code +); + +1241 if( +v®ue + < 0) { + +1242 + `ASN_DEBUG +("Code %d (0x%02x) is" + +1244 +code +, code, +lb +, +ub +); + +1247  +bpc +) { + +1248 1: * +buf + = +v®ue +; ; + +1249 2: +buf +[0] = +v®ue + >> 8; buf[1] = value; ; + +1250 4: +buf +[0] = +v®ue + >> 24; buf[1] = value >> 16; + +1251 +buf +[2] = +v®ue + >> 8; buf[3] = value; ; + +1258 if( +lb + =ð0 && ( +un™_b™s + =ð8 * +bpc +)) { + +1259  + `³r_g‘_mªy_b™s +( +po +, +buf +, 0, +un™_b™s + * +un™s +); + +1262 ; +buf + < +’d +; buà+ð +bpc +) { + +1263 +št32_t + +code + = + `³r_g‘_ãw_b™s +( +po +, +un™_b™s +); + +1264 +št32_t + +ch + = +code + + +lb +; + +1265 if( +code + < 0)  -1; + +1266 if( +ch + > +ub +) { + +1267 + `ASN_DEBUG +("Code %d is out of„ange (%ld..%ld)", + +1268 +ch +, +lb +, +ub +); + +1271  +bpc +) { + +1272 1: * +buf + = +ch +; ; + +1273 2: +buf +[0] = +ch + >> 8; buf[1] = ch; ; + +1274 4: +buf +[0] = +ch + >> 24; buf[1] = ch >> 16; + +1275 +buf +[2] = +ch + >> 8; buf[3] = ch; ; + +1280 + } +} + +1283 + $OCTET_STRING_³r_put_ch¬aù”s +( +a¢_³r_ou_t + * +po +, cÚ¡ +ušt8_t + * +buf +, + +1284 +size_t + +un™s +,  +bpc +,  +un™_b™s +, + +1285  +lb +,  +ub +, cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +pc +) { + +1286 cÚ¡ +ušt8_t + * +’d + = +buf + + +un™s + * +bpc +; + +1288 + `ASN_DEBUG +("Squeezing %d characters into (%ld..%ld):%d (%d bpc)", + +1289 () +un™s +, +lb +, +ub +, +un™_b™s +, +bpc +); + +1292 if(() +ub + <ð(()2 << ( +un™_b™s + - 1))) { + +1294 +lb + = 0; + +1295 } if( +pc + &&…c-> +v®ue2code +) { + +1296 ; +buf + < +’d +; buà+ð +bpc +) { + +1297  +code +; + +1298 +ušt32_t + +v®ue +; + +1299  +bpc +) { + +1300 1: +v®ue + = *(cÚ¡ +ušt8_t + *) +buf +; ; + +1301 2: +v®ue + = ( +buf +[0] << 8) | buf[1]; ; + +1302 4: +v®ue + = ( +buf +[0] << 24) | (buf[1] << 16) + +1303 | ( +buf +[2] << 8) | buf[3]; ; + +1306 +code + = +pc +-> + `v®ue2code +( +v®ue +); + +1307 if( +code + < 0) { + +1308 + `ASN_DEBUG +("Character %d (0x%02x) is" + +1310 * +buf +, *buf, +lb +, +ub +); + +1313 if( + `³r_put_ãw_b™s +( +po +, +code +, +un™_b™s +)) + +1319 if( +lb + =ð0 && ( +un™_b™s + =ð8 * +bpc +)) { + +1320  + `³r_put_mªy_b™s +( +po +, +buf +, +un™_b™s + * +un™s +); + +1323  +ub + -ð +lb +; +buf + < +’d +; buà+ð +bpc +) { + +1324  +ch +; + +1325 +ušt32_t + +v®ue +; + +1326  +bpc +) { + +1328 +v®ue + = *(cÚ¡ +ušt8_t + *) +buf +; + +1331 +v®ue + = ( +buf +[0] << 8) | buf[1]; + +1334 +v®ue + = ( +buf +[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; + +1339 +ch + = +v®ue + - +lb +; + +1340 if( +ch + < 0 || ch > +ub +) { + +1341 + `ASN_DEBUG +("Ch¬aù” %d (0x%02xèi ouˆoà¿ng(%ld..%ld)", * +buf +, + +1342 +v®ue +, +lb +, +ub + +†b); + +1345 if( + `³r_put_ãw_b™s +( +po +, +ch +, +un™_b™s +))  -1; + +1349 + } +} + +1351  +a¢_³r_cÚ¡¿šts_t + + ga¢_DEF_OCTET_STRING_cÚ¡¿šts + = { + +1352 { +APC_CONSTRAINED +, 8, 8, 0, 255 }, + +1353 { +APC_SEMI_CONSTRAINED +, -1, -1, 0, 0 }, + +1357 +a¢_dec_rv®_t + + +1358 + $OCTET_STRING_decode_u³r +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +1359 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +1360 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, ** +¥Œ +, + +1361 +a¢_³r_d©a_t + * +pd +) { + +1362 cÚ¡ +a¢_OCTET_STRING_¥ecifics_t + * +¥ecs + = +td +-> +¥ecifics + + +1363 ? (cÚ¡ +a¢_OCTET_STRING_¥ecifics_t + *) +td +-> +¥ecifics + + +1364 : & +a¢_SPC_OCTET_STRING_¥ecs +; + +1365 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +pc + = + +1366 +cÚ¡¿šts + ? cÚ¡¿št : +td +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +; + +1367 cÚ¡ +a¢_³r_cÚ¡¿št_t + * +cv® +; + +1368 cÚ¡ +a¢_³r_cÚ¡¿št_t + * +csiz +; + +1369 +a¢_dec_rv®_t + +rv® + = { +RC_OK +, 0 }; + +1370 +OCTET_STRING_t + * +¡ + = (OCTET_STRING_ˆ*)* +¥Œ +; + +1371 +ssize_t + +cÚsumed_my£lf + = 0; + +1372  +»³© +; + +1374 +OS__BPC_CHAR + = 1, + +1375 +OS__BPC_U16 + = 2, + +1376 +OS__BPC_U32 + = 4 + +1377 } +bpc +; + +1378  +un™_b™s +; + +1379  +ÿnÚiÿl_un™_b™s +; + +1381 () +Ýt_codec_ùx +; + +1383 if( +pc +) { + +1384 +cv® + = & +pc +-> +v®ue +; + +1385 +csiz + = & +pc +-> +size +; + +1387 +cv® + = & +a¢_DEF_OCTET_STRING_cÚ¡¿šts +. +v®ue +; + +1388 +csiz + = & +a¢_DEF_OCTET_STRING_cÚ¡¿šts +. +size +; + +1391  +¥ecs +-> +subv¬ŸÁ +) { + +1393  +ASN_OSUBV_ANY +: + +1394  +ASN_OSUBV_BIT +: + +1395 + `ASN_DEBUG +("UÄecognized subv¬ŸÁ %d", +¥ecs +-> +subv¬ŸÁ +); + +1396 + `RETURN +( +RC_FAIL +); + +1398  +ASN_OSUBV_STR +: + +1399 +ÿnÚiÿl_un™_b™s + = +un™_b™s + = 8; + +1400 if( +cv® +-> +æags + & +APC_CONSTRAINED +) + +1401 +un™_b™s + = +cv® +-> +¿nge_b™s +; + +1402 +bpc + = +OS__BPC_CHAR +; + +1404  +ASN_OSUBV_U16 +: + +1405 +ÿnÚiÿl_un™_b™s + = +un™_b™s + = 16; + +1406 if( +cv® +-> +æags + & +APC_CONSTRAINED +) + +1407 +un™_b™s + = +cv® +-> +¿nge_b™s +; + +1408 +bpc + = +OS__BPC_U16 +; + +1410  +ASN_OSUBV_U32 +: + +1411 +ÿnÚiÿl_un™_b™s + = +un™_b™s + = 32; + +1412 if( +cv® +-> +æags + & +APC_CONSTRAINED +) + +1413 +un™_b™s + = +cv® +-> +¿nge_b™s +; + +1414 +bpc + = +OS__BPC_U32 +; + +1421 if(! +¡ +) { + +1422 +¡ + = ( +OCTET_STRING_t + *)(* +¥Œ + = + `CALLOC +(1, +¥ecs +-> +¡ruù_size +)); + +1423 if(! +¡ +è + `RETURN +( +RC_FAIL +); + +1426 + `ASN_DEBUG +("PER Decoding %s size %ld .. %ld bits %d", + +1427 +csiz +-> +æags + & +APC_EXTENSIBLE + ? "extensible" : "non-extensible", + +1428 +csiz +-> +low”_bound +, csiz-> +uµ”_bound +, csiz-> +efãùive_b™s +); + +1430 if( +csiz +-> +æags + & +APC_EXTENSIBLE +) { + +1431  +šext + = + `³r_g‘_ãw_b™s +( +pd +, 1); + +1432 if( +šext + < 0è + `RETURN +( +RC_WMORE +); + +1433 if( +šext +) { + +1434 +csiz + = & +a¢_DEF_OCTET_STRING_cÚ¡¿šts +. +size +; + +1435 +un™_b™s + = +ÿnÚiÿl_un™_b™s +; + +1439 if( +csiz +-> +efãùive_b™s + >= 0) { + +1440 + `FREEMEM +( +¡ +-> +buf +); + +1441 if( +bpc +) { + +1442 +¡ +-> +size + = +csiz +-> +uµ”_bound + * +bpc +; + +1444 +¡ +-> +size + = ( +csiz +-> +uµ”_bound + + 7) >> 3; + +1446 +¡ +-> +buf + = ( +ušt8_t + *) + `MALLOC +(¡-> +size + + 1); + +1447 if(! +¡ +-> +buf +è{ st-> +size + = 0; + `RETURN +( +RC_FAIL +); } + +1453 if( +csiz +-> +efãùive_b™s + == 0) { + +1454  +»t +; + +1455 if( +bpc +) { + +1456 + `ASN_DEBUG +("Encoding OCTET STRING size %ld", + +1457 +csiz +-> +uµ”_bound +); + +1458 +»t + = + `OCTET_STRING_³r_g‘_ch¬aù”s +( +pd +, +¡ +-> +buf +, + +1459 +csiz +-> +uµ”_bound +, +bpc +, +un™_b™s +, + +1460 +cv® +-> +low”_bound +, cv®-> +uµ”_bound +, +pc +); + +1461 if( +»t + > 0è + `RETURN +( +RC_FAIL +); + +1463 + `ASN_DEBUG +("Encoding BIT STRING size %ld", + +1464 +csiz +-> +uµ”_bound +); + +1465 +»t + = + `³r_g‘_mªy_b™s +( +pd +, +¡ +-> +buf +, 0, + +1466 +un™_b™s + * +csiz +-> +uµ”_bound +); + +1468 if( +»t + < 0è + `RETURN +( +RC_WMORE +); + +1469 +cÚsumed_my£lf + +ð +un™_b™s + * +csiz +-> +uµ”_bound +; + +1470 +¡ +-> +buf +[¡-> +size +] = 0; + +1471 + `RETURN +( +RC_OK +); + +1474 +¡ +-> +size + = 0; + +1476 +ssize_t + +¿w_Ën +; + +1477 +ssize_t + +Ën_by‹s +; + +1478 * +p +; + +1479  +»t +; + +1482 +¿w_Ën + = + `u³r_g‘_Ëngth +( +pd +, +csiz +-> +efãùive_b™s +, csiz-> +low”_bound +, + +1483 & +»³© +); + +1484 if( +¿w_Ën + < 0è + `RETURN +( +RC_WMORE +); + +1485 if( +¿w_Ën + =ð0 && +¡ +-> +buf +) ; + +1487 + `ASN_DEBUG +("Got PER†engthƒb %ld,†en %ld, %s (%s)", + +1488 () +csiz +-> +efãùive_b™s +, () +¿w_Ën +, + +1489 +»³© + ? "»³©" : "Úû", +td +-> +Çme +); + +1490 +Ën_by‹s + = +¿w_Ën + * +bpc +; + +1491 +p + = + `REALLOC +( +¡ +-> +buf +, st-> +size + + +Ën_by‹s + + 1); + +1492 if(! +p +è + `RETURN +( +RC_FAIL +); + +1493 +¡ +-> +buf + = ( +ušt8_t + *) +p +; + +1495 +»t + = + `OCTET_STRING_³r_g‘_ch¬aù”s +( +pd +, & +¡ +-> +buf +[¡-> +size +], +¿w_Ën +, + +1496 +bpc +, +un™_b™s +, +cv® +-> +low”_bound +, + +1497 +cv® +-> +uµ”_bound +, +pc +); + +1498 if( +»t + > 0è + `RETURN +( +RC_FAIL +); + +1499 if( +»t + < 0è + `RETURN +( +RC_WMORE +); + +1500 +¡ +-> +size + +ð +Ën_by‹s +; + +1501 }  +»³© +); + +1502 +¡ +-> +buf +[¡-> +size +] = 0; + +1504  +rv® +; + +1505 + } +} + +1507 +a¢_’c_rv®_t + + +1508 + $OCTET_STRING_’code_u³r +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +1509 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +1510 cÚ¡ * +¥Œ +, +a¢_³r_ou_t + * +po +) { + +1511 cÚ¡ +a¢_OCTET_STRING_¥ecifics_t + * +¥ecs + = +td +-> +¥ecifics + + +1512 ? (cÚ¡ +a¢_OCTET_STRING_¥ecifics_t + *) +td +-> +¥ecifics + + +1513 : & +a¢_SPC_OCTET_STRING_¥ecs +; + +1514 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +pc + = +cÚ¡¿šts + ? constraints + +1515 : +td +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +; + +1516 cÚ¡ +a¢_³r_cÚ¡¿št_t + * +cv® +; + +1517 cÚ¡ +a¢_³r_cÚ¡¿št_t + * +csiz +; + +1518 cÚ¡ +OCTET_STRING_t + * +¡ + = (cÚ¡ OCTET_STRING_ˆ*) +¥Œ +; + +1519 +a¢_’c_rv®_t + +” + = { 0, 0, 0 }; + +1520  +šext + = 0; + +1521  +un™_b™s +; + +1522  +ÿnÚiÿl_un™_b™s +; + +1523 +size_t + +size_š_un™s +; + +1524 cÚ¡ +ušt8_t + * +buf +; + +1525  +»t +; + +1527 +OS__BPC_CHAR + = 1, + +1528 +OS__BPC_U16 + = 2, + +1529 +OS__BPC_U32 + = 4 + +1530 } +bpc +; + +1531  +ù_ex‹nsibË +; + +1533 if(! +¡ + || (!¡-> +buf + && st-> +size +)) + +1534 +ASN__ENCODE_FAILED +; + +1536 if( +pc +) { + +1537 +cv® + = & +pc +-> +v®ue +; + +1538 +csiz + = & +pc +-> +size +; + +1540 +cv® + = & +a¢_DEF_OCTET_STRING_cÚ¡¿šts +. +v®ue +; + +1541 +csiz + = & +a¢_DEF_OCTET_STRING_cÚ¡¿šts +. +size +; + +1543 +ù_ex‹nsibË + = +csiz +-> +æags + & +APC_EXTENSIBLE +; + +1545  +¥ecs +-> +subv¬ŸÁ +) { + +1547  +ASN_OSUBV_ANY +: + +1548  +ASN_OSUBV_BIT +: + +1549 +ASN__ENCODE_FAILED +; + +1550  +ASN_OSUBV_STR +: + +1551 +ÿnÚiÿl_un™_b™s + = +un™_b™s + = 8; + +1552 if( +cv® +-> +æags + & +APC_CONSTRAINED +) + +1553 +un™_b™s + = +cv® +-> +¿nge_b™s +; + +1554 +bpc + = +OS__BPC_CHAR +; + +1555 +size_š_un™s + = +¡ +-> +size +; + +1557  +ASN_OSUBV_U16 +: + +1558 +ÿnÚiÿl_un™_b™s + = +un™_b™s + = 16; + +1559 if( +cv® +-> +æags + & +APC_CONSTRAINED +) + +1560 +un™_b™s + = +cv® +-> +¿nge_b™s +; + +1561 +bpc + = +OS__BPC_U16 +; + +1562 +size_š_un™s + = +¡ +-> +size + >> 1; + +1563 if( +¡ +-> +size + & 1) { + +1564 + `ASN_DEBUG +("% ¡ršg sizi nÙ modulØ2", +td +-> +Çme +); + +1565 +ASN__ENCODE_FAILED +; + +1568  +ASN_OSUBV_U32 +: + +1569 +ÿnÚiÿl_un™_b™s + = +un™_b™s + = 32; + +1570 if( +cv® +-> +æags + & +APC_CONSTRAINED +) + +1571 +un™_b™s + = +cv® +-> +¿nge_b™s +; + +1572 +bpc + = +OS__BPC_U32 +; + +1573 +size_š_un™s + = +¡ +-> +size + >> 2; + +1574 if( +¡ +-> +size + & 3) { + +1575 + `ASN_DEBUG +("% ¡ršg sizi nÙ modulØ4", +td +-> +Çme +); + +1576 +ASN__ENCODE_FAILED +; + +1581 + `ASN_DEBUG +("Encodšg % štØ%" +ASN_PRI_SIZE + " units of %d bits" + +1583 +td +-> +Çme +, +size_š_un™s +, +un™_b™s +, + +1584 +csiz +-> +low”_bound +, csiz-> +uµ”_bound +, + +1585 +csiz +-> +efãùive_b™s +, +ù_ex‹nsibË + ? " EXT" : ""); + +1589 if( +csiz +-> +efãùive_b™s + >= 0) { + +1590 if(( +ssize_t +) +size_š_un™s + < +csiz +-> +low”_bound + + +1591 || ( +ssize_t +) +size_š_un™s + > +csiz +-> +uµ”_bound +) { + +1592 if( +ù_ex‹nsibË +) { + +1593 +csiz + = & +a¢_DEF_OCTET_STRING_cÚ¡¿šts +. +size +; + +1594 +un™_b™s + = +ÿnÚiÿl_un™_b™s +; + +1595 +šext + = 1; + +1597 +ASN__ENCODE_FAILED +; + +1601 +šext + = 0; + +1604 if( +ù_ex‹nsibË +) { + +1606 if( + `³r_put_ãw_b™s +( +po +, +šext +, 1)) + +1607 +ASN__ENCODE_FAILED +; + +1610 if( +csiz +-> +efãùive_b™s + >ð0 && ! +šext +) { + +1611 + `ASN_DEBUG +("Encodšg %" +ASN_PRI_SIZE + " by‹ (%ld),†’gth iÀ%d b™s", +¡ +-> +size +, + +1612 +size_š_un™s + - +csiz +-> +low”_bound +, csiz-> +efãùive_b™s +); + +1613 +»t + = + `³r_put_ãw_b™s +( +po +, +size_š_un™s + - +csiz +-> +low”_bound +, + +1614 +csiz +-> +efãùive_b™s +); + +1615 if( +»t +è +ASN__ENCODE_FAILED +; + +1616 +»t + = + `OCTET_STRING_³r_put_ch¬aù”s +( +po +, +¡ +-> +buf +, +size_š_un™s +, +bpc +, + +1617 +un™_b™s +, +cv® +-> +low”_bound +, + +1618 +cv® +-> +uµ”_bound +, +pc +); + +1619 if( +»t +è +ASN__ENCODE_FAILED +; + +1620 + `ASN__ENCODED_OK +( +” +); + +1623 + `ASN_DEBUG +("Encodšg %" +ASN_PRI_SIZE + " by‹s", +¡ +-> +size +); + +1625 +buf + = +¡ +->buf; + +1626 + `ASN_DEBUG +("Encodšg %" +ASN_PRI_SIZE + " iÀun™s", +size_š_un™s +); + +1628  +Ãed_eom + = 0; + +1629 +ssize_t + +may_§ve + = + `u³r_put_Ëngth +( +po +, +size_š_un™s +, & +Ãed_eom +); + +1630 if( +may_§ve + < 0è +ASN__ENCODE_FAILED +; + +1632 + `ASN_DEBUG +("Encodšg %" +ASN_PRI_SSIZE + " oà%" +ASN_PRI_SIZE + "%s", +may_§ve +, +size_š_un™s +, + +1633 +Ãed_eom + ? ",+EOM" : ""); + +1635 +»t + = + `OCTET_STRING_³r_put_ch¬aù”s +( +po +, +buf +, +may_§ve +, +bpc +, +un™_b™s +, + +1636 +cv® +-> +low”_bound +, + +1637 +cv® +-> +uµ”_bound +, +pc +); + +1638 if( +»t +è +ASN__ENCODE_FAILED +; + +1640 +buf + +ð +may_§ve + * +bpc +; + +1641 +size_š_un™s + -ð +may_§ve +; + +1642 + `as£¹ +(!( +may_§ve + & 0x07è|| ! +size_š_un™s +); + +1643 if( +Ãed_eom + && + `u³r_put_Ëngth +( +po +, 0, 0)) + +1644 +ASN__ENCODE_FAILED +; + +1645 }  +size_š_un™s +); + +1647 + `ASN__ENCODED_OK +( +” +); + +1648 + } +} + +1650 +a¢_dec_rv®_t + + +1651 + $OCTET_STRING_decode_­” +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +1652 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +1653 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +1654 ** +¥Œ +, +a¢_³r_d©a_t + * +pd +) { + +1656 cÚ¡ +a¢_OCTET_STRING_¥ecifics_t + * +¥ecs + = +td +-> +¥ecifics + + +1657 ? (cÚ¡ +a¢_OCTET_STRING_¥ecifics_t + *) +td +-> +¥ecifics + + +1658 : & +a¢_SPC_OCTET_STRING_¥ecs +; + +1659 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +pc + = +cÚ¡¿šts + ? constraints + +1660 : +td +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +; + +1661 cÚ¡ +a¢_³r_cÚ¡¿št_t + * +cv® +; + +1662 cÚ¡ +a¢_³r_cÚ¡¿št_t + * +csiz +; + +1663 +a¢_dec_rv®_t + +rv® + = { +RC_OK +, 0 }; + +1664 +BIT_STRING_t + * +¡ + = (BIT_STRING_ˆ*)* +¥Œ +; + +1665 +ssize_t + +cÚsumed_my£lf + = 0; + +1666  +»³© +; + +1668 +OS__BPC_BIT + = 0, + +1669 +OS__BPC_CHAR + = 1, + +1670 +OS__BPC_U16 + = 2, + +1671 +OS__BPC_U32 + = 4 + +1672 } +bpc +; + +1673  +un™_b™s +; + +1674  +ÿnÚiÿl_un™_b™s +; + +1676 () +Ýt_codec_ùx +; + +1678 if( +pc +) { + +1679 +cv® + = & +pc +-> +v®ue +; + +1680 +csiz + = & +pc +-> +size +; + +1682 +cv® + = & +a¢_DEF_OCTET_STRING_cÚ¡¿šts +. +v®ue +; + +1683 +csiz + = & +a¢_DEF_OCTET_STRING_cÚ¡¿šts +. +size +; + +1686  +¥ecs +-> +subv¬ŸÁ +) { + +1692  +ASN_OSUBV_BIT +: + +1693 +ÿnÚiÿl_un™_b™s + = +un™_b™s + = 1; + +1694 +bpc + = +OS__BPC_BIT +; + +1696  +ASN_OSUBV_ANY +: + +1697  +ASN_OSUBV_STR +: + +1698 +ÿnÚiÿl_un™_b™s + = +un™_b™s + = 8; + +1702 +bpc + = +OS__BPC_CHAR +; + +1704  +ASN_OSUBV_U16 +: + +1705 +ÿnÚiÿl_un™_b™s + = +un™_b™s + = 16; + +1706 if( +cv® +-> +æags + & +APC_CONSTRAINED +) + +1707 +un™_b™s + = +cv® +-> +¿nge_b™s +; + +1708 +bpc + = +OS__BPC_U16 +; + +1710  +ASN_OSUBV_U32 +: + +1711 +ÿnÚiÿl_un™_b™s + = +un™_b™s + = 32; + +1712 if( +cv® +-> +æags + & +APC_CONSTRAINED +) + +1713 +un™_b™s + = +cv® +-> +¿nge_b™s +; + +1714 +bpc + = +OS__BPC_U32 +; + +1721 if(! +¡ +) { + +1722 +¡ + = ( +BIT_STRING_t + *)(* +¥Œ + = + `CALLOC +(1, +¥ecs +-> +¡ruù_size +)); + +1723 if(! +¡ +è + `RETURN +( +RC_FAIL +); + +1726 + `ASN_DEBUG +("PER Decoding %s size %ld .. %ld bits %d", + +1727 +csiz +-> +æags + & +APC_EXTENSIBLE + ? "extensible" : "non-extensible", + +1728 +csiz +-> +low”_bound +, csiz-> +uµ”_bound +, csiz-> +efãùive_b™s +); + +1730 if( +csiz +-> +æags + & +APC_EXTENSIBLE +) { + +1731  +šext + = + `³r_g‘_ãw_b™s +( +pd +, 1); + +1732 if( +šext + < 0è + `RETURN +( +RC_WMORE +); + +1733 if( +šext +) { + +1734 +csiz + = & +a¢_DEF_OCTET_STRING_cÚ¡¿šts +. +size +; + +1735 +cv® + = & +a¢_DEF_OCTET_STRING_cÚ¡¿šts +. +v®ue +; + +1736 +un™_b™s + = +ÿnÚiÿl_un™_b™s +; + +1740 if( +csiz +-> +efãùive_b™s + >= 0) { + +1741 + `FREEMEM +( +¡ +-> +buf +); + +1742 if( +bpc +) { + +1743 +¡ +-> +size + = +csiz +-> +uµ”_bound + * +bpc +; + +1745 +¡ +-> +size + = ( +csiz +-> +uµ”_bound + + 7) >> 3; + +1747 +¡ +-> +buf + = ( +ušt8_t + *) + `MALLOC +(¡-> +size + + 1); + +1748 if(! +¡ +-> +buf +è{ st-> +size + = 0; + `RETURN +( +RC_FAIL +); } + +1754 if( +csiz +-> +efãùive_b™s + == 0) { + +1755  +»t +; + +1756 ià( +¡ +-> +size + > 2) { + +1757 ià( + `­”_g‘_®ign +( +pd +) < 0) + +1758 + `RETURN +( +RC_FAIL +); + +1760 if( +bpc +) { + +1761 + `ASN_DEBUG +("Decoding OCTET STRING size %ld", + +1762 +csiz +-> +uµ”_bound +); + +1763 +»t + = + `OCTET_STRING_³r_g‘_ch¬aù”s +( +pd +, +¡ +-> +buf +, + +1764 +csiz +-> +uµ”_bound +, +bpc +, +un™_b™s +, + +1765 +cv® +-> +low”_bound +, cv®-> +uµ”_bound +, +pc +); + +1766 if( +»t + > 0è + `RETURN +( +RC_FAIL +); + +1768 + `ASN_DEBUG +("Decoding BIT STRING size %ld", + +1769 +csiz +-> +uµ”_bound +); + +1770 +»t + = + `³r_g‘_mªy_b™s +( +pd +, +¡ +-> +buf +, 0, + +1771 +un™_b™s + * +csiz +-> +uµ”_bound +); + +1773 if( +»t + < 0è + `RETURN +( +RC_WMORE +); + +1774 +cÚsumed_my£lf + +ð +un™_b™s + * +csiz +-> +uµ”_bound +; + +1775 +¡ +-> +buf +[¡-> +size +] = 0; + +1776 if( +bpc + == 0) { + +1777  +ubs + = ( +csiz +-> +uµ”_bound + & 0x7); + +1778 +¡ +-> +b™s_unu£d + = +ubs + ? 8 - ubs : 0; + +1780 + `RETURN +( +RC_OK +); + +1783 +¡ +-> +size + = 0; + +1785 +ssize_t + +¿w_Ën +; + +1786 +ssize_t + +Ën_by‹s +; + +1787 +ssize_t + +Ën_b™s +; + +1788 * +p +; + +1789  +»t +; + +1792 ià( +csiz +-> +uµ”_bound + - csiz-> +low”_bound + == 0) + +1794 +¿w_Ën + = + `­”_g‘_Ëngth +( +pd +, -1, +csiz +-> +efãùive_b™s +, & +»³© +); + +1796 +¿w_Ën + = + `­”_g‘_Ëngth +( +pd +, +csiz +-> +uµ”_bound + - csiz-> +low”_bound + + 1, csiz-> +efãùive_b™s +, & +»³© +); + +1797 +»³© + = 0; + +1798 if( +¿w_Ën + < 0è + `RETURN +( +RC_WMORE +); + +1799 +¿w_Ën + +ð +csiz +-> +low”_bound +; + +1801 + `ASN_DEBUG +("Got PER†engthƒb %ld,†en %ld, %s (%s)", + +1802 () +csiz +-> +efãùive_b™s +, () +¿w_Ën +, + +1803 +»³© + ? "»³©" : "Úû", +td +-> +Çme +); + +1805 ià( +¿w_Ën + > 2) { + +1806 ià( + `­”_g‘_®ign +( +pd +) < 0) + +1807 + `RETURN +( +RC_FAIL +); + +1810 if( +bpc +) { + +1811 +Ën_by‹s + = +¿w_Ën + * +bpc +; + +1812 +Ën_b™s + = +Ën_by‹s + * +un™_b™s +; + +1814 +Ën_b™s + = +¿w_Ën +; + +1815 +Ën_by‹s + = ( +Ën_b™s + + 7) >> 3; + +1816 if( +Ën_b™s + & 0x7) + +1817 +¡ +-> +b™s_unu£d + = 8 - ( +Ën_b™s + & 0x7); + +1820 +p + = + `REALLOC +( +¡ +-> +buf +, st-> +size + + +Ën_by‹s + + 1); + +1821 if(! +p +è + `RETURN +( +RC_FAIL +); + +1822 +¡ +-> +buf + = ( +ušt8_t + *) +p +; + +1824 if( +bpc +) { + +1825 +»t + = + `OCTET_STRING_³r_g‘_ch¬aù”s +( +pd +, + +1826 & +¡ +-> +buf +[¡-> +size +], +¿w_Ën +, +bpc +, +un™_b™s +, + +1827 +cv® +-> +low”_bound +, cv®-> +uµ”_bound +, +pc +); + +1828 if( +»t + > 0è + `RETURN +( +RC_FAIL +); + +1830 +»t + = + `³r_g‘_mªy_b™s +( +pd +, & +¡ +-> +buf +[¡-> +size +], + +1831 0, +Ën_b™s +); + +1833 if( +»t + < 0è + `RETURN +( +RC_WMORE +); + +1834 +¡ +-> +size + +ð +Ën_by‹s +; + +1835 }  +»³© +); + +1836 +¡ +-> +buf +[¡-> +size +] = 0; + +1838  +rv® +; + +1839 + } +} + +1841 +a¢_’c_rv®_t + + +1842 + $OCTET_STRING_’code_­” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +1843 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +1844 cÚ¡ * +¥Œ +, +a¢_³r_ou_t + * +po +) { + +1846 cÚ¡ +a¢_OCTET_STRING_¥ecifics_t + * +¥ecs + = +td +-> +¥ecifics + + +1847 ? (cÚ¡ +a¢_OCTET_STRING_¥ecifics_t + *) +td +-> +¥ecifics + + +1848 : & +a¢_SPC_OCTET_STRING_¥ecs +; + +1849 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +pc + = +cÚ¡¿šts + ? constraints + +1850 : +td +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +; + +1851 cÚ¡ +a¢_³r_cÚ¡¿št_t + * +cv® +; + +1852 cÚ¡ +a¢_³r_cÚ¡¿št_t + * +csiz +; + +1853 cÚ¡ +BIT_STRING_t + * +¡ + = (cÚ¡ BIT_STRING_ˆ*) +¥Œ +; + +1854 +a¢_’c_rv®_t + +” + = { 0, 0, 0 }; + +1855  +šext + = 0; + +1856  +un™_b™s +; + +1857  +ÿnÚiÿl_un™_b™s +; + +1858  +sizešun™s +; + +1859 cÚ¡ +ušt8_t + * +buf +; + +1860  +»t +; + +1862 +OS__BPC_BIT + = 0, + +1863 +OS__BPC_CHAR + = 1, + +1864 +OS__BPC_U16 + = 2, + +1865 +OS__BPC_U32 + = 4 + +1866 } +bpc +; + +1867  +ù_ex‹nsibË +; + +1869 if(! +¡ + || (!¡-> +buf + && st-> +size +)) + +1870 +ASN__ENCODE_FAILED +; + +1872 if( +pc +) { + +1873 +cv® + = & +pc +-> +v®ue +; + +1874 +csiz + = & +pc +-> +size +; + +1876 +cv® + = & +a¢_DEF_OCTET_STRING_cÚ¡¿šts +. +v®ue +; + +1877 +csiz + = & +a¢_DEF_OCTET_STRING_cÚ¡¿šts +. +size +; + +1879 +ù_ex‹nsibË + = +csiz +-> +æags + & +APC_EXTENSIBLE +; + +1881  +¥ecs +-> +subv¬ŸÁ +) { + +1886  +ASN_OSUBV_BIT +: + +1887 +ÿnÚiÿl_un™_b™s + = +un™_b™s + = 1; + +1888 +bpc + = +OS__BPC_BIT +; + +1889 +sizešun™s + = +¡ +-> +size + * 8 - (¡-> +b™s_unu£d + & 0x07); + +1890 + `ASN_DEBUG +("BIT STRING of %d bytes", + +1891 +sizešun™s +); + +1893  +ASN_OSUBV_ANY +: + +1894  +ASN_OSUBV_STR +: + +1895 +ÿnÚiÿl_un™_b™s + = +un™_b™s + = 8; + +1899 +bpc + = +OS__BPC_CHAR +; + +1900 +sizešun™s + = +¡ +-> +size +; + +1902  +ASN_OSUBV_U16 +: + +1903 +ÿnÚiÿl_un™_b™s + = +un™_b™s + = 16; + +1904 if( +cv® +-> +æags + & +APC_CONSTRAINED +) + +1905 +un™_b™s + = +cv® +-> +¿nge_b™s +; + +1906 +bpc + = +OS__BPC_U16 +; + +1907 +sizešun™s + = +¡ +-> +size + / 2; + +1909  +ASN_OSUBV_U32 +: + +1910 +ÿnÚiÿl_un™_b™s + = +un™_b™s + = 32; + +1911 if( +cv® +-> +æags + & +APC_CONSTRAINED +) + +1912 +un™_b™s + = +cv® +-> +¿nge_b™s +; + +1913 +bpc + = +OS__BPC_U32 +; + +1914 +sizešun™s + = +¡ +-> +size + / 4; + +1918 + `ASN_DEBUG +("Encoding %s into %d units of %d bits" + +1920 +td +-> +Çme +, +sizešun™s +, +un™_b™s +, + +1921 +csiz +-> +low”_bound +, csiz-> +uµ”_bound +, + +1922 +csiz +-> +efãùive_b™s +, +ù_ex‹nsibË + ? " EXT" : ""); + +1926 if( +csiz +-> +efãùive_b™s + >= 0) { + +1927 if(() +sizešun™s + < +csiz +-> +low”_bound + + +1928 || () +sizešun™s + > +csiz +-> +uµ”_bound +) { + +1929 if( +ù_ex‹nsibË +) { + +1930 +cv® + = & +a¢_DEF_OCTET_STRING_cÚ¡¿šts +. +v®ue +; + +1931 +csiz + = & +a¢_DEF_OCTET_STRING_cÚ¡¿šts +. +size +; + +1932 +un™_b™s + = +ÿnÚiÿl_un™_b™s +; + +1933 +šext + = 1; + +1935 +ASN__ENCODE_FAILED +; + +1938 +šext + = 0; + +1942 if( +ù_ex‹nsibË +) { + +1944 if( + `³r_put_ãw_b™s +( +po +, +šext +, 1)) + +1945 +ASN__ENCODE_FAILED +; + +1951 if( +csiz +-> +efãùive_b™s + >= 0) { + +1952 + `ASN_DEBUG +("Encoding %lu bytes (%ld),†ength in %d bits", + +1953 +¡ +-> +size +, +sizešun™s + - +csiz +-> +low”_bound +, + +1954 +csiz +-> +efãùive_b™s +); + +1955 ià( +csiz +-> +efãùive_b™s + > 0) { + +1956 +»t + = + `­”_put_Ëngth +( +po +, +csiz +-> +uµ”_bound + - csiz-> +low”_bound + + 1, +sizešun™s + - csiz->lower_bound); + +1957 if( +»t +è +ASN__ENCODE_FAILED +; + +1961 ià(( +¡ +-> +size + > 2è|| ( +csiz +-> +low”_bound + !ðcsiz-> +uµ”_bound +)) { + +1962 ià( + `­”_put_®ign +( +po +) < 0) + +1963 +ASN__ENCODE_FAILED +; + +1965 if( +bpc +) { + +1966 +»t + = + `OCTET_STRING_³r_put_ch¬aù”s +( +po +, +¡ +-> +buf +, + +1967 +sizešun™s +, +bpc +, +un™_b™s +, + +1968 +cv® +-> +low”_bound +, cv®-> +uµ”_bound +, +pc +); + +1970 +»t + = + `³r_put_mªy_b™s +( +po +, +¡ +-> +buf +, + +1971 +sizešun™s + * +un™_b™s +); + +1973 if( +»t +è +ASN__ENCODE_FAILED +; + +1974 + `ASN__ENCODED_OK +( +” +); + +1977 + `ASN_DEBUG +("Encodšg %lu by‹s", +¡ +-> +size +); + +1979 if( +sizešun™s + == 0) { + +1980 if( + `­”_put_Ëngth +( +po +, -1, 0)) + +1981 +ASN__ENCODE_FAILED +; + +1982 + `ASN__ENCODED_OK +( +” +); + +1985 +buf + = +¡ +->buf; + +1986  +sizešun™s +) { + +1987 +ssize_t + +maySave + = + `­”_put_Ëngth +( +po +, -1, +sizešun™s +); + +1989 if( +maySave + < 0è +ASN__ENCODE_FAILED +; + +1991 + `ASN_DEBUG +("Encoding %ld of %ld", + +1992 () +maySave +, () +sizešun™s +); + +1994 if( +bpc +) { + +1995 +»t + = + `OCTET_STRING_³r_put_ch¬aù”s +( +po +, +buf +, + +1996 +maySave +, +bpc +, +un™_b™s +, + +1997 +cv® +-> +low”_bound +, cv®-> +uµ”_bound +, +pc +); + +1999 +»t + = + `³r_put_mªy_b™s +( +po +, +buf +, +maySave + * +un™_b™s +); + +2001 if( +»t +è +ASN__ENCODE_FAILED +; + +2003 if( +bpc +) + +2004 +buf + +ð +maySave + * +bpc +; + +2006 +buf + +ð +maySave + >> 3; + +2007 +sizešun™s + -ð +maySave +; + +2008 + `as£¹ +(!( +maySave + & 0x07è|| ! +sizešun™s +); + +2011 + `ASN__ENCODED_OK +( +” +); + +2012 + } +} + +2017 + $OCTET_STRING_´št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +2018  +žev– +, +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +2019 cÚ¡ * cÚ¡ +h2c + = "0123456789ABCDEF"; + +2020 cÚ¡ +OCTET_STRING_t + * +¡ + = (cÚ¡ OCTET_STRING_ˆ*) +¥Œ +; + +2021  +sü©ch +[16 * 3 + 4]; + +2022 * +p + = +sü©ch +; + +2023 +ušt8_t + * +buf +; + +2024 +ušt8_t + * +’d +; + +2025 +size_t + +i +; + +2027 () +td +; + +2029 if(! +¡ + || (!¡-> +buf + && st-> +size +)) + +2030  ( + `cb +("", 8, +­p_key +) < 0) ? -1 : 0; + +2035 +buf + = +¡ +->buf; + +2036 +’d + = +buf + + +¡ +-> +size +; + +2037  +i + = 0; +buf + < +’d +; buf++, i++) { + +2038 if(!( +i + % 16è&& (˜|| +¡ +-> +size + > 16)) { + +2039 if( + `cb +( +sü©ch +, +p + - sü©ch, +­p_key +) < 0) + +2041 + `_i_INDENT +(1); + +2042 +p + = +sü©ch +; + +2044 * +p +++ = +h2c +[(* +buf + >> 4) & 0x0F]; + +2045 * +p +++ = +h2c +[* +buf + & 0x0F]; + +2046 * +p +++ = 0x20; + +2049 if( +p + > +sü©ch +) { + +2050 +p +--; + +2051 if( + `cb +( +sü©ch +, +p + - sü©ch, +­p_key +) < 0) + +2056 + } +} + +2059 + $OCTET_STRING_´št_utf8 +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +2060  +žev– +, +a¢_­p_cÚsume_by‹s_f + * +cb +, + +2061 * +­p_key +) { + +2062 cÚ¡ +OCTET_STRING_t + * +¡ + = (cÚ¡ OCTET_STRING_ˆ*) +¥Œ +; + +2064 () +td +; + +2065 () +žev– +; + +2067 if( +¡ + && (¡-> +buf + || !¡-> +size +)) { + +2068  ( + `cb +( +¡ +-> +buf +, st-> +size +, +­p_key +) < 0) ? -1 : 0; + +2070  ( + `cb +("", 8, +­p_key +) < 0) ? -1 : 0; + +2072 + } +} + +2075 + $OCTET_STRING_ä“ +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, * +¥Œ +, + +2076 +a¢_¡ruù_ä“_m‘hod + +m‘hod +) { + +2077 +OCTET_STRING_t + * +¡ + = (OCTET_STRING_ˆ*) +¥Œ +; + +2078 cÚ¡ +a¢_OCTET_STRING_¥ecifics_t + * +¥ecs +; + +2079 +a¢_¡ruù_ùx_t + * +ùx +; + +2080  +_¡ack + * +¡ck +; + +2082 if(! +td + || ! +¡ +) + +2085 +¥ecs + = +td +-> +¥ecifics + + +2086 ? (cÚ¡ +a¢_OCTET_STRING_¥ecifics_t + *) +td +-> +¥ecifics + + +2087 : & +a¢_SPC_OCTET_STRING_¥ecs +; + +2088 +ùx + = ( +a¢_¡ruù_ùx_t + *)((*) +¡ + + +¥ecs +-> +ùx_off£t +); + +2090 + `ASN_DEBUG +("F»ešg % a OCTET STRING", +td +-> +Çme +); + +2092 if( +¡ +-> +buf +) { + +2093 + `FREEMEM +( +¡ +-> +buf +); + +2094 +¡ +-> +buf + = 0; + +2100 +¡ck + = ( +_¡ack + *) +ùx +-> +±r +; + +2101 if( +¡ck +) { + +2102  +¡ck +-> +ž +) { + +2103  +_¡ack_– + * +£l + = +¡ck +-> +ž +; + +2104 +¡ck +-> +ž + = +£l +-> +´ev +; + +2105 + `FREEMEM +( +£l +); + +2107 + `FREEMEM +( +¡ck +); + +2110  +m‘hod +) { + +2111  +ASFM_FREE_EVERYTHING +: + +2112 + `FREEMEM +( +¥Œ +); + +2114  +ASFM_FREE_UNDERLYING +: + +2116  +ASFM_FREE_UNDERLYING_AND_RESET +: + +2117 + `mem£t +( +¥Œ +, 0, + +2118 +td +-> +¥ecifics + + +2119 ? ((cÚ¡ +a¢_OCTET_STRING_¥ecifics_t + *)( +td +-> +¥ecifics +)) + +2120 -> +¡ruù_size + + +2121 : ( +OCTET_STRING_t +)); + +2124 + } +} + +2130 + $OCTET_STRING_äomBuf +( +OCTET_STRING_t + * +¡ +, cÚ¡ * +¡r +,  +Ën +) { + +2131 * +buf +; + +2133 if( +¡ + =ð0 || ( +¡r + =ð0 && +Ën +)) { + +2134 +”ºo + = +EINVAL +; + +2141 if( +¡r + =ð +NULL +) { + +2142 + `FREEMEM +( +¡ +-> +buf +); + +2143 +¡ +-> +buf + = 0; + +2144 +¡ +-> +size + = 0; + +2149 if( +Ën + < 0) + +2150 +Ën + = + `¡¾’ +( +¡r +); + +2153 +buf + = + `MALLOC +( +Ën + + 1); + +2154 if( +buf + =ð +NULL +) + +2157 + `memýy +( +buf +, +¡r +, +Ën +); + +2158 (( +ušt8_t + *) +buf +)[ +Ën +] = '\0'; + +2159 + `FREEMEM +( +¡ +-> +buf +); + +2160 +¡ +-> +buf + = ( +ušt8_t + *)buf; + +2161 +¡ +-> +size + = +Ën +; + +2164 + } +} + +2166 +OCTET_STRING_t + * + +2167 + $OCTET_STRING_Ãw_äomBuf +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¡r +, + +2168  +Ën +) { + +2169 cÚ¡ +a¢_OCTET_STRING_¥ecifics_t + * +¥ecs + = + +2170 +td +-> +¥ecifics + ? (cÚ¡ +a¢_OCTET_STRING_¥ecifics_t + *)td->specifics + +2171 : & +a¢_SPC_OCTET_STRING_¥ecs +; + +2172 +OCTET_STRING_t + * +¡ +; + +2174 +¡ + = ( +OCTET_STRING_t + *) + `CALLOC +(1, +¥ecs +-> +¡ruù_size +); + +2175 if( +¡ + && +¡r + && + `OCTET_STRING_äomBuf +(¡, sŒ, +Ën +)) { + +2176 + `FREEMEM +( +¡ +); + +2177 +¡ + = +NULL +; + +2180  +¡ +; + +2181 + } +} + +2188 + $OCTET_STRING_com·» +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +­Œ +, + +2189 cÚ¡ * +b±r +) { + +2190 cÚ¡ +a¢_OCTET_STRING_¥ecifics_t + * +¥ecs + = +td +-> +¥ecifics +; + +2191 cÚ¡ +OCTET_STRING_t + * +a + = +­Œ +; + +2192 cÚ¡ +OCTET_STRING_t + * +b + = +b±r +; + +2194 + `as£¹ +(! +¥ecs + || s³cs-> +subv¬ŸÁ + !ð +ASN_OSUBV_BIT +); + +2196 if( +a + && +b +) { + +2197 +size_t + +commÚ_´efix_size + = +a +-> +size + <ð +b +->size ?‡->size : b->size; + +2198  +»t + = + `memcmp +( +a +-> +buf +, +b +->buf, +commÚ_´efix_size +); + +2199 if( +»t + == 0) { + +2201 if( +a +-> +size + < +b +->size) { + +2203 } if( +a +-> +size + > +b +->size) { + +2209  +»t + < 0 ? -1 : 1; + +2211 } if(! +a + && ! +b +) { + +2213 } if(! +a +) { + +2219 + } +} + +2224  +ušt32_t + + +2225 + $OCTET_STRING__¿ndom_ch¬ +( +lb +,  +ub +) { + +2226 + `as£¹ +( +lb + <ð +ub +); + +2227  + `a¢_¿ndom_b‘w“n +(0, 16)) { + +2229 if( +lb + < +ub +) †b + 1; + +2232  +lb +; + +2234 if( +lb + < +ub +)  ub - 1; + +2237  +ub +; + +2239  + `a¢_¿ndom_b‘w“n +( +lb +, +ub +); + +2241 + } +} + +2244 +size_t + + +2245 + $OCTET_STRING_¿ndom_Ëngth_cÚ¡¿šed +( + +2246 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +2247 cÚ¡ +a¢_’codšg_cÚ¡¿šts_t + * +cÚ¡¿šts +, +size_t + +max_Ëngth +) { + +2248 cÚ¡  +Ëngths +[] = {0, 1, 2, 3, 4, 8, + +2251 +size_t + +ºd_Ën +; + +2254 +ºd_Ën + = +Ëngths +[ + `a¢_¿ndom_b‘w“n +( + +2255 0, ( +Ëngths +) / (lengths[0]) - 1)]; + +2257 if(! +cÚ¡¿šts + || !cÚ¡¿šts-> +³r_cÚ¡¿šts +) + +2258 +cÚ¡¿šts + = & +td +-> +’codšg_cÚ¡¿šts +; + +2259 if( +cÚ¡¿šts +-> +³r_cÚ¡¿šts +) { + +2260 cÚ¡ +a¢_³r_cÚ¡¿št_t + * +pc + = & +cÚ¡¿šts +-> +³r_cÚ¡¿šts +-> +size +; + +2261 if( +pc +-> +æags + & +APC_CONSTRAINED +) { + +2262  +sugge¡ed_uµ”_bound + = +pc +-> +uµ”_bound + < ( +ssize_t +) +max_Ëngth + + +2263 ? +pc +-> +uµ”_bound + + +2264 : ( +ssize_t +) +max_Ëngth +; + +2265 if( +max_Ëngth + <ð( +size_t +) +pc +-> +low”_bound +) { + +2266  +pc +-> +low”_bound +; + +2268 if( +pc +-> +æags + & +APC_EXTENSIBLE +) { + +2269  + `a¢_¿ndom_b‘w“n +(0, 5)) { + +2271 if( +pc +-> +low”_bound + > 0) { + +2272 +ºd_Ën + = +pc +-> +low”_bound + - 1; + +2277 +ºd_Ën + = +pc +-> +uµ”_bound + + 1; + +2281 if( +ºd_Ën + <ð +max_Ëngth +) { + +2286 +ºd_Ën + = + `a¢_¿ndom_b‘w“n +( +pc +-> +low”_bound +, + +2287 +sugge¡ed_uµ”_bound +); + +2290 +ºd_Ën + = + +2291 + `a¢_¿ndom_b‘w“n +( +pc +-> +low”_bound +, +sugge¡ed_uµ”_bound +); + +2294 +ºd_Ën + = + `a¢_¿ndom_b‘w“n +(0, +max_Ëngth +); + +2296 } if( +ºd_Ën + > +max_Ëngth +) { + +2297 +ºd_Ën + = + `a¢_¿ndom_b‘w“n +(0, +max_Ëngth +); + +2300  +ºd_Ën +; + +2301 + } +} + +2303 +a¢_¿ndom_fžl_»suÉ_t + + +2304 + $OCTET_STRING_¿ndom_fžl +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¥Œ +, + +2305 cÚ¡ +a¢_’codšg_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +2306 +size_t + +max_Ëngth +) { + +2307 cÚ¡ +a¢_OCTET_STRING_¥ecifics_t + * +¥ecs + = +td +-> +¥ecifics + + +2308 ? (cÚ¡ +a¢_OCTET_STRING_¥ecifics_t + *) +td +-> +¥ecifics + + +2309 : & +a¢_SPC_OCTET_STRING_¥ecs +; + +2310 +a¢_¿ndom_fžl_»suÉ_t + +»suÉ_ok + = { +ARFILL_OK +, 1}; + +2311 +a¢_¿ndom_fžl_»suÉ_t + +»suÉ_çžed + = { +ARFILL_FAILED +, 0}; + +2312 +a¢_¿ndom_fžl_»suÉ_t + +»suÉ_sk³d + = { +ARFILL_SKIPPED +, 0}; + +2313  +un™_by‹s + = 1; + +2314  +þb + = 0; + +2315  +cub + = 255; + +2316 +ušt8_t + * +buf +; + +2317 +ušt8_t + * +b’d +; + +2318 +ušt8_t + * +b +; + +2319 +size_t + +ºd_Ën +; + +2320 +OCTET_STRING_t + * +¡ +; + +2322 if( +max_Ëngth + =ð0 && !* +¥Œ +è +»suÉ_sk³d +; + +2324  +¥ecs +-> +subv¬ŸÁ +) { + +2326  +ASN_OSUBV_ANY +: + +2327  +»suÉ_çžed +; + +2328  +ASN_OSUBV_BIT +: + +2330  +»suÉ_çžed +; + +2331  +ASN_OSUBV_STR +: + +2332 +un™_by‹s + = 1; + +2333 +þb + = 0; + +2334 +cub + = 255; + +2336  +ASN_OSUBV_U16 +: + +2337 +un™_by‹s + = 2; + +2338 +þb + = 0; + +2339 +cub + = 65535; + +2341  +ASN_OSUBV_U32 +: + +2342 +un™_by‹s + = 4; + +2343 +þb + = 0; + +2344 +cub + = 0x10FFFF; + +2348 if(! +cÚ¡¿šts + || !cÚ¡¿šts-> +³r_cÚ¡¿šts +) + +2349 +cÚ¡¿šts + = & +td +-> +’codšg_cÚ¡¿šts +; + +2350 if( +cÚ¡¿šts +-> +³r_cÚ¡¿šts +) { + +2351 cÚ¡ +a¢_³r_cÚ¡¿št_t + * +pc + = & +cÚ¡¿šts +-> +³r_cÚ¡¿šts +-> +v®ue +; + +2352 if( +pc +-> +æags + & +APC_SEMI_CONSTRAINED +) { + +2353 +þb + = +pc +-> +low”_bound +; + +2354 } if( +pc +-> +æags + & +APC_CONSTRAINED +) { + +2355 +þb + = +pc +-> +low”_bound +; + +2356 +cub + = +pc +-> +uµ”_bound +; + +2360 +ºd_Ën + = + +2361 + `OCTET_STRING_¿ndom_Ëngth_cÚ¡¿šed +( +td +, +cÚ¡¿šts +, +max_Ëngth +); + +2363 +buf + = + `CALLOC +( +un™_by‹s +, +ºd_Ën + + 1); + +2364 if(! +buf +è +»suÉ_çžed +; + +2366 +b’d + = & +buf +[ +un™_by‹s + * +ºd_Ën +]; + +2368  +un™_by‹s +) { + +2370  +b + = +buf +; b < +b’d +; b +ð +un™_by‹s +) { + +2371 *( +ušt8_t + *) +b + = + `OCTET_STRING__¿ndom_ch¬ +( +þb +, +cub +); + +2373 *( +ušt8_t + *) +b + = 0; + +2376  +b + = +buf +; b < +b’d +; b +ð +un™_by‹s +) { + +2377 +ušt32_t + +code + = + `OCTET_STRING__¿ndom_ch¬ +( +þb +, +cub +); + +2378 +b +[0] = +code + >> 8; + +2379 +b +[1] = +code +; + +2381 *( +ušt16_t + *) +b + = 0; + +2384  +b + = +buf +; b < +b’d +; b +ð +un™_by‹s +) { + +2385 +ušt32_t + +code + = + `OCTET_STRING__¿ndom_ch¬ +( +þb +, +cub +); + +2386 +b +[0] = +code + >> 24; + +2387 +b +[1] = +code + >> 16; + +2388 +b +[2] = +code + >> 8; + +2389 +b +[3] = +code +; + +2391 *( +ušt32_t + *) +b + = 0; + +2395 if(* +¥Œ +) { + +2396 +¡ + = * +¥Œ +; + +2397 + `FREEMEM +( +¡ +-> +buf +); + +2399 +¡ + = ( +OCTET_STRING_t + *)(* +¥Œ + = + `CALLOC +(1, +¥ecs +-> +¡ruù_size +)); + +2400 if(! +¡ +) { + +2401 + `FREEMEM +( +buf +); + +2402  +»suÉ_çžed +; + +2406 +¡ +-> +buf + = buf; + +2407 +¡ +-> +size + = +un™_by‹s + * +ºd_Ën +; + +2409 +»suÉ_ok +. +Ëngth + = +¡ +-> +size +; + +2410  +»suÉ_ok +; + +2411 + } +} + + @OPEN_TYPE.c + +5  + ~ + +6  + ~ + +7  + ~ + +8  + ~<³r_ݒty³.h +> + +9  + ~<”ºo.h +> + +11 +a¢_TYPE_ݔ©iÚ_t + + ga¢_OP_OPEN_TYPE + = { + +12 +OPEN_TYPE_ä“ +, + +13 +OPEN_TYPE_´št +, + +14 +OPEN_TYPE_com·» +, + +15 +OPEN_TYPE_decode_b” +, + +16 +OPEN_TYPE_’code_d” +, + +17 +OPEN_TYPE_decode_x” +, + +18 +OPEN_TYPE_’code_x” +, + +19 #ifdeà +ASN_DISABLE_OER_SUPPORT + + +22 +OPEN_TYPE_decode_Ûr +, + +23 +OPEN_TYPE_’code_Ûr +, + +25 #ifdeà +ASN_DISABLE_PER_SUPPORT + + +28 +OPEN_TYPE_decode_u³r +, + +29 +OPEN_TYPE_’code_u³r +, + +30 +OPEN_TYPE_decode_­” +, + +31 +OPEN_TYPE_’code_­” +, + +37 #undeà +ADVANCE + + +38  + #ADVANCE +( +num_by‹s +) \ + +40 +size_t + +num + = +num_by‹s +; \ + +41 +±r + = ((cÚ¡ *íŒè+ +num +; \ + +42 +size + -ð +num +; \ + +43 +cÚsumed_my£lf + +ð +num +; \ + +44 } 0) + + ) + +46 +a¢_dec_rv®_t + + +47 + $OPEN_TYPE_b”_g‘ +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +48 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, * +¥Œ +, + +49 cÚ¡ +a¢_TYPE_memb”_t + * +–m +, cÚ¡ * +±r +, +size_t + +size +) { + +50 +size_t + +cÚsumed_my£lf + = 0; + +51 +a¢_ty³_£ËùÜ_»suÉ_t + +£Ëùed +; + +52 * +memb_±r +; + +53 ** +memb_±r2 +; + +54 * +šÃr_v®ue +; + +55 +a¢_dec_rv®_t + +rv +; + +57 if(!( +–m +-> +æags + & +ATF_OPEN_TYPE +)) { + +58 +ASN__DECODE_FAILED +; + +61 if(! +–m +-> +ty³_£ËùÜ +) { + +62 + `ASN_DEBUG +("Type selector is‚ot defined for Open Type %s->%s->%s", + +63 +td +-> +Çme +, +–m +->Çme,ƒlm-> +ty³ +->name); + +64 +ASN__DECODE_FAILED +; + +67 +£Ëùed + = +–m +-> + `ty³_£ËùÜ +( +td +, +¥Œ +); + +68 if(! +£Ëùed +. +´e£nû_šdex +) { + +69 +ASN__DECODE_FAILED +; + +73 if( +–m +-> +æags + & +ATF_POINTER +) { + +74 +memb_±r2 + = (**)((*) +¥Œ + + +–m +-> +memb_off£t +); + +76 +memb_±r + = (*) +¥Œ + + +–m +-> +memb_off£t +; + +77 +memb_±r2 + = & +memb_±r +; + +79 if(* +memb_±r2 + !ð +NULL +) { + +81 if( + `CHOICE_v¬ŸÁ_£t_´e£nû +( +–m +-> +ty³ +, * +memb_±r2 +, 0) != 0) { + +82 +ASN__DECODE_FAILED +; + +86 +šÃr_v®ue + = + +87 (*)* +memb_±r2 + + +88 + +–m +-> +ty³ +-> +–em’ts +[ +£Ëùed +. +´e£nû_šdex + - 1]. +memb_off£t +; + +90 + `ASN_DEBUG +("´e£nû %d\n", +£Ëùed +. +´e£nû_šdex +); + +92 +rv + = +£Ëùed +. +ty³_desütÜ +-> +Ý +-> + `b”_decod” +( + +93 +Ýt_codec_ùx +, +£Ëùed +. +ty³_desütÜ +, & +šÃr_v®ue +, +±r +, +size +, + +94 +–m +-> +g_mode +); + +95 + `ADVANCE +( +rv +. +cÚsumed +); + +96 +rv +. +cÚsumed + = 0; + +97  +rv +. +code +) { + +98  +RC_OK +: + +99 if( + `CHOICE_v¬ŸÁ_£t_´e£nû +( +–m +-> +ty³ +, * +memb_±r2 +, + +100 +£Ëùed +. +´e£nû_šdex +) + +102 +rv +. +code + = +RC_OK +; + +103 +rv +. +cÚsumed + = +cÚsumed_my£lf +; + +104  +rv +; + +109  +RC_FAIL +: + +110 +rv +. +cÚsumed + = +cÚsumed_my£lf +; + +112  +RC_WMORE +: + +116 if(* +memb_±r2 +) { + +117 if( +–m +-> +æags + & +ATF_POINTER +) { + +118 + `ASN_STRUCT_FREE +(* +£Ëùed +. +ty³_desütÜ +, +šÃr_v®ue +); + +119 * +memb_±r2 + = +NULL +; + +121 + `ASN_STRUCT_RESET +(* +£Ëùed +. +ty³_desütÜ +, + +122 +šÃr_v®ue +); + +125  +rv +; + +126 + } +} + +128 +a¢_dec_rv®_t + + +129 + $OPEN_TYPE_x”_g‘ +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +130 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, * +¥Œ +, + +131 cÚ¡ +a¢_TYPE_memb”_t + * +–m +, cÚ¡ * +±r +, +size_t + +size +) { + +132 +size_t + +cÚsumed_my£lf + = 0; + +133 +a¢_ty³_£ËùÜ_»suÉ_t + +£Ëùed +; + +134 * +memb_±r +; + +135 ** +memb_±r2 +; + +136 * +šÃr_v®ue +; + +137 +a¢_dec_rv®_t + +rv +; + +139  +x”_cڋxt + = 0; + +140 +ssize_t + +ch_size +; + +141 +px”_chunk_ty³_e + +ch_ty³ +; + +143 if(!( +–m +-> +æags + & +ATF_OPEN_TYPE +)) { + +144 +ASN__DECODE_FAILED +; + +147 if(! +–m +-> +ty³_£ËùÜ +) { + +148 + `ASN_DEBUG +("Type selector is‚ot defined for Open Type %s->%s->%s", + +149 +td +-> +Çme +, +–m +->Çme,ƒlm-> +ty³ +->name); + +150 +ASN__DECODE_FAILED +; + +153 +£Ëùed + = +–m +-> + `ty³_£ËùÜ +( +td +, +¥Œ +); + +154 if(! +£Ëùed +. +´e£nû_šdex +) { + +155 +ASN__DECODE_FAILED +; + +159 + `as£¹ +( +–m +-> +æags + =ð +ATF_OPEN_TYPE +); + +160 if( +–m +-> +æags + & +ATF_POINTER +) { + +161 +memb_±r2 + = (**)((*) +¥Œ + + +–m +-> +memb_off£t +); + +163 +memb_±r + = (*) +¥Œ + + +–m +-> +memb_off£t +; + +164 +memb_±r2 + = & +memb_±r +; + +166 if(* +memb_±r2 + !ð +NULL +) { + +168 if( + `CHOICE_v¬ŸÁ_£t_´e£nû +( +–m +-> +ty³ +, * +memb_±r2 +, 0) + +170 +ASN__DECODE_FAILED +; + +178 +ch_size + = + `x”_Ãxt_tok’ +(& +x”_cڋxt +, +±r +, +size +, & +ch_ty³ +); + +179 if( +ch_size + < 0) { + +180 +ASN__DECODE_FAILED +; + +182  +ch_ty³ +) { + +183  +PXER_WMORE +: + +184 +ASN__DECODE_STARVED +; + +185  +PXER_COMMENT +: + +186  +PXER_TEXT +: + +187 + `ADVANCE +( +ch_size +); + +189  +PXER_TAG +: + +199  + `x”_check_g +( +±r +, +ch_size +, +–m +-> +Çme +)) { + +200  +XCT_OPENING +: + +201 + `ADVANCE +( +ch_size +); + +203  +XCT_BROKEN +: + +205 +ASN__DECODE_FAILED +; + +208 +šÃr_v®ue + = + +209 (*)* +memb_±r2 + + +210 + +–m +-> +ty³ +-> +–em’ts +[ +£Ëùed +. +´e£nû_šdex + - 1]. +memb_off£t +; + +212 +rv + = +£Ëùed +. +ty³_desütÜ +-> +Ý +-> + `x”_decod” +( + +213 +Ýt_codec_ùx +, +£Ëùed +. +ty³_desütÜ +, & +šÃr_v®ue +, +NULL +, +±r +, +size +); + +214 + `ADVANCE +( +rv +. +cÚsumed +); + +215 +rv +. +cÚsumed + = 0; + +216  +rv +. +code +) { + +217  +RC_OK +: + +218 if( + `CHOICE_v¬ŸÁ_£t_´e£nû +( +–m +-> +ty³ +, * +memb_±r2 +, + +219 +£Ëùed +. +´e£nû_šdex +) + +223 +rv +. +code + = +RC_FAIL +; + +226  +RC_FAIL +: + +228 +rv +. +cÚsumed + = +cÚsumed_my£lf +; + +230  +RC_WMORE +: + +235 if(* +memb_±r2 +) { + +236 if( +–m +-> +æags + & +ATF_POINTER +) { + +237 + `ASN_STRUCT_FREE +(* +£Ëùed +. +ty³_desütÜ +, +šÃr_v®ue +); + +238 * +memb_±r2 + = +NULL +; + +240 + `ASN_STRUCT_RESET +(* +£Ëùed +. +ty³_desütÜ +, + +241 +šÃr_v®ue +); + +244  +rv +; + +251 +ch_size + = + `x”_Ãxt_tok’ +(& +x”_cڋxt +, +±r +, +size +, & +ch_ty³ +); + +252 if( +ch_size + < 0) { + +253 +ASN__DECODE_FAILED +; + +255  +ch_ty³ +) { + +256  +PXER_WMORE +: + +257 +ASN__DECODE_STARVED +; + +258  +PXER_COMMENT +: + +259  +PXER_TEXT +: + +260 + `ADVANCE +( +ch_size +); + +262  +PXER_TAG +: + +272  + `x”_check_g +( +±r +, +ch_size +, +–m +-> +Çme +)) { + +273  +XCT_CLOSING +: + +274 + `ADVANCE +( +ch_size +); + +276  +XCT_BROKEN +: + +278 +ASN__DECODE_FAILED +; + +281 +rv +. +cÚsumed + +ð +cÚsumed_my£lf +; + +283  +rv +; + +284 + } +} + +287 #iâdeà +ASN_DISABLE_PER_SUPPORT + + +289 +a¢_dec_rv®_t + + +290 + $OPEN_TYPE_u³r_g‘ +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +291 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, * +¥Œ +, + +292 cÚ¡ +a¢_TYPE_memb”_t + * +–m +, +a¢_³r_d©a_t + * +pd +) { + +293 +a¢_ty³_£ËùÜ_»suÉ_t + +£Ëùed +; + +294 * +memb_±r +; + +295 ** +memb_±r2 +; + +296 * +šÃr_v®ue +; + +297 +a¢_dec_rv®_t + +rv +; + +299 if(!( +–m +-> +æags + & +ATF_OPEN_TYPE +)) { + +300 +ASN__DECODE_FAILED +; + +303 if(! +–m +-> +ty³_£ËùÜ +) { + +304 + `ASN_DEBUG +("Type selector is‚ot defined for Open Type %s->%s->%s", + +305 +td +-> +Çme +, +–m +->Çme,ƒlm-> +ty³ +->name); + +306 +ASN__DECODE_FAILED +; + +309 +£Ëùed + = +–m +-> + `ty³_£ËùÜ +( +td +, +¥Œ +); + +310 if(! +£Ëùed +. +´e£nû_šdex +) { + +311 +ASN__DECODE_FAILED +; + +315 + `as£¹ +( +–m +-> +æags + =ð +ATF_OPEN_TYPE +); + +316 if( +–m +-> +æags + & +ATF_POINTER +) { + +317 +memb_±r2 + = (**)((*) +¥Œ + + +–m +-> +memb_off£t +); + +319 +memb_±r + = (*) +¥Œ + + +–m +-> +memb_off£t +; + +320 +memb_±r2 + = & +memb_±r +; + +322 if(* +memb_±r2 + !ð +NULL +) { + +324 if( + `CHOICE_v¬ŸÁ_£t_´e£nû +( +–m +-> +ty³ +, * +memb_±r2 +, 0) + +326 +ASN__DECODE_FAILED +; + +330 +šÃr_v®ue + = + +331 (*)* +memb_±r2 + + +332 + +–m +-> +ty³ +-> +–em’ts +[ +£Ëùed +. +´e£nû_šdex + - 1]. +memb_off£t +; + +334 +rv + = + `u³r_ݒ_ty³_g‘ +( +Ýt_codec_ùx +, +£Ëùed +. +ty³_desütÜ +, +NULL +, + +335 & +šÃr_v®ue +, +pd +); + +336  +rv +. +code +) { + +337  +RC_OK +: + +338 if( + `CHOICE_v¬ŸÁ_£t_´e£nû +( +–m +-> +ty³ +, * +memb_±r2 +, + +339 +£Ëùed +. +´e£nû_šdex +) + +343 +rv +. +code + = +RC_FAIL +; + +346  +RC_WMORE +: + +347  +RC_FAIL +: + +348 if(* +memb_±r2 +) { + +349 if( +–m +-> +æags + & +ATF_POINTER +) { + +350 + `ASN_STRUCT_FREE +(* +£Ëùed +. +ty³_desütÜ +, +šÃr_v®ue +); + +351 * +memb_±r2 + = +NULL +; + +353 + `ASN_STRUCT_RESET +(* +£Ëùed +. +ty³_desütÜ +, + +354 +šÃr_v®ue +); + +358  +rv +; + +359 + } +} + +361 +a¢_’c_rv®_t + + +362 + $OPEN_TYPE_’code_u³r +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +363 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +364 cÚ¡ * +¥Œ +, +a¢_³r_ou_t + * +po +) { + +365 cÚ¡ * +memb_±r +; + +366 +a¢_TYPE_memb”_t + * +–m +; + +367 +a¢_’c_rv®_t + +” + = {0,0,0}; + +368  +´e£Á +; + +370 () +cÚ¡¿šts +; + +372 +´e£Á + = + `CHOICE_v¬ŸÁ_g‘_´e£nû +( +td +, +¥Œ +); + +373 if( +´e£Á + =ð0 ||…»£Á > +td +-> +–em’ts_couÁ +) { + +374 +ASN__ENCODE_FAILED +; + +376 +´e£Á +--; + +379 + `ASN_DEBUG +("Encodšg % OPEN TYPEƒËm’ˆ%d", +td +-> +Çme +, +´e£Á +); + +381 +–m + = & +td +-> +–em’ts +[ +´e£Á +]; + +382 if( +–m +-> +æags + & +ATF_POINTER +) { + +384 +memb_±r + = + +385 *(cÚ¡ *cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +386 if(! +memb_±r +è +ASN__ENCODE_FAILED +; + +388 +memb_±r + = (cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +; + +391 if( + `u³r_ݒ_ty³_put +( +–m +-> +ty³ +, +NULL +, +memb_±r +, +po +) < 0) { + +392 +ASN__ENCODE_FAILED +; + +395 +” +. +’coded + = 0; + +396 + `ASN__ENCODED_OK +( +” +); + +397 + } +} + +399 +a¢_dec_rv®_t + + +400 + $OPEN_TYPE_­”_g‘ +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +401 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, * +¥Œ +, + +402 cÚ¡ +a¢_TYPE_memb”_t + * +–m +, +a¢_³r_d©a_t + * +pd +) { + +403 +a¢_ty³_£ËùÜ_»suÉ_t + +£Ëùed +; + +404 * +memb_±r +; + +405 ** +memb_±r2 +; + +406 * +šÃr_v®ue +; + +407 +a¢_dec_rv®_t + +rv +; + +409 if(!( +–m +-> +æags + & +ATF_OPEN_TYPE +)) { + +410 +ASN__DECODE_FAILED +; + +413 if(! +–m +-> +ty³_£ËùÜ +) { + +414 + `ASN_DEBUG +("Type selector is‚ot defined for Open Type %s->%s->%s", + +415 +td +-> +Çme +, +–m +->Çme,ƒlm-> +ty³ +->name); + +416 +ASN__DECODE_FAILED +; + +419 +£Ëùed + = +–m +-> + `ty³_£ËùÜ +( +td +, +¥Œ +); + +420 if(! +£Ëùed +. +´e£nû_šdex +) { + +421 +ASN__DECODE_FAILED +; + +425 + `as£¹ +( +–m +-> +æags + =ð +ATF_OPEN_TYPE +); + +426 if( +–m +-> +æags + & +ATF_POINTER +) { + +427 +memb_±r2 + = (**)((*) +¥Œ + + +–m +-> +memb_off£t +); + +429 +memb_±r + = (*) +¥Œ + + +–m +-> +memb_off£t +; + +430 +memb_±r2 + = & +memb_±r +; + +432 if(* +memb_±r2 + !ð +NULL +) { + +434 if( + `CHOICE_v¬ŸÁ_£t_´e£nû +( +–m +-> +ty³ +, * +memb_±r2 +, 0) + +436 +ASN__DECODE_FAILED +; + +440 +šÃr_v®ue + = + +441 (*)* +memb_±r2 + + +442 + +–m +-> +ty³ +-> +–em’ts +[ +£Ëùed +. +´e£nû_šdex + - 1]. +memb_off£t +; + +444 +rv + = + `­”_ݒ_ty³_g‘ +( +Ýt_codec_ùx +, +£Ëùed +. +ty³_desütÜ +, +NULL +, + +445 & +šÃr_v®ue +, +pd +); + +446  +rv +. +code +) { + +447  +RC_OK +: + +448 if( + `CHOICE_v¬ŸÁ_£t_´e£nû +( +–m +-> +ty³ +, * +memb_±r2 +, + +449 +£Ëùed +. +´e£nû_šdex +) + +453 +rv +. +code + = +RC_FAIL +; + +456  +RC_WMORE +: + +457  +RC_FAIL +: + +458 if(* +memb_±r2 +) { + +459 if( +–m +-> +æags + & +ATF_POINTER +) { + +460 + `ASN_STRUCT_FREE +(* +£Ëùed +. +ty³_desütÜ +, +šÃr_v®ue +); + +461 * +memb_±r2 + = +NULL +; + +463 + `ASN_STRUCT_RESET +(* +£Ëùed +. +ty³_desütÜ +, + +464 +šÃr_v®ue +); + +468  +rv +; + +469 + } +} + +471 +a¢_’c_rv®_t + + +472 + $OPEN_TYPE_’code_­” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +473 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +474 cÚ¡ * +¥Œ +, +a¢_³r_ou_t + * +po +) { + +475 cÚ¡ * +memb_±r +; + +476 +a¢_TYPE_memb”_t + * +–m +; + +477 +a¢_’c_rv®_t + +” + = {0,0,0}; + +478  +´e£Á +; + +480 () +cÚ¡¿šts +; + +482 +´e£Á + = + `CHOICE_v¬ŸÁ_g‘_´e£nû +( +td +, +¥Œ +); + +483 if( +´e£Á + =ð0 ||…»£Á > +td +-> +–em’ts_couÁ +) { + +484 +ASN__ENCODE_FAILED +; + +486 +´e£Á +--; + +489 + `ASN_DEBUG +("Encodšg % OPEN TYPEƒËm’ˆ%d", +td +-> +Çme +, +´e£Á +); + +491 +–m + = & +td +-> +–em’ts +[ +´e£Á +]; + +492 if( +–m +-> +æags + & +ATF_POINTER +) { + +494 +memb_±r + = + +495 *(cÚ¡ *cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +496 if(! +memb_±r +è +ASN__ENCODE_FAILED +; + +498 +memb_±r + = (cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +; + +501 if( + `­”_ݒ_ty³_put +( +–m +-> +ty³ +, +NULL +, +memb_±r +, +po +) < 0) { + +502 +ASN__ENCODE_FAILED +; + +505 +” +. +’coded + = 0; + +506 + `ASN__ENCODED_OK +( +” +); + +507 + } +} + + @PLMNIdentity.c + +8  + ~"PLMNId’t™y.h +" + +11 + $PLMNId’t™y_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13 cÚ¡ +OCTET_STRING_t + * +¡ + = (cÚ¡ OCTET_STRING_ˆ*) +¥Œ +; + +14 +size_t + +size +; + +16 if(! +¥Œ +) { + +17 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +19 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +23 +size + = +¡ +->size; + +25 if(( +size + == 3)) { + +29 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +31 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +34 + } +} + +40 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_PLMNId’t™y_cÚ¡r_1 + + gCC_NOTUSED + = { + +41 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +42 { +APC_CONSTRAINED +, 0, 0, 3, 3 } , + +45 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_PLMNId’t™y_gs_1 +[] = { + +46 ( +ASN_TAG_CLASS_UNIVERSAL + | (4 << 2)) + +48 +a¢_TYPE_desütÜ_t + + ga¢_DEF_PLMNId’t™y + = { + +51 & +a¢_OP_OCTET_STRING +, + +52 +a¢_DEF_PLMNId’t™y_gs_1 +, + +53 ( +a¢_DEF_PLMNId’t™y_gs_1 +) + +54 /( +a¢_DEF_PLMNId’t™y_gs_1 +[0]), + +55 +a¢_DEF_PLMNId’t™y_gs_1 +, + +56 ( +a¢_DEF_PLMNId’t™y_gs_1 +) + +57 /( +a¢_DEF_PLMNId’t™y_gs_1 +[0]), + +58 { 0, & +a¢_PER_ty³_PLMNId’t™y_cÚ¡r_1 +, +PLMNId’t™y_cÚ¡¿št + }, + +60 & +a¢_SPC_OCTET_STRING_¥ecs + + + @PrintableString.c + +6  + ~ + +7  + ~ + +12 cÚ¡  + g_PršbËSŒšg_®phab‘ +[256] = { + +22 cÚ¡  + g_PršbËSŒšg_code2v®ue +[74] = { + +32 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_PršbËSŒšg_gs +[] = { + +33 ( +ASN_TAG_CLASS_UNIVERSAL + | (19 << 2)), + +34 ( +ASN_TAG_CLASS_UNIVERSAL + | (4 << 2)) + +36  + $a¢_DEF_PršbËSŒšg_v2c +( +v®ue +) { + +37  +_PršbËSŒšg_®phab‘ +[ +v®ue + > 255 ? 0 : value] - 1; + +38 + } +} + +39  + $a¢_DEF_PršbËSŒšg_c2v +( +code +) { + +40 if( +code + < 74) + +41  +_PršbËSŒšg_code2v®ue +[ +code +]; + +43 + } +} + +44  +a¢_³r_cÚ¡¿šts_t + + ga¢_DEF_PršbËSŒšg_³r_cÚ¡¿šts + = { + +45 { +APC_CONSTRAINED +, 4, 4, 0x20, 0x39 }, + +46 { +APC_SEMI_CONSTRAINED +, -1, -1, 0, 0 }, + +47 +a¢_DEF_PršbËSŒšg_v2c +, + +48 +a¢_DEF_PršbËSŒšg_c2v + + +50 +a¢_TYPE_ݔ©iÚ_t + + ga¢_OP_PršbËSŒšg + = { + +51 +OCTET_STRING_ä“ +, + +52 +OCTET_STRING_´št_utf8 +, + +53 +OCTET_STRING_com·» +, + +54 +OCTET_STRING_decode_b” +, + +55 +OCTET_STRING_’code_d” +, + +56 +OCTET_STRING_decode_x”_utf8 +, + +57 +OCTET_STRING_’code_x”_utf8 +, + +58 #ifdef +ASN_DISABLE_OER_SUPPORT + + +62 +OCTET_STRING_decode_Ûr +, + +63 +OCTET_STRING_’code_Ûr +, + +65 #ifdef +ASN_DISABLE_PER_SUPPORT + + +71 +OCTET_STRING_decode_u³r +, + +72 +OCTET_STRING_’code_u³r +, + +73 +OCTET_STRING_decode_­” +, + +74 +OCTET_STRING_’code_­” +, + +76 +OCTET_STRING_¿ndom_fžl +, + +79 +a¢_TYPE_desütÜ_t + + ga¢_DEF_PršbËSŒšg + = { + +82 & +a¢_OP_PršbËSŒšg +, + +83 +a¢_DEF_PršbËSŒšg_gs +, + +84 ( +a¢_DEF_PršbËSŒšg_gs +) + +85 / ( +a¢_DEF_PršbËSŒšg_gs +[0]) - 1, + +86 +a¢_DEF_PršbËSŒšg_gs +, + +87 ( +a¢_DEF_PršbËSŒšg_gs +) + +88 / ( +a¢_DEF_PršbËSŒšg_gs +[0]), + +89 { 0, & +a¢_DEF_PršbËSŒšg_³r_cÚ¡¿šts +, +PršbËSŒšg_cÚ¡¿št + }, + +96 + $PršbËSŒšg_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +97 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, + +98 * +­p_key +) { + +99 cÚ¡ +PršbËSŒšg_t + * +¡ + = (cÚ¡ PršbËSŒšg_ˆ*) +¥Œ +; + +101 if( +¡ + && st-> +buf +) { + +102 +ušt8_t + * +buf + = +¡ +->buf; + +103 +ušt8_t + * +’d + = +buf + + +¡ +-> +size +; + +109 ; +buf + < +’d +; buf++) { + +110 if(! +_PršbËSŒšg_®phab‘ +[* +buf +]) { + +111 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +115 +td +-> +Çme +, + +116 ()(( +buf + - +¡ +->buf) + 1), + +117 * +buf +, + +118 +__FILE__ +, +__LINE__ +); + +123 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +125 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +130 + } +} + + @QCI.c + +8  + ~"QCI.h +" + +11 + $QCI_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13  +v®ue +; + +15 if(! +¥Œ +) { + +16 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +18 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +22 +v®ue + = *(cÚ¡ *) +¥Œ +; + +24 if(( +v®ue + >= 0 && value <= 255)) { + +28 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +30 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +33 + } +} + +39 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_QCI_cÚ¡r_1 + + gCC_NOTUSED + = { + +40 { +APC_CONSTRAINED +, 8, 8, 0, 255 } , + +41 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +44 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_QCI_gs_1 +[] = { + +45 ( +ASN_TAG_CLASS_UNIVERSAL + | (2 << 2)) + +47 +a¢_TYPE_desütÜ_t + + ga¢_DEF_QCI + = { + +50 & +a¢_OP_N©iveIÁeg” +, + +51 +a¢_DEF_QCI_gs_1 +, + +52 ( +a¢_DEF_QCI_gs_1 +) + +53 /( +a¢_DEF_QCI_gs_1 +[0]), + +54 +a¢_DEF_QCI_gs_1 +, + +55 ( +a¢_DEF_QCI_gs_1 +) + +56 /( +a¢_DEF_QCI_gs_1 +[0]), + +57 { 0, & +a¢_PER_ty³_QCI_cÚ¡r_1 +, +QCI_cÚ¡¿št + }, + + @QoSID.c + +8  + ~"QoSID.h +" + +10  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_QoSID_cÚ¡r_1 + + gCC_NOTUSED + = { + +11 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 1, 1, 0, 1 } , + +12 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +15  +a¢_TYPE_memb”_t + + ga¢_MBR_QoSID_1 +[] = { + +16 { +ATF_NOFLAGS +, 0, +off£tof +( +QoSID +, +choiû +. +fiveGC +), + +17 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +19 & +a¢_DEF_FiveQI +, + +25 { +ATF_NOFLAGS +, 0, +off£tof +( +QoSID +, +choiû +. +ePC +), + +26 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +28 & +a¢_DEF_QCI +, + +35 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_QoSID_g2–_1 +[] = { + +36 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +37 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 } + +39  +a¢_CHOICE_¥ecifics_t + + ga¢_SPC_QoSID_¥ecs_1 + = { + +40 ( +QoSID +), + +41 +off£tof +( +QoSID +, +_a¢_ùx +), + +42 +off£tof +( +QoSID +, +´e£Á +), + +43 ((( +QoSID + *)0)-> +´e£Á +), + +44 +a¢_MAP_QoSID_g2–_1 +, + +49 +a¢_TYPE_desütÜ_t + + ga¢_DEF_QoSID + = { + +52 & +a¢_OP_CHOICE +, + +57 { 0, & +a¢_PER_ty³_QoSID_cÚ¡r_1 +, +CHOICE_cÚ¡¿št + }, + +58 +a¢_MBR_QoSID_1 +, + +60 & +a¢_SPC_QoSID_¥ecs_1 + + + @QosFlowIdentifier.c + +8  + ~"QosFlowId’tif›r.h +" + +11 + $QosFlowId’tif›r_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13  +v®ue +; + +15 if(! +¥Œ +) { + +16 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +18 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +22 +v®ue + = *(cÚ¡ *) +¥Œ +; + +24 if(( +v®ue + >= 0 && value <= 63)) { + +28 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +30 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +33 + } +} + +39 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_QosFlowId’tif›r_cÚ¡r_1 + + gCC_NOTUSED + = { + +40 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 6, 6, 0, 63 } , + +41 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +44 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_QosFlowId’tif›r_gs_1 +[] = { + +45 ( +ASN_TAG_CLASS_UNIVERSAL + | (2 << 2)) + +47 +a¢_TYPE_desütÜ_t + + ga¢_DEF_QosFlowId’tif›r + = { + +50 & +a¢_OP_N©iveIÁeg” +, + +51 +a¢_DEF_QosFlowId’tif›r_gs_1 +, + +52 ( +a¢_DEF_QosFlowId’tif›r_gs_1 +) + +53 /( +a¢_DEF_QosFlowId’tif›r_gs_1 +[0]), + +54 +a¢_DEF_QosFlowId’tif›r_gs_1 +, + +55 ( +a¢_DEF_QosFlowId’tif›r_gs_1 +) + +56 /( +a¢_DEF_QosFlowId’tif›r_gs_1 +[0]), + +57 { 0, & +a¢_PER_ty³_QosFlowId’tif›r_cÚ¡r_1 +, +QosFlowId’tif›r_cÚ¡¿št + }, + + @RANUEID.c + +8  + ~"RANUEID.h +" + +11 + $RANUEID_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13 cÚ¡ +OCTET_STRING_t + * +¡ + = (cÚ¡ OCTET_STRING_ˆ*) +¥Œ +; + +14 +size_t + +size +; + +16 if(! +¥Œ +) { + +17 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +19 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +23 +size + = +¡ +->size; + +25 if(( +size + == 8)) { + +29 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +31 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +34 + } +} + +40 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_RANUEID_cÚ¡r_1 + + gCC_NOTUSED + = { + +41 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +42 { +APC_CONSTRAINED +, 0, 0, 8, 8 } , + +45 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_RANUEID_gs_1 +[] = { + +46 ( +ASN_TAG_CLASS_UNIVERSAL + | (4 << 2)) + +48 +a¢_TYPE_desütÜ_t + + ga¢_DEF_RANUEID + = { + +51 & +a¢_OP_OCTET_STRING +, + +52 +a¢_DEF_RANUEID_gs_1 +, + +53 ( +a¢_DEF_RANUEID_gs_1 +) + +54 /( +a¢_DEF_RANUEID_gs_1 +[0]), + +55 +a¢_DEF_RANUEID_gs_1 +, + +56 ( +a¢_DEF_RANUEID_gs_1 +) + +57 /( +a¢_DEF_RANUEID_gs_1 +[0]), + +58 { 0, & +a¢_PER_ty³_RANUEID_cÚ¡r_1 +, +RANUEID_cÚ¡¿št + }, + +60 & +a¢_SPC_OCTET_STRING_¥ecs + + + @RANfunction-Name.c + +8  + ~"RANfunùiÚ-Name.h +" + +10 cÚ¡  + g³rm™‹d_®phab‘_bË_2 +[256] = { + +20 cÚ¡  + g³rm™‹d_®phab‘_code2v®ue_2 +[74] = { + +28  + $check_³rm™‹d_®phab‘_2 +(cÚ¡ * +¥Œ +) { + +29 cÚ¡ * +bË + = +³rm™‹d_®phab‘_bË_2 +; + +31 cÚ¡ +PršbËSŒšg_t + * +¡ + = (cÚ¡ PršbËSŒšg_ˆ*) +¥Œ +; + +32 cÚ¡ +ušt8_t + * +ch + = +¡ +-> +buf +; + +33 cÚ¡ +ušt8_t + * +’d + = +ch + + +¡ +-> +size +; + +35 ; +ch + < +’d +; ch++) { + +36 +ušt8_t + +cv + = * +ch +; + +37 if(! +bË +[ +cv +])  -1; + +40 + } +} + +42 cÚ¡  + g³rm™‹d_®phab‘_bË_3 +[256] = { + +52 cÚ¡  + g³rm™‹d_®phab‘_code2v®ue_3 +[74] = { + +60  + $check_³rm™‹d_®phab‘_3 +(cÚ¡ * +¥Œ +) { + +61 cÚ¡ * +bË + = +³rm™‹d_®phab‘_bË_3 +; + +63 cÚ¡ +PršbËSŒšg_t + * +¡ + = (cÚ¡ PršbËSŒšg_ˆ*) +¥Œ +; + +64 cÚ¡ +ušt8_t + * +ch + = +¡ +-> +buf +; + +65 cÚ¡ +ušt8_t + * +’d + = +ch + + +¡ +-> +size +; + +67 ; +ch + < +’d +; ch++) { + +68 +ušt8_t + +cv + = * +ch +; + +69 if(! +bË +[ +cv +])  -1; + +72 + } +} + +74 cÚ¡  + g³rm™‹d_®phab‘_bË_4 +[256] = { + +84 cÚ¡  + g³rm™‹d_®phab‘_code2v®ue_4 +[74] = { + +92  + $check_³rm™‹d_®phab‘_4 +(cÚ¡ * +¥Œ +) { + +93 cÚ¡ * +bË + = +³rm™‹d_®phab‘_bË_4 +; + +95 cÚ¡ +PršbËSŒšg_t + * +¡ + = (cÚ¡ PršbËSŒšg_ˆ*) +¥Œ +; + +96 cÚ¡ +ušt8_t + * +ch + = +¡ +-> +buf +; + +97 cÚ¡ +ušt8_t + * +’d + = +ch + + +¡ +-> +size +; + +99 ; +ch + < +’d +; ch++) { + +100 +ušt8_t + +cv + = * +ch +; + +101 if(! +bË +[ +cv +])  -1; + +104 + } +} + +107 + $memb_¿nFunùiÚ_ShÜtName_cÚ¡¿št_1 +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +108 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +109 cÚ¡ +PršbËSŒšg_t + * +¡ + = (cÚ¡ PršbËSŒšg_ˆ*) +¥Œ +; + +110 +size_t + +size +; + +112 if(! +¥Œ +) { + +113 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +115 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +119 +size + = +¡ +->size; + +121 if(( +size + >= 1 && size <= 150) + +122 && ! + `check_³rm™‹d_®phab‘_2 +( +¡ +)) { + +126 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +128 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +131 + } +} + +133  + $a¢_PER_MAP_¿nFunùiÚ_ShÜtName_2_v2c +( +v®ue +) { + +134 if( +v®ue + >ð( +³rm™‹d_®phab‘_bË_2 +)/(permitted_alphabet_table_2[0])) + +136  +³rm™‹d_®phab‘_bË_2 +[ +v®ue +] - 1; + +137 + } +} + +138  + $a¢_PER_MAP_¿nFunùiÚ_ShÜtName_2_c2v +( +code +) { + +139 if( +code + >ð( +³rm™‹d_®phab‘_code2v®ue_2 +)/(permitted_alphabet_code2value_2[0])) + +141  +³rm™‹d_®phab‘_code2v®ue_2 +[ +code +]; + +142 + } +} + +144 + $memb_¿nFunùiÚ_E2SM_OID_cÚ¡¿št_1 +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +145 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +146 cÚ¡ +PršbËSŒšg_t + * +¡ + = (cÚ¡ PršbËSŒšg_ˆ*) +¥Œ +; + +147 +size_t + +size +; + +149 if(! +¥Œ +) { + +150 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +152 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +156 +size + = +¡ +->size; + +158 if(( +size + >= 1 && size <= 1000) + +159 && ! + `check_³rm™‹d_®phab‘_3 +( +¡ +)) { + +163 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +165 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +168 + } +} + +170  + $a¢_PER_MAP_¿nFunùiÚ_E2SM_OID_3_v2c +( +v®ue +) { + +171 if( +v®ue + >ð( +³rm™‹d_®phab‘_bË_3 +)/(permitted_alphabet_table_3[0])) + +173  +³rm™‹d_®phab‘_bË_3 +[ +v®ue +] - 1; + +174 + } +} + +175  + $a¢_PER_MAP_¿nFunùiÚ_E2SM_OID_3_c2v +( +code +) { + +176 if( +code + >ð( +³rm™‹d_®phab‘_code2v®ue_3 +)/(permitted_alphabet_code2value_3[0])) + +178  +³rm™‹d_®phab‘_code2v®ue_3 +[ +code +]; + +179 + } +} + +181 + $memb_¿nFunùiÚ_DesütiÚ_cÚ¡¿št_1 +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +182 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +183 cÚ¡ +PršbËSŒšg_t + * +¡ + = (cÚ¡ PršbËSŒšg_ˆ*) +¥Œ +; + +184 +size_t + +size +; + +186 if(! +¥Œ +) { + +187 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +189 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +193 +size + = +¡ +->size; + +195 if(( +size + >= 1 && size <= 150) + +196 && ! + `check_³rm™‹d_®phab‘_4 +( +¡ +)) { + +200 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +202 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +205 + } +} + +207  + $a¢_PER_MAP_¿nFunùiÚ_DesütiÚ_4_v2c +( +v®ue +) { + +208 if( +v®ue + >ð( +³rm™‹d_®phab‘_bË_4 +)/(permitted_alphabet_table_4[0])) + +210  +³rm™‹d_®phab‘_bË_4 +[ +v®ue +] - 1; + +211 + } +} + +212  + $a¢_PER_MAP_¿nFunùiÚ_DesütiÚ_4_c2v +( +code +) { + +213 if( +code + >ð( +³rm™‹d_®phab‘_code2v®ue_4 +)/(permitted_alphabet_code2value_4[0])) + +215  +³rm™‹d_®phab‘_code2v®ue_4 +[ +code +]; + +216 + } +} + +217  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_memb_¿nFunùiÚ_ShÜtName_cÚ¡r_2 + + gCC_NOTUSED + = { + +218 { +APC_CONSTRAINED +, 7, 7, 32, 122 } , + +219 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 8, 8, 1, 150 } , + +220 +a¢_PER_MAP_¿nFunùiÚ_ShÜtName_2_v2c +, + +221 +a¢_PER_MAP_¿nFunùiÚ_ShÜtName_2_c2v + + +223  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_memb_¿nFunùiÚ_E2SM_OID_cÚ¡r_3 + + gCC_NOTUSED + = { + +224 { +APC_CONSTRAINED +, 7, 7, 32, 122 } , + +225 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 10, 10, 1, 1000 } , + +226 +a¢_PER_MAP_¿nFunùiÚ_E2SM_OID_3_v2c +, + +227 +a¢_PER_MAP_¿nFunùiÚ_E2SM_OID_3_c2v + + +229  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_memb_¿nFunùiÚ_DesütiÚ_cÚ¡r_4 + + gCC_NOTUSED + = { + +230 { +APC_CONSTRAINED +, 7, 7, 32, 122 } , + +231 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 8, 8, 1, 150 } , + +232 +a¢_PER_MAP_¿nFunùiÚ_DesütiÚ_4_v2c +, + +233 +a¢_PER_MAP_¿nFunùiÚ_DesütiÚ_4_c2v + + +235 +a¢_TYPE_memb”_t + + ga¢_MBR_RANfunùiÚ_Name_1 +[] = { + +236 { +ATF_NOFLAGS +, 0, +off£tof +( +RANfunùiÚ_Name +, +¿nFunùiÚ_ShÜtName +), + +237 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +239 & +a¢_DEF_PršbËSŒšg +, + +241 { 0, & +a¢_PER_memb_¿nFunùiÚ_ShÜtName_cÚ¡r_2 +, +memb_¿nFunùiÚ_ShÜtName_cÚ¡¿št_1 + }, + +245 { +ATF_NOFLAGS +, 0, +off£tof +( +RANfunùiÚ_Name +, +¿nFunùiÚ_E2SM_OID +), + +246 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +248 & +a¢_DEF_PršbËSŒšg +, + +250 { 0, & +a¢_PER_memb_¿nFunùiÚ_E2SM_OID_cÚ¡r_3 +, +memb_¿nFunùiÚ_E2SM_OID_cÚ¡¿št_1 + }, + +254 { +ATF_NOFLAGS +, 0, +off£tof +( +RANfunùiÚ_Name +, +¿nFunùiÚ_DesütiÚ +), + +255 ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), + +257 & +a¢_DEF_PršbËSŒšg +, + +259 { 0, & +a¢_PER_memb_¿nFunùiÚ_DesütiÚ_cÚ¡r_4 +, +memb_¿nFunùiÚ_DesütiÚ_cÚ¡¿št_1 + }, + +263 { +ATF_POINTER +, 1, +off£tof +( +RANfunùiÚ_Name +, +¿nFunùiÚ_In¡ªû +), + +264 ( +ASN_TAG_CLASS_CONTEXT + | (3 << 2)), + +266 & +a¢_DEF_N©iveIÁeg” +, + +273 cÚ¡  + ga¢_MAP_RANfunùiÚ_Name_oms_1 +[] = { 3 }; + +274 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_RANfunùiÚ_Name_gs_1 +[] = { + +275 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +277 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_RANfunùiÚ_Name_g2–_1 +[] = { + +278 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +279 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 }, + +280 { ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), 2, 0, 0 }, + +281 { ( +ASN_TAG_CLASS_CONTEXT + | (3 << 2)), 3, 0, 0 } + +283 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_RANfunùiÚ_Name_¥ecs_1 + = { + +284 ( +RANfunùiÚ_Name +), + +285 +off£tof +( +RANfunùiÚ_Name +, +_a¢_ùx +), + +286 +a¢_MAP_RANfunùiÚ_Name_g2–_1 +, + +288 +a¢_MAP_RANfunùiÚ_Name_oms_1 +, + +292 +a¢_TYPE_desütÜ_t + + ga¢_DEF_RANfunùiÚ_Name + = { + +295 & +a¢_OP_SEQUENCE +, + +296 +a¢_DEF_RANfunùiÚ_Name_gs_1 +, + +297 ( +a¢_DEF_RANfunùiÚ_Name_gs_1 +) + +298 /( +a¢_DEF_RANfunùiÚ_Name_gs_1 +[0]), + +299 +a¢_DEF_RANfunùiÚ_Name_gs_1 +, + +300 ( +a¢_DEF_RANfunùiÚ_Name_gs_1 +) + +301 /( +a¢_DEF_RANfunùiÚ_Name_gs_1 +[0]), + +302 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +303 +a¢_MBR_RANfunùiÚ_Name_1 +, + +305 & +a¢_SPC_RANfunùiÚ_Name_¥ecs_1 + + + @REAL.c + +5  + #_ISOC99_SOURCE + + + ) + +6 #iâdeà +_BSD_SOURCE + + +7  + #_BSD_SOURCE + + + ) + +9  + ~ + +10 #if +defšed +( +__®pha +) + +11  + ~ + +13  + ~<¡dlib.h +> + +14  + ~ + +15  + ~<æßt.h +> + +16  + ~<”ºo.h +> + +17  + ~ + +18  + ~ + +20 #undeà +INT_MAX + + +21  + #INT_MAX + (()((()-1è>> 1)) + + ) + +23 #if !( +defšed +( +NAN +è|| defšed( +INFINITY +)) + +24 vÞ©ž +»®_z”o + + gCC_NOTUSED + = 0.0; + +26 #iâdef +NAN + + +27  + #NAN + (0.0/0.0) + + ) + +29 #iâdef +INFINITY + + +30  + #INFINITY + (1.0/0.0) + + ) + +33 #ià +defšed +( +__þªg__ +) + +41 #´agm¨ +þªg + +dŸgno¡ic + +push + + +42 #´agm¨ +þªg + +dŸgno¡ic + +ignÜed + "-Wc11-extensions" + +43  + $a¢_i¢ª +( +d +) { + +44  + `i¢ª +( +d +); + +45 + } +} + +46  + $a¢_isfš™e +( +d +) { + +47 #ifdeà +isfš™e + + +48  + `isfš™e +( +d +); + +50  + `fš™e +( +d +); + +52 + } +} + +53 #´agm¨ +þªg + +dŸgno¡ic + +pÝ + + +55  + #a¢_i¢ª +( +v +è + `i¢ª +(v) + + ) + +56 #ifdeà +isfš™e + + +57  + #a¢_isfš™e +( +d +è + `isfš™e +(dè + + ) + +59  + #a¢_isfš™e +( +d +è + `fš™e +(dè + + ) + +66 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_REAL_gs +[] = { + +67 ( +ASN_TAG_CLASS_UNIVERSAL + | (9 << 2)) + +69 +a¢_TYPE_ݔ©iÚ_t + + ga¢_OP_REAL + = { + +70 +ASN__PRIMITIVE_TYPE_ä“ +, + +71 +REAL_´št +, + +72 +REAL_com·» +, + +73 +b”_decode_´im™ive +, + +74 +d”_’code_´im™ive +, + +75 +REAL_decode_x” +, + +76 +REAL_’code_x” +, + +77 #ifdef +ASN_DISABLE_OER_SUPPORT + + +81 +REAL_decode_Ûr +, + +82 +REAL_’code_Ûr +, + +84 #ifdef +ASN_DISABLE_PER_SUPPORT + + +90 +REAL_decode_u³r +, + +91 +REAL_’code_u³r +, + +92 +REAL_decode_­” +, + +93 +REAL_’code_­” +, + +95 +REAL_¿ndom_fžl +, + +98 +a¢_TYPE_desütÜ_t + + ga¢_DEF_REAL + = { + +101 & +a¢_OP_REAL +, + +102 +a¢_DEF_REAL_gs +, + +103 ( +a¢_DEF_REAL_gs +) / (asn_DEF_REAL_tags[0]), + +104 +a¢_DEF_REAL_gs +, + +105 ( +a¢_DEF_REAL_gs +) / (asn_DEF_REAL_tags[0]), + +106 { 0, 0, +a¢_g’”ic_no_cÚ¡¿št + }, + +112  + e¥ecŸlR—lV®ue + { + +113 + mSRV__NOT_A_NUMBER +, + +114 + mSRV__MINUS_INFINITY +, + +115 + mSRV__PLUS_INFINITY + + +116 } + t¥ecŸlR—lV®ue_e +; + +117  + s¥ecŸlR—lV®ue_s + { + +118 * + m¡ršg +; + +119 +size_t + + mËngth +; + +120  + mdv +; + +121 } + g¥ecŸlR—lV®ue +[] = { + +122  + #SRV_SET +( +foo +, +v® +è{ foo, (fooè- 1, v® } + + ) + +123 +SRV_SET +("", 0), + +124 +SRV_SET +("", -1), + +125 +SRV_SET +("", 1), + +126 #undeà +SRV_SET + + +129 +ssize_t + + +130 + $REAL__dump +( +d +,  +ÿnÚiÿl +, +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +131  +loÿl_buf +[64]; + +132 * +buf + = +loÿl_buf +; + +133 +ssize_t + +buæ’ + = ( +loÿl_buf +); + +134 cÚ¡ * +fmt + = +ÿnÚiÿl + ? "%.17E" : "%.15f" ; + +135 +ssize_t + +»t +; + +141 if( + `a¢_i¢ª +( +d +)) { + +142 +buf + = +¥ecŸlR—lV®ue +[ +SRV__NOT_A_NUMBER +]. +¡ršg +; + +143 +buæ’ + = +¥ecŸlR—lV®ue +[ +SRV__NOT_A_NUMBER +]. +Ëngth +; + +144  ( + `cb +( +buf +, +buæ’ +, +­p_key +) < 0) ? -1 : buflen; + +145 } if(! + `a¢_isfš™e +( +d +)) { + +146 if( + `cÝysign +(1.0, +d +) < 0.0) { + +147 +buf + = +¥ecŸlR—lV®ue +[ +SRV__MINUS_INFINITY +]. +¡ršg +; + +148 +buæ’ + = +¥ecŸlR—lV®ue +[ +SRV__MINUS_INFINITY +]. +Ëngth +; + +150 +buf + = +¥ecŸlR—lV®ue +[ +SRV__PLUS_INFINITY +]. +¡ršg +; + +151 +buæ’ + = +¥ecŸlR—lV®ue +[ +SRV__PLUS_INFINITY +]. +Ëngth +; + +153  ( + `cb +( +buf +, +buæ’ +, +­p_key +) < 0) ? -1 : buflen; + +154 } if( + `žogb +( +d +è<ð- +INT_MAX +) { + +155 if( + `cÝysign +(1.0, +d +) < 0.0) { + +156 +buf + = "-0"; + +157 +buæ’ + = 2; + +159 +buf + = "0"; + +160 +buæ’ + = 1; + +162  ( + `cb +( +buf +, +buæ’ +, +­p_key +) < 0) ? -1 : buflen; + +169 +»t + = + `¢´štf +( +buf +, +buæ’ +, +fmt +, +d +); + +170 if( +»t + < 0) { + +172 +buæ’ + <<= 1; + +173 if( +buæ’ + > 4096) { + +175 if( +buf + !ð +loÿl_buf +è + `FREEMEM +(buf); + +178 } if( +»t + >ð +buæ’ +) { + +179 +buæ’ + = +»t + + 1; + +181 +buæ’ + = +»t +; + +184 if( +buf + !ð +loÿl_buf +è + `FREEMEM +(buf); + +185 +buf + = (*) + `MALLOC +( +buæ’ +); + +186 if(! +buf +)  -1; + +189 if( +ÿnÚiÿl +) { + +194 * +dÙ +; + +195 * +’d + = +buf + + +buæ’ +; + +196 * +Ï¡_z”o +; + +197 * +fœ¡_z”o_š_run +; + +198 * +s +; + +201 +LZSTATE_NOTHING +, + +202 +LZSTATE_ZEROES + + +203 } +lz_¡©e + = +LZSTATE_NOTHING +; + +205 +dÙ + = ( +buf +[0] == 0x2d ) ? (buf + 2) : (buf + 1); + +206 if(* +dÙ + >= 0x30) { + +207 if( +buf + !ð +loÿl_buf +è + `FREEMEM +(buf); + +208 +”ºo + = +EINVAL +; + +211 * +dÙ + = 0x2e; + +213  +fœ¡_z”o_š_run + = +Ï¡_z”o + = +s + = +dÙ + + 2; s < +’d +; s++) { + +214 * +s +) { + +216 if( +lz_¡©e + =ð +LZSTATE_ZEROES +è +Ï¡_z”o + = +fœ¡_z”o_š_run +; + +219 if( +lz_¡©e + =ð +LZSTATE_NOTHING +è +fœ¡_z”o_š_run + = +s +; + +220 +lz_¡©e + = +LZSTATE_ZEROES +; + +223 +lz_¡©e + = +LZSTATE_NOTHING +; + +229 if( +s + =ð +’d +) { + +230 if( +buf + !ð +loÿl_buf +è + `FREEMEM +(buf); + +231 +”ºo + = +EINVAL +; + +235 + `as£¹ +(* +s + == 0x45); + +237 * +E + = +s +; + +238 * +exµŒ + = ++ +E +; + +239 * +s + = +exµŒ +; + +240  +sign +; + +242 if(* +exµŒ + == 0x2b ) { + +244 +buæ’ + -= 1; + +245 +sign + = 0; + +247 +sign + = 1; + +248 +s +++; + +250 +exµŒ +++; + +251 if( +exµŒ + > +’d +) { + +252 if( +buf + !ð +loÿl_buf +è + `FREEMEM +(buf); + +253 +”ºo + = +EINVAL +; + +256 if(* +exµŒ + == 0x30) { + +257 +buæ’ +--; + +258 +exµŒ +++; + +260 if( +lz_¡©e + =ð +LZSTATE_ZEROES +) { + +261 * +Ï¡_z”o + = 0x45; + +262 +buæ’ + -ð +s + - ( +Ï¡_z”o + + 1); + +263 +s + = +Ï¡_z”o + + 1; + +264 if( +sign +) { + +265 * +s +++ = 0x2d ; + +266 +buæ’ +++; + +269 ; +exµŒ + <ð +’d +; +s +++,ƒxpptr++) + +270 * +s + = * +exµŒ +; + +276 * +’d + = +buf + + +buæ’ +; + +277 * +Ï¡_z”o + = +’d +; + +278  +¡Ýlookšg + = 0; + +279 * +z +; + +280  +z + = +’d + - 1; z > +buf +; z--) { + +281 * +z +) { + +283 if(! +¡Ýlookšg +) + +284 +Ï¡_z”o + = +z +; + +288 +¡Ýlookšg + = 1; + +295 * +z + = 0x2e; + +296 if( +Ï¡_z”o + =ð +z + + 1) { + +297 +Ï¡_z”o +++; + +299 +buæ’ + = +Ï¡_z”o + - +buf +; + +300 * +Ï¡_z”o + = '\0'; + +307 +»t + = + `cb +( +buf +, +buæ’ +, +­p_key +); + +308 if( +buf + !ð +loÿl_buf +è + `FREEMEM +(buf); + +309  ( +»t + < 0è? -1 : +buæ’ +; + +310 + } +} + +313 + $REAL_´št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +,  +žev– +, + +314 +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +315 cÚ¡ +REAL_t + * +¡ + = (cÚ¡ REAL_ˆ*) +¥Œ +; + +316 +ssize_t + +»t +; + +317  +d +; + +319 () +td +; + +320 () +žev– +; + +322 if(! +¡ + || !¡-> +buf +) + +323 +»t + = + `cb +("", 8, +­p_key +); + +324 if( + `a¢_REAL2doubË +( +¡ +, & +d +)) + +325 +»t + = + `cb +("<”rÜ>", 7, +­p_key +); + +327 +»t + = + `REAL__dump +( +d +, 0, +cb +, +­p_key +); + +329  ( +»t + < 0) ? -1 : 0; + +330 + } +} + +333 + $REAL_com·» +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +­Œ +, + +334 cÚ¡ * +b±r +) { + +335 cÚ¡ +REAL_t + * +a + = +­Œ +; + +336 cÚ¡ +REAL_t + * +b + = +b±r +; + +338 () +td +; + +340 if( +a + && +b +) { + +341  +adbl +, +bdbl +; + +342  +¿ +, +rb +; + +343 +¿ + = + `a¢_REAL2doubË +( +a +, & +adbl +); + +344 +rb + = + `a¢_REAL2doubË +( +b +, & +bdbl +); + +345 if( +¿ + =ð0 && +rb + == 0) { + +346 if( + `a¢_i¢ª +( +adbl +)) { + +347 if( + `a¢_i¢ª +( +bdbl +)) { + +352 } if( + `a¢_i¢ª +( +bdbl +)) { + +356 if( +adbl + < +bdbl +) { + +358 } if( +adbl + > +bdbl +) { + +363 } if( +¿ +) { + +368 } if(! +a +) { + +373 + } +} + +375 +a¢_’c_rv®_t + + +376 + $REAL_’code_x” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +,  +žev– +, + +377 +x”_’cod”_æags_e + +æags +, +a¢_­p_cÚsume_by‹s_f + * +cb +, + +378 * +­p_key +) { + +379 cÚ¡ +REAL_t + * +¡ + = (cÚ¡ REAL_ˆ*) +¥Œ +; + +380 +a¢_’c_rv®_t + +” + = {0,0,0}; + +381  +d +; + +383 () +žev– +; + +385 if(! +¡ + || !¡-> +buf + || + `a¢_REAL2doubË +(¡, & +d +)) + +386 +ASN__ENCODE_FAILED +; + +388 +” +. +’coded + = + `REAL__dump +( +d +, +æags + & +XER_F_CANONICAL +, +cb +, +­p_key +); + +389 if( +” +. +’coded + < 0è +ASN__ENCODE_FAILED +; + +391 + `ASN__ENCODED_OK +( +” +); + +392 + } +} + +398  +x”_pbd_rv® + + +399 + $REAL__x”_body_decode +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, * +¥Œ +, + +400 cÚ¡ * +chunk_buf +, +size_t + +chunk_size +) { + +401 +REAL_t + * +¡ + = (REAL_ˆ*) +¥Œ +; + +402  +v®ue +; + +403 cÚ¡ * +x”d©a + = (cÚ¡ *) +chunk_buf +; + +404 * +’d±r + = 0; + +405 * +b +; + +407 () +td +; + +409 if(! +chunk_size +è +XPBD_BROKEN_ENCODING +; + +414 if( +x”d©a +[0] == 0x3c ) { + +415 +size_t + +i +; + +416  +i + = 0; i < ( +¥ecŸlR—lV®ue +) + +417 / ( +¥ecŸlR—lV®ue +[0]); +i +++) { + +418  +¥ecŸlR—lV®ue_s + * +¤v + = & +¥ecŸlR—lV®ue +[ +i +]; + +419  +dv +; + +421 if( +¤v +-> +Ëngth + !ð +chunk_size + + +422 || + `memcmp +( +¤v +-> +¡ršg +, +chunk_buf +, +chunk_size +)) + +430  +¤v +-> +dv +) { + +431 -1: +dv + = - +INFINITY +; ; + +432 0: +dv + = +NAN +; ; + +433 1: +dv + = +INFINITY +; ; + +434 :  +XPBD_SYSTEM_FAILURE +; + +437 if( + `a¢_doubË2REAL +( +¡ +, +dv +)) + +438  +XPBD_SYSTEM_FAILURE +; + +440  +XPBD_BODY_CONSUMED +; + +442 + `ASN_DEBUG +("Unknown XMLSpecialRealValue"); + +443  +XPBD_BROKEN_ENCODING +; + +449 +b + = (*) + `MALLOC +( +chunk_size + + 1); + +450 if(! +b +è +XPBD_SYSTEM_FAILURE +; + +451 + `memýy +( +b +, +chunk_buf +, +chunk_size +); + +452 +b +[ +chunk_size +] = 0; + +454 +v®ue + = + `¡¹od +( +b +, & +’d±r +); + +455 + `FREEMEM +( +b +); + +456 if( +’d±r + =ð +b +è +XPBD_BROKEN_ENCODING +; + +458 if( + `a¢_doubË2REAL +( +¡ +, +v®ue +)) + +459  +XPBD_SYSTEM_FAILURE +; + +461  +XPBD_BODY_CONSUMED +; + +462 + } +} + +464 +a¢_dec_rv®_t + + +465 + $REAL_decode_x” +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +466 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¥Œ +, + +467 cÚ¡ * +Ýt_mÇme +, cÚ¡ * +buf_±r +, +size_t + +size +) { + +468  + `x”_decode_´im™ive +( +Ýt_codec_ùx +, +td +, + +469 +¥Œ +, ( +REAL_t +), +Ýt_mÇme +, + +470 +buf_±r +, +size +, +REAL__x”_body_decode +); + +471 + } +} + +474 + $a¢_REAL2doubË +(cÚ¡ +REAL_t + * +¡ +, * +dbl_v®ue +) { + +475  +oùv +; + +477 if(! +¡ + || !¡-> +buf +) { + +478 +”ºo + = +EINVAL +; + +482 if( +¡ +-> +size + == 0) { + +483 * +dbl_v®ue + = 0; + +487 +oùv + = +¡ +-> +buf +[0]; + +489  +oùv + & 0xC0) { + +498  +¡ +-> +buf +[0]) { + +500 * +dbl_v®ue + = +INFINITY +; + +503 * +dbl_v®ue + = - +INFINITY +; + +506 * +dbl_v®ue + = +NAN +; + +509 * +dbl_v®ue + = -0.0; + +513 +”ºo + = +EINVAL +; + +522  +d +; + +523 * +sourû + = 0; + +524 * +’d±r +; + +525  +u£d_m®loc + = 0; + +527 if( +oùv + == 0 || (octv & 0x3C)) { + +529 +”ºo + = +EINVAL +; + +539 if( +¡ +-> +buf +[¡-> +size +] !ð'\0' || + `memchr +(st->buf, ',', st->size)) { + +540 cÚ¡ +ušt8_t + * +p +, * +’d +; + +541 * +b +; + +543 +b + = +sourû + = (*) + `MALLOC +( +¡ +-> +size + + 1); + +544 if(! +sourû +)  -1; + +545 +u£d_m®loc + = 1; + +548  +p + = +¡ +-> +buf + + 1, +’d + = st->buà+ st-> +size +; + +549 +p + < +’d +; +b +++,…++) + +550 * +b + = (* +p + == ',') ? '.' : *p; + +551 * +b + = '\0'; + +553 +sourû + = (*)& +¡ +-> +buf +[1]; + +556 +’d±r + = +sourû +; + +557 +d + = + `¡¹od +( +sourû +, & +’d±r +); + +558 if(* +’d±r + != '\0') { + +560 if( +u£d_m®loc +è + `FREEMEM +( +sourû +); + +561 +”ºo + = +EINVAL +; + +564 if( +u£d_m®loc +è + `FREEMEM +( +sourû +); + +565 if( + `a¢_isfš™e +( +d +)) { + +566 * +dbl_v®ue + = +d +; + +569 +”ºo + = +ERANGE +; + +579  +m +; + +580 +št32_t + +expv® +; + +581  +–’ +; + +582  +sÿËF +; + +583  +ba£F +; + +584 +ušt8_t + * +±r +; + +585 +ušt8_t + * +’d +; + +586  +sign +; + +588 ( +oùv + & 0x30) >> 4) { + +589 0x00: +ba£F + = 1; ; + +590 0x01: +ba£F + = 3; ; + +591 0x02: +ba£F + = 4; ; + +594 +”ºo + = +EINVAL +; + +598 +sign + = ( +oùv + & 0x40); + +599 +sÿËF + = ( +oùv + & 0x0C) >> 2; + +601 if( +¡ +-> +size + <ð1 + ( +oùv + & 0x03)) { + +602 +”ºo + = +EINVAL +; + +606 +–’ + = ( +oùv + & 0x03); + +607 if( +–’ + == 0x03) { + +608 +–’ + = +¡ +-> +buf +[1]; + +609 if( +–’ + =ð0 || +¡ +-> +size + <= (2 +ƒlen)) { + +610 +”ºo + = +EINVAL +; + +614 +±r + = & +¡ +-> +buf +[2]; + +616 +±r + = & +¡ +-> +buf +[1]; + +620 +expv® + = ()(*( +št8_t + *) +±r +); + +621 if( +–’ + >ð( +expv® +)-1) { + +622 +”ºo + = +ERANGE +; + +625 +’d + = +±r + + +–’ + + 1; + +626  +±r +++;…Œ < +’d +;…tr++) + +627 +expv® + = (expv® * 256è+ * +±r +; + +629 +m + = 0.0; + +632 +’d + = +¡ +-> +buf + + st-> +size +; + +633 ; +±r + < +’d +;…tr++) + +634 +m + = + `ldexp +(m, 8è+ * +±r +; + +637 + `ASN_DEBUG +("m=%.10f, scF=%d, bF=%d,ƒxpval=%d,†dexp()=%f,†dexp()=%f\n", + +638 +m +, +sÿËF +, +ba£F +, +expv® +, + +639 + `ldexp +( +m +, +expv® + * +ba£F + + +sÿËF +), + +640 + `ldexp +( +m +, +sÿËF +è* + `pow +Õow(2, +ba£F +), +expv® +) + +648 +m + = + `ldexp +(m, +expv® + * +ba£F + + +sÿËF +); + +649 if( + `a¢_isfš™e +( +m +)) { + +650 * +dbl_v®ue + = +sign + ? - +m + : m; + +652 +”ºo + = +ERANGE +; + +659 + } +} + +666 + $a¢_doubË2REAL +( +REAL_t + * +¡ +,  +dbl_v®ue +) { + +667  +‹¡ + = -0.0; + +668  +æßt_big_’dŸn + = *(cÚ¡ *)& +‹¡ + != 0; + +669 +ušt8_t + +buf +[16]; + +670 +ušt8_t + +dsü +[( +dbl_v®ue +)]; + +672  +as£¹iÚ_bufãr1 +[9 - ( +dbl_v®ue +)] +CC_NOTUSED +; + +673  +as£¹iÚ_bufãr2 +[( +dbl_v®ue +è- 7] +CC_NOTUSED +; + +674 +ušt8_t + * +±r + = +buf +; + +675 +ušt8_t + * +m¡Ý +; + +676  +mv® +; + +677  +bmsign +; + +678  +buæ’ +; + +679  +accum +; + +680  +expv® +; + +682 if(! +¡ +) { + +683 +”ºo + = +EINVAL +; + +692 +expv® + = + `žogb +( +dbl_v®ue +); + +693 if( +expv® + <ð- +INT_MAX + + +694 || +expv® + =ð +INT_MAX + + +696 if(! +¡ +-> +buf + || st-> +size + < 2) { + +697 +±r + = ( +ušt8_t + *) + `MALLOC +(2); + +698 if(! +±r +)  -1; + +699 if( +¡ +-> +buf +è + `FREEMEM +(st->buf); + +700 +¡ +-> +buf + = +±r +; + +703 if( + `a¢_i¢ª +( +dbl_v®ue +)) { + +704 +¡ +-> +buf +[0] = 0x42; + +705 +¡ +-> +buf +[1] = 0; + +706 +¡ +-> +size + = 1; + +707 } if(! + `a¢_isfš™e +( +dbl_v®ue +)) { + +708 if( + `cÝysign +(1.0, +dbl_v®ue +) < 0.0) { + +709 +¡ +-> +buf +[0] = 0x41; + +711 +¡ +-> +buf +[0] = 0x40; + +713 +¡ +-> +buf +[1] = 0; + +714 +¡ +-> +size + = 1; + +716 if( + `cÝysign +(1.0, +dbl_v®ue +) >= 0.0) { + +718 +¡ +-> +buf +[0] = 0; + +719 +¡ +-> +size + = 0; + +722 +¡ +-> +buf +[0] = 0x43; + +723 +¡ +-> +buf +[1] = 0; + +724 +¡ +-> +size + = 1; + +730 if( +æßt_big_’dŸn +) { + +731 +ušt8_t + * +s + = ((ušt8_ˆ*)& +dbl_v®ue +) + 1; + +732 +ušt8_t + * +’d + = ((ušt8_ˆ*)& +dbl_v®ue +) + (); + +733 +ušt8_t + * +d +; + +735 +bmsign + = 0x80 | (( +s +[-1] >> 1) & 0x40); + +736  +m¡Ý + = +d + = +dsü +; +s + < +’d +; d++, s++) { + +737 * +d + = * +s +; + +738 if(* +d +è +m¡Ý + = d; + +741 +ušt8_t + * +s + = ((ušt8_ˆ*)& +dbl_v®ue +) + (dbl_value) - 2; + +742 +ušt8_t + * +¡¬t + = ((ušt8_ˆ*)& +dbl_v®ue +); + +743 +ušt8_t + * +d +; + +745 +bmsign + = 0x80 | (( +s +[1] >> 1) & 0x40); + +746  +m¡Ý + = +d + = +dsü +; +s + >ð +¡¬t +; d++, s--) { + +747 * +d + = * +s +; + +748 if(* +d +è +m¡Ý + = d; + +753 +dsü +[0] = 0x10 | (dscr[0] & 0x0f); + +756 +expv® + -ð8 * (( +m¡Ý + - +dsü +) + 1) - 4; + +759 +mv® + = * +m¡Ý +; + +760 if( +mv® + && !(mval & 1)) { + +761  +shiá_couÁ + = 1; + +762  +ishiá +; + +763 +ušt8_t + * +m±r +; + +768 if(!( +mv® + & 0x0f)) + +769 +shiá_couÁ + = 4; + +770 (( +mv® + >> +shiá_couÁ +) & 1) == 0) + +771 +shiá_couÁ +++; + +773 +ishiá + = 8 - +shiá_couÁ +; + +774 +accum + = 0; + +777  +m±r + = +dsü +; m±¸<ð +m¡Ý +; mptr++) { + +778 +mv® + = * +m±r +; + +779 * +m±r + = +accum + | ( +mv® + >> +shiá_couÁ +); + +780 +accum + = +mv® + << +ishiá +; + +784 +expv® + +ð +shiá_couÁ +; + +787 if( +expv® + < 0) { + +788 if(( +expv® + >> 7) == -1) { + +789 * +±r +++ = +bmsign + | 0x00; + +790 * +±r +++ = +expv® +; + +791 } if(( +expv® + >> 15) == -1) { + +792 * +±r +++ = +bmsign + | 0x01; + +793 * +±r +++ = +expv® + >> 8; + +794 * +±r +++ = +expv® +; + +796 * +±r +++ = +bmsign + | 0x02; + +797 * +±r +++ = +expv® + >> 16; + +798 * +±r +++ = +expv® + >> 8; + +799 * +±r +++ = +expv® +; + +801 } if( +expv® + <= 0x7f) { + +802 * +±r +++ = +bmsign + | 0x00; + +803 * +±r +++ = +expv® +; + +804 } if( +expv® + <= 0x7fff) { + +805 * +±r +++ = +bmsign + | 0x01; + +806 * +±r +++ = +expv® + >> 8; + +807 * +±r +++ = +expv® +; + +809 + `as£¹ +( +expv® + <= 0x7fffff); + +810 * +±r +++ = +bmsign + | 0x02; + +811 * +±r +++ = +expv® + >> 16; + +812 * +±r +++ = +expv® + >> 8; + +813 * +±r +++ = +expv® +; + +816 +buæ’ + = ( +m¡Ý + - +dsü +) + 1; + +817 + `memýy +( +±r +, +dsü +, +buæ’ +); + +818 +±r + +ð +buæ’ +; + +819 +buæ’ + = +±r + - +buf +; + +821 +±r + = ( +ušt8_t + *) + `MALLOC +( +buæ’ + + 1); + +822 if(! +±r +)  -1; + +824 + `memýy +( +±r +, +buf +, +buæ’ +); + +825 +buf +[ +buæ’ +] = 0; + +827 if( +¡ +-> +buf +è + `FREEMEM +(st->buf); + +828 +¡ +-> +buf + = +±r +; + +829 +¡ +-> +size + = +buæ’ +; + +832 + } +} + +834  +CC_ATTR_NO_SANITIZE +("float-cast-overflow") + +835 + $a¢_doubË2æßt +( +d +, * +outcome +) { + +836  +f + = +d +; + +838 * +outcome + = +f +; + +840 if( + `a¢_isfš™e +( +d +è=ða¢_isfš™e( +f +)) { + +845 + } +} + +847 #iâdeà +ASN_DISABLE_OER_SUPPORT + + +852 +a¢_’c_rv®_t + + +853 + $REAL_’code_Ûr +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +854 cÚ¡ +a¢_Ûr_cÚ¡¿šts_t + * +cÚ¡¿šts +, cÚ¡ * +¥Œ +, + +855 +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +856 cÚ¡ +REAL_t + * +¡ + = +¥Œ +; + +857 +a¢_’c_rv®_t + +” + = {0,0,0}; + +858 +ssize_t + +Ën_Ën +; + +860 if(! +¡ + || !¡-> +buf + || ! +td +) + +861 +ASN__ENCODE_FAILED +; + +863 if(! +cÚ¡¿šts +ècÚ¡¿št ð +td +-> +’codšg_cÚ¡¿šts +. +Ûr_cÚ¡¿šts +; + +864 if( +cÚ¡¿šts + && cÚ¡¿šts-> +v®ue +. +width + != 0) { + +867 +ASN__ENCODE_FAILED +; + +871 +Ën_Ën + = + `Ûr_£rŸlize_Ëngth +( +¡ +-> +size +, +cb +, +­p_key +); + +872 if( +Ën_Ën + < 0 || + `cb +( +¡ +-> +buf +, st-> +size +, +­p_key +) < 0) { + +873 +ASN__ENCODE_FAILED +; + +875 +” +. +’coded + = +Ën_Ën + + +¡ +-> +size +; + +876 + `ASN__ENCODED_OK +( +” +); + +878 + } +} + +880 +a¢_dec_rv®_t + + +881 + $REAL_decode_Ûr +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +882 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +883 cÚ¡ +a¢_Ûr_cÚ¡¿šts_t + * +cÚ¡¿šts +, ** +¥Œ +, + +884 cÚ¡ * +±r +, +size_t + +size +) { + +885 +a¢_dec_rv®_t + +ok + = { +RC_OK +, 0}; + +886 +REAL_t + * +¡ +; + +887 +ušt8_t + * +buf +; + +888 +ssize_t + +Ën_Ën +; + +889 +size_t + +»®_body_Ën +; + +891 () +Ýt_codec_ùx +; + +893 if(! +cÚ¡¿šts +ècÚ¡¿št ð +td +-> +’codšg_cÚ¡¿šts +. +Ûr_cÚ¡¿šts +; + +894 if( +cÚ¡¿šts + && cÚ¡¿šts-> +v®ue +. +width + != 0) { + +897 +ASN__DECODE_FAILED +; + +900 +Ën_Ën + = + `Ûr_ãtch_Ëngth +( +±r +, +size +, & +»®_body_Ën +); + +901 if( +Ën_Ën + < 0è +ASN__DECODE_FAILED +; + +902 if( +Ën_Ën + =ð0è +ASN__DECODE_STARVED +; + +904 +±r + = (cÚ¡ *íŒ + +Ën_Ën +; + +905 +size + -ð +Ën_Ën +; + +907 if( +»®_body_Ën + > +size +è +ASN__DECODE_STARVED +; + +909 +buf + = + `CALLOC +(1, +»®_body_Ën + + 1); + +910 if(! +buf +è +ASN__DECODE_FAILED +; + +912 if(!( +¡ + = * +¥Œ +)) { + +913 +¡ + = (* +¥Œ + = + `CALLOC +(1, ( +REAL_t +))); + +914 if(! +¡ +) { + +915 + `FREEMEM +( +buf +); + +916 +ASN__DECODE_FAILED +; + +919 + `FREEMEM +( +¡ +-> +buf +); + +922 + `memýy +( +buf +, +±r +, +»®_body_Ën +); + +923 +buf +[ +»®_body_Ën +] = '\0'; + +925 +¡ +-> +buf + = buf; + +926 +¡ +-> +size + = +»®_body_Ën +; + +928 +ok +. +cÚsumed + = +Ën_Ën + + +»®_body_Ën +; + +929  +ok +; + +930 + } +} + +934 #iâdeà +ASN_DISABLE_PER_SUPPORT + + +936 +a¢_dec_rv®_t + + +937 + $REAL_decode_u³r +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +938 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +939 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, ** +¥Œ +, + +940 +a¢_³r_d©a_t + * +pd +) { + +941 () +cÚ¡¿šts +; + +942  + `OCTET_STRING_decode_u³r +( +Ýt_codec_ùx +, +td +, 0, +¥Œ +, +pd +); + +943 + } +} + +945 +a¢_’c_rv®_t + + +946 + $REAL_’code_u³r +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +947 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, cÚ¡ * +¥Œ +, + +948 +a¢_³r_ou_t + * +po +) { + +949 () +cÚ¡¿šts +; + +950  + `OCTET_STRING_’code_u³r +( +td +, 0, +¥Œ +, +po +); + +951 + } +} + +953 +a¢_dec_rv®_t + + +954 + $REAL_decode_­” +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +955 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +956 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +957 ** +¥Œ +, +a¢_³r_d©a_t + * +pd +) { + +958 () +cÚ¡¿šts +; + +959  + `OCTET_STRING_decode_­” +( +Ýt_codec_ùx +, +td +, 0, +¥Œ +, +pd +); + +960 + } +} + +962 +a¢_’c_rv®_t + + +963 + $REAL_’code_­” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +964 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +965 cÚ¡ * +¥Œ +, +a¢_³r_ou_t + * +po +) { + +966 () +cÚ¡¿šts +; + +967  + `OCTET_STRING_’code_­” +( +td +, 0, +¥Œ +, +po +); + +968 + } +} + +972 +a¢_¿ndom_fžl_»suÉ_t + + +973 + $REAL_¿ndom_fžl +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¥Œ +, + +974 cÚ¡ +a¢_’codšg_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +975 +size_t + +max_Ëngth +) { + +976 +a¢_¿ndom_fžl_»suÉ_t + +»suÉ_ok + = { +ARFILL_OK +, 1}; + +977 +a¢_¿ndom_fžl_»suÉ_t + +»suÉ_çžed + = { +ARFILL_FAILED +, 0}; + +978 +a¢_¿ndom_fžl_»suÉ_t + +»suÉ_sk³d + = { +ARFILL_SKIPPED +, 0}; + +979 cÚ¡  +v®ues +[] = { + +980 0, -0.0, -1, 1, - +M_E +, M_E, -3.14, 3.14, - +M_PI +, M_PI, -255, 255, + +987 - +FLT_MIN +, FLT_MIN, + +988 - +FLT_MAX +, FLT_MAX, + +989 - +DBL_MIN +, DBL_MIN, + +990 - +DBL_MAX +, DBL_MAX, + +991 #ifdeà +FLT_TRUE_MIN + + +992 - +FLT_TRUE_MIN +, FLT_TRUE_MIN, + +994 #ifdeà +DBL_TRUE_MIN + + +995 - +DBL_TRUE_MIN +, DBL_TRUE_MIN, + +997 +INFINITY +, -INFINITY, +NAN +}; + +998 +REAL_t + * +¡ +; + +999  +d +; + +1001 () +cÚ¡¿šts +; + +1003 if( +max_Ëngth + =ð0è +»suÉ_sk³d +; + +1005 +d + = +v®ues +[ + `a¢_¿ndom_b‘w“n +(0, (values) / (values[0]) - 1)]; + +1007 if(* +¥Œ +) { + +1008 +¡ + = * +¥Œ +; + +1010 +¡ + = ( +REAL_t +*)(* +¥Œ + = + `CALLOC +(1, (REAL_t))); + +1011 if(! +¡ +) { + +1012  +»suÉ_çžed +; + +1016 if( + `a¢_doubË2REAL +( +¡ +, +d +)) { + +1017 if( +¡ + =ð* +¥Œ +) { + +1018 + `ASN_STRUCT_RESET +(* +td +, +¡ +); + +1020 + `ASN_STRUCT_FREE +(* +td +, +¡ +); + +1022  +»suÉ_çžed +; + +1025 +»suÉ_ok +. +Ëngth + = +¡ +-> +size +; + +1026  +»suÉ_ok +; + +1027 + } +} + + @RIC-EventTriggerStyle-Item.c + +8  + ~"RIC-Ev’tTrigg”StyË-I‹m.h +" + +10 +a¢_TYPE_memb”_t + + ga¢_MBR_RIC_Ev’tTrigg”StyË_I‹m_1 +[] = { + +11 { +ATF_NOFLAGS +, 0, +off£tof +( +RIC_Ev’tTrigg”StyË_I‹m +, +ric_Ev’tTrigg”StyË_Ty³ +), + +12 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +14 & +a¢_DEF_RIC_StyË_Ty³ +, + +20 { +ATF_NOFLAGS +, 0, +off£tof +( +RIC_Ev’tTrigg”StyË_I‹m +, +ric_Ev’tTrigg”StyË_Name +), + +21 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +23 & +a¢_DEF_RIC_StyË_Name +, + +29 { +ATF_NOFLAGS +, 0, +off£tof +( +RIC_Ev’tTrigg”StyË_I‹m +, +ric_Ev’tTrigg”FÜm©_Ty³ +), + +30 ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), + +32 & +a¢_DEF_RIC_FÜm©_Ty³ +, + +39 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_RIC_Ev’tTrigg”StyË_I‹m_gs_1 +[] = { + +40 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +42 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_RIC_Ev’tTrigg”StyË_I‹m_g2–_1 +[] = { + +43 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +44 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 }, + +45 { ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), 2, 0, 0 } + +47 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_RIC_Ev’tTrigg”StyË_I‹m_¥ecs_1 + = { + +48 ( +RIC_Ev’tTrigg”StyË_I‹m +), + +49 +off£tof +( +RIC_Ev’tTrigg”StyË_I‹m +, +_a¢_ùx +), + +50 +a¢_MAP_RIC_Ev’tTrigg”StyË_I‹m_g2–_1 +, + +55 +a¢_TYPE_desütÜ_t + + ga¢_DEF_RIC_Ev’tTrigg”StyË_I‹m + = { + +58 & +a¢_OP_SEQUENCE +, + +59 +a¢_DEF_RIC_Ev’tTrigg”StyË_I‹m_gs_1 +, + +60 ( +a¢_DEF_RIC_Ev’tTrigg”StyË_I‹m_gs_1 +) + +61 /( +a¢_DEF_RIC_Ev’tTrigg”StyË_I‹m_gs_1 +[0]), + +62 +a¢_DEF_RIC_Ev’tTrigg”StyË_I‹m_gs_1 +, + +63 ( +a¢_DEF_RIC_Ev’tTrigg”StyË_I‹m_gs_1 +) + +64 /( +a¢_DEF_RIC_Ev’tTrigg”StyË_I‹m_gs_1 +[0]), + +65 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +66 +a¢_MBR_RIC_Ev’tTrigg”StyË_I‹m_1 +, + +68 & +a¢_SPC_RIC_Ev’tTrigg”StyË_I‹m_¥ecs_1 + + + @RIC-Format-Type.c + +8  + ~"RIC-FÜm©-Ty³.h +" + +14 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_RIC_FÜm©_Ty³_gs_1 +[] = { + +15 ( +ASN_TAG_CLASS_UNIVERSAL + | (2 << 2)) + +17 +a¢_TYPE_desütÜ_t + + ga¢_DEF_RIC_FÜm©_Ty³ + = { + +20 & +a¢_OP_N©iveIÁeg” +, + +21 +a¢_DEF_RIC_FÜm©_Ty³_gs_1 +, + +22 ( +a¢_DEF_RIC_FÜm©_Ty³_gs_1 +) + +23 /( +a¢_DEF_RIC_FÜm©_Ty³_gs_1 +[0]), + +24 +a¢_DEF_RIC_FÜm©_Ty³_gs_1 +, + +25 ( +a¢_DEF_RIC_FÜm©_Ty³_gs_1 +) + +26 /( +a¢_DEF_RIC_FÜm©_Ty³_gs_1 +[0]), + +27 { 0, 0, +N©iveIÁeg”_cÚ¡¿št + }, + + @RIC-ReportStyle-Item.c + +8  + ~"RIC-R•ÜtStyË-I‹m.h +" + +10 +a¢_TYPE_memb”_t + + ga¢_MBR_RIC_R•ÜtStyË_I‹m_1 +[] = { + +11 { +ATF_NOFLAGS +, 0, +off£tof +( +RIC_R•ÜtStyË_I‹m +, +ric_R•ÜtStyË_Ty³ +), + +12 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +14 & +a¢_DEF_RIC_StyË_Ty³ +, + +20 { +ATF_NOFLAGS +, 0, +off£tof +( +RIC_R•ÜtStyË_I‹m +, +ric_R•ÜtStyË_Name +), + +21 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +23 & +a¢_DEF_RIC_StyË_Name +, + +29 { +ATF_NOFLAGS +, 0, +off£tof +( +RIC_R•ÜtStyË_I‹m +, +ric_AùiÚFÜm©_Ty³ +), + +30 ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), + +32 & +a¢_DEF_RIC_FÜm©_Ty³ +, + +38 { +ATF_NOFLAGS +, 0, +off£tof +( +RIC_R•ÜtStyË_I‹m +, +m—sInfo_AùiÚ_Li¡ +), + +39 ( +ASN_TAG_CLASS_CONTEXT + | (3 << 2)), + +41 & +a¢_DEF_M—su»m’tInfo_AùiÚ_Li¡ +, + +47 { +ATF_NOFLAGS +, 0, +off£tof +( +RIC_R•ÜtStyË_I‹m +, +ric_IndiÿtiÚH—d”FÜm©_Ty³ +), + +48 ( +ASN_TAG_CLASS_CONTEXT + | (4 << 2)), + +50 & +a¢_DEF_RIC_FÜm©_Ty³ +, + +56 { +ATF_NOFLAGS +, 0, +off£tof +( +RIC_R•ÜtStyË_I‹m +, +ric_IndiÿtiÚMes§geFÜm©_Ty³ +), + +57 ( +ASN_TAG_CLASS_CONTEXT + | (5 << 2)), + +59 & +a¢_DEF_RIC_FÜm©_Ty³ +, + +66 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_RIC_R•ÜtStyË_I‹m_gs_1 +[] = { + +67 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +69 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_RIC_R•ÜtStyË_I‹m_g2–_1 +[] = { + +70 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +71 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 }, + +72 { ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), 2, 0, 0 }, + +73 { ( +ASN_TAG_CLASS_CONTEXT + | (3 << 2)), 3, 0, 0 }, + +74 { ( +ASN_TAG_CLASS_CONTEXT + | (4 << 2)), 4, 0, 0 }, + +75 { ( +ASN_TAG_CLASS_CONTEXT + | (5 << 2)), 5, 0, 0 } + +77 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_RIC_R•ÜtStyË_I‹m_¥ecs_1 + = { + +78 ( +RIC_R•ÜtStyË_I‹m +), + +79 +off£tof +( +RIC_R•ÜtStyË_I‹m +, +_a¢_ùx +), + +80 +a¢_MAP_RIC_R•ÜtStyË_I‹m_g2–_1 +, + +85 +a¢_TYPE_desütÜ_t + + ga¢_DEF_RIC_R•ÜtStyË_I‹m + = { + +88 & +a¢_OP_SEQUENCE +, + +89 +a¢_DEF_RIC_R•ÜtStyË_I‹m_gs_1 +, + +90 ( +a¢_DEF_RIC_R•ÜtStyË_I‹m_gs_1 +) + +91 /( +a¢_DEF_RIC_R•ÜtStyË_I‹m_gs_1 +[0]), + +92 +a¢_DEF_RIC_R•ÜtStyË_I‹m_gs_1 +, + +93 ( +a¢_DEF_RIC_R•ÜtStyË_I‹m_gs_1 +) + +94 /( +a¢_DEF_RIC_R•ÜtStyË_I‹m_gs_1 +[0]), + +95 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +96 +a¢_MBR_RIC_R•ÜtStyË_I‹m_1 +, + +98 & +a¢_SPC_RIC_R•ÜtStyË_I‹m_¥ecs_1 + + + @RIC-Style-Name.c + +8  + ~"RIC-StyË-Name.h +" + +10 cÚ¡  + g³rm™‹d_®phab‘_bË_1 +[256] = { + +20 cÚ¡  + g³rm™‹d_®phab‘_code2v®ue_1 +[74] = { + +28  + $check_³rm™‹d_®phab‘_1 +(cÚ¡ * +¥Œ +) { + +29 cÚ¡ * +bË + = +³rm™‹d_®phab‘_bË_1 +; + +31 cÚ¡ +PršbËSŒšg_t + * +¡ + = (cÚ¡ PršbËSŒšg_ˆ*) +¥Œ +; + +32 cÚ¡ +ušt8_t + * +ch + = +¡ +-> +buf +; + +33 cÚ¡ +ušt8_t + * +’d + = +ch + + +¡ +-> +size +; + +35 ; +ch + < +’d +; ch++) { + +36 +ušt8_t + +cv + = * +ch +; + +37 if(! +bË +[ +cv +])  -1; + +40 + } +} + +43 + $RIC_StyË_Name_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +44 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +45 cÚ¡ +PršbËSŒšg_t + * +¡ + = (cÚ¡ PršbËSŒšg_ˆ*) +¥Œ +; + +46 +size_t + +size +; + +48 if(! +¥Œ +) { + +49 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +51 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +55 +size + = +¡ +->size; + +57 if(( +size + >= 1 && size <= 150) + +58 && ! + `check_³rm™‹d_®phab‘_1 +( +¡ +)) { + +62 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +64 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +67 + } +} + +69  + $a¢_PER_MAP_RIC_StyË_Name_1_v2c +( +v®ue +) { + +70 if( +v®ue + >ð( +³rm™‹d_®phab‘_bË_1 +)/(permitted_alphabet_table_1[0])) + +72  +³rm™‹d_®phab‘_bË_1 +[ +v®ue +] - 1; + +73 + } +} + +74  + $a¢_PER_MAP_RIC_StyË_Name_1_c2v +( +code +) { + +75 if( +code + >ð( +³rm™‹d_®phab‘_code2v®ue_1 +)/(permitted_alphabet_code2value_1[0])) + +77  +³rm™‹d_®phab‘_code2v®ue_1 +[ +code +]; + +78 + } +} + +83 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_RIC_StyË_Name_cÚ¡r_1 + + gCC_NOTUSED + = { + +84 { +APC_CONSTRAINED +, 7, 7, 32, 122 } , + +85 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 8, 8, 1, 150 } , + +86 +a¢_PER_MAP_RIC_StyË_Name_1_v2c +, + +87 +a¢_PER_MAP_RIC_StyË_Name_1_c2v + + +89 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_RIC_StyË_Name_gs_1 +[] = { + +90 ( +ASN_TAG_CLASS_UNIVERSAL + | (19 << 2)) + +92 +a¢_TYPE_desütÜ_t + + ga¢_DEF_RIC_StyË_Name + = { + +95 & +a¢_OP_PršbËSŒšg +, + +96 +a¢_DEF_RIC_StyË_Name_gs_1 +, + +97 ( +a¢_DEF_RIC_StyË_Name_gs_1 +) + +98 /( +a¢_DEF_RIC_StyË_Name_gs_1 +[0]), + +99 +a¢_DEF_RIC_StyË_Name_gs_1 +, + +100 ( +a¢_DEF_RIC_StyË_Name_gs_1 +) + +101 /( +a¢_DEF_RIC_StyË_Name_gs_1 +[0]), + +102 { 0, & +a¢_PER_ty³_RIC_StyË_Name_cÚ¡r_1 +, +RIC_StyË_Name_cÚ¡¿št + }, + + @RIC-Style-Type.c + +8  + ~"RIC-StyË-Ty³.h +" + +14 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_RIC_StyË_Ty³_gs_1 +[] = { + +15 ( +ASN_TAG_CLASS_UNIVERSAL + | (2 << 2)) + +17 +a¢_TYPE_desütÜ_t + + ga¢_DEF_RIC_StyË_Ty³ + = { + +20 & +a¢_OP_N©iveIÁeg” +, + +21 +a¢_DEF_RIC_StyË_Ty³_gs_1 +, + +22 ( +a¢_DEF_RIC_StyË_Ty³_gs_1 +) + +23 /( +a¢_DEF_RIC_StyË_Ty³_gs_1 +[0]), + +24 +a¢_DEF_RIC_StyË_Ty³_gs_1 +, + +25 ( +a¢_DEF_RIC_StyË_Ty³_gs_1 +) + +26 /( +a¢_DEF_RIC_StyË_Ty³_gs_1 +[0]), + +27 { 0, 0, +N©iveIÁeg”_cÚ¡¿št + }, + + @RRC-MessageID.c + +8  + ~"RRC-Mes§geID.h +" + +10  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_¼cTy³_cÚ¡r_2 + + gCC_NOTUSED + = { + +11 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 1, 1, 0, 1 } , + +12 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +15  +a¢_TYPE_memb”_t + + ga¢_MBR_¼cTy³_2 +[] = { + +16 { +ATF_NOFLAGS +, 0, +off£tof +( +RRC_Mes§geID__¼cTy³ +, +choiû +. +lTE +), + +17 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +19 & +a¢_DEF_RRCþass_LTE +, + +25 { +ATF_NOFLAGS +, 0, +off£tof +( +RRC_Mes§geID__¼cTy³ +, +choiû +. +nR +), + +26 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +28 & +a¢_DEF_RRCþass_NR +, + +35 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_¼cTy³_g2–_2 +[] = { + +36 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +37 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 } + +39  +a¢_CHOICE_¥ecifics_t + + ga¢_SPC_¼cTy³_¥ecs_2 + = { + +40 ( +RRC_Mes§geID__¼cTy³ +), + +41 +off£tof +( +RRC_Mes§geID__¼cTy³ +, +_a¢_ùx +), + +42 +off£tof +( +RRC_Mes§geID__¼cTy³ +, +´e£Á +), + +43 ((( +RRC_Mes§geID__¼cTy³ + *)0)-> +´e£Á +), + +44 +a¢_MAP_¼cTy³_g2–_2 +, + +50 +a¢_TYPE_desütÜ_t + + ga¢_DEF_¼cTy³_2 + = { + +53 & +a¢_OP_CHOICE +, + +58 { 0, & +a¢_PER_ty³_¼cTy³_cÚ¡r_2 +, +CHOICE_cÚ¡¿št + }, + +59 +a¢_MBR_¼cTy³_2 +, + +61 & +a¢_SPC_¼cTy³_¥ecs_2 + + +64  +a¢_TYPE_memb”_t + + ga¢_MBR_RRC_Mes§geID_1 +[] = { + +65 { +ATF_NOFLAGS +, 0, +off£tof +( +RRC_Mes§geID +, +¼cTy³ +), + +66 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +68 & +a¢_DEF_¼cTy³_2 +, + +74 { +ATF_NOFLAGS +, 0, +off£tof +( +RRC_Mes§geID +, +mes§geID +), + +75 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +77 & +a¢_DEF_N©iveIÁeg” +, + +84 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_RRC_Mes§geID_gs_1 +[] = { + +85 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +87 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_RRC_Mes§geID_g2–_1 +[] = { + +88 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +89 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 } + +91  +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_RRC_Mes§geID_¥ecs_1 + = { + +92 ( +RRC_Mes§geID +), + +93 +off£tof +( +RRC_Mes§geID +, +_a¢_ùx +), + +94 +a¢_MAP_RRC_Mes§geID_g2–_1 +, + +99 +a¢_TYPE_desütÜ_t + + ga¢_DEF_RRC_Mes§geID + = { + +102 & +a¢_OP_SEQUENCE +, + +103 +a¢_DEF_RRC_Mes§geID_gs_1 +, + +104 ( +a¢_DEF_RRC_Mes§geID_gs_1 +) + +105 /( +a¢_DEF_RRC_Mes§geID_gs_1 +[0]), + +106 +a¢_DEF_RRC_Mes§geID_gs_1 +, + +107 ( +a¢_DEF_RRC_Mes§geID_gs_1 +) + +108 /( +a¢_DEF_RRC_Mes§geID_gs_1 +[0]), + +109 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +110 +a¢_MBR_RRC_Mes§geID_1 +, + +112 & +a¢_SPC_RRC_Mes§geID_¥ecs_1 + + + @RRCclass-LTE.c + +8  + ~"RRCþass-LTE.h +" + +14 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_RRCþass_LTE_cÚ¡r_1 + + gCC_NOTUSED + = { + +15 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 4, 4, 0, 11 } , + +16 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +19 cÚ¡ +a¢_INTEGER_’um_m­_t + + ga¢_MAP_RRCþass_LTE_v®ue2’um_1 +[] = { + +34 cÚ¡  + ga¢_MAP_RRCþass_LTE_’um2v®ue_1 +[] = { + +49 cÚ¡ +a¢_INTEGER_¥ecifics_t + + ga¢_SPC_RRCþass_LTE_¥ecs_1 + = { + +50 +a¢_MAP_RRCþass_LTE_v®ue2’um_1 +, + +51 +a¢_MAP_RRCþass_LTE_’um2v®ue_1 +, + +58 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_RRCþass_LTE_gs_1 +[] = { + +59 ( +ASN_TAG_CLASS_UNIVERSAL + | (10 << 2)) + +61 +a¢_TYPE_desütÜ_t + + ga¢_DEF_RRCþass_LTE + = { + +64 & +a¢_OP_N©iveEnum”©ed +, + +65 +a¢_DEF_RRCþass_LTE_gs_1 +, + +66 ( +a¢_DEF_RRCþass_LTE_gs_1 +) + +67 /( +a¢_DEF_RRCþass_LTE_gs_1 +[0]), + +68 +a¢_DEF_RRCþass_LTE_gs_1 +, + +69 ( +a¢_DEF_RRCþass_LTE_gs_1 +) + +70 /( +a¢_DEF_RRCþass_LTE_gs_1 +[0]), + +71 { 0, & +a¢_PER_ty³_RRCþass_LTE_cÚ¡r_1 +, +N©iveEnum”©ed_cÚ¡¿št + }, + +73 & +a¢_SPC_RRCþass_LTE_¥ecs_1 + + + @RRCclass-NR.c + +8  + ~"RRCþass-NR.h +" + +14 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_RRCþass_NR_cÚ¡r_1 + + gCC_NOTUSED + = { + +15 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 3, 3, 0, 7 } , + +16 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +19 cÚ¡ +a¢_INTEGER_’um_m­_t + + ga¢_MAP_RRCþass_NR_v®ue2’um_1 +[] = { + +30 cÚ¡  + ga¢_MAP_RRCþass_NR_’um2v®ue_1 +[] = { + +41 cÚ¡ +a¢_INTEGER_¥ecifics_t + + ga¢_SPC_RRCþass_NR_¥ecs_1 + = { + +42 +a¢_MAP_RRCþass_NR_v®ue2’um_1 +, + +43 +a¢_MAP_RRCþass_NR_’um2v®ue_1 +, + +50 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_RRCþass_NR_gs_1 +[] = { + +51 ( +ASN_TAG_CLASS_UNIVERSAL + | (10 << 2)) + +53 +a¢_TYPE_desütÜ_t + + ga¢_DEF_RRCþass_NR + = { + +56 & +a¢_OP_N©iveEnum”©ed +, + +57 +a¢_DEF_RRCþass_NR_gs_1 +, + +58 ( +a¢_DEF_RRCþass_NR_gs_1 +) + +59 /( +a¢_DEF_RRCþass_NR_gs_1 +[0]), + +60 +a¢_DEF_RRCþass_NR_gs_1 +, + +61 ( +a¢_DEF_RRCþass_NR_gs_1 +) + +62 /( +a¢_DEF_RRCþass_NR_gs_1 +[0]), + +63 { 0, & +a¢_PER_ty³_RRCþass_NR_cÚ¡r_1 +, +N©iveEnum”©ed_cÚ¡¿št + }, + +65 & +a¢_SPC_RRCþass_NR_¥ecs_1 + + + @S-NSSAI.c + +8  + ~"S-NSSAI.h +" + +10 +a¢_TYPE_memb”_t + + ga¢_MBR_S_NSSAI_1 +[] = { + +11 { +ATF_NOFLAGS +, 0, +off£tof +( +S_NSSAI +, +sST +), + +12 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +14 & +a¢_DEF_SST +, + +20 { +ATF_POINTER +, 1, +off£tof +( +S_NSSAI +, +sD +), + +21 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +23 & +a¢_DEF_SD +, + +30 cÚ¡  + ga¢_MAP_S_NSSAI_oms_1 +[] = { 1 }; + +31 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_S_NSSAI_gs_1 +[] = { + +32 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +34 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_S_NSSAI_g2–_1 +[] = { + +35 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +36 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 } + +38 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_S_NSSAI_¥ecs_1 + = { + +39 ( +S_NSSAI +), + +40 +off£tof +( +S_NSSAI +, +_a¢_ùx +), + +41 +a¢_MAP_S_NSSAI_g2–_1 +, + +43 +a¢_MAP_S_NSSAI_oms_1 +, + +47 +a¢_TYPE_desütÜ_t + + ga¢_DEF_S_NSSAI + = { + +50 & +a¢_OP_SEQUENCE +, + +51 +a¢_DEF_S_NSSAI_gs_1 +, + +52 ( +a¢_DEF_S_NSSAI_gs_1 +) + +53 /( +a¢_DEF_S_NSSAI_gs_1 +[0]), + +54 +a¢_DEF_S_NSSAI_gs_1 +, + +55 ( +a¢_DEF_S_NSSAI_gs_1 +) + +56 /( +a¢_DEF_S_NSSAI_gs_1 +[0]), + +57 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +58 +a¢_MBR_S_NSSAI_1 +, + +60 & +a¢_SPC_S_NSSAI_¥ecs_1 + + + @SD.c + +8  + ~"SD.h +" + +11 + $SD_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13 cÚ¡ +OCTET_STRING_t + * +¡ + = (cÚ¡ OCTET_STRING_ˆ*) +¥Œ +; + +14 +size_t + +size +; + +16 if(! +¥Œ +) { + +17 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +19 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +23 +size + = +¡ +->size; + +25 if(( +size + == 3)) { + +29 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +31 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +34 + } +} + +40 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_SD_cÚ¡r_1 + + gCC_NOTUSED + = { + +41 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +42 { +APC_CONSTRAINED +, 0, 0, 3, 3 } , + +45 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_SD_gs_1 +[] = { + +46 ( +ASN_TAG_CLASS_UNIVERSAL + | (4 << 2)) + +48 +a¢_TYPE_desütÜ_t + + ga¢_DEF_SD + = { + +51 & +a¢_OP_OCTET_STRING +, + +52 +a¢_DEF_SD_gs_1 +, + +53 ( +a¢_DEF_SD_gs_1 +) + +54 /( +a¢_DEF_SD_gs_1 +[0]), + +55 +a¢_DEF_SD_gs_1 +, + +56 ( +a¢_DEF_SD_gs_1 +) + +57 /( +a¢_DEF_SD_gs_1 +[0]), + +58 { 0, & +a¢_PER_ty³_SD_cÚ¡r_1 +, +SD_cÚ¡¿št + }, + +60 & +a¢_SPC_OCTET_STRING_¥ecs + + + @SST.c + +8  + ~"SST.h +" + +11 + $SST_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13 cÚ¡ +OCTET_STRING_t + * +¡ + = (cÚ¡ OCTET_STRING_ˆ*) +¥Œ +; + +14 +size_t + +size +; + +16 if(! +¥Œ +) { + +17 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +19 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +23 +size + = +¡ +->size; + +25 if(( +size + == 1)) { + +29 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +31 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +34 + } +} + +40 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_SST_cÚ¡r_1 + + gCC_NOTUSED + = { + +41 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +42 { +APC_CONSTRAINED +, 0, 0, 1, 1 } , + +45 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_SST_gs_1 +[] = { + +46 ( +ASN_TAG_CLASS_UNIVERSAL + | (4 << 2)) + +48 +a¢_TYPE_desütÜ_t + + ga¢_DEF_SST + = { + +51 & +a¢_OP_OCTET_STRING +, + +52 +a¢_DEF_SST_gs_1 +, + +53 ( +a¢_DEF_SST_gs_1 +) + +54 /( +a¢_DEF_SST_gs_1 +[0]), + +55 +a¢_DEF_SST_gs_1 +, + +56 ( +a¢_DEF_SST_gs_1 +) + +57 /( +a¢_DEF_SST_gs_1 +[0]), + +58 { 0, & +a¢_PER_ty³_SST_cÚ¡r_1 +, +SST_cÚ¡¿št + }, + +60 & +a¢_SPC_OCTET_STRING_¥ecs + + + @ServingCell-ARFCN.c + +8  + ~"S”všgC–l-ARFCN.h +" + +10  + ~"NR-ARFCN.h +" + +11  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_S”všgC–l_ARFCN_cÚ¡r_1 + + gCC_NOTUSED + = { + +12 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 1, 1, 0, 1 } , + +13 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +16  +a¢_TYPE_memb”_t + + ga¢_MBR_S”všgC–l_ARFCN_1 +[] = { + +17 { +ATF_POINTER +, 0, +off£tof +( +S”všgC–l_ARFCN +, +choiû +. +nR +), + +18 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +20 & +a¢_DEF_NR_ARFCN +, + +26 { +ATF_NOFLAGS +, 0, +off£tof +( +S”všgC–l_ARFCN +, +choiû +. +eUTRA +), + +27 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +29 & +a¢_DEF_E_UTRA_ARFCN +, + +36 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_S”všgC–l_ARFCN_g2–_1 +[] = { + +37 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +38 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 } + +40  +a¢_CHOICE_¥ecifics_t + + ga¢_SPC_S”všgC–l_ARFCN_¥ecs_1 + = { + +41 ( +S”všgC–l_ARFCN +), + +42 +off£tof +( +S”všgC–l_ARFCN +, +_a¢_ùx +), + +43 +off£tof +( +S”všgC–l_ARFCN +, +´e£Á +), + +44 ((( +S”všgC–l_ARFCN + *)0)-> +´e£Á +), + +45 +a¢_MAP_S”všgC–l_ARFCN_g2–_1 +, + +50 +a¢_TYPE_desütÜ_t + + ga¢_DEF_S”všgC–l_ARFCN + = { + +53 & +a¢_OP_CHOICE +, + +58 { 0, & +a¢_PER_ty³_S”všgC–l_ARFCN_cÚ¡r_1 +, +CHOICE_cÚ¡¿št + }, + +59 +a¢_MBR_S”všgC–l_ARFCN_1 +, + +61 & +a¢_SPC_S”všgC–l_ARFCN_¥ecs_1 + + + @ServingCell-PCI.c + +8  + ~"S”všgC–l-PCI.h +" + +10  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_S”všgC–l_PCI_cÚ¡r_1 + + gCC_NOTUSED + = { + +11 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 1, 1, 0, 1 } , + +12 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +15  +a¢_TYPE_memb”_t + + ga¢_MBR_S”všgC–l_PCI_1 +[] = { + +16 { +ATF_NOFLAGS +, 0, +off£tof +( +S”všgC–l_PCI +, +choiû +. +nR +), + +17 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +19 & +a¢_DEF_NR_PCI +, + +25 { +ATF_NOFLAGS +, 0, +off£tof +( +S”všgC–l_PCI +, +choiû +. +eUTRA +), + +26 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +28 & +a¢_DEF_E_UTRA_PCI +, + +35 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_S”všgC–l_PCI_g2–_1 +[] = { + +36 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +37 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 } + +39  +a¢_CHOICE_¥ecifics_t + + ga¢_SPC_S”všgC–l_PCI_¥ecs_1 + = { + +40 ( +S”všgC–l_PCI +), + +41 +off£tof +( +S”všgC–l_PCI +, +_a¢_ùx +), + +42 +off£tof +( +S”všgC–l_PCI +, +´e£Á +), + +43 ((( +S”všgC–l_PCI + *)0)-> +´e£Á +), + +44 +a¢_MAP_S”všgC–l_PCI_g2–_1 +, + +49 +a¢_TYPE_desütÜ_t + + ga¢_DEF_S”všgC–l_PCI + = { + +52 & +a¢_OP_CHOICE +, + +57 { 0, & +a¢_PER_ty³_S”všgC–l_PCI_cÚ¡r_1 +, +CHOICE_cÚ¡¿št + }, + +58 +a¢_MBR_S”všgC–l_PCI_1 +, + +60 & +a¢_SPC_S”všgC–l_PCI_¥ecs_1 + + + @SubscriberProfileIDforRFP.c + +8  + ~"Subsüib”ProfžeIDfÜRFP.h +" + +11 + $Subsüib”ProfžeIDfÜRFP_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13  +v®ue +; + +15 if(! +¥Œ +) { + +16 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +18 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +22 +v®ue + = *(cÚ¡ *) +¥Œ +; + +24 if(( +v®ue + >= 1 && value <= 256)) { + +28 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +30 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +33 + } +} + +39  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_Subsüib”ProfžeIDfÜRFP_cÚ¡r_1 + + gCC_NOTUSED + = { + +40 { +APC_CONSTRAINED +, 8, 8, 1, 256 } , + +41 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +44 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_Subsüib”ProfžeIDfÜRFP_gs_1 +[] = { + +45 ( +ASN_TAG_CLASS_UNIVERSAL + | (2 << 2)) + +47 +a¢_TYPE_desütÜ_t + + ga¢_DEF_Subsüib”ProfžeIDfÜRFP + = { + +50 & +a¢_OP_N©iveIÁeg” +, + +51 +a¢_DEF_Subsüib”ProfžeIDfÜRFP_gs_1 +, + +52 ( +a¢_DEF_Subsüib”ProfžeIDfÜRFP_gs_1 +) + +53 /( +a¢_DEF_Subsüib”ProfžeIDfÜRFP_gs_1 +[0]), + +54 +a¢_DEF_Subsüib”ProfžeIDfÜRFP_gs_1 +, + +55 ( +a¢_DEF_Subsüib”ProfžeIDfÜRFP_gs_1 +) + +56 /( +a¢_DEF_Subsüib”ProfžeIDfÜRFP_gs_1 +[0]), + +57 { 0, & +a¢_PER_ty³_Subsüib”ProfžeIDfÜRFP_cÚ¡r_1 +, +Subsüib”ProfžeIDfÜRFP_cÚ¡¿št + }, + + @SupportedSULBandList.c + +8  + ~"SuµÜ‹dSULBªdLi¡.h +" + +10  + ~"SuµÜ‹dSULF»qBªdI‹m.h +" + +11 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_SuµÜ‹dSULBªdLi¡_cÚ¡r_1 + + gCC_NOTUSED + = { + +12 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +13 { +APC_CONSTRAINED +, 6, 6, 0, 32 } , + +16 +a¢_TYPE_memb”_t + + ga¢_MBR_SuµÜ‹dSULBªdLi¡_1 +[] = { + +17 { +ATF_POINTER +, 0, 0, + +18 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)), + +20 & +a¢_DEF_SuµÜ‹dSULF»qBªdI‹m +, + +27 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_SuµÜ‹dSULBªdLi¡_gs_1 +[] = { + +28 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +30 +a¢_SET_OF_¥ecifics_t + + ga¢_SPC_SuµÜ‹dSULBªdLi¡_¥ecs_1 + = { + +31 ( +SuµÜ‹dSULBªdLi¡ +), + +32 +off£tof +( +SuµÜ‹dSULBªdLi¡ +, +_a¢_ùx +), + +35 +a¢_TYPE_desütÜ_t + + ga¢_DEF_SuµÜ‹dSULBªdLi¡ + = { + +38 & +a¢_OP_SEQUENCE_OF +, + +39 +a¢_DEF_SuµÜ‹dSULBªdLi¡_gs_1 +, + +40 ( +a¢_DEF_SuµÜ‹dSULBªdLi¡_gs_1 +) + +41 /( +a¢_DEF_SuµÜ‹dSULBªdLi¡_gs_1 +[0]), + +42 +a¢_DEF_SuµÜ‹dSULBªdLi¡_gs_1 +, + +43 ( +a¢_DEF_SuµÜ‹dSULBªdLi¡_gs_1 +) + +44 /( +a¢_DEF_SuµÜ‹dSULBªdLi¡_gs_1 +[0]), + +45 { 0, & +a¢_PER_ty³_SuµÜ‹dSULBªdLi¡_cÚ¡r_1 +, +SEQUENCE_OF_cÚ¡¿št + }, + +46 +a¢_MBR_SuµÜ‹dSULBªdLi¡_1 +, + +48 & +a¢_SPC_SuµÜ‹dSULBªdLi¡_¥ecs_1 + + + @SupportedSULFreqBandItem.c + +8  + ~"SuµÜ‹dSULF»qBªdI‹m.h +" + +11 + $memb_äeqBªdIndiÿtÜNr_cÚ¡¿št_1 +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13  +v®ue +; + +15 if(! +¥Œ +) { + +16 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +18 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +22 +v®ue + = *(cÚ¡ *) +¥Œ +; + +24 if(( +v®ue + >= 1 && value <= 1024)) { + +28 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +30 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +33 + } +} + +35  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_memb_äeqBªdIndiÿtÜNr_cÚ¡r_2 + + gCC_NOTUSED + = { + +36 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 10, 10, 1, 1024 } , + +37 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +40 +a¢_TYPE_memb”_t + + ga¢_MBR_SuµÜ‹dSULF»qBªdI‹m_1 +[] = { + +41 { +ATF_NOFLAGS +, 0, +off£tof +( +SuµÜ‹dSULF»qBªdI‹m +, +äeqBªdIndiÿtÜNr +), + +42 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +44 & +a¢_DEF_N©iveIÁeg” +, + +46 { 0, & +a¢_PER_memb_äeqBªdIndiÿtÜNr_cÚ¡r_2 +, +memb_äeqBªdIndiÿtÜNr_cÚ¡¿št_1 + }, + +51 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_SuµÜ‹dSULF»qBªdI‹m_gs_1 +[] = { + +52 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +54 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_SuµÜ‹dSULF»qBªdI‹m_g2–_1 +[] = { + +55 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 } + +57 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_SuµÜ‹dSULF»qBªdI‹m_¥ecs_1 + = { + +58 ( +SuµÜ‹dSULF»qBªdI‹m +), + +59 +off£tof +( +SuµÜ‹dSULF»qBªdI‹m +, +_a¢_ùx +), + +60 +a¢_MAP_SuµÜ‹dSULF»qBªdI‹m_g2–_1 +, + +65 +a¢_TYPE_desütÜ_t + + ga¢_DEF_SuµÜ‹dSULF»qBªdI‹m + = { + +68 & +a¢_OP_SEQUENCE +, + +69 +a¢_DEF_SuµÜ‹dSULF»qBªdI‹m_gs_1 +, + +70 ( +a¢_DEF_SuµÜ‹dSULF»qBªdI‹m_gs_1 +) + +71 /( +a¢_DEF_SuµÜ‹dSULF»qBªdI‹m_gs_1 +[0]), + +72 +a¢_DEF_SuµÜ‹dSULF»qBªdI‹m_gs_1 +, + +73 ( +a¢_DEF_SuµÜ‹dSULF»qBªdI‹m_gs_1 +) + +74 /( +a¢_DEF_SuµÜ‹dSULF»qBªdI‹m_gs_1 +[0]), + +75 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +76 +a¢_MBR_SuµÜ‹dSULF»qBªdI‹m_1 +, + +78 & +a¢_SPC_SuµÜ‹dSULF»qBªdI‹m_¥ecs_1 + + + @TestCond-Expression.c + +8  + ~"Te¡CÚd-Ex´essiÚ.h +" + +14 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_Te¡CÚd_Ex´essiÚ_cÚ¡r_1 + + gCC_NOTUSED + = { + +15 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 3, 3, 0, 4 } , + +16 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +19 cÚ¡ +a¢_INTEGER_’um_m­_t + + ga¢_MAP_Te¡CÚd_Ex´essiÚ_v®ue2’um_1 +[] = { + +27 cÚ¡  + ga¢_MAP_Te¡CÚd_Ex´essiÚ_’um2v®ue_1 +[] = { + +35 cÚ¡ +a¢_INTEGER_¥ecifics_t + + ga¢_SPC_Te¡CÚd_Ex´essiÚ_¥ecs_1 + = { + +36 +a¢_MAP_Te¡CÚd_Ex´essiÚ_v®ue2’um_1 +, + +37 +a¢_MAP_Te¡CÚd_Ex´essiÚ_’um2v®ue_1 +, + +44 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_Te¡CÚd_Ex´essiÚ_gs_1 +[] = { + +45 ( +ASN_TAG_CLASS_UNIVERSAL + | (10 << 2)) + +47 +a¢_TYPE_desütÜ_t + + ga¢_DEF_Te¡CÚd_Ex´essiÚ + = { + +50 & +a¢_OP_N©iveEnum”©ed +, + +51 +a¢_DEF_Te¡CÚd_Ex´essiÚ_gs_1 +, + +52 ( +a¢_DEF_Te¡CÚd_Ex´essiÚ_gs_1 +) + +53 /( +a¢_DEF_Te¡CÚd_Ex´essiÚ_gs_1 +[0]), + +54 +a¢_DEF_Te¡CÚd_Ex´essiÚ_gs_1 +, + +55 ( +a¢_DEF_Te¡CÚd_Ex´essiÚ_gs_1 +) + +56 /( +a¢_DEF_Te¡CÚd_Ex´essiÚ_gs_1 +[0]), + +57 { 0, & +a¢_PER_ty³_Te¡CÚd_Ex´essiÚ_cÚ¡r_1 +, +N©iveEnum”©ed_cÚ¡¿št + }, + +59 & +a¢_SPC_Te¡CÚd_Ex´essiÚ_¥ecs_1 + + + @TestCond-Type.c + +8  + ~"Te¡CÚd-Ty³.h +" + +34  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_gBR_cÚ¡r_2 + + gCC_NOTUSED + = { + +35 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 0, 0, 0, 0 } , + +36 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +39  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_aMBR_cÚ¡r_5 + + gCC_NOTUSED + = { + +40 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 0, 0, 0, 0 } , + +41 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +44  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_isSt_cÚ¡r_8 + + gCC_NOTUSED + = { + +45 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 0, 0, 0, 0 } , + +46 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +49  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_isC©M_cÚ¡r_11 + + gCC_NOTUSED + = { + +50 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 0, 0, 0, 0 } , + +51 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +54  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_rSRP_cÚ¡r_14 + + gCC_NOTUSED + = { + +55 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 0, 0, 0, 0 } , + +56 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +59  +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_rSRQ_cÚ¡r_17 + + gCC_NOTUSED + = { + +60 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 0, 0, 0, 0 } , + +61 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +64 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_Te¡CÚd_Ty³_cÚ¡r_1 + + gCC_NOTUSED + = { + +65 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 3, 3, 0, 5 } , + +66 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +69 cÚ¡ +a¢_INTEGER_’um_m­_t + + ga¢_MAP_gBR_v®ue2’um_2 +[] = { + +73 cÚ¡  + ga¢_MAP_gBR_’um2v®ue_2 +[] = { + +77 cÚ¡ +a¢_INTEGER_¥ecifics_t + + ga¢_SPC_gBR_¥ecs_2 + = { + +78 +a¢_MAP_gBR_v®ue2’um_2 +, + +79 +a¢_MAP_gBR_’um2v®ue_2 +, + +86 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_gBR_gs_2 +[] = { + +87 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +88 ( +ASN_TAG_CLASS_UNIVERSAL + | (10 << 2)) + +91 +a¢_TYPE_desütÜ_t + + ga¢_DEF_gBR_2 + = { + +94 & +a¢_OP_N©iveEnum”©ed +, + +95 +a¢_DEF_gBR_gs_2 +, + +96 ( +a¢_DEF_gBR_gs_2 +) + +97 /( +a¢_DEF_gBR_gs_2 +[0]) - 1, + +98 +a¢_DEF_gBR_gs_2 +, + +99 ( +a¢_DEF_gBR_gs_2 +) + +100 /( +a¢_DEF_gBR_gs_2 +[0]), + +101 { 0, & +a¢_PER_ty³_gBR_cÚ¡r_2 +, +N©iveEnum”©ed_cÚ¡¿št + }, + +103 & +a¢_SPC_gBR_¥ecs_2 + + +106 cÚ¡ +a¢_INTEGER_’um_m­_t + + ga¢_MAP_aMBR_v®ue2’um_5 +[] = { + +110 cÚ¡  + ga¢_MAP_aMBR_’um2v®ue_5 +[] = { + +114 cÚ¡ +a¢_INTEGER_¥ecifics_t + + ga¢_SPC_aMBR_¥ecs_5 + = { + +115 +a¢_MAP_aMBR_v®ue2’um_5 +, + +116 +a¢_MAP_aMBR_’um2v®ue_5 +, + +123 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_aMBR_gs_5 +[] = { + +124 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +125 ( +ASN_TAG_CLASS_UNIVERSAL + | (10 << 2)) + +128 +a¢_TYPE_desütÜ_t + + ga¢_DEF_aMBR_5 + = { + +131 & +a¢_OP_N©iveEnum”©ed +, + +132 +a¢_DEF_aMBR_gs_5 +, + +133 ( +a¢_DEF_aMBR_gs_5 +) + +134 /( +a¢_DEF_aMBR_gs_5 +[0]) - 1, + +135 +a¢_DEF_aMBR_gs_5 +, + +136 ( +a¢_DEF_aMBR_gs_5 +) + +137 /( +a¢_DEF_aMBR_gs_5 +[0]), + +138 { 0, & +a¢_PER_ty³_aMBR_cÚ¡r_5 +, +N©iveEnum”©ed_cÚ¡¿št + }, + +140 & +a¢_SPC_aMBR_¥ecs_5 + + +143 cÚ¡ +a¢_INTEGER_’um_m­_t + + ga¢_MAP_isSt_v®ue2’um_8 +[] = { + +147 cÚ¡  + ga¢_MAP_isSt_’um2v®ue_8 +[] = { + +151 cÚ¡ +a¢_INTEGER_¥ecifics_t + + ga¢_SPC_isSt_¥ecs_8 + = { + +152 +a¢_MAP_isSt_v®ue2’um_8 +, + +153 +a¢_MAP_isSt_’um2v®ue_8 +, + +160 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_isSt_gs_8 +[] = { + +161 ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), + +162 ( +ASN_TAG_CLASS_UNIVERSAL + | (10 << 2)) + +165 +a¢_TYPE_desütÜ_t + + ga¢_DEF_isSt_8 + = { + +168 & +a¢_OP_N©iveEnum”©ed +, + +169 +a¢_DEF_isSt_gs_8 +, + +170 ( +a¢_DEF_isSt_gs_8 +) + +171 /( +a¢_DEF_isSt_gs_8 +[0]) - 1, + +172 +a¢_DEF_isSt_gs_8 +, + +173 ( +a¢_DEF_isSt_gs_8 +) + +174 /( +a¢_DEF_isSt_gs_8 +[0]), + +175 { 0, & +a¢_PER_ty³_isSt_cÚ¡r_8 +, +N©iveEnum”©ed_cÚ¡¿št + }, + +177 & +a¢_SPC_isSt_¥ecs_8 + + +180 cÚ¡ +a¢_INTEGER_’um_m­_t + + ga¢_MAP_isC©M_v®ue2’um_11 +[] = { + +184 cÚ¡  + ga¢_MAP_isC©M_’um2v®ue_11 +[] = { + +188 cÚ¡ +a¢_INTEGER_¥ecifics_t + + ga¢_SPC_isC©M_¥ecs_11 + = { + +189 +a¢_MAP_isC©M_v®ue2’um_11 +, + +190 +a¢_MAP_isC©M_’um2v®ue_11 +, + +197 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_isC©M_gs_11 +[] = { + +198 ( +ASN_TAG_CLASS_CONTEXT + | (3 << 2)), + +199 ( +ASN_TAG_CLASS_UNIVERSAL + | (10 << 2)) + +202 +a¢_TYPE_desütÜ_t + + ga¢_DEF_isC©M_11 + = { + +205 & +a¢_OP_N©iveEnum”©ed +, + +206 +a¢_DEF_isC©M_gs_11 +, + +207 ( +a¢_DEF_isC©M_gs_11 +) + +208 /( +a¢_DEF_isC©M_gs_11 +[0]) - 1, + +209 +a¢_DEF_isC©M_gs_11 +, + +210 ( +a¢_DEF_isC©M_gs_11 +) + +211 /( +a¢_DEF_isC©M_gs_11 +[0]), + +212 { 0, & +a¢_PER_ty³_isC©M_cÚ¡r_11 +, +N©iveEnum”©ed_cÚ¡¿št + }, + +214 & +a¢_SPC_isC©M_¥ecs_11 + + +217 cÚ¡ +a¢_INTEGER_’um_m­_t + + ga¢_MAP_rSRP_v®ue2’um_14 +[] = { + +221 cÚ¡  + ga¢_MAP_rSRP_’um2v®ue_14 +[] = { + +225 cÚ¡ +a¢_INTEGER_¥ecifics_t + + ga¢_SPC_rSRP_¥ecs_14 + = { + +226 +a¢_MAP_rSRP_v®ue2’um_14 +, + +227 +a¢_MAP_rSRP_’um2v®ue_14 +, + +234 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_rSRP_gs_14 +[] = { + +235 ( +ASN_TAG_CLASS_CONTEXT + | (4 << 2)), + +236 ( +ASN_TAG_CLASS_UNIVERSAL + | (10 << 2)) + +239 +a¢_TYPE_desütÜ_t + + ga¢_DEF_rSRP_14 + = { + +242 & +a¢_OP_N©iveEnum”©ed +, + +243 +a¢_DEF_rSRP_gs_14 +, + +244 ( +a¢_DEF_rSRP_gs_14 +) + +245 /( +a¢_DEF_rSRP_gs_14 +[0]) - 1, + +246 +a¢_DEF_rSRP_gs_14 +, + +247 ( +a¢_DEF_rSRP_gs_14 +) + +248 /( +a¢_DEF_rSRP_gs_14 +[0]), + +249 { 0, & +a¢_PER_ty³_rSRP_cÚ¡r_14 +, +N©iveEnum”©ed_cÚ¡¿št + }, + +251 & +a¢_SPC_rSRP_¥ecs_14 + + +254 cÚ¡ +a¢_INTEGER_’um_m­_t + + ga¢_MAP_rSRQ_v®ue2’um_17 +[] = { + +258 cÚ¡  + ga¢_MAP_rSRQ_’um2v®ue_17 +[] = { + +262 cÚ¡ +a¢_INTEGER_¥ecifics_t + + ga¢_SPC_rSRQ_¥ecs_17 + = { + +263 +a¢_MAP_rSRQ_v®ue2’um_17 +, + +264 +a¢_MAP_rSRQ_’um2v®ue_17 +, + +271 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_rSRQ_gs_17 +[] = { + +272 ( +ASN_TAG_CLASS_CONTEXT + | (5 << 2)), + +273 ( +ASN_TAG_CLASS_UNIVERSAL + | (10 << 2)) + +276 +a¢_TYPE_desütÜ_t + + ga¢_DEF_rSRQ_17 + = { + +279 & +a¢_OP_N©iveEnum”©ed +, + +280 +a¢_DEF_rSRQ_gs_17 +, + +281 ( +a¢_DEF_rSRQ_gs_17 +) + +282 /( +a¢_DEF_rSRQ_gs_17 +[0]) - 1, + +283 +a¢_DEF_rSRQ_gs_17 +, + +284 ( +a¢_DEF_rSRQ_gs_17 +) + +285 /( +a¢_DEF_rSRQ_gs_17 +[0]), + +286 { 0, & +a¢_PER_ty³_rSRQ_cÚ¡r_17 +, +N©iveEnum”©ed_cÚ¡¿št + }, + +288 & +a¢_SPC_rSRQ_¥ecs_17 + + +291 +a¢_TYPE_memb”_t + + ga¢_MBR_Te¡CÚd_Ty³_1 +[] = { + +292 { +ATF_NOFLAGS +, 0, +off£tof +( +Te¡CÚd_Ty³ +, +choiû +. +gBR +), + +293 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +295 & +a¢_DEF_gBR_2 +, + +301 { +ATF_NOFLAGS +, 0, +off£tof +( +Te¡CÚd_Ty³ +, +choiû +. +aMBR +), + +302 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +304 & +a¢_DEF_aMBR_5 +, + +310 { +ATF_NOFLAGS +, 0, +off£tof +( +Te¡CÚd_Ty³ +, +choiû +. +isSt +), + +311 ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), + +313 & +a¢_DEF_isSt_8 +, + +319 { +ATF_NOFLAGS +, 0, +off£tof +( +Te¡CÚd_Ty³ +, +choiû +. +isC©M +), + +320 ( +ASN_TAG_CLASS_CONTEXT + | (3 << 2)), + +322 & +a¢_DEF_isC©M_11 +, + +328 { +ATF_NOFLAGS +, 0, +off£tof +( +Te¡CÚd_Ty³ +, +choiû +. +rSRP +), + +329 ( +ASN_TAG_CLASS_CONTEXT + | (4 << 2)), + +331 & +a¢_DEF_rSRP_14 +, + +337 { +ATF_NOFLAGS +, 0, +off£tof +( +Te¡CÚd_Ty³ +, +choiû +. +rSRQ +), + +338 ( +ASN_TAG_CLASS_CONTEXT + | (5 << 2)), + +340 & +a¢_DEF_rSRQ_17 +, + +347 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_Te¡CÚd_Ty³_g2–_1 +[] = { + +348 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +349 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 }, + +350 { ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), 2, 0, 0 }, + +351 { ( +ASN_TAG_CLASS_CONTEXT + | (3 << 2)), 3, 0, 0 }, + +352 { ( +ASN_TAG_CLASS_CONTEXT + | (4 << 2)), 4, 0, 0 }, + +353 { ( +ASN_TAG_CLASS_CONTEXT + | (5 << 2)), 5, 0, 0 } + +355 +a¢_CHOICE_¥ecifics_t + + ga¢_SPC_Te¡CÚd_Ty³_¥ecs_1 + = { + +356 ( +Te¡CÚd_Ty³ +), + +357 +off£tof +( +Te¡CÚd_Ty³ +, +_a¢_ùx +), + +358 +off£tof +( +Te¡CÚd_Ty³ +, +´e£Á +), + +359 ((( +Te¡CÚd_Ty³ + *)0)-> +´e£Á +), + +360 +a¢_MAP_Te¡CÚd_Ty³_g2–_1 +, + +365 +a¢_TYPE_desütÜ_t + + ga¢_DEF_Te¡CÚd_Ty³ + = { + +368 & +a¢_OP_CHOICE +, + +373 { 0, & +a¢_PER_ty³_Te¡CÚd_Ty³_cÚ¡r_1 +, +CHOICE_cÚ¡¿št + }, + +374 +a¢_MBR_Te¡CÚd_Ty³_1 +, + +376 & +a¢_SPC_Te¡CÚd_Ty³_¥ecs_1 + + + @TestCond-Value.c + +8  + ~"Te¡CÚd-V®ue.h +" + +10 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_Te¡CÚd_V®ue_cÚ¡r_1 + + gCC_NOTUSED + = { + +11 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 3, 3, 0, 5 } , + +12 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +15 +a¢_TYPE_memb”_t + + ga¢_MBR_Te¡CÚd_V®ue_1 +[] = { + +16 { +ATF_NOFLAGS +, 0, +off£tof +( +Te¡CÚd_V®ue +, +choiû +. +v®ueIÁ +), + +17 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +19 & +a¢_DEF_N©iveIÁeg” +, + +25 { +ATF_NOFLAGS +, 0, +off£tof +( +Te¡CÚd_V®ue +, +choiû +. +v®ueEnum +), + +26 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +28 & +a¢_DEF_N©iveIÁeg” +, + +34 { +ATF_NOFLAGS +, 0, +off£tof +( +Te¡CÚd_V®ue +, +choiû +. +v®ueBoÞ +), + +35 ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), + +37 & +a¢_DEF_BOOLEAN +, + +43 { +ATF_NOFLAGS +, 0, +off£tof +( +Te¡CÚd_V®ue +, +choiû +. +v®ueB™S +), + +44 ( +ASN_TAG_CLASS_CONTEXT + | (3 << 2)), + +46 & +a¢_DEF_BIT_STRING +, + +52 { +ATF_NOFLAGS +, 0, +off£tof +( +Te¡CÚd_V®ue +, +choiû +. +v®ueOùS +), + +53 ( +ASN_TAG_CLASS_CONTEXT + | (4 << 2)), + +55 & +a¢_DEF_OCTET_STRING +, + +61 { +ATF_NOFLAGS +, 0, +off£tof +( +Te¡CÚd_V®ue +, +choiû +. +v®ueP¹S +), + +62 ( +ASN_TAG_CLASS_CONTEXT + | (5 << 2)), + +64 & +a¢_DEF_PršbËSŒšg +, + +71 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_Te¡CÚd_V®ue_g2–_1 +[] = { + +72 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +73 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 }, + +74 { ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), 2, 0, 0 }, + +75 { ( +ASN_TAG_CLASS_CONTEXT + | (3 << 2)), 3, 0, 0 }, + +76 { ( +ASN_TAG_CLASS_CONTEXT + | (4 << 2)), 4, 0, 0 }, + +77 { ( +ASN_TAG_CLASS_CONTEXT + | (5 << 2)), 5, 0, 0 } + +79 +a¢_CHOICE_¥ecifics_t + + ga¢_SPC_Te¡CÚd_V®ue_¥ecs_1 + = { + +80 ( +Te¡CÚd_V®ue +), + +81 +off£tof +( +Te¡CÚd_V®ue +, +_a¢_ùx +), + +82 +off£tof +( +Te¡CÚd_V®ue +, +´e£Á +), + +83 ((( +Te¡CÚd_V®ue + *)0)-> +´e£Á +), + +84 +a¢_MAP_Te¡CÚd_V®ue_g2–_1 +, + +89 +a¢_TYPE_desütÜ_t + + ga¢_DEF_Te¡CÚd_V®ue + = { + +92 & +a¢_OP_CHOICE +, + +97 { 0, & +a¢_PER_ty³_Te¡CÚd_V®ue_cÚ¡r_1 +, +CHOICE_cÚ¡¿št + }, + +98 +a¢_MBR_Te¡CÚd_V®ue_1 +, + +100 & +a¢_SPC_Te¡CÚd_V®ue_¥ecs_1 + + + @TestCondInfo.c + +8  + ~"Te¡CÚdInfo.h +" + +10 +a¢_TYPE_memb”_t + + ga¢_MBR_Te¡CÚdInfo_1 +[] = { + +11 { +ATF_NOFLAGS +, 0, +off£tof +( +Te¡CÚdInfo +, +‹¡Ty³ +), + +12 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +14 & +a¢_DEF_Te¡CÚd_Ty³ +, + +20 { +ATF_NOFLAGS +, 0, +off£tof +( +Te¡CÚdInfo +, +‹¡Ex´ +), + +21 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +23 & +a¢_DEF_Te¡CÚd_Ex´essiÚ +, + +29 { +ATF_NOFLAGS +, 0, +off£tof +( +Te¡CÚdInfo +, +‹¡V®ue +), + +30 ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), + +32 & +a¢_DEF_Te¡CÚd_V®ue +, + +39 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_Te¡CÚdInfo_gs_1 +[] = { + +40 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +42 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_Te¡CÚdInfo_g2–_1 +[] = { + +43 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +44 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 }, + +45 { ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), 2, 0, 0 } + +47 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_Te¡CÚdInfo_¥ecs_1 + = { + +48 ( +Te¡CÚdInfo +), + +49 +off£tof +( +Te¡CÚdInfo +, +_a¢_ùx +), + +50 +a¢_MAP_Te¡CÚdInfo_g2–_1 +, + +55 +a¢_TYPE_desütÜ_t + + ga¢_DEF_Te¡CÚdInfo + = { + +58 & +a¢_OP_SEQUENCE +, + +59 +a¢_DEF_Te¡CÚdInfo_gs_1 +, + +60 ( +a¢_DEF_Te¡CÚdInfo_gs_1 +) + +61 /( +a¢_DEF_Te¡CÚdInfo_gs_1 +[0]), + +62 +a¢_DEF_Te¡CÚdInfo_gs_1 +, + +63 ( +a¢_DEF_Te¡CÚdInfo_gs_1 +) + +64 /( +a¢_DEF_Te¡CÚdInfo_gs_1 +[0]), + +65 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +66 +a¢_MBR_Te¡CÚdInfo_1 +, + +68 & +a¢_SPC_Te¡CÚdInfo_¥ecs_1 + + + @TimeStamp.c + +8  + ~"TimeSmp.h +" + +11 + $TimeSmp_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +12 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +13 cÚ¡ +OCTET_STRING_t + * +¡ + = (cÚ¡ OCTET_STRING_ˆ*) +¥Œ +; + +14 +size_t + +size +; + +16 if(! +¥Œ +) { + +17 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +19 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +23 +size + = +¡ +->size; + +25 if(( +size + == 4)) { + +29 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +31 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +34 + } +} + +40 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_TimeSmp_cÚ¡r_1 + + gCC_NOTUSED + = { + +41 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +42 { +APC_CONSTRAINED +, 0, 0, 4, 4 } , + +45 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_TimeSmp_gs_1 +[] = { + +46 ( +ASN_TAG_CLASS_UNIVERSAL + | (4 << 2)) + +48 +a¢_TYPE_desütÜ_t + + ga¢_DEF_TimeSmp + = { + +51 & +a¢_OP_OCTET_STRING +, + +52 +a¢_DEF_TimeSmp_gs_1 +, + +53 ( +a¢_DEF_TimeSmp_gs_1 +) + +54 /( +a¢_DEF_TimeSmp_gs_1 +[0]), + +55 +a¢_DEF_TimeSmp_gs_1 +, + +56 ( +a¢_DEF_TimeSmp_gs_1 +) + +57 /( +a¢_DEF_TimeSmp_gs_1 +[0]), + +58 { 0, & +a¢_PER_ty³_TimeSmp_cÚ¡r_1 +, +TimeSmp_cÚ¡¿št + }, + +60 & +a¢_SPC_OCTET_STRING_¥ecs + + + @UEID-EN-GNB.c + +8  + ~"UEID-EN-GNB.h +" + +10  + ~"UEID-GNB-CU-CP-E1AP-ID-Li¡.h +" + +11 +a¢_TYPE_memb”_t + + ga¢_MBR_UEID_EN_GNB_1 +[] = { + +12 { +ATF_NOFLAGS +, 0, +off£tof +( +UEID_EN_GNB +, +m_eNB_UE_X2AP_ID +), + +13 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +15 & +a¢_DEF_ENB_UE_X2AP_ID +, + +21 { +ATF_POINTER +, 1, +off£tof +( +UEID_EN_GNB +, +m_eNB_UE_X2AP_ID_Ex‹nsiÚ +), + +22 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +24 & +a¢_DEF_ENB_UE_X2AP_ID_Ex‹nsiÚ +, + +30 { +ATF_NOFLAGS +, 0, +off£tof +( +UEID_EN_GNB +, +glob®ENB_ID +), + +31 ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), + +33 & +a¢_DEF_Glob®ENB_ID +, + +39 { +ATF_POINTER +, 3, +off£tof +( +UEID_EN_GNB +, +gNB_CU_UE_F1AP_ID +), + +40 ( +ASN_TAG_CLASS_CONTEXT + | (3 << 2)), + +42 & +a¢_DEF_GNB_CU_UE_F1AP_ID +, + +48 { +ATF_POINTER +, 2, +off£tof +( +UEID_EN_GNB +, +gNB_CU_CP_UE_E1AP_ID_Li¡ +), + +49 ( +ASN_TAG_CLASS_CONTEXT + | (4 << 2)), + +51 & +a¢_DEF_UEID_GNB_CU_CP_E1AP_ID_Li¡ +, + +57 { +ATF_POINTER +, 1, +off£tof +( +UEID_EN_GNB +, +¿n_UEID +), + +58 ( +ASN_TAG_CLASS_CONTEXT + | (5 << 2)), + +60 & +a¢_DEF_RANUEID +, + +67 cÚ¡  + ga¢_MAP_UEID_EN_GNB_oms_1 +[] = { 1, 3, 4, 5 }; + +68 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_UEID_EN_GNB_gs_1 +[] = { + +69 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +71 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_UEID_EN_GNB_g2–_1 +[] = { + +72 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +73 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 }, + +74 { ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), 2, 0, 0 }, + +75 { ( +ASN_TAG_CLASS_CONTEXT + | (3 << 2)), 3, 0, 0 }, + +76 { ( +ASN_TAG_CLASS_CONTEXT + | (4 << 2)), 4, 0, 0 }, + +77 { ( +ASN_TAG_CLASS_CONTEXT + | (5 << 2)), 5, 0, 0 } + +79 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_UEID_EN_GNB_¥ecs_1 + = { + +80 ( +UEID_EN_GNB +), + +81 +off£tof +( +UEID_EN_GNB +, +_a¢_ùx +), + +82 +a¢_MAP_UEID_EN_GNB_g2–_1 +, + +84 +a¢_MAP_UEID_EN_GNB_oms_1 +, + +88 +a¢_TYPE_desütÜ_t + + ga¢_DEF_UEID_EN_GNB + = { + +91 & +a¢_OP_SEQUENCE +, + +92 +a¢_DEF_UEID_EN_GNB_gs_1 +, + +93 ( +a¢_DEF_UEID_EN_GNB_gs_1 +) + +94 /( +a¢_DEF_UEID_EN_GNB_gs_1 +[0]), + +95 +a¢_DEF_UEID_EN_GNB_gs_1 +, + +96 ( +a¢_DEF_UEID_EN_GNB_gs_1 +) + +97 /( +a¢_DEF_UEID_EN_GNB_gs_1 +[0]), + +98 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +99 +a¢_MBR_UEID_EN_GNB_1 +, + +101 & +a¢_SPC_UEID_EN_GNB_¥ecs_1 + + + @UEID-ENB.c + +8  + ~"UEID-ENB.h +" + +10  + ~"Glob®ENB-ID.h +" + +11 +a¢_TYPE_memb”_t + + ga¢_MBR_UEID_ENB_1 +[] = { + +12 { +ATF_NOFLAGS +, 0, +off£tof +( +UEID_ENB +, +mME_UE_S1AP_ID +), + +13 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +15 & +a¢_DEF_MME_UE_S1AP_ID +, + +21 { +ATF_NOFLAGS +, 0, +off£tof +( +UEID_ENB +, +gUMMEI +), + +22 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +24 & +a¢_DEF_GUMMEI +, + +30 { +ATF_POINTER +, 3, +off£tof +( +UEID_ENB +, +m_eNB_UE_X2AP_ID +), + +31 ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), + +33 & +a¢_DEF_ENB_UE_X2AP_ID +, + +39 { +ATF_POINTER +, 2, +off£tof +( +UEID_ENB +, +m_eNB_UE_X2AP_ID_Ex‹nsiÚ +), + +40 ( +ASN_TAG_CLASS_CONTEXT + | (3 << 2)), + +42 & +a¢_DEF_ENB_UE_X2AP_ID_Ex‹nsiÚ +, + +48 { +ATF_POINTER +, 1, +off£tof +( +UEID_ENB +, +glob®ENB_ID +), + +49 ( +ASN_TAG_CLASS_CONTEXT + | (4 << 2)), + +51 & +a¢_DEF_Glob®ENB_ID +, + +58 cÚ¡  + ga¢_MAP_UEID_ENB_oms_1 +[] = { 2, 3, 4 }; + +59 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_UEID_ENB_gs_1 +[] = { + +60 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +62 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_UEID_ENB_g2–_1 +[] = { + +63 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +64 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 }, + +65 { ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), 2, 0, 0 }, + +66 { ( +ASN_TAG_CLASS_CONTEXT + | (3 << 2)), 3, 0, 0 }, + +67 { ( +ASN_TAG_CLASS_CONTEXT + | (4 << 2)), 4, 0, 0 } + +69 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_UEID_ENB_¥ecs_1 + = { + +70 ( +UEID_ENB +), + +71 +off£tof +( +UEID_ENB +, +_a¢_ùx +), + +72 +a¢_MAP_UEID_ENB_g2–_1 +, + +74 +a¢_MAP_UEID_ENB_oms_1 +, + +78 +a¢_TYPE_desütÜ_t + + ga¢_DEF_UEID_ENB + = { + +81 & +a¢_OP_SEQUENCE +, + +82 +a¢_DEF_UEID_ENB_gs_1 +, + +83 ( +a¢_DEF_UEID_ENB_gs_1 +) + +84 /( +a¢_DEF_UEID_ENB_gs_1 +[0]), + +85 +a¢_DEF_UEID_ENB_gs_1 +, + +86 ( +a¢_DEF_UEID_ENB_gs_1 +) + +87 /( +a¢_DEF_UEID_ENB_gs_1 +[0]), + +88 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +89 +a¢_MBR_UEID_ENB_1 +, + +91 & +a¢_SPC_UEID_ENB_¥ecs_1 + + + @UEID-GNB-CU-CP-E1AP-ID-Item.c + +8  + ~"UEID-GNB-CU-CP-E1AP-ID-I‹m.h +" + +10 +a¢_TYPE_memb”_t + + ga¢_MBR_UEID_GNB_CU_CP_E1AP_ID_I‹m_1 +[] = { + +11 { +ATF_NOFLAGS +, 0, +off£tof +( +UEID_GNB_CU_CP_E1AP_ID_I‹m +, +gNB_CU_CP_UE_E1AP_ID +), + +12 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +14 & +a¢_DEF_GNB_CU_CP_UE_E1AP_ID +, + +21 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_UEID_GNB_CU_CP_E1AP_ID_I‹m_gs_1 +[] = { + +22 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +24 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_UEID_GNB_CU_CP_E1AP_ID_I‹m_g2–_1 +[] = { + +25 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 } + +27 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_UEID_GNB_CU_CP_E1AP_ID_I‹m_¥ecs_1 + = { + +28 ( +UEID_GNB_CU_CP_E1AP_ID_I‹m +), + +29 +off£tof +( +UEID_GNB_CU_CP_E1AP_ID_I‹m +, +_a¢_ùx +), + +30 +a¢_MAP_UEID_GNB_CU_CP_E1AP_ID_I‹m_g2–_1 +, + +35 +a¢_TYPE_desütÜ_t + + ga¢_DEF_UEID_GNB_CU_CP_E1AP_ID_I‹m + = { + +38 & +a¢_OP_SEQUENCE +, + +39 +a¢_DEF_UEID_GNB_CU_CP_E1AP_ID_I‹m_gs_1 +, + +40 ( +a¢_DEF_UEID_GNB_CU_CP_E1AP_ID_I‹m_gs_1 +) + +41 /( +a¢_DEF_UEID_GNB_CU_CP_E1AP_ID_I‹m_gs_1 +[0]), + +42 +a¢_DEF_UEID_GNB_CU_CP_E1AP_ID_I‹m_gs_1 +, + +43 ( +a¢_DEF_UEID_GNB_CU_CP_E1AP_ID_I‹m_gs_1 +) + +44 /( +a¢_DEF_UEID_GNB_CU_CP_E1AP_ID_I‹m_gs_1 +[0]), + +45 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +46 +a¢_MBR_UEID_GNB_CU_CP_E1AP_ID_I‹m_1 +, + +48 & +a¢_SPC_UEID_GNB_CU_CP_E1AP_ID_I‹m_¥ecs_1 + + + @UEID-GNB-CU-CP-E1AP-ID-List.c + +8  + ~"UEID-GNB-CU-CP-E1AP-ID-Li¡.h +" + +10  + ~"UEID-GNB-CU-CP-E1AP-ID-I‹m.h +" + +11 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_UEID_GNB_CU_CP_E1AP_ID_Li¡_cÚ¡r_1 + + gCC_NOTUSED + = { + +12 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +13 { +APC_CONSTRAINED +, 16, 16, 1, 65535 } , + +16 +a¢_TYPE_memb”_t + + ga¢_MBR_UEID_GNB_CU_CP_E1AP_ID_Li¡_1 +[] = { + +17 { +ATF_POINTER +, 0, 0, + +18 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)), + +20 & +a¢_DEF_UEID_GNB_CU_CP_E1AP_ID_I‹m +, + +27 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_UEID_GNB_CU_CP_E1AP_ID_Li¡_gs_1 +[] = { + +28 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +30 +a¢_SET_OF_¥ecifics_t + + ga¢_SPC_UEID_GNB_CU_CP_E1AP_ID_Li¡_¥ecs_1 + = { + +31 ( +UEID_GNB_CU_CP_E1AP_ID_Li¡ +), + +32 +off£tof +( +UEID_GNB_CU_CP_E1AP_ID_Li¡ +, +_a¢_ùx +), + +35 +a¢_TYPE_desütÜ_t + + ga¢_DEF_UEID_GNB_CU_CP_E1AP_ID_Li¡ + = { + +38 & +a¢_OP_SEQUENCE_OF +, + +39 +a¢_DEF_UEID_GNB_CU_CP_E1AP_ID_Li¡_gs_1 +, + +40 ( +a¢_DEF_UEID_GNB_CU_CP_E1AP_ID_Li¡_gs_1 +) + +41 /( +a¢_DEF_UEID_GNB_CU_CP_E1AP_ID_Li¡_gs_1 +[0]), + +42 +a¢_DEF_UEID_GNB_CU_CP_E1AP_ID_Li¡_gs_1 +, + +43 ( +a¢_DEF_UEID_GNB_CU_CP_E1AP_ID_Li¡_gs_1 +) + +44 /( +a¢_DEF_UEID_GNB_CU_CP_E1AP_ID_Li¡_gs_1 +[0]), + +45 { 0, & +a¢_PER_ty³_UEID_GNB_CU_CP_E1AP_ID_Li¡_cÚ¡r_1 +, +SEQUENCE_OF_cÚ¡¿št + }, + +46 +a¢_MBR_UEID_GNB_CU_CP_E1AP_ID_Li¡_1 +, + +48 & +a¢_SPC_UEID_GNB_CU_CP_E1AP_ID_Li¡_¥ecs_1 + + + @UEID-GNB-CU-CP-F1AP-ID-Item.c + +8  + ~"UEID-GNB-CU-CP-F1AP-ID-I‹m.h +" + +10 +a¢_TYPE_memb”_t + + ga¢_MBR_UEID_GNB_CU_CP_F1AP_ID_I‹m_1 +[] = { + +11 { +ATF_NOFLAGS +, 0, +off£tof +( +UEID_GNB_CU_CP_F1AP_ID_I‹m +, +gNB_CU_UE_F1AP_ID +), + +12 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +14 & +a¢_DEF_GNB_CU_UE_F1AP_ID +, + +21 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_UEID_GNB_CU_CP_F1AP_ID_I‹m_gs_1 +[] = { + +22 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +24 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_UEID_GNB_CU_CP_F1AP_ID_I‹m_g2–_1 +[] = { + +25 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 } + +27 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_UEID_GNB_CU_CP_F1AP_ID_I‹m_¥ecs_1 + = { + +28 ( +UEID_GNB_CU_CP_F1AP_ID_I‹m +), + +29 +off£tof +( +UEID_GNB_CU_CP_F1AP_ID_I‹m +, +_a¢_ùx +), + +30 +a¢_MAP_UEID_GNB_CU_CP_F1AP_ID_I‹m_g2–_1 +, + +35 +a¢_TYPE_desütÜ_t + + ga¢_DEF_UEID_GNB_CU_CP_F1AP_ID_I‹m + = { + +38 & +a¢_OP_SEQUENCE +, + +39 +a¢_DEF_UEID_GNB_CU_CP_F1AP_ID_I‹m_gs_1 +, + +40 ( +a¢_DEF_UEID_GNB_CU_CP_F1AP_ID_I‹m_gs_1 +) + +41 /( +a¢_DEF_UEID_GNB_CU_CP_F1AP_ID_I‹m_gs_1 +[0]), + +42 +a¢_DEF_UEID_GNB_CU_CP_F1AP_ID_I‹m_gs_1 +, + +43 ( +a¢_DEF_UEID_GNB_CU_CP_F1AP_ID_I‹m_gs_1 +) + +44 /( +a¢_DEF_UEID_GNB_CU_CP_F1AP_ID_I‹m_gs_1 +[0]), + +45 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +46 +a¢_MBR_UEID_GNB_CU_CP_F1AP_ID_I‹m_1 +, + +48 & +a¢_SPC_UEID_GNB_CU_CP_F1AP_ID_I‹m_¥ecs_1 + + + @UEID-GNB-CU-F1AP-ID-List.c + +8  + ~"UEID-GNB-CU-F1AP-ID-Li¡.h +" + +10  + ~"UEID-GNB-CU-CP-F1AP-ID-I‹m.h +" + +11 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_UEID_GNB_CU_F1AP_ID_Li¡_cÚ¡r_1 + + gCC_NOTUSED + = { + +12 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +13 { +APC_CONSTRAINED +, 2, 2, 1, 4 } , + +16 +a¢_TYPE_memb”_t + + ga¢_MBR_UEID_GNB_CU_F1AP_ID_Li¡_1 +[] = { + +17 { +ATF_POINTER +, 0, 0, + +18 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)), + +20 & +a¢_DEF_UEID_GNB_CU_CP_F1AP_ID_I‹m +, + +27 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_UEID_GNB_CU_F1AP_ID_Li¡_gs_1 +[] = { + +28 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +30 +a¢_SET_OF_¥ecifics_t + + ga¢_SPC_UEID_GNB_CU_F1AP_ID_Li¡_¥ecs_1 + = { + +31 ( +UEID_GNB_CU_F1AP_ID_Li¡ +), + +32 +off£tof +( +UEID_GNB_CU_F1AP_ID_Li¡ +, +_a¢_ùx +), + +35 +a¢_TYPE_desütÜ_t + + ga¢_DEF_UEID_GNB_CU_F1AP_ID_Li¡ + = { + +38 & +a¢_OP_SEQUENCE_OF +, + +39 +a¢_DEF_UEID_GNB_CU_F1AP_ID_Li¡_gs_1 +, + +40 ( +a¢_DEF_UEID_GNB_CU_F1AP_ID_Li¡_gs_1 +) + +41 /( +a¢_DEF_UEID_GNB_CU_F1AP_ID_Li¡_gs_1 +[0]), + +42 +a¢_DEF_UEID_GNB_CU_F1AP_ID_Li¡_gs_1 +, + +43 ( +a¢_DEF_UEID_GNB_CU_F1AP_ID_Li¡_gs_1 +) + +44 /( +a¢_DEF_UEID_GNB_CU_F1AP_ID_Li¡_gs_1 +[0]), + +45 { 0, & +a¢_PER_ty³_UEID_GNB_CU_F1AP_ID_Li¡_cÚ¡r_1 +, +SEQUENCE_OF_cÚ¡¿št + }, + +46 +a¢_MBR_UEID_GNB_CU_F1AP_ID_Li¡_1 +, + +48 & +a¢_SPC_UEID_GNB_CU_F1AP_ID_Li¡_¥ecs_1 + + + @UEID-GNB-CU-UP.c + +8  + ~"UEID-GNB-CU-UP.h +" + +10 +a¢_TYPE_memb”_t + + ga¢_MBR_UEID_GNB_CU_UP_1 +[] = { + +11 { +ATF_NOFLAGS +, 0, +off£tof +( +UEID_GNB_CU_UP +, +gNB_CU_CP_UE_E1AP_ID +), + +12 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +14 & +a¢_DEF_GNB_CU_CP_UE_E1AP_ID +, + +20 { +ATF_POINTER +, 1, +off£tof +( +UEID_GNB_CU_UP +, +¿n_UEID +), + +21 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +23 & +a¢_DEF_RANUEID +, + +30 cÚ¡  + ga¢_MAP_UEID_GNB_CU_UP_oms_1 +[] = { 1 }; + +31 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_UEID_GNB_CU_UP_gs_1 +[] = { + +32 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +34 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_UEID_GNB_CU_UP_g2–_1 +[] = { + +35 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +36 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 } + +38 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_UEID_GNB_CU_UP_¥ecs_1 + = { + +39 ( +UEID_GNB_CU_UP +), + +40 +off£tof +( +UEID_GNB_CU_UP +, +_a¢_ùx +), + +41 +a¢_MAP_UEID_GNB_CU_UP_g2–_1 +, + +43 +a¢_MAP_UEID_GNB_CU_UP_oms_1 +, + +47 +a¢_TYPE_desütÜ_t + + ga¢_DEF_UEID_GNB_CU_UP + = { + +50 & +a¢_OP_SEQUENCE +, + +51 +a¢_DEF_UEID_GNB_CU_UP_gs_1 +, + +52 ( +a¢_DEF_UEID_GNB_CU_UP_gs_1 +) + +53 /( +a¢_DEF_UEID_GNB_CU_UP_gs_1 +[0]), + +54 +a¢_DEF_UEID_GNB_CU_UP_gs_1 +, + +55 ( +a¢_DEF_UEID_GNB_CU_UP_gs_1 +) + +56 /( +a¢_DEF_UEID_GNB_CU_UP_gs_1 +[0]), + +57 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +58 +a¢_MBR_UEID_GNB_CU_UP_1 +, + +60 & +a¢_SPC_UEID_GNB_CU_UP_¥ecs_1 + + + @UEID-GNB-DU.c + +8  + ~"UEID-GNB-DU.h +" + +10 +a¢_TYPE_memb”_t + + ga¢_MBR_UEID_GNB_DU_1 +[] = { + +11 { +ATF_NOFLAGS +, 0, +off£tof +( +UEID_GNB_DU +, +gNB_CU_UE_F1AP_ID +), + +12 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +14 & +a¢_DEF_GNB_CU_UE_F1AP_ID +, + +20 { +ATF_POINTER +, 1, +off£tof +( +UEID_GNB_DU +, +¿n_UEID +), + +21 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +23 & +a¢_DEF_RANUEID +, + +30 cÚ¡  + ga¢_MAP_UEID_GNB_DU_oms_1 +[] = { 1 }; + +31 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_UEID_GNB_DU_gs_1 +[] = { + +32 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +34 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_UEID_GNB_DU_g2–_1 +[] = { + +35 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +36 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 } + +38 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_UEID_GNB_DU_¥ecs_1 + = { + +39 ( +UEID_GNB_DU +), + +40 +off£tof +( +UEID_GNB_DU +, +_a¢_ùx +), + +41 +a¢_MAP_UEID_GNB_DU_g2–_1 +, + +43 +a¢_MAP_UEID_GNB_DU_oms_1 +, + +47 +a¢_TYPE_desütÜ_t + + ga¢_DEF_UEID_GNB_DU + = { + +50 & +a¢_OP_SEQUENCE +, + +51 +a¢_DEF_UEID_GNB_DU_gs_1 +, + +52 ( +a¢_DEF_UEID_GNB_DU_gs_1 +) + +53 /( +a¢_DEF_UEID_GNB_DU_gs_1 +[0]), + +54 +a¢_DEF_UEID_GNB_DU_gs_1 +, + +55 ( +a¢_DEF_UEID_GNB_DU_gs_1 +) + +56 /( +a¢_DEF_UEID_GNB_DU_gs_1 +[0]), + +57 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +58 +a¢_MBR_UEID_GNB_DU_1 +, + +60 & +a¢_SPC_UEID_GNB_DU_¥ecs_1 + + + @UEID-GNB.c + +8  + ~"UEID-GNB.h +" + +10  + ~"UEID-GNB-CU-F1AP-ID-Li¡.h +" + +11  + ~"UEID-GNB-CU-CP-E1AP-ID-Li¡.h +" + +12  + ~"Glob®GNB-ID.h +" + +13  + ~"Glob®NGRANNodeID.h +" + +14 +a¢_TYPE_memb”_t + + ga¢_MBR_UEID_GNB_1 +[] = { + +15 { +ATF_NOFLAGS +, 0, +off£tof +( +UEID_GNB +, +amf_UE_NGAP_ID +), + +16 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +18 & +a¢_DEF_AMF_UE_NGAP_ID +, + +24 { +ATF_NOFLAGS +, 0, +off£tof +( +UEID_GNB +, +guami +), + +25 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +27 & +a¢_DEF_GUAMI +, + +33 { +ATF_POINTER +, 6, +off£tof +( +UEID_GNB +, +gNB_CU_UE_F1AP_ID_Li¡ +), + +34 ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), + +36 & +a¢_DEF_UEID_GNB_CU_F1AP_ID_Li¡ +, + +42 { +ATF_POINTER +, 5, +off£tof +( +UEID_GNB +, +gNB_CU_CP_UE_E1AP_ID_Li¡ +), + +43 ( +ASN_TAG_CLASS_CONTEXT + | (3 << 2)), + +45 & +a¢_DEF_UEID_GNB_CU_CP_E1AP_ID_Li¡ +, + +51 { +ATF_POINTER +, 4, +off£tof +( +UEID_GNB +, +¿n_UEID +), + +52 ( +ASN_TAG_CLASS_CONTEXT + | (4 << 2)), + +54 & +a¢_DEF_RANUEID +, + +60 { +ATF_POINTER +, 3, +off£tof +( +UEID_GNB +, +m_NG_RAN_UE_XnAP_ID +), + +61 ( +ASN_TAG_CLASS_CONTEXT + | (5 << 2)), + +63 & +a¢_DEF_NG_RANnodeUEXnAPID +, + +69 { +ATF_POINTER +, 2, +off£tof +( +UEID_GNB +, +glob®GNB_ID +), + +70 ( +ASN_TAG_CLASS_CONTEXT + | (6 << 2)), + +72 & +a¢_DEF_Glob®GNB_ID +, + +78 { +ATF_POINTER +, 1, +off£tof +( +UEID_GNB +, +glob®NG_RANNode_ID +), + +79 ( +ASN_TAG_CLASS_CONTEXT + | (7 << 2)), + +81 & +a¢_DEF_Glob®NGRANNodeID +, + +88 cÚ¡  + ga¢_MAP_UEID_GNB_oms_1 +[] = { 2, 3, 4, 5, 6, 7 }; + +89 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_UEID_GNB_gs_1 +[] = { + +90 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +92 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_UEID_GNB_g2–_1 +[] = { + +93 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +94 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 }, + +95 { ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), 2, 0, 0 }, + +96 { ( +ASN_TAG_CLASS_CONTEXT + | (3 << 2)), 3, 0, 0 }, + +97 { ( +ASN_TAG_CLASS_CONTEXT + | (4 << 2)), 4, 0, 0 }, + +98 { ( +ASN_TAG_CLASS_CONTEXT + | (5 << 2)), 5, 0, 0 }, + +99 { ( +ASN_TAG_CLASS_CONTEXT + | (6 << 2)), 6, 0, 0 }, + +100 { ( +ASN_TAG_CLASS_CONTEXT + | (7 << 2)), 7, 0, 0 } + +102 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_UEID_GNB_¥ecs_1 + = { + +103 ( +UEID_GNB +), + +104 +off£tof +( +UEID_GNB +, +_a¢_ùx +), + +105 +a¢_MAP_UEID_GNB_g2–_1 +, + +107 +a¢_MAP_UEID_GNB_oms_1 +, + +111 +a¢_TYPE_desütÜ_t + + ga¢_DEF_UEID_GNB + = { + +114 & +a¢_OP_SEQUENCE +, + +115 +a¢_DEF_UEID_GNB_gs_1 +, + +116 ( +a¢_DEF_UEID_GNB_gs_1 +) + +117 /( +a¢_DEF_UEID_GNB_gs_1 +[0]), + +118 +a¢_DEF_UEID_GNB_gs_1 +, + +119 ( +a¢_DEF_UEID_GNB_gs_1 +) + +120 /( +a¢_DEF_UEID_GNB_gs_1 +[0]), + +121 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +122 +a¢_MBR_UEID_GNB_1 +, + +124 & +a¢_SPC_UEID_GNB_¥ecs_1 + + + @UEID-NG-ENB-DU.c + +8  + ~"UEID-NG-ENB-DU.h +" + +10 +a¢_TYPE_memb”_t + + ga¢_MBR_UEID_NG_ENB_DU_1 +[] = { + +11 { +ATF_NOFLAGS +, 0, +off£tof +( +UEID_NG_ENB_DU +, +ng_eNB_CU_UE_W1AP_ID +), + +12 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +14 & +a¢_DEF_NGENB_CU_UE_W1AP_ID +, + +21 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_UEID_NG_ENB_DU_gs_1 +[] = { + +22 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +24 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_UEID_NG_ENB_DU_g2–_1 +[] = { + +25 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 } + +27 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_UEID_NG_ENB_DU_¥ecs_1 + = { + +28 ( +UEID_NG_ENB_DU +), + +29 +off£tof +( +UEID_NG_ENB_DU +, +_a¢_ùx +), + +30 +a¢_MAP_UEID_NG_ENB_DU_g2–_1 +, + +35 +a¢_TYPE_desütÜ_t + + ga¢_DEF_UEID_NG_ENB_DU + = { + +38 & +a¢_OP_SEQUENCE +, + +39 +a¢_DEF_UEID_NG_ENB_DU_gs_1 +, + +40 ( +a¢_DEF_UEID_NG_ENB_DU_gs_1 +) + +41 /( +a¢_DEF_UEID_NG_ENB_DU_gs_1 +[0]), + +42 +a¢_DEF_UEID_NG_ENB_DU_gs_1 +, + +43 ( +a¢_DEF_UEID_NG_ENB_DU_gs_1 +) + +44 /( +a¢_DEF_UEID_NG_ENB_DU_gs_1 +[0]), + +45 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +46 +a¢_MBR_UEID_NG_ENB_DU_1 +, + +48 & +a¢_SPC_UEID_NG_ENB_DU_¥ecs_1 + + + @UEID-NG-ENB.c + +8  + ~"UEID-NG-ENB.h +" + +10  + ~"Glob®NgENB-ID.h +" + +11  + ~"Glob®NGRANNodeID.h +" + +12 +a¢_TYPE_memb”_t + + ga¢_MBR_UEID_NG_ENB_1 +[] = { + +13 { +ATF_NOFLAGS +, 0, +off£tof +( +UEID_NG_ENB +, +amf_UE_NGAP_ID +), + +14 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +16 & +a¢_DEF_AMF_UE_NGAP_ID +, + +22 { +ATF_NOFLAGS +, 0, +off£tof +( +UEID_NG_ENB +, +guami +), + +23 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +25 & +a¢_DEF_GUAMI +, + +31 { +ATF_POINTER +, 4, +off£tof +( +UEID_NG_ENB +, +ng_eNB_CU_UE_W1AP_ID +), + +32 ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), + +34 & +a¢_DEF_NGENB_CU_UE_W1AP_ID +, + +40 { +ATF_POINTER +, 3, +off£tof +( +UEID_NG_ENB +, +m_NG_RAN_UE_XnAP_ID +), + +41 ( +ASN_TAG_CLASS_CONTEXT + | (3 << 2)), + +43 & +a¢_DEF_NG_RANnodeUEXnAPID +, + +49 { +ATF_POINTER +, 2, +off£tof +( +UEID_NG_ENB +, +glob®NgENB_ID +), + +50 ( +ASN_TAG_CLASS_CONTEXT + | (4 << 2)), + +52 & +a¢_DEF_Glob®NgENB_ID +, + +58 { +ATF_POINTER +, 1, +off£tof +( +UEID_NG_ENB +, +glob®NG_RANNode_ID +), + +59 ( +ASN_TAG_CLASS_CONTEXT + | (5 << 2)), + +61 & +a¢_DEF_Glob®NGRANNodeID +, + +68 cÚ¡  + ga¢_MAP_UEID_NG_ENB_oms_1 +[] = { 2, 3, 4, 5 }; + +69 cÚ¡ +b”_Žv_g_t + + ga¢_DEF_UEID_NG_ENB_gs_1 +[] = { + +70 ( +ASN_TAG_CLASS_UNIVERSAL + | (16 << 2)) + +72 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_UEID_NG_ENB_g2–_1 +[] = { + +73 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +74 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 }, + +75 { ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), 2, 0, 0 }, + +76 { ( +ASN_TAG_CLASS_CONTEXT + | (3 << 2)), 3, 0, 0 }, + +77 { ( +ASN_TAG_CLASS_CONTEXT + | (4 << 2)), 4, 0, 0 }, + +78 { ( +ASN_TAG_CLASS_CONTEXT + | (5 << 2)), 5, 0, 0 } + +80 +a¢_SEQUENCE_¥ecifics_t + + ga¢_SPC_UEID_NG_ENB_¥ecs_1 + = { + +81 ( +UEID_NG_ENB +), + +82 +off£tof +( +UEID_NG_ENB +, +_a¢_ùx +), + +83 +a¢_MAP_UEID_NG_ENB_g2–_1 +, + +85 +a¢_MAP_UEID_NG_ENB_oms_1 +, + +89 +a¢_TYPE_desütÜ_t + + ga¢_DEF_UEID_NG_ENB + = { + +92 & +a¢_OP_SEQUENCE +, + +93 +a¢_DEF_UEID_NG_ENB_gs_1 +, + +94 ( +a¢_DEF_UEID_NG_ENB_gs_1 +) + +95 /( +a¢_DEF_UEID_NG_ENB_gs_1 +[0]), + +96 +a¢_DEF_UEID_NG_ENB_gs_1 +, + +97 ( +a¢_DEF_UEID_NG_ENB_gs_1 +) + +98 /( +a¢_DEF_UEID_NG_ENB_gs_1 +[0]), + +99 { 0, 0, +SEQUENCE_cÚ¡¿št + }, + +100 +a¢_MBR_UEID_NG_ENB_1 +, + +102 & +a¢_SPC_UEID_NG_ENB_¥ecs_1 + + + @UEID.c + +8  + ~"UEID.h +" + +10  + ~"UEID-GNB.h +" + +11  + ~"UEID-GNB-DU.h +" + +12  + ~"UEID-GNB-CU-UP.h +" + +13  + ~"UEID-NG-ENB.h +" + +14  + ~"UEID-NG-ENB-DU.h +" + +15  + ~"UEID-EN-GNB.h +" + +16  + ~"UEID-ENB.h +" + +17 +a¢_³r_cÚ¡¿šts_t + +a¢_PER_ty³_UEID_cÚ¡r_1 + + gCC_NOTUSED + = { + +18 { +APC_CONSTRAINED + | +APC_EXTENSIBLE +, 3, 3, 0, 6 } , + +19 { +APC_UNCONSTRAINED +, -1, -1, 0, 0 }, + +22 +a¢_TYPE_memb”_t + + ga¢_MBR_UEID_1 +[] = { + +23 { +ATF_POINTER +, 0, +off£tof +( +UEID +, +choiû +. +gNB_UEID +), + +24 ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), + +26 & +a¢_DEF_UEID_GNB +, + +32 { +ATF_POINTER +, 0, +off£tof +( +UEID +, +choiû +. +gNB_DU_UEID +), + +33 ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), + +35 & +a¢_DEF_UEID_GNB_DU +, + +41 { +ATF_POINTER +, 0, +off£tof +( +UEID +, +choiû +. +gNB_CU_UP_UEID +), + +42 ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), + +44 & +a¢_DEF_UEID_GNB_CU_UP +, + +50 { +ATF_POINTER +, 0, +off£tof +( +UEID +, +choiû +. +ng_eNB_UEID +), + +51 ( +ASN_TAG_CLASS_CONTEXT + | (3 << 2)), + +53 & +a¢_DEF_UEID_NG_ENB +, + +59 { +ATF_POINTER +, 0, +off£tof +( +UEID +, +choiû +. +ng_eNB_DU_UEID +), + +60 ( +ASN_TAG_CLASS_CONTEXT + | (4 << 2)), + +62 & +a¢_DEF_UEID_NG_ENB_DU +, + +68 { +ATF_POINTER +, 0, +off£tof +( +UEID +, +choiû +. +’_gNB_UEID +), + +69 ( +ASN_TAG_CLASS_CONTEXT + | (5 << 2)), + +71 & +a¢_DEF_UEID_EN_GNB +, + +77 { +ATF_POINTER +, 0, +off£tof +( +UEID +, +choiû +. +eNB_UEID +), + +78 ( +ASN_TAG_CLASS_CONTEXT + | (6 << 2)), + +80 & +a¢_DEF_UEID_ENB +, + +87 cÚ¡ +a¢_TYPE_g2memb”_t + + ga¢_MAP_UEID_g2–_1 +[] = { + +88 { ( +ASN_TAG_CLASS_CONTEXT + | (0 << 2)), 0, 0, 0 }, + +89 { ( +ASN_TAG_CLASS_CONTEXT + | (1 << 2)), 1, 0, 0 }, + +90 { ( +ASN_TAG_CLASS_CONTEXT + | (2 << 2)), 2, 0, 0 }, + +91 { ( +ASN_TAG_CLASS_CONTEXT + | (3 << 2)), 3, 0, 0 }, + +92 { ( +ASN_TAG_CLASS_CONTEXT + | (4 << 2)), 4, 0, 0 }, + +93 { ( +ASN_TAG_CLASS_CONTEXT + | (5 << 2)), 5, 0, 0 }, + +94 { ( +ASN_TAG_CLASS_CONTEXT + | (6 << 2)), 6, 0, 0 } + +96 +a¢_CHOICE_¥ecifics_t + + ga¢_SPC_UEID_¥ecs_1 + = { + +97 ( +UEID +), + +98 +off£tof +( +UEID +, +_a¢_ùx +), + +99 +off£tof +( +UEID +, +´e£Á +), + +100 ((( +UEID + *)0)-> +´e£Á +), + +101 +a¢_MAP_UEID_g2–_1 +, + +106 +a¢_TYPE_desütÜ_t + + ga¢_DEF_UEID + = { + +109 & +a¢_OP_CHOICE +, + +114 { 0, & +a¢_PER_ty³_UEID_cÚ¡r_1 +, +CHOICE_cÚ¡¿št + }, + +115 +a¢_MBR_UEID_1 +, + +117 & +a¢_SPC_UEID_¥ecs_1 + + + @asn_SEQUENCE_OF.c + +5  + ~ + +6  + ~ + +8  + $A_SEQUENCE_OF +(è + ta¢_£qu’û +; + +11 + $a¢_£qu’û_d– +(* +a¢_£qu’û_of_x +,  +numb” +,  +_do_ä“ +) { + +12 +a¢_£qu’û + * +as + = (a¢_£qu’û *) +a¢_£qu’û_of_x +; + +14 if( +as +) { + +15 * +±r +; + +16  +n +; + +18 if( +numb” + < 0 ||‚umb” >ð +as +-> +couÁ +) + +21 if( +_do_ä“ + && +as +-> +ä“ +) { + +22 +±r + = +as +-> +¬¿y +[ +numb” +]; + +24 +±r + = 0; + +30 -- +as +-> +couÁ +; + +31  +n + = +numb” +;‚ < +as +-> +couÁ +;‚++) + +32 +as +-> +¬¿y +[ +n +] =‡s->array[n+1]; + +38 if( +±r +è +as +-> + `ä“ +(ptr); + +40 + } +} + + @asn_SET_OF.c + +5  + ~ + +6  + ~ + +7  + ~<”ºo.h +> + +13 + $a¢_£t_add +(* +a¢_£t_of_x +, * +±r +) { + +14 +a¢_ªÚymous_£t_ + * +as + = + `_A_SET_FROM_VOID +( +a¢_£t_of_x +); + +16 if( +as + =ð0 || +±r + == 0) { + +17 +”ºo + = +EINVAL +; + +24 if( +as +-> +couÁ + =ðas-> +size +) { + +25  +_Ãwsize + = +as +-> +size + ? (as->size << 1) : 4; + +26 * +_Ãw_¬r +; + +27 +_Ãw_¬r + = + `REALLOC +( +as +-> +¬¿y +, +_Ãwsize + * (as->array[0])); + +28 if( +_Ãw_¬r +) { + +29 +as +-> +¬¿y + = (**) +_Ãw_¬r +; + +30 +as +-> +size + = +_Ãwsize +; + +37 +as +-> +¬¿y +[as-> +couÁ +++] = +±r +; + +40 + } +} + +43 + $a¢_£t_d– +(* +a¢_£t_of_x +,  +numb” +,  +_do_ä“ +) { + +44 +a¢_ªÚymous_£t_ + * +as + = + `_A_SET_FROM_VOID +( +a¢_£t_of_x +); + +46 if( +as +) { + +47 * +±r +; + +48 if( +numb” + < 0 ||‚umb” >ð +as +-> +couÁ +) + +51 if( +_do_ä“ + && +as +-> +ä“ +) { + +52 +±r + = +as +-> +¬¿y +[ +numb” +]; + +54 +±r + = 0; + +57 +as +-> +¬¿y +[ +numb” +] =‡s->¬¿y[--as-> +couÁ +]; + +63 if( +±r +è +as +-> + `ä“ +(ptr); + +65 + } +} + +71 + $a¢_£t_em±y +(* +a¢_£t_of_x +) { + +72 +a¢_ªÚymous_£t_ + * +as + = + `_A_SET_FROM_VOID +( +a¢_£t_of_x +); + +74 if( +as +) { + +75 if( +as +-> +¬¿y +) { + +76 if( +as +-> +ä“ +) { + +77  +as +-> +couÁ +--) + +78 +as +-> + `ä“ +×s-> +¬¿y +[as-> +couÁ +]); + +80 + `FREEMEM +( +as +-> +¬¿y +); + +81 +as +-> +¬¿y + = 0; + +83 +as +-> +couÁ + = 0; + +84 +as +-> +size + = 0; + +87 + } +} + + @asn_application.c + +5  + ~ + +6  + ~ + +7  + ~<”ºo.h +> + +9  +a¢_’c_rv®_t + +a¢_’code_š‹º® +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +10 +a¢_Œªsãr_syÁax + +syÁax +, + +11 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +12 cÚ¡ * +¥Œ +, + +13 +a¢_­p_cÚsume_by‹s_f + * +ÿÎback +, + +14 * +ÿÎback_key +); + +17  + sÿÎback_couÁ_by‹s_key + { + +18 +a¢_­p_cÚsume_by‹s_f + * + mÿÎback +; + +19 * + mÿÎback_key +; + +20 +size_t + + mcompu‹d_size +; + +27 + $ÿÎback_couÁ_by‹s_cb +(cÚ¡ * +d©a +, +size_t + +size +, * +keyp +) { + +28  +ÿÎback_couÁ_by‹s_key + * +key + = +keyp +; + +29  +»t +; + +31 +»t + = +key +-> + `ÿÎback +( +d©a +, +size +, key-> +ÿÎback_key +); + +32 if( +»t + >= 0) { + +33 +key +-> +compu‹d_size + +ð +size +; + +36  +»t +; + +37 + } +} + +39  + sov”run_’cod”_key + { + +40 * + mbufãr +; + +41 +size_t + + mbufãr_size +; + +42 +size_t + + mcompu‹d_size +; + +45  + sdyÇmic_’cod”_key + { + +46 * + mbufãr +; + +47 +size_t + + mbufãr_size +; + +48 +size_t + + mcompu‹d_size +; + +51  + sÿÎback_çžu»_ÿtch_key + { + +52 +a¢_­p_cÚsume_by‹s_f + * + mÿÎback +; + +53 * + mÿÎback_key +; + +54  + mÿÎback_çžed +; + +62 + $ov”run_’cod”_cb +(cÚ¡ * +d©a +, +size_t + +size +, * +keyp +) { + +63  +ov”run_’cod”_key + * +key + = +keyp +; + +65 if( +key +-> +compu‹d_size + + +size + > key-> +bufãr_size +) { + +70 +key +-> +bufãr_size + = 0; + +72 + `memýy +((*) +key +-> +bufãr + + key-> +compu‹d_size +, +d©a +, +size +); + +74 +key +-> +compu‹d_size + +ð +size +; + +77 + } +} + +84 + $dyÇmic_’cod”_cb +(cÚ¡ * +d©a +, +size_t + +size +, * +keyp +) { + +85  +dyÇmic_’cod”_key + * +key + = +keyp +; + +87 if( +key +-> +bufãr +) { + +88 if( +key +-> +compu‹d_size + + +size + >ðkey-> +bufãr_size +) { + +89 * +p +; + +90 +size_t + +Ãw_size + = +key +-> +bufãr_size +; + +93 +Ãw_size + *= 2; + +94 }  +Ãw_size + <ð +key +-> +compu‹d_size + + +size +); + +96 +p + = + `REALLOC +( +key +-> +bufãr +, +Ãw_size +); + +97 if( +p +) { + +98 +key +-> +bufãr + = +p +; + +99 +key +-> +bufãr_size + = +Ãw_size +; + +101 + `FREEMEM +( +key +-> +bufãr +); + +102 +key +-> +bufãr + = 0; + +103 +key +-> +bufãr_size + = 0; + +104 +key +-> +compu‹d_size + +ð +size +; + +108 + `memýy +((*) +key +-> +bufãr + + key-> +compu‹d_size +, +d©a +, +size +); + +111 +key +-> +compu‹d_size + +ð +size +; + +114 + } +} + +120 + $ÿÎback_çžu»_ÿtch_cb +(cÚ¡ * +d©a +, +size_t + +size +, * +keyp +) { + +121  +ÿÎback_çžu»_ÿtch_key + * +key + = +keyp +; + +122  +»t +; + +124 +»t + = +key +-> + `ÿÎback +( +d©a +, +size +, key-> +ÿÎback_key +); + +125 if( +»t + < 0) { + +126 +key +-> +ÿÎback_çžed + = 1; + +129  +»t +; + +130 + } +} + +132 +a¢_’c_rv®_t + + +133 + $a¢_’code +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +134 +a¢_Œªsãr_syÁax + +syÁax +, cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +135 cÚ¡ * +¥Œ +, +a¢_­p_cÚsume_by‹s_f + * +ÿÎback +, * +ÿÎback_key +) { + +136  +ÿÎback_çžu»_ÿtch_key + +cb_key +; + +137 +a¢_’c_rv®_t + +” + = {0,0,0}; + +139 if(! +ÿÎback +) { + +140 +”ºo + = +EINVAL +; + +141 +ASN__ENCODE_FAILED +; + +144 +cb_key +. +ÿÎback + = callback; + +145 +cb_key +. +ÿÎback_key + = callback_key; + +146 +cb_key +. +ÿÎback_çžed + = 0; + +148 +” + = + `a¢_’code_š‹º® +( +Ýt_codec_ùx +, +syÁax +, +td +, +¥Œ +, + +149 +ÿÎback_çžu»_ÿtch_cb +, & +cb_key +); + +150 if( +cb_key +. +ÿÎback_çžed +) { + +151 + `as£¹ +( +” +. +’coded + == -1); + +152 + `as£¹ +( +”ºo + =ð +EBADF +); + +153 +”ºo + = +EIO +; + +156  +” +; + +157 + } +} + +159 +a¢_’c_rv®_t + + +160 + $a¢_’code_to_bufãr +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +161 +a¢_Œªsãr_syÁax + +syÁax +, + +162 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +163 * +bufãr +, +size_t + +bufãr_size +) { + +164  +ov”run_’cod”_key + +buf_key +; + +165 +a¢_’c_rv®_t + +” + = {0,0,0}; + +167 if( +bufãr_size + > 0 && ! +bufãr +) { + +168 +”ºo + = +EINVAL +; + +169 +ASN__ENCODE_FAILED +; + +172 +buf_key +. +bufãr + = buffer; + +173 +buf_key +. +bufãr_size + = buffer_size; + +174 +buf_key +. +compu‹d_size + = 0; + +176 +” + = + `a¢_’code_š‹º® +( +Ýt_codec_ùx +, +syÁax +, +td +, +¥Œ +, + +177 +ov”run_’cod”_cb +, & +buf_key +); + +179 if( +” +. +’coded + >ð0 && ( +size_t +ër.’coded !ð +buf_key +. +compu‹d_size +) { + +180 + `ASN_DEBUG +("a¢_’code(è»tuºed %" +ASN_PRI_SSIZE + + +181 " y‘…roduûd %" +ASN_PRI_SIZE + " bytes", + +182 +” +. +’coded +, +buf_key +. +compu‹d_size +); + +183 + `as£¹ +( +” +. +’coded + < 0 || ( +size_t +ër.’coded =ð +buf_key +. +compu‹d_size +); + +186  +” +; + +187 + } +} + +189 +a¢_’code_to_Ãw_bufãr_»suÉ_t + + +190 + $a¢_’code_to_Ãw_bufãr +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +191 +a¢_Œªsãr_syÁax + +syÁax +, + +192 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +) { + +193  +dyÇmic_’cod”_key + +buf_key +; + +194 +a¢_’code_to_Ãw_bufãr_»suÉ_t + +»s +; + +196 +buf_key +. +bufãr_size + = 16; + +197 +buf_key +. +bufãr + = + `MALLOC +(buf_key. +bufãr_size +); + +198 +buf_key +. +compu‹d_size + = 0; + +200 +»s +. +»suÉ + = + `a¢_’code_š‹º® +( +Ýt_codec_ùx +, +syÁax +, +td +, +¥Œ +, + +201 +dyÇmic_’cod”_cb +, & +buf_key +); + +203 if( +»s +. +»suÉ +. +’coded + >= 0 + +204 && ( +size_t +) +»s +. +»suÉ +. +’coded + !ð +buf_key +. +compu‹d_size +) { + +205 + `ASN_DEBUG +("a¢_’code(è»tuºed %" +ASN_PRI_SSIZE + + +206 " y‘…roduûd %" +ASN_PRI_SIZE + " bytes", + +207 +»s +. +»suÉ +. +’coded +, +buf_key +. +compu‹d_size +); + +208 + `as£¹ +( +»s +. +»suÉ +. +’coded + < 0 + +209 || ( +size_t +) +»s +. +»suÉ +. +’coded + =ð +buf_key +. +compu‹d_size +); + +212 +»s +. +bufãr + = +buf_key +.buffer; + +215 if( +»s +. +bufãr +) { + +216 + `as£¹ +( +buf_key +. +compu‹d_size + < buf_key. +bufãr_size +); + +217 ((*) +»s +. +bufãr +)[ +buf_key +. +compu‹d_size +] = '\0'; + +220  +»s +; + +221 + } +} + +223  +a¢_’c_rv®_t + + +224 + $a¢_’code_š‹º® +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +225 +a¢_Œªsãr_syÁax + +syÁax +, + +226 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +227 +a¢_­p_cÚsume_by‹s_f + * +ÿÎback +, * +ÿÎback_key +) { + +228 +a¢_’c_rv®_t + +” + = {0,0,0}; + +229 +x”_’cod”_æags_e + +x”_æags + = +XER_F_CANONICAL +; + +231 () +Ýt_codec_ùx +; + +233 if(! +td + || ! +¥Œ +) { + +234 +”ºo + = +EINVAL +; + +235 +ASN__ENCODE_FAILED +; + +238  +syÁax +) { + +239  +ATS_NONSTANDARD_PLAINTEXT +: + +240 if( +td +-> +Ý +-> +´št_¡ruù +) { + +241  +ÿÎback_couÁ_by‹s_key + +cb_key +; + +242 +cb_key +. +ÿÎback + = callback; + +243 +cb_key +. +ÿÎback_key + = callback_key; + +244 +cb_key +. +compu‹d_size + = 0; + +245 if( +td +-> +Ý +-> + `´št_¡ruù +Ñd, +¥Œ +, 1, +ÿÎback_couÁ_by‹s_cb +, + +246 & +cb_key +) + +248 || + `ÿÎback_couÁ_by‹s_cb +("\n", 1, & +cb_key +) < 0) { + +249 +”ºo + = +EBADF +; + +250 +” +. +’coded + = -1; + +251 +” +. +çžed_ty³ + = +td +; + +252 +” +. +¡ruùu»_±r + = +¥Œ +; + +254 +” +. +’coded + = +cb_key +. +compu‹d_size +; + +255 +” +. +çžed_ty³ + = 0; + +256 +” +. +¡ruùu»_±r + = 0; + +259 +”ºo + = +ENOENT +; + +260 +ASN__ENCODE_FAILED +; + +264  +ATS_RANDOM +: + +265 +”ºo + = +ENOENT +; + +266 +ASN__ENCODE_FAILED +; + +268  +ATS_BER +: + +271  +ATS_DER +: + +272 if( +td +-> +Ý +-> +d”_’cod” +) { + +273 +” + = + `d”_’code +( +td +, +¥Œ +, +ÿÎback +, +ÿÎback_key +); + +274 if( +” +. +’coded + == -1) { + +275 if( +” +. +çžed_ty³ + &&ƒr.çžed_ty³-> +Ý +-> +d”_’cod” +) { + +276 +”ºo + = +EBADF +; + +278 +”ºo + = +ENOENT +; + +282 +”ºo + = +ENOENT +; + +283 +ASN__ENCODE_FAILED +; + +286  +ATS_CER +: + +287 +”ºo + = +ENOENT +; + +288 +ASN__ENCODE_FAILED +; + +290 #ifdeà +ASN_DISABLE_OER_SUPPORT + + +291  +ATS_BASIC_OER +: + +292  +ATS_CANONICAL_OER +: + +293 +”ºo + = +ENOENT +; + +294 +ASN__ENCODE_FAILED +; + +297  +ATS_BASIC_OER +: + +300  +ATS_CANONICAL_OER +: + +301 if( +td +-> +Ý +-> +Ûr_’cod” +) { + +302 +” + = + `Ûr_’code +( +td +, +¥Œ +, +ÿÎback +, +ÿÎback_key +); + +303 if( +” +. +’coded + == -1) { + +304 if( +” +. +çžed_ty³ + &&ƒr.çžed_ty³-> +Ý +-> +Ûr_’cod” +) { + +305 +”ºo + = +EBADF +; + +307 +”ºo + = +ENOENT +; + +311 +”ºo + = +ENOENT +; + +312 +ASN__ENCODE_FAILED +; + +317 #ifdeà +ASN_DISABLE_PER_SUPPORT + + +318  +ATS_UNALIGNED_BASIC_PER +: + +319  +ATS_UNALIGNED_CANONICAL_PER +: + +320  +ATS_ALIGNED_BASIC_PER +: + +321  +ATS_ALIGNED_CANONICAL_PER +: + +322 +”ºo + = +ENOENT +; + +323 +ASN__ENCODE_FAILED +; + +326  +ATS_UNALIGNED_BASIC_PER +: + +329  +ATS_UNALIGNED_CANONICAL_PER +: + +330 if( +td +-> +Ý +-> +u³r_’cod” +) { + +331 +” + = + `u³r_’code +( +td +, 0, +¥Œ +, +ÿÎback +, +ÿÎback_key +); + +332 if( +” +. +’coded + == -1) { + +333 if( +” +. +çžed_ty³ + &&ƒr.çžed_ty³-> +Ý +-> +u³r_’cod” +) { + +334 +”ºo + = +EBADF +; + +336 +”ºo + = +ENOENT +; + +339 + `ASN_DEBUG +("Com¶‘’coded iÀ%ld b™s", () +” +. +’coded +); + +340 if( +” +. +’coded + == 0) { + +342 if( + `ÿÎback +("\0", 1, +ÿÎback_key +) < 0) { + +343 +”ºo + = +EBADF +; + +344 +ASN__ENCODE_FAILED +; + +346 +” +. +’coded + = 8; + +349 +” +. +’coded + = (er.encoded + 7) >> 3; + +352 +”ºo + = +ENOENT +; + +353 +ASN__ENCODE_FAILED +; + +356  +ATS_ALIGNED_BASIC_PER +: + +359  +ATS_ALIGNED_CANONICAL_PER +: + +360 if( +td +-> +Ý +-> +­”_’cod” +) { + +361 +” + = + `­”_’code +( +td +, 0, +¥Œ +, +ÿÎback +, +ÿÎback_key +); + +362 if( +” +. +’coded + == -1) { + +363 if( +” +. +çžed_ty³ + &&ƒr.çžed_ty³-> +Ý +-> +­”_’cod” +) { + +364 +”ºo + = +EBADF +; + +366 +”ºo + = +ENOENT +; + +369 + `ASN_DEBUG +("Com¶‘’coded iÀ%ld b™s", () +” +. +’coded +); + +370 if( +” +. +’coded + == 0) { + +372 if( + `ÿÎback +("\0", 1, +ÿÎback_key +) < 0) { + +373 +”ºo + = +EBADF +; + +374 +ASN__ENCODE_FAILED +; + +376 +” +. +’coded + = 8; + +379 +” +. +’coded + = (er.encoded + 7) >> 3; + +382 +”ºo + = +ENOENT +; + +383 +ASN__ENCODE_FAILED +; + +388  +ATS_BASIC_XER +: + +390 +x”_æags + &ð~ +XER_F_CANONICAL +; + +391 +x”_æags + |ð +XER_F_BASIC +; + +393  +ATS_CANONICAL_XER +: + +394 if( +td +-> +Ý +-> +x”_’cod” +) { + +395 +” + = + `x”_’code +( +td +, +¥Œ +, +x”_æags +, +ÿÎback +, +ÿÎback_key +); + +396 if( +” +. +’coded + == -1) { + +397 if( +” +. +çžed_ty³ + &&ƒr.çžed_ty³-> +Ý +-> +x”_’cod” +) { + +398 +”ºo + = +EBADF +; + +400 +”ºo + = +ENOENT +; + +404 +”ºo + = +ENOENT +; + +405 +ASN__ENCODE_FAILED +; + +410 +”ºo + = +ENOENT +; + +411 +ASN__ENCODE_FAILED +; + +414  +” +; + +415 + } +} + +417 +a¢_dec_rv®_t + + +418 + $a¢_decode +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +419 +a¢_Œªsãr_syÁax + +syÁax +, cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +420 ** +¥Œ +, cÚ¡ * +bufãr +, +size_t + +size +) { + +421 if(! +td + || !td-> +Ý + || ! +¥Œ + || ( +size + && ! +bufãr +)) { + +422 +ASN__DECODE_FAILED +; + +425  +syÁax +) { + +426  +ATS_CER +: + +427  +ATS_NONSTANDARD_PLAINTEXT +: + +429 +”ºo + = +ENOENT +; + +430 +ASN__DECODE_FAILED +; + +432  +ATS_RANDOM +: + +433 if(! +td +-> +Ý +-> +¿ndom_fžl +) { + +434 +ASN__DECODE_FAILED +; + +436 if( + `a¢_¿ndom_fžl +( +td +, +¥Œ +, 16000) == 0) { + +437 +a¢_dec_rv®_t + +»t + = { +RC_OK +, 0}; + +438  +»t +; + +440 +ASN__DECODE_FAILED +; + +445  +ATS_DER +: + +446  +ATS_BER +: + +447  + `b”_decode +( +Ýt_codec_ùx +, +td +, +¥Œ +, +bufãr +, +size +); + +449  +ATS_BASIC_OER +: + +450  +ATS_CANONICAL_OER +: + +451 #ifdeà +ASN_DISABLE_OER_SUPPORT + + +452 +”ºo + = +ENOENT +; + +453 +ASN__DECODE_FAILED +; + +455  + `Ûr_decode +( +Ýt_codec_ùx +, +td +, +¥Œ +, +bufãr +, +size +); + +458  +ATS_UNALIGNED_BASIC_PER +: + +459  +ATS_UNALIGNED_CANONICAL_PER +: + +460 #ifdeà +ASN_DISABLE_PER_SUPPORT + + +461 +”ºo + = +ENOENT +; + +462 +ASN__DECODE_FAILED +; + +464  + `u³r_decode_com¶‘e +( +Ýt_codec_ùx +, +td +, +¥Œ +, +bufãr +, +size +); + +467  +ATS_ALIGNED_BASIC_PER +: + +468  +ATS_ALIGNED_CANONICAL_PER +: + +469 #ifdeà +ASN_DISABLE_PER_SUPPORT + + +470 +”ºo + = +ENOENT +; + +471 +ASN__DECODE_FAILED +; + +473  + `­”_decode_com¶‘e +( +Ýt_codec_ùx +, +td +, +¥Œ +, +bufãr +, +size +); + +476  +ATS_BASIC_XER +: + +477  +ATS_CANONICAL_XER +: + +478  + `x”_decode +( +Ýt_codec_ùx +, +td +, +¥Œ +, +bufãr +, +size +); + +480 + } +} + + @asn_bit_data.c + +6  + ~ + +7  + ~ + +8  + ~ + +14 +a¢_b™_d©a_t + * + +15 + $a¢_b™_d©a_Ãw_cÚtiguous +(cÚ¡ * +d©a +, +size_t + +size_b™s +) { + +16 +size_t + +size_by‹s + = ( +size_b™s + + 7) / 8; + +17 +a¢_b™_d©a_t + * +pd +; + +18 +ušt8_t + * +by‹s +; + +21 +pd + = + `CALLOC +(1, (*pdè+ +size_by‹s + + 1); + +22 if(! +pd +) { + +23  +NULL +; + +25 +by‹s + = (*)(((*) +pd +) + (*pd)); + +26 + `memýy +( +by‹s +, +d©a +, +size_by‹s +); + +27 +by‹s +[ +size_by‹s +] = 0; + +28 +pd +-> +bufãr + = +by‹s +; + +29 +pd +-> +nboff + = 0; + +30 +pd +-> +nb™s + = +size_b™s +; + +32  +pd +; + +33 + } +} + +37 + $a¢_b™_d©a_¡ršg +( +a¢_b™_d©a_t + * +pd +) { + +38  +buf +[2][32]; + +39  +n +; + +40 +n + = (n+1) % 2; + +41 + `¢´štf +( +buf +[ +n +], (buf[n]), + +42 "{m=%" +ASN_PRI_SIZE + " span %" ASN_PRI_SIZE "[%" ASN_PRI_SIZE + +43 "..%" +ASN_PRI_SIZE + "] (%" ASN_PRI_SIZE ")}", + +44 +pd +-> +moved +, (( +ušŒ_t +)Õd-> +bufãr +è& 0xf),…d-> +nboff +,…d-> +nb™s +, + +45 +pd +-> +nb™s + -…d-> +nboff +); + +46  +buf +[ +n +]; + +47 + } +} + +50 + $a¢_g‘_undo +( +a¢_b™_d©a_t + * +pd +,  +nb™s +) { + +51 if(( +ssize_t +) +pd +-> +nboff + < +nb™s +) { + +52 + `as£¹ +(( +ssize_t +) +pd +-> +nboff + < +nb™s +); + +54 +pd +-> +nboff + -ð +nb™s +; + +55 +pd +-> +moved + -ð +nb™s +; + +57 + } +} + +62 +št32_t + + +63 + $a¢_g‘_ãw_b™s +( +a¢_b™_d©a_t + * +pd +,  +nb™s +) { + +64 +size_t + +off +; + +65 +ssize_t + +Æeá +; + +66 +ušt32_t + +accum +; + +67 cÚ¡ +ušt8_t + * +buf +; + +69 if( +nb™s + < 0) + +72 +Æeá + = +pd +-> +nb™s + -…d-> +nboff +; + +73 if( +nb™s + > +Æeá +) { + +74 +št32_t + +žv +, +vh—d +; + +75 if(! +pd +-> +»fžl + || +nb™s + > 31)  -1; + +77 + `ASN_DEBUG +("Obtainhe„est %d bits (want %d)", + +78 () +Æeá +, () +nb™s +); + +79 +žv + = + `a¢_g‘_ãw_b™s +( +pd +, +Æeá +); + +80 if( +žv + < 0)  -1; + +82 if( +pd +-> + `»fžl +(pd)) + +84 +nb™s + -ð +Æeá +; + +85 +vh—d + = + `a¢_g‘_ãw_b™s +( +pd +, +nb™s +); + +87 +žv + = (žv << +nb™s +è| +vh—d +; + +88  +žv +; + +94 if( +pd +-> +nboff + >= 8) { + +95 +pd +-> +bufãr + +ðÕd-> +nboff + >> 3); + +96 +pd +-> +nb™s + -ðÕd-> +nboff + & ~0x07); + +97 +pd +-> +nboff + &= 0x07; + +99 +pd +-> +moved + +ð +nb™s +; + +100 +pd +-> +nboff + +ð +nb™s +; + +101 +off + = +pd +-> +nboff +; + +102 +buf + = +pd +-> +bufãr +; + +107 if( +off + <= 8) + +108 +accum + = +nb™s + ? ( +buf +[0]è>> (8 - +off +) : 0; + +109 if( +off + <= 16) + +110 +accum + = (( +buf +[0] << 8è+ buf[1]è>> (16 - +off +); + +111 if( +off + <= 24) + +112 +accum + = (( +buf +[0] << 16è+ (buf[1] << 8è+ buf[2]è>> (24 - +off +); + +113 if( +off + <= 31) + +114 +accum + = ((( +ušt32_t +) +buf +[0] << 24) + (buf[1] << 16) + +115 + ( +buf +[2] << 8è+ (buf[3])è>> (32 - +off +); + +116 if( +nb™s + <= 31) { + +117 +a¢_b™_d©a_t + +d + = * +pd +; + +119 + `a¢_g‘_undo +(& +d +, +nb™s +); + +123 +accum + = + `a¢_g‘_ãw_b™s +(& +d +, +nb™s + - 24) << 24; + +124 +accum + |ð + `a¢_g‘_ãw_b™s +(& +d +, 24); + +126 + `a¢_g‘_undo +( +pd +, +nb™s +); + +130 +accum + &ð((( +ušt32_t +)1 << +nb™s +) - 1); + +132 + `ASN_DEBUG +(" [PER got %2d<=%2d bits => span %d %+ld[%d..%d]:%02x (%d) => 0x%x]", + +133 () +nb™s +, () +Æeá +, + +134 () +pd +-> +moved +, + +135 ((() +pd +-> +bufãr +) & 0xf), + +136 () +pd +-> +nboff +, (íd-> +nb™s +, + +137 (( +pd +-> +bufãr + !ð +NULL +)?pd->buffer[0]:0), + +138 ()( +pd +-> +nb™s + -…d-> +nboff +), + +139 () +accum +); + +141  +accum +; + +142 + } +} + +148 + $a¢_g‘_mªy_b™s +( +a¢_b™_d©a_t + * +pd +, +ušt8_t + * +d¡ +,  +®right +,  +nb™s +) { + +149 +št32_t + +v®ue +; + +151 if( +®right + && ( +nb™s + & 7)) { + +153 +v®ue + = + `a¢_g‘_ãw_b™s +( +pd +, +nb™s + & 0x07); + +154 if( +v®ue + < 0)  -1; + +155 * +d¡ +++ = +v®ue +; + +156 +nb™s + &= ~7; + +159  +nb™s +) { + +160 if( +nb™s + >= 24) { + +161 +v®ue + = + `a¢_g‘_ãw_b™s +( +pd +, 24); + +162 if( +v®ue + < 0)  -1; + +163 *( +d¡ +++èð +v®ue + >> 16; + +164 *( +d¡ +++èð +v®ue + >> 8; + +165 *( +d¡ +++èð +v®ue +; + +166 +nb™s + -= 24; + +168 +v®ue + = + `a¢_g‘_ãw_b™s +( +pd +, +nb™s +); + +169 if( +v®ue + < 0)  -1; + +170 if( +nb™s + & 7) { + +171 +v®ue + <<ð8 - ( +nb™s + & 7), + +172 +nb™s + += 8 - (nbits & 7); + +173 if( +nb™s + > 24) + +174 * +d¡ +++ = +v®ue + >> 24; + +176 if( +nb™s + > 16) + +177 * +d¡ +++ = +v®ue + >> 16; + +178 if( +nb™s + > 8) + +179 * +d¡ +++ = +v®ue + >> 8; + +180 * +d¡ +++ = +v®ue +; + +186 + } +} + +192 + $a¢_put_ãw_b™s +( +a¢_b™_ou_t + * +po +, +ušt32_t + +b™s +,  +ob™s +) { + +193 +size_t + +off +; + +194 +size_t + +omsk +; + +195 +ušt8_t + * +buf +; + +197 if( +ob™s + <= 0 || obits >= 32)  obits ? -1 : 0; + +199 + `ASN_DEBUG +("[PER…ut %d bits %xo %p+%d bits]", + +200 +ob™s +, () +b™s +, (*) +po +-> +bufãr +, (ío-> +nboff +); + +205 if( +po +-> +nboff + >= 8) { + +206 +po +-> +bufãr + +ðÕo-> +nboff + >> 3); + +207 +po +-> +nb™s + -ðÕo-> +nboff + & ~0x07); + +208 +po +-> +nboff + &= 0x07; + +214 if( +po +-> +nboff + + +ob™s + >…o-> +nb™s +) { + +215 +size_t + +com¶‘e_by‹s +; + +216 if(! +po +-> +bufãr +èpo->bufã¸ðpo-> +tmp¥aû +; + +217 +com¶‘e_by‹s + = ( +po +-> +bufãr + -…o-> +tmp¥aû +); + +218 + `ASN_DEBUG +("[PER output %ld complete + %ld]", + +219 () +com¶‘e_by‹s +, () +po +-> +æushed_by‹s +); + +220 if( +po +-> + `ouut +Õo-> +tmp¥aû +, +com¶‘e_by‹s +,…o-> +Ý_key +) < 0) + +222 if( +po +-> +nboff +) + +223 +po +-> +tmp¥aû +[0] =…o-> +bufãr +[0]; + +224 +po +-> +bufãr + =…o-> +tmp¥aû +; + +225 +po +-> +nb™s + = 8 * Õo-> +tmp¥aû +); + +226 +po +-> +æushed_by‹s + +ð +com¶‘e_by‹s +; + +232 +buf + = +po +-> +bufãr +; + +233 +omsk + = ~((1 << (8 - +po +-> +nboff +)) - 1); + +234 +off + = ( +po +-> +nboff + + +ob™s +); + +237 +b™s + &ð((( +ušt32_t +)1 << +ob™s +) - 1); + +239 + `ASN_DEBUG +("[PER ouˆ%d %u/%x (t=%d,o=%dè%x&%x=%x]", +ob™s +, + +240 () +b™s +, ()bits, + +241 () +po +-> +nboff +, () +off +, + +242 +buf +[0], ()( +omsk +&0xff), + +243 ()( +buf +[0] & +omsk +)); + +245 if( +off + <= 8) + +246 +po +-> +nboff + = +off +, + +247 +b™s + <<ð(8 - +off +), + +248 +buf +[0] = (buf[0] & +omsk +è| +b™s +; + +249 if( +off + <= 16) + +250 +po +-> +nboff + = +off +, + +251 +b™s + <<ð(16 - +off +), + +252 +buf +[0] = (buf[0] & +omsk +è| ( +b™s + >> 8), + +253 +buf +[1] = +b™s +; + +254 if( +off + <= 24) + +255 +po +-> +nboff + = +off +, + +256 +b™s + <<ð(24 - +off +), + +257 +buf +[0] = (buf[0] & +omsk +è| ( +b™s + >> 16), + +258 +buf +[1] = +b™s + >> 8, + +259 +buf +[2] = +b™s +; + +260 if( +off + <= 31) + +261 +po +-> +nboff + = +off +, + +262 +b™s + <<ð(32 - +off +), + +263 +buf +[0] = (buf[0] & +omsk +è| ( +b™s + >> 24), + +264 +buf +[1] = +b™s + >> 16, + +265 +buf +[2] = +b™s + >> 8, + +266 +buf +[3] = +b™s +; + +268 if( + `a¢_put_ãw_b™s +( +po +, +b™s + >> ( +ob™s + - 24), 24))  -1; + +269 if( + `a¢_put_ãw_b™s +( +po +, +b™s +, +ob™s + - 24))  -1; + +272 + `ASN_DEBUG +("[PER out %u/%x => %02x buf+%ld]", + +273 () +b™s +, ()b™s, +buf +[0], + +274 ()( +po +-> +bufãr + -…o-> +tmp¥aû +)); + +277 + } +} + +284 + $a¢_put_mªy_b™s +( +a¢_b™_ou_t + * +po +, cÚ¡ +ušt8_t + * +¤c +,  +nb™s +) { + +286  +nb™s +) { + +287 +ušt32_t + +v®ue +; + +289 if( +nb™s + >= 24) { + +290 +v®ue + = ( +¤c +[0] << 16) | (src[1] << 8) | src[2]; + +291 +¤c + += 3; + +292 +nb™s + -= 24; + +293 if( + `a¢_put_ãw_b™s +( +po +, +v®ue +, 24)) + +296 +v®ue + = +¤c +[0]; + +297 if( +nb™s + > 8) + +298 +v®ue + = (v®u<< 8è| +¤c +[1]; + +299 if( +nb™s + > 16) + +300 +v®ue + = (v®u<< 8è| +¤c +[2]; + +301 if( +nb™s + & 0x07) + +302 +v®ue + >>ð(8 - ( +nb™s + & 0x07)); + +303 if( + `a¢_put_ãw_b™s +( +po +, +v®ue +, +nb™s +)) + +310 + } +} + +314 + $a¢_put_®igÃd_æush +( +a¢_b™_ou_t + * +po +) { + +315 +ušt32_t + +unu£d_b™s + = (0x7 & (8 - ( +po +-> +nboff + & 0x07))); + +316 +size_t + +com¶‘e_by‹s + = + +317 ( +po +-> +bufãr + ?…o->bufã¸-…o-> +tmp¥aû + : 0è+ (Õo-> +nboff + + 7) >> 3); + +319 if( +unu£d_b™s +) { + +320 +po +-> +bufãr +[po-> +nboff + >> 3] &ð~0u << +unu£d_b™s +; + +323 if( +po +-> + `ouut +Õo-> +tmp¥aû +, +com¶‘e_by‹s +,…o-> +Ý_key +) < 0) { + +326 +po +-> +bufãr + =…o-> +tmp¥aû +; + +327 +po +-> +nboff + = 0; + +328 +po +-> +nb™s + = 8 * Õo-> +tmp¥aû +); + +329 +po +-> +æushed_by‹s + +ð +com¶‘e_by‹s +; + +332 + } +} + + @asn_codecs_prim.c + +5  + ~ + +6  + ~ + +7  + ~<”ºo.h +> + +12 +a¢_dec_rv®_t + + +13 + $b”_decode_´im™ive +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +14 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¥Œ +, + +15 cÚ¡ * +buf_±r +, +size_t + +size +,  +g_mode +) { + +16 +ASN__PRIMITIVE_TYPE_t + * +¡ + = (ASN__PRIMITIVE_TYPE_ˆ*)* +¥Œ +; + +17 +a¢_dec_rv®_t + +rv® +; + +18 +b”_Žv_Ën_t + +Ëngth + = 0; + +23 if( +¡ + =ð +NULL +) { + +24 +¡ + = ( +ASN__PRIMITIVE_TYPE_t + *) + `CALLOC +(1, (*st)); + +25 if( +¡ + =ð +NULL +è +ASN__DECODE_FAILED +; + +26 * +¥Œ + = (*) +¡ +; + +29 + `ASN_DEBUG +("Decoding %s‡s…lain…rimitive (tm=%d)", + +30 +td +-> +Çme +, +g_mode +); + +35 +rv® + = + `b”_check_gs +( +Ýt_codec_ùx +, +td +, 0, +buf_±r +, +size +, + +36 +g_mode +, 0, & +Ëngth +, 0); + +37 if( +rv® +. +code + !ð +RC_OK +) + +38  +rv® +; + +40 + `ASN_DEBUG +("% Ëngth i %d by‹s", +td +-> +Çme +, () +Ëngth +); + +45 +buf_±r + = ((cÚ¡ *)buf_±rè+ +rv® +. +cÚsumed +; + +46 +size + -ð +rv® +. +cÚsumed +; + +47 if( +Ëngth + > ( +b”_Žv_Ën_t +) +size +) { + +48 +rv® +. +code + = +RC_WMORE +; + +49 +rv® +. +cÚsumed + = 0; + +50  +rv® +; + +53 +¡ +-> +size + = () +Ëngth +; + +55 if(( +¡ +-> +size +è!ð( +Ëngth +) + +56 && ( +b”_Žv_Ën_t +) +¡ +-> +size + !ð +Ëngth +) { + +57 +¡ +-> +size + = 0; + +58 +ASN__DECODE_FAILED +; + +61 +¡ +-> +buf + = ( +ušt8_t + *) + `MALLOC +( +Ëngth + + 1); + +62 if(! +¡ +-> +buf +) { + +63 +¡ +-> +size + = 0; + +64 +ASN__DECODE_FAILED +; + +67 + `memýy +( +¡ +-> +buf +, +buf_±r +, +Ëngth +); + +68 +¡ +-> +buf +[ +Ëngth +] = '\0'; + +70 +rv® +. +code + = +RC_OK +; + +71 +rv® +. +cÚsumed + +ð +Ëngth +; + +73 + `ASN_DEBUG +("Took %ld/%ld bytesoƒncode %s", + +74 () +rv® +. +cÚsumed +, + +75 () +Ëngth +, +td +-> +Çme +); + +77  +rv® +; + +78 + } +} + +83 +a¢_’c_rv®_t + + +84 + $d”_’code_´im™ive +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +85  +g_mode +, +b”_Žv_g_t + +g +, + +86 +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +87 +a¢_’c_rv®_t + +”v® + = {0,0,0}; + +88 cÚ¡ +ASN__PRIMITIVE_TYPE_t + * +¡ + = (cÚ¡ ASN__PRIMITIVE_TYPE_ˆ*) +¥Œ +; + +90 + `ASN_DEBUG +("%s %s‡s‡…rimitiveype (tm=%d)", + +91 +cb +?"Encodšg":"E¡im©šg", +td +-> +Çme +, +g_mode +); + +93 +”v® +. +’coded + = + `d”_wr™e_gs +( +td +, +¡ +-> +size +, +g_mode +, 0, +g +, + +94 +cb +, +­p_key +); + +95 + `ASN_DEBUG +("% wrِg %d", +td +-> +Çme +, () +”v® +. +’coded +); + +96 if( +”v® +. +’coded + == -1) { + +97 +”v® +. +çžed_ty³ + = +td +; + +98 +”v® +. +¡ruùu»_±r + = +¥Œ +; + +99  +”v® +; + +102 if( +cb + && +¡ +-> +buf +) { + +103 if( + `cb +( +¡ +-> +buf +, st-> +size +, +­p_key +) < 0) { + +104 +”v® +. +’coded + = -1; + +105 +”v® +. +çžed_ty³ + = +td +; + +106 +”v® +. +¡ruùu»_±r + = +¥Œ +; + +107  +”v® +; + +110 + `as£¹ +( +¡ +-> +buf + || st-> +size + == 0); + +113 +”v® +. +’coded + +ð +¡ +-> +size +; + +114 + `ASN__ENCODED_OK +( +”v® +); + +115 + } +} + +118 + $ASN__PRIMITIVE_TYPE_ä“ +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, * +¥Œ +, + +119 +a¢_¡ruù_ä“_m‘hod + +m‘hod +) { + +120 +ASN__PRIMITIVE_TYPE_t + * +¡ + = (ASN__PRIMITIVE_TYPE_ˆ*) +¥Œ +; + +122 if(! +td + || ! +¥Œ +) + +125 + `ASN_DEBUG +("F»ešg % a ¨´im™ivty³", +td +-> +Çme +); + +127 if( +¡ +-> +buf +) + +128 + `FREEMEM +( +¡ +-> +buf +); + +130  +m‘hod +) { + +131  +ASFM_FREE_EVERYTHING +: + +132 + `FREEMEM +( +¥Œ +); + +134  +ASFM_FREE_UNDERLYING +: + +136  +ASFM_FREE_UNDERLYING_AND_RESET +: + +137 + `mem£t +( +¥Œ +, 0, ( +ASN__PRIMITIVE_TYPE_t +)); + +140 + } +} + +146  + sxdp_¬g_s + { + +147 cÚ¡ +a¢_TYPE_desütÜ_t + * + mty³_desütÜ +; + +148 * + m¡ruù_key +; + +149 +x”_´im™ive_body_decod”_f + * + m´im_body_decod” +; + +150  + mdecoded_som‘hšg +; + +151  + mwªt_mÜe +; + +160 + $x”_decode__uÃx³ùed_g +(* +key +, cÚ¡ * +chunk_buf +, +size_t + +chunk_size +) { + +161  +xdp_¬g_s + * +¬g + = (xdp_¬g_ *) +key +; + +162 +x”_pbd_rv® + +b»t +; + +167 + `as£¹ +( +chunk_size + && ((cÚ¡ *) +chunk_buf +)[0] == 0x3c); + +172 if( +¬g +-> +decoded_som‘hšg +) + +175 +b»t + = +¬g +-> + `´im_body_decod” +×rg-> +ty³_desütÜ +, + +176 +¬g +-> +¡ruù_key +, +chunk_buf +, +chunk_size +); + +177  +b»t +) { + +178  +XPBD_SYSTEM_FAILURE +: + +179  +XPBD_DECODER_LIMIT +: + +180  +XPBD_BROKEN_ENCODING +: + +182  +XPBD_BODY_CONSUMED +: + +184 +¬g +-> +decoded_som‘hšg + = 1; + +186  +XPBD_NOT_BODY_IGNORE +: + +191 + } +} + +193  +ssize_t + + +194 + $x”_decode__´im™ive_body +(* +key +, cÚ¡ * +chunk_buf +, +size_t + +chunk_size +,  +have_mÜe +) { + +195  +xdp_¬g_s + * +¬g + = (xdp_¬g_ *) +key +; + +196 +x”_pbd_rv® + +b»t +; + +197 +size_t + +Ëad_w¥_size +; + +199 if( +¬g +-> +decoded_som‘hšg +) { + +200 if( + `x”_wh™e¥aû_¥ª +( +chunk_buf +, +chunk_size +) == chunk_size) { + +206  +chunk_size +; + +214 if(! +have_mÜe +) { + +223 +¬g +-> +wªt_mÜe + = 1; + +227 +Ëad_w¥_size + = + `x”_wh™e¥aû_¥ª +( +chunk_buf +, +chunk_size +); + +228 +chunk_buf + = (cÚ¡ *)chunk_buà+ +Ëad_w¥_size +; + +229 +chunk_size + -ð +Ëad_w¥_size +; + +231 +b»t + = +¬g +-> + `´im_body_decod” +×rg-> +ty³_desütÜ +, + +232 +¬g +-> +¡ruù_key +, +chunk_buf +, +chunk_size +); + +233  +b»t +) { + +234  +XPBD_SYSTEM_FAILURE +: + +235  +XPBD_DECODER_LIMIT +: + +236  +XPBD_BROKEN_ENCODING +: + +238  +XPBD_BODY_CONSUMED +: + +240 +¬g +-> +decoded_som‘hšg + = 1; + +242  +XPBD_NOT_BODY_IGNORE +: + +243  +Ëad_w¥_size + + +chunk_size +; + +247 + } +} + +250 +a¢_dec_rv®_t + + +251 + $x”_decode_´im™ive +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +252 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¥Œ +, + +253 +size_t + +¡ruù_size +, cÚ¡ * +Ýt_mÇme +, + +254 cÚ¡ * +buf_±r +, +size_t + +size +, + +255 +x”_´im™ive_body_decod”_f + * +´im_body_decod” +) { + +256 cÚ¡ * +xml_g + = +Ýt_mÇme + ? o±_mÇm: +td +->xml_tag; + +257 +a¢_¡ruù_ùx_t + +s_ùx +; + +258  +xdp_¬g_s + +s_¬g +; + +259 +a¢_dec_rv®_t + +rc +; + +264 if(!* +¥Œ +) { + +265 * +¥Œ + = + `CALLOC +(1, +¡ruù_size +); + +266 if(!* +¥Œ +è +ASN__DECODE_FAILED +; + +269 + `mem£t +(& +s_ùx +, 0, (s_ctx)); + +270 +s_¬g +. +ty³_desütÜ + = +td +; + +271 +s_¬g +. +¡ruù_key + = * +¥Œ +; + +272 +s_¬g +. +´im_body_decod” + =…rim_body_decoder; + +273 +s_¬g +. +decoded_som‘hšg + = 0; + +274 +s_¬g +. +wªt_mÜe + = 0; + +276 +rc + = + `x”_decode_g’”® +( +Ýt_codec_ùx +, & +s_ùx +, & +s_¬g +, + +277 +xml_g +, +buf_±r +, +size +, + +278 +x”_decode__uÃx³ùed_g +, +x”_decode__´im™ive_body +); + +279  +rc +. +code +) { + +280  +RC_OK +: + +281 if(! +s_¬g +. +decoded_som‘hšg +) { + +282  +ch +; + +283 + `ASN_DEBUG +("Primitive body is‚ot„ecognized, " + +290 if( + `´im_body_decod” +( +s_¬g +. +ty³_desütÜ +, + +291 +s_¬g +. +¡ruù_key +, & +ch +, 0) + +292 !ð +XPBD_BODY_CONSUMED +) { + +296 +ASN__DECODE_FAILED +; + +300  +RC_WMORE +: + +305 +rc +. +cÚsumed + = 0; + +307  +RC_FAIL +: + +308 +rc +. +cÚsumed + = 0; + +309 if( +s_¬g +. +wªt_mÜe +) + +310 +rc +. +code + = +RC_WMORE +; + +312 +ASN__DECODE_FAILED +; + +315  +rc +; + +316 + } +} + + @asn_internal.c + +1  + ~ + +3 +ssize_t + + +4 + $a¢__fÜm©_to_ÿÎback +((* +cb +)(cÚ¡ *, +size_t +, * +key +), *key, + +5 cÚ¡ * +fmt +, ...) { + +6  +sü©ch +[64]; + +7 * +buf + = +sü©ch +; + +8 +size_t + +buf_size + = ( +sü©ch +); + +9  +wrÙe +; + +10  +cb_»t +; + +13 +va_li¡ + +¬gs +; + +14 + `va_¡¬t +( +¬gs +, +fmt +); + +16 +wrÙe + = + `v¢´štf +( +buf +, +buf_size +, +fmt +, +¬gs +); + +17 if( +wrÙe + < ( +ssize_t +) +buf_size +) { + +18 if( +wrÙe + < 0) { + +19 if( +buf + !ð +sü©ch +è + `FREEMEM +(buf); + +20 + `va_’d +( +¬gs +); + +26 +buf_size + <<= 1; + +27 if( +buf + =ð +sü©ch +) { + +28 +buf + = + `MALLOC +( +buf_size +); + +29 if(! +buf +è{ + `va_’d +( +¬gs +);  -1; } + +31 * +p + = + `REALLOC +( +buf +, +buf_size +); + +32 if(! +p +) { + +33 + `FREEMEM +( +buf +); + +34 + `va_’d +( +¬gs +); + +37 +buf + = +p +; + +41 +cb_»t + = + `cb +( +buf +, +wrÙe +, +key +); + +42 if( +buf + !ð +sü©ch +è + `FREEMEM +(buf); + +43 if( +cb_»t + < 0) { + +47  +wrÙe +; + +48 + } +} + + @asn_random_fill.c + +6  + ~ + +7  + ~ + +8  + ~ + +11 + $a¢_¿ndom_fžl +(cÚ¡  +a¢_TYPE_desütÜ_s + * +td +, ** +¡ruù_±r +, + +12 +size_t + +Ëngth +) { + +14 if( +td + &&d-> +Ý +-> +¿ndom_fžl +) { + +15 +a¢_¿ndom_fžl_»suÉ_t + +»s + = + +16 +td +-> +Ý +-> + `¿ndom_fžl +Ñd, +¡ruù_±r +, 0, +Ëngth +); + +17  ( +»s +. +code + =ð +ARFILL_OK +) ? 0 : -1; + +21 + } +} + +23  +uštmax_t + + +24 + $a¢__štmax_¿nge +( +štmax_t + +lb +, iÁmax_ˆ +ub +) { + +25 + `as£¹ +( +lb + <ð +ub +); + +26 if(( +ub + < 0è=ð( +lb + < 0)) { + +27  +ub + - +lb +; + +28 } if( +lb + < 0) { + +29  1 + (( +uštmax_t +) +ub + + (uštmax_t)-( +lb + + 1)); + +31 + `as£¹ +(!"Unreachable"); + +34 + } +} + +36 +štmax_t + + +37 + $a¢_¿ndom_b‘w“n +( +štmax_t + +lb +, iÁmax_ˆ +rb +) { + +38 if( +lb + =ð +rb +) { + +39  +lb +; + +41 cÚ¡ +uštmax_t + +štmax_max + = ((~(uintmax_t)0) >> 1); + +42 +uštmax_t + +¿nge + = + `a¢__štmax_¿nge +( +lb +, +rb +); + +43 +uštmax_t + +v®ue + = 0; + +44 +uštmax_t + +gÙ_’ŒÝy + = 0; + +46 + `as£¹ +( +RAND_MAX + > 0xffffff); + +47 + `as£¹ +( +¿nge + < +štmax_max +); + +49 ; +gÙ_’ŒÝy + < +¿nge +;) { + +50 +gÙ_’ŒÝy + = (got_entropy << 24) | 0xffffff; + +51 +v®ue + = (v®u<< 24è| ( + `¿ndom +() % 0xffffff); + +54  +lb + + ( +štmax_t +)( +v®ue + % ( +¿nge + + 1)); + +56 + } +} + + @ber_decoder.c + +5  + ~ + +7 #undeà +ADVANCE + + +8  + #ADVANCE +( +num_by‹s +) do { \ + +9 +size_t + +num + = +num_by‹s +; \ + +10 +±r + = ((cÚ¡ *íŒè+ +num +; \ + +11 +size + -ð +num +; \ + +12 +cÚsumed_my£lf + +ð +num +; \ + +13 } 0) + + ) + +14 #undeà +RETURN + + +15  + #RETURN +( +_code +) do { \ + +16 +a¢_dec_rv®_t + +rv® +; \ + +17 +rv® +. +code + = +_code +; \ + +18 if( +Ýt_ùx +èÝt_ùx-> +¡• + = step; \ + +19 if( +_code + =ð +RC_OK + || +Ýt_ùx +) \ + +20 +rv® +. +cÚsumed + = +cÚsumed_my£lf +; \ + +22 +rv® +. +cÚsumed + = 0; \ + +23  +rv® +; \ + +24 } 0) + + ) + +29 +a¢_dec_rv®_t + + +30 + $b”_decode +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +31 cÚ¡ +a¢_TYPE_desütÜ_t + * +ty³_desütÜ +, ** +¡ruù_±r +, + +32 cÚ¡ * +±r +, +size_t + +size +) { + +33 +a¢_codec_ùx_t + +s_codec_ùx +; + +39 if( +Ýt_codec_ùx +) { + +40 if( +Ýt_codec_ùx +-> +max_¡ack_size +) { + +41 +s_codec_ùx + = * +Ýt_codec_ùx +; + +42 +Ýt_codec_ùx + = & +s_codec_ùx +; + +46 + `mem£t +(& +s_codec_ùx +, 0, (s_codec_ctx)); + +47 +s_codec_ùx +. +max_¡ack_size + = +ASN__DEFAULT_STACK_MAX +; + +48 +Ýt_codec_ùx + = & +s_codec_ùx +; + +54  +ty³_desütÜ +-> +Ý +-> + `b”_decod” +( +Ýt_codec_ùx +,ype_descriptor, + +55 +¡ruù_±r +, + +56 +±r +, +size +, + +59 + } +} + +64 +a¢_dec_rv®_t + + +65 + $b”_check_gs +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +66 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, +a¢_¡ruù_ùx_t + * +Ýt_ùx +, + +67 cÚ¡ * +±r +, +size_t + +size +,  +g_mode +,  +Ï¡_g_fÜm +, + +68 +b”_Žv_Ën_t + * +Ï¡_Ëngth +, * +Ýt_Žv_fÜm +) { + +69 +ssize_t + +cÚsumed_my£lf + = 0; + +70 +ssize_t + +g_Ën +; + +71 +ssize_t + +Ën_Ën +; + +72 +b”_Žv_g_t + +Žv_g +; + +73 +b”_Žv_Ën_t + +Žv_Ën +; + +74 +b”_Žv_Ën_t + +lim™_Ën + = -1; + +75  +ex³ù_00_‹rmš©Üs + = 0; + +76  +Žv_cÚ¡r + = -1; + +77  +¡• + = +Ýt_ùx + ? opt_ctx->step : 0; + +78  +gno +; + +83 if( + `ASN__STACK_OVERFLOW_CHECK +( +Ýt_codec_ùx +)) + +84 + `RETURN +( +RC_FAIL +); + +108 +gno + = +¡• + + +109 + ( +g_mode +==1?-1:0) + +111 + `ASN_DEBUG +("ber_check_tags(%s, size=%ld,m=%d, step=%d,agno=%d)", + +112 +td +-> +Çme +, () +size +, +g_mode +, +¡• +, +gno +); + +115 if( +g_mode + =ð0 && +gno + =ð() +td +-> +gs_couÁ +) { + +121 +g_Ën + = + `b”_ãtch_g +( +±r +, +size +, & +Žv_g +); + +122  +g_Ën +) { + +123 -1: + `RETURN +( +RC_FAIL +); + +124 0: + `RETURN +( +RC_WMORE +); + +126 +Žv_cÚ¡r + = + `BER_TLV_CONSTRUCTED +( +±r +); + +127 +Ën_Ën + = + `b”_ãtch_Ëngth +( +Žv_cÚ¡r +, + +128 (cÚ¡ *) +±r + + +g_Ën +, +size + -ag_Ën, & +Žv_Ën +); + +129  +Ën_Ën +) { + +130 -1: + `RETURN +( +RC_FAIL +); + +131 0: + `RETURN +( +RC_WMORE +); + +133 + `ASN_DEBUG +("Advancing %ld in ANY case", + +134 ()( +g_Ën + + +Ën_Ën +)); + +135 + `ADVANCE +( +g_Ën + + +Ën_Ën +); + +137 + `as£¹ +( +gno + < () +td +-> +gs_couÁ +); + +139 () +gno +;agnØ< () +td +-> +gs_couÁ +;agno++, +¡• +++) { + +144 +g_Ën + = + `b”_ãtch_g +( +±r +, +size +, & +Žv_g +); + +145 + `ASN_DEBUG +("Fetchingag from {%p,%ld}: " + +147 +±r +, () +size +, + +148 () +g_Ën +, +¡• +, +gno +, + +149 + `b”_Žv_g_¡ršg +( +Žv_g +)); + +150  +g_Ën +) { + +151 -1: + `RETURN +( +RC_FAIL +); + +152 0: + `RETURN +( +RC_WMORE +); + +155 +Žv_cÚ¡r + = + `BER_TLV_CONSTRUCTED +( +±r +); + +161 if( +g_mode + !ð0 && +¡• + == 0) { + +168 + `as£¹ +( +gno + >= 0); + +169 if( +Žv_g + !ð +td +-> +gs +[ +gno +]) { + +173 + `ASN_DEBUG +("Expected: %s, " + +175 + `b”_Žv_g_¡ršg +( +td +-> +gs +[ +gno +]), + +176 +gno +, +g_mode + + +178 + `RETURN +( +RC_FAIL +); + +189 if( +gno + < (() +td +-> +gs_couÁ + - 1)) { + +190 if( +Žv_cÚ¡r + == 0) { + +191 + `ASN_DEBUG +("tlv_constr = %d,ƒxpfail", + +192 +Žv_cÚ¡r +); + +193 + `RETURN +( +RC_FAIL +); + +196 if( +Ï¡_g_fÜm + !ð +Žv_cÚ¡r + + +197 && +Ï¡_g_fÜm + != -1) { + +198 + `ASN_DEBUG +("last_tag_form %d != %d", + +199 +Ï¡_g_fÜm +, +Žv_cÚ¡r +); + +200 + `RETURN +( +RC_FAIL +); + +207 +Ën_Ën + = + `b”_ãtch_Ëngth +( +Žv_cÚ¡r +, + +208 (cÚ¡ *) +±r + + +g_Ën +, +size + -ag_Ën, & +Žv_Ën +); + +209 + `ASN_DEBUG +("F‘chšg†’ = %ld", () +Ën_Ën +); + +210  +Ën_Ën +) { + +211 -1: + `RETURN +( +RC_FAIL +); + +212 0: + `RETURN +( +RC_WMORE +); + +222 if( +Žv_Ën + == -1) { + +226 if( +lim™_Ën + == -1) { + +227 +ex³ù_00_‹rmš©Üs +++; + +229 + `ASN_DEBUG +("Unexpected indefinite†ength " + +231 + `RETURN +( +RC_FAIL +); + +233 + `ADVANCE +( +g_Ën + + +Ën_Ën +); + +236 if( +ex³ù_00_‹rmš©Üs +) { + +237 + `ASN_DEBUG +("Unexpected definite†ength " + +239 + `RETURN +( +RC_FAIL +); + +247 if( +lim™_Ën + == -1) { + +248 +lim™_Ën + = +Žv_Ën + + +g_Ën + + +Ën_Ën +; + +249 if( +lim™_Ën + < 0) { + +251 + `RETURN +( +RC_FAIL +); + +253 } if( +lim™_Ën + !ð +Žv_Ën + + +g_Ën + + +Ën_Ën +) { + +258 + `ASN_DEBUG +("Outer TLV is %ld‡nd inner is %ld", + +259 () +lim™_Ën +, () +Žv_Ën +); + +260 + `RETURN +( +RC_FAIL +); + +263 + `ADVANCE +( +g_Ën + + +Ën_Ën +); + +265 +lim™_Ën + -ð( +g_Ën + + +Ën_Ën +); + +266 if(( +ssize_t +) +size + > +lim™_Ën +) { + +271 +size + = +lim™_Ën +; + +275 if( +Ýt_Žv_fÜm +) + +276 * +Ýt_Žv_fÜm + = +Žv_cÚ¡r +; + +277 if( +ex³ù_00_‹rmš©Üs +) + +278 * +Ï¡_Ëngth + = - +ex³ù_00_‹rmš©Üs +; + +280 * +Ï¡_Ëngth + = +Žv_Ën +; + +282 + `RETURN +( +RC_OK +); + +283 + } +} + + @ber_tlv_length.c + +5  + ~ + +6  + ~ + +7  + ~ + +9 +ssize_t + + +10 + $b”_ãtch_Ëngth +( +_is_cÚ¡ruùed +, cÚ¡ * +buåŒ +, +size_t + +size +, + +11 +b”_Žv_Ën_t + * +Ën_r +) { + +12 cÚ¡ +ušt8_t + * +buf + = (cÚ¡ ušt8_ˆ*) +buåŒ +; + +13  +où +; + +15 if( +size + == 0) + +18 +où + = *(cÚ¡ +ušt8_t + *) +buf +; + +19 if(( +où + & 0x80) == 0) { + +23 * +Ën_r + = +où +; + +26 +b”_Žv_Ën_t + +Ën +; + +27 +size_t + +sk³d +; + +29 if( +_is_cÚ¡ruùed + && +où + == 0x80) { + +30 * +Ën_r + = -1; + +34 if( +où + == 0xff) { + +39 +où + &= 0x7F; + +40  +Ën + = 0, +buf +++, +sk³d + = 1; + +41 +où + && (++ +sk³d + <ð +size +); +buf +++, oct--) { + +44 if(!( +Ën + >> ((8 * (len)) - (8+1)))) { + +45 +Ën + = (ËÀ<< 8è| * +buf +; + +52 if( +où + == 0) { + +53 if( +Ën + < 0 ||†’ > +RSSIZE_MAX +) { + +58 * +Ën_r + = +Ën +; + +59  +sk³d +; + +65 + } +} + +67 +ssize_t + + +68 + $b”_sk_Ëngth +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +69  +_is_cÚ¡ruùed +, cÚ¡ * +±r +, +size_t + +size +) { + +70 +b”_Žv_Ën_t + +vËn +; + +71 +ssize_t + +Ž +; + +72 +ssize_t + +Î +; + +73 +size_t + +sk +; + +78 if( + `ASN__STACK_OVERFLOW_CHECK +( +Ýt_codec_ùx +)) + +84 +Î + = + `b”_ãtch_Ëngth +( +_is_cÚ¡ruùed +, +±r +, +size +, & +vËn +); + +85 if( +Î + <= 0) †l; + +90 if( +vËn + >= 0) { + +91 +sk + = +Î + + +vËn +; + +92 if( +sk + > +size +) + +94  +sk +; + +100 + `ASN_DEBUG +("Skipping indefinite†ength"); + +101  +sk + = +Î +, +±r + = ((cÚ¡ *íŒè+†l, +size + -=†l;;) { + +102 +b”_Žv_g_t + +g +; + +105 +Ž + = + `b”_ãtch_g +( +±r +, +size +, & +g +); + +106 if( +Ž + <= 0) l; + +108 +Î + = + `b”_sk_Ëngth +( +Ýt_codec_ùx +, + +109 + `BER_TLV_CONSTRUCTED +( +±r +), + +110 ((cÚ¡ *) +±r +è+ +Ž +, +size + -l); + +111 if( +Î + <= 0) †l; + +113 +sk + +ð +Ž + + +Î +; + +120 if(((cÚ¡ +ušt8_t + *) +±r +)[0] == 0 + +121 && ((cÚ¡ +ušt8_t + *) +±r +)[1] == 0) + +122  +sk +; + +124 +±r + = ((cÚ¡ *íŒè+ +Ž + + +Î +; + +125 +size + -ð +Ž + + +Î +; + +129 + } +} + +131 +size_t + + +132 + $d”_Žv_Ëngth_£rŸlize +( +b”_Žv_Ën_t + +Ën +, * +buå +, +size_t + +size +) { + +133 +size_t + +»quœed_size +; + +134 +ušt8_t + * +buf + = (ušt8_ˆ*) +buå +; + +135 +ušt8_t + * +’d +; + +136  +i +; + +138 if( +Ën + <= 127) { + +140 if( +size +è* +buf + = ( +ušt8_t +) +Ën +; + +147  +»quœed_size + = 1, +i + = 8; i < 8 * ()( +Ën +); i += 8) { + +148 if( +Ën + >> +i +) + +149 +»quœed_size +++; + +154 if( +size + <ð +»quœed_size +) + +155  +»quœed_size + + 1; + +157 * +buf +++ = ( +ušt8_t +)(0x80 | +»quœed_size +); + +162 +’d + = +buf + + +»quœed_size +; + +163  +i + -ð8; +buf + < +’d +; i -= 8, buf++) + +164 * +buf + = ( +ušt8_t +)( +Ën + >> +i +); + +166  +»quœed_size + + 1; + +167 + } +} + + @ber_tlv_tag.c + +5  + ~ + +6  + ~ + +7  + ~<”ºo.h +> + +9 +ssize_t + + +10 + $b”_ãtch_g +(cÚ¡ * +±r +, +size_t + +size +, +b”_Žv_g_t + * +g_r +) { + +11 +b”_Žv_g_t + +v® +; + +12 +b”_Žv_g_t + +tþass +; + +13 +size_t + +sk³d +; + +15 if( +size + == 0) + +18 +v® + = *(cÚ¡ +ušt8_t + *) +±r +; + +19 +tþass + = ( +v® + >> 6); + +20 if(( +v® + &= 0x1F) != 0x1F) { + +25 * +g_r + = ( +v® + << 2è| +tþass +; + +33  +v® + = 0, +±r + = ((cÚ¡ *íŒè+ 1, +sk³d + = 2; + +34 +sk³d + <ð +size +; + +35 +±r + = ((cÚ¡ *íŒè+ 1, +sk³d +++) { + +36  +où + = *(cÚ¡ +ušt8_t + *) +±r +; + +37 if( +où + & 0x80) { + +38 +v® + = (v® << 7è| ( +où + & 0x7F); + +43 if( +v® + >> ((8 * (val)) - 9)) { + +51 +v® + = (v® << 7è| +où +; + +52 * +g_r + = ( +v® + << 2è| +tþass +; + +53  +sk³d +; + +58 + } +} + +61 +ssize_t + + +62 + $b”_Žv_g_fwr™e +( +b”_Žv_g_t + +g +, +FILE + * +f +) { + +63  +buf +[("[APPLICATION ]") + 32]; + +64 +ssize_t + +»t +; + +66 +»t + = + `b”_Žv_g_¢´št +( +g +, +buf +, (buf)); + +67 if( +»t + >ð( +ssize_t +)( +buf +) ||„et < 2) { + +68 +”ºo + = +EPERM +; + +72  + `fwr™e +( +buf +, 1, +»t +, +f +); + +73 + } +} + +75 +ssize_t + + +76 + $b”_Žv_g_¢´št +( +b”_Žv_g_t + +g +, * +buf +, +size_t + +size +) { + +77 cÚ¡ * +ty³ + = 0; + +78  +»t +; + +80  +g + & 0x3) { + +81  +ASN_TAG_CLASS_UNIVERSAL +: +ty³ + = "UNIVERSAL "; ; + +82  +ASN_TAG_CLASS_APPLICATION +: +ty³ + = "APPLICATION "; ; + +83  +ASN_TAG_CLASS_CONTEXT +: +ty³ + = ""; ; + +84  +ASN_TAG_CLASS_PRIVATE +: +ty³ + = "PRIVATE "; ; + +87 +»t + = + `¢´štf +( +buf +, +size +, "[%s%u]", +ty³ +, (() +g +) >> 2); + +88 if( +»t + <ð0 && +size +è +buf +[0] = '\0'; + +90  +»t +; + +91 + } +} + +94 + $b”_Žv_g_¡ršg +( +b”_Žv_g_t + +g +) { + +95  +buf +[("[APPLICATION ]") + 32]; + +97 () + `b”_Žv_g_¢´št +( +g +, +buf +, (buf)); + +99  +buf +; + +100 + } +} + +103 +size_t + + +104 + $b”_Žv_g_£rŸlize +( +b”_Žv_g_t + +g +, * +buå +, +size_t + +size +) { + +105  +tþass + = + `BER_TAG_CLASS +( +g +); + +106 +b”_Žv_g_t + +tv® + = + `BER_TAG_VALUE +( +g +); + +107 +ušt8_t + * +buf + = (ušt8_ˆ*) +buå +; + +108 +ušt8_t + * +’d +; + +109 +size_t + +»quœed_size +; + +110 +size_t + +i +; + +112 if( +tv® + <= 30) { + +114 if( +size +è +buf +[0] = ( +tþass + << 6è| +tv® +; + +116 } if( +size +) { + +117 * +buf +++ = ( +tþass + << 6) | 0x1F; + +118 +size +--; + +124  +»quœed_size + = 1, +i + = 7; i < 8 * ( +tv® +); i += 7) { + +125 if( +tv® + >> +i +) + +126 +»quœed_size +++; + +131 if( +size + < +»quœed_size +) + +132  +»quœed_size + + 1; + +137 +’d + = +buf + + +»quœed_size + - 1; + +138  +i + -ð7; +buf + < +’d +; i -= 7, buf++) + +139 * +buf + = 0x80 | (( +tv® + >> +i +) & 0x7F); + +140 * +buf + = ( +tv® + & 0x7F); + +142  +»quœed_size + + 1; + +143 + } +} + + @constr_CHOICE.c + +5  + ~ + +6  + ~ + +7  + ~<³r_ݒty³.h +> + +14  + #LEFT + (( +size +<( +size_t +) +ùx +-> +Ëá +)?size:(size_t)ùx->Ëá) + + ) + +27  + #SIZE_VIOLATION + ( +ùx +-> +Ëá + >ð0 && ( +size_t +)ùx->Ëá <ð +size +) + + ) + +33 #undeà +ADVANCE + + +34  + #ADVANCE +( +num_by‹s +) do { \ + +35 +size_t + +num + = +num_by‹s +; \ + +36 +±r + = ((cÚ¡ *íŒè+ +num +;\ + +37 +size + -ð +num +; \ + +38 if( +ùx +-> +Ëá + >= 0) \ + +39 +ùx +-> +Ëá + -ð +num +; \ + +40 +cÚsumed_my£lf + +ð +num +; \ + +41 } 0) + + ) + +46 #undeà +NEXT_PHASE + + +47  + #NEXT_PHASE +( +ùx +) do { \ + +48 +ùx +-> +pha£ +++; \ + +49 +ùx +-> +¡• + = 0; \ + +50 } 0) + + ) + +55 #undeà +RETURN + + +56  + #RETURN +( +_code +) do { \ + +57 +rv® +. +code + = +_code +; \ + +58 +rv® +. +cÚsumed + = +cÚsumed_my£lf +;\ + +59  +rv® +; \ + +60 } 0) + + ) + +65  +_ãtch_´e£Á_idx +(cÚ¡ * +¡ruù_±r +,  +off +, + +66  +size +); + +67  +_£t_´e£Á_idx +(* +¥Œ +,  +off£t +,  +size +, + +68  +´es +); + +69 cÚ¡ * +_g‘_memb”_±r +(cÚ¡ +a¢_TYPE_desütÜ_t + *, + +70 cÚ¡ * +¥Œ +, +a¢_TYPE_memb”_t + ** +–m +, + +71 * +´e£Á +); + +77 + $_£¬ch4g +(cÚ¡ * +­ +, cÚ¡ * +bp +) { + +78 cÚ¡ +a¢_TYPE_g2memb”_t + * +a + = (cÚ¡‡¢_TYPE_g2memb”_ˆ*) +­ +; + +79 cÚ¡ +a¢_TYPE_g2memb”_t + * +b + = (cÚ¡‡¢_TYPE_g2memb”_ˆ*) +bp +; + +81  +a_þass + = + `BER_TAG_CLASS +( +a +-> +–_g +); + +82  +b_þass + = + `BER_TAG_CLASS +( +b +-> +–_g +); + +84 if( +a_þass + =ð +b_þass +) { + +85 +b”_Žv_g_t + +a_v®ue + = + `BER_TAG_VALUE +( +a +-> +–_g +); + +86 +b”_Žv_g_t + +b_v®ue + = + `BER_TAG_VALUE +( +b +-> +–_g +); + +88 if( +a_v®ue + =ð +b_v®ue +) + +90 if( +a_v®ue + < +b_v®ue +) + +94 } if( +a_þass + < +b_þass +) { + +99 + } +} + +104 +a¢_dec_rv®_t + + +105 + $CHOICE_decode_b” +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +106 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¡ruù_±r +, + +107 cÚ¡ * +±r +, +size_t + +size +,  +g_mode +) { + +111 cÚ¡ +a¢_CHOICE_¥ecifics_t + * +¥ecs + = + +112 (cÚ¡ +a¢_CHOICE_¥ecifics_t + *) +td +-> +¥ecifics +; + +113 +a¢_TYPE_memb”_t + * +–em’ts + = +td +->elements; + +118 * +¡ + = * +¡ruù_±r +; + +119 +a¢_¡ruù_ùx_t + * +ùx +; + +121 +b”_Žv_g_t + +Žv_g +; + +122 +ssize_t + +g_Ën +; + +123 +a¢_dec_rv®_t + +rv® +; + +125 +ssize_t + +cÚsumed_my£lf + = 0; + +127 + `ASN_DEBUG +("Decodšg % a CHOICE", +td +-> +Çme +); + +132 if( +¡ + == 0) { + +133 +¡ + = * +¡ruù_±r + = + `CALLOC +(1, +¥ecs +-> +¡ruù_size +); + +134 if( +¡ + == 0) { + +135 + `RETURN +( +RC_FAIL +); + +142 +ùx + = ( +a¢_¡ruù_ùx_t + *)((*) +¡ + + +¥ecs +-> +ùx_off£t +); + +147  +ùx +-> +pha£ +) { + +155 if( +g_mode + || +td +-> +gs_couÁ +) { + +156 +rv® + = + `b”_check_gs +( +Ýt_codec_ùx +, +td +, +ùx +, +±r +, +size +, + +157 +g_mode +, -1, & +ùx +-> +Ëá +, 0); + +158 if( +rv® +. +code + !ð +RC_OK +) { + +159 + `ASN_DEBUG +("%sagging check failed: %d", + +160 +td +-> +Çme +, +rv® +. +code +); + +161  +rv® +; + +164 if( +ùx +-> +Ëá + >= 0) { + +166 +ùx +-> +Ëá + +ð +rv® +. +cÚsumed +; + +168 + `ADVANCE +( +rv® +. +cÚsumed +); + +170 +ùx +-> +Ëá + = -1; + +173 + `NEXT_PHASE +( +ùx +); + +175 + `ASN_DEBUG +("Structure consumes %ld bytes, buffer %ld", + +176 () +ùx +-> +Ëá +, () +size +); + +183 +g_Ën + = + `b”_ãtch_g +( +±r +, +LEFT +, & +Žv_g +); + +184 + `ASN_DEBUG +("IÀ% CHOICEag†’gth %d", +td +-> +Çme +, () +g_Ën +); + +185  +g_Ën +) { + +186 0: if(! +SIZE_VIOLATION +è + `RETURN +( +RC_WMORE +); + +188 -1: + `RETURN +( +RC_FAIL +); + +192 cÚ¡ +a¢_TYPE_g2memb”_t + * +t2m +; + +193 +a¢_TYPE_g2memb”_t + +key +; + +195 +key +. +–_g + = +Žv_g +; + +196 +t2m + = (cÚ¡ +a¢_TYPE_g2memb”_t + *) + `b£¬ch +(& +key +, + +197 +¥ecs +-> +g2– +, s³cs-> +g2–_couÁ +, + +198 ( +¥ecs +-> +g2– +[0]), +_£¬ch4g +); + +199 if( +t2m +) { + +203 + `NEXT_PHASE +( +ùx +); + +204 +ùx +-> +¡• + = +t2m +-> +–_no +; + +206 } if( +¥ecs +-> +ext_¡¬t + == -1) { + +207 + `ASN_DEBUG +("Unexpectedag %s " + +209 + `b”_Žv_g_¡ršg +( +Žv_g +), +td +-> +Çme +); + +210 + `RETURN +( +RC_FAIL +); + +213 +ssize_t + +sk +; + +215 + `ASN_DEBUG +("Skipping unknownag %s", + +216 + `b”_Žv_g_¡ršg +( +Žv_g +)); + +218 +sk + = + `b”_sk_Ëngth +( +Ýt_codec_ùx +, + +219 + `BER_TLV_CONSTRUCTED +( +±r +), + +220 (cÚ¡ *) +±r + + +g_Ën +, + +221 +LEFT + - +g_Ën +); + +223  +sk +) { + +224 0: if(! +SIZE_VIOLATION +è + `RETURN +( +RC_WMORE +); + +226 -1: + `RETURN +( +RC_FAIL +); + +229 + `ADVANCE +( +sk + + +g_Ën +); + +230 + `RETURN +( +RC_OK +); + +240 +a¢_TYPE_memb”_t + * +–m +; + +241 * +memb_±r +; + +242 ** +memb_±r2 +; + +244 +–m + = & +–em’ts +[ +ùx +-> +¡• +]; + +251 if( +–m +-> +æags + & +ATF_POINTER +) { + +253 +memb_±r2 + = (**)((*) +¡ + + +–m +-> +memb_off£t +); + +259 +memb_±r + = (*) +¡ + + +–m +-> +memb_off£t +; + +260 +memb_±r2 + = & +memb_±r +; + +263 + `_£t_´e£Á_idx +( +¡ +, +¥ecs +-> +´es_off£t +, + +264 +¥ecs +-> +´es_size +, +ùx +-> +¡• + + 1); + +268 +rv® + = +–m +-> +ty³ +-> +Ý +-> + `b”_decod” +( +Ýt_codec_ùx +,ƒlm->type, + +269 +memb_±r2 +, +±r +, +LEFT +, +–m +-> +g_mode +); + +270  +rv® +. +code +) { + +271  +RC_OK +: + +273  +RC_WMORE +: + +274 if(! +SIZE_VIOLATION +) { + +275 + `ADVANCE +( +rv® +. +cÚsumed +); + +276 + `RETURN +( +RC_WMORE +); + +278 + `RETURN +( +RC_FAIL +); + +279  +RC_FAIL +: + +280 + `RETURN +( +rv® +. +code +); + +283 + `ADVANCE +( +rv® +. +cÚsumed +); + +286 + `NEXT_PHASE +( +ùx +); + +290 + `ASN_DEBUG +("CHOICE %s Leftover: %ld, size = %ld,m=%d,c=%d", + +291 +td +-> +Çme +, () +ùx +-> +Ëá +, () +size +, + +292 +g_mode +, +td +-> +gs_couÁ +); + +294 if( +ùx +-> +Ëá + > 0) { + +299 + `RETURN +( +RC_FAIL +); + +302 if( +ùx +-> +Ëá + == -1 + +303 && !( +g_mode + || +td +-> +gs_couÁ +)) { + +310 + `NEXT_PHASE +( +ùx +); + +317  +ùx +-> +Ëá + < 0) { + +318 +ssize_t + +Ž +; + +320 +Ž + = + `b”_ãtch_g +( +±r +, +LEFT +, & +Žv_g +); + +321  +Ž +) { + +322 0: if(! +SIZE_VIOLATION +è + `RETURN +( +RC_WMORE +); + +324 -1: + `RETURN +( +RC_FAIL +); + +330 if(((cÚ¡ +ušt8_t + *) +±r +)[0] == 0) { + +331 if( +LEFT + < 2) { + +332 if( +SIZE_VIOLATION +) + +333 + `RETURN +( +RC_FAIL +); + +335 + `RETURN +( +RC_WMORE +); + +336 } if(((cÚ¡ +ušt8_t + *) +±r +)[1] == 0) { + +340 + `ADVANCE +(2); + +341 +ùx +-> +Ëá +++; + +345 + `ASN_DEBUG +("Unexpected continuation in %s", + +346 +td +-> +Çme +); + +347 + `RETURN +( +RC_FAIL +); + +353 + `NEXT_PHASE +( +ùx +); + +359 + `RETURN +( +RC_OK +); + +360 + } +} + +362 +a¢_’c_rv®_t + + +363 + $CHOICE_’code_d” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +364  +g_mode +, +b”_Žv_g_t + +g +, +a¢_­p_cÚsume_by‹s_f + * +cb +, + +365 * +­p_key +) { + +366 cÚ¡ +a¢_CHOICE_¥ecifics_t + * +¥ecs + = (cÚ¡‡¢_CHOICE_¥ecifics_ˆ*) +td +-> +¥ecifics +; + +367 +a¢_TYPE_memb”_t + * +–m +; + +368 +a¢_’c_rv®_t + +”v® + = {0,0,0}; + +369 cÚ¡ * +memb_±r +; + +370 +size_t + +compu‹d_size + = 0; + +371  +´e£Á +; + +373 if(! +¥Œ +è +ASN__ENCODE_FAILED +; + +375 + `ASN_DEBUG +("%s %s‡s CHOICE", + +376 +cb +?"Encodšg":"E¡im©šg", +td +-> +Çme +); + +378 +´e£Á + = + `_ãtch_´e£Á_idx +( +¥Œ +, + +379 +¥ecs +-> +´es_off£t +, s³cs-> +´es_size +); + +385 if( +´e£Á + =ð0 ||…»£Á > +td +-> +–em’ts_couÁ +) { + +386 if( +´e£Á + =ð0 && +td +-> +–em’ts_couÁ + == 0) { + +388 +”v® +. +’coded + = 0; + +389 + `ASN__ENCODED_OK +( +”v® +); + +391 +ASN__ENCODE_FAILED +; + +397 +–m + = & +td +-> +–em’ts +[ +´e£Á +-1]; + +398 if( +–m +-> +æags + & +ATF_POINTER +) { + +399 +memb_±r + = + +400 *(cÚ¡ *cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +401 if( +memb_±r + == 0) { + +402 if( +–m +-> +ÝtiÚ® +) { + +403 +”v® +. +’coded + = 0; + +404 + `ASN__ENCODED_OK +( +”v® +); + +407 +ASN__ENCODE_FAILED +; + +410 +memb_±r + = (cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +418 if( +g_mode + =ð1 || +td +-> +gs_couÁ +) { + +422 +ssize_t + +»t +; + +425 +”v® + = +–m +-> +ty³ +-> +Ý +-> + `d”_’cod” +Ólm->ty³, +memb_±r +, + +426 +–m +-> +g_mode +,ƒlm-> +g +, 0, 0); + +427 if( +”v® +. +’coded + == -1) + +428  +”v® +; + +431 +»t + = + `d”_wr™e_gs +( +td +, +”v® +. +’coded +, +g_mode +, 1, +g +, + +432 +cb +, +­p_key +); + +433 if( +»t + == -1) + +434 +ASN__ENCODE_FAILED +; + +435 +compu‹d_size + +ð +»t +; + +441 +”v® + = +–m +-> +ty³ +-> +Ý +-> + `d”_’cod” +Ólm->ty³, +memb_±r +, + +442 +–m +-> +g_mode +,ƒlm-> +g +, +cb +, +­p_key +); + +443 if( +”v® +. +’coded + == -1) + +444  +”v® +; + +446 + `ASN_DEBUG +("Encoded CHOICE member in %ld bytes (+%ld)", + +447 () +”v® +. +’coded +, () +compu‹d_size +); + +449 +”v® +. +’coded + +ð +compu‹d_size +; + +451  +”v® +; + +452 + } +} + +454 +b”_Žv_g_t + + +455 + $CHOICE_outmo¡_g +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +±r +,  +g_mode +, +b”_Žv_g_t + +g +) { + +456 cÚ¡ +a¢_CHOICE_¥ecifics_t + * +¥ecs + = (cÚ¡‡¢_CHOICE_¥ecifics_ˆ*) +td +-> +¥ecifics +; + +457  +´e£Á +; + +459 + `as£¹ +( +g_mode + == 0); ()tag_mode; + +460 + `as£¹ +( +g + == 0); ()tag; + +465 +´e£Á + = + `_ãtch_´e£Á_idx +( +±r +, +¥ecs +-> +´es_off£t +, s³cs-> +´es_size +); + +467 if( +´e£Á + > 0 &&…»£Á <ð +td +-> +–em’ts_couÁ +) { + +468 cÚ¡ +a¢_TYPE_memb”_t + * +–m + = & +td +-> +–em’ts +[ +´e£Á +-1]; + +469 cÚ¡ * +memb_±r +; + +471 if( +–m +-> +æags + & +ATF_POINTER +) { + +472 +memb_±r + = *(const * const *) + +473 ((cÚ¡ *) +±r + + +–m +-> +memb_off£t +); + +475 +memb_±r + = (const *) + +476 ((cÚ¡ *) +±r + + +–m +-> +memb_off£t +); + +479  + `a¢_TYPE_outmo¡_g +( +–m +-> +ty³ +, +memb_±r +, + +480 +–m +-> +g_mode +,ƒlm-> +g +); + +482  ( +b”_Žv_g_t +)-1; + +484 + } +} + +487 + $CHOICE_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +488 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +489 cÚ¡ +a¢_CHOICE_¥ecifics_t + * +¥ecs + = + +490 (cÚ¡ +a¢_CHOICE_¥ecifics_t + *) +td +-> +¥ecifics +; + +491  +´e£Á +; + +493 if(! +¥Œ +) { + +494 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +496 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +503 +´e£Á + = + `_ãtch_´e£Á_idx +( +¥Œ +, +¥ecs +-> +´es_off£t +,¥ecs-> +´es_size +); + +504 if( +´e£Á + > 0 &&…»£Á <ð +td +-> +–em’ts_couÁ +) { + +505 +a¢_TYPE_memb”_t + * +–m + = & +td +-> +–em’ts +[ +´e£Á +-1]; + +506 cÚ¡ * +memb_±r +; + +508 if( +–m +-> +æags + & +ATF_POINTER +) { + +509 +memb_±r + = *(cÚ¡ * cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +510 if(! +memb_±r +) { + +511 if( +–m +-> +ÝtiÚ® +) + +513 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +515 +td +-> +Çme +, +–m +->Çme, +__FILE__ +, +__LINE__ +); + +519 +memb_±r + = (cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +522 if( +–m +-> +’codšg_cÚ¡¿šts +. +g’”®_cÚ¡¿šts +) { + +523  +–m +-> +’codšg_cÚ¡¿šts +. + `g’”®_cÚ¡¿šts +Ólm-> +ty³ +, +memb_±r +, + +524 +ùçžcb +, +­p_key +); + +526  +–m +-> +ty³ +-> +’codšg_cÚ¡¿šts +. + `g’”®_cÚ¡¿šts +(elm->type, + +527 +memb_±r +, +ùçžcb +, +­p_key +); + +530 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +532 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +535 + } +} + +537 #undeà +XER_ADVANCE + + +538  + #XER_ADVANCE +( +num_by‹s +) do { \ + +539 +size_t + +num + = +num_by‹s +; \ + +540 +buf_±r + = (cÚ¡ *)(((cÚ¡ *)buf_±rè+ +num +); \ + +541 +size + -ð +num +; \ + +542 +cÚsumed_my£lf + +ð +num +; \ + +543 } 0) + + ) + +548 +a¢_dec_rv®_t + + +549 + $CHOICE_decode_x” +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +550 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¡ruù_±r +, + +551 cÚ¡ * +Ýt_mÇme +, cÚ¡ * +buf_±r +, +size_t + +size +) { + +555 cÚ¡ +a¢_CHOICE_¥ecifics_t + * +¥ecs + = (cÚ¡‡¢_CHOICE_¥ecifics_ˆ*) +td +-> +¥ecifics +; + +556 cÚ¡ * +xml_g + = +Ýt_mÇme + ? o±_mÇm: +td +->xml_tag; + +561 * +¡ + = * +¡ruù_±r +; + +562 +a¢_¡ruù_ùx_t + * +ùx +; + +564 +a¢_dec_rv®_t + +rv® +; + +565 +ssize_t + +cÚsumed_my£lf + = 0; + +566 +size_t + +edx +; + +571 if( +¡ + == 0) { + +572 +¡ + = * +¡ruù_±r + = + `CALLOC +(1, +¥ecs +-> +¡ruù_size +); + +573 if( +¡ + =ð0è + `RETURN +( +RC_FAIL +); + +579 +ùx + = ( +a¢_¡ruù_ùx_t + *)((*) +¡ + + +¥ecs +-> +ùx_off£t +); + +580 if( +ùx +-> +pha£ + =ð0 && !* +xml_g +) + +581 +ùx +-> +pha£ + = 1; + +592  +edx + = +ùx +-> +¡• +; ctx-> +pha£ + <= 4;) { + +593 +px”_chunk_ty³_e + +ch_ty³ +; + +594 +ssize_t + +ch_size +; + +595 +x”_check_g_e + +tcv +; + +596 +a¢_TYPE_memb”_t + * +–m +; + +601 if( +ùx +-> +pha£ + == 2) { + +602 +a¢_dec_rv®_t + +tm´v® +; + +603 * +memb_±r +; + +604 ** +memb_±r2 +; + +605  +Þd_´e£Á +; + +607 +–m + = & +td +-> +–em’ts +[ +edx +]; + +609 if( +–m +-> +æags + & +ATF_POINTER +) { + +611 +memb_±r2 + = (**)((*) +¡ + + +612 + +–m +-> +memb_off£t +); + +614 +memb_±r + = (*) +¡ + + +–m +-> +memb_off£t +; + +615 +memb_±r2 + = & +memb_±r +; + +619 +tm´v® + = +–m +-> +ty³ +-> +Ý +-> + `x”_decod” +( +Ýt_codec_ùx +, + +620 +–m +-> +ty³ +, +memb_±r2 +,ƒlm-> +Çme +, + +621 +buf_±r +, +size +); + +622 + `XER_ADVANCE +( +tm´v® +. +cÚsumed +); + +623 + `ASN_DEBUG +("XER/CHOICE: itdf: [%s] code=%d", + +624 +–m +-> +ty³ +-> +Çme +, +tm´v® +. +code +); + +625 +Þd_´e£Á + = + `_ãtch_´e£Á_idx +( +¡ +, + +626 +¥ecs +-> +´es_off£t +, s³cs-> +´es_size +); + +627 + `as£¹ +( +Þd_´e£Á + =ð0 || old_´e£Á =ð +edx + + 1); + +629 + `_£t_´e£Á_idx +( +¡ +, + +630 +¥ecs +-> +´es_off£t +, s³cs-> +´es_size +, +edx + + 1); + +631 if( +tm´v® +. +code + !ð +RC_OK +) + +632 + `RETURN +( +tm´v® +. +code +); + +633 +ùx +-> +pha£ + = 3; + +638 if( +ùx +-> +pha£ + =ð3 && !* +xml_g +) { + +639 +ùx +-> +pha£ + = 5; + +640 + `RETURN +( +RC_OK +); + +646 +ch_size + = + `x”_Ãxt_tok’ +(& +ùx +-> +cڋxt +, +buf_±r +, +size +, & +ch_ty³ +); + +647 if( +ch_size + == -1) { + +648 + `RETURN +( +RC_FAIL +); + +650  +ch_ty³ +) { + +651  +PXER_WMORE +: + +652 + `RETURN +( +RC_WMORE +); + +653  +PXER_COMMENT +: + +654  +PXER_TEXT +: + +655 + `XER_ADVANCE +( +ch_size +); + +657  +PXER_TAG +: + +662 +tcv + = + `x”_check_g +( +buf_±r +, +ch_size +, +xml_g +); + +663 + `ASN_DEBUG +("XER/CHOICE checked [%c%c%c%c] vs [%s],cv=%d", + +664 +ch_size +>0?((cÚ¡ +ušt8_t + *) +buf_±r +)[0]:'?', + +665 +ch_size +>1?((cÚ¡ +ušt8_t + *) +buf_±r +)[1]:'?', + +666 +ch_size +>2?((cÚ¡ +ušt8_t + *) +buf_±r +)[2]:'?', + +667 +ch_size +>3?((cÚ¡ +ušt8_t + *) +buf_±r +)[3]:'?', + +668 +xml_g +, +tcv +); + +671 if( +ùx +-> +pha£ + == 4) { + +672 + `ASN_DEBUG +("skip_unknown(%d, %ld)", + +673 +tcv +, () +ùx +-> +Ëá +); + +674  + `x”_sk_unknown +( +tcv +, & +ùx +-> +Ëá +)) { + +676 +ùx +-> +pha£ + = 5; + +677 + `RETURN +( +RC_FAIL +); + +679 +ùx +-> +pha£ + = 3; + +682 + `XER_ADVANCE +( +ch_size +); + +685 +ùx +-> +pha£ + = 3; + +690  +tcv +) { + +691  +XCT_BOTH +: + +693  +XCT_CLOSING +: + +694 if( +ùx +-> +pha£ + != 3) + +696 + `XER_ADVANCE +( +ch_size +); + +697 +ùx +-> +pha£ + = 5; + +698 + `RETURN +( +RC_OK +); + +699  +XCT_OPENING +: + +700 if( +ùx +-> +pha£ + == 0) { + +701 + `XER_ADVANCE +( +ch_size +); + +702 +ùx +-> +pha£ + = 1; + +706  +XCT_UNKNOWN_OP +: + +707  +XCT_UNKNOWN_BO +: + +709 if( +ùx +-> +pha£ + != 1) + +715  +edx + = 0;ƒdx < +td +-> +–em’ts_couÁ +;ƒdx++) { + +716 +–m + = & +td +-> +–em’ts +[ +edx +]; + +717 +tcv + = + `x”_check_g +( +buf_±r +, +ch_size +, +–m +-> +Çme +); + +718  +tcv +) { + +719  +XCT_BOTH +: + +720  +XCT_OPENING +: + +724 +ùx +-> +¡• + = +edx +; + +725 +ùx +-> +pha£ + = 2; + +727  +XCT_UNKNOWN_OP +: + +728  +XCT_UNKNOWN_BO +: + +731 +edx + = +td +-> +–em’ts_couÁ +; + +736 if( +edx + !ð +td +-> +–em’ts_couÁ +) + +740 if( +¥ecs +-> +ext_¡¬t + != -1) { + +741 + `ASN_DEBUG +("Got‡nticipatedƒxtension"); + +747 if( +tcv + & +XCT_CLOSING +) { + +749 +ùx +-> +pha£ + = 3; + +751 +ùx +-> +Ëá + = 1; + +752 +ùx +-> +pha£ + = 4; + +754 + `XER_ADVANCE +( +ch_size +); + +763 + `ASN_DEBUG +("Unexpected XMLag [%c%c%c%c] in CHOICE [%s]" + +765 +ch_size +>0?((cÚ¡ +ušt8_t + *) +buf_±r +)[0]:'?', + +766 +ch_size +>1?((cÚ¡ +ušt8_t + *) +buf_±r +)[1]:'?', + +767 +ch_size +>2?((cÚ¡ +ušt8_t + *) +buf_±r +)[2]:'?', + +768 +ch_size +>3?((cÚ¡ +ušt8_t + *) +buf_±r +)[3]:'?', + +769 +td +-> +Çme +, +ùx +-> +pha£ +, +xml_g +); + +773 +ùx +-> +pha£ + = 5; + +774 + `RETURN +( +RC_FAIL +); + +775 + } +} + +778 +a¢_’c_rv®_t + + +779 + $CHOICE_’code_x” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +,  +žev– +, + +780 +x”_’cod”_æags_e + +æags +, +a¢_­p_cÚsume_by‹s_f + * +cb +, + +781 * +­p_key +) { + +782 cÚ¡ +a¢_CHOICE_¥ecifics_t + * +¥ecs + = + +783 (cÚ¡ +a¢_CHOICE_¥ecifics_t + *) +td +-> +¥ecifics +; + +784 +a¢_’c_rv®_t + +” + = {0,0,0}; + +785  +´e£Á + = 0; + +787 if(! +¥Œ +) + +788 +ASN__ENCODE_FAILED +; + +793 +´e£Á + = + `_ãtch_´e£Á_idx +( +¥Œ +, +¥ecs +-> +´es_off£t +,¥ecs-> +´es_size +); + +795 if( +´e£Á + =ð0 ||…»£Á > +td +-> +–em’ts_couÁ +) { + +796 +ASN__ENCODE_FAILED +; + +798 +a¢_’c_rv®_t + +tm³r + = {0,0,0}; + +799 +a¢_TYPE_memb”_t + * +–m + = & +td +-> +–em’ts +[ +´e£Á +-1]; + +800 cÚ¡ * +memb_±r + = +NULL +; + +801 cÚ¡ * +mÇme + = +–m +-> +Çme +; + +802  +mËn + = + `¡¾’ +( +mÇme +); + +804 if( +–m +-> +æags + & +ATF_POINTER +) { + +805 +memb_±r + = + +806 *(cÚ¡ *cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +807 if(! +memb_±r +è +ASN__ENCODE_FAILED +; + +809 +memb_±r + = (cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +812 +” +. +’coded + = 0; + +814 if(!( +æags + & +XER_F_CANONICAL +)è + `ASN__TEXT_INDENT +(1, +žev– +); + +815 + `ASN__CALLBACK3 +("<", 1, +mÇme +, +mËn +, ">", 1); + +817 +tm³r + = +–m +-> +ty³ +-> +Ý +-> + `x”_’cod” +Ólm->ty³, +memb_±r +, + +818 +žev– + + 1, +æags +, +cb +, +­p_key +); + +819 if( +tm³r +. +’coded + == -1) mper; + +820 +” +. +’coded + +ð +tm³r +.encoded; + +822 + `ASN__CALLBACK3 +("", 1); + +825 if(!( +æags + & +XER_F_CANONICAL +)è + `ASN__TEXT_INDENT +(1, +žev– + - 1); + +827 + `ASN__ENCODED_OK +( +” +); + +828 +cb_çžed +: + +829 +ASN__ENCODE_FAILED +; + +830 + } +} + +832 +a¢_dec_rv®_t + + +833 + $CHOICE_decode_u³r +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +834 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +835 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, ** +¥Œ +, + +836 +a¢_³r_d©a_t + * +pd +) { + +837 cÚ¡ +a¢_CHOICE_¥ecifics_t + * +¥ecs + = + +838 (cÚ¡ +a¢_CHOICE_¥ecifics_t + *) +td +-> +¥ecifics +; + +839 +a¢_dec_rv®_t + +rv +; + +840 cÚ¡ +a¢_³r_cÚ¡¿št_t + * +ù +; + +841 +a¢_TYPE_memb”_t + * +–m +; + +842 * +memb_±r +; + +843 ** +memb_±r2 +; + +844 * +¡ + = * +¥Œ +; + +845  +v®ue +; + +847 if( + `ASN__STACK_OVERFLOW_CHECK +( +Ýt_codec_ùx +)) + +848 +ASN__DECODE_FAILED +; + +853 if(! +¡ +) { + +854 +¡ + = * +¥Œ + = + `CALLOC +(1, +¥ecs +-> +¡ruù_size +); + +855 if(! +¡ +è +ASN__DECODE_FAILED +; + +858 if( +cÚ¡¿šts +è +ù + = &cÚ¡¿šts-> +v®ue +; + +859 if( +td +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +è +ù + = &td->’codšg_cÚ¡¿šts.³r_cÚ¡¿šts-> +v®ue +; + +860 +ù + = 0; + +862 if( +ù + && ct-> +æags + & +APC_EXTENSIBLE +) { + +863 +v®ue + = + `³r_g‘_ãw_b™s +( +pd +, 1); + +864 if( +v®ue + < 0è +ASN__DECODE_STARVED +; + +865 if( +v®ue +è +ù + = 0; + +868 if( +ù + && ct-> +¿nge_b™s + >= 0) { + +869 +v®ue + = + `³r_g‘_ãw_b™s +( +pd +, +ù +-> +¿nge_b™s +); + +870 if( +v®ue + < 0è +ASN__DECODE_STARVED +; + +871 + `ASN_DEBUG +("CHOICE %s got index %d in„ange %d", + +872 +td +-> +Çme +, +v®ue +, +ù +-> +¿nge_b™s +); + +873 if( +v®ue + > +ù +-> +uµ”_bound +) + +874 +ASN__DECODE_FAILED +; + +876 if( +¥ecs +-> +ext_¡¬t + == -1) + +877 +ASN__DECODE_FAILED +; + +878 +v®ue + = + `u³r_g‘_n¢nwn +( +pd +); + +879 if( +v®ue + < 0è +ASN__DECODE_STARVED +; + +880 +v®ue + +ð +¥ecs +-> +ext_¡¬t +; + +881 if(() +v®ue + >ð +td +-> +–em’ts_couÁ +) + +882 +ASN__DECODE_FAILED +; + +886 if( +¥ecs +-> +äom_ÿnÚiÿl_Üd” +) { + +887 + `ASN_DEBUG +("CHOICE…»£nû from wœ%d", +v®ue +); + +888 +v®ue + = +¥ecs +-> +äom_ÿnÚiÿl_Üd” +[value]; + +889 + `ASN_DEBUG +("CHOICE…»£nû indexƒfãùiv%d", +v®ue +); + +893 + `_£t_´e£Á_idx +( +¡ +, +¥ecs +-> +´es_off£t +, s³cs-> +´es_size +, +v®ue + + 1); + +895 +–m + = & +td +-> +–em’ts +[ +v®ue +]; + +896 if( +–m +-> +æags + & +ATF_POINTER +) { + +898 +memb_±r2 + = (**)((*) +¡ + + +–m +-> +memb_off£t +); + +900 +memb_±r + = (*) +¡ + + +–m +-> +memb_off£t +; + +901 +memb_±r2 + = & +memb_±r +; + +903 + `ASN_DEBUG +("Discov”ed CHOICE % ’code %s", +td +-> +Çme +, +–m +->name); + +905 if( +ù + && ct-> +¿nge_b™s + >= 0) { + +906 +rv + = +–m +-> +ty³ +-> +Ý +-> + `u³r_decod” +( +Ýt_codec_ùx +,ƒlm->type, + +907 +–m +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +, +memb_±r2 +, +pd +); + +909 +rv + = + `u³r_ݒ_ty³_g‘ +( +Ýt_codec_ùx +, +–m +-> +ty³ +, + +910 +–m +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +, +memb_±r2 +, +pd +); + +913 if( +rv +. +code + !ð +RC_OK +) + +914 + `ASN_DEBUG +("Failedo decode %s in %s (CHOICE) %d", + +915 +–m +-> +Çme +, +td +->Çme, +rv +. +code +); + +916  +rv +; + +917 + } +} + +919 +a¢_’c_rv®_t + + +920 + $CHOICE_’code_u³r +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +921 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, cÚ¡ * +¥Œ +, + +922 +a¢_³r_ou_t + * +po +) { + +923 cÚ¡ +a¢_CHOICE_¥ecifics_t + * +¥ecs + = (cÚ¡‡¢_CHOICE_¥ecifics_ˆ*) +td +-> +¥ecifics +; + +924 +a¢_TYPE_memb”_t + * +–m +; + +925 cÚ¡ +a¢_³r_cÚ¡¿št_t + * +ù +; + +926 cÚ¡ * +memb_±r +; + +927  +´e£Á +; + +928  +´e£Á_’c +; + +930 if(! +¥Œ +è +ASN__ENCODE_FAILED +; + +932 + `ASN_DEBUG +("Encodšg % a CHOICE", +td +-> +Çme +); + +934 if( +cÚ¡¿šts +è +ù + = &cÚ¡¿šts-> +v®ue +; + +935 if( +td +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +) + +936 +ù + = & +td +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +-> +v®ue +; + +937 +ù + = 0; + +939 +´e£Á + = + `_ãtch_´e£Á_idx +( +¥Œ +, +¥ecs +-> +´es_off£t +, s³cs-> +´es_size +); + +945 if( +´e£Á + =ð0 ||…»£Á > +td +-> +–em’ts_couÁ +) + +946 +ASN__ENCODE_FAILED +; + +948 +´e£Á +--; + +950 + `ASN_DEBUG +("Encodšg % CHOICEƒËm’ˆ%d", +td +-> +Çme +, +´e£Á +); + +953 if( +¥ecs +-> +to_ÿnÚiÿl_Üd” +) + +954 +´e£Á_’c + = +¥ecs +-> +to_ÿnÚiÿl_Üd” +[ +´e£Á +]; + +956 +´e£Á_’c + = +´e£Á +; + +958 if( +ù + && ct-> +¿nge_b™s + >= 0) { + +959 if( +´e£Á_’c + < +ù +-> +low”_bound + + +960 || +´e£Á_’c + > +ù +-> +uµ”_bound +) { + +961 if( +ù +-> +æags + & +APC_EXTENSIBLE +) { + +962 + `ASN_DEBUG +( + +964 +´e£Á +, +´e£Á_’c +, +ù +-> +low”_bound +, ct-> +uµ”_bound +); + +965 if( + `³r_put_ãw_b™s +( +po +, 1, 1)) + +966 +ASN__ENCODE_FAILED +; + +968 +ASN__ENCODE_FAILED +; + +970 +ù + = 0; + +973 if( +ù + && ct-> +æags + & +APC_EXTENSIBLE +) { + +974 + `ASN_DEBUG +("CHOICE member %d (enc %d) is‚ot‡nƒxtension (%ld..%ld)", + +975 +´e£Á +, +´e£Á_’c +, +ù +-> +low”_bound +, ct-> +uµ”_bound +); + +976 if( + `³r_put_ãw_b™s +( +po +, 0, 1)) + +977 +ASN__ENCODE_FAILED +; + +981 +–m + = & +td +-> +–em’ts +[ +´e£Á +]; + +982 + `ASN_DEBUG +("CHOICE memb” \"%s\" %d (a %d)", +–m +-> +Çme +, +´e£Á +, + +983 +´e£Á_’c +); + +984 if( +–m +-> +æags + & +ATF_POINTER +) { + +986 +memb_±r + = + +987 *(cÚ¡ *cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +988 if(! +memb_±r +è +ASN__ENCODE_FAILED +; + +990 +memb_±r + = (cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +; + +993 if( +ù + && ct-> +¿nge_b™s + >= 0) { + +994 if( + `³r_put_ãw_b™s +( +po +, +´e£Á_’c +, +ù +-> +¿nge_b™s +)) + +995 +ASN__ENCODE_FAILED +; + +997  +–m +-> +ty³ +-> +Ý +-> + `u³r_’cod” +( + +998 +–m +-> +ty³ +,ƒlm-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +, +memb_±r +, +po +); + +1000 +a¢_’c_rv®_t + +rv® + = {0,0,0}; + +1001 if( +¥ecs +-> +ext_¡¬t + =ð-1è +ASN__ENCODE_FAILED +; + +1002 if( + `u³r_put_n¢nwn +( +po +, +´e£Á_’c + - +¥ecs +-> +ext_¡¬t +)) + +1003 +ASN__ENCODE_FAILED +; + +1004 if( + `u³r_ݒ_ty³_put +( +–m +-> +ty³ +, + +1005 +–m +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +, + +1006 +memb_±r +, +po +)) + +1007 +ASN__ENCODE_FAILED +; + +1008 +rv® +. +’coded + = 0; + +1009 + `ASN__ENCODED_OK +( +rv® +); + +1011 + } +} + +1013 +a¢_dec_rv®_t + + +1014 + $CHOICE_decode_­” +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +1015 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +1016 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, ** +¥Œ +, +a¢_³r_d©a_t + * +pd +) { + +1017 cÚ¡ +a¢_CHOICE_¥ecifics_t + * +¥ecs + = (cÚ¡‡¢_CHOICE_¥ecifics_ˆ*) +td +-> +¥ecifics +; + +1018 +a¢_dec_rv®_t + +rv +; + +1019 cÚ¡ +a¢_³r_cÚ¡¿št_t + * +ù +; + +1020 cÚ¡ +a¢_³r_cÚ¡¿št_t + * +ext_ù + = +NULL +; + +1021 +a¢_TYPE_memb”_t + * +–m +; + +1022 * +memb_±r +; + +1023 ** +memb_±r2 +; + +1024 * +¡ + = * +¥Œ +; + +1025  +v®ue +; + +1027 if( + `ASN__STACK_OVERFLOW_CHECK +( +Ýt_codec_ùx +)) + +1028 +ASN__DECODE_FAILED +; + +1033 if(! +¡ +) { + +1034 +¡ + = * +¥Œ + = + `CALLOC +(1, +¥ecs +-> +¡ruù_size +); + +1035 if(! +¡ +è +ASN__DECODE_FAILED +; + +1038 if( +cÚ¡¿šts +è +ù + = &cÚ¡¿šts-> +v®ue +; + +1039 if( +td +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +) + +1040 +ù + = & +td +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +-> +v®ue +; + +1041 +ù + = 0; + +1043 if( +ù + && ct-> +æags + & +APC_EXTENSIBLE +) { + +1044 +v®ue + = + `³r_g‘_ãw_b™s +( +pd +, 1); + +1045 if( +v®ue + < 0è +ASN__DECODE_STARVED +; + +1046 if( +v®ue +) { + +1047 +ext_ù + = +ù +; + +1048 +ù + = 0; + +1053 if( +ù + && ct-> +¿nge_b™s + >= 0) { + +1054 +v®ue + = + `³r_g‘_ãw_b™s +( +pd +, +ù +-> +¿nge_b™s +); + +1055 if( +v®ue + < 0è +ASN__DECODE_STARVED +; + +1056 + `ASN_DEBUG +("CHOICE %s got index %d in„ange %d", + +1057 +td +-> +Çme +, +v®ue +, +ù +-> +¿nge_b™s +); + +1058 if( +v®ue + > +ù +-> +uµ”_bound +) + +1059 +ASN__DECODE_FAILED +; + +1061 if( +¥ecs +-> +ext_¡¬t + == -1) + +1062 +ASN__DECODE_FAILED +; + +1063 +v®ue + = + `­”_g‘_n¢nwn +( +pd +, +ext_ù +-> +¿nge_b™s +); + +1064 if( +v®ue + < 0è +ASN__DECODE_STARVED +; + +1065 +v®ue + +ð +¥ecs +-> +ext_¡¬t +; + +1066 if(() +v®ue + >ð +td +-> +–em’ts_couÁ +) + +1067 +ASN__DECODE_FAILED +; + +1071 if( +¥ecs +-> +äom_ÿnÚiÿl_Üd” +) + +1072 +v®ue + = +¥ecs +-> +äom_ÿnÚiÿl_Üd” +[value]; + +1075 + `_£t_´e£Á_idx +( +¡ +, +¥ecs +-> +´es_off£t +, s³cs-> +´es_size +, +v®ue + + 1); + +1077 +–m + = & +td +-> +–em’ts +[ +v®ue +]; + +1078 if( +–m +-> +æags + & +ATF_POINTER +) { + +1080 +memb_±r2 + = (**)((*) +¡ + + +–m +-> +memb_off£t +); + +1082 +memb_±r + = (*) +¡ + + +–m +-> +memb_off£t +; + +1083 +memb_±r2 + = & +memb_±r +; + +1085 + `ASN_DEBUG +("Discov”ed CHOICE % ’code %s", +td +-> +Çme +, +–m +->name); + +1087 if( +ù + && ct-> +¿nge_b™s + >= 0) { + +1088 +rv + = +–m +-> +ty³ +-> +Ý +-> + `­”_decod” +( +Ýt_codec_ùx +,ƒlm->type, + +1089 +–m +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +, +memb_±r2 +, +pd +); + +1091 +rv + = + `­”_ݒ_ty³_g‘ +( +Ýt_codec_ùx +, +–m +-> +ty³ +, + +1092 +–m +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +, +memb_±r2 +, +pd +); + +1095 if( +rv +. +code + !ð +RC_OK +) + +1096 + `ASN_DEBUG +("Failedo decode %s in %s (CHOICE) %d", + +1097 +–m +-> +Çme +, +td +->Çme, +rv +. +code +); + +1098  +rv +; + +1099 + } +} + +1101 +a¢_’c_rv®_t + + +1102 + $CHOICE_’code_­” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +1103 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +1104 cÚ¡ * +¥Œ +, +a¢_³r_ou_t + * +po +) { + +1105 cÚ¡ +a¢_CHOICE_¥ecifics_t + * +¥ecs + = (cÚ¡‡¢_CHOICE_¥ecifics_ˆ*) +td +-> +¥ecifics +; + +1106 cÚ¡ +a¢_TYPE_memb”_t + * +–m +; + +1107 cÚ¡ +a¢_³r_cÚ¡¿št_t + * +ù + = +NULL +; + +1108 cÚ¡ +a¢_³r_cÚ¡¿št_t + * +ext_ù + = +NULL +; + +1109 cÚ¡ * +memb_±r +; + +1110  +´e£Á +; + +1111  +´e£Á_’c +; + +1113 if(! +¥Œ +è +ASN__ENCODE_FAILED +; + +1115 + `ASN_DEBUG +("Encodšg % a CHOICE usšg ALIGNED PER", +td +-> +Çme +); + +1117 if( +cÚ¡¿šts +è +ù + = &cÚ¡¿šts-> +v®ue +; + +1118 if( +td +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +) + +1119 +ù + = & +td +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +-> +v®ue +; + +1120 +ù + = +NULL +; + +1122 +´e£Á + = + `_ãtch_´e£Á_idx +( +¥Œ +, + +1123 +¥ecs +-> +´es_off£t +, s³cs-> +´es_size +); + +1129 if( +´e£Á + <ð0 || (í»£Á > +td +-> +–em’ts_couÁ +) + +1130 +ASN__ENCODE_FAILED +; + +1132 +´e£Á +--; + +1135 if( +¥ecs +-> +to_ÿnÚiÿl_Üd” +) + +1136 +´e£Á_’c + = +¥ecs +-> +to_ÿnÚiÿl_Üd” +[ +´e£Á +]; + +1138 +´e£Á_’c + = +´e£Á +; + +1140 + `ASN_DEBUG +("Encodšg % CHOICEƒËm’ˆ%d", +td +-> +Çme +, +´e£Á +); + +1142 if( +ù + && (ù-> +¿nge_b™s + >= 0)) { + +1144 if( +´e£Á + < +ù +-> +low”_bound + ||…»£Á > ct-> +uµ”_bound +) { + +1145 if( +ù +-> +æags + & +APC_EXTENSIBLE +) { + +1146 + `ASN_DEBUG +("CHOICE member %d (enc %d) is‡nƒxtension (%ld..%ld)", + +1147 +´e£Á +, +´e£Á_’c +, +ù +-> +low”_bound +, ct-> +uµ”_bound +); + +1149 if( + `³r_put_ãw_b™s +( +po +, 1, 1)) { + +1150 +ASN__ENCODE_FAILED +; + +1153 +ASN__ENCODE_FAILED +; + +1156 +ext_ù + = +ù +; + +1157 +ù + = +NULL +; + +1161 if( +ù + && (ù-> +æags + & +APC_EXTENSIBLE +)) { + +1162 + `ASN_DEBUG +("CHOICE member %d (enc %d) is‚ot‡nƒxtension (%ld..%ld)", + +1163 +´e£Á +,…»£Á, +ù +-> +low”_bound +, ct-> +uµ”_bound +); + +1165 if( + `³r_put_ãw_b™s +( +po +, 0, 1)) { + +1166 +ASN__ENCODE_FAILED +; + +1170 +–m + = & +td +-> +–em’ts +[ +´e£Á +]; + +1171 if( +–m +-> +æags + & +ATF_POINTER +) { + +1173 +memb_±r + = *(cÚ¡ *cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +1174 if(! +memb_±r +è +ASN__ENCODE_FAILED +; + +1176 +memb_±r + = (cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +; + +1179 if( +ù + && (ù-> +¿nge_b™s + >= 0)) { + +1182 if( + `³r_put_ãw_b™s +( +po +, +´e£Á_’c +, +ù +-> +¿nge_b™s +)) + +1183 +ASN__ENCODE_FAILED +; + +1185  +–m +-> +ty³ +-> +Ý +-> + `­”_’cod” +Ólm->ty³,ƒlm-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +, + +1186 +memb_±r +, +po +); + +1188 +a¢_’c_rv®_t + +rv® + = {0,0,0}; + +1189 if( +¥ecs +-> +ext_¡¬t + == -1) + +1190 +ASN__ENCODE_FAILED +; + +1193 if( +ext_ù + && + `­”_put_n¢nwn +( +po +,ƒxt_ù-> +¿nge_b™s +, +´e£Á_’c + - +¥ecs +-> +ext_¡¬t +)) + +1194 +ASN__ENCODE_FAILED +; + +1195 if( + `­”_ݒ_ty³_put +( +–m +-> +ty³ +,ƒlm-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +, + +1196 +memb_±r +, +po +)) + +1197 +ASN__ENCODE_FAILED +; + +1198 +rv® +. +’coded + = 0; + +1199 + `ASN__ENCODED_OK +( +rv® +); + +1201 + } +} + +1204 + $CHOICE_´št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +,  +žev– +, + +1205 +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +1206 cÚ¡ +a¢_CHOICE_¥ecifics_t + * +¥ecs + = (cÚ¡‡¢_CHOICE_¥ecifics_ˆ*) +td +-> +¥ecifics +; + +1207  +´e£Á +; + +1209 if(! +¥Œ +è ( + `cb +("", 8, +­p_key +) < 0) ? -1 : 0; + +1214 +´e£Á + = + `_ãtch_´e£Á_idx +( +¥Œ +, +¥ecs +-> +´es_off£t +,¥ecs-> +´es_size +); + +1219 if( +´e£Á + > 0 &&…»£Á <ð +td +-> +–em’ts_couÁ +) { + +1220 +a¢_TYPE_memb”_t + * +–m + = & +td +-> +–em’ts +[ +´e£Á +-1]; + +1221 cÚ¡ * +memb_±r +; + +1223 if( +–m +-> +æags + & +ATF_POINTER +) { + +1224 +memb_±r + = *(cÚ¡ * cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +1225 if(! +memb_±r +è ( + `cb +("", 8, +­p_key +) < 0) ? -1 : 0; + +1227 +memb_±r + = (cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +1232 if( + `cb +( +–m +-> +Çme +, + `¡¾’ +Ólm->Çme), +­p_key +) < 0 + +1233 || + `cb +(": ", 2, +­p_key +) < 0) + +1237  +–m +-> +ty³ +-> +Ý +-> + `´št_¡ruù +Ólm->ty³, +memb_±r +, +žev– +, + +1238 +cb +, +­p_key +); + +1240  ( + `cb +("", 8, +­p_key +) < 0) ? -1 : 0; + +1242 + } +} + +1245 + $CHOICE_ä“ +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, * +±r +, + +1246 +a¢_¡ruù_ä“_m‘hod + +m‘hod +) { + +1247 cÚ¡ +a¢_CHOICE_¥ecifics_t + * +¥ecs + = + +1248 (cÚ¡ +a¢_CHOICE_¥ecifics_t + *) +td +-> +¥ecifics +; + +1249  +´e£Á +; + +1251 if(! +td + || ! +±r +) + +1254 + `ASN_DEBUG +("F»ešg % a CHOICE", +td +-> +Çme +); + +1259 +´e£Á + = + `_ãtch_´e£Á_idx +( +±r +, +¥ecs +-> +´es_off£t +, s³cs-> +´es_size +); + +1264 if( +´e£Á + > 0 &&…»£Á <ð +td +-> +–em’ts_couÁ +) { + +1265 +a¢_TYPE_memb”_t + * +–m + = & +td +-> +–em’ts +[ +´e£Á +-1]; + +1266 * +memb_±r +; + +1268 if( +–m +-> +æags + & +ATF_POINTER +) { + +1269 +memb_±r + = *(**)((*) +±r + + +–m +-> +memb_off£t +); + +1270 if( +memb_±r +) + +1271 + `ASN_STRUCT_FREE +(* +–m +-> +ty³ +, +memb_±r +); + +1273 +memb_±r + = (*)((*) +±r + + +–m +-> +memb_off£t +); + +1274 + `ASN_STRUCT_FREE_CONTENTS_ONLY +(* +–m +-> +ty³ +, +memb_±r +); + +1278  +m‘hod +) { + +1279  +ASFM_FREE_EVERYTHING +: + +1280 + `FREEMEM +( +±r +); + +1282  +ASFM_FREE_UNDERLYING +: + +1284  +ASFM_FREE_UNDERLYING_AND_RESET +: + +1285 + `mem£t +( +±r +, 0, +¥ecs +-> +¡ruù_size +); + +1288 + } +} + +1301 + $_ãtch_´e£Á_idx +(cÚ¡ * +¡ruù_±r +,  +´es_off£t +, + +1302  +´es_size +) { + +1303 cÚ¡ * +´e£Á_±r +; + +1304  +´e£Á +; + +1306 +´e£Á_±r + = ((cÚ¡ *) +¡ruù_±r +è+ +´es_off£t +; + +1308  +´es_size +) { + +1309 (): +´e£Á + = *(cÚ¡ *) +´e£Á_±r +; ; + +1310 (): +´e£Á + = *(cÚ¡ *) +´e£Á_±r +; ; + +1311 (): +´e£Á + = *(cÚ¡ *) +´e£Á_±r +; ; + +1314 + `as£¹ +( +´es_size + != ()); + +1318  +´e£Á +; + +1319 + } +} + +1322 + $_£t_´e£Á_idx +(* +¡ruù_±r +,  +´es_off£t +,  +´es_size +, + +1323  +´e£Á +) { + +1324 * +´e£Á_±r +; + +1325 +´e£Á_±r + = ((*) +¡ruù_±r +è+ +´es_off£t +; + +1327  +´es_size +) { + +1328 (): *(*) +´e£Á_±r + = +´e£Á +; ; + +1329 (): *(*) +´e£Á_±r + = +´e£Á +; ; + +1330 (): *(*) +´e£Á_±r + = +´e£Á +; ; + +1333 + `as£¹ +( +´es_size + != ()); + +1335 + } +} + +1338 + $_g‘_memb”_±r +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +1339 +a¢_TYPE_memb”_t + ** +–m_±r +, * +´e£Á_out +) { + +1340 cÚ¡ +a¢_CHOICE_¥ecifics_t + * +¥ecs + = + +1341 (cÚ¡ +a¢_CHOICE_¥ecifics_t + *) +td +-> +¥ecifics +; + +1342  +´e£Á +; + +1344 if(! +¥Œ +) { + +1345 * +–m_±r + = +NULL +; + +1346 * +´e£Á_out + = 0; + +1347  +NULL +; + +1353 +´e£Á + = + `_ãtch_´e£Á_idx +( +¥Œ +, +¥ecs +-> +´es_off£t +, s³cs-> +´es_size +); + +1354 * +´e£Á_out + = +´e£Á +; + +1360 if( +´e£Á + > 0 &&…»£Á <ð +td +-> +–em’ts_couÁ +) { + +1361 +a¢_TYPE_memb”_t + *cÚ¡ +–m + = & +td +-> +–em’ts +[ +´e£Á + - 1]; + +1362 cÚ¡ * +memb_±r +; + +1364 if( +–m +-> +æags + & +ATF_POINTER +) { + +1365 +memb_±r + = + +1366 *(cÚ¡ *cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +1368 +memb_±r + = (cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +1370 * +–m_±r + = +–m +; + +1371  +memb_±r +; + +1373 * +–m_±r + = +NULL +; + +1374  +NULL +; + +1377 + } +} + +1380 + $CHOICE_com·» +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +­Œ +, cÚ¡ * +b±r +) { + +1381 +a¢_TYPE_memb”_t + * +«lm +; + +1382 +a¢_TYPE_memb”_t + * +b–m +; + +1383  +­»£Á + = 0; + +1384  +b´e£Á + = 0; + +1385 cÚ¡ * +amemb” + = + `_g‘_memb”_±r +( +td +, +­Œ +, & +«lm +, & +­»£Á +); + +1386 cÚ¡ * +bmemb” + = + `_g‘_memb”_±r +( +td +, +b±r +, & +b–m +, & +b´e£Á +); + +1388 if( +amemb” + && +bmemb” +) { + +1389 if( +­»£Á + =ð +b´e£Á +) { + +1390 + `as£¹ +( +«lm + =ð +b–m +); + +1391  +«lm +-> +ty³ +-> +Ý +-> + `com·»_¡ruù +זm->ty³, +amemb” +, +bmemb” +); + +1392 } if( +­»£Á + < +b´e£Á +) { + +1397 } if(! +amemb” +) { + +1402 + } +} + +1409 + $CHOICE_v¬ŸÁ_g‘_´e£nû +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +) { + +1410 cÚ¡ +a¢_CHOICE_¥ecifics_t + * +¥ecs + = + +1411 (cÚ¡ +a¢_CHOICE_¥ecifics_t + *) +td +-> +¥ecifics +; + +1412  + `_ãtch_´e£Á_idx +( +¥Œ +, +¥ecs +-> +´es_off£t +, s³cs-> +´es_size +); + +1413 + } +} + +1422 + $CHOICE_v¬ŸÁ_£t_´e£nû +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, * +¥Œ +, + +1423  +´e£Á +) { + +1424 cÚ¡ +a¢_CHOICE_¥ecifics_t + * +¥ecs + = + +1425 (cÚ¡ +a¢_CHOICE_¥ecifics_t + *) +td +-> +¥ecifics +; + +1426  +Þd_´e£Á +; + +1428 if(! +¥Œ +) { + +1432 if( +´e£Á + > +td +-> +–em’ts_couÁ +) + +1435 +Þd_´e£Á + = + +1436 + `_ãtch_´e£Á_idx +( +¥Œ +, +¥ecs +-> +´es_off£t +, s³cs-> +´es_size +); + +1437 if( +´e£Á + =ð +Þd_´e£Á +) + +1440 if( +Þd_´e£Á + != 0) { + +1441 + `as£¹ +( +Þd_´e£Á + <ð +td +-> +–em’ts_couÁ +); + +1442 + `ASN_STRUCT_RESET +(* +td +, +¥Œ +); + +1445 + `_£t_´e£Á_idx +( +¥Œ +, +¥ecs +-> +´es_off£t +, s³cs-> +´es_size +, +´e£Á +); + +1448 + } +} + +1451 +a¢_¿ndom_fžl_»suÉ_t + + +1452 + $CHOICE_¿ndom_fžl +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¥Œ +, + +1453 cÚ¡ +a¢_’codšg_cÚ¡¿šts_t + * +cÚ¡r +, + +1454 +size_t + +max_Ëngth +) { + +1455 cÚ¡ +a¢_CHOICE_¥ecifics_t + * +¥ecs + = + +1456 (cÚ¡ +a¢_CHOICE_¥ecifics_t + *) +td +-> +¥ecifics +; + +1457 +a¢_¿ndom_fžl_»suÉ_t + +»s +; + +1458 +a¢_¿ndom_fžl_»suÉ_t + +»suÉ_çžed + = { +ARFILL_FAILED +, 0}; + +1459 +a¢_¿ndom_fžl_»suÉ_t + +»suÉ_sk³d + = { +ARFILL_SKIPPED +, 0}; + +1460 cÚ¡ +a¢_TYPE_memb”_t + * +–m +; + +1461  +´e£Á +; + +1462 * +memb_±r +; + +1463 ** +memb_±r2 +; + +1464 * +¡ + = * +¥Œ +; + +1466 if( +max_Ëngth + =ð0è +»suÉ_sk³d +; + +1468 () +cÚ¡r +; + +1470 if( +¡ + =ð +NULL +) { + +1471 +¡ + = + `CALLOC +(1, +¥ecs +-> +¡ruù_size +); + +1472 if( +¡ + =ð +NULL +) { + +1473  +»suÉ_çžed +; + +1477 +´e£Á + = + `a¢_¿ndom_b‘w“n +(1, +td +-> +–em’ts_couÁ +); + +1478 +–m + = & +td +-> +–em’ts +[ +´e£Á + - 1]; + +1480 if( +–m +-> +æags + & +ATF_POINTER +) { + +1482 +memb_±r2 + = (**)((*) +¡ + + +–m +-> +memb_off£t +); + +1484 +memb_±r + = (*) +¡ + + +–m +-> +memb_off£t +; + +1485 +memb_±r2 + = & +memb_±r +; + +1488 +»s + = +–m +-> +ty³ +-> +Ý +-> + `¿ndom_fžl +Ólm->ty³, +memb_±r2 +, + +1489 & +–m +-> +’codšg_cÚ¡¿šts +, +max_Ëngth +); + +1490 + `_£t_´e£Á_idx +( +¡ +, +¥ecs +-> +´es_off£t +, s³cs-> +´es_size +, +´e£Á +); + +1491 if( +»s +. +code + =ð +ARFILL_OK +) { + +1492 * +¥Œ + = +¡ +; + +1494 if( +¡ + =ð* +¥Œ +) { + +1495 + `ASN_STRUCT_RESET +(* +td +, +¡ +); + +1497 + `ASN_STRUCT_FREE +(* +td +, +¡ +); + +1501  +»s +; + +1502 + } +} + +1505 +a¢_TYPE_ݔ©iÚ_t + + ga¢_OP_CHOICE + = { + +1506 +CHOICE_ä“ +, + +1507 +CHOICE_´št +, + +1508 +CHOICE_com·» +, + +1509 +CHOICE_decode_b” +, + +1510 +CHOICE_’code_d” +, + +1511 +CHOICE_decode_x” +, + +1512 +CHOICE_’code_x” +, + +1513 #ifdef +ASN_DISABLE_OER_SUPPORT + + +1517 +CHOICE_decode_Ûr +, + +1518 +CHOICE_’code_Ûr +, + +1520 #ifdeà +ASN_DISABLE_PER_SUPPORT + + +1526 +CHOICE_decode_u³r +, + +1527 +CHOICE_’code_u³r +, + +1528 +CHOICE_decode_­” +, + +1529 +CHOICE_’code_­” +, + +1531 +CHOICE_¿ndom_fžl +, + +1532 +CHOICE_outmo¡_g + + + @constr_SEQUENCE.c + +6  + ~ + +7  + ~ + +8  + ~ + +9  + ~<³r_ݒty³.h +> + +16  + #LEFT + (( +size +<( +size_t +) +ùx +-> +Ëá +)?size:(size_t)ùx->Ëá) + + ) + +29  + #SIZE_VIOLATION + ( +ùx +-> +Ëá + >ð0 && ( +size_t +)ùx->Ëá <ð +size +) + + ) + +35 #undeà +ADVANCE + + +36  + #ADVANCE +( +num_by‹s +) do { \ + +37 +size_t + +num + = +num_by‹s +; \ + +38 +±r + = ((cÚ¡ *íŒè+ +num +; \ + +39 +size + -ð +num +; \ + +40 if( +ùx +-> +Ëá + >= 0) \ + +41 +ùx +-> +Ëá + -ð +num +; \ + +42 +cÚsumed_my£lf + +ð +num +; \ + +43 } 0) + + ) + +48 #undeà +NEXT_PHASE + + +49 #undeà +PHASE_OUT + + +50  + #NEXT_PHASE +( +ùx +) do { \ + +51 +ùx +-> +pha£ +++; \ + +52 +ùx +-> +¡• + = 0; \ + +53 } 0) + + ) + +54  + #PHASE_OUT +( +ùx +èdØ{ ctx-> +pha£ + = 10; } 0) + + ) + +59 #undeà +RETURN + + +60  + #RETURN +( +_code +) do { \ + +61 +rv® +. +code + = +_code +; \ + +62 +rv® +. +cÚsumed + = +cÚsumed_my£lf +;\ + +63  +rv® +; \ + +64 } 0) + + ) + +69  + #IN_EXTENSION_GROUP +( +¥ecs +, +memb_idx +) \ + +70 (( +¥ecs +)-> +fœ¡_ex‹nsiÚ + >= 0 \ + +71 && ()( +¥ecs +)-> +fœ¡_ex‹nsiÚ + <ð( +memb_idx +)) + + ) + +77 + $_t2e_cmp +(cÚ¡ * +­ +, cÚ¡ * +bp +) { + +78 cÚ¡ +a¢_TYPE_g2memb”_t + * +a + = (cÚ¡‡¢_TYPE_g2memb”_ˆ*) +­ +; + +79 cÚ¡ +a¢_TYPE_g2memb”_t + * +b + = (cÚ¡‡¢_TYPE_g2memb”_ˆ*) +bp +; + +81  +a_þass + = + `BER_TAG_CLASS +( +a +-> +–_g +); + +82  +b_þass + = + `BER_TAG_CLASS +( +b +-> +–_g +); + +84 if( +a_þass + =ð +b_þass +) { + +85 +b”_Žv_g_t + +a_v®ue + = + `BER_TAG_VALUE +( +a +-> +–_g +); + +86 +b”_Žv_g_t + +b_v®ue + = + `BER_TAG_VALUE +( +b +-> +–_g +); + +88 if( +a_v®ue + =ð +b_v®ue +) { + +89 if( +a +-> +–_no + > +b +->el_no) + +96 } if( +a_v®ue + < +b_v®ue +) + +100 } if( +a_þass + < +b_þass +) { + +105 + } +} + +111 +a¢_dec_rv®_t + + +112 + $SEQUENCE_decode_b” +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +113 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¡ruù_±r +, + +114 cÚ¡ * +±r +, +size_t + +size +,  +g_mode +) { + +118 cÚ¡ +a¢_SEQUENCE_¥ecifics_t + * +¥ecs + = (cÚ¡‡¢_SEQUENCE_¥ecifics_ˆ*) +td +-> +¥ecifics +; + +119 cÚ¡ +a¢_TYPE_memb”_t + * +–em’ts + = +td +->elements; + +124 * +¡ + = * +¡ruù_±r +; + +125 +a¢_¡ruù_ùx_t + * +ùx +; + +127 +b”_Žv_g_t + +Žv_g +; + +128 +a¢_dec_rv®_t + +rv® +; + +130 +ssize_t + +cÚsumed_my£lf + = 0; + +131 +size_t + +edx +; + +133 + `ASN_DEBUG +("Decodšg % a SEQUENCE", +td +-> +Çme +); + +138 if( +¡ + == 0) { + +139 +¡ + = * +¡ruù_±r + = + `CALLOC +(1, +¥ecs +-> +¡ruù_size +); + +140 if( +¡ + == 0) { + +141 + `RETURN +( +RC_FAIL +); + +148 +ùx + = ( +a¢_¡ruù_ùx_t + *)((*) +¡ + + +¥ecs +-> +ùx_off£t +); + +153  +ùx +-> +pha£ +) { + +161 +rv® + = + `b”_check_gs +( +Ýt_codec_ùx +, +td +, +ùx +, +±r +, +size +, + +162 +g_mode +, 1, & +ùx +-> +Ëá +, 0); + +163 if( +rv® +. +code + !ð +RC_OK +) { + +164 + `ASN_DEBUG +("%sagging check failed: %d", + +165 +td +-> +Çme +, +rv® +. +code +); + +166  +rv® +; + +169 if( +ùx +-> +Ëá + >= 0) + +170 +ùx +-> +Ëá + +ð +rv® +. +cÚsumed +; + +171 + `ADVANCE +( +rv® +. +cÚsumed +); + +173 + `NEXT_PHASE +( +ùx +); + +175 + `ASN_DEBUG +("Structure consumes %ld bytes, buffer %ld", + +176 () +ùx +-> +Ëá +, () +size +); + +190  +edx + = (( +size_t +) +ùx +-> +¡• + >> 1);ƒdx < +td +-> +–em’ts_couÁ +; + +191 +edx +++, +ùx +-> +¡• + = (ctx->step & ~1) + 2) { + +192 * +memb_±r +; + +193 ** +memb_±r2 +; + +194 +ssize_t + +g_Ën +; + +195 +size_t + +Ýt_edx_’d +; + +196 +size_t + +n +; + +197  +u£_b£¬ch +; + +199 if( +ùx +-> +¡• + & 1) + +200  +miüÝha£2 +; + +205 + `ASN_DEBUG +("IÀ% SEQUENCE†eá %d,ƒdx=%" +ASN_PRI_SIZE + " flags=%d" + +207 +td +-> +Çme +, () +ùx +-> +Ëá +, +edx +, + +208 +–em’ts +[ +edx +]. +æags +,ƒËm’ts[edx]. +ÝtiÚ® +, + +209 +td +-> +–em’ts_couÁ +); + +211 if( +ùx +-> +Ëá + == 0 + +214 ( +edx + + +–em’ts +[edx]. +ÝtiÚ® + =ð +td +-> +–em’ts_couÁ +) || + +216 + `IN_EXTENSION_GROUP +( +¥ecs +, +edx +))) { + +217 + `ASN_DEBUG +("End oàSEQUENCE %s", +td +-> +Çme +); + +221 + `PHASE_OUT +( +ùx +); + +222 + `RETURN +( +RC_OK +); + +228 +g_Ën + = + `b”_ãtch_g +( +±r +, +LEFT +, & +Žv_g +); + +229 + `ASN_DEBUG +("Cu¼’ˆg iÀ% SEQUENCE f܃Ëm’ˆ%" +ASN_PRI_SIZE + " " + +231 +td +-> +Çme +, +edx +, +–em’ts +[edx].name, + +232 + `b”_Žv_g_¡ršg +( +Žv_g +), () +g_Ën +, () +LEFT +); + +233  +g_Ën +) { + +234 0: if(! +SIZE_VIOLATION +è + `RETURN +( +RC_WMORE +); + +236 -1: + `RETURN +( +RC_FAIL +); + +239 if( +ùx +-> +Ëá + < 0 && ((cÚ¡ +ušt8_t + *) +±r +)[0] == 0) { + +240 if( +LEFT + < 2) { + +241 if( +SIZE_VIOLATION +) { + +242 + `RETURN +( +RC_FAIL +); + +244 + `RETURN +( +RC_WMORE +); + +246 } if(((cÚ¡ +ušt8_t + *) +±r +)[1] == 0) { + +247 + `ASN_DEBUG +("edx = %" +ASN_PRI_SIZE + ", o± = %d,ƒc=%d", +edx +, + +248 +–em’ts +[ +edx +]. +ÝtiÚ® +, +td +-> +–em’ts_couÁ +); + +249 if(( +edx + + +–em’ts +[edx]. +ÝtiÚ® + =ð +td +-> +–em’ts_couÁ +) + +250 || + `IN_EXTENSION_GROUP +( +¥ecs +, +edx +)) { + +260  +pha£3 +; + +268 +u£_b£¬ch + = 0; + +269 +Ýt_edx_’d + = +edx + + +–em’ts +[edx]. +ÝtiÚ® + + 1; + +270 if( +Ýt_edx_’d + > +td +-> +–em’ts_couÁ +) + +271 +Ýt_edx_’d + = +td +-> +–em’ts_couÁ +; + +272 if( +Ýt_edx_’d + - +edx + > 8) { + +274 +Ýt_edx_’d + = +edx + + 8; + +275 +u£_b£¬ch + = 1; + +278  +n + = +edx +;‚ < +Ýt_edx_’d +;‚++) { + +279 if( + `BER_TAGS_EQUAL +( +Žv_g +, +–em’ts +[ +n +]. +g +)) { + +285 +edx + = +n +; + +286 +ùx +-> +¡• + = 1 + 2 * +edx +; + +287  +miüÝha£2 +; + +288 } if( +–em’ts +[ +n +]. +æags + & +ATF_ANY_TYPE +) { + +293 +edx + = +n +; + +294 +ùx +-> +¡• + = 1 + 2 * +edx +; + +295  +miüÝha£2 +; + +296 } if( +–em’ts +[ +n +]. +g + =ð( +b”_Žv_g_t +)-1) { + +297 +u£_b£¬ch + = 1; + +301 if( +u£_b£¬ch +) { + +306 cÚ¡ +a¢_TYPE_g2memb”_t + * +t2m +; + +307 +a¢_TYPE_g2memb”_t + +key + = {0, 0, 0, 0}; + +308 +key +. +–_g + = +Žv_g +; + +309 +key +. +–_no + = +edx +; + +310 +t2m + = (cÚ¡ +a¢_TYPE_g2memb”_t + *) + `b£¬ch +(& +key +, + +311 +¥ecs +-> +g2– +, s³cs-> +g2–_couÁ +, + +312 ( +¥ecs +-> +g2– +[0]), +_t2e_cmp +); + +313 if( +t2m +) { + +314 cÚ¡ +a¢_TYPE_g2memb”_t + * +be¡ + = 0; + +315 cÚ¡ +a¢_TYPE_g2memb”_t + * +t2m_f +, * +t2m_l +; + +316 +size_t + +edx_max + = +edx + + +–em’ts +[edx]. +ÝtiÚ® +; + +321 +t2m_f + = +t2m + +2m-> +toff_fœ¡ +; + +322 +t2m_l + = +t2m + +2m-> +toff_Ï¡ +; + +323  +t2m + = +t2m_f +;2m <ð +t2m_l +;2m++) { + +324 if( +t2m +-> +–_no + > +edx_max +) ; + +325 if( +t2m +-> +–_no + < +edx +) ; + +326 +be¡ + = +t2m +; + +328 if( +be¡ +) { + +329 +edx + = +be¡ +-> +–_no +; + +330 +ùx +-> +¡• + = 1 + 2 * +edx +; + +331  +miüÝha£2 +; + +334 +n + = +Ýt_edx_’d +; + +336 if( +n + =ð +Ýt_edx_’d +) { + +343 if(! + `IN_EXTENSION_GROUP +( +¥ecs +, + +344 +edx + + +–em’ts +[edx]. +ÝtiÚ® +)) { + +345 + `ASN_DEBUG +("UÃx³ùedag % ×ˆ%" +ASN_PRI_SIZE + ")", + +346 + `b”_Žv_g_¡ršg +( +Žv_g +), +edx +); + +347 + `ASN_DEBUG +("Expectedag %s (%s)%s", + +348 + `b”_Žv_g_¡ršg +( +–em’ts +[ +edx +]. +g +), + +349 +–em’ts +[ +edx +]. +Çme +, + +350 +–em’ts +[ +edx +]. +ÝtiÚ® + + +352 + `RETURN +( +RC_FAIL +); + +355 +ssize_t + +sk +; + +356 +edx + +ð +–em’ts +[edx]. +ÝtiÚ® +; + +358 + `ASN_DEBUG +("Skpšg uÃx³ùed % ×ˆ%" +ASN_PRI_SIZE + ")", + +359 + `b”_Žv_g_¡ršg +( +Žv_g +), +edx +); + +360 +sk + = + `b”_sk_Ëngth +( +Ýt_codec_ùx +, + +361 + `BER_TLV_CONSTRUCTED +( +±r +), + +362 (cÚ¡ *) +±r + + +g_Ën +, + +363 +LEFT + - +g_Ën +); + +364 + `ASN_DEBUG +("Skip†ength %d in %s", + +365 () +sk +, +td +-> +Çme +); + +366  +sk +) { + +367 0: if(! +SIZE_VIOLATION +è + `RETURN +( +RC_WMORE +); + +369 -1: + `RETURN +( +RC_FAIL +); + +372 + `ADVANCE +( +sk + + +g_Ën +); + +373 +ùx +-> +¡• + -= 2; + +374 +edx +--; + +382 +ùx +-> +¡• + |= 1; + +383 +miüÝha£2 +: + +384 + `ASN_DEBUG +("InsidSEQUENCE % MF2", +td +-> +Çme +); + +391 if( +–em’ts +[ +edx +]. +æags + & +ATF_POINTER +) { + +393 +memb_±r2 + = (**)((*) +¡ + + +–em’ts +[ +edx +]. +memb_off£t +); + +399 +memb_±r + = (*) +¡ + + +–em’ts +[ +edx +]. +memb_off£t +; + +400 +memb_±r2 + = & +memb_±r +; + +405 if( +–em’ts +[ +edx +]. +æags + & +ATF_OPEN_TYPE +) { + +406 +rv® + = + `OPEN_TYPE_b”_g‘ +( +Ýt_codec_ùx +, +td +, +¡ +, & +–em’ts +[ +edx +], +±r +, +LEFT +); + +408 +rv® + = +–em’ts +[ +edx +]. +ty³ +-> +Ý +-> + `b”_decod” +( +Ýt_codec_ùx +, + +409 +–em’ts +[ +edx +]. +ty³ +, + +410 +memb_±r2 +, +±r +, +LEFT +, + +411 +–em’ts +[ +edx +]. +g_mode +); + +413 + `ASN_DEBUG +("IÀ% SEQUENCE decoded %" +ASN_PRI_SIZE + " %s of %d " + +415 +td +-> +Çme +, +edx +, +–em’ts +[edx]. +ty³ +->name, + +416 () +LEFT +, () +rv® +. +cÚsumed +,„v®. +code +, () +size +); + +417  +rv® +. +code +) { + +418  +RC_OK +: + +420  +RC_WMORE +: + +421 if(! +SIZE_VIOLATION +) { + +422 + `ADVANCE +( +rv® +. +cÚsumed +); + +423 + `RETURN +( +RC_WMORE +); + +425 + `ASN_DEBUG +("Size violation (c->l=%ld <= s=%ld)", + +426 () +ùx +-> +Ëá +, () +size +); + +428  +RC_FAIL +: + +429 + `RETURN +( +RC_FAIL +); + +432 + `ADVANCE +( +rv® +. +cÚsumed +); + +435 +pha£3 +: + +436 +ùx +-> +pha£ + = 3; + +441 + `ASN_DEBUG +("SEQUENCE %s Leftover: %ld, size = %ld", + +442 +td +-> +Çme +, () +ùx +-> +Ëá +, () +size +); + +447  +ùx +-> +Ëá +) { + +448 +ssize_t + +Ž +, +Î +; + +450 +Ž + = + `b”_ãtch_g +( +±r +, +LEFT +, & +Žv_g +); + +451  +Ž +) { + +452 0: if(! +SIZE_VIOLATION +è + `RETURN +( +RC_WMORE +); + +454 -1: + `RETURN +( +RC_FAIL +); + +460 if( +ùx +-> +Ëá + < 0 + +461 && ((cÚ¡ +ušt8_t + *) +±r +)[0] == 0) { + +462 if( +LEFT + < 2) { + +463 if( +SIZE_VIOLATION +) + +464 + `RETURN +( +RC_FAIL +); + +466 + `RETURN +( +RC_WMORE +); + +467 } if(((cÚ¡ +ušt8_t + *) +±r +)[1] == 0) { + +471 + `ADVANCE +(2); + +472 +ùx +-> +Ëá +++; + +473 +ùx +-> +pha£ + = 4; + +478 if(! + `IN_EXTENSION_GROUP +( +¥ecs +, +td +-> +–em’ts_couÁ +) + +479 || +ùx +-> +pha£ + == 4) { + +480 + `ASN_DEBUG +("Unexpected continuation " + +483 +td +-> +Çme +, + +484 + `b”_Žv_g_¡ršg +( +Žv_g +)); + +485 + `RETURN +( +RC_FAIL +); + +488 +Î + = + `b”_sk_Ëngth +( +Ýt_codec_ùx +, + +489 + `BER_TLV_CONSTRUCTED +( +±r +), + +490 (cÚ¡ *) +±r + + +Ž +, +LEFT + -l); + +491  +Î +) { + +492 0: if(! +SIZE_VIOLATION +è + `RETURN +( +RC_WMORE +); + +494 -1: + `RETURN +( +RC_FAIL +); + +497 + `ADVANCE +( +Ž + + +Î +); + +500 + `PHASE_OUT +( +ùx +); + +503 + `RETURN +( +RC_OK +); + +504 + } +} + +510 +a¢_’c_rv®_t + + +511 + $SEQUENCE_’code_d” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +512  +g_mode +, +b”_Žv_g_t + +g +, + +513 +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +514 +size_t + +compu‹d_size + = 0; + +515 +a¢_’c_rv®_t + +”v® + = {0,0,0}; + +516 +ssize_t + +»t +; + +517 +size_t + +edx +; + +519 + `ASN_DEBUG +("%s %s‡s SEQUENCE", + +520 +cb +?"Encodšg":"E¡im©šg", +td +-> +Çme +); + +525  +edx + = 0;ƒdx < +td +-> +–em’ts_couÁ +;ƒdx++) { + +526 +a¢_TYPE_memb”_t + * +–m + = & +td +-> +–em’ts +[ +edx +]; + +528 cÚ¡ * +memb_±r +; + +529 cÚ¡ *cÚ¡ * +memb_±r2 +; + +531 if( +–m +-> +æags + & +ATF_POINTER +) { + +532 +memb_±r2 + = + +533 (cÚ¡ *cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +534 if(!* +memb_±r2 +) { + +535 + `ASN_DEBUG +("EËm’ˆ% %" +ASN_PRI_SIZE + "‚ot…resent", + +536 +–m +-> +Çme +, +edx +); + +537 if( +–m +-> +ÝtiÚ® +) + +540 +ASN__ENCODE_FAILED +; + +543 +memb_±r + = (cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +544 +memb_±r2 + = & +memb_±r +; + +548 if( +–m +-> +deçuÉ_v®ue_cmp + &&ƒlm-> + `deçuÉ_v®ue_cmp +(* +memb_±r2 +) == 0) + +551 +”v® + = +–m +-> +ty³ +-> +Ý +-> + `d”_’cod” +Ólm->ty³, * +memb_±r2 +, + +552 +–m +-> +g_mode +,ƒlm-> +g +, + +554 if( +”v® +. +’coded + == -1) + +555  +”v® +; + +556 +compu‹d_size + +ð +”v® +. +’coded +; + +557 + `ASN_DEBUG +("Memb” %" +ASN_PRI_SIZE + " %sƒstimated %ld bytes", + +558 +edx +, +–m +-> +Çme +, () +”v® +. +’coded +); + +564 +»t + = + `d”_wr™e_gs +( +td +, +compu‹d_size +, +g_mode +, 1, +g +, +cb +, +­p_key +); + +565 + `ASN_DEBUG +("Wrِgs: %ld (+%ld)", () +»t +, () +compu‹d_size +); + +566 if( +»t + == -1) + +567 +ASN__ENCODE_FAILED +; + +568 +”v® +. +’coded + = +compu‹d_size + + +»t +; + +570 if(! +cb +è + `ASN__ENCODED_OK +( +”v® +); + +575  +edx + = 0;ƒdx < +td +-> +–em’ts_couÁ +;ƒdx++) { + +576 +a¢_TYPE_memb”_t + * +–m + = & +td +-> +–em’ts +[ +edx +]; + +577 +a¢_’c_rv®_t + +tm³rv® + = {0,0,0}; + +578 cÚ¡ * +memb_±r +; + +579 cÚ¡ *cÚ¡ * +memb_±r2 +; + +581 if( +–m +-> +æags + & +ATF_POINTER +) { + +582 +memb_±r2 + = + +583 (cÚ¡ *cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +584 if(!* +memb_±r2 +) ; + +586 +memb_±r + = (cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +587 +memb_±r2 + = & +memb_±r +; + +591 if( +–m +-> +deçuÉ_v®ue_cmp + &&ƒlm-> + `deçuÉ_v®ue_cmp +(* +memb_±r2 +) == 0) + +594 +tm³rv® + = +–m +-> +ty³ +-> +Ý +-> + `d”_’cod” +Ólm->ty³, * +memb_±r2 +, + +595 +–m +-> +g_mode +,ƒlm-> +g +, +cb +, +­p_key +); + +596 if( +tm³rv® +. +’coded + == -1) + +597  +tm³rv® +; + +598 +compu‹d_size + -ð +tm³rv® +. +’coded +; + +599 + `ASN_DEBUG +("Memb” %" +ASN_PRI_SIZE + " %s of SEQUENCE %sƒncoded in %ld bytes", + +600 +edx +, +–m +-> +Çme +, +td +->Çme, () +tm³rv® +. +’coded +); + +603 if( +compu‹d_size + != 0) + +607 +ASN__ENCODE_FAILED +; + +609 + `ASN__ENCODED_OK +( +”v® +); + +610 + } +} + +613 #undeà +XER_ADVANCE + + +614  + #XER_ADVANCE +( +num_by‹s +) \ + +616 +size_t + +num + = ( +num_by‹s +); \ + +617 +±r + = ((cÚ¡ *íŒè+ +num +; \ + +618 +size + -ð +num +; \ + +619 +cÚsumed_my£lf + +ð +num +; \ + +620 } 0) + + ) + +625 +a¢_dec_rv®_t + + +626 + $SEQUENCE_decode_x” +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +627 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¡ruù_±r +, + +628 cÚ¡ * +Ýt_mÇme +, cÚ¡ * +±r +, +size_t + +size +) { + +632 cÚ¡ +a¢_SEQUENCE_¥ecifics_t + * +¥ecs + + +633 ð(cÚ¡ +a¢_SEQUENCE_¥ecifics_t + *) +td +-> +¥ecifics +; + +634 +a¢_TYPE_memb”_t + * +–em’ts + = +td +->elements; + +635 cÚ¡ * +xml_g + = +Ýt_mÇme + ? o±_mÇm: +td +->xml_tag; + +640 * +¡ + = * +¡ruù_±r +; + +641 +a¢_¡ruù_ùx_t + * +ùx +; + +643 +a¢_dec_rv®_t + +rv® +; + +644 +ssize_t + +cÚsumed_my£lf + = 0; + +645 +size_t + +edx +; + +650 if( +¡ + == 0) { + +651 +¡ + = * +¡ruù_±r + = + `CALLOC +(1, +¥ecs +-> +¡ruù_size +); + +652 if( +¡ + =ð0è + `RETURN +( +RC_FAIL +); + +658 +ùx + = ( +a¢_¡ruù_ùx_t + *)((*) +¡ + + +¥ecs +-> +ùx_off£t +); + +669  +edx + = +ùx +-> +¡• +; ctx-> +pha£ + <= 3;) { + +670 +px”_chunk_ty³_e + +ch_ty³ +; + +671 +ssize_t + +ch_size +; + +672 +x”_check_g_e + +tcv +; + +673 +a¢_TYPE_memb”_t + * +–m +; + +678 if( +ùx +-> +pha£ + == 2) { + +679 +a¢_dec_rv®_t + +tm´v® +; + +680 * +memb_±r_dÚtu£ +; + +681 ** +memb_±r2 +; + +683 +–m + = & +td +-> +–em’ts +[ +edx +]; + +685 if( +–m +-> +æags + & +ATF_POINTER +) { + +687 +memb_±r2 + = (**)((*) +¡ + + +–m +-> +memb_off£t +); + +689 +memb_±r_dÚtu£ + = (*) +¡ + + +–m +-> +memb_off£t +; + +690 +memb_±r2 + = & +memb_±r_dÚtu£ +; + +693 if( +–m +-> +æags + & +ATF_OPEN_TYPE +) { + +694 +tm´v® + = + `OPEN_TYPE_x”_g‘ +( +Ýt_codec_ùx +, +td +, +¡ +, +–m +, +±r +, +size +); + +697 +tm´v® + = +–m +-> +ty³ +-> +Ý +-> + `x”_decod” +( +Ýt_codec_ùx +, + +698 +–m +-> +ty³ +, +memb_±r2 +,ƒlm-> +Çme +, + +699 +±r +, +size +); + +701 + `XER_ADVANCE +( +tm´v® +. +cÚsumed +); + +702 if( +tm´v® +. +code + !ð +RC_OK +) + +703 + `RETURN +( +tm´v® +. +code +); + +704 +ùx +-> +pha£ + = 1; + +705 +ùx +-> +¡• + = ++ +edx +; + +706 + `ASN_DEBUG +("XER/SEQUENCE…hase => %d, step => %d", + +707 +ùx +-> +pha£ +, ctx-> +¡• +); + +714 +ch_size + = + `x”_Ãxt_tok’ +(& +ùx +-> +cڋxt +, +±r +, +size +, + +715 & +ch_ty³ +); + +716 if( +ch_size + == -1) { + +717 + `RETURN +( +RC_FAIL +); + +719  +ch_ty³ +) { + +720  +PXER_WMORE +: + +721 + `RETURN +( +RC_WMORE +); + +722  +PXER_COMMENT +: + +723  +PXER_TEXT +: + +724 + `XER_ADVANCE +( +ch_size +); + +726  +PXER_TAG +: + +731 +tcv + = + `x”_check_g +( +±r +, +ch_size +, +xml_g +); + +732 + `ASN_DEBUG +("XER/SEQUENCE:cv = %d,…h=%d [%s]", + +733 +tcv +, +ùx +-> +pha£ +, +xml_g +); + +736 if( +ùx +-> +pha£ + == 3) { + +737  + `x”_sk_unknown +( +tcv +, & +ùx +-> +Ëá +)) { + +739 +ùx +-> +pha£ + = 4; + +740 + `RETURN +( +RC_FAIL +); + +742 + `XER_ADVANCE +( +ch_size +); + +745 + `XER_ADVANCE +( +ch_size +); + +746 +ùx +-> +pha£ + = 1; + +749 +ùx +-> +pha£ + = 1; + +754  +tcv +) { + +755  +XCT_CLOSING +: + +756 if( +ùx +-> +pha£ + == 0) ; + +757 +ùx +-> +pha£ + = 0; + +759  +XCT_BOTH +: + +760 if( +ùx +-> +pha£ + == 0) { + +761 if( +edx + >ð +td +-> +–em’ts_couÁ + || + +763 ( +edx + + +–em’ts +[edx]. +ÝtiÚ® + =ð +td +-> +–em’ts_couÁ +) || + +765 + `IN_EXTENSION_GROUP +( +¥ecs +, +edx +)) { + +766 + `XER_ADVANCE +( +ch_size +); + +767 +ùx +-> +pha£ + = 4; + +768 + `RETURN +( +RC_OK +); + +770 + `ASN_DEBUG +("Prematureƒnd of XER SEQUENCE"); + +771 + `RETURN +( +RC_FAIL +); + +775  +XCT_OPENING +: + +776 if( +ùx +-> +pha£ + == 0) { + +777 + `XER_ADVANCE +( +ch_size +); + +778 +ùx +-> +pha£ + = 1; + +782  +XCT_UNKNOWN_OP +: + +783  +XCT_UNKNOWN_BO +: + +785 + `ASN_DEBUG +("XER/SEQUENCE:cv=%d,…h=%d,ƒdx=%" +ASN_PRI_SIZE + "", + +786 +tcv +, +ùx +-> +pha£ +, +edx +); + +787 if( +ùx +-> +pha£ + != 1) { + +791 if( +edx + < +td +-> +–em’ts_couÁ +) { + +795 +size_t + +n +; + +796 +size_t + +edx_’d + = +edx + + +–em’ts +[edx]. +ÝtiÚ® + + 1; + +797 if( +edx_’d + > +td +-> +–em’ts_couÁ +) + +798 +edx_’d + = +td +-> +–em’ts_couÁ +; + +799  +n + = +edx +;‚ < +edx_’d +;‚++) { + +800 +–m + = & +td +-> +–em’ts +[ +n +]; + +801 +tcv + = + `x”_check_g +( +±r +, +ch_size +, +–m +-> +Çme +); + +802  +tcv +) { + +803  +XCT_BOTH +: + +804  +XCT_OPENING +: + +808 +ùx +-> +¡• + = +edx + = +n +; + +809 +ùx +-> +pha£ + = 2; + +811  +XCT_UNKNOWN_OP +: + +812  +XCT_UNKNOWN_BO +: + +815 +n + = +edx_’d +; + +820 if( +n + !ð +edx_’d +) + +823 + `ASN_DEBUG +("Ouˆoàdefšed memb”s: %" +ASN_PRI_SIZE + "/%u", + +824 +edx +, +td +-> +–em’ts_couÁ +); + +828 if( + `IN_EXTENSION_GROUP +( +¥ecs +, + +829 +edx + + (edx < +td +-> +–em’ts_couÁ + + +830 ? +–em’ts +[ +edx +]. +ÝtiÚ® + : 0))) { + +831 + `ASN_DEBUG +("GهÁic©edƒx‹nsiڇˆ%" +ASN_PRI_SIZE + "", + +832 +edx +); + +838 if( +tcv + & +XCT_CLOSING +) { + +841 +ùx +-> +Ëá + = 1; + +842 +ùx +-> +pha£ + = 3; + +844 + `XER_ADVANCE +( +ch_size +); + +853 + `ASN_DEBUG +("Unexpected XMLag in SEQUENCE [%c%c%c%c%c%c]", + +854 +size +>0?((cÚ¡ *) +±r +)[0]:'.', + +855 +size +>1?((cÚ¡ *) +±r +)[1]:'.', + +856 +size +>2?((cÚ¡ *) +±r +)[2]:'.', + +857 +size +>3?((cÚ¡ *) +±r +)[3]:'.', + +858 +size +>4?((cÚ¡ *) +±r +)[4]:'.', + +859 +size +>5?((cÚ¡ *) +±r +)[5]:'.'); + +863 +ùx +-> +pha£ + = 4; + +864 + `RETURN +( +RC_FAIL +); + +865 + } +} + +867 +a¢_’c_rv®_t + + +868 + $SEQUENCE_’code_x” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +869  +žev– +, +x”_’cod”_æags_e + +æags +, + +870 +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +871 +a¢_’c_rv®_t + +” + = {0,0,0}; + +872  +xÿn + = ( +æags + & +XER_F_CANONICAL +); + +873 +a¢_TYPE_desütÜ_t + * +tmp_def_v®_td + = 0; + +874 * +tmp_def_v® + = 0; + +875 +size_t + +edx +; + +877 if(! +¥Œ +è +ASN__ENCODE_FAILED +; + +879 +” +. +’coded + = 0; + +881  +edx + = 0;ƒdx < +td +-> +–em’ts_couÁ +;ƒdx++) { + +882 +a¢_’c_rv®_t + +tm³r + = {0,0,0}; + +883 +a¢_TYPE_memb”_t + * +–m + = & +td +-> +–em’ts +[ +edx +]; + +884 cÚ¡ * +memb_±r +; + +885 cÚ¡ * +mÇme + = +–m +-> +Çme +; + +886  +mËn + = + `¡¾’ +( +mÇme +); + +888 if( +–m +-> +æags + & +ATF_POINTER +) { + +889 +memb_±r + = + +890 *(cÚ¡ *cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +891 if(! +memb_±r +) { + +892 + `as£¹ +( +tmp_def_v® + == 0); + +893 if( +–m +-> +deçuÉ_v®ue_£t +) { + +894 if( +–m +-> + `deçuÉ_v®ue_£t +(& +tmp_def_v® +)) { + +895 +ASN__ENCODE_FAILED +; + +897 +memb_±r + = +tmp_def_v® +; + +898 +tmp_def_v®_td + = +–m +-> +ty³ +; + +900 } if( +–m +-> +ÝtiÚ® +) { + +904 +ASN__ENCODE_FAILED +; + +908 +memb_±r + = (cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +911 if(! +xÿn +è + `ASN__TEXT_INDENT +(1, +žev– +); + +912 + `ASN__CALLBACK3 +("<", 1, +mÇme +, +mËn +, ">", 1); + +915 +tm³r + = +–m +-> +ty³ +-> +Ý +-> + `x”_’cod” +Ólm->ty³, +memb_±r +, +žev– + + 1, + +916 +æags +, +cb +, +­p_key +); + +917 if( +tmp_def_v® +) { + +918 + `ASN_STRUCT_FREE +(* +tmp_def_v®_td +, +tmp_def_v® +); + +919 +tmp_def_v® + = 0; + +921 if( +tm³r +. +’coded + == -1) mper; + +922 +” +. +’coded + +ð +tm³r +.encoded; + +924 + `ASN__CALLBACK3 +("", 1); + +927 if(! +xÿn +è + `ASN__TEXT_INDENT +(1, +žev– + - 1); + +929 + `ASN__ENCODED_OK +( +” +); + +930 +cb_çžed +: + +931 if( +tmp_def_v® +è + `ASN_STRUCT_FREE +(* +tmp_def_v®_td +,mp_def_val); + +932 +ASN__ENCODE_FAILED +; + +933 + } +} + +936 + $SEQUENCE_´št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +,  +žev– +, + +937 +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +938 +size_t + +edx +; + +939  +»t +; + +941 if(! +¥Œ +è ( + `cb +("", 8, +­p_key +) < 0) ? -1 : 0; + +944 if( + `cb +( +td +-> +Çme +, + `¡¾’ +Ñd->Çme), +­p_key +) < 0 + +945 || + `cb +(" ::ð{", 6, +­p_key +) < 0) + +948  +edx + = 0;ƒdx < +td +-> +–em’ts_couÁ +;ƒdx++) { + +949 +a¢_TYPE_memb”_t + * +–m + = & +td +-> +–em’ts +[ +edx +]; + +950 cÚ¡ * +memb_±r +; + +952 if( +–m +-> +æags + & +ATF_POINTER +) { + +953 +memb_±r + = *(cÚ¡ * cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +954 if(! +memb_±r +) { + +955 if( +–m +-> +ÝtiÚ® +) ; + +960 +memb_±r + = (cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +964 + `_i_INDENT +(1); + +967 if( + `cb +( +–m +-> +Çme +, + `¡¾’ +Ólm->Çme), +­p_key +) < 0 + +968 || + `cb +(": ", 2, +­p_key +) < 0) + +972 +»t + = +–m +-> +ty³ +-> +Ý +-> + `´št_¡ruù +Ólm->ty³, +memb_±r +, +žev– + + 1, + +973 +cb +, +­p_key +); + +974 if( +»t +) „et; + +977 +žev– +--; + +978 + `_i_INDENT +(1); + +980  ( + `cb +("}", 1, +­p_key +) < 0) ? -1 : 0; + +981 + } +} + +984 + $SEQUENCE_ä“ +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, * +¥Œ +, + +985 +a¢_¡ruù_ä“_m‘hod + +m‘hod +) { + +986 +size_t + +edx +; + +987 cÚ¡ +a¢_SEQUENCE_¥ecifics_t + * +¥ecs + = + +988 (cÚ¡ +a¢_SEQUENCE_¥ecifics_t + *) +td +-> +¥ecifics +; + +989 +a¢_¡ruù_ùx_t + * +ùx +; + +991 if(! +td + || ! +¥Œ +) + +994 + `ASN_DEBUG +("F»ešg % a SEQUENCE", +td +-> +Çme +); + +996  +edx + = 0;ƒdx < +td +-> +–em’ts_couÁ +;ƒdx++) { + +997 +a¢_TYPE_memb”_t + * +–m + = & +td +-> +–em’ts +[ +edx +]; + +998 * +memb_±r +; + +999 if( +–m +-> +æags + & +ATF_POINTER +) { + +1000 +memb_±r + = *(**)((*) +¥Œ + + +–m +-> +memb_off£t +); + +1001 if( +memb_±r +) + +1002 + `ASN_STRUCT_FREE +(* +–m +-> +ty³ +, +memb_±r +); + +1004 +memb_±r + = (*)((*) +¥Œ + + +–m +-> +memb_off£t +); + +1005 + `ASN_STRUCT_FREE_CONTENTS_ONLY +(* +–m +-> +ty³ +, +memb_±r +); + +1010 +ùx + = ( +a¢_¡ruù_ùx_t + *)((*) +¥Œ + + +¥ecs +-> +ùx_off£t +); + +1011 + `FREEMEM +( +ùx +-> +±r +); + +1013  +m‘hod +) { + +1014  +ASFM_FREE_EVERYTHING +: + +1015 + `FREEMEM +( +¥Œ +); + +1017  +ASFM_FREE_UNDERLYING +: + +1019  +ASFM_FREE_UNDERLYING_AND_RESET +: + +1020 + `mem£t +( + +1021 +¥Œ +, 0, + +1022 ((cÚ¡ +a¢_SEQUENCE_¥ecifics_t + *)( +td +-> +¥ecifics +))-> +¡ruù_size +); + +1025 + } +} + +1028 + $SEQUENCE_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +1029 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +1030 +size_t + +edx +; + +1032 if(! +¥Œ +) { + +1033 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +1035 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +1042  +edx + = 0;ƒdx < +td +-> +–em’ts_couÁ +;ƒdx++) { + +1043 +a¢_TYPE_memb”_t + * +–m + = & +td +-> +–em’ts +[ +edx +]; + +1044 cÚ¡ * +memb_±r +; + +1046 if( +–m +-> +æags + & +ATF_POINTER +) { + +1047 +memb_±r + = *(cÚ¡ * cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +1048 if(! +memb_±r +) { + +1049 if( +–m +-> +ÝtiÚ® +) + +1051 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +1053 +td +-> +Çme +, +–m +->Çme, +__FILE__ +, +__LINE__ +); + +1057 +memb_±r + = (cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +1060 if( +–m +-> +’codšg_cÚ¡¿šts +. +g’”®_cÚ¡¿šts +) { + +1061  +»t + = +–m +-> +’codšg_cÚ¡¿šts +. + `g’”®_cÚ¡¿šts +Ólm-> +ty³ +, +memb_±r +, + +1062 +ùçžcb +, +­p_key +); + +1063 if( +»t +) „et; + +1065  +–m +-> +ty³ +-> +’codšg_cÚ¡¿šts +. + `g’”®_cÚ¡¿šts +(elm->type, + +1066 +memb_±r +, +ùçžcb +, +­p_key +); + +1071 + } +} + +1073 #iâdeà +ASN_DISABLE_PER_SUPPORT + + +1075 +a¢_dec_rv®_t + + +1076 + $SEQUENCE_decode_u³r +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +1077 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +1078 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, ** +¥Œ +, + +1079 +a¢_³r_d©a_t + * +pd +) { + +1080 cÚ¡ +a¢_SEQUENCE_¥ecifics_t + * +¥ecs + = (cÚ¡‡¢_SEQUENCE_¥ecifics_ˆ*) +td +-> +¥ecifics +; + +1081 * +¡ + = * +¥Œ +; + +1082  +ex»£Á +; + +1083 +ušt8_t + * +Ý»s +; + +1084 +a¢_³r_d©a_t + +Ýmd +; + +1085 +a¢_dec_rv®_t + +rv +; + +1086 +size_t + +edx +; + +1088 () +cÚ¡¿šts +; + +1090 if( + `ASN__STACK_OVERFLOW_CHECK +( +Ýt_codec_ùx +)) + +1091 +ASN__DECODE_FAILED +; + +1093 if(! +¡ +) { + +1094 +¡ + = * +¥Œ + = + `CALLOC +(1, +¥ecs +-> +¡ruù_size +); + +1095 if(! +¡ +è +ASN__DECODE_FAILED +; + +1098 + `ASN_DEBUG +("Decodšg % a SEQUENCE (UPER)", +td +-> +Çme +); + +1101 if( +¥ecs +-> +fœ¡_ex‹nsiÚ + < 0) { + +1102 +ex»£Á + = 0; + +1104 +ex»£Á + = + `³r_g‘_ãw_b™s +( +pd +, 1); + +1105 if( +ex»£Á + < 0è +ASN__DECODE_STARVED +; + +1109 + `mem£t +(& +Ýmd +, 0, (opmd)); + +1110 if( +¥ecs +-> +roms_couÁ +) { + +1111 +Ý»s + = ( +ušt8_t + *) + `MALLOC +((( +¥ecs +-> +roms_couÁ + + 7) >> 3) + 1); + +1112 if(! +Ý»s +è +ASN__DECODE_FAILED +; + +1114 if( + `³r_g‘_mªy_b™s +( +pd +, +Ý»s +, 0, +¥ecs +-> +roms_couÁ +)) { + +1115 + `FREEMEM +( +Ý»s +); + +1116 +ASN__DECODE_STARVED +; + +1118 +Ýmd +. +bufãr + = +Ý»s +; + +1119 +Ýmd +. +nb™s + = +¥ecs +-> +roms_couÁ +; + +1120 + `ASN_DEBUG +("Read in…resence bitmap for %s of %d bits (%x..)", + +1121 +td +-> +Çme +, +¥ecs +-> +roms_couÁ +, * +Ý»s +); + +1123 +Ý»s + = 0; + +1129  +edx + = 0; + +1130 +edx + < ( +¥ecs +-> +fœ¡_ex‹nsiÚ + < 0 ? +td +-> +–em’ts_couÁ + + +1131 : ( +size_t +) +¥ecs +-> +fœ¡_ex‹nsiÚ +); + +1132 +edx +++) { + +1133 +a¢_TYPE_memb”_t + * +–m + = & +td +-> +–em’ts +[ +edx +]; + +1134 * +memb_±r +; + +1135 ** +memb_±r2 +; + +1137 + `as£¹ +(! + `IN_EXTENSION_GROUP +( +¥ecs +, +edx +)); + +1140 if( +–m +-> +æags + & +ATF_POINTER +) { + +1141 +memb_±r2 + = (**)((*) +¡ + + +–m +-> +memb_off£t +); + +1143 +memb_±r + = (*) +¡ + + +–m +-> +memb_off£t +; + +1144 +memb_±r2 + = & +memb_±r +; + +1148 if( +–m +-> +ÝtiÚ® +) { + +1149  +´e£Á + = + `³r_g‘_ãw_b™s +(& +Ýmd +, 1); + +1150 + `ASN_DEBUG +("Member %s->%s is optional,…=%d (%d->%d)", + +1151 +td +-> +Çme +, +–m +->Çme, +´e£Á +, + +1152 () +Ýmd +. +nboff +, ()Ýmd. +nb™s +); + +1153 if( +´e£Á + == 0) { + +1155 if( +–m +-> +deçuÉ_v®ue_£t +) { + +1157 if( +–m +-> + `deçuÉ_v®ue_£t +( +memb_±r2 +)) { + +1158 + `FREEMEM +( +Ý»s +); + +1159 +ASN__DECODE_FAILED +; + +1161 + `ASN_DEBUG +("Filled-in default"); + +1170 + `ASN_DEBUG +("Decodšg memb” \"%s\" iÀ%s", +–m +-> +Çme +, +td +->name); + +1172 if( +–m +-> +æags + & +ATF_OPEN_TYPE +) { + +1173 +rv + = + `OPEN_TYPE_u³r_g‘ +( +Ýt_codec_ùx +, +td +, +¡ +, +–m +, +pd +); + +1175 +rv + = +–m +-> +ty³ +-> +Ý +-> + `u³r_decod” +( +Ýt_codec_ùx +,ƒlm->type, + +1176 +–m +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +, +memb_±r2 +, +pd +); + +1178 if( +rv +. +code + !ð +RC_OK +) { + +1179 + `ASN_DEBUG +("Failed decode %s in %s", + +1180 +–m +-> +Çme +, +td +->name); + +1181 + `FREEMEM +( +Ý»s +); + +1182  +rv +; + +1187 + `FREEMEM +( +Ý»s +); + +1192 if( +ex»£Á +) { + +1193 +ssize_t + +bmËngth +; + +1194 +ušt8_t + * +•»s +; + +1195 +a¢_³r_d©a_t + +•md +; + +1197 +bmËngth + = + `u³r_g‘_n¦’gth +( +pd +); + +1198 if( +bmËngth + < 0è +ASN__DECODE_STARVED +; + +1200 + `ASN_DEBUG +("Ex‹nsiÚ %" +ASN_PRI_SSIZE + "…»£Á iÀ%s", +bmËngth +, +td +-> +Çme +); + +1202 +•»s + = ( +ušt8_t + *) + `MALLOC +(( +bmËngth + + 15) >> 3); + +1203 if(! +•»s +è +ASN__DECODE_STARVED +; + +1206 if( + `³r_g‘_mªy_b™s +( +pd +, +•»s +, 0, +bmËngth +)) { + +1207 + `FREEMEM +( +•»s +); + +1208 +ASN__DECODE_STARVED +; + +1211 + `mem£t +(& +•md +, 0, (epmd)); + +1212 +•md +. +bufãr + = +•»s +; + +1213 +•md +. +nb™s + = +bmËngth +; + +1214 + `ASN_DEBUG +("Read inƒxtensions bitmap for %s of %ld bits (%x..)", + +1215 +td +-> +Çme +, () +bmËngth +, * +•»s +); + +1218  +edx + = +¥ecs +-> +fœ¡_ex‹nsiÚ +;ƒdx < +td +-> +–em’ts_couÁ +;ƒdx++) { + +1219 +a¢_TYPE_memb”_t + * +–m + = & +td +-> +–em’ts +[ +edx +]; + +1220 * +memb_±r +; + +1221 ** +memb_±r2 +; + +1222  +´e£Á +; + +1225 if( +–m +-> +æags + & +ATF_POINTER +) { + +1226 +memb_±r2 + = (**)((*) +¡ + + +–m +-> +memb_off£t +); + +1228 +memb_±r + = (*)((*) +¡ + + +–m +-> +memb_off£t +); + +1229 +memb_±r2 + = & +memb_±r +; + +1232 +´e£Á + = + `³r_g‘_ãw_b™s +(& +•md +, 1); + +1233 if( +´e£Á + <= 0) { + +1234 if( +´e£Á + < 0) ; + +1238 + `ASN_DEBUG +("Decodšg memb” % š % %p", +–m +-> +Çme +, +td +->name, + +1239 * +memb_±r2 +); + +1240 +rv + = + `u³r_ݒ_ty³_g‘ +( +Ýt_codec_ùx +, +–m +-> +ty³ +, + +1241 +–m +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +, + +1242 +memb_±r2 +, +pd +); + +1243 if( +rv +. +code + !ð +RC_OK +) { + +1244 + `FREEMEM +( +•»s +); + +1245  +rv +; + +1252 + `ASN_DEBUG +("Getting overflowƒxtensions"); + +1253  + `³r_g‘_ãw_b™s +(& +•md +, 1)) { + +1257 if( + `u³r_ݒ_ty³_sk +( +Ýt_codec_ùx +, +pd +)) { + +1258 + `FREEMEM +( +•»s +); + +1259 +ASN__DECODE_STARVED +; + +1261 + `ASN_DEBUG +("Skipped overflowƒxtension"); + +1267 + `FREEMEM +( +•»s +); + +1270 if( +¥ecs +-> +fœ¡_ex‹nsiÚ + >= 0) { + +1271  +i +; + +1273  +i + = +¥ecs +-> +roms_couÁ +; i < s³cs->roms_couÁ + s³cs-> +aoms_couÁ +; + +1274 +i +++) { + +1275 +a¢_TYPE_memb”_t + * +–m +; + +1276 ** +memb_±r2 +; + +1278 +edx + = +¥ecs +-> +oms +[ +i +]; + +1279 +–m + = & +td +-> +–em’ts +[ +edx +]; + +1281 if(! +–m +-> +deçuÉ_v®ue_£t +) ; + +1284 if( +–m +-> +æags + & +ATF_POINTER +) { + +1285 +memb_±r2 + = (**)((*) +¡ + + +–m +-> +memb_off£t +); + +1286 if(* +memb_±r2 +) ; + +1292 if( +–m +-> + `deçuÉ_v®ue_£t +( +memb_±r2 +)) { + +1293 +ASN__DECODE_FAILED +; + +1298 +rv +. +cÚsumed + = 0; + +1299 +rv +. +code + = +RC_OK +; + +1300  +rv +; + +1301 + } +} + +1304 + $SEQUENCE__hªdË_ex‹nsiÚs +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +1305 +a¢_³r_ou_t + * +po1 +,‡¢_³r_ou_ˆ* +po2 +) { + +1306 cÚ¡ +a¢_SEQUENCE_¥ecifics_t + * +¥ecs + = + +1307 (cÚ¡ +a¢_SEQUENCE_¥ecifics_t + *) +td +-> +¥ecifics +; + +1308  +exts_´e£Á + = 0; + +1309  +exts_couÁ + = 0; + +1310 +size_t + +edx +; + +1312 if( +¥ecs +-> +fœ¡_ex‹nsiÚ + < 0) { + +1317  +edx + = +¥ecs +-> +fœ¡_ex‹nsiÚ +;ƒdx < +td +-> +–em’ts_couÁ +;ƒdx++) { + +1318 +a¢_TYPE_memb”_t + * +–m + = & +td +-> +–em’ts +[ +edx +]; + +1319 cÚ¡ * +memb_±r +; + +1320 cÚ¡ *cÚ¡ * +memb_±r2 +; + +1321  +´e£Á +; + +1324 if( +–m +-> +æags + & +ATF_POINTER +) { + +1325 +memb_±r2 + = + +1326 (cÚ¡ *cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +1327 +´e£Á + = (* +memb_±r2 + != 0); + +1329 +memb_±r + = (cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +1330 +memb_±r2 + = & +memb_±r +; + +1331 +´e£Á + = 1; + +1334 + `ASN_DEBUG +("checkšg %s:% (@%" +ASN_PRI_SIZE + "è´e£Á => %d", +–m +-> +Çme +, + +1335 +–m +-> +ty³ +-> +Çme +, +edx +, +´e£Á +); + +1336 +exts_couÁ +++; + +1337 +exts_´e£Á + +ð +´e£Á +; + +1340 if( +po1 + && + `³r_put_ãw_b™s +Õo1, +´e£Á +, 1)) { + +1344 if( +po2 + && +´e£Á + + +1345 && + `u³r_ݒ_ty³_put +( +–m +-> +ty³ +, + +1346 +–m +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +, + +1347 * +memb_±r2 +, +po2 +)) + +1351  +exts_´e£Á + ? +exts_couÁ + : 0; + +1352 + } +} + +1354 +a¢_’c_rv®_t + + +1355 + $SEQUENCE_’code_u³r +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +1356 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, cÚ¡ * +¥Œ +, + +1357 +a¢_³r_ou_t + * +po +) { + +1358 cÚ¡ +a¢_SEQUENCE_¥ecifics_t + * +¥ecs + + +1359 ð(cÚ¡ +a¢_SEQUENCE_¥ecifics_t + *) +td +-> +¥ecifics +; + +1360 +a¢_’c_rv®_t + +” + = {0,0,0}; + +1361  +n_ex‹nsiÚs +; + +1362 +size_t + +edx +; + +1363 +size_t + +i +; + +1365 () +cÚ¡¿šts +; + +1367 if(! +¥Œ +) + +1368 +ASN__ENCODE_FAILED +; + +1370 +” +. +’coded + = 0; + +1372 + `ASN_DEBUG +("Encodšg % a SEQUENCE (UPER)", +td +-> +Çme +); + +1378 if( +¥ecs +-> +fœ¡_ex‹nsiÚ + < 0) { + +1379 +n_ex‹nsiÚs + = 0; + +1381 +n_ex‹nsiÚs + = + `SEQUENCE__hªdË_ex‹nsiÚs +( +td +, +¥Œ +, 0, 0); + +1382 if( +n_ex‹nsiÚs + < 0è +ASN__ENCODE_FAILED +; + +1383 if( + `³r_put_ãw_b™s +( +po +, +n_ex‹nsiÚs + ? 1 : 0, 1)) { + +1384 +ASN__ENCODE_FAILED +; + +1389  +i + = 0; i < +¥ecs +-> +roms_couÁ +; i++) { + +1390 +a¢_TYPE_memb”_t + * +–m +; + +1391 cÚ¡ * +memb_±r +; + +1392 cÚ¡ *cÚ¡ * +memb_±r2 +; + +1393  +´e£Á +; + +1395 +edx + = +¥ecs +-> +oms +[ +i +]; + +1396 +–m + = & +td +-> +–em’ts +[ +edx +]; + +1399 if( +–m +-> +æags + & +ATF_POINTER +) { + +1400 +memb_±r2 + = + +1401 (cÚ¡ *cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +1402 +´e£Á + = (* +memb_±r2 + != 0); + +1404 +memb_±r + = (cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +1405 +memb_±r2 + = & +memb_±r +; + +1406 +´e£Á + = 1; + +1410 if( +´e£Á + && +–m +-> +deçuÉ_v®ue_cmp + + +1411 && +–m +-> + `deçuÉ_v®ue_cmp +(* +memb_±r2 +) == 0) + +1412 +´e£Á + = 0; + +1414 + `ASN_DEBUG +("Element %s %s %s->%s is %s", + +1415 +–m +-> +æags + & +ATF_POINTER + ? "ptr" : "inline", + +1416 +–m +-> +deçuÉ_v®ue_cmp + ? "def" : "wtv", + +1417 +td +-> +Çme +, +–m +->Çme, +´e£Á + ? "present" : "absent"); + +1418 if( + `³r_put_ãw_b™s +( +po +, +´e£Á +, 1)) + +1419 +ASN__ENCODE_FAILED +; + +1425 + `ASN_DEBUG +("fœ¡_ex‹nsiÚ = %d,ƒËm’t ð%d", +¥ecs +-> +fœ¡_ex‹nsiÚ +, + +1426 +td +-> +–em’ts_couÁ +); + +1427  +edx + = 0; + +1428 +edx + < (( +¥ecs +-> +fœ¡_ex‹nsiÚ + < 0è? +td +-> +–em’ts_couÁ + + +1429 : ( +size_t +) +¥ecs +-> +fœ¡_ex‹nsiÚ +); + +1430 +edx +++) { + +1431 +a¢_TYPE_memb”_t + * +–m + = & +td +-> +–em’ts +[ +edx +]; + +1432 cÚ¡ * +memb_±r +; + +1433 cÚ¡ *cÚ¡ * +memb_±r2 +; + +1435 + `ASN_DEBUG +("Abouˆtؒcod%s", +–m +-> +ty³ +-> +Çme +); + +1438 if( +–m +-> +æags + & +ATF_POINTER +) { + +1439 +memb_±r2 + = + +1440 (cÚ¡ *cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +1441 if(!* +memb_±r2 +) { + +1442 + `ASN_DEBUG +("EËm’ˆ% %" +ASN_PRI_SIZE + "‚ot…resent", + +1443 +–m +-> +Çme +, +edx +); + +1444 if( +–m +-> +ÝtiÚ® +) + +1447 +ASN__ENCODE_FAILED +; + +1450 +memb_±r + = (cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +1451 +memb_±r2 + = & +memb_±r +; + +1455 if( +–m +-> +deçuÉ_v®ue_cmp + &&ƒlm-> + `deçuÉ_v®ue_cmp +(* +memb_±r2 +) == 0) + +1458 + `ASN_DEBUG +("Encodšg %s->%s:%s", +td +-> +Çme +, +–m +->Çme,ƒlm-> +ty³ +->name); + +1459 +” + = +–m +-> +ty³ +-> +Ý +-> + `u³r_’cod” +( + +1460 +–m +-> +ty³ +,ƒlm-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +, * +memb_±r2 +, + +1461 +po +); + +1462 if( +” +. +’coded + == -1) ƒr; + +1466 if(! +n_ex‹nsiÚs +è + `ASN__ENCODED_OK +( +” +); + +1468 + `ASN_DEBUG +("L’gth oàex‹nsiÚ %d b™-m­", +n_ex‹nsiÚs +); + +1470 if( + `u³r_put_n¦’gth +( +po +, +n_ex‹nsiÚs +)) + +1471 +ASN__ENCODE_FAILED +; + +1473 + `ASN_DEBUG +("B™-m­ oà%dƒËm’ts", +n_ex‹nsiÚs +); + +1476 if( + `SEQUENCE__hªdË_ex‹nsiÚs +( +td +, +¥Œ +, +po +, 0è!ð +n_ex‹nsiÚs +) + +1477 +ASN__ENCODE_FAILED +; + +1479 + `ASN_DEBUG +("Wr™šg %dƒx‹nsiÚs", +n_ex‹nsiÚs +); + +1481 if( + `SEQUENCE__hªdË_ex‹nsiÚs +( +td +, +¥Œ +, 0, +po +è!ð +n_ex‹nsiÚs +) + +1482 +ASN__ENCODE_FAILED +; + +1484 + `ASN__ENCODED_OK +( +” +); + +1485 + } +} + +1487 +a¢_dec_rv®_t + + +1488 + $SEQUENCE_decode_­” +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +1489 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +1490 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, ** +¥Œ +, +a¢_³r_d©a_t + * +pd +) { + +1491 cÚ¡ +a¢_SEQUENCE_¥ecifics_t + * +¥ecs + = (cÚ¡‡¢_SEQUENCE_¥ecifics_ˆ*) +td +-> +¥ecifics +; + +1492 * +¡ + = * +¥Œ +; + +1493  +ex»£Á +; + +1494 +ušt8_t + * +Ý»s +; + +1495 +a¢_³r_d©a_t + +Ýmd +; + +1496 +a¢_dec_rv®_t + +rv +; + +1497 +size_t + +edx +; + +1499 () +cÚ¡¿šts +; + +1501 if( + `ASN__STACK_OVERFLOW_CHECK +( +Ýt_codec_ùx +)) + +1502 +ASN__DECODE_FAILED +; + +1504 if(! +¡ +) { + +1505 +¡ + = * +¥Œ + = + `CALLOC +(1, +¥ecs +-> +¡ruù_size +); + +1506 if(! +¡ +è +ASN__DECODE_FAILED +; + +1509 + `ASN_DEBUG +("Decodšg % a SEQUENCE (APER)", +td +-> +Çme +); + +1512 if( +¥ecs +-> +fœ¡_ex‹nsiÚ + < 0) { + +1513 +ex»£Á + = 0; + +1515 +ex»£Á + = + `³r_g‘_ãw_b™s +( +pd +, 1); + +1516 if( +ex»£Á + < 0è +ASN__DECODE_STARVED +; + +1520 + `mem£t +(& +Ýmd +, 0, (opmd)); + +1521 if( +¥ecs +-> +roms_couÁ +) { + +1522 +Ý»s + = ( +ušt8_t + *) + `MALLOC +((( +¥ecs +-> +roms_couÁ + + 7) >> 3) + 1); + +1523 if(! +Ý»s +è +ASN__DECODE_FAILED +; + +1525 if( + `³r_g‘_mªy_b™s +( +pd +, +Ý»s +, 0, +¥ecs +-> +roms_couÁ +)) { + +1526 + `FREEMEM +( +Ý»s +); + +1527 +ASN__DECODE_STARVED +; + +1529 +Ýmd +. +bufãr + = +Ý»s +; + +1530 +Ýmd +. +nb™s + = +¥ecs +-> +roms_couÁ +; + +1531 + `ASN_DEBUG +("Read in…resence bitmap for %s of %d bits (%x..)", + +1532 +td +-> +Çme +, +¥ecs +-> +roms_couÁ +, * +Ý»s +); + +1534 +Ý»s + = 0; + +1540  +edx + = 0;ƒdx < +td +-> +–em’ts_couÁ +;ƒdx++) { + +1541 +a¢_TYPE_memb”_t + * +–m + = & +td +-> +–em’ts +[ +edx +]; + +1542 * +memb_±r +; + +1543 ** +memb_±r2 +; + +1545  +·ddšg +; + +1548 if( + `IN_EXTENSION_GROUP +( +¥ecs +, +edx +)) + +1552 if( +–m +-> +æags + & +ATF_POINTER +) { + +1553 +memb_±r2 + = (**)((*) +¡ + + +–m +-> +memb_off£t +); + +1555 +memb_±r + = (*) +¡ + + +–m +-> +memb_off£t +; + +1556 +memb_±r2 + = & +memb_±r +; + +1560 +·ddšg + = (8 - ( +pd +-> +moved + % 8)) % 8; + +1561 if( +·ddšg + > 0) + +1562 + `ASN_DEBUG +("F܃Ëm’ˆ%s,off£tð%ld Paddšg b™ ð%d", +td +-> +Çme +, +pd +-> +moved +, +·ddšg +); + +1564 + `³r_g‘_ãw_b™s +( +pd +, +·ddšg +); + +1566 if( +edx + !ð( +td +-> +–em’ts_couÁ +-1)) + +1567 + `³r_g‘_ãw_b™s +( +pd +, +·ddšg +); + +1569 if( +¥ecs +-> +roms_couÁ + && ( +·ddšg + > 0)) + +1570 + `ASN_DEBUG +(">>>>>‚Ù skpšg…addšg oà%d b™ f܃Ëm’t:%ld ouˆoà%d", +·ddšg +, +edx +, +td +-> +–em’ts_couÁ +); + +1572 + `³r_g‘_ãw_b™s +( +pd +, +·ddšg +); + +1577 if( +–m +-> +ÝtiÚ® +) { + +1578  +´e£Á + = + `³r_g‘_ãw_b™s +(& +Ýmd +, 1); + +1579 + `ASN_DEBUG +("Member %s->%s is optional,…=%d (%d->%d)", + +1580 +td +-> +Çme +, +–m +->Çme, +´e£Á +, + +1581 () +Ýmd +. +nboff +, ()Ýmd. +nb™s +); + +1582 if( +´e£Á + == 0) { + +1584 if( +–m +-> +deçuÉ_v®ue_£t +) { + +1586 if( +–m +-> + `deçuÉ_v®ue_£t +( +memb_±r2 +)) { + +1587 + `FREEMEM +( +Ý»s +); + +1588 +ASN__DECODE_FAILED +; + +1590 + `ASN_DEBUG +("Filled-in default"); + +1599 + `ASN_DEBUG +("Decodšg memb” \"%s\" iÀ%s", +–m +-> +Çme +, +td +->name); + +1601 if( +–m +-> +æags + & +ATF_OPEN_TYPE +) { + +1602 +rv + = + `OPEN_TYPE_­”_g‘ +( +Ýt_codec_ùx +, +td +, +¡ +, +–m +, +pd +); + +1604 +rv + = +–m +-> +ty³ +-> +Ý +-> + `­”_decod” +( +Ýt_codec_ùx +,ƒlm->type, + +1605 +–m +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +, +memb_±r2 +, +pd +); + +1607 if( +rv +. +code + !ð +RC_OK +) { + +1608 + `ASN_DEBUG +("Failed decode %s in %s", + +1609 +–m +-> +Çme +, +td +->name); + +1610 + `FREEMEM +( +Ý»s +); + +1611  +rv +; + +1616 + `FREEMEM +( +Ý»s +); + +1621 if( +ex»£Á +) { + +1622 +ssize_t + +bmËngth +; + +1623 +ušt8_t + * +•»s +; + +1624 +a¢_³r_d©a_t + +•md +; + +1626 +bmËngth + = + `­”_g‘_n¦’gth +( +pd +); + +1627 if( +bmËngth + < 0è +ASN__DECODE_STARVED +; + +1629 + `ASN_DEBUG +("Ex‹nsiÚ %" +ASN_PRI_SSIZE + "…»£Á iÀ%s", +bmËngth +, +td +-> +Çme +); + +1631 +•»s + = ( +ušt8_t + *) + `MALLOC +(( +bmËngth + + 15) >> 3); + +1632 if(! +•»s +è +ASN__DECODE_STARVED +; + +1635 if( + `³r_g‘_mªy_b™s +( +pd +, +•»s +, 0, +bmËngth +)) + +1636 +ASN__DECODE_STARVED +; + +1638 + `mem£t +(& +•md +, 0, (epmd)); + +1639 +•md +. +bufãr + = +•»s +; + +1640 +•md +. +nb™s + = +bmËngth +; + +1641 + `ASN_DEBUG +("Read inƒxtensions bitmap for %s of %ld bits (%x..)", + +1642 +td +-> +Çme +, +bmËngth +, * +•»s +); + +1645  +edx + = +¥ecs +-> +fœ¡_ex‹nsiÚ +;ƒdx < +td +-> +–em’ts_couÁ +;ƒdx++) { + +1646 +a¢_TYPE_memb”_t + * +–m + = & +td +-> +–em’ts +[ +edx +]; + +1647 * +memb_±r +; + +1648 ** +memb_±r2 +; + +1649  +´e£Á +; + +1651 if(! + `IN_EXTENSION_GROUP +( +¥ecs +, +edx +)) { + +1652 + `ASN_DEBUG +("%ld i nكx‹nsiÚ", +edx +); + +1657 if( +–m +-> +æags + & +ATF_POINTER +) { + +1658 +memb_±r2 + = (**)((*) +¡ + + +–m +-> +memb_off£t +); + +1660 +memb_±r + = (*)((*) +¡ + + +–m +-> +memb_off£t +); + +1661 +memb_±r2 + = & +memb_±r +; + +1664 +´e£Á + = + `³r_g‘_ãw_b™s +(& +•md +, 1); + +1665 if( +´e£Á + <= 0) { + +1666 if( +´e£Á + < 0) ; + +1670 + `ASN_DEBUG +("Decodšg memb” % š % %p", +–m +-> +Çme +, +td +->Çme, * +memb_±r2 +); + +1671 +rv + = + `­”_ݒ_ty³_g‘ +( +Ýt_codec_ùx +, +–m +-> +ty³ +, + +1672 +–m +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +, +memb_±r2 +, +pd +); + +1673 if( +rv +. +code + !ð +RC_OK +) { + +1674 + `FREEMEM +( +•»s +); + +1675  +rv +; + +1682 + `ASN_DEBUG +("Getting overflowƒxtensions"); + +1683  + `³r_g‘_ãw_b™s +(& +•md +, 1)) { + +1689 if( + `­”_ݒ_ty³_sk +( +Ýt_codec_ùx +, +pd +)) { + +1690 + `FREEMEM +( +•»s +); + +1691 +ASN__DECODE_STARVED +; + +1697 + `FREEMEM +( +•»s +); + +1701  +edx + = +¥ecs +-> +roms_couÁ +;ƒdx < specs->roms_count + +1702 + +¥ecs +-> +aoms_couÁ +; +edx +++) { + +1703 +a¢_TYPE_memb”_t + * +–m + = & +td +-> +–em’ts +[ +edx +]; + +1704 ** +memb_±r2 +; + +1706 if(! +–m +-> +deçuÉ_v®ue_£t +) ; + +1709 if( +–m +-> +æags + & +ATF_POINTER +) { + +1710 +memb_±r2 + = (**)((*) +¡ + + +1711 + +–m +-> +memb_off£t +); + +1712 if(* +memb_±r2 +) ; + +1718 if( +–m +-> + `deçuÉ_v®ue_£t +( +memb_±r2 +)) { + +1719 +ASN__DECODE_FAILED +; + +1723 +rv +. +cÚsumed + = 0; + +1724 +rv +. +code + = +RC_OK +; + +1725  +rv +; + +1726 + } +} + +1729 + $SEQUENCE_hªdË_ex‹nsiÚs_­” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +1730 cÚ¡ * +¥Œ +, + +1731 +a¢_³r_ou_t + * +po1 +,‡¢_³r_ou_ˆ* +po2 +) { + +1732 cÚ¡ +a¢_SEQUENCE_¥ecifics_t + * +¥ecs + + +1733 ð(cÚ¡ +a¢_SEQUENCE_¥ecifics_t + *) +td +-> +¥ecifics +; + +1734  +exts_´e£Á + = 0; + +1735  +exts_couÁ + = 0; + +1736 +size_t + +edx +; + +1738 if( +¥ecs +-> +fœ¡_ex‹nsiÚ + < 0) { + +1743  +edx + = +¥ecs +-> +fœ¡_ex‹nsiÚ +;ƒdx < +td +-> +–em’ts_couÁ +;ƒdx++) { + +1744 +a¢_TYPE_memb”_t + * +–m + = & +td +-> +–em’ts +[ +edx +]; + +1745 cÚ¡ * +memb_±r +; + +1746 cÚ¡ * cÚ¡ * +memb_±r2 +; + +1747  +´e£Á +; + +1749 if(! + `IN_EXTENSION_GROUP +( +¥ecs +, +edx +)) { + +1750 + `ASN_DEBUG +("% (@%ldèi nكx‹nsiÚ", +–m +-> +ty³ +-> +Çme +, +edx +); + +1755 if( +–m +-> +æags + & +ATF_POINTER +) { + +1756 +memb_±r2 + = (cÚ¡ * cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +1757 +´e£Á + = (* +memb_±r2 + != 0); + +1759 +memb_±r + = (cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +1760 +memb_±r2 + = & +memb_±r +; + +1761 +´e£Á + = 1; + +1764 + `ASN_DEBUG +("checking %s (@%ld)…resent => %d", + +1765 +–m +-> +ty³ +-> +Çme +, +edx +, +´e£Á +); + +1766 +exts_couÁ +++; + +1767 +exts_´e£Á + +ð +´e£Á +; + +1770 if( +po1 + && + `³r_put_ãw_b™s +Õo1, +´e£Á +, 1)) + +1773 if( +po2 + && +´e£Á + && + `­”_ݒ_ty³_put +( +–m +-> +ty³ +, + +1774 +–m +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +, * +memb_±r2 +, +po2 +)) + +1779  +exts_´e£Á + ? +exts_couÁ + : 0; + +1780 + } +} + +1782 +a¢_’c_rv®_t + + +1783 + $SEQUENCE_’code_­” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +1784 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +1785 cÚ¡ * +¥Œ +, +a¢_³r_ou_t + * +po +) { + +1786 cÚ¡ +a¢_SEQUENCE_¥ecifics_t + * +¥ecs + + +1787 ð(cÚ¡ +a¢_SEQUENCE_¥ecifics_t + *) +td +-> +¥ecifics +; + +1788 +a¢_’c_rv®_t + +” + = {0,0,0}; + +1789  +n_ex‹nsiÚs +; + +1790 +size_t + +edx +; + +1791 +size_t + +i +; + +1793 () +cÚ¡¿šts +; + +1795 if(! +¥Œ +) + +1796 +ASN__ENCODE_FAILED +; + +1798 +” +. +’coded + = 0; + +1800 + `ASN_DEBUG +("Encodšg % a SEQUENCE (APER)", +td +-> +Çme +); + +1806 if( +¥ecs +-> +fœ¡_ex‹nsiÚ + < 0) { + +1807 +n_ex‹nsiÚs + = 0; + +1809 +n_ex‹nsiÚs + = + `SEQUENCE_hªdË_ex‹nsiÚs_­” +( +td +, +¥Œ +, 0, 0); + +1810 if( +n_ex‹nsiÚs + < 0è +ASN__ENCODE_FAILED +; + +1811 if( + `³r_put_ãw_b™s +( +po +, +n_ex‹nsiÚs + ? 1 : 0, 1)) { + +1812 +ASN__ENCODE_FAILED +; + +1817  +i + = 0; i < +¥ecs +-> +roms_couÁ +; i++) { + +1818 +a¢_TYPE_memb”_t + * +–m +; + +1819 cÚ¡ * +memb_±r +; + +1820 cÚ¡ * cÚ¡ * +memb_±r2 +; + +1821  +´e£Á +; + +1823 +edx + = +¥ecs +-> +oms +[ +i +]; + +1824 +–m + = & +td +-> +–em’ts +[ +edx +]; + +1827 if( +–m +-> +æags + & +ATF_POINTER +) { + +1828 +memb_±r2 + = (cÚ¡ * cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +1829 +´e£Á + = (* +memb_±r2 + != 0); + +1831 +memb_±r + = (cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +1832 +memb_±r2 + = & +memb_±r +; + +1833 +´e£Á + = 1; + +1837 if( +´e£Á + && +–m +-> +deçuÉ_v®ue_cmp + + +1838 && +–m +-> + `deçuÉ_v®ue_cmp +( +memb_±r2 +) == 1) + +1839 +´e£Á + = 0; + +1841 + `ASN_DEBUG +("Element %s %s %s->%s is %s", + +1842 +–m +-> +æags + & +ATF_POINTER + ? "ptr" : "inline", + +1843 +–m +-> +deçuÉ_v®ue_cmp + ? "def" : "wtv", + +1844 +td +-> +Çme +, +–m +->Çme, +´e£Á + ? "present" : "absent"); + +1845 if( + `³r_put_ãw_b™s +( +po +, +´e£Á +, 1)) + +1846 +ASN__ENCODE_FAILED +; + +1852 + `ASN_DEBUG +("fœ¡_ex‹nsiÚ = %d,ƒËm’t ð%d", +¥ecs +-> +fœ¡_ex‹nsiÚ +, + +1853 +td +-> +–em’ts_couÁ +); + +1854  +edx + = 0; + +1855 +edx + < (( +¥ecs +-> +fœ¡_ex‹nsiÚ + < 0è? +td +-> +–em’ts_couÁ + + +1856 : ( +size_t +) +¥ecs +-> +fœ¡_ex‹nsiÚ +); + +1857 +edx +++) { + +1858 +a¢_TYPE_memb”_t + * +–m + = & +td +-> +–em’ts +[ +edx +]; + +1859 cÚ¡ * +memb_±r +; + +1860 cÚ¡ * cÚ¡ * +memb_±r2 +; + +1862 if( + `IN_EXTENSION_GROUP +( +¥ecs +, +edx +)) + +1865 + `ASN_DEBUG +("Abouˆtؒcod%s", +–m +-> +ty³ +-> +Çme +); + +1868 if( +–m +-> +æags + & +ATF_POINTER +) { + +1869 +memb_±r2 + = (cÚ¡ * cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +1870 if(!* +memb_±r2 +) { + +1871 + `ASN_DEBUG +("Element %s %ld‚ot…resent", + +1872 +–m +-> +Çme +, +edx +); + +1873 if( +–m +-> +ÝtiÚ® +) + +1876 +ASN__ENCODE_FAILED +; + +1879 +memb_±r + = (cÚ¡ *)((cÚ¡ *) +¥Œ + + +–m +-> +memb_off£t +); + +1880 +memb_±r2 + = & +memb_±r +; + +1884 if( +–m +-> +deçuÉ_v®ue_cmp + &&ƒlm-> + `deçuÉ_v®ue_cmp +( +memb_±r2 +) == 1) + +1887 + `ASN_DEBUG +("Encodšg %s->%s", +td +-> +Çme +, +–m +->name); + +1888 +” + = +–m +-> +ty³ +-> +Ý +-> + `­”_’cod” +Ólm->ty³,ƒlm-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +, + +1889 * +memb_±r2 +, +po +); + +1890 if( +” +. +’coded + == -1) + +1891  +” +; + +1895 if(! +n_ex‹nsiÚs +è + `ASN__ENCODED_OK +( +” +); + +1897 + `ASN_DEBUG +("L’gth oà%d b™-m­", +n_ex‹nsiÚs +); + +1899 if( + `­”_put_n¦’gth +( +po +, +n_ex‹nsiÚs +)) + +1900 +ASN__ENCODE_FAILED +; + +1902 + `ASN_DEBUG +("B™-m­ oà%dƒËm’ts", +n_ex‹nsiÚs +); + +1905 if( + `SEQUENCE_hªdË_ex‹nsiÚs_­” +( +td +, +¥Œ +, +po +, 0è!ð +n_ex‹nsiÚs +) + +1906 +ASN__ENCODE_FAILED +; + +1908 + `ASN_DEBUG +("Wr™šg %dƒx‹nsiÚs", +n_ex‹nsiÚs +); + +1910 if( + `SEQUENCE_hªdË_ex‹nsiÚs_­” +( +td +, +¥Œ +, 0, +po +è!ð +n_ex‹nsiÚs +) + +1911 +ASN__ENCODE_FAILED +; + +1913 + `ASN__ENCODED_OK +( +” +); + +1914 + } +} + +1919 + $SEQUENCE_com·» +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +­Œ +, + +1920 cÚ¡ * +b±r +) { + +1921 +size_t + +edx +; + +1923  +edx + = 0;ƒdx < +td +-> +–em’ts_couÁ +;ƒdx++) { + +1924 +a¢_TYPE_memb”_t + * +–m + = & +td +-> +–em’ts +[ +edx +]; + +1925 cÚ¡ * +amemb +; + +1926 cÚ¡ * +bmemb +; + +1927  +»t +; + +1929 if( +–m +-> +æags + & +ATF_POINTER +) { + +1930 +amemb + = + +1931 *(cÚ¡ *cÚ¡ *)((cÚ¡ *) +­Œ + + +–m +-> +memb_off£t +); + +1932 +bmemb + = + +1933 *(cÚ¡ *cÚ¡ *)((cÚ¡ *) +b±r + + +–m +-> +memb_off£t +); + +1934 if(! +amemb +) { + +1935 if(! +bmemb +) ; + +1936 if( +–m +-> +deçuÉ_v®ue_cmp + + +1937 && +–m +-> + `deçuÉ_v®ue_cmp +( +bmemb +) == 0) { + +1942 } if(! +bmemb +) { + +1943 if( +–m +-> +deçuÉ_v®ue_cmp + + +1944 && +–m +-> + `deçuÉ_v®ue_cmp +( +amemb +) == 0) { + +1951 +amemb + = (cÚ¡ *)((cÚ¡ *) +­Œ + + +–m +-> +memb_off£t +); + +1952 +bmemb + = (cÚ¡ *)((cÚ¡ *) +b±r + + +–m +-> +memb_off£t +); + +1955 +»t + = +–m +-> +ty³ +-> +Ý +-> + `com·»_¡ruù +Ólm->ty³, +amemb +, +bmemb +); + +1956 if( +»t + != 0) „et; + +1960 + } +} + +1962 +a¢_TYPE_ݔ©iÚ_t + + ga¢_OP_SEQUENCE + = { + +1963 +SEQUENCE_ä“ +, + +1964 +SEQUENCE_´št +, + +1965 +SEQUENCE_com·» +, + +1966 +SEQUENCE_decode_b” +, + +1967 +SEQUENCE_’code_d” +, + +1968 +SEQUENCE_decode_x” +, + +1969 +SEQUENCE_’code_x” +, + +1970 #ifdef +ASN_DISABLE_OER_SUPPORT + + +1974 +SEQUENCE_decode_Ûr +, + +1975 +SEQUENCE_’code_Ûr +, + +1977 #ifdeà +ASN_DISABLE_PER_SUPPORT + + +1983 +SEQUENCE_decode_u³r +, + +1984 +SEQUENCE_’code_u³r +, + +1985 +SEQUENCE_decode_­” +, + +1986 +SEQUENCE_’code_­” +, + +1988 +SEQUENCE_¿ndom_fžl +, + +1993 +a¢_¿ndom_fžl_»suÉ_t + + +1994 + $SEQUENCE_¿ndom_fžl +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¥Œ +, + +1995 cÚ¡ +a¢_’codšg_cÚ¡¿šts_t + * +cÚ¡r +, + +1996 +size_t + +max_Ëngth +) { + +1997 cÚ¡ +a¢_SEQUENCE_¥ecifics_t + * +¥ecs + = + +1998 (cÚ¡ +a¢_SEQUENCE_¥ecifics_t + *) +td +-> +¥ecifics +; + +1999 +a¢_¿ndom_fžl_»suÉ_t + +»suÉ_ok + = { +ARFILL_OK +, 0}; + +2000 +a¢_¿ndom_fžl_»suÉ_t + +»suÉ_çžed + = { +ARFILL_FAILED +, 0}; + +2001 +a¢_¿ndom_fžl_»suÉ_t + +»suÉ_sk³d + = { +ARFILL_SKIPPED +, 0}; + +2002 * +¡ + = * +¥Œ +; + +2003 +size_t + +edx +; + +2005 if( +max_Ëngth + =ð0è +»suÉ_sk³d +; + +2007 () +cÚ¡r +; + +2009 if( +¡ + =ð +NULL +) { + +2010 +¡ + = + `CALLOC +(1, +¥ecs +-> +¡ruù_size +); + +2011 if( +¡ + =ð +NULL +) { + +2012  +»suÉ_çžed +; + +2016  +edx + = 0;ƒdx < +td +-> +–em’ts_couÁ +;ƒdx++) { + +2017 cÚ¡ +a¢_TYPE_memb”_t + * +–m + = & +td +-> +–em’ts +[ +edx +]; + +2018 * +memb_±r +; + +2019 ** +memb_±r2 +; + +2020 +a¢_¿ndom_fžl_»suÉ_t + +tm´es +; + +2022 if( +–m +-> +ÝtiÚ® + && + `a¢_¿ndom_b‘w“n +(0, 4) == 2) { + +2027 if( +–m +-> +æags + & +ATF_POINTER +) { + +2029 +memb_±r2 + = (**)((*) +¡ + + +–m +-> +memb_off£t +); + +2031 +memb_±r + = (*) +¡ + + +–m +-> +memb_off£t +; + +2032 +memb_±r2 + = & +memb_±r +; + +2035 +tm´es + = +–m +-> +ty³ +-> +Ý +-> + `¿ndom_fžl +( + +2036 +–m +-> +ty³ +, +memb_±r2 +, &–m-> +’codšg_cÚ¡¿šts +, + +2037 +max_Ëngth + > +»suÉ_ok +. +Ëngth + ? max_length -„esult_ok.length : 0); + +2038  +tm´es +. +code +) { + +2039  +ARFILL_OK +: + +2040 +»suÉ_ok +. +Ëngth + +ð +tm´es +.length; + +2042  +ARFILL_SKIPPED +: + +2043 + `as£¹ +(!( +–m +-> +æags + & +ATF_POINTER +è|| * +memb_±r2 + =ð +NULL +); + +2045  +ARFILL_FAILED +: + +2046 if( +¡ + =ð* +¥Œ +) { + +2047 + `ASN_STRUCT_RESET +(* +td +, +¡ +); + +2049 + `ASN_STRUCT_FREE +(* +td +, +¡ +); + +2051  +tm´es +; + +2055 * +¥Œ + = +¡ +; + +2057  +»suÉ_ok +; + +2058 + } +} + + @constr_SEQUENCE_OF.c + +6  + ~ + +7  + ~ + +8  + ~ + +13 +a¢_’c_rv®_t + + +14 + $SEQUENCE_OF_’code_d” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +±r +, + +15  +g_mode +, +b”_Žv_g_t + +g +, + +16 +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +17 +a¢_TYPE_memb”_t + * +–m + = +td +-> +–em’ts +; + +18 cÚ¡ +a¢_ªÚymous_£qu’û_ + * +li¡ + = + `_A_CSEQUENCE_FROM_VOID +( +±r +); + +19 +size_t + +compu‹d_size + = 0; + +20 +ssize_t + +’codšg_size + = 0; + +21 +a¢_’c_rv®_t + +”v® + = {0,0,0}; + +22  +edx +; + +24 + `ASN_DEBUG +("E¡im©šg sizoàSEQUENCE OF %s", +td +-> +Çme +); + +29  +edx + = 0;ƒdx < +li¡ +-> +couÁ +;ƒdx++) { + +30 * +memb_±r + = +li¡ +-> +¬¿y +[ +edx +]; + +31 if(! +memb_±r +) ; + +32 +”v® + = +–m +-> +ty³ +-> +Ý +-> + `d”_’cod” +Ólm->ty³, +memb_±r +, + +33 0, +–m +-> +g +, + +35 if( +”v® +. +’coded + == -1) + +36  +”v® +; + +37 +compu‹d_size + +ð +”v® +. +’coded +; + +43 +’codšg_size + = + `d”_wr™e_gs +( +td +, +compu‹d_size +, +g_mode +, 1, +g +, + +44 +cb +, +­p_key +); + +45 if( +’codšg_size + == -1) { + +46 +”v® +. +’coded + = -1; + +47 +”v® +. +çžed_ty³ + = +td +; + +48 +”v® +. +¡ruùu»_±r + = +±r +; + +49  +”v® +; + +52 +compu‹d_size + +ð +’codšg_size +; + +53 if(! +cb +) { + +54 +”v® +. +’coded + = +compu‹d_size +; + +55 + `ASN__ENCODED_OK +( +”v® +); + +58 + `ASN_DEBUG +("Encodšg memb” oàSEQUENCE OF %s", +td +-> +Çme +); + +63  +edx + = 0;ƒdx < +li¡ +-> +couÁ +;ƒdx++) { + +64 * +memb_±r + = +li¡ +-> +¬¿y +[ +edx +]; + +65 if(! +memb_±r +) ; + +66 +”v® + = +–m +-> +ty³ +-> +Ý +-> + `d”_’cod” +Ólm->ty³, +memb_±r +, + +67 0, +–m +-> +g +, + +68 +cb +, +­p_key +); + +69 if( +”v® +. +’coded + == -1) + +70  +”v® +; + +71 +’codšg_size + +ð +”v® +. +’coded +; + +74 if( +compu‹d_size + !ð( +size_t +) +’codšg_size +) { + +78 +”v® +. +’coded + = -1; + +79 +”v® +. +çžed_ty³ + = +td +; + +80 +”v® +. +¡ruùu»_±r + = +±r +; + +82 +”v® +. +’coded + = +compu‹d_size +; + +83 +”v® +. +¡ruùu»_±r + = 0; + +84 +”v® +. +çžed_ty³ + = 0; + +87  +”v® +; + +88 + } +} + +90 +a¢_’c_rv®_t + + +91 + $SEQUENCE_OF_’code_x” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +92  +žev– +, +x”_’cod”_æags_e + +æags +, + +93 +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +94 +a¢_’c_rv®_t + +” + = {0,0,0}; + +95 cÚ¡ +a¢_SET_OF_¥ecifics_t + * +¥ecs + = (cÚ¡‡¢_SET_OF_¥ecifics_ˆ*) +td +-> +¥ecifics +; + +96 cÚ¡ +a¢_TYPE_memb”_t + * +–m + = +td +-> +–em’ts +; + +97 cÚ¡ +a¢_ªÚymous_£qu’û_ + * +li¡ + = + `_A_CSEQUENCE_FROM_VOID +( +¥Œ +); + +98 cÚ¡ * +mÇme + = +¥ecs +-> +as_XMLV®ueLi¡ + + +100 : ((* +–m +-> +Çme +è?ƒlm->Çm:ƒlm-> +ty³ +-> +xml_g +); + +101 +size_t + +mËn + = +mÇme + ? + `¡¾’ +(mname) : 0; + +102  +xÿn + = ( +æags + & +XER_F_CANONICAL +); + +103  +i +; + +105 if(! +¥Œ +è +ASN__ENCODE_FAILED +; + +107 +” +. +’coded + = 0; + +109  +i + = 0; i < +li¡ +-> +couÁ +; i++) { + +110 +a¢_’c_rv®_t + +tm³r + = {0,0,0}; + +111 * +memb_±r + = +li¡ +-> +¬¿y +[ +i +]; + +112 if(! +memb_±r +) ; + +114 if( +mÇme +) { + +115 if(! +xÿn +è + `ASN__TEXT_INDENT +(1, +žev– +); + +116 + `ASN__CALLBACK3 +("<", 1, +mÇme +, +mËn +, ">", 1); + +119 +tm³r + = +–m +-> +ty³ +-> +Ý +-> + `x”_’cod” +Ólm->ty³, +memb_±r +, +žev– + + 1, + +120 +æags +, +cb +, +­p_key +); + +121 if( +tm³r +. +’coded + == -1) mper; + +122 +” +. +’coded + +ð +tm³r +.encoded; + +123 if( +tm³r +. +’coded + =ð0 && +¥ecs +-> +as_XMLV®ueLi¡ +) { + +124 cÚ¡ * +Çme + = +–m +-> +ty³ +-> +xml_g +; + +125 +size_t + +Ën + = + `¡¾’ +( +Çme +); + +126 if(! +xÿn +è + `ASN__TEXT_INDENT +(1, +žev– + + 1); + +127 + `ASN__CALLBACK3 +("<", 1, +Çme +, +Ën +, "/>", 2); + +130 if( +mÇme +) { + +131 + `ASN__CALLBACK3 +("", 1); + +135 if(! +xÿn +è + `ASN__TEXT_INDENT +(1, +žev– + - 1); + +137 + `ASN__ENCODED_OK +( +” +); + +138 +cb_çžed +: + +139 +ASN__ENCODE_FAILED +; + +140 + } +} + +142 #iâdeà +ASN_DISABLE_PER_SUPPORT + + +144 +a¢_’c_rv®_t + + +145 + $SEQUENCE_OF_’code_u³r +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +146 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +147 cÚ¡ * +¥Œ +, +a¢_³r_ou_t + * +po +) { + +148 cÚ¡ +a¢_ªÚymous_£qu’û_ + * +li¡ +; + +149 cÚ¡ +a¢_³r_cÚ¡¿št_t + * +ù +; + +150 +a¢_’c_rv®_t + +” + = {0,0,0}; + +151 cÚ¡ +a¢_TYPE_memb”_t + * +–m + = +td +-> +–em’ts +; + +152 +size_t + +’coded_edx +; + +154 if(! +¥Œ +è +ASN__ENCODE_FAILED +; + +155 +li¡ + = + `_A_CSEQUENCE_FROM_VOID +( +¥Œ +); + +157 +” +. +’coded + = 0; + +159 + `ASN_DEBUG +("Encodšg % a SEQUENCE OF (%d)", +td +-> +Çme +, +li¡ +-> +couÁ +); + +161 if( +cÚ¡¿šts +è +ù + = &cÚ¡¿šts-> +size +; + +162 if( +td +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +) + +163 +ù + = & +td +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +-> +size +; + +164 +ù + = 0; + +167 if( +ù +) { + +168  +nÙ_š_roÙ + = + +169 ( +li¡ +-> +couÁ + < +ù +-> +low”_bound + ||†i¡->couÁ > ct-> +uµ”_bound +); + +170 + `ASN_DEBUG +("lb %ld ub %ld %s", +ù +-> +low”_bound +, ct-> +uµ”_bound +, + +171 +ù +-> +æags + & +APC_EXTENSIBLE + ? "ext" : "fix"); + +172 if( +ù +-> +æags + & +APC_EXTENSIBLE +) { + +174 if( + `³r_put_ãw_b™s +( +po +, +nÙ_š_roÙ +, 1)è +ASN__ENCODE_FAILED +; + +175 if( +nÙ_š_roÙ +è +ù + = 0; + +176 } if( +nÙ_š_roÙ + && +ù +-> +efãùive_b™s + >= 0) { + +177 +ASN__ENCODE_FAILED +; + +182 if( +ù + && ct-> +efãùive_b™s + >= 0) { + +184 if( + `³r_put_ãw_b™s +( +po +, +li¡ +-> +couÁ + - +ù +-> +low”_bound +, + +185 +ù +-> +efãùive_b™s +)) + +186 +ASN__ENCODE_FAILED +; + +187 } if( +li¡ +-> +couÁ + == 0) { + +191 ià( + `u³r_put_Ëngth +( +po +, 0, 0)) { + +192 +ASN__ENCODE_FAILED +; + +194 + `ASN__ENCODED_OK +( +” +); + +197  +’coded_edx + = 0; ( +ssize_t +ëncoded_edx < +li¡ +-> +couÁ +;) { + +198 +ssize_t + +may_’code +; + +199 +size_t + +edx +; + +200  +Ãed_eom + = 0; + +202 if( +ù + && ct-> +efãùive_b™s + >= 0) { + +203 +may_’code + = +li¡ +-> +couÁ +; + +205 +may_’code + = + +206 + `u³r_put_Ëngth +( +po +, +li¡ +-> +couÁ + - +’coded_edx +, & +Ãed_eom +); + +207 if( +may_’code + < 0è +ASN__ENCODE_FAILED +; + +210  +edx + = +’coded_edx +;ƒdx <ƒncoded_edx + +may_’code +;ƒdx++) { + +211 * +memb_±r + = +li¡ +-> +¬¿y +[ +edx +]; + +212 if(! +memb_±r +è +ASN__ENCODE_FAILED +; + +213 +” + = +–m +-> +ty³ +-> +Ý +-> + `u³r_’cod” +( + +214 +–m +-> +ty³ +,ƒlm-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +, +memb_±r +, + +215 +po +); + +216 if( +” +. +’coded + =ð-1è +ASN__ENCODE_FAILED +; + +219 if( +Ãed_eom + && + `u³r_put_Ëngth +( +po +, 0, 0)) + +220 +ASN__ENCODE_FAILED +; + +222 +’coded_edx + +ð +may_’code +; + +225 + `ASN__ENCODED_OK +( +” +); + +226 + } +} + +228 +a¢_’c_rv®_t + + +229 + $SEQUENCE_OF_’code_­” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +230 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +231 cÚ¡ * +¥Œ +, +a¢_³r_ou_t + * +po +) { + +232 cÚ¡ +a¢_ªÚymous_£qu’û_ + * +li¡ +; + +233 cÚ¡ +a¢_³r_cÚ¡¿št_t + * +ù +; + +234 +a¢_’c_rv®_t + +” + = {0,0,0}; + +235 +a¢_TYPE_memb”_t + * +–m + = +td +-> +–em’ts +; + +236  +£q +; + +238 if(! +¥Œ +è +ASN__ENCODE_FAILED +; + +239 +li¡ + = + `_A_CSEQUENCE_FROM_VOID +( +¥Œ +); + +241 +” +. +’coded + = 0; + +243 + `ASN_DEBUG +("Encodšg % a SEQUENCE OF siz(%dèusšg ALIGNED PER", +td +-> +Çme +, +li¡ +-> +couÁ +); + +245 if( +cÚ¡¿šts +è +ù + = &cÚ¡¿šts-> +size +; + +246 if( +td +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +) + +247 +ù + = & +td +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +-> +size +; + +248 +ù + = 0; + +251 if( +ù +) { + +252  +nÙ_š_roÙ + = ( +li¡ +-> +couÁ + < +ù +-> +low”_bound + + +253 || +li¡ +-> +couÁ + > +ù +-> +uµ”_bound +); + +254 + `ASN_DEBUG +("lb %ld ub %ld %s", + +255 +ù +-> +low”_bound +, ct-> +uµ”_bound +, + +256 +ù +-> +æags + & +APC_EXTENSIBLE + ? "ext" : "fix"); + +257 if( +ù +-> +æags + & +APC_EXTENSIBLE +) { + +259 if( + `³r_put_ãw_b™s +( +po +, +nÙ_š_roÙ +, 1)) + +260 +ASN__ENCODE_FAILED +; + +261 if( +nÙ_š_roÙ +è +ù + = 0; + +262 } if( +nÙ_š_roÙ + && +ù +-> +efãùive_b™s + >= 0) + +263 +ASN__ENCODE_FAILED +; + +266 if( +ù + && ct-> +efãùive_b™s + >= 0) { + +272 ià( + `­”_put_Ëngth +( +po +, +ù +-> +uµ”_bound + - ct-> +low”_bound + + 1, +li¡ +-> +couÁ + - ct->lower_bound) < 0) + +273 +ASN__ENCODE_FAILED +; + +276  +£q + = -1; seq < +li¡ +-> +couÁ +;) { + +277 +ssize_t + +mayEncode +; + +278 if( +£q + < 0) seq = 0; + +279 if( +ù + && ct-> +efãùive_b™s + >= 0) { + +280 +mayEncode + = +li¡ +-> +couÁ +; + +282 +mayEncode + = + `­”_put_Ëngth +( +po +, -1, +li¡ +-> +couÁ + - +£q +); + +283 if( +mayEncode + < 0è +ASN__ENCODE_FAILED +; + +286  +mayEncode +--) { + +287 * +memb_±r + = +li¡ +-> +¬¿y +[ +£q +++]; + +288 if(! +memb_±r +è +ASN__ENCODE_FAILED +; + +289 +” + = +–m +-> +ty³ +-> +Ý +-> + `­”_’cod” +(elm->type, + +290 +–m +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +, +memb_±r +, +po +); + +291 if( +” +. +’coded + == -1) + +292 +ASN__ENCODE_FAILED +; + +296 + `ASN__ENCODED_OK +( +” +); + +297 + } +} + +301 + $SEQUENCE_OF_com·» +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +­Œ +, + +302 cÚ¡ * +b±r +) { + +303 cÚ¡ +a¢_ªÚymous_£qu’û_ + * +a + = + `_A_CSEQUENCE_FROM_VOID +( +­Œ +); + +304 cÚ¡ +a¢_ªÚymous_£qu’û_ + * +b + = + `_A_CSEQUENCE_FROM_VOID +( +b±r +); + +305 +ssize_t + +idx +; + +307 if( +a + && +b +) { + +308 +ssize_t + +commÚ_Ëngth + = ( +a +-> +couÁ + < +b +->count ?‡->count : b->count); + +309  +idx + = 0; idx < +commÚ_Ëngth +; idx++) { + +310  +»t + = +td +-> +–em’ts +-> +ty³ +-> +Ý +-> + `com·»_¡ruù +( + +311 +td +-> +–em’ts +-> +ty³ +, +a +-> +¬¿y +[ +idx +], +b +->array[idx]); + +312 if( +»t +) „et; + +315 if( +idx + < +b +-> +couÁ +) + +317 if( +idx + < +a +-> +couÁ +)  1; + +319 } if(! +a +) { + +321 } if(! +b +) { + +326 + } +} + +329 +a¢_TYPE_ݔ©iÚ_t + + ga¢_OP_SEQUENCE_OF + = { + +330 +SEQUENCE_OF_ä“ +, + +331 +SEQUENCE_OF_´št +, + +332 +SEQUENCE_OF_com·» +, + +333 +SEQUENCE_OF_decode_b” +, + +334 +SEQUENCE_OF_’code_d” +, + +335 +SEQUENCE_OF_decode_x” +, + +336 +SEQUENCE_OF_’code_x” +, + +337 #ifdef +ASN_DISABLE_OER_SUPPORT + + +341 +SEQUENCE_OF_decode_Ûr +, + +342 +SEQUENCE_OF_’code_Ûr +, + +344 #ifdeà +ASN_DISABLE_PER_SUPPORT + + +350 +SEQUENCE_OF_decode_u³r +, + +351 +SEQUENCE_OF_’code_u³r +, + +352 +SEQUENCE_OF_decode_­” +, + +353 +SEQUENCE_OF_’code_­” +, + +355 +SEQUENCE_OF_¿ndom_fžl +, + + @constr_SET_OF.c + +6  + ~ + +7  + ~ + +8  + ~ + +15  + #LEFT + (( +size +<( +size_t +) +ùx +-> +Ëá +)?size:(size_t)ùx->Ëá) + + ) + +28  + #SIZE_VIOLATION + ( +ùx +-> +Ëá + >ð0 && ( +size_t +)ùx->Ëá <ð +size +) + + ) + +34 #undeà +ADVANCE + + +35  + #ADVANCE +( +num_by‹s +) do { \ + +36 +size_t + +num + = +num_by‹s +; \ + +37 +±r + = ((cÚ¡ *íŒè+ +num +;\ + +38 +size + -ð +num +; \ + +39 if( +ùx +-> +Ëá + >= 0) \ + +40 +ùx +-> +Ëá + -ð +num +; \ + +41 +cÚsumed_my£lf + +ð +num +; \ + +42 } 0) + + ) + +47 #undeà +NEXT_PHASE + + +48 #undeà +PHASE_OUT + + +49  + #NEXT_PHASE +( +ùx +) do { \ + +50 +ùx +-> +pha£ +++; \ + +51 +ùx +-> +¡• + = 0; \ + +52 } 0) + + ) + +53  + #PHASE_OUT +( +ùx +èdØ{ ctx-> +pha£ + = 10; } 0) + + ) + +58 #undeà +RETURN + + +59  + #RETURN +( +_code +) do { \ + +60 +rv® +. +code + = +_code +; \ + +61 +rv® +. +cÚsumed + = +cÚsumed_my£lf +;\ + +62  +rv® +; \ + +63 } 0) + + ) + +68 +a¢_dec_rv®_t + + +69 + $SET_OF_decode_b” +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +70 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¡ruù_±r +, + +71 cÚ¡ * +±r +, +size_t + +size +,  +g_mode +) { + +75 cÚ¡ +a¢_SET_OF_¥ecifics_t + * +¥ecs + = (cÚ¡‡¢_SET_OF_¥ecifics_ˆ*) +td +-> +¥ecifics +; + +76 cÚ¡ +a¢_TYPE_memb”_t + * +–m + = +td +-> +–em’ts +; + +81 * +¡ + = * +¡ruù_±r +; + +82 +a¢_¡ruù_ùx_t + * +ùx +; + +84 +b”_Žv_g_t + +Žv_g +; + +85 +a¢_dec_rv®_t + +rv® +; + +87 +ssize_t + +cÚsumed_my£lf + = 0; + +89 + `ASN_DEBUG +("Decodšg % a SET OF", +td +-> +Çme +); + +94 if( +¡ + == 0) { + +95 +¡ + = * +¡ruù_±r + = + `CALLOC +(1, +¥ecs +-> +¡ruù_size +); + +96 if( +¡ + == 0) { + +97 + `RETURN +( +RC_FAIL +); + +104 +ùx + = ( +a¢_¡ruù_ùx_t + *)((*) +¡ + + +¥ecs +-> +ùx_off£t +); + +109  +ùx +-> +pha£ +) { + +117 +rv® + = + `b”_check_gs +( +Ýt_codec_ùx +, +td +, +ùx +, +±r +, +size +, + +118 +g_mode +, 1, & +ùx +-> +Ëá +, 0); + +119 if( +rv® +. +code + !ð +RC_OK +) { + +120 + `ASN_DEBUG +("%sagging check failed: %d", + +121 +td +-> +Çme +, +rv® +. +code +); + +122  +rv® +; + +125 if( +ùx +-> +Ëá + >= 0) + +126 +ùx +-> +Ëá + +ð +rv® +. +cÚsumed +; + +127 + `ADVANCE +( +rv® +. +cÚsumed +); + +129 + `ASN_DEBUG +("Structure consumes %ld bytes, " + +130 "bufã¸%ld", () +ùx +-> +Ëá +, () +size +); + +132 + `NEXT_PHASE +( +ùx +); + +140 ;; +ùx +-> +¡• + = 0) { + +141 +ssize_t + +g_Ën +; + +143 if( +ùx +-> +¡• + & 1) + +144  +miüÝha£2 +; + +150 if( +ùx +-> +Ëá + == 0) { + +151 + `ASN_DEBUG +("End oàSET OF %s", +td +-> +Çme +); + +156 + `PHASE_OUT +( +ùx +); + +157 + `RETURN +( +RC_OK +); + +163 +g_Ën + = + `b”_ãtch_g +( +±r +, +LEFT +, & +Žv_g +); + +164  +g_Ën +) { + +165 0: if(! +SIZE_VIOLATION +è + `RETURN +( +RC_WMORE +); + +167 -1: + `RETURN +( +RC_FAIL +); + +170 if( +ùx +-> +Ëá + < 0 && ((cÚ¡ +ušt8_t + *) +±r +)[0] == 0) { + +171 if( +LEFT + < 2) { + +172 if( +SIZE_VIOLATION +) + +173 + `RETURN +( +RC_FAIL +); + +175 + `RETURN +( +RC_WMORE +); + +176 } if(((cÚ¡ +ušt8_t + *) +±r +)[1] == 0) { + +186 if( +–m +-> +g + !ð( +b”_Žv_g_t +)-1) { + +187 if( + `BER_TAGS_EQUAL +( +Žv_g +, +–m +-> +g +)) { + +192 + `ASN_DEBUG +("Unexpectedag %s fixed SET OF %s", + +193 + `b”_Žv_g_¡ršg +( +Žv_g +), +td +-> +Çme +); + +194 + `ASN_DEBUG +("%s SET OF hasag %s", + +195 +td +-> +Çme +, + `b”_Žv_g_¡ršg +( +–m +-> +g +)); + +196 + `RETURN +( +RC_FAIL +); + +203 +ùx +-> +¡• + |= 1; + +204 +miüÝha£2 +: + +209 +rv® + = +–m +-> +ty³ +-> +Ý +-> + `b”_decod” +( +Ýt_codec_ùx +, + +210 +–m +-> +ty³ +, & +ùx +-> +±r +,…Œ, +LEFT +, 0); + +211 + `ASN_DEBUG +("In %s SET OF %s code %d consumed %d", + +212 +td +-> +Çme +, +–m +-> +ty³ +->name, + +213 +rv® +. +code +, (ìv®. +cÚsumed +); + +214  +rv® +. +code +) { + +215  +RC_OK +: + +217 +a¢_ªÚymous_£t_ + * +li¡ + = + `_A_SET_FROM_VOID +( +¡ +); + +218 if( + `ASN_SET_ADD +( +li¡ +, +ùx +-> +±r +) != 0) + +219 + `RETURN +( +RC_FAIL +); + +221 +ùx +-> +±r + = 0; + +224  +RC_WMORE +: + +225 if(! +SIZE_VIOLATION +) { + +226 + `ADVANCE +( +rv® +. +cÚsumed +); + +227 + `RETURN +( +RC_WMORE +); + +230  +RC_FAIL +: + +231 + `ASN_STRUCT_FREE +(* +–m +-> +ty³ +, +ùx +-> +±r +); + +232 +ùx +-> +±r + = 0; + +233 + `RETURN +( +RC_FAIL +); + +236 + `ADVANCE +( +rv® +. +cÚsumed +); + +239 + `NEXT_PHASE +( +ùx +); + +244  +ùx +-> +Ëá + < 0) { + +245 if( +LEFT + < 2) { + +246 if( +LEFT + > 0 && ((cÚ¡ *) +±r +)[0] != 0) { + +248 + `RETURN +( +RC_FAIL +); + +250 + `RETURN +( +RC_WMORE +); + +253 if(((cÚ¡ *) +±r +)[0] == 0 + +254 && ((cÚ¡ *) +±r +)[1] == 0) { + +255 + `ADVANCE +(2); + +256 +ùx +-> +Ëá +++; + +258 + `RETURN +( +RC_FAIL +); + +262 + `PHASE_OUT +( +ùx +); + +265 + `RETURN +( +RC_OK +); + +266 + } +} + +271  + s_–_bufãr + { + +272 +ušt8_t + * + mbuf +; + +273 +size_t + + mËngth +; + +274 +size_t + + m®loÿ‹d_size +; + +275  + mb™s_unu£d +; + +278  + $_–_addby‹s +(cÚ¡ * +bufãr +, +size_t + +size +, * +–_buf_±r +) { + +279  +_–_bufãr + * +–_buf + = (_–_bufã¸*) +–_buf_±r +; + +281 if( +–_buf +-> +Ëngth + + +size + >ƒl_buf-> +®loÿ‹d_size +) { + +282 +size_t + +Ãw_size + = +–_buf +-> +®loÿ‹d_size + ?ƒl_buf->allocated_size : 8; + +283 * +p +; + +286 +Ãw_size + <<= 2; + +287 }  +–_buf +-> +Ëngth + + +size + > +Ãw_size +); + +289 +p + = + `REALLOC +( +–_buf +-> +buf +, +Ãw_size +); + +290 if( +p +) { + +291 +–_buf +-> +buf + = +p +; + +292 +–_buf +-> +®loÿ‹d_size + = +Ãw_size +; + +298 + `memýy +( +–_buf +-> +buf + +ƒl_buf-> +Ëngth +, +bufãr +, +size +); + +300 +–_buf +-> +Ëngth + +ð +size +; + +302 + } +} + +304  + $as£¹_unu£d_b™s +(cÚ¡  +_–_bufãr +* +p +) { + +305 if( +p +-> +Ëngth +) { + +306 + `as£¹ +(( +p +-> +buf +[p-> +Ëngth +-1] & ~(0xfà<<…-> +b™s_unu£d +)) == 0); + +308 + `as£¹ +( +p +-> +b™s_unu£d + == 0); + +310 + } +} + +312  + $_–_buf_cmp +(cÚ¡ * +­ +, cÚ¡ * +bp +) { + +313 cÚ¡  +_–_bufãr + * +a + = (cÚ¡ _–_bufã¸*) +­ +; + +314 cÚ¡  +_–_bufãr + * +b + = (cÚ¡ _–_bufã¸*) +bp +; + +315 +size_t + +commÚ_Ën +; + +316  +»t + = 0; + +318 if( +a +-> +Ëngth + < +b +->length) + +319 +commÚ_Ën + = +a +-> +Ëngth +; + +321 +commÚ_Ën + = +b +-> +Ëngth +; + +323 ià( +a +-> +buf + && +b +->buf) { + +324 +»t + = + `memcmp +( +a +-> +buf +, +b +->buf, +commÚ_Ën +); + +326 if( +»t + == 0) { + +327 if( +a +-> +Ëngth + < +b +->length) + +328 +»t + = -1; + +329 if( +a +-> +Ëngth + > +b +->length) + +330 +»t + = 1; + +332 + `as£¹_unu£d_b™s +( +a +); + +333 + `as£¹_unu£d_b™s +( +b +); + +336  +»t +; + +337 + } +} + +340 + $SET_OF__’code_s܋d_ä“ +( +_–_bufãr + * +–_buf +, +size_t + +couÁ +) { + +341 +size_t + +i +; + +343  +i + = 0; i < +couÁ +; i++) { + +344 + `FREEMEM +( +–_buf +[ +i +]. +buf +); + +347 + `FREEMEM +( +–_buf +); + +348 + } +} + +350 + eSET_OF__’code_m‘hod + { + +351 + mSOES_DER +, + +352 + mSOES_CUPER + + +355  +_–_bufãr + * + +356 + $SET_OF__’code_s܋d +(cÚ¡ +a¢_TYPE_memb”_t + * +–m +, + +357 cÚ¡ +a¢_ªÚymous_£t_ + * +li¡ +, + +358 +SET_OF__’code_m‘hod + +m‘hod +) { + +359  +_–_bufãr + * +’coded_–s +; + +360  +edx +; + +362 +’coded_–s + = + +363 ( +_–_bufãr + *) + `CALLOC +( +li¡ +-> +couÁ +, ( +’coded_–s +[0])); + +364 if( +’coded_–s + =ð +NULL +) { + +365  +NULL +; + +371  +edx + = 0;ƒdx < +li¡ +-> +couÁ +;ƒdx++) { + +372 cÚ¡ * +memb_±r + = +li¡ +-> +¬¿y +[ +edx +]; + +373  +_–_bufãr + * +’codšg_– + = & +’coded_–s +[ +edx +]; + +374 +a¢_’c_rv®_t + +”v® + = {0,0,0}; + +376 if(! +memb_±r +) ; + +381  +m‘hod +) { + +382  +SOES_DER +: + +383 +”v® + = +–m +-> +ty³ +-> +Ý +-> + `d”_’cod” +Ólm->ty³, +memb_±r +, 0,ƒlm-> +g +, + +384 +_–_addby‹s +, +’codšg_– +); + +386  +SOES_CUPER +: + +387 +”v® + = + `u³r_’code +( +–m +-> +ty³ +, + +388 +–m +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +, + +389 +memb_±r +, +_–_addby‹s +, +’codšg_– +); + +390 if( +”v® +. +’coded + != -1) { + +391 +size_t + +exŒa_b™s + = +”v® +. +’coded + % 8; + +392 + `as£¹ +( +’codšg_– +-> +Ëngth + =ð( +size_t +)( +”v® +. +’coded + + 7) / 8); + +393 +’codšg_– +-> +b™s_unu£d + = (8 - +exŒa_b™s +) & 0x7; + +397 + `as£¹ +(!"Unreachable"); + +400 if( +”v® +. +’coded + < 0) ; + +403 if( +edx + =ð +li¡ +-> +couÁ +) { + +407 + `qsÜt +( +’coded_–s +, +li¡ +-> +couÁ +, Óncoded_–s[0]), +_–_buf_cmp +); + +409  +’coded_–s +; + +411 + `SET_OF__’code_s܋d_ä“ +( +’coded_–s +, +edx +); + +412  +NULL +; + +414 + } +} + +420 +a¢_’c_rv®_t + + +421 + $SET_OF_’code_d” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +422  +g_mode +, +b”_Žv_g_t + +g +, +a¢_­p_cÚsume_by‹s_f + * +cb +, + +423 * +­p_key +) { + +424 cÚ¡ +a¢_TYPE_memb”_t + * +–m + = +td +-> +–em’ts +; + +425 cÚ¡ +a¢_ªÚymous_£t_ + * +li¡ + = + `_A_CSET_FROM_VOID +( +¥Œ +); + +426 +size_t + +compu‹d_size + = 0; + +427 +ssize_t + +’codšg_size + = 0; + +428  +_–_bufãr + * +’coded_–s +; + +429  +edx +; + +431 + `ASN_DEBUG +("E¡im©šg sizfÜ SET OF %s", +td +-> +Çme +); + +436  +edx + = 0;ƒdx < +li¡ +-> +couÁ +;ƒdx++) { + +437 * +memb_±r + = +li¡ +-> +¬¿y +[ +edx +]; + +438 +a¢_’c_rv®_t + +”v® + = {0,0,0}; + +440 if(! +memb_±r +è +ASN__ENCODE_FAILED +; + +442 +”v® + = + +443 +–m +-> +ty³ +-> +Ý +-> + `d”_’cod” +Ólm->ty³, +memb_±r +, 0,ƒlm-> +g +, 0, 0); + +444 if( +”v® +. +’coded + == -1) ƒrval; + +445 +compu‹d_size + +ð +”v® +. +’coded +; + +452 +’codšg_size + = + +453 + `d”_wr™e_gs +( +td +, +compu‹d_size +, +g_mode +, 1, +g +, +cb +, +­p_key +); + +454 if( +’codšg_size + < 0) { + +455 +ASN__ENCODE_FAILED +; + +457 +compu‹d_size + +ð +’codšg_size +; + +459 if(! +cb + || +li¡ +-> +couÁ + == 0) { + +460 +a¢_’c_rv®_t + +”v® + = {0,0,0}; + +461 +”v® +. +’coded + = +compu‹d_size +; + +462 + `ASN__ENCODED_OK +( +”v® +); + +465 + `ASN_DEBUG +("Encodšg memb” oà% SET OF", +td +-> +Çme +); + +472 +’coded_–s + = + `SET_OF__’code_s܋d +( +–m +, +li¡ +, +SOES_DER +); + +478  +edx + = 0;ƒdx < +li¡ +-> +couÁ +;ƒdx++) { + +479  +_–_bufãr + * +’coded_– + = & +’coded_–s +[ +edx +]; + +481 if( + `cb +( +’coded_– +-> +buf +,ƒncoded_–-> +Ëngth +, +­p_key +) < 0) { + +484 +’codšg_size + +ð +’coded_– +-> +Ëngth +; + +488 + `SET_OF__’code_s܋d_ä“ +( +’coded_–s +, +li¡ +-> +couÁ +); + +490 if( +edx + =ð +li¡ +-> +couÁ +) { + +491 +a¢_’c_rv®_t + +”v® + = {0,0,0}; + +492 + `as£¹ +( +compu‹d_size + =ð( +size_t +) +’codšg_size +); + +493 +”v® +. +’coded + = +compu‹d_size +; + +494 + `ASN__ENCODED_OK +( +”v® +); + +496 +ASN__ENCODE_FAILED +; + +498 + } +} + +500 #undeà +XER_ADVANCE + + +501  + #XER_ADVANCE +( +num_by‹s +) do { \ + +502 +size_t + +num + = +num_by‹s +; \ + +503 +buf_±r + = ((cÚ¡ *)buf_±rè+ +num +;\ + +504 +size + -ð +num +; \ + +505 +cÚsumed_my£lf + +ð +num +; \ + +506 } 0) + + ) + +511 +a¢_dec_rv®_t + + +512 + $SET_OF_decode_x” +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +513 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¡ruù_±r +, + +514 cÚ¡ * +Ýt_mÇme +, cÚ¡ * +buf_±r +, +size_t + +size +) { + +518 cÚ¡ +a¢_SET_OF_¥ecifics_t + * +¥ecs + = (cÚ¡‡¢_SET_OF_¥ecifics_ˆ*) +td +-> +¥ecifics +; + +519 cÚ¡ +a¢_TYPE_memb”_t + * +–em’t + = +td +-> +–em’ts +; + +520 cÚ¡ * +–m_g +; + +521 cÚ¡ * +xml_g + = +Ýt_mÇme + ? o±_mÇm: +td +->xml_tag; + +526 * +¡ + = * +¡ruù_±r +; + +527 +a¢_¡ruù_ùx_t + * +ùx +; + +529 +a¢_dec_rv®_t + +rv® + = { +RC_OK +, 0}; + +530 +ssize_t + +cÚsumed_my£lf + = 0; + +535 if( +¡ + == 0) { + +536 +¡ + = * +¡ruù_±r + = + `CALLOC +(1, +¥ecs +-> +¡ruù_size +); + +537 if( +¡ + =ð0è + `RETURN +( +RC_FAIL +); + +541 if( +¥ecs +-> +as_XMLV®ueLi¡ +) { + +542 +–m_g + = ( +¥ecs +-> +as_XMLV®ueLi¡ + == 1) ? 0 : ""; + +544 +–m_g + = (* +–em’t +-> +Çme +) + +545 ? +–em’t +-> +Çme + :ƒËm’t-> +ty³ +-> +xml_g +; + +551 +ùx + = ( +a¢_¡ruù_ùx_t + *)((*) +¡ + + +¥ecs +-> +ùx_off£t +); + +559 ; +ùx +-> +pha£ + <= 2;) { + +560 +px”_chunk_ty³_e + +ch_ty³ +; + +561 +ssize_t + +ch_size +; + +562 +x”_check_g_e + +tcv +; + +567 if( +ùx +-> +pha£ + == 2) { + +568 +a¢_dec_rv®_t + +tm´v® + = { +RC_OK +, 0}; + +571 + `ASN_DEBUG +("XER/SET OFƒËm’ˆ[%s]", +–m_g +); + +572 +tm´v® + = +–em’t +-> +ty³ +-> +Ý +-> + `x”_decod” +( +Ýt_codec_ùx +, + +573 +–em’t +-> +ty³ +, & +ùx +-> +±r +, +–m_g +, + +574 +buf_±r +, +size +); + +575 if( +tm´v® +. +code + =ð +RC_OK +) { + +576 +a¢_ªÚymous_£t_ + * +li¡ + = + `_A_SET_FROM_VOID +( +¡ +); + +577 if( + `ASN_SET_ADD +( +li¡ +, +ùx +-> +±r +) != 0) + +578 + `RETURN +( +RC_FAIL +); + +579 +ùx +-> +±r + = 0; + +580 + `XER_ADVANCE +( +tm´v® +. +cÚsumed +); + +582 + `XER_ADVANCE +( +tm´v® +. +cÚsumed +); + +583 + `RETURN +( +tm´v® +. +code +); + +585 +ùx +-> +pha£ + = 1; + +586 + `ASN_DEBUG +("XER/SET OF…ha£ => %d", +ùx +-> +pha£ +); + +593 +ch_size + = + `x”_Ãxt_tok’ +(& +ùx +-> +cڋxt +, + +594 +buf_±r +, +size +, & +ch_ty³ +); + +595 if( +ch_size + == -1) { + +596 + `RETURN +( +RC_FAIL +); + +598  +ch_ty³ +) { + +599  +PXER_WMORE +: + +600 + `RETURN +( +RC_WMORE +); + +601  +PXER_COMMENT +: + +602  +PXER_TEXT +: + +603 + `XER_ADVANCE +( +ch_size +); + +605  +PXER_TAG +: + +610 +tcv + = + `x”_check_g +( +buf_±r +, +ch_size +, +xml_g +); + +611 + `ASN_DEBUG +("XER/SET OF:cv = %d,…h=%d=%s", + +612 +tcv +, +ùx +-> +pha£ +, +xml_g +); + +613  +tcv +) { + +614  +XCT_CLOSING +: + +615 if( +ùx +-> +pha£ + == 0) ; + +616 +ùx +-> +pha£ + = 0; + +618  +XCT_BOTH +: + +619 if( +ùx +-> +pha£ + == 0) { + +621 + `XER_ADVANCE +( +ch_size +); + +622 +ùx +-> +pha£ + = 3; + +623 + `RETURN +( +RC_OK +); + +626  +XCT_OPENING +: + +627 if( +ùx +-> +pha£ + == 0) { + +628 + `XER_ADVANCE +( +ch_size +); + +629 +ùx +-> +pha£ + = 1; + +633  +XCT_UNKNOWN_OP +: + +634  +XCT_UNKNOWN_BO +: + +636 + `ASN_DEBUG +("XER/SET OF:cv=%d,…h=%d", +tcv +, +ùx +-> +pha£ +); + +637 if( +ùx +-> +pha£ + == 1) { + +641 +ùx +-> +pha£ + = 2; + +649 + `ASN_DEBUG +("Unexpected XMLag in SET OF"); + +653 +ùx +-> +pha£ + = 3; + +654 + `RETURN +( +RC_FAIL +); + +655 + } +} + +659  + sx”_tmp_’c_s + { + +660 * + mbufãr +; + +661 +size_t + + moff£t +; + +662 +size_t + + msize +; + +663 } + tx”_tmp_’c_t +; + +665 + $SET_OF_’code_x”_ÿÎback +(cÚ¡ * +bufãr +, +size_t + +size +, * +key +) { + +666 +x”_tmp_’c_t + * +t + = (x”_tmp_’c_ˆ*) +key +; + +667 if( +t +-> +off£t + + +size + >=->size) { + +668 +size_t + +Ãwsize + = ( +t +-> +size + << 2) + size; + +669 * +p + = + `REALLOC +( +t +-> +bufãr +, +Ãwsize +); + +670 if(! +p +)  -1; + +671 +t +-> +bufãr + = +p +; + +672 +t +-> +size + = +Ãwsize +; + +674 + `memýy +((*) +t +-> +bufãr + +-> +off£t +, bufãr, +size +); + +675 +t +-> +off£t + +ð +size +; + +677 + } +} + +679 + $SET_OF_x”_Üd” +(cÚ¡ * +­Œ +, cÚ¡ * +b±r +) { + +680 cÚ¡ +x”_tmp_’c_t + * +a + = (cÚ¡ x”_tmp_’c_ˆ*) +­Œ +; + +681 cÚ¡ +x”_tmp_’c_t + * +b + = (cÚ¡ x”_tmp_’c_ˆ*) +b±r +; + +682 +size_t + +mšËn + = +a +-> +off£t +; + +683  +»t +; + +684 if( +b +-> +off£t + < +mšËn +) minlen = b->offset; + +686 +»t + = + `memcmp +( +a +-> +bufãr +, +b +->bufãr, +mšËn +); + +687 if( +»t + != 0) „et; + +688 if( +a +-> +off£t + =ð +b +->offset) + +690 if( +a +-> +off£t + =ð +mšËn +) + +693 + } +} + +696 +a¢_’c_rv®_t + + +697 + $SET_OF_’code_x” +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +,  +žev– +, + +698 +x”_’cod”_æags_e + +æags +, +a¢_­p_cÚsume_by‹s_f + * +cb +, + +699 * +­p_key +) { + +700 +a¢_’c_rv®_t + +” + = {0,0,0}; + +701 cÚ¡ +a¢_SET_OF_¥ecifics_t + * +¥ecs + = (cÚ¡‡¢_SET_OF_¥ecifics_ˆ*) +td +-> +¥ecifics +; + +702 cÚ¡ +a¢_TYPE_memb”_t + * +–m + = +td +-> +–em’ts +; + +703 cÚ¡ +a¢_ªÚymous_£t_ + * +li¡ + = + `_A_CSET_FROM_VOID +( +¥Œ +); + +704 cÚ¡ * +mÇme + = +¥ecs +-> +as_XMLV®ueLi¡ + + +705 ? 0 : ((* +–m +-> +Çme +è?ƒlm->Çm:ƒlm-> +ty³ +-> +xml_g +); + +706 +size_t + +mËn + = +mÇme + ? + `¡¾’ +(mname) : 0; + +707  +xÿn + = ( +æags + & +XER_F_CANONICAL +); + +708 +x”_tmp_’c_t + * +’cs + = 0; + +709 +size_t + +’cs_couÁ + = 0; + +710 * +Üigš®_­p_key + = +­p_key +; + +711 +a¢_­p_cÚsume_by‹s_f + * +Üigš®_cb + = +cb +; + +712  +i +; + +714 if(! +¥Œ +è +ASN__ENCODE_FAILED +; + +716 if( +xÿn +) { + +717 +’cs + = ( +x”_tmp_’c_t + *) + `MALLOC +( +li¡ +-> +couÁ + * (encs[0])); + +718 if(! +’cs +è +ASN__ENCODE_FAILED +; + +719 +cb + = +SET_OF_’code_x”_ÿÎback +; + +722 +” +. +’coded + = 0; + +724  +i + = 0; i < +li¡ +-> +couÁ +; i++) { + +725 +a¢_’c_rv®_t + +tm³r + = {0,0,0}; + +727 * +memb_±r + = +li¡ +-> +¬¿y +[ +i +]; + +728 if(! +memb_±r +) ; + +730 if( +’cs +) { + +731 + `mem£t +(& +’cs +[ +’cs_couÁ +], 0, (encs[0])); + +732 +­p_key + = & +’cs +[ +’cs_couÁ +]; + +733 +’cs_couÁ +++; + +736 if( +mÇme +) { + +737 if(! +xÿn +è + `ASN__TEXT_INDENT +(1, +žev– +); + +738 + `ASN__CALLBACK3 +("<", 1, +mÇme +, +mËn +, ">", 1); + +741 if(! +xÿn + && +¥ecs +-> +as_XMLV®ueLi¡ + == 1) + +742 + `ASN__TEXT_INDENT +(1, +žev– + + 1); + +743 +tm³r + = +–m +-> +ty³ +-> +Ý +-> + `x”_’cod” +Ólm->ty³, +memb_±r +, + +744 +žev– + + ( +¥ecs +-> +as_XMLV®ueLi¡ + != 2), + +745 +æags +, +cb +, +­p_key +); + +746 if( +tm³r +. +’coded + == -1) mper; + +747 +” +. +’coded + +ð +tm³r +.encoded; + +748 if( +tm³r +. +’coded + =ð0 && +¥ecs +-> +as_XMLV®ueLi¡ +) { + +749 cÚ¡ * +Çme + = +–m +-> +ty³ +-> +xml_g +; + +750 +size_t + +Ën + = + `¡¾’ +( +Çme +); + +751 + `ASN__CALLBACK3 +("<", 1, +Çme +, +Ën +, "/>", 2); + +754 if( +mÇme +) { + +755 + `ASN__CALLBACK3 +("", 1); + +760 if(! +xÿn +è + `ASN__TEXT_INDENT +(1, +žev– + - 1); + +762 if( +’cs +) { + +763 +x”_tmp_’c_t + * +’c + = +’cs +; + +764 +x”_tmp_’c_t + * +’d + = +’cs + + +’cs_couÁ +; + +765 +ssize_t + +cڌÞ_size + = 0; + +767 +” +. +’coded + = 0; + +768 +cb + = +Üigš®_cb +; + +769 +­p_key + = +Üigš®_­p_key +; + +770 + `qsÜt +( +’cs +, +’cs_couÁ +, Óncs[0]), +SET_OF_x”_Üd” +); + +772 ; +’c + < +’d +;ƒnc++) { + +773 + `ASN__CALLBACK +( +’c +-> +bufãr +,ƒnc-> +off£t +); + +774 + `FREEMEM +( +’c +-> +bufãr +); + +775 +’c +-> +bufãr + = 0; + +776 +cڌÞ_size + +ð +’c +-> +off£t +; + +778 + `as£¹ +( +cڌÞ_size + =ð +” +. +’coded +); + +781  +þ—nup +; + +782 +cb_çžed +: + +783 +ASN__ENCODE_FAILED +; + +784 +þ—nup +: + +785 if( +’cs +) { + +786 +size_t + +n +; + +787  +n + = 0;‚ < +’cs_couÁ +;‚++) { + +788 + `FREEMEM +( +’cs +[ +n +]. +bufãr +); + +790 + `FREEMEM +( +’cs +); + +792 + `ASN__ENCODED_OK +( +” +); + +793 + } +} + +796 + $SET_OF_´št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +,  +žev– +, + +797 +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +798 +a¢_TYPE_memb”_t + * +–m + = +td +-> +–em’ts +; + +799 cÚ¡ +a¢_ªÚymous_£t_ + * +li¡ + = + `_A_CSET_FROM_VOID +( +¥Œ +); + +800  +»t +; + +801  +i +; + +803 if(! +¥Œ +è ( + `cb +("", 8, +­p_key +) < 0) ? -1 : 0; + +806 if( + `cb +( +td +-> +Çme +, + `¡¾’ +Ñd->Çme), +­p_key +) < 0 + +807 || + `cb +(" ::ð{", 6, +­p_key +) < 0) + +810  +i + = 0; i < +li¡ +-> +couÁ +; i++) { + +811 cÚ¡ * +memb_±r + = +li¡ +-> +¬¿y +[ +i +]; + +812 if(! +memb_±r +) ; + +814 + `_i_INDENT +(1); + +816 +»t + = +–m +-> +ty³ +-> +Ý +-> + `´št_¡ruù +Ólm->ty³, +memb_±r +, + +817 +žev– + + 1, +cb +, +­p_key +); + +818 if( +»t +) „et; + +821 +žev– +--; + +822 + `_i_INDENT +(1); + +824  ( + `cb +("}", 1, +­p_key +) < 0) ? -1 : 0; + +825 + } +} + +828 + $SET_OF_ä“ +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, * +±r +, + +829 +a¢_¡ruù_ä“_m‘hod + +m‘hod +) { + +830 if( +td + && +±r +) { + +831 cÚ¡ +a¢_SET_OF_¥ecifics_t + * +¥ecs +; + +832 +a¢_TYPE_memb”_t + * +–m + = +td +-> +–em’ts +; + +833 +a¢_ªÚymous_£t_ + * +li¡ + = + `_A_SET_FROM_VOID +( +±r +); + +834 +a¢_¡ruù_ùx_t + * +ùx +; + +835  +i +; + +841  +i + = 0; i < +li¡ +-> +couÁ +; i++) { + +842 * +memb_±r + = +li¡ +-> +¬¿y +[ +i +]; + +843 if( +memb_±r +) + +844 + `ASN_STRUCT_FREE +(* +–m +-> +ty³ +, +memb_±r +); + +846 +li¡ +-> +couÁ + = 0; + +848 + `a¢_£t_em±y +( +li¡ +); + +850 +¥ecs + = (cÚ¡ +a¢_SET_OF_¥ecifics_t + *) +td +-> +¥ecifics +; + +851 +ùx + = ( +a¢_¡ruù_ùx_t + *)((*) +±r + + +¥ecs +-> +ùx_off£t +); + +852 if( +ùx +-> +±r +) { + +853 + `ASN_STRUCT_FREE +(* +–m +-> +ty³ +, +ùx +-> +±r +); + +854 +ùx +-> +±r + = 0; + +857  +m‘hod +) { + +858  +ASFM_FREE_EVERYTHING +: + +859 + `FREEMEM +( +±r +); + +861  +ASFM_FREE_UNDERLYING +: + +863  +ASFM_FREE_UNDERLYING_AND_RESET +: + +864 + `mem£t +( +±r +, 0, +¥ecs +-> +¡ruù_size +); + +868 + } +} + +871 + $SET_OF_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +872 +a¢_­p_cÚ¡¿št_çžed_f + * +ùçžcb +, * +­p_key +) { + +873 cÚ¡ +a¢_TYPE_memb”_t + * +–m + = +td +-> +–em’ts +; + +874 +a¢_cÚ¡r_check_f + * +cÚ¡r +; + +875 cÚ¡ +a¢_ªÚymous_£t_ + * +li¡ + = + `_A_CSET_FROM_VOID +( +¥Œ +); + +876  +i +; + +878 if(! +¥Œ +) { + +879 + `ASN__CTFAIL +( +­p_key +, +td +, +¥Œ +, + +881 +td +-> +Çme +, +__FILE__ +, +__LINE__ +); + +885 +cÚ¡r + = +–m +-> +’codšg_cÚ¡¿šts +. +g’”®_cÚ¡¿šts +; + +886 if(! +cÚ¡r +ècÚ¡¸ð +–m +-> +ty³ +-> +’codšg_cÚ¡¿šts +. +g’”®_cÚ¡¿šts +; + +892  +i + = 0; i < +li¡ +-> +couÁ +; i++) { + +893 cÚ¡ * +memb_±r + = +li¡ +-> +¬¿y +[ +i +]; + +894  +»t +; + +896 if(! +memb_±r +) ; + +898 +»t + = + `cÚ¡r +( +–m +-> +ty³ +, +memb_±r +, +ùçžcb +, +­p_key +); + +899 if( +»t +) „et; + +903 + } +} + +905 #iâdeà +ASN_DISABLE_PER_SUPPORT + + +907 +a¢_dec_rv®_t + + +908 + $SET_OF_decode_u³r +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +909 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +910 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, ** +¥Œ +, + +911 +a¢_³r_d©a_t + * +pd +) { + +912 +a¢_dec_rv®_t + +rv + = { +RC_OK +, 0}; + +913 cÚ¡ +a¢_SET_OF_¥ecifics_t + * +¥ecs + = (cÚ¡‡¢_SET_OF_¥ecifics_ˆ*) +td +-> +¥ecifics +; + +914 cÚ¡ +a¢_TYPE_memb”_t + * +–m + = +td +-> +–em’ts +; + +915 * +¡ + = * +¥Œ +; + +916 +a¢_ªÚymous_£t_ + * +li¡ +; + +917 cÚ¡ +a¢_³r_cÚ¡¿št_t + * +ù +; + +918  +»³© + = 0; + +919 +ssize_t + +ÃËms +; + +921 if( + `ASN__STACK_OVERFLOW_CHECK +( +Ýt_codec_ùx +)) + +922 +ASN__DECODE_FAILED +; + +927 if(! +¡ +) { + +928 +¡ + = * +¥Œ + = + `CALLOC +(1, +¥ecs +-> +¡ruù_size +); + +929 if(! +¡ +è +ASN__DECODE_FAILED +; + +931 +li¡ + = + `_A_SET_FROM_VOID +( +¡ +); + +934 if( +cÚ¡¿šts +è +ù + = &cÚ¡¿šts-> +size +; + +935 if( +td +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +) + +936 +ù + = & +td +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +-> +size +; + +937 +ù + = 0; + +939 if( +ù + && ct-> +æags + & +APC_EXTENSIBLE +) { + +940  +v®ue + = + `³r_g‘_ãw_b™s +( +pd +, 1); + +941 if( +v®ue + < 0è +ASN__DECODE_STARVED +; + +942 if( +v®ue +è +ù + = 0; + +945 if( +ù + && ct-> +efãùive_b™s + >= 0) { + +947 +ÃËms + = + `³r_g‘_ãw_b™s +( +pd +, +ù +-> +efãùive_b™s +); + +948 + `ASN_DEBUG +("Preparingo fetch %ld+%ldƒlements from %s", + +949 () +ÃËms +, +ù +-> +low”_bound +, +td +-> +Çme +); + +950 if( +ÃËms + < 0è +ASN__DECODE_STARVED +; + +951 +ÃËms + +ð +ù +-> +low”_bound +; + +953 +ÃËms + = -1; + +957  +i +; + +958 if( +ÃËms + < 0) { + +959 +ÃËms + = + `u³r_g‘_Ëngth +( +pd +, -1, 0, & +»³© +); + +960 + `ASN_DEBUG +("GفØdecod%" +ASN_PRI_SSIZE + "ƒlements (eff %d)", + +961 +ÃËms +, ()( +ù + ? ct-> +efãùive_b™s + : -1)); + +962 if( +ÃËms + < 0è +ASN__DECODE_STARVED +; + +965  +i + = 0; i < +ÃËms +; i++) { + +966 * +±r + = 0; + +967 + `ASN_DEBUG +("SET OF % decodšg", +–m +-> +ty³ +-> +Çme +); + +968 +rv + = +–m +-> +ty³ +-> +Ý +-> + `u³r_decod” +( +Ýt_codec_ùx +,ƒlm->type, + +969 +–m +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +, & +±r +, +pd +); + +970 + `ASN_DEBUG +("%s SET OF %s decoded %d, %p", + +971 +td +-> +Çme +, +–m +-> +ty³ +->Çme, +rv +. +code +, +±r +); + +972 if( +rv +. +code + =ð +RC_OK +) { + +973 if( + `ASN_SET_ADD +( +li¡ +, +±r +) == 0) { + +974 if( +rv +. +cÚsumed + =ð0 && +ÃËms + > 200) { + +976 +ASN__DECODE_FAILED +; + +980 + `ASN_DEBUG +("Failedo‡ddƒlement into %s", + +981 +td +-> +Çme +); + +983 +rv +. +code + = +RC_FAIL +; + +985 + `ASN_DEBUG +("Failed decoding %s of %s (SET OF)", + +986 +–m +-> +ty³ +-> +Çme +, +td +->name); + +988 if( +±r +è + `ASN_STRUCT_FREE +(* +–m +-> +ty³ +,…tr); + +989  +rv +; + +992 +ÃËms + = -1; + +993 }  +»³© +); + +995 + `ASN_DEBUG +("Decoded % a SET OF", +td +-> +Çme +); + +997 +rv +. +code + = +RC_OK +; + +998 +rv +. +cÚsumed + = 0; + +999  +rv +; + +1000 + } +} + +1002 +a¢_’c_rv®_t + + +1003 + $SET_OF_’code_u³r +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +1004 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, cÚ¡ * +¥Œ +, + +1005 +a¢_³r_ou_t + * +po +) { + +1006 cÚ¡ +a¢_ªÚymous_£t_ + * +li¡ +; + +1007 cÚ¡ +a¢_³r_cÚ¡¿št_t + * +ù +; + +1008 cÚ¡ +a¢_TYPE_memb”_t + * +–m + = +td +-> +–em’ts +; + +1009  +_–_bufãr + * +’coded_–s +; + +1010 +a¢_’c_rv®_t + +” + = {0,0,0}; + +1011 +size_t + +’coded_edx +; + +1013 if(! +¥Œ +è +ASN__ENCODE_FAILED +; + +1015 +li¡ + = + `_A_CSET_FROM_VOID +( +¥Œ +); + +1017 +” +. +’coded + = 0; + +1019 + `ASN_DEBUG +("Encodšg % a SEQUENCE OF (%d)", +td +-> +Çme +, +li¡ +-> +couÁ +); + +1021 if( +cÚ¡¿šts +è +ù + = &cÚ¡¿šts-> +size +; + +1022 if( +td +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +) + +1023 +ù + = & +td +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +-> +size +; + +1024 +ù + = 0; + +1027 if( +ù +) { + +1028  +nÙ_š_roÙ + = + +1029 ( +li¡ +-> +couÁ + < +ù +-> +low”_bound + ||†i¡->couÁ > ct-> +uµ”_bound +); + +1030 + `ASN_DEBUG +("lb %ld ub %ld %s", +ù +-> +low”_bound +, ct-> +uµ”_bound +, + +1031 +ù +-> +æags + & +APC_EXTENSIBLE + ? "ext" : "fix"); + +1032 if( +ù +-> +æags + & +APC_EXTENSIBLE +) { + +1034 if( + `³r_put_ãw_b™s +( +po +, +nÙ_š_roÙ +, 1)è +ASN__ENCODE_FAILED +; + +1035 if( +nÙ_š_roÙ +è +ù + = 0; + +1036 } if( +nÙ_š_roÙ + && +ù +-> +efãùive_b™s + >= 0) { + +1037 +ASN__ENCODE_FAILED +; + +1042 if( +ù + && ct-> +efãùive_b™s + >= 0) { + +1044 if( + `³r_put_ãw_b™s +( +po +, +li¡ +-> +couÁ + - +ù +-> +low”_bound +, + +1045 +ù +-> +efãùive_b™s +)) + +1046 +ASN__ENCODE_FAILED +; + +1047 } if( +li¡ +-> +couÁ + == 0) { + +1051 ià( + `u³r_put_Ëngth +( +po +, 0, 0)) { + +1052 +ASN__ENCODE_FAILED +; + +1054 + `ASN__ENCODED_OK +( +” +); + +1062 +’coded_–s + = + `SET_OF__’code_s܋d +( +–m +, +li¡ +, +SOES_CUPER +); + +1064  +’coded_edx + = 0; ( +ssize_t +ëncoded_edx < +li¡ +-> +couÁ +;) { + +1065 +ssize_t + +may_’code +; + +1066 +size_t + +edx +; + +1067  +Ãed_eom + = 0; + +1069 if( +ù + && ct-> +efãùive_b™s + >= 0) { + +1070 +may_’code + = +li¡ +-> +couÁ +; + +1072 +may_’code + = + +1073 + `u³r_put_Ëngth +( +po +, +li¡ +-> +couÁ + - +’coded_edx +, & +Ãed_eom +); + +1074 if( +may_’code + < 0è +ASN__ENCODE_FAILED +; + +1077  +edx + = +’coded_edx +;ƒdx <ƒncoded_edx + +may_’code +;ƒdx++) { + +1078 cÚ¡  +_–_bufãr + * +– + = & +’coded_–s +[ +edx +]; + +1079 if( + `a¢_put_mªy_b™s +( +po +, +– +-> +buf +, + +1080 (8 * +– +-> +Ëngth +è-ƒl-> +b™s_unu£d +) < 0) { + +1085 if( +Ãed_eom + && + `u³r_put_Ëngth +( +po +, 0, 0)) + +1086 +ASN__ENCODE_FAILED +; + +1088 +’coded_edx + +ð +may_’code +; + +1091 + `SET_OF__’code_s܋d_ä“ +( +’coded_–s +, +li¡ +-> +couÁ +); + +1093 if(( +ssize_t +) +’coded_edx + =ð +li¡ +-> +couÁ +) { + +1094 + `ASN__ENCODED_OK +( +” +); + +1096 +ASN__ENCODE_FAILED +; + +1098 + } +} + +1100 +a¢_dec_rv®_t + + +1101 + $SET_OF_decode_­” +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +1102 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +1103 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, ** +¥Œ +, +a¢_³r_d©a_t + * +pd +) { + +1104 +a¢_dec_rv®_t + +rv + = { +RC_OK +, 0}; + +1105 cÚ¡ +a¢_SET_OF_¥ecifics_t + * +¥ecs + = (cÚ¡‡¢_SET_OF_¥ecifics_ˆ*) +td +-> +¥ecifics +; + +1106 cÚ¡ +a¢_TYPE_memb”_t + * +–m + = +td +-> +–em’ts +; + +1107 * +¡ + = * +¥Œ +; + +1108 +a¢_ªÚymous_£t_ + * +li¡ +; + +1109 cÚ¡ +a¢_³r_cÚ¡¿št_t + * +ù +; + +1110  +»³© + = 0; + +1111 +ssize_t + +ÃËms +; + +1113 if( + `ASN__STACK_OVERFLOW_CHECK +( +Ýt_codec_ùx +)) + +1114 +ASN__DECODE_FAILED +; + +1119 if(! +¡ +) { + +1120 +¡ + = * +¥Œ + = + `CALLOC +(1, +¥ecs +-> +¡ruù_size +); + +1121 if(! +¡ +è +ASN__DECODE_FAILED +; + +1123 +li¡ + = + `_A_SET_FROM_VOID +( +¡ +); + +1126 if( +cÚ¡¿šts +è +ù + = &cÚ¡¿šts-> +size +; + +1127 if( +td +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +) + +1128 +ù + = & +td +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +-> +size +; + +1129 +ù + = 0; + +1131 if( +ù + && ct-> +æags + & +APC_EXTENSIBLE +) { + +1132  +v®ue + = + `³r_g‘_ãw_b™s +( +pd +, 1); + +1133 if( +v®ue + < 0è +ASN__DECODE_STARVED +; + +1134 if( +v®ue +è +ù + = 0; + +1137 if( +ù + && ct-> +efãùive_b™s + >= 0) { + +1139 +ÃËms + = + `­”_g‘_n¢nwn +( +pd +, +ù +-> +uµ”_bound + - ct-> +low”_bound + + 1); + +1140 + `ASN_DEBUG +("Preparingo fetch %ld+%ldƒlements from %s", + +1141 () +ÃËms +, +ù +-> +low”_bound +, +td +-> +Çme +); + +1142 if( +ÃËms + < 0è +ASN__DECODE_STARVED +; + +1143 +ÃËms + +ð +ù +-> +low”_bound +; + +1145 +ÃËms + = -1; + +1149  +i +; + +1150 if( +ÃËms + < 0) { + +1151 +ÃËms + = + `­”_g‘_Ëngth +( +pd +, +ù + ? ct-> +uµ”_bound + - ct-> +low”_bound + + 1 : -1, + +1152 +ù + ? ct-> +efãùive_b™s + : -1, & +»³© +); + +1153 + `ASN_DEBUG +("Goto decode %dƒlements (eff %d)", + +1154 () +ÃËms +, ()( +ù + ? ct-> +efãùive_b™s + : -1)); + +1155 if( +ÃËms + < 0è +ASN__DECODE_STARVED +; + +1158  +i + = 0; i < +ÃËms +; i++) { + +1159 * +±r + = 0; + +1160 + `ASN_DEBUG +("SET OF % decodšg", +–m +-> +ty³ +-> +Çme +); + +1161 +rv + = +–m +-> +ty³ +-> +Ý +-> + `­”_decod” +( +Ýt_codec_ùx +,ƒlm->type, + +1162 +–m +-> +’codšg_cÚ¡¿šts +. +³r_cÚ¡¿šts +, & +±r +, +pd +); + +1163 + `ASN_DEBUG +("%s SET OF %s decoded %d, %p", + +1164 +td +-> +Çme +, +–m +-> +ty³ +->Çme, +rv +. +code +, +±r +); + +1165 if( +rv +. +code + =ð +RC_OK +) { + +1166 if( + `ASN_SET_ADD +( +li¡ +, +±r +) == 0) + +1168 + `ASN_DEBUG +("Failedo‡ddƒlement into %s", + +1169 +td +-> +Çme +); + +1171 +rv +. +code + = +RC_FAIL +; + +1173 + `ASN_DEBUG +("Failed decoding %s of %s (SET OF)", + +1174 +–m +-> +ty³ +-> +Çme +, +td +->name); + +1176 if( +±r +è + `ASN_STRUCT_FREE +(* +–m +-> +ty³ +,…tr); + +1177  +rv +; + +1180 +ÃËms + = -1; + +1181 }  +»³© +); + +1183 + `ASN_DEBUG +("Decoded % a SET OF", +td +-> +Çme +); + +1185 +rv +. +code + = +RC_OK +; + +1186 +rv +. +cÚsumed + = 0; + +1187  +rv +; + +1188 + } +} + +1192  + scom·¿bË_±r + { + +1193 cÚ¡ +a¢_TYPE_desütÜ_t + * + mtd +; + +1194 cÚ¡ * + m¥Œ +; + +1198 + $SET_OF__com·»_cb +(cÚ¡ * +­Œ +, cÚ¡ * +b±r +) { + +1199 cÚ¡  +com·¿bË_±r + * +a + = +­Œ +; + +1200 cÚ¡  +com·¿bË_±r + * +b + = +b±r +; + +1201 + `as£¹ +( +a +-> +td + =ð +b +->td); + +1202  +a +-> +td +-> +Ý +-> + `com·»_¡ruù +×->td,‡-> +¥Œ +, +b +->sptr); + +1203 + } +} + +1206 + $SET_OF_com·» +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +­Œ +, + +1207 cÚ¡ * +b±r +) { + +1208 cÚ¡ +a¢_ªÚymous_£t_ + * +a + = + `_A_CSET_FROM_VOID +( +­Œ +); + +1209 cÚ¡ +a¢_ªÚymous_£t_ + * +b + = + `_A_CSET_FROM_VOID +( +b±r +); + +1211 if( +a + && +b +) { + +1212  +com·¿bË_±r + * +as܋d +; + +1213  +com·¿bË_±r + * +bs܋d +; + +1214 +ssize_t + +commÚ_Ëngth +; + +1215 +ssize_t + +idx +; + +1217 if( +a +-> +couÁ + == 0) { + +1218 if( +b +-> +couÁ +)  -1; + +1220 } if( +b +-> +couÁ + == 0) { + +1224 +as܋d + = + `MALLOC +( +a +-> +couÁ + * (asorted[0])); + +1225 +bs܋d + = + `MALLOC +( +b +-> +couÁ + * (bsorted[0])); + +1226 if(! +as܋d + || ! +bs܋d +) { + +1227 + `FREEMEM +( +as܋d +); + +1228 + `FREEMEM +( +bs܋d +); + +1232  +idx + = 0; idx < +a +-> +couÁ +; idx++) { + +1233 +as܋d +[ +idx +]. +td + =d-> +–em’ts +-> +ty³ +; + +1234 +as܋d +[ +idx +]. +¥Œ + = +a +-> +¬¿y +[idx]; + +1237  +idx + = 0; idx < +b +-> +couÁ +; idx++) { + +1238 +bs܋d +[ +idx +]. +td + =d-> +–em’ts +-> +ty³ +; + +1239 +bs܋d +[ +idx +]. +¥Œ + = +b +-> +¬¿y +[idx]; + +1242 + `qsÜt +( +as܋d +, +a +-> +couÁ +, ×s܋d[0]), +SET_OF__com·»_cb +); + +1243 + `qsÜt +( +bs܋d +, +b +-> +couÁ +, (bs܋d[0]), +SET_OF__com·»_cb +); + +1245 +commÚ_Ëngth + = ( +a +-> +couÁ + < +b +->count ?‡->count : b->count); + +1246  +idx + = 0; idx < +commÚ_Ëngth +; idx++) { + +1247  +»t + = +td +-> +–em’ts +-> +ty³ +-> +Ý +-> + `com·»_¡ruù +( + +1248 +td +-> +–em’ts +-> +ty³ +, +as܋d +[ +idx +]. +¥Œ +, +bs܋d +[idx].sptr); + +1249 if( +»t +) { + +1250 + `FREEMEM +( +as܋d +); + +1251 + `FREEMEM +( +bs܋d +); + +1252  +»t +; + +1256 + `FREEMEM +( +as܋d +); + +1257 + `FREEMEM +( +bs܋d +); + +1259 if( +idx + < +b +-> +couÁ +) + +1261 if( +idx + < +a +-> +couÁ +)  1; + +1262 } if(! +a +) { + +1264 } if(! +b +) { + +1269 + } +} + +1272 +a¢_TYPE_ݔ©iÚ_t + + ga¢_OP_SET_OF + = { + +1273 +SET_OF_ä“ +, + +1274 +SET_OF_´št +, + +1275 +SET_OF_com·» +, + +1276 +SET_OF_decode_b” +, + +1277 +SET_OF_’code_d” +, + +1278 +SET_OF_decode_x” +, + +1279 +SET_OF_’code_x” +, + +1280 #ifdeà +ASN_DISABLE_OER_SUPPORT + + +1284 +SET_OF_decode_Ûr +, + +1285 +SET_OF_’code_Ûr +, + +1287 #ifdeà +ASN_DISABLE_PER_SUPPORT + + +1293 +SET_OF_decode_u³r +, + +1294 +SET_OF_’code_u³r +, + +1295 +SET_OF_decode_­” +, + +1298 +SET_OF_¿ndom_fžl +, + +1303 +a¢_¿ndom_fžl_»suÉ_t + + +1304 + $SET_OF_¿ndom_fžl +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¥Œ +, + +1305 cÚ¡ +a¢_’codšg_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +1306 +size_t + +max_Ëngth +) { + +1307 cÚ¡ +a¢_SET_OF_¥ecifics_t + * +¥ecs + = + +1308 (cÚ¡ +a¢_SET_OF_¥ecifics_t + *) +td +-> +¥ecifics +; + +1309 +a¢_¿ndom_fžl_»suÉ_t + +»s_ok + = { +ARFILL_OK +, 0}; + +1310 +a¢_¿ndom_fžl_»suÉ_t + +»suÉ_çžed + = { +ARFILL_FAILED +, 0}; + +1311 +a¢_¿ndom_fžl_»suÉ_t + +»suÉ_sk³d + = { +ARFILL_SKIPPED +, 0}; + +1312 cÚ¡ +a¢_TYPE_memb”_t + * +–m + = +td +-> +–em’ts +; + +1313 * +¡ + = * +¥Œ +; + +1314  +max_–em’ts + = 5; + +1315  +¦b + = 0; + +1316  +sub + = 0; + +1317 +size_t + +ºd_Ën +; + +1319 if( +max_Ëngth + =ð0è +»suÉ_sk³d +; + +1321 if( +¡ + =ð +NULL +) { + +1322 +¡ + = (* +¥Œ + = + `CALLOC +(1, +¥ecs +-> +¡ruù_size +)); + +1323 if( +¡ + =ð +NULL +) { + +1324  +»suÉ_çžed +; + +1328  + `a¢_¿ndom_b‘w“n +(0, 6)) { + +1329 0: +max_–em’ts + = 0; ; + +1330 1: +max_–em’ts + = 1; ; + +1331 2: +max_–em’ts + = 5; ; + +1332 3: +max_–em’ts + = +max_Ëngth +; ; + +1333 4: +max_–em’ts + = +max_Ëngth + / 2; ; + +1334 5: +max_–em’ts + = +max_Ëngth + / 4; ; + +1337 +sub + = +¦b + + +max_–em’ts +; + +1339 if(! +cÚ¡¿šts + || !cÚ¡¿šts-> +³r_cÚ¡¿šts +) + +1340 +cÚ¡¿šts + = & +td +-> +’codšg_cÚ¡¿šts +; + +1341 if( +cÚ¡¿šts +-> +³r_cÚ¡¿šts +) { + +1342 cÚ¡ +a¢_³r_cÚ¡¿št_t + * +pc + = & +cÚ¡¿šts +-> +³r_cÚ¡¿šts +-> +size +; + +1343 if( +pc +-> +æags + & +APC_SEMI_CONSTRAINED +) { + +1344 +¦b + = +pc +-> +low”_bound +; + +1345 +sub + = +pc +-> +low”_bound + + +max_–em’ts +; + +1346 } if( +pc +-> +æags + & +APC_CONSTRAINED +) { + +1347 +¦b + = +pc +-> +low”_bound +; + +1348 +sub + = +pc +-> +uµ”_bound +; + +1349 if( +sub + - +¦b + > +max_–em’ts +) sub = slb + max_elements; + +1354  + `a¢_¿ndom_b‘w“n +(-1, 4)) { + +1358 if( +cÚ¡¿šts +-> +³r_cÚ¡¿šts + + +1359 && ( +cÚ¡¿šts +-> +³r_cÚ¡¿šts +-> +size +. +æags + & +APC_EXTENSIBLE +)) { + +1360  + `a¢_¿ndom_b‘w“n +(0, 5)) { + +1363 +ºd_Ën + = 0; + +1366 if( +¦b + > 0) { + +1367 +ºd_Ën + = +¦b + - 1; + +1369 +ºd_Ën + = 0; + +1373 +ºd_Ën + = + `a¢_¿ndom_b‘w“n +(0, +¦b +); + +1376 if( +sub + < ( +ssize_t +) +max_Ëngth +) { + +1377 +ºd_Ën + = +sub + + 1; + +1379 +ºd_Ën + = +max_Ëngth +; + +1383 if( +sub + < ( +ssize_t +) +max_Ëngth +) { + +1384 +ºd_Ën + = + `a¢_¿ndom_b‘w“n +( +sub + + 1, +max_Ëngth +); + +1386 +ºd_Ën + = +max_Ëngth +; + +1390 +ºd_Ën + = +max_Ëngth +; + +1397 +ºd_Ën + = + `a¢_¿ndom_b‘w“n +( +¦b +, +sub +); + +1400 if( +¦b + < +sub +) { + +1401 +ºd_Ën + = + `a¢_¿ndom_b‘w“n +( +¦b + + 1, +sub +); + +1406 +ºd_Ën + = + `a¢_¿ndom_b‘w“n +( +¦b +, slb); + +1409 if( +¦b + < +sub +) { + +1410 +ºd_Ën + = + `a¢_¿ndom_b‘w“n +( +¦b +, +sub + - 1); + +1415 +ºd_Ën + = + `a¢_¿ndom_b‘w“n +( +sub +, sub); + +1419 ; +ºd_Ën + > 0;„nd_len--) { + +1420 +a¢_ªÚymous_£t_ + * +li¡ + = + `_A_SET_FROM_VOID +( +¡ +); + +1421 * +±r + = 0; + +1422 +a¢_¿ndom_fžl_»suÉ_t + +tm´es + = +–m +-> +ty³ +-> +Ý +-> + `¿ndom_fžl +( + +1423 +–m +-> +ty³ +, & +±r +, &–m-> +’codšg_cÚ¡¿šts +, + +1424 ( +max_Ëngth + > +»s_ok +. +Ëngth + ? max_length -„es_ok.length : 0) + +1425 / +ºd_Ën +); + +1426  +tm´es +. +code +) { + +1427  +ARFILL_OK +: + +1428 + `ASN_SET_ADD +( +li¡ +, +±r +); + +1429 +»s_ok +. +Ëngth + +ð +tm´es +.length; + +1431  +ARFILL_SKIPPED +: + +1433  +ARFILL_FAILED +: + +1434 + `as£¹ +( +±r + == 0); + +1435  +tm´es +; + +1439  +»s_ok +; + +1440 + } +} + + @constr_TYPE.c + +5  + ~ + +6  + ~ + +7  + ~<”ºo.h +> + +12  + $g‘_a¢1c_’vœÚm’t_v”siÚ +(è{  +ASN1C_ENVIRONMENT_VERSION +; + } +} + +14  +a¢_­p_cÚsume_by‹s_f + + g_´št2å +; + +19 +b”_Žv_g_t + + +20 + $a¢_TYPE_outmo¡_g +(cÚ¡ +a¢_TYPE_desütÜ_t + * +ty³_desütÜ +, + +21 cÚ¡ * +¡ruù_±r +,  +g_mode +, +b”_Žv_g_t + +g +) { + +23 if( +g_mode +) + +24  +g +; + +26 if( +ty³_desütÜ +-> +gs_couÁ +) + +27  +ty³_desütÜ +-> +gs +[0]; + +29  +ty³_desütÜ +-> +Ý +-> + `outmo¡_g +Ñy³_desütÜ, +¡ruù_±r +, 0, 0); + +30 + } +} + +36 + $a¢_åršt +( +FILE + * +¡»am +, cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +37 cÚ¡ * +¡ruù_±r +) { + +38 if(! +¡»am +è¡»am = +¡dout +; + +39 if(! +td + || ! +¡ruù_±r +) { + +40 +”ºo + = +EINVAL +; + +45 if( +td +-> +Ý +-> + `´št_¡ruù +Ñd, +¡ruù_±r +, 1, +_´št2å +, +¡»am +)) { + +50 if( + `_´št2å +("\n", 1, +¡»am +)) { + +54  + `fæush +( +¡»am +); + +55 + } +} + +59 + $_´št2å +(cÚ¡ * +bufãr +, +size_t + +size +, * +­p_key +) { + +60 +FILE + * +¡»am + = (FILE *) +­p_key +; + +62 if( + `fwr™e +( +bufãr +, 1, +size +, +¡»am +) != size) + +66 + } +} + +73  +ASN_DEBUG_f +(cÚ¡ * +fmt +, ...); + +74  + $ASN_DEBUG_f +(cÚ¡ * +fmt +, ...) { + +75 +va_li¡ + +­ +; + +76 + `va_¡¬t +( +­ +, +fmt +); + +77 + `vårštf +( +¡d”r +, +fmt +, +­ +); + +78 + `årštf +( +¡d”r +, "\n"); + +79 + `va_’d +( +­ +); + +80 + } +} + + @constraints.c + +1  + ~ + +2  + ~ + +5 + $a¢_g’”ic_no_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +ty³_desütÜ +, + +6 cÚ¡ * +¡ruù_±r +, + +7 +a¢_­p_cÚ¡¿št_çžed_f + * +cb +, * +key +) { + +8 () +ty³_desütÜ +; + +9 () +¡ruù_±r +; + +10 () +cb +; + +11 () +key +; + +15 + } +} + +18 + $a¢_g’”ic_unknown_cÚ¡¿št +(cÚ¡ +a¢_TYPE_desütÜ_t + * +ty³_desütÜ +, + +19 cÚ¡ * +¡ruù_±r +, + +20 +a¢_­p_cÚ¡¿št_çžed_f + * +cb +, * +key +) { + +21 () +ty³_desütÜ +; + +22 () +¡ruù_±r +; + +23 () +cb +; + +24 () +key +; + +28 + } +} + +30  + s”rbufDesc + { + +31 cÚ¡ +a¢_TYPE_desütÜ_t + * + mçžed_ty³ +; + +32 cÚ¡ * + mçžed_¡ruù_±r +; + +33 * + m”rbuf +; + +34 +size_t + + m”¾’ +; + +38 + $_a¢_i_ùçžcb +(* +key +, cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +39 cÚ¡ * +fmt +, ...) { + +40  +”rbufDesc + * +¬g + = +key +; + +41 +va_li¡ + +­ +; + +42 +ssize_t + +vËn +; + +43 +ssize_t + +maxËn +; + +45 +¬g +-> +çžed_ty³ + = +td +; + +46 +¬g +-> +çžed_¡ruù_±r + = +¥Œ +; + +48 +maxËn + = +¬g +-> +”¾’ +; + +49 if( +maxËn + <= 0) + +52 + `va_¡¬t +( +­ +, +fmt +); + +53 +vËn + = + `v¢´štf +( +¬g +-> +”rbuf +, +maxËn +, +fmt +, +­ +); + +54 + `va_’d +( +­ +); + +55 if( +vËn + >ð +maxËn +) { + +56 +¬g +-> +”rbuf +[ +maxËn +-1] = '\0'; + +57 +¬g +-> +”¾’ + = +maxËn + - 1; + +59 } if( +vËn + >= 0) { + +60 +¬g +-> +”rbuf +[ +vËn +] = '\0'; + +61 +¬g +-> +”¾’ + = +vËn +; + +66 +vËn + = ("") - 1; + +67 +maxËn +--; + +68 +¬g +-> +”¾’ + = +vËn + < +maxËn + ? vlen : maxlen; + +69 + `memýy +( +¬g +-> +”rbuf +, "",‡rg-> +”¾’ +); + +70 +¬g +-> +”rbuf +[¬g-> +”¾’ +] = 0; + +74 + } +} + +77 + $a¢_check_cÚ¡¿šts +(cÚ¡ +a¢_TYPE_desütÜ_t + * +ty³_desütÜ +, + +78 cÚ¡ * +¡ruù_±r +, * +”rbuf +, +size_t + * +”¾’ +) { + +79  +”rbufDesc + +¬g +; + +80  +»t +; + +82 +¬g +. +çžed_ty³ + = 0; + +83 +¬g +. +çžed_¡ruù_±r + = 0; + +84 +¬g +. +”rbuf + =ƒrrbuf; + +85 +¬g +. +”¾’ + =ƒrrlen ? *errlen : 0; + +87 +»t + = +ty³_desütÜ +-> +’codšg_cÚ¡¿šts +. + `g’”®_cÚ¡¿šts +( + +88 +ty³_desütÜ +, +¡ruù_±r +, +_a¢_i_ùçžcb +, & +¬g +); + +89 if( +»t + =ð-1 && +”¾’ +è*”¾’ = +¬g +.errlen; + +91  +»t +; + +92 + } +} + + @der_encoder.c + +5  + ~ + +6  + ~<”ºo.h +> + +8  +ssize_t + +d”_wr™e_TL +( +b”_Žv_g_t + +g +, +b”_Žv_Ën_t + +Ën +, + +9 +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +,  +cÚ¡ruùed +); + +14 +a¢_’c_rv®_t + + +15 + $d”_’code +(cÚ¡ +a¢_TYPE_desütÜ_t + * +ty³_desütÜ +, cÚ¡ * +¡ruù_±r +, + +16 +a¢_­p_cÚsume_by‹s_f + * +cÚsume_by‹s +, * +­p_key +) { + +17 + `ASN_DEBUG +("DERƒncoder invoked for %s", + +18 +ty³_desütÜ +-> +Çme +); + +23  +ty³_desütÜ +-> +Ý +-> + `d”_’cod” +( + +24 +ty³_desütÜ +, +¡ruù_±r +, + +25 0, 0, +cÚsume_by‹s +, +­p_key +); + +26 + } +} + +31  + s’c_to_buf_¬g + { + +32 * + mbufãr +; + +33 +size_t + + mËá +; + +34 } + t’c_to_buf_¬g +; + +35  + $’code_to_bufãr_cb +(cÚ¡ * +bufãr +, +size_t + +size +, * +key +) { + +36 +’c_to_buf_¬g + * +¬g + = (’c_to_buf_¬g *) +key +; + +38 if( +¬g +-> +Ëá + < +size +) + +41 + `memýy +( +¬g +-> +bufãr +, bufãr, +size +); + +42 +¬g +-> +bufãr + = ((*ïrg->bufãrè+ +size +; + +43 +¬g +-> +Ëá + -ð +size +; + +46 + } +} + +51 +a¢_’c_rv®_t + + +52 + $d”_’code_to_bufãr +(cÚ¡ +a¢_TYPE_desütÜ_t + * +ty³_desütÜ +, + +53 cÚ¡ * +¡ruù_±r +, * +bufãr +, +size_t + +bufãr_size +) { + +54 +’c_to_buf_¬g + +¬g +; + +55 +a¢_’c_rv®_t + +ec +; + +57 +¬g +. +bufãr + = buffer; + +58 +¬g +. +Ëá + = +bufãr_size +; + +60 +ec + = +ty³_desütÜ +-> +Ý +-> + `d”_’cod” +(type_descriptor, + +61 +¡ruù_±r +, + +62 0, 0, +’code_to_bufãr_cb +, & +¬g +); + +63 if( +ec +. +’coded + != -1) { + +64 + `as£¹ +( +ec +. +’coded + =ð( +ssize_t +)( +bufãr_size + - +¬g +. +Ëá +)); + +67  +ec +; + +68 + } +} + +74 +ssize_t + + +75 + $d”_wr™e_gs +(cÚ¡ +a¢_TYPE_desütÜ_t + * +sd +, +size_t + +¡ruù_Ëngth +, + +76  +g_mode +,  +Ï¡_g_fÜm +, + +77 +b”_Žv_g_t + +g +, + +78 +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +79  + #ASN1_DER_MAX_TAGS_COUNT + 4 + + ) + +80 +b”_Žv_g_t + + +81 +gs_buf_sü©ch +[ +ASN1_DER_MAX_TAGS_COUNT + * ( +b”_Žv_g_t +)]; + +82 +ssize_t + +Ëns +[ +ASN1_DER_MAX_TAGS_COUNT + * (ssize_t)]; + +83 cÚ¡ +b”_Žv_g_t + * +gs +; + +84  +gs_couÁ +; + +85 +size_t + +ov”®l_Ëngth +; + +86  +i +; + +88 + `ASN_DEBUG +("Writingags (%s,m=%d,c=%d,ag=%s, mtc=%d)", + +89 +sd +-> +Çme +, +g_mode +, sd-> +gs_couÁ +, + +90 + `b”_Žv_g_¡ršg +( +g +), + +91 +g_mode + + +92 ?( +sd +-> +gs_couÁ ++1 + +93 -(( +g_mode + =ð-1è&& +sd +-> +gs_couÁ +)) + +94 : +sd +-> +gs_couÁ + + +97 if( +sd +-> +gs_couÁ + + 1 > +ASN1_DER_MAX_TAGS_COUNT +) { + +98 + `ASN_DEBUG +("Sy¡em†im™ %d oÀg couÁ", +ASN1_DER_MAX_TAGS_COUNT +); + +102 if( +g_mode +) { + +108  +¡ag_off£t +; + +109 +b”_Žv_g_t + * +gs_buf + = +gs_buf_sü©ch +; + +110 +gs_couÁ + = +sd +->tags_count + +112 - (( +g_mode + =ð-1è&& +sd +-> +gs_couÁ +); + +114 +gs_buf +[0] = +g +; + +115 +¡ag_off£t + = -1 + (( +g_mode + =ð-1è&& +sd +-> +gs_couÁ +); + +116  +i + = 1; i < +gs_couÁ +; i++) + +117 +gs_buf +[ +i +] = +sd +-> +gs +[˜+ +¡ag_off£t +]; + +118 +gs + = +gs_buf +; + +120 +gs + = +sd +->tags; + +121 +gs_couÁ + = +sd +->tags_count; + +125 if( +gs_couÁ + == 0) + +132 +ov”®l_Ëngth + = +¡ruù_Ëngth +; + +133  +i + = +gs_couÁ + - 1; i >= 0; --i) { + +134 +Ëns +[ +i +] = + `d”_wr™e_TL +( +gs +[i], +ov”®l_Ëngth +, 0, 0, 0); + +135 if( +Ëns +[ +i +] == -1)  -1; + +136 +ov”®l_Ëngth + +ð +Ëns +[ +i +]; + +137 +Ëns +[ +i +] = +ov”®l_Ëngth + -†ens[i]; + +140 if(! +cb +è +ov”®l_Ëngth + - +¡ruù_Ëngth +; + +142 + `ASN_DEBUG +("Encodšg % TL sequ’û (%dƒËm’ts)", +sd +-> +Çme +, + +143 +gs_couÁ +); + +148  +i + = 0; i < +gs_couÁ +; i++) { + +149 +ssize_t + +Ën +; + +150  +_cÚ¡r +; + +153 +_cÚ¡r + = ( +Ï¡_g_fÜm + || +i + < ( +gs_couÁ + - 1)); + +155 +Ën + = + `d”_wr™e_TL +( +gs +[ +i +], +Ëns +[i], +cb +, +­p_key +, +_cÚ¡r +); + +156 if( +Ën + == -1)  -1; + +159  +ov”®l_Ëngth + - +¡ruù_Ëngth +; + +160 + } +} + +162  +ssize_t + + +163 + $d”_wr™e_TL +( +b”_Žv_g_t + +g +, +b”_Žv_Ën_t + +Ën +, + +164 +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +, + +165  +cÚ¡ruùed +) { + +166 +ušt8_t + +buf +[32]; + +167 +size_t + +size + = 0; + +168  +buf_size + = +cb +?( +buf +):0; + +169 +ssize_t + +tmp +; + +172 +tmp + = + `b”_Žv_g_£rŸlize +( +g +, +buf +, +buf_size +); + +173 if( +tmp + =ð-1 ||m°> ( +ssize_t +)( +buf +))  -1; + +174 +size + +ð +tmp +; + +177 +tmp + = + `d”_Žv_Ëngth_£rŸlize +( +Ën +, +buf ++ +size +, +buf_size +?buf_size-size:0); + +178 if( +tmp + == -1)  -1; + +179 +size + +ð +tmp +; + +181 if( +size + > ( +buf +)) + +187 if( +cb +) { + +188 if( +cÚ¡ruùed +è* +buf + |= 0x20; + +189 if( + `cb +( +buf +, +size +, +­p_key +) < 0) + +193  +size +; + +194 + } +} + + @oer_decoder.c + +5  + ~ + +6  + ~ + +11 +a¢_dec_rv®_t + + +12 + $Ûr_decode +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +13 cÚ¡ +a¢_TYPE_desütÜ_t + * +ty³_desütÜ +, ** +¡ruù_±r +, + +14 cÚ¡ * +±r +, +size_t + +size +) { + +15 +a¢_codec_ùx_t + +s_codec_ùx +; + +21 if( +Ýt_codec_ùx +) { + +22 if( +Ýt_codec_ùx +-> +max_¡ack_size +) { + +23 +s_codec_ùx + = * +Ýt_codec_ùx +; + +24 +Ýt_codec_ùx + = & +s_codec_ùx +; + +28 + `mem£t +(& +s_codec_ùx +, 0, (s_codec_ctx)); + +29 +s_codec_ùx +. +max_¡ack_size + = +ASN__DEFAULT_STACK_MAX +; + +30 +Ýt_codec_ùx + = & +s_codec_ùx +; + +36  +ty³_desütÜ +-> +Ý +-> + `Ûr_decod” +( +Ýt_codec_ùx +,ype_descriptor, 0, + +37 +¡ruù_±r +, + +38 +±r +, +size + + +40 + } +} + +46 +ssize_t + + +47 + $Ûr_ݒ_ty³_sk +(cÚ¡ * +buåŒ +, +size_t + +size +) { + +48 +size_t + +Ën + = 0; + +49  + `Ûr_ãtch_Ëngth +( +buåŒ +, +size +, & +Ën +); + +50 + } +} + +59 +ssize_t + + +60 + $Ûr_ݒ_ty³_g‘ +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +61 cÚ¡  +a¢_TYPE_desütÜ_s + * +td +, + +62 cÚ¡ +a¢_Ûr_cÚ¡¿šts_t + * +cÚ¡¿šts +, ** +¡ruù_±r +, + +63 cÚ¡ * +buåŒ +, +size_t + +size +) { + +64 +a¢_dec_rv®_t + +dr +; + +65 +size_t + +cڏš”_Ën + = 0; + +66 +ssize_t + +Ën_Ën +; + +67 +a¢_¡ruù_ä“_m‘hod + +di¥o£_m‘hod + = + +68 (* +¡ruù_±r +è? +ASFM_FREE_UNDERLYING_AND_RESET + : +ASFM_FREE_EVERYTHING +; + +71 +Ën_Ën + = + `Ûr_ãtch_Ëngth +( +buåŒ +, +size +, & +cڏš”_Ën +); + +72 if( +Ën_Ën + <= 0) { + +73  +Ën_Ën +; + +80 if( +size + - +Ën_Ën + < +cڏš”_Ën +) { + +85 +dr + = +td +-> +Ý +-> + `Ûr_decod” +( +Ýt_codec_ùx +,d, +cÚ¡¿šts +, +¡ruù_±r +, + +86 (cÚ¡ +ušt8_t + *) +buåŒ + + +Ën_Ën +, +cڏš”_Ën +); + +87 if( +dr +. +code + =ð +RC_OK +) { + +88  +Ën_Ën + + +cڏš”_Ën +; + +91 +td +-> +Ý +-> + `ä“_¡ruù +Ñd, * +¡ruù_±r +, +di¥o£_m‘hod +); + +92 * +¡ruù_±r + = +NULL +; + +95 + } +} + +98 +a¢_dec_rv®_t + + +99 + $Ûr_decode_´im™ive +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +100 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +101 cÚ¡ +a¢_Ûr_cÚ¡¿šts_t + * +cÚ¡¿šts +, ** +¥Œ +, + +102 cÚ¡ * +±r +, +size_t + +size +) { + +103 +ASN__PRIMITIVE_TYPE_t + * +¡ + = (ASN__PRIMITIVE_TYPE_ˆ*)* +¥Œ +; + +104 +a¢_dec_rv®_t + +rv® + = { +RC_OK +, 0}; + +105 +size_t + +ex³ùed_Ëngth + = 0; + +106 +ssize_t + +Ën_Ën +; + +108 () +td +; + +109 () +Ýt_codec_ùx +; + +110 () +cÚ¡¿šts +; + +112 if(! +¡ +) { + +113 +¡ + = ( +ASN__PRIMITIVE_TYPE_t + *)(* +¥Œ + = + `CALLOC +( + +114 1, ( +ASN__PRIMITIVE_TYPE_t +))); + +115 if(! +¡ +è +ASN__DECODE_FAILED +; + +124 +Ën_Ën + = + `Ûr_ãtch_Ëngth +( +±r +, +size +, & +ex³ùed_Ëngth +); + +125 if( +Ën_Ën + > 0) { + +126 +rv® +. +cÚsumed + = +Ën_Ën +; + +127 +±r + = (cÚ¡ *íŒ + +Ën_Ën +; + +128 +size + -ð +Ën_Ën +; + +129 } if( +Ën_Ën + == 0) { + +130 +ASN__DECODE_STARVED +; + +131 } if( +Ën_Ën + < 0) { + +132 +ASN__DECODE_FAILED +; + +135 if( +size + < +ex³ùed_Ëngth +) { + +136 +ASN__DECODE_STARVED +; + +138 +ušt8_t + * +buf + = + `MALLOC +( +ex³ùed_Ëngth + + 1); + +139 if( +buf + =ð +NULL +) { + +140 +ASN__DECODE_FAILED +; + +142 + `memýy +( +buf +, +±r +, +ex³ùed_Ëngth +); + +143 +buf +[ +ex³ùed_Ëngth +] = '\0'; + +145 + `FREEMEM +( +¡ +-> +buf +); + +146 +¡ +-> +buf + = buf; + +147 +¡ +-> +size + = +ex³ùed_Ëngth +; + +149 +rv® +. +cÚsumed + +ð +ex³ùed_Ëngth +; + +150  +rv® +; + +152 + } +} + + @oer_encoder.c + +5  + ~ + +6  + ~ + +11 +a¢_’c_rv®_t + + +12 + $Ûr_’code +(cÚ¡ +a¢_TYPE_desütÜ_t + * +ty³_desütÜ +, cÚ¡ * +¡ruù_±r +, + +13 +a¢_­p_cÚsume_by‹s_f + * +cÚsume_by‹s +, * +­p_key +) { + +14 + `ASN_DEBUG +("OERƒncod” invoked fÜ %s", +ty³_desütÜ +-> +Çme +); + +19  +ty³_desütÜ +-> +Ý +-> + `Ûr_’cod” +( + +20 +ty³_desütÜ +, 0, + +21 +¡ruù_±r +, + +22 +cÚsume_by‹s +, +­p_key +); + +23 + } +} + +28  + s’c_to_buf_¬g + { + +29 * + mbufãr +; + +30 +size_t + + mËá +; + +31 } + t’c_to_buf_¬g +; + +33 + $’code_to_bufãr_cb +(cÚ¡ * +bufãr +, +size_t + +size +, * +key +) { + +34 +’c_to_buf_¬g + * +¬g + = (’c_to_buf_¬g *) +key +; + +36 if( +¬g +-> +Ëá + < +size +)  -1; + +38 + `memýy +( +¬g +-> +bufãr +, bufãr, +size +); + +39 +¬g +-> +bufãr + = ((*ïrg->bufãrè+ +size +; + +40 +¬g +-> +Ëá + -ð +size +; + +43 + } +} + +48 +a¢_’c_rv®_t + + +49 + $Ûr_’code_to_bufãr +(cÚ¡ +a¢_TYPE_desütÜ_t + * +ty³_desütÜ +, + +50 cÚ¡ +a¢_Ûr_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +51 cÚ¡ * +¡ruù_±r +, + +52 * +bufãr +, + +53 +size_t + +bufãr_size + + +55 +’c_to_buf_¬g + +¬g +; + +56 +a¢_’c_rv®_t + +ec +; + +58 +¬g +. +bufãr + = buffer; + +59 +¬g +. +Ëá + = +bufãr_size +; + +61 if( +ty³_desütÜ +-> +Ý +-> +Ûr_’cod” + =ð +NULL +) { + +62 +ec +. +’coded + = -1; + +63 +ec +. +çžed_ty³ + = +ty³_desütÜ +; + +64 +ec +. +¡ruùu»_±r + = +¡ruù_±r +; + +65 + `ASN_DEBUG +("OERƒncoder is‚ot defined for %s", + +66 +ty³_desütÜ +-> +Çme +); + +68 +ec + = +ty³_desütÜ +-> +Ý +-> + `Ûr_’cod” +( + +69 +ty³_desütÜ +, +cÚ¡¿šts +, + +70 +¡ruù_±r +, + +71 +’code_to_bufãr_cb +, & +¬g +); + +72 if( +ec +. +’coded + != -1) { + +73 + `as£¹ +( +ec +. +’coded + =ð( +ssize_t +)( +bufãr_size + - +¬g +. +Ëá +)); + +77  +ec +; + +78 + } +} + +80 +a¢_’c_rv®_t + + +81 + $Ûr_’code_´im™ive +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +82 cÚ¡ +a¢_Ûr_cÚ¡¿šts_t + * +cÚ¡¿šts +, cÚ¡ * +¥Œ +, + +83 +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +84 cÚ¡ +ASN__PRIMITIVE_TYPE_t + * +¡ + = (cÚ¡ ASN__PRIMITIVE_TYPE_ˆ*) +¥Œ +; + +85 +a¢_’c_rv®_t + +” + = {0, 0, 0}; + +86 +ssize_t + +»t +; + +88 () +cÚ¡¿šts +; + +90 if(! +¡ +è +ASN__ENCODE_FAILED +; + +92 + `ASN_DEBUG +("Encodšg % (%" +ASN_PRI_SIZE + " by‹s)", +td + ?d-> +Çme + : "", +¡ +-> +size +); + +97 +»t + = + `Ûr_£rŸlize_Ëngth +( +¡ +-> +size +, +cb +, +­p_key +); + +98 if( +»t + < 0) { + +99 +ASN__ENCODE_FAILED +; + +101 +” +. +’coded + +ð +»t +; + +103 +” +. +’coded + +ð +¡ +-> +size +; + +104 if( + `cb +( +¡ +-> +buf +, st-> +size +, +­p_key +) < 0) { + +105 +ASN__ENCODE_FAILED +; + +107 + `ASN__ENCODED_OK +( +” +); + +109 + } +} + +112 + $Ûr__couÁ_by‹s +(cÚ¡ * +bufãr +, +size_t + +size +, * +by‹s_±r +) { + +113 +size_t + * +by‹s + = +by‹s_±r +; + +114 () +bufãr +; + +115 * +by‹s + +ð +size +; + +117 + } +} + +119 +ssize_t + + +120 + $Ûr_ݒ_ty³_put +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +121 cÚ¡ +a¢_Ûr_cÚ¡¿šts_t + * +cÚ¡¿šts +, cÚ¡ * +¥Œ +, + +122 +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +123 +size_t + +£rŸlized_by‹_couÁ + = 0; + +124 +a¢_’c_rv®_t + +” + = {0,0,0}; + +125 +ssize_t + +Ën_Ën +; + +127 +” + = +td +-> +Ý +-> + `Ûr_’cod” +Ñd, +cÚ¡¿šts +, +¥Œ +, +Ûr__couÁ_by‹s +, + +128 & +£rŸlized_by‹_couÁ +); + +129 if( +” +. +’coded + < 0)  -1; + +130 + `as£¹ +( +£rŸlized_by‹_couÁ + =ð( +size_t +) +” +. +’coded +); + +132 +Ën_Ën + = + `Ûr_£rŸlize_Ëngth +( +£rŸlized_by‹_couÁ +, +cb +, +­p_key +); + +133 if( +Ën_Ën + == -1)  -1; + +135 +” + = +td +-> +Ý +-> + `Ûr_’cod” +Ñd, +cÚ¡¿šts +, +¥Œ +, +cb +, +­p_key +); + +136 if( +” +. +’coded + < 0)  -1; + +137 + `as£¹ +( +£rŸlized_by‹_couÁ + =ð( +size_t +) +” +. +’coded +); + +139  +Ën_Ën + + +” +. +’coded +; + +140 + } +} + + @oer_support.c + +6  + ~ + +7  + ~ + +9  + ~<Ûr_suµÜt.h +> + +18 +ssize_t + + +19 + $Ûr_ãtch_Ëngth +(cÚ¡ * +buåŒ +, +size_t + +size +, size_ˆ* +Ën_r +) { + +20 +ušt8_t + +fœ¡_by‹ +; + +21 +size_t + +Ën_Ën +; + +22 cÚ¡ +ušt8_t + * +b +; + +23 cÚ¡ +ušt8_t + * +b’d +; + +24 +size_t + +Ën +; + +26 if( +size + == 0) { + +27 * +Ën_r + = 0; + +31 +fœ¡_by‹ + = *(cÚ¡ +ušt8_t + *) +buåŒ +; + +32 if(( +fœ¡_by‹ + & 0x80) == 0) { + +33 * +Ën_r + = +fœ¡_by‹ +; + +37 +Ën_Ën + = ( +fœ¡_by‹ + & 0x7f); + +38 if((1 + +Ën_Ën +è> +size +) { + +39 * +Ën_r + = 0; + +43 +b + = (cÚ¡ +ušt8_t + *) +buåŒ + + 1; + +44 +b’d + = +b + + +Ën_Ën +; + +46 ; +b + < +b’d + && *b == 0; b++) { + +50 if(( +b’d + - +b +è> ( +ssize_t +)( +size_t +)) { + +52 * +Ën_r + = 0; + +56  +Ën + = 0; +b + < +b’d +; b++) { + +57 +Ën + = (ËÀ<< 8è+ * +b +; + +60 if( +Ën + > +RSIZE_MAX +) { + +61 * +Ën_r + = 0; + +65 * +Ën_r + = +Ën +; + +66 + `as£¹ +( +Ën_Ën + + 1 =ð( +size_t +)( +b’d + - (cÚ¡ +ušt8_t + *) +buåŒ +)); + +67  +Ën_Ën + + 1; + +68 + } +} + +75 +ssize_t + + +76 + $Ûr_£rŸlize_Ëngth +( +size_t + +Ëngth +, +a¢_­p_cÚsume_by‹s_f + * +cb +, + +77 * +­p_key +) { + +78 +ušt8_t + +sü©ch +[1 + ( +Ëngth +)]; + +79 +ušt8_t + * +¥ + = +sü©ch +; + +80  +l™ŽeEndŸn + = 1; + +81 cÚ¡ +ušt8_t + * +p¡¬t +; + +82 cÚ¡ +ušt8_t + * +³nd +; + +83 cÚ¡ +ušt8_t + * +p +; + +84  +add +; + +86 if( +Ëngth + <= 127) { + +87 +ušt8_t + +b + = +Ëngth +; + +88 if( + `cb +(& +b +, 1, +­p_key +) < 0) { + +94 if(*(*)& +l™ŽeEndŸn +) { + +95 +p¡¬t + = (cÚ¡ +ušt8_t + *)& +Ëngth + + (length) - 1; + +96 +³nd + = (cÚ¡ +ušt8_t + *)& +Ëngth +; + +97 +add + = -1; + +99 +p¡¬t + = (cÚ¡ +ušt8_t + *)& +Ëngth +; + +100 +³nd + = +p¡¬t + + ( +Ëngth +); + +101 +add + = 1; + +104  +p + = +p¡¬t +;… !ð +³nd +;… +ð +add +) { + +106 if(* +p +) ; + +109  +¥ + = +sü©ch + + 1; ; +p + +ð +add +) { + +110 * +¥ +++ = * +p +; + +111 if( +p + =ð +³nd +) ; + +113 + `as£¹ +(( +¥ + - +sü©ch +) - 1 <= 0x7f); + +114 +sü©ch +[0] = 0x80 + (( +¥ + - scratch) - 1); + +116 if( + `cb +( +sü©ch +, +¥ + - sü©ch, +­p_key +) < 0) { + +120  +¥ + - +sü©ch +; + +121 + } +} + + @per_decoder.c + +1  + ~ + +2  + ~ + +3  + ~<³r_decod”.h +> + +10 +a¢_dec_rv®_t + + +11 + $u³r_decode_com¶‘e +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +12 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¥Œ +, + +13 cÚ¡ * +bufãr +, +size_t + +size +) { + +14 +a¢_dec_rv®_t + +rv® +; + +16 +rv® + = + `u³r_decode +( +Ýt_codec_ùx +, +td +, +¥Œ +, +bufãr +, +size +, 0, 0); + +17 if( +rv® +. +cÚsumed +) { + +22 +rv® +. +cÚsumed + += 7; + +23 +rv® +. +cÚsumed + >>= 3; + +24 } if( +rv® +. +code + =ð +RC_OK +) { + +25 if( +size +) { + +26 if(((cÚ¡ +ušt8_t + *) +bufãr +)[0] == 0) { + +27 +rv® +. +cÚsumed + = 1; + +29 + `ASN_DEBUG +("Expecting single zeroed byte"); + +30 +rv® +. +code + = +RC_FAIL +; + +34 +rv® +. +code + = +RC_WMORE +; + +38  +rv® +; + +39 + } +} + +41 +a¢_dec_rv®_t + + +42 + $u³r_decode +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +43 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¥Œ +, cÚ¡ * +bufãr +, + +44 +size_t + +size +,  +sk_b™s +,  +unu£d_b™s +) { + +45 +a¢_codec_ùx_t + +s_codec_ùx +; + +46 +a¢_dec_rv®_t + +rv® +; + +47 +a¢_³r_d©a_t + +pd +; + +49 if( +sk_b™s + < 0 || skip_bits > 7 + +50 || +unu£d_b™s + < 0 || unused_bits > 7 + +51 || ( +unu£d_b™s + > 0 && ! +size +)) + +52 +ASN__DECODE_FAILED +; + +58 if( +Ýt_codec_ùx +) { + +59 if( +Ýt_codec_ùx +-> +max_¡ack_size +) { + +60 +s_codec_ùx + = * +Ýt_codec_ùx +; + +61 +Ýt_codec_ùx + = & +s_codec_ùx +; + +65 + `mem£t +(& +s_codec_ùx +, 0, (s_codec_ctx)); + +66 +s_codec_ùx +. +max_¡ack_size + = +ASN__DEFAULT_STACK_MAX +; + +67 +Ýt_codec_ùx + = & +s_codec_ùx +; + +71 + `mem£t +(& +pd +, 0, (pd)); + +72 +pd +. +bufãr + = (cÚ¡ +ušt8_t + *)buffer; + +73 +pd +. +nboff + = +sk_b™s +; + +74 +pd +. +nb™s + = 8 * +size + - +unu£d_b™s +; + +75 if( +pd +. +nboff + >…d. +nb™s +) + +76 +ASN__DECODE_FAILED +; + +81 if(! +td +-> +Ý +-> +u³r_decod” +) + +82 +ASN__DECODE_FAILED +; + +83 +rv® + = +td +-> +Ý +-> + `u³r_decod” +( +Ýt_codec_ùx +,d, 0, +¥Œ +, & +pd +); + +84 if( +rv® +. +code + =ð +RC_OK +) { + +86 +rv® +. +cÚsumed + = (( +pd +. +bufãr + - (cÚ¡ +ušt8_t + *)buffer) << 3) + +87 + +pd +. +nboff + - +sk_b™s +; + +88 + `ASN_DEBUG +("PER decoding consumed %ld, counted %ld", + +89 () +rv® +. +cÚsumed +, () +pd +. +moved +); + +90 + `as£¹ +( +rv® +. +cÚsumed + =ð +pd +. +moved +); + +93 +rv® +. +cÚsumed + = 0; + +95  +rv® +; + +96 + } +} + +98 +a¢_dec_rv®_t + + +99 + $­”_decode_com¶‘e +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +100 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¥Œ +, + +101 cÚ¡ * +bufãr +, +size_t + +size +) { + +102 +a¢_dec_rv®_t + +rv® +; + +104 +rv® + = + `­”_decode +( +Ýt_codec_ùx +, +td +, +¥Œ +, +bufãr +, +size +, 0, 0); + +105 if( +rv® +. +cÚsumed +) { + +110 +rv® +. +cÚsumed + += 7; + +111 +rv® +. +cÚsumed + >>= 3; + +112 } if( +rv® +. +code + =ð +RC_OK +) { + +113 if( +size +) { + +114 if(((cÚ¡ +ušt8_t + *) +bufãr +)[0] == 0) { + +115 +rv® +. +cÚsumed + = 1; + +117 + `ASN_DEBUG +("Expecting single zeroed byte"); + +118 +rv® +. +code + = +RC_FAIL +; + +122 +rv® +. +code + = +RC_WMORE +; + +126  +rv® +; + +127 + } +} + +129 +a¢_dec_rv®_t + + +130 + $­”_decode +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +131 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¥Œ +, cÚ¡ * +bufãr +, + +132 +size_t + +size +,  +sk_b™s +,  +unu£d_b™s +) { + +133 +a¢_codec_ùx_t + +s_codec_ùx +; + +134 +a¢_dec_rv®_t + +rv® +; + +135 +a¢_³r_d©a_t + +pd +; + +137 if( +sk_b™s + < 0 || skip_bits > 7 + +138 || +unu£d_b™s + < 0 || unused_bits > 7 + +139 || ( +unu£d_b™s + > 0 && ! +size +)) + +140 +ASN__DECODE_FAILED +; + +146 if( +Ýt_codec_ùx +) { + +147 if( +Ýt_codec_ùx +-> +max_¡ack_size +) { + +148 +s_codec_ùx + = * +Ýt_codec_ùx +; + +149 +Ýt_codec_ùx + = & +s_codec_ùx +; + +153 + `mem£t +(& +s_codec_ùx +, 0, (s_codec_ctx)); + +154 +s_codec_ùx +. +max_¡ack_size + = +ASN__DEFAULT_STACK_MAX +; + +155 +Ýt_codec_ùx + = & +s_codec_ùx +; + +159 + `mem£t +(& +pd +, 0, (pd)); + +160 +pd +. +bufãr + = (cÚ¡ +ušt8_t + *)buffer; + +161 +pd +. +nboff + = +sk_b™s +; + +162 +pd +. +nb™s + = 8 * +size + - +unu£d_b™s +; + +163 if( +pd +. +nboff + >…d. +nb™s +) + +164 +ASN__DECODE_FAILED +; + +169 if(! +td +-> +Ý +-> +­”_decod” +) + +170 +ASN__DECODE_FAILED +; + +171 +rv® + = +td +-> +Ý +-> + `­”_decod” +( +Ýt_codec_ùx +,d, 0, +¥Œ +, & +pd +); + +172 if( +rv® +. +code + =ð +RC_OK +) { + +174 +rv® +. +cÚsumed + = (( +pd +. +bufãr + - (cÚ¡ +ušt8_t + *)buffer) << 3) + +175 + +pd +. +nboff + - +sk_b™s +; + +176 + `ASN_DEBUG +("PER decoding consumed %zu, counted %zu", + +177 +rv® +. +cÚsumed +, +pd +. +moved +); + +178 + `as£¹ +( +rv® +. +cÚsumed + =ð +pd +. +moved +); + +181 +rv® +. +cÚsumed + = 0; + +183  +rv® +; + +184 + } +} + + @per_encoder.c + +1  + ~ + +2  + ~ + +3  + ~<³r_’cod”.h +> + +5  +_u³r_’code_æush_ou +( +a¢_³r_ou_t + * +po +); + +8 + $ignÜe_ouut +(cÚ¡ * +d©a +, +size_t + +size +, * +­p_key +) { + +9 () +d©a +; + +10 () +size +; + +11 () +­p_key +; + +13 + } +} + +15 +a¢_’c_rv®_t + + +16 + $u³r_’code +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +17 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, cÚ¡ * +¥Œ +, + +18 +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +19 +a¢_³r_ou_t + +po +; + +20 +a¢_’c_rv®_t + +” + = {0,0,0}; + +25 if(! +td + || !td-> +Ý +-> +u³r_’cod” +) + +26 +ASN__ENCODE_FAILED +; + +28 +po +. +bufãr + =…o. +tmp¥aû +; + +29 +po +. +nboff + = 0; + +30 +po +. +nb™s + = 8 * Õo. +tmp¥aû +); + +31 +po +. +ouut + = +cb + ? cb : +ignÜe_ouut +; + +32 +po +. +Ý_key + = +­p_key +; + +33 +po +. +æushed_by‹s + = 0; + +35 +” + = +td +-> +Ý +-> + `u³r_’cod” +Ñd, +cÚ¡¿šts +, +¥Œ +, & +po +); + +36 if( +” +. +’coded + != -1) { + +37 +size_t + +b™s_to_æush +; + +39 +b™s_to_æush + = (( +po +. +bufãr + -…o. +tmp¥aû +è<< 3è+…o. +nboff +; + +42 +” +. +’coded + = ( +po +. +æushed_by‹s + << 3è+ +b™s_to_æush +; + +44 if( + `_u³r_’code_æush_ou +(& +po +)è +ASN__ENCODE_FAILED +; + +47  +” +; + +48 + } +} + +53  + s’c_to_buf_¬g + { + +54 * + mbufãr +; + +55 +size_t + + mËá +; + +56 } + t’c_to_buf_¬g +; + +57  + $’code_to_bufãr_cb +(cÚ¡ * +bufãr +, +size_t + +size +, * +key +) { + +58 +’c_to_buf_¬g + * +¬g + = (’c_to_buf_¬g *) +key +; + +60 if( +¬g +-> +Ëá + < +size +) + +63 + `memýy +( +¬g +-> +bufãr +, bufãr, +size +); + +64 +¬g +-> +bufãr + = ((*ïrg->bufãrè+ +size +; + +65 +¬g +-> +Ëá + -ð +size +; + +68 + } +} + +70 +a¢_’c_rv®_t + + +71 + $u³r_’code_to_bufãr +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +72 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +73 cÚ¡ * +¥Œ +, * +bufãr +, +size_t + +bufãr_size +) { + +74 +’c_to_buf_¬g + +key +; + +76 +key +. +bufãr + = buffer; + +77 +key +. +Ëá + = +bufãr_size +; + +79 if( +td +è + `ASN_DEBUG +("Encodšg \"%s\" usšg UNALIGNED PER",d-> +Çme +); + +81  + `u³r_’code +( +td +, +cÚ¡¿šts +, +¥Œ +, +’code_to_bufãr_cb +, & +key +); + +82 + } +} + +84  + s’c_dyn_¬g + { + +85 * + mbufãr +; + +86 +size_t + + mËngth +; + +87 +size_t + + m®loÿ‹d +; + +88 } + t’c_dyn_¬g +; + +90 + $’code_dyn_cb +(cÚ¡ * +bufãr +, +size_t + +size +, * +key +) { + +91 +’c_dyn_¬g + * +¬g + = +key +; + +92 if( +¬g +-> +Ëngth + + +size + >ð¬g-> +®loÿ‹d +) { + +93 +size_t + +Ãw_size + = +¬g +-> +®loÿ‹d + ?‡rg->allocated : 8; + +94 * +p +; + +97 +Ãw_size + <<= 2; + +98 }  +¬g +-> +Ëngth + + +size + >ð +Ãw_size +); + +100 +p + = + `REALLOC +( +¬g +-> +bufãr +, +Ãw_size +); + +101 if(! +p +) { + +102 + `FREEMEM +( +¬g +-> +bufãr +); + +103 + `mem£t +( +¬g +, 0, (*arg)); + +106 +¬g +-> +bufãr + = +p +; + +107 +¬g +-> +®loÿ‹d + = +Ãw_size +; + +109 + `memýy +(((*) +¬g +-> +bufãr +è+‡rg-> +Ëngth +, bufãr, +size +); + +110 +¬g +-> +Ëngth + +ð +size +; + +112 + } +} + +113 +ssize_t + + +114 + $u³r_’code_to_Ãw_bufãr +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +115 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +116 cÚ¡ * +¥Œ +, ** +bufãr_r +) { + +117 +a¢_’c_rv®_t + +” + = {0,0,0}; + +118 +’c_dyn_¬g + +key +; + +120 + `mem£t +(& +key +, 0, (key)); + +122 +” + = + `u³r_’code +( +td +, +cÚ¡¿šts +, +¥Œ +, +’code_dyn_cb +, & +key +); + +123  +” +. +’coded +) { + +125 + `FREEMEM +( +key +. +bufãr +); + +128 + `FREEMEM +( +key +. +bufãr +); + +129 +key +. +bufãr + = + `MALLOC +(1); + +130 if( +key +. +bufãr +) { + +131 *(*) +key +. +bufãr + = '\0'; + +132 * +bufãr_r + = +key +. +bufãr +; + +138 * +bufãr_r + = +key +. +bufãr +; + +139 + `ASN_DEBUG +("Com¶‘’coded iÀ%ld b™s", () +” +. +’coded +); + +140  (( +” +. +’coded + + 7) >> 3); + +142 + } +} + +150 + $_u³r_’code_æush_ou +( +a¢_³r_ou_t + * +po +) { + +151 +ušt8_t + * +buf +; + +153 if( +po +-> +nboff + =ð0 &&…o-> +bufãr + =ðpo-> +tmp¥aû +) + +156 +buf + = +po +-> +bufãr + + (po-> +nboff + >> 3); + +158 if( +po +-> +nboff + & 0x07) { + +159 +buf +[0] &ð0xfà<< (8 - ( +po +-> +nboff + & 0x07)); + +160 +buf +++; + +163  +po +-> + `ouut +Õo-> +tmp¥aû +, +buf + -…o->tmp¥aû,…o-> +Ý_key +); + +164 + } +} + +166 +a¢_’c_rv®_t + + +167 + $­”_’code_to_bufãr +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +168 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +169 cÚ¡ * +¥Œ +, * +bufãr +, +size_t + +bufãr_size +) { + +170 +’c_to_buf_¬g + +key +; + +172 +key +. +bufãr + = buffer; + +173 +key +. +Ëá + = +bufãr_size +; + +175 if( +td +è + `ASN_DEBUG +("Encodšg \"%s\" usšg ALIGNED PER",d-> +Çme +); + +177  + `­”_’code +( +td +, +cÚ¡¿šts +, +¥Œ +, +’code_to_bufãr_cb +, & +key +); + +178 + } +} + +180 +ssize_t + + +181 + $­”_’code_to_Ãw_bufãr +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +182 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +183 cÚ¡ * +¥Œ +, ** +bufãr_r +) { + +184 +a¢_’c_rv®_t + +” + = {0,0,0}; + +185 +’c_dyn_¬g + +key +; + +187 + `mem£t +(& +key +, 0, (key)); + +189 +” + = + `­”_’code +( +td +, +cÚ¡¿šts +, +¥Œ +, +’code_dyn_cb +, & +key +); + +190  +” +. +’coded +) { + +192 + `FREEMEM +( +key +. +bufãr +); + +195 + `FREEMEM +( +key +. +bufãr +); + +196 +key +. +bufãr + = + `MALLOC +(1); + +197 if( +key +. +bufãr +) { + +198 *(*) +key +. +bufãr + = '\0'; + +199 * +bufãr_r + = +key +. +bufãr +; + +205 * +bufãr_r + = +key +. +bufãr +; + +206 + `ASN_DEBUG +("Com¶‘’coded iÀ%ld b™s", () +” +. +’coded +); + +207  (( +” +. +’coded + + 7) >> 3); + +209 + } +} + +212 + $_­”_’code_æush_ou +( +a¢_³r_ou_t + * +po +) { + +213 +ušt8_t + * +buf +; + +215 if( +po +-> +nboff + =ð0 &&…o-> +bufãr + =ðpo-> +tmp¥aû +) + +218 +buf + = +po +-> +bufãr + + (po-> +nboff + >> 3); + +220 if( +po +-> +nboff + & 0x07) { + +221 +buf +[0] &ð0xfà<< (8 - ( +po +-> +nboff + & 0x07)); + +222 +buf +++; + +225 ià( +po +-> +ouut +) { + +226  +po +-> + `ouut +Õo-> +tmp¥aû +, +buf + -…o->tmp¥aû,…o-> +Ý_key +); + +229 + } +} + +231 +a¢_’c_rv®_t + + +232 + $­”_’code +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +233 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +234 cÚ¡ * +¥Œ +, +a¢_­p_cÚsume_by‹s_f + * +cb +, * +­p_key +) { + +235 +a¢_³r_ou_t + +po +; + +236 +a¢_’c_rv®_t + +” + = {0,0,0}; + +241 if(! +td + || !td-> +Ý +-> +­”_’cod” +) + +242 +ASN__ENCODE_FAILED +; + +244 +po +. +bufãr + =…o. +tmp¥aû +; + +245 +po +. +nboff + = 0; + +246 +po +. +nb™s + = 8 * Õo. +tmp¥aû +); + +247 +po +. +ouut + = +cb +; + +248 +po +. +Ý_key + = +­p_key +; + +249 +po +. +æushed_by‹s + = 0; + +251 +” + = +td +-> +Ý +-> + `­”_’cod” +Ñd, +cÚ¡¿šts +, +¥Œ +, & +po +); + +252 if( +” +. +’coded + != -1) { + +253 +size_t + +b™s_to_æush +; + +255 +b™s_to_æush + = (( +po +. +bufãr + -…o. +tmp¥aû +è<< 3è+…o. +nboff +; + +258 +” +. +’coded + = ( +po +. +æushed_by‹s + << 3è+ +b™s_to_æush +; + +260 if( + `_­”_’code_æush_ou +(& +po +)) + +261 +ASN__ENCODE_FAILED +; + +264  +” +; + +265 + } +} + + @per_opentype.c + +5  + ~ + +6  + ~<³r_suµÜt.h +> + +7  + ~ + +8  + ~<³r_ݒty³.h +> + +10  + su³r_ugÙ_key + { + +11 +a¢_³r_d©a_t + + mÞdpd +; + +12 +size_t + + munþaimed +; + +13 +size_t + + mÙ_moved +; + +14  + m»³© +; + +15 } + tu³r_ugÙ_key +; + +17  +u³r_ugÙ_»fžl +( +a¢_³r_d©a_t + * +pd +); + +18  +³r_sk_b™s +( +a¢_³r_d©a_t + * +pd +,  +sk_nb™s +); + +19  +a¢_dec_rv®_t + +u³r_sÙ_suck +(cÚ¡ +a¢_codec_ùx_t + *, + +20 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +21 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +22 ** +¥Œ +, +a¢_³r_d©a_t + * +pd +); + +29 + $u³r_ݒ_ty³_put +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +30 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, cÚ¡ * +¥Œ +, + +31 +a¢_³r_ou_t + * +po +) { + +32 * +buf +; + +33 * +b±r +; + +34 +ssize_t + +size +; + +36 + `ASN_DEBUG +("O³Àty³…uˆ% ...", +td +-> +Çme +); + +38 +size + = + `u³r_’code_to_Ãw_bufãr +( +td +, +cÚ¡¿šts +, +¥Œ +, & +buf +); + +39 if( +size + <= 0)  -1; + +41 + `ASN_DEBUG +("O³Àty³…uˆ% oàËngth %" +ASN_PRI_SSIZE + " + ov”h—d (1by‹?)", +td +-> +Çme +, + +42 +size +); + +44 +b±r + = +buf +; + +46  +Ãed_eom + = 0; + +47 +ssize_t + +may_§ve + = + `u³r_put_Ëngth +( +po +, +size +, & +Ãed_eom +); + +48 + `ASN_DEBUG +("P»³ndšg†’gth %" +ASN_PRI_SSIZE + + +49 "Ø% ªd‡ÎowšgØ§v%" +ASN_PRI_SSIZE +, + +50 +size +, +td +-> +Çme +, +may_§ve +); + +51 if( +may_§ve + < 0) ; + +52 if( + `³r_put_mªy_b™s +( +po +, +b±r +, +may_§ve + * 8)) ; + +53 +b±r + = (*)b±¸+ +may_§ve +; + +54 +size + -ð +may_§ve +; + +55 if( +Ãed_eom + && + `u³r_put_Ëngth +( +po +, 0, 0)) { + +56 + `FREEMEM +( +buf +); + +59 }  +size +); + +61 + `FREEMEM +( +buf +); + +62 if( +size +)  -1; + +65 + } +} + +67  +a¢_dec_rv®_t + + +68 + $u³r_ݒ_ty³_g‘_sim¶e +(cÚ¡ +a¢_codec_ùx_t + * +ùx +, + +69 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +70 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, ** +¥Œ +, + +71 +a¢_³r_d©a_t + * +pd +) { + +72 +a¢_dec_rv®_t + +rv +; + +73 +ssize_t + +chunk_by‹s +; + +74  +»³© +; + +75 +ušt8_t + * +buf + = 0; + +76 +size_t + +bufL’ + = 0; + +77 +size_t + +bufSize + = 0; + +78 +a¢_³r_d©a_t + +¥d +; + +79 +size_t + +·ddšg +; + +81 + `ASN__STACK_OVERFLOW_CHECK +( +ùx +); + +83 + `ASN_DEBUG +("G‘tšg o³Àty³ %s...", +td +-> +Çme +); + +86 +chunk_by‹s + = + `u³r_g‘_Ëngth +( +pd +, -1, 0, & +»³© +); + +87 if( +chunk_by‹s + < 0) { + +88 + `FREEMEM +( +buf +); + +89 +ASN__DECODE_STARVED +; + +91 if( +bufL’ + + +chunk_by‹s + > +bufSize +) { + +92 * +±r +; + +93 +bufSize + = +chunk_by‹s + + (bufSize << 2); + +94 +±r + = + `REALLOC +( +buf +, +bufSize +); + +95 if(! +±r +) { + +96 + `FREEMEM +( +buf +); + +97 +ASN__DECODE_FAILED +; + +99 +buf + = +±r +; + +101 if( + `³r_g‘_mªy_b™s +( +pd +, +buf + + +bufL’ +, 0, +chunk_by‹s + << 3)) { + +102 + `FREEMEM +( +buf +); + +103 +ASN__DECODE_STARVED +; + +105 +bufL’ + +ð +chunk_by‹s +; + +106 }  +»³© +); + +108 + `ASN_DEBUG +("G‘tšg o³Àty³ % ’coded iÀ%ld by‹s", +td +-> +Çme +, + +109 () +bufL’ +); + +111 + `mem£t +(& +¥d +, 0, (spd)); + +112 +¥d +. +bufãr + = +buf +; + +113 +¥d +. +nb™s + = +bufL’ + << 3; + +115 + `ASN_DEBUG_INDENT_ADD +(+4); + +116 +rv + = +td +-> +Ý +-> + `u³r_decod” +( +ùx +,d, +cÚ¡¿šts +, +¥Œ +, & +¥d +); + +117 + `ASN_DEBUG_INDENT_ADD +(-4); + +119 if( +rv +. +code + =ð +RC_OK +) { + +121 +·ddšg + = +¥d +. +nb™s + - spd. +nboff +; + +122 ià((( +·ddšg + > 0 &&…adding < 8) || + +124 ( +¥d +. +nboff + =ð0 && spd. +nb™s + =ð8 && spd. +bufãr + =ð +buf +)) && + +125 + `³r_g‘_ãw_b™s +(& +¥d +, +·ddšg +) == 0) { + +127 + `FREEMEM +( +buf +); + +128  +rv +; + +130 + `FREEMEM +( +buf +); + +131 if( +·ddšg + >= 8) { + +132 + `ASN_DEBUG +("ToØÏrg·ddšg %d iÀݒy³", () +·ddšg +); + +133 +ASN__DECODE_FAILED +; + +135 + `ASN_DEBUG +("No…adding"); + +138 + `FREEMEM +( +buf +); + +140 +rv +. +code + = +RC_FAIL +; + +143  +rv +; + +144 + } +} + +146  +a¢_dec_rv®_t + +CC_NOTUSED + + +147 + $u³r_ݒ_ty³_g‘_com¶ex +(cÚ¡ +a¢_codec_ùx_t + * +ùx +, + +148 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +149 +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, ** +¥Œ +, + +150 +a¢_³r_d©a_t + * +pd +) { + +151 +u³r_ugÙ_key + +¬g +; + +152 +a¢_dec_rv®_t + +rv +; + +153 +ssize_t + +·ddšg +; + +155 + `ASN__STACK_OVERFLOW_CHECK +( +ùx +); + +157 + `ASN_DEBUG +("G‘tšg o³Àty³ % äom %s", +td +-> +Çme +, + +158 + `a¢_b™_d©a_¡ršg +( +pd +)); + +159 +¬g +. +Þdpd + = * +pd +; + +160 +¬g +. +unþaimed + = 0; + +161 +¬g +. +Ù_moved + = 0; + +162 +¬g +. +»³© + = 1; + +163 +pd +-> +»fžl + = +u³r_ugÙ_»fžl +; + +164 +pd +-> +»fžl_key + = & +¬g +; + +165 +pd +-> +nb™s + =…d-> +nboff +; + +166 +pd +-> +moved + = 0; + +168 + `ASN_DEBUG_INDENT_ADD +(+4); + +169 +rv + = +td +-> +Ý +-> + `u³r_decod” +( +ùx +,d, +cÚ¡¿šts +, +¥Œ +, +pd +); + +170 + `ASN_DEBUG_INDENT_ADD +(-4); + +172  + #UPDRESTOREPD + do { \ + +174 +pd +-> +nb™s + = +¬g +. +Þdpd +.nb™ - (pd-> +moved + -‡rg. +Ù_moved +); \ + +175 +pd +-> +moved + = +¬g +. +Þdpd +.moved + (pd->moved -‡rg. +Ù_moved +); \ + +176 +pd +-> +»fžl + = +¬g +. +Þdpd +.refill; \ + +177 +pd +-> +»fžl_key + = +¬g +. +Þdpd +.refill_key; \ + +178 } 0) + + ) + +180 if( +rv +. +code + !ð +RC_OK +) { + +181 +UPDRESTOREPD +; + +182  +rv +; + +185 + `ASN_DEBUG +("O³nTy³ % pd% Þd% unþaimed=%d,„•—t=%d", +td +-> +Çme +, + +186 + `a¢_b™_d©a_¡ršg +( +pd +), + +187 + `a¢_b™_d©a_¡ršg +(& +¬g +. +Þdpd +), + +188 () +¬g +. +unþaimed +, (ïrg. +»³© +); + +190 +·ddšg + = +pd +-> +moved + % 8; + +191 if( +·ddšg +) { + +192 +št32_t + +pv®ue +; + +193 if( +·ddšg + > 7) { + +194 + `ASN_DEBUG +("Too†arge…adding %d in openype", + +195 () +·ddšg +); + +196 +rv +. +code + = +RC_FAIL +; + +197 +UPDRESTOREPD +; + +198  +rv +; + +200 +·ddšg + = 8 -…adding; + +201 + `ASN_DEBUG +("G‘tšg…addšg oà%d b™s", () +·ddšg +); + +202 +pv®ue + = + `³r_g‘_ãw_b™s +( +pd +, +·ddšg +); + +203  +pv®ue +) { + +205 + `ASN_DEBUG +("Padding skip failed"); + +206 +UPDRESTOREPD +; + +207 +ASN__DECODE_STARVED +; + +210 + `ASN_DEBUG +("Non-blank…adding (%d bits 0x%02x)", + +211 () +·ddšg +, () +pv®ue +); + +212 +UPDRESTOREPD +; + +213 +ASN__DECODE_FAILED +; + +216 if( +pd +-> +nboff + !ðpd-> +nb™s +) { + +217 + `ASN_DEBUG +("O³Àty³ % ov”h—d…d% Þd%s", +td +-> +Çme +, + +218 + `a¢_b™_d©a_¡ršg +( +pd +),‡¢_b™_d©a_¡ršg(& +¬g +. +Þdpd +)); + +220 +UPDRESTOREPD +; + +221 +ASN__DECODE_FAILED +; + +223 +¬g +. +unþaimed + +ð +pd +-> +nb™s + -…d-> +nboff +; + +228 +UPDRESTOREPD +; + +231 if( +¬g +. +unþaimed +) { + +232 + `ASN_DEBUG +("G‘tšg unþaimed %d", () +¬g +. +unþaimed +); + +233  + `³r_sk_b™s +( +pd +, +¬g +. +unþaimed +)) { + +235 + `ASN_DEBUG +("CÏim oà%d fažed", () +¬g +. +unþaimed +); + +236 +ASN__DECODE_STARVED +; + +238 + `ASN_DEBUG +("GÙ cÏim oà%d", () +¬g +. +unþaimed +); + +242 + `ASN_DEBUG +("Non-blank unconsumed…adding"); + +243 +ASN__DECODE_FAILED +; + +245 +¬g +. +unþaimed + = 0; + +248 if( +¬g +. +»³© +) { + +249 + `ASN_DEBUG +("Not consumedhe wholehing"); + +250 +rv +. +code + = +RC_FAIL +; + +251  +rv +; + +254  +rv +; + +255 + } +} + +258 +a¢_dec_rv®_t + + +259 + $u³r_ݒ_ty³_g‘ +(cÚ¡ +a¢_codec_ùx_t + * +ùx +, cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +260 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, ** +¥Œ +, + +261 +a¢_³r_d©a_t + * +pd +) { + +262  + `u³r_ݒ_ty³_g‘_sim¶e +( +ùx +, +td +, +cÚ¡¿šts +, +¥Œ +, +pd +); + +263 + } +} + +266 + $u³r_ݒ_ty³_sk +(cÚ¡ +a¢_codec_ùx_t + * +ùx +, +a¢_³r_d©a_t + * +pd +) { + +267 +a¢_TYPE_desütÜ_t + +s_td +; + +268 +a¢_TYPE_ݔ©iÚ_t + +s_Ý +; + +269 +a¢_dec_rv®_t + +rv +; + +271 +s_td +. +Çme + = ""; + +272 +s_td +. +Ý + = & +s_Ý +; + +273 +s_Ý +. +u³r_decod” + = +u³r_sÙ_suck +; + +275 +rv + = + `u³r_ݒ_ty³_g‘ +( +ùx +, & +s_td +, 0, 0, +pd +); + +276 if( +rv +. +code + !ð +RC_OK +) + +280 + } +} + +286  +a¢_dec_rv®_t + + +287 + $u³r_sÙ_suck +(cÚ¡ +a¢_codec_ùx_t + * +ùx +, cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +288 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, ** +¥Œ +, + +289 +a¢_³r_d©a_t + * +pd +) { + +290 +a¢_dec_rv®_t + +rv +; + +292 () +ùx +; + +293 () +td +; + +294 () +cÚ¡¿šts +; + +295 () +¥Œ +; + +297  + `³r_g‘_ãw_b™s +( +pd +, 1) >= 0); + +299 +rv +. +code + = +RC_OK +; + +300 +rv +. +cÚsumed + = +pd +-> +moved +; + +302  +rv +; + +303 + } +} + +306 + $u³r_ugÙ_»fžl +( +a¢_³r_d©a_t + * +pd +) { + +307 +u³r_ugÙ_key + * +¬g + = +pd +-> +»fžl_key +; + +308 +ssize_t + +Ãxt_chunk_by‹s +, +Ãxt_chunk_b™s +; + +309 +ssize_t + +avaž +; + +311 +a¢_³r_d©a_t + * +Þdpd + = & +¬g +->oldpd; + +313 + `ASN_DEBUG +("REFILLING…d->moved=%ld, oldpd->moved=%ld", + +314 () +pd +-> +moved +, () +Þdpd +->moved); + +317 +Þdpd +-> +bufãr + = +pd +->buffer; + +318 +Þdpd +-> +nboff + = +pd +->nboff; + +319 +Þdpd +-> +nb™s + -ð +pd +-> +moved + - +¬g +-> +Ù_moved +; + +320 +Þdpd +-> +moved + +ð +pd +->moved - +¬g +-> +Ù_moved +; + +321 +¬g +-> +Ù_moved + = +pd +-> +moved +; + +323 if( +¬g +-> +unþaimed +) { + +325 if( + `³r_g‘_ãw_b™s +( +Þdpd +, 1)) + +327 if( +Þdpd +-> +nboff + == 0) { + +328 + `as£¹ +(0); + +331 +pd +-> +bufãr + = +Þdpd +->buffer; + +332 +pd +-> +nboff + = +Þdpd +->nboff - 1; + +333 +pd +-> +nb™s + = +Þdpd +->nbits; + +334 + `ASN_DEBUG +("UNCLAIMED <-„eturn from (pd->moved=%ld)", + +335 () +pd +-> +moved +); + +339 if(! +¬g +-> +»³© +) { + +340 + `ASN_DEBUG +("Want more but„efill doesn't have it"); + +344 +Ãxt_chunk_by‹s + = + `u³r_g‘_Ëngth +( +Þdpd +, -1, 0, & +¬g +-> +»³© +); + +345 + `ASN_DEBUG +("Openype LENGTH %ld bytes‡t off %ld,„epeat %ld", + +346 () +Ãxt_chunk_by‹s +, () +Þdpd +-> +moved +, () +¬g +-> +»³© +); + +347 if( +Ãxt_chunk_by‹s + < 0)  -1; + +348 if( +Ãxt_chunk_by‹s + == 0) { + +349 +pd +-> +»fžl + = 0; + +350 + `as£¹ +(! +¬g +-> +»³© +); + +352 +Ãxt_chunk_b™s + = +Ãxt_chunk_by‹s + << 3; + +353 +avaž + = +Þdpd +-> +nb™s + - oldpd-> +nboff +; + +354 if( +avaž + >ð +Ãxt_chunk_b™s +) { + +355 +pd +-> +nb™s + = +Þdpd +-> +nboff + + +Ãxt_chunk_b™s +; + +356 +¬g +-> +unþaimed + = 0; + +357 + `ASN_DEBUG +("!+Parent frame %ld bits,‡lloting %ld [%ld..%ld] (%ld)", + +358 () +Ãxt_chunk_b™s +, () +Þdpd +-> +moved +, + +359 () +Þdpd +-> +nboff +, ()Þdpd-> +nb™s +, + +360 ()( +Þdpd +-> +nb™s + - oldpd-> +nboff +)); + +362 +pd +-> +nb™s + = +Þdpd +->nbits; + +363 +¬g +-> +unþaimed + = +Ãxt_chunk_b™s + - +avaž +; + +364 + `ASN_DEBUG +("!-Parent frame %ld,„equire %ld, will claim %ld", + +365 () +avaž +, () +Ãxt_chunk_b™s +, + +366 () +¬g +-> +unþaimed +); + +368 +pd +-> +bufãr + = +Þdpd +->buffer; + +369 +pd +-> +nboff + = +Þdpd +->nboff; + +370 + `ASN_DEBUG +("Refilled…d%s old%s", + +371 + `a¢_b™_d©a_¡ršg +( +pd +),‡¢_b™_d©a_¡ršg( +Þdpd +)); + +373 + } +} + +376 + $³r_sk_b™s +( +a¢_³r_d©a_t + * +pd +,  +sk_nb™s +) { + +377  +hasNÚZ”oB™s + = 0; + +378  +sk_nb™s + > 0) { + +379  +sk +; + +382 if( +sk_nb™s + < 24) + +383 +sk + = +sk_nb™s +; + +385 +sk + = 24; + +386 +sk_nb™s + -ð +sk +; + +388  + `³r_g‘_ãw_b™s +( +pd +, +sk +)) { + +391 : +hasNÚZ”oB™s + = 1; ; + +394  +hasNÚZ”oB™s +; + +395 + } +} + +397  +a¢_dec_rv®_t + + +398 + $­”_ݒ_ty³_g‘_sim¶e +(cÚ¡ +a¢_codec_ùx_t + * +ùx +, + +399 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +400 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, ** +¥Œ +, +a¢_³r_d©a_t + * +pd +) { + +401 +a¢_dec_rv®_t + +rv +; + +402 +ssize_t + +chunk_by‹s +; + +403  +»³© +; + +404 +ušt8_t + * +buf + = 0; + +405 +size_t + +bufL’ + = 0; + +406 +size_t + +bufSize + = 0; + +407 +a¢_³r_d©a_t + +¥d +; + +408 +size_t + +·ddšg +; + +410 + `ASN__STACK_OVERFLOW_CHECK +( +ùx +); + +412 + `ASN_DEBUG +("G‘tšg o³Àty³ %s...", +td +-> +Çme +); + +415 +chunk_by‹s + = + `­”_g‘_Ëngth +( +pd +, -1, -1, & +»³© +); + +416 if( +chunk_by‹s + < 0) { + +417 + `FREEMEM +( +buf +); + +418 +ASN__DECODE_STARVED +; + +420 if( +bufL’ + + +chunk_by‹s + > +bufSize +) { + +421 * +±r +; + +422 +bufSize + = +chunk_by‹s + + (bufSize << 2); + +423 +±r + = + `REALLOC +( +buf +, +bufSize +); + +424 if(! +±r +) { + +425 + `FREEMEM +( +buf +); + +426 +ASN__DECODE_FAILED +; + +428 +buf + = +±r +; + +430 if( + `³r_g‘_mªy_b™s +( +pd +, +buf + + +bufL’ +, 0, +chunk_by‹s + << 3)) { + +431 + `FREEMEM +( +buf +); + +432 +ASN__DECODE_STARVED +; + +434 +bufL’ + +ð +chunk_by‹s +; + +435 }  +»³© +); + +437 + `ASN_DEBUG +("G‘tšg o³Àty³ % ’coded iÀ%ld by‹s", +td +-> +Çme +, + +438 () +bufL’ +); + +440 + `mem£t +(& +¥d +, 0, (spd)); + +441 +¥d +. +bufãr + = +buf +; + +442 +¥d +. +nb™s + = +bufL’ + << 3; + +444 + `ASN_DEBUG_INDENT_ADD +(+4); + +445 +rv + = +td +-> +Ý +-> + `­”_decod” +( +ùx +,d, +cÚ¡¿šts +, +¥Œ +, & +¥d +); + +446 + `ASN_DEBUG_INDENT_ADD +(-4); + +448 if( +rv +. +code + =ð +RC_OK +) { + +450 +·ddšg + = +¥d +. +nb™s + - spd. +nboff +; + +451 ià((( +·ddšg + > 0 &&…adding < 8) || + +453 ( +¥d +. +nboff + =ð0 && spd. +nb™s + =ð8 && spd. +bufãr + =ð +buf +)) && + +454 + `³r_g‘_ãw_b™s +(& +¥d +, +·ddšg +) == 0) { + +456 + `FREEMEM +( +buf +); + +457  +rv +; + +459 + `FREEMEM +( +buf +); + +460 if( +·ddšg + >= 8) { + +461 + `ASN_DEBUG +("ToØÏrg·ddšg %d iÀݒy³", () +·ddšg +); + +462 +ASN__DECODE_FAILED +; + +464 + `ASN_DEBUG +("No…adding"); + +467 + `FREEMEM +( +buf +); + +469 +rv +. +code + = +RC_FAIL +; + +472  +rv +; + +473 + } +} + +476 + $­”_ݒ_ty³_put +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +477 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +478 cÚ¡ * +¥Œ +, +a¢_³r_ou_t + * +po +) { + +479 * +buf +; + +480 * +b±r +; + +481 +ssize_t + +size +; + +482 +size_t + +toGo +; + +484 + `ASN_DEBUG +("O³Àty³…uˆ% ...", +td +-> +Çme +); + +486 +size + = + `­”_’code_to_Ãw_bufãr +( +td +, +cÚ¡¿šts +, +¥Œ +, & +buf +); + +487 if( +size + <= 0)  -1; + +489  +b±r + = +buf +, +toGo + = +size +;oGo;) { + +490 +ssize_t + +maySave + = + `­”_put_Ëngth +( +po +, -1, +toGo +); + +491 if( +maySave + < 0) ; + +492 if( + `³r_put_mªy_b™s +( +po +, +b±r +, +maySave + * 8)) ; + +493 +b±r + = (*)b±¸+ +maySave +; + +494 +toGo + -ð +maySave +; + +497 + `FREEMEM +( +buf +); + +498 if( +toGo +)  -1; + +500 + `ASN_DEBUG +("Openype…ut %s of†ength %ld + overhead (1byte?)", + +501 +td +-> +Çme +, +size +); + +504 + } +} + +506 +a¢_dec_rv®_t + + +507 + $­”_ݒ_ty³_g‘ +(cÚ¡ +a¢_codec_ùx_t + * +ùx +, + +508 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, + +509 cÚ¡ +a¢_³r_cÚ¡¿šts_t + * +cÚ¡¿šts +, + +510 ** +¥Œ +, +a¢_³r_d©a_t + * +pd +) { + +512  + `­”_ݒ_ty³_g‘_sim¶e +( +ùx +, +td +, +cÚ¡¿šts +, +¥Œ +, +pd +); + +513 + } +} + +516 + $­”_ݒ_ty³_sk +(cÚ¡ +a¢_codec_ùx_t + * +ùx +, +a¢_³r_d©a_t + * +pd +) { + +517 +a¢_TYPE_desütÜ_t + +s_td +; + +518 +a¢_dec_rv®_t + +rv +; + +519 +a¢_TYPE_ݔ©iÚ_t + +Ý_t +; + +521 + `mem£t +(& +Ý_t +, 0, (op_t)); + +522 +s_td +. +Çme + = ""; + +523 +s_td +. +Ý + = & +Ý_t +; + +524 +s_td +. +Ý +-> +­”_decod” + = +u³r_sÙ_suck +; + +526 +rv + = + `­”_ݒ_ty³_g‘ +( +ùx +, & +s_td +, 0, 0, +pd +); + +527 if( +rv +. +code + !ð +RC_OK +) + +531 + } +} + + @per_support.c + +5  + ~ + +6  + ~ + +7  + ~<³r_suµÜt.h +> + +13 +ssize_t + + +14 + $u³r_g‘_Ëngth +( +a¢_³r_d©a_t + * +pd +,  +eb™s +, +size_t + +low”_bound +, + +15 * +»³© +) { + +16 +ssize_t + +v®ue +; + +18 * +»³© + = 0; + +21 if( +eb™s + >= 0 &&ƒbits <= 16) { + +22 +v®ue + = + `³r_g‘_ãw_b™s +( +pd +, +eb™s +); + +23 if( +v®ue + >ð0èv®u+ð +low”_bound +; + +24  +v®ue +; + +27 +v®ue + = + `³r_g‘_ãw_b™s +( +pd +, 8); + +28 if(( +v®ue + & 0x80) == 0) { + +29  ( +v®ue + & 0x7F); + +30 } if(( +v®ue + & 0x40) == 0) { + +32 +v®ue + = ((v®u& 0x3fè<< 8è| + `³r_g‘_ãw_b™s +( +pd +, 8); + +33  +v®ue +; + +34 } if( +v®ue + < 0) { + +35 + `ASN_DEBUG +("END of stream„eached for PER"); + +38 +v®ue + &= 0x3f; + +39 if( +v®ue + < 1 || value > 4) { + +42 * +»³© + = 1; + +43  (16384 * +v®ue +); + +44 + } +} + +51 +ssize_t + + +52 + $u³r_g‘_n¦’gth +( +a¢_³r_d©a_t + * +pd +) { + +53 +ssize_t + +Ëngth +; + +55 + `ASN_DEBUG +("Getting‚ormally small†ength"); + +57 if( + `³r_g‘_ãw_b™s +( +pd +, 1) == 0) { + +58 +Ëngth + = + `³r_g‘_ãw_b™s +( +pd +, 6) + 1; + +59 if( +Ëngth + <= 0)  -1; + +60 + `ASN_DEBUG +("l=%d", () +Ëngth +); + +61  +Ëngth +; + +63  +»³© +; + +64 +Ëngth + = + `u³r_g‘_Ëngth +( +pd +, -1, 0, & +»³© +); + +65 if( +Ëngth + >ð0 && ! +»³© +) †ength; + +68 + } +} + +74 +ssize_t + + +75 + $u³r_g‘_n¢nwn +( +a¢_³r_d©a_t + * +pd +) { + +76 +ssize_t + +v®ue +; + +78 +v®ue + = + `³r_g‘_ãw_b™s +( +pd +, 7); + +79 if( +v®ue + & 64) { + +80 +v®ue + &= 63; + +81 +v®ue + <<= 2; + +82 +v®ue + |ð + `³r_g‘_ãw_b™s +( +pd +, 2); + +83 if( +v®ue + & 128) + +85 if( +v®ue + == 0) + +87 if( +v®ue + >= 3) + +89 +v®ue + = + `³r_g‘_ãw_b™s +( +pd +, 8 * value); + +90  +v®ue +; + +93  +v®ue +; + +94 + } +} + +101 + $u³r_put_n¢nwn +( +a¢_³r_ou_t + * +po +,  +n +) { + +102  +by‹s +; + +104 if( +n + <= 63) { + +105 if( +n + < 0)  -1; + +106  + `³r_put_ãw_b™s +( +po +, +n +, 7); + +108 if( +n + < 256) + +109 +by‹s + = 1; + +110 if( +n + < 65536) + +111 +by‹s + = 2; + +112 if( +n + < 256 * 65536) + +113 +by‹s + = 3; + +116 if( + `³r_put_ãw_b™s +( +po +, +by‹s +, 8)) + +119  + `³r_put_ãw_b™s +( +po +, +n +, 8 * +by‹s +); + +120 + } +} + +124  + $u³r_g‘_cÚ¡¿šed_whÞe_numb” +( +a¢_³r_d©a_t + * +pd +, * +out_v®ue +,  +nb™s +) { + +125  +lh®f +; + +126  +h®f +; + +128 if( +nb™s + <= 31) { + +129 +h®f + = + `³r_g‘_ãw_b™s +( +pd +, +nb™s +); + +130 if( +h®f + < 0)  -1; + +131 * +out_v®ue + = +h®f +; + +135 if(( +size_t +) +nb™s + > 8 * (* +out_v®ue +)) + +138 +h®f + = + `³r_g‘_ãw_b™s +( +pd +, 31); + +139 if( +h®f + < 0)  -1; + +141 if( + `u³r_g‘_cÚ¡¿šed_whÞe_numb” +( +pd +, & +lh®f +, +nb™s + - 31)) + +144 * +out_v®ue + = (() +h®f + << ( +nb™s + - 31)è| +lh®f +; + +146 + } +} + +151 + $u³r_put_cÚ¡¿šed_whÞe_numb”_u +( +a¢_³r_ou_t + * +po +,  +v +, + +152  +nb™s +) { + +153 if( +nb™s + <= 31) { + +154  + `³r_put_ãw_b™s +( +po +, +v +, +nb™s +); + +157 if( + `u³r_put_cÚ¡¿šed_whÞe_numb”_u +( +po +, +v + >> 31, +nb™s + - 31)) + +159  + `³r_put_ãw_b™s +( +po +, +v +, 31); + +161 + } +} + +167 +ssize_t + + +168 + $u³r_put_Ëngth +( +a¢_³r_ou_t + * +po +, +size_t + +Ëngth +, * +Ãed_eom +) { + +169  +dummy + = 0; + +170 if(! +Ãed_eom +èÃed_eom = & +dummy +; + +172 if( +Ëngth + <= 127) { + +173 * +Ãed_eom + = 0; + +174  + `³r_put_ãw_b™s +( +po +, +Ëngth +, 8) + +175 ? -1 : ( +ssize_t +) +Ëngth +; + +176 } if( +Ëngth + < 16384) { + +177 * +Ãed_eom + = 0; + +178  + `³r_put_ãw_b™s +( +po +, +Ëngth +|0x8000, 16) + +179 ? -1 : ( +ssize_t +) +Ëngth +; + +182 * +Ãed_eom + = 0 =ð( +Ëngth + & 16383); + +183 +Ëngth + >>= 14; + +184 if( +Ëngth + > 4) { + +185 * +Ãed_eom + = 0; + +186 +Ëngth + = 4; + +189  + `³r_put_ãw_b™s +( +po +, 0xC0 | +Ëngth +, 8) + +190 ? -1 : ( +ssize_t +)( +Ëngth + << 14); + +192 + } +} + +201 + $u³r_put_n¦’gth +( +a¢_³r_ou_t + * +po +, +size_t + +Ëngth +) { + +202 if( +Ëngth + <= 64) { + +204 if( +Ëngth + == 0)  -1; + +205  + `³r_put_ãw_b™s +( +po +, +Ëngth + - 1, 7) ? -1 : 0; + +207  +Ãed_eom + = 0; + +208 if( + `u³r_put_Ëngth +( +po +, +Ëngth +, & +Ãed_eom +è!ð( +ssize_t +)length + +209 || +Ãed_eom +) { + +216 + } +} + +219 + $³r__lÚg_¿nge +( +lb +,  +ub +, * +¿nge_r +) { + +220  +bounds_¿nge +; + +221 if(( +ub + < 0è=ð( +lb + < 0)) { + +222 +bounds_¿nge + = +ub + - +lb +; + +223 } if( +lb + < 0) { + +224 + `as£¹ +( +ub + >= 0); + +225 +bounds_¿nge + = 1 + (() +ub + + ()-( +lb + + 1)); + +227 + `as£¹ +(!"Unreachable"); + +230 * +¿nge_r + = +bounds_¿nge +; + +232 + } +} + +235 + $³r_lÚg_¿nge_»ba£ +( +v +,  +lb +,  +ub +, * +ouut +) { + +236  +¿nge +; + +238 + `as£¹ +( +lb + <ð +ub +); + +240 if( +v + < +lb + || v > +ub + || + `³r__lÚg_¿nge +Öb, ub, & +¿nge +) < 0) { + +252 if(( +v + < 0è=ð( +lb + < 0)) { + +253 * +ouut + = +v +- +lb +; + +255 } if( +v + < 0) { + +256  +»ba£d + = 1 + ()-( +v ++1è+ () +lb +; + +257 + `as£¹ +( +»ba£d + <ð +¿nge +); + +258 * +ouut + = +»ba£d +; + +260 } if( +lb + < 0) { + +261  +»ba£d + = 1 + ()-( +lb ++1è+ () +v +; + +262 + `as£¹ +( +»ba£d + <ð +¿nge +); + +263 * +ouut + = +»ba£d +; + +266 + `as£¹ +(!"Unreachable"); + +269 + } +} + +272 + $³r_lÚg_¿nge_uÄeba£ +( +šp +,  +lb +,  +ub +, * +ou +) { + +273  +¿nge +; + +275 if( + `³r__lÚg_¿nge +( +lb +, +ub +, & +¿nge +) != 0) { + +279 if( +šp + > +¿nge +) { + +288 if( +šp + <ð +LONG_MAX +) { + +289 * +ou + = () +šp + + +lb +; + +291 * +ou + = ( +lb + + +LONG_MAX + + 1è+ ()(( +šp + - LONG_MAX) - 1); + +295 + } +} + +297 +št32_t + + +298 + $­”_g‘_®ign +( +a¢_³r_d©a_t + * +pd +) { + +300 if( +pd +-> +nboff + & 0x7) { + +301 + `ASN_DEBUG +("Alignšg %ld b™s", 8 - (() +pd +-> +nboff + & 0x7)); + +302  + `³r_g‘_ãw_b™s +( +pd +, 8 - (pd-> +nboff + & 0x7)); + +305 + } +} + +307 +ssize_t + + +308 + $­”_g‘_Ëngth +( +a¢_³r_d©a_t + * +pd +,  +¿nge +,  +eb™s +, * +»³© +) { + +309 +ssize_t + +v®ue +; + +311 * +»³© + = 0; + +314 ià( +eb™s + >= 0) { + +315 ià( +¿nge + <= 65536 &&„ange >= 0) + +316  + `­”_g‘_n¢nwn +( +pd +, +¿nge +); + +319 ià( + `­”_g‘_®ign +( +pd +) < 0) + +322 if( +eb™s + >ð0è + `³r_g‘_ãw_b™s +( +pd +,ƒbits); + +324 +v®ue + = + `³r_g‘_ãw_b™s +( +pd +, 8); + +325 if( +v®ue + < 0)  -1; + +326 if(( +v®ue + & 128) == 0) + +327  ( +v®ue + & 0x7F); + +328 if(( +v®ue + & 64) == 0) { + +329 +v®ue + = ((v®u& 63è<< 8è| + `³r_g‘_ãw_b™s +( +pd +, 8); + +330 if( +v®ue + < 0)  -1; + +331  +v®ue +; + +333 +v®ue + &= 63; + +334 if( +v®ue + < 1 || value > 4) + +336 * +»³© + = 1; + +337  (16384 * +v®ue +); + +338 + } +} + +340 +ssize_t + + +341 + $­”_g‘_n¦’gth +( +a¢_³r_d©a_t + * +pd +) { + +342 +ssize_t + +Ëngth +; + +344 + `ASN_DEBUG +("Getting‚ormally small†ength"); + +346 if( + `³r_g‘_ãw_b™s +( +pd +, 1) == 0) { + +347 +Ëngth + = + `³r_g‘_ãw_b™s +( +pd +, 6) + 1; + +348 if( +Ëngth + <= 0)  -1; + +349 + `ASN_DEBUG +("l=%ld", +Ëngth +); + +350  +Ëngth +; + +352  +»³© +; + +353 +Ëngth + = + `­”_g‘_Ëngth +( +pd +, -1, -1, & +»³© +); + +354 if( +Ëngth + >ð0 && ! +»³© +) †ength; + +357 + } +} + +359 +ssize_t + + +360 + $­”_g‘_n¢nwn +( +a¢_³r_d©a_t + * +pd +,  +¿nge +) { + +361 +ssize_t + +v®ue +; + +362  +by‹s + = 0; + +364 + `ASN_DEBUG +("g‘tšg‚¢nwÀw™h„ªg%d", +¿nge +); + +366 if( +¿nge + <= 255) { + +367  +i +; + +369 ià( +¿nge + < 0)  -1; + +371  +i + = 1; i <= 8; i++) { + +372  +uµ” + = 1 << +i +; + +373 ià( +uµ” + >ð +¿nge +) + +376 +v®ue + = + `³r_g‘_ãw_b™s +( +pd +, +i +); + +377  +v®ue +; + +378 } ià( +¿nge + == 256){ + +380 +by‹s + = 1; + +381 } ià( +¿nge + <= 65536) { + +383 +by‹s + = 2; + +387 ià( + `­”_g‘_®ign +( +pd +) < 0) + +389 +v®ue + = + `³r_g‘_ãw_b™s +( +pd +, 8 * +by‹s +); + +390  +v®ue +; + +391 + } +} + +393  + $­”_put_®ign +( +a¢_³r_ou_t + * +po +) { + +395 if( +po +-> +nboff + & 0x7) { + +396 + `ASN_DEBUG +("Alignšg %ld b™s", 8 - (() +po +-> +nboff + & 0x7)); + +397 if( + `³r_put_ãw_b™s +( +po +, 0x00, (8 - (po-> +nboff + & 0x7)))) + +401 + } +} + +403 +ssize_t + + +404 + $­”_put_Ëngth +( +a¢_³r_ou_t + * +po +,  +¿nge +, +size_t + +Ëngth +) { + +406 + `ASN_DEBUG +("APER…uˆËngth %zu w™h„ªg%d", +Ëngth +, +¿nge +); + +409 ià( +¿nge + <= 65536 &&„ange >= 0) + +410  + `­”_put_n¢nwn +( +po +, +¿nge +, +Ëngth +); + +412 ià( + `­”_put_®ign +( +po +) < 0) + +415 if( +Ëngth + <= 127) { + +416  + `³r_put_ãw_b™s +( +po +, +Ëngth +, 8) + +417 ? -1 : ( +ssize_t +) +Ëngth +; + +419 if( +Ëngth + < 16384) + +420  + `³r_put_ãw_b™s +( +po +, +Ëngth +|0x8000, 16) + +421 ? -1 : ( +ssize_t +) +Ëngth +; + +423 +Ëngth + >>= 14; + +424 if( +Ëngth + > 4)†ength = 4; + +426  + `³r_put_ãw_b™s +( +po +, 0xC0 | +Ëngth +, 8) + +427 ? -1 : ( +ssize_t +)( +Ëngth + << 14); + +428 + } +} + +432 + $­”_put_n¦’gth +( +a¢_³r_ou_t + * +po +, +size_t + +Ëngth +) { + +434 if( +Ëngth + <= 64) { + +436 if( +Ëngth + == 0)  -1; + +437  + `³r_put_ãw_b™s +( +po +, +Ëngth +-1, 7) ? -1 : 0; + +439 if( + `­”_put_Ëngth +( +po +, -1, +Ëngth +è!ð( +ssize_t +)length) { + +446 + } +} + +449 + $­”_put_n¢nwn +( +a¢_³r_ou_t + * +po +,  +¿nge +,  +numb” +) { + +450  +by‹s +; + +452 + `ASN_DEBUG +("­”…uˆn¢nwÀ%d w™h„ªg%d", +numb” +, +¿nge +); + +454 if( +¿nge + < 0) { + +455  +i +; + +456  +i + = 1; ; i++) { + +457  +b™s + = 1 << (8 * +i +); + +458 ià( +numb” + <ð +b™s +) + +461 +by‹s + = +i +; + +462 + `as£¹ +( +i + <= 4); + +464 if( +¿nge + <= 255) { + +465  +i +; + +466  +i + = 1; i <= 8; i++) { + +467  +b™s + = 1 << +i +; + +468 ià( +¿nge + <ð +b™s +) + +471  + `³r_put_ãw_b™s +( +po +, +numb” +, +i +); + +472 } if( +¿nge + == 256) { + +473 +by‹s + = 1; + +474 } if( +¿nge + <= 65536) { + +475 +by‹s + = 2; + +477  +i +; + +478  +i + = 1; ; i++) { + +479  +b™s + = 1 << (8 * +i +); + +480 ià( +¿nge + <ð +b™s +) + +483 + `as£¹ +( +i + <= 4); + +484 +by‹s + = +i +; + +486 if( + `­”_put_®ign +( +po +) < 0) + +491  + `³r_put_ãw_b™s +( +po +, +numb” +, 8 * +by‹s +); + +492 + } +} + + @xer_decoder.c + +5  + ~ + +6  + ~ + +7  + ~ + +13 +a¢_dec_rv®_t + + +14 + $x”_decode +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +15 cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, ** +¡ruù_±r +, + +16 cÚ¡ * +bufãr +, +size_t + +size +) { + +17 +a¢_codec_ùx_t + +s_codec_ùx +; + +23 if( +Ýt_codec_ùx +) { + +24 if( +Ýt_codec_ùx +-> +max_¡ack_size +) { + +25 +s_codec_ùx + = * +Ýt_codec_ùx +; + +26 +Ýt_codec_ùx + = & +s_codec_ùx +; + +30 + `mem£t +(& +s_codec_ùx +, 0, (s_codec_ctx)); + +31 +s_codec_ùx +. +max_¡ack_size + = +ASN__DEFAULT_STACK_MAX +; + +32 +Ýt_codec_ùx + = & +s_codec_ùx +; + +38  +td +-> +Ý +-> + `x”_decod” +( +Ýt_codec_ùx +,d, +¡ruù_±r +, 0, +bufãr +, +size +); + +39 + } +} + +43  + sx”__cb_¬g + { + +44 +pxml_chunk_ty³_e + + mchunk_ty³ +; + +45 +size_t + + mchunk_size +; + +46 cÚ¡ * + mchunk_buf +; + +47  + mÿÎback_nÙ_švoked +; + +51 + $x”__tok’_cb +( +pxml_chunk_ty³_e + +ty³ +, cÚ¡ * +_chunk_d©a +, +size_t + +_chunk_size +, * +key +) { + +52  +x”__cb_¬g + * +¬g + = (x”__cb_¬g *) +key +; + +53 +¬g +-> +chunk_ty³ + = +ty³ +; + +54 +¬g +-> +chunk_size + = +_chunk_size +; + +55 +¬g +-> +chunk_buf + = +_chunk_d©a +; + +56 +¬g +-> +ÿÎback_nÙ_švoked + = 0; + +58 + } +} + +63 +ssize_t + + +64 + $x”_Ãxt_tok’ +(* +¡©eCڋxt +, cÚ¡ * +bufãr +, +size_t + +size +, +px”_chunk_ty³_e + * +ch_ty³ +) { + +65  +x”__cb_¬g + +¬g +; + +66  +Ãw_¡©eCڋxt + = * +¡©eCڋxt +; + +67 +ssize_t + +»t +; + +69 +¬g +. +ÿÎback_nÙ_švoked + = 1; + +70 +»t + = + `pxml_·r£ +(& +Ãw_¡©eCڋxt +, +bufãr +, +size +, +x”__tok’_cb +, & +¬g +); + +71 if( +»t + < 0)  -1; + +72 if( +¬g +. +ÿÎback_nÙ_švoked +) { + +73 + `as£¹ +( +»t + == 0); + +74 * +ch_ty³ + = +PXER_WMORE +; + +77 + `as£¹ +( +¬g +. +chunk_size +); + +78 + `as£¹ +( +¬g +. +chunk_buf + =ð +bufãr +); + +84  +¬g +. +chunk_ty³ +) { + +85  +PXML_TEXT +: + +86 * +ch_ty³ + = +PXER_TEXT +; + +88  +PXML_TAG +: + +89 * +ch_ty³ + = +PXER_WMORE +; + +91  +PXML_TAG_END +: + +92 * +ch_ty³ + = +PXER_TAG +; + +94  +PXML_COMMENT +: + +95  +PXML_COMMENT_END +: + +96 * +ch_ty³ + = +PXER_COMMENT +; + +100 * +¡©eCڋxt + = +Ãw_¡©eCڋxt +; + +101  +¬g +. +chunk_size +; + +102 + } +} + +104  + #CSLASH + 0x2à + + ) + +105  + #LANGLE + 0x3ø + + ) + +106  + #RANGLE + 0x3 + + ) + +108 +x”_check_g_e + + +109 + $x”_check_g +(cÚ¡ * +buf_±r +,  +size +, cÚ¡ * +Ãed_g +) { + +110 cÚ¡ * +buf + = (cÚ¡ *) +buf_±r +; + +111 cÚ¡ * +’d +; + +112 +x”_check_g_e + +ù + = +XCT_OPENING +; + +114 if( +size + < 2 || +buf +[0] !ð +LANGLE + || buf[size-1] !ð +RANGLE +) { + +115 if( +size + >= 2) + +116 + `ASN_DEBUG +("Broken XMLag: \"%c...%c\"", + +117 +buf +[0], buf[ +size + - 1]); + +118  +XCT_BROKEN +; + +124 if( +buf +[1] =ð +CSLASH +) { + +125 +buf + += 2; + +126 +size + -= 3; + +127 +ù + = +XCT_CLOSING +; + +128 if( +size + > 0 && +buf +[size-1] =ð +CSLASH +) + +129  +XCT_BROKEN +; + +131 +buf +++; + +132 +size + -= 2; + +133 if( +size + > 0 && +buf +[size-1] =ð +CSLASH +) { + +134 +ù + = +XCT_BOTH +; + +135 +size +--; + +140 if(! +Ãed_g + || !*need_tag) + +141  ( +x”_check_g_e +)( +XCT__UNK__MASK + | +ù +); + +146  +’d + = +buf + + +size +; buà<ƒnd; buf++, +Ãed_g +++) { + +147  +b + = * +buf +, +n + = * +Ãed_g +; + +148 if( +b + !ð +n +) { + +149 if( +n + == 0) { + +150  +b +) { + +154  +ù +; + +157  ( +x”_check_g_e +)( +XCT__UNK__MASK + | +ù +); + +159 if( +b + == 0) + +160  +XCT_BROKEN +; + +162 if(* +Ãed_g +) + +163  ( +x”_check_g_e +)( +XCT__UNK__MASK + | +ù +); + +165  +ù +; + +166 + } +} + +169 #undeà +ADVANCE + + +170  + #ADVANCE +( +num_by‹s +) do { \ + +171 +size_t + +num + = ( +num_by‹s +); \ + +172 +buf_±r + = ((cÚ¡ *)buf_±rè+ +num +; \ + +173 +size + -ð +num +; \ + +174 +cÚsumed_my£lf + +ð +num +; \ + +175 } 0) + + ) + +177 #undeà +RETURN + + +178  + #RETURN +( +_code +) do { \ + +179 +rv® +. +code + = +_code +; \ + +180 +rv® +. +cÚsumed + = +cÚsumed_my£lf +; \ + +181 if( +rv® +. +code + !ð +RC_OK +) \ + +182 + `ASN_DEBUG +("Fažed w™h %d", +rv® +. +code +); \ + +183  +rv® +; \ + +184 } 0) + + ) + +186  + #XER_GOT_BODY +( +chunk_buf +, +chunk_size +, +size +) do { \ + +187 +ssize_t + +cÚv”‹d_size + = +body_»ûiv” + \ + +188 ( +¡ruù_key +, +chunk_buf +, +chunk_size +, \ + +189 ( +size_t +) +chunk_size + < +size +); \ + +190 if( +cÚv”‹d_size + =ð-1è + `RETURN +( +RC_FAIL +); \ + +191 if( +cÚv”‹d_size + == 0 \ + +192 && +size + =ð( +size_t +) +chunk_size +) \ + +193 + `RETURN +( +RC_WMORE +); \ + +194 +chunk_size + = +cÚv”‹d_size +; \ + +195 } 0) + + ) + +196  + #XER_GOT_EMPTY +() do { \ + +197 if( + `body_»ûiv” +( +¡ruù_key +, 0, 0, +size + > 0) == -1) \ + +198 + `RETURN +( +RC_FAIL +); \ + +199 } 0) + + ) + +204 +a¢_dec_rv®_t + + +205 +x”_decode_g’”® +(cÚ¡ +a¢_codec_ùx_t + * +Ýt_codec_ùx +, + +206 +a¢_¡ruù_ùx_t + * +ùx +, + +207 * +¡ruù_key +, + +208 cÚ¡ * +xml_g +, + +209 cÚ¡ * +buf_±r +, +size_t + +size +, + +210 (* +Ýt_uÃx³ùed_g_decod” +) + +211 (* +¡ruù_key +, cÚ¡ * +chunk_buf +, +size_t + +chunk_size +), + +212 + $ssize_t + (* +body_»ûiv” +) + +213 (* +¡ruù_key +, cÚ¡ * +chunk_buf +, +size_t + +chunk_size +, + +214  +have_mÜe +) + +217 +a¢_dec_rv®_t + +rv® +; + +218 +ssize_t + +cÚsumed_my£lf + = 0; + +220 () +Ýt_codec_ùx +; + +227 if( +ùx +-> +pha£ + > 1è + `RETURN +( +RC_FAIL +); + +229 +px”_chunk_ty³_e + +ch_ty³ +; + +230 +ssize_t + +ch_size +; + +231 +x”_check_g_e + +tcv +; + +236 +ch_size + = + `x”_Ãxt_tok’ +(& +ùx +-> +cڋxt +, +buf_±r +, +size +, + +237 & +ch_ty³ +); + +238 if( +ch_size + == -1) { + +239 + `RETURN +( +RC_FAIL +); + +241  +ch_ty³ +) { + +242  +PXER_WMORE +: + +243 + `RETURN +( +RC_WMORE +); + +244  +PXER_COMMENT +: + +245 + `ADVANCE +( +ch_size +); + +247  +PXER_TEXT +: + +248 if( +ùx +-> +pha£ + == 0) { + +256 + `XER_GOT_BODY +( +buf_±r +, +ch_size +, +size +); + +258 + `ADVANCE +( +ch_size +); + +260  +PXER_TAG +: + +265 + `as£¹ +( +ch_ty³ + =ð +PXER_TAG + && +size +); + +267 +tcv + = + `x”_check_g +( +buf_±r +, +ch_size +, +xml_g +); + +275  +tcv +) { + +276  +XCT_BOTH +: + +277 if( +ùx +-> +pha£ +) ; + +279 + `XER_GOT_EMPTY +(); + +280 + `ADVANCE +( +ch_size +); + +281 +ùx +-> +pha£ + = 2; + +282 + `RETURN +( +RC_OK +); + +283  +XCT_OPENING +: + +284 if( +ùx +-> +pha£ +) ; + +285 + `ADVANCE +( +ch_size +); + +286 +ùx +-> +pha£ + = 1; + +288  +XCT_CLOSING +: + +289 if(! +ùx +-> +pha£ +) ; + +290 + `ADVANCE +( +ch_size +); + +291 +ùx +-> +pha£ + = 2; + +292 + `RETURN +( +RC_OK +); + +293  +XCT_UNKNOWN_BO +: + +297 if( +Ýt_uÃx³ùed_g_decod” + + +298 && + `Ýt_uÃx³ùed_g_decod” +( +¡ruù_key +, + +299 +buf_±r +, +ch_size +) >= 0) { + +301 + `ADVANCE +( +ch_size +); + +302 if(! +ùx +-> +pha£ +) { + +305 +ùx +-> +pha£ + = 2; + +306 + `RETURN +( +RC_OK +); + +315 + `ASN_DEBUG +("UÃx³ùed XMLag (ex³ùed \"%s\")", +xml_g +); + +319 + `RETURN +( +RC_FAIL +); + +320 + } +} + +323 +size_t + + +324 + $x”_wh™e¥aû_¥ª +(cÚ¡ * +chunk_buf +, +size_t + +chunk_size +) { + +325 cÚ¡ * +p + = (cÚ¡ *) +chunk_buf +; + +326 cÚ¡ * +³nd + = +p + + +chunk_size +; + +328 ; +p + < +³nd +;…++) { + +329 * +p +) { + +343  ( +p + - (cÚ¡ *) +chunk_buf +); + +344 + } +} + +350 + $x”_sk_unknown +( +x”_check_g_e + +tcv +, +b”_Žv_Ën_t + * +d•th +) { + +351 + `as£¹ +(* +d•th + > 0); + +352  +tcv +) { + +353  +XCT_BOTH +: + +354  +XCT_UNKNOWN_BO +: + +357  +XCT_OPENING +: + +358  +XCT_UNKNOWN_OP +: + +359 ++(* +d•th +); + +361  +XCT_CLOSING +: + +362  +XCT_UNKNOWN_CL +: + +363 if(--(* +d•th +) == 0) + +364  ( +tcv + =ð +XCT_CLOSING +) ? 2 : 1; + +369 + } +} + + @xer_encoder.c + +5  + ~ + +6  + ~<¡dio.h +> + +7  + ~<”ºo.h +> + +12 +a¢_’c_rv®_t + + +13 + $x”_’code +(cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +, + +14 +x”_’cod”_æags_e + +x”_æags +, +a¢_­p_cÚsume_by‹s_f + * +cb +, + +15 * +­p_key +) { + +16 +a¢_’c_rv®_t + +” + = {0, 0, 0}; + +17 +a¢_’c_rv®_t + +tm³r +; + +18 cÚ¡ * +mÇme +; + +19 +size_t + +mËn +; + +20  +xÿn + = ( +x”_æags + & +XER_F_CANONICAL +) ? 1 : 2; + +22 if(! +td + || ! +¥Œ +è +cb_çžed +; + +24 +mÇme + = +td +-> +xml_g +; + +25 +mËn + = + `¡¾’ +( +mÇme +); + +27 + `ASN__CALLBACK3 +("<", 1, +mÇme +, +mËn +, ">", 1); + +29 +tm³r + = +td +-> +Ý +-> + `x”_’cod” +Ñd, +¥Œ +, 1, +x”_æags +, +cb +, +­p_key +); + +30 if( +tm³r +. +’coded + == -1) mper; + +31 +” +. +’coded + +ð +tm³r +.encoded; + +33 + `ASN__CALLBACK3 +("\n", +xÿn +); + +35 + `ASN__ENCODED_OK +( +” +); + +36 +cb_çžed +: + +37 +ASN__ENCODE_FAILED +; + +38 + } +} + +45 + $x”__´št2å +(cÚ¡ * +bufãr +, +size_t + +size +, * +­p_key +) { + +46 +FILE + * +¡»am + = (FILE *) +­p_key +; + +48 if( + `fwr™e +( +bufãr +, 1, +size +, +¡»am +) != size) + +52 + } +} + +55 + $x”_åršt +( +FILE + * +¡»am +, cÚ¡ +a¢_TYPE_desütÜ_t + * +td +, cÚ¡ * +¥Œ +) { + +56 +a¢_’c_rv®_t + +” + = {0,0,0}; + +58 if(! +¡»am +è¡»am = +¡dout +; + +59 if(! +td + || ! +¥Œ +) + +62 +” + = + `x”_’code +( +td +, +¥Œ +, +XER_F_BASIC +, +x”__´št2å +, +¡»am +); + +63 if( +” +. +’coded + == -1) + +66  + `fæush +( +¡»am +); + +67 + } +} + +69  + sx”_bufãr + { + +70 * + mbufãr +; + +71 +size_t + + mbufãr_size +; + +72 +size_t + + m®loÿ‹d_size +; + +76 + $x”__bufãr_­³nd +(cÚ¡ * +bufãr +, +size_t + +size +, * +­p_key +) { + +77  +x”_bufãr + * +xb + = +­p_key +; + +79  +xb +-> +bufãr_size + + +size + + 1 > xb-> +®loÿ‹d_size +) { + +80 +size_t + +Ãw_size + = 2 * ( +xb +-> +®loÿ‹d_size + ? xb->allocated_size : 64); + +81 * +Ãw_buf + = + `MALLOC +( +Ãw_size +); + +82 if(! +Ãw_buf +)  -1; + +83 ià( +xb +-> +bufãr +) { + +84 + `memýy +( +Ãw_buf +, +xb +-> +bufãr +, xb-> +bufãr_size +); + +86 + `FREEMEM +( +xb +-> +bufãr +); + +87 +xb +-> +bufãr + = +Ãw_buf +; + +88 +xb +-> +®loÿ‹d_size + = +Ãw_size +; + +91 + `memýy +( +xb +-> +bufãr + + xb-> +bufãr_size +, bufãr, +size +); + +92 +xb +-> +bufãr_size + +ð +size +; + +93 +xb +-> +bufãr +[xb-> +bufãr_size +] = '\0'; + +95 + } +} + +97 +x”_equiv®’û_e + + +98 + $x”_equiv®’t +(cÚ¡  +a¢_TYPE_desütÜ_s + * +td +, cÚ¡ * +¡ruù1 +, + +99 cÚ¡ * +¡ruù2 +, +FILE + * +Ýt_debug_¡»am +) { + +100  +x”_bufãr + +xb1 + = {0, 0, 0}; + +101  +x”_bufãr + +xb2 + = {0, 0, 0}; + +102 +a¢_’c_rv®_t + +e1 +, +e2 +; + +103 +a¢_dec_rv®_t + +rv® +; + +104 * +¥Œ + = +NULL +; + +106 if(! +td + || ! +¡ruù1 + || ! +¡ruù2 +) { + +107 if( +Ýt_debug_¡»am +) { + +108 if(! +td +è + `årštf +( +Ýt_debug_¡»am +, "Type descriptor missing\n"); + +109 if(! +¡ruù1 +è + `årštf +( +Ýt_debug_¡»am +, "Structure 1 missing\n"); + +110 if(! +¡ruù2 +è + `årštf +( +Ýt_debug_¡»am +, "Structure 2 missing\n"); + +112  +XEQ_FAILURE +; + +115 +e1 + = + `x”_’code +( +td +, +¡ruù1 +, +XER_F_BASIC +, +x”__bufãr_­³nd +, & +xb1 +); + +116 if( +e1 +. +’coded + == -1) { + +117 if( +Ýt_debug_¡»am +) { + +118 + `årštf +( +¡d”r +, "XER Encodšg oà% çžed\n", +td +-> +Çme +); + +120 + `FREEMEM +( +xb1 +. +bufãr +); + +121  +XEQ_ENCODE1_FAILED +; + +124 +e2 + = + `x”_’code +( +td +, +¡ruù2 +, +XER_F_BASIC +, +x”__bufãr_­³nd +, & +xb2 +); + +125 if( +e2 +. +’coded + == -1) { + +126 if( +Ýt_debug_¡»am +) { + +127 + `årštf +( +¡d”r +, "XER Encodšg oà% çžed\n", +td +-> +Çme +); + +129 + `FREEMEM +( +xb1 +. +bufãr +); + +130 + `FREEMEM +( +xb2 +. +bufãr +); + +131  +XEQ_ENCODE1_FAILED +; + +134 if( +xb1 +. +bufãr_size + !ð +xb2 +.buffer_size + +135 || + `memcmp +( +xb1 +. +bufãr +, +xb2 +.bufãr, xb1. +bufãr_size +) != 0) { + +136 if( +Ýt_debug_¡»am +) { + +137 + `årštf +( +Ýt_debug_¡»am +, + +140 +xb1 +. +bufãr +, +xb2 +.buffer); + +142 + `FREEMEM +( +xb1 +. +bufãr +); + +143 + `FREEMEM +( +xb2 +. +bufãr +); + +144  +XEQ_DIFFERENT +; + +146 if( +Ýt_debug_¡»am +) { + +147 + `årštf +( +Ýt_debug_¡»am +, + +149 "oàsiz%" +ASN_PRI_SIZE + ":\n%s", + +150 +xb1 +. +bufãr_size +, xb1. +bufãr +); + +154 +rv® + = + `x”_decode +( +NULL +, +td +, (**)& +¥Œ +, +xb1 +. +bufãr +, + +155 +xb1 +. +bufãr_size +); + +156  +rv® +. +code +) { + +157  +RC_OK +: + +159  +RC_WMORE +: + +160 if( +Ýt_debug_¡»am +) { + +161 + `årštf +( +Ýt_debug_¡»am +, + +164 +td +-> +Çme +, +xb1 +. +bufãr +); + +167  +RC_FAIL +: + +169 if( +Ýt_debug_¡»am +) { + +170 + `årštf +( +Ýt_debug_¡»am +, + +172 +td +-> +Çme +); + +174 + `ASN_STRUCT_FREE +(* +td +, +¥Œ +); + +175 + `FREEMEM +( +xb1 +. +bufãr +); + +176 + `FREEMEM +( +xb2 +. +bufãr +); + +177  +XEQ_DECODE_FAILED +; + +180 if( +rv® +. +cÚsumed + !ð +xb1 +. +bufãr_size + + +181 && (( +rv® +. +cÚsumed + > +xb1 +. +bufãr_size +) + +182 || + `x”_wh™e¥aû_¥ª +( +xb1 +. +bufãr + + +rv® +. +cÚsumed +, + +183 +xb1 +. +bufãr_size + - +rv® +. +cÚsumed +) + +184 !ð( +xb1 +. +bufãr_size + - +rv® +. +cÚsumed +))) { + +185 if( +Ýt_debug_¡»am +) { + +186 + `årštf +( +Ýt_debug_¡»am +, + +187 "Round-Œ decodoà% »quœed†es by‹ (%" +ASN_PRI_SIZE + ")han " + +188 "’coded (%" +ASN_PRI_SIZE + ")\n", + +189 +td +-> +Çme +, +rv® +. +cÚsumed +, +xb1 +. +bufãr_size +); + +191 + `ASN_STRUCT_FREE +(* +td +, +¥Œ +); + +192 + `FREEMEM +( +xb1 +. +bufãr +); + +193 + `FREEMEM +( +xb2 +. +bufãr +); + +194  +XEQ_ROUND_TRIP_FAILED +; + +200 + `FREEMEM +( +xb2 +. +bufãr +); + +201 + `mem£t +(& +xb2 +, 0, (xb2)); + +203 +e2 + = + `x”_’code +( +td +, +¥Œ +, +XER_F_BASIC +, +x”__bufãr_­³nd +, & +xb2 +); + +204 if( +e2 +. +’coded + == -1) { + +205 if( +Ýt_debug_¡»am +) { + +206 + `årštf +( +¡d”r +, "XER Encoding of„ound-trip decode of %s failed\n", + +207 +td +-> +Çme +); + +209 + `ASN_STRUCT_FREE +(* +td +, +¥Œ +); + +210 + `FREEMEM +( +xb1 +. +bufãr +); + +211 + `FREEMEM +( +xb2 +. +bufãr +); + +212  +XEQ_ROUND_TRIP_FAILED +; + +215 + `ASN_STRUCT_FREE +(* +td +, +¥Œ +); + +216 +¥Œ + = 0; + +218 if( +xb1 +. +bufãr_size + !ð +xb2 +.buffer_size + +219 || + `memcmp +( +xb1 +. +bufãr +, +xb2 +.bufãr, xb1. +bufãr_size +) != 0) { + +220 if( +Ýt_debug_¡»am +) { + +221 + `årštf +( +Ýt_debug_¡»am +, + +226 +xb1 +. +bufãr +, +xb2 +.bufãr, +td +-> +Çme +); + +228 + `FREEMEM +( +xb1 +. +bufãr +); + +229 + `FREEMEM +( +xb2 +. +bufãr +); + +230  +XEQ_ROUND_TRIP_FAILED +; + +233 + `FREEMEM +( +xb1 +. +bufãr +); + +234 + `FREEMEM +( +xb2 +. +bufãr +); + +235  +XEQ_SUCCESS +; + +236 + } +} + + @xer_support.c + +7  + ~ + +8  + ~ + +12 + mST_TEXT +, + +13 + mST_TAG_START +, + +14 + mST_TAG_BODY +, + +15 + mST_TAG_QUOTE_WAIT +, + +16 + mST_TAG_QUOTED_STRING +, + +17 + mST_TAG_UNQUOTED_STRING +, + +18 + mST_COMMENT_WAIT_DASH1 +, + +19 + mST_COMMENT_WAIT_DASH2 +, + +20 + mST_COMMENT +, + +21 + mST_COMMENT_CLO_DASH2 +, + +22 + mST_COMMENT_CLO_RT + + +23 } + tp¡©e_e +; + +26 + g_ch¬þass +[256] = { + +36  + #WHITESPACE +( +c +è( +_ch¬þass +[()(c)] =ð1) + + ) + +37  + #ALNUM +( +c +è( +_ch¬þass +[()(c)] >ð2) + + ) + +38  + #ALPHA +( +c +è( +_ch¬þass +[()(c)] =ð3) + + ) + +41  + #EXCLAM + 0x21 + + ) + +42  + #CQUOTE + 0x22 + + ) + +43  + #CDASH + 0x2d + + ) + +44  + #CSLASH + 0x2à + + ) + +45  + #LANGLE + 0x3ø + + ) + +46  + #CEQUAL + 0x3d + + ) + +47  + #RANGLE + 0x3 + + ) + +48  + #CQUEST + 0x3à + + ) + +51  + #TOKEN_CB_CALL +( +ty³ +, +_ns +, +_cu¼’t_too +, +_fš® +) do { \ + +52  +_»t +; \ + +53 +p¡©e_e + +ns + = +_ns +; \ + +54 +ssize_t + +_sz + = ( +p + - +chunk_¡¬t +è+ +_cu¼’t_too +; \ + +55 ià(! +_sz +) { \ + +57 +¡©e + = +_ns +; \ + +60 +_»t + = + `cb +( +ty³ +, +chunk_¡¬t +, +_sz +, +key +); \ + +61 if( +_»t + < +_sz +) { \ + +62 if( +_cu¼’t_too + && +_»t + == -1) \ + +63 +¡©e + = +ns +; \ + +64  +fšish +; \ + +66 +chunk_¡¬t + = +p + + +_cu¼’t_too +; \ + +67 +¡©e + = +ns +; \ + +68 } 0) + + ) + +70  + #TOKEN_CB +( +_ty³ +, +_ns +, +_cu¼’t_too +) \ + +71 + `TOKEN_CB_CALL +( +_ty³ +, +_ns +, +_cu¼’t_too +, 0) + + ) + +73  + #PXML_TAG_FINAL_CHUNK_TYPE + +PXML_TAG_END + + + ) + +74  + #PXML_COMMENT_FINAL_CHUNK_TYPE + +PXML_COMMENT_END + + + ) + +76  + #TOKEN_CB_FINAL +( +_ty³ +, +_ns +, +_cu¼’t_too +) \ + +77 + `TOKEN_CB_CALL +Ð +_ty³ + ## +_FINAL_CHUNK_TYPE + , +_ns +, +_cu¼’t_too +, 1) + + ) + +82 +ssize_t + + $pxml_·r£ +(* +¡©eCڋxt +, cÚ¡ * +xmlbuf +, +size_t + +size +, +pxml_ÿÎback_f + * +cb +, * +key +) { + +83 +p¡©e_e + +¡©e + = (p¡©e_e)* +¡©eCڋxt +; + +84 cÚ¡ * +chunk_¡¬t + = (cÚ¡ *) +xmlbuf +; + +85 cÚ¡ * +p + = +chunk_¡¬t +; + +86 cÚ¡ * +’d + = +p + + +size +; + +88 ; +p + < +’d +;…++) { + +89  +C + = *(cÚ¡ *) +p +; + +90  +¡©e +) { + +91  +ST_TEXT +: + +96 ià( +C + =ð +LANGLE +) + +98 + `TOKEN_CB +( +PXML_TEXT +, +ST_TAG_START +, 0); + +100  +ST_TAG_START +: + +101 ià( + `ALPHA +( +C +è|| (C =ð +CSLASH +)) + +102 +¡©e + = +ST_TAG_BODY +; + +103 ià( +C + =ð +EXCLAM +) + +104 +¡©e + = +ST_COMMENT_WAIT_DASH1 +; + +110 + `TOKEN_CB +( +PXML_TEXT +, +ST_TEXT +, 1); + +112  +ST_TAG_BODY +: + +113  +C +) { + +114  +RANGLE +: + +116 + `TOKEN_CB_FINAL +( +PXML_TAG +, +ST_TEXT +, 1); + +118  +LANGLE +: + +123 + `TOKEN_CB_FINAL +( +PXML_TAG +, +ST_TAG_START +, 0); + +125  +CEQUAL +: + +126 +¡©e + = +ST_TAG_QUOTE_WAIT +; + +130  +ST_TAG_QUOTE_WAIT +: + +134  +C +) { + +135  +CQUOTE +: + +136 +¡©e + = +ST_TAG_QUOTED_STRING +; + +138  +RANGLE +: + +140 + `TOKEN_CB_FINAL +( +PXML_TAG +, +ST_TEXT +, 1); + +143 if(! + `WHITESPACE +( +C +)) + +145 +¡©e + = +ST_TAG_UNQUOTED_STRING +; + +148  +ST_TAG_QUOTED_STRING +: + +152 if( +C + =ð +CQUOTE +) { + +154 +¡©e + = +ST_TAG_BODY +; + +157  +ST_TAG_UNQUOTED_STRING +: + +158 if( +C + =ð +RANGLE +) { + +160 + `TOKEN_CB_FINAL +( +PXML_TAG +, +ST_TEXT +, 1); + +161 } if( + `WHITESPACE +( +C +)) { + +163 +¡©e + = +ST_TAG_BODY +; + +166  +ST_COMMENT_WAIT_DASH1 +: + +167 if( +C + =ð +CDASH +) { + +168 +¡©e + = +ST_COMMENT_WAIT_DASH2 +; + +171 +¡©e + = +ST_TAG_BODY +; + +174  +ST_COMMENT_WAIT_DASH2 +: + +175 if( +C + =ð +CDASH +) { + +177 +¡©e + = +ST_COMMENT +; + +180 +¡©e + = +ST_TAG_BODY +; + +183  +ST_COMMENT +: + +184 if( +C + =ð +CDASH +) { + +185 +¡©e + = +ST_COMMENT_CLO_DASH2 +; + +188  +ST_COMMENT_CLO_DASH2 +: + +189 if( +C + =ð +CDASH +) { + +190 +¡©e + = +ST_COMMENT_CLO_RT +; + +193 +¡©e + = +ST_COMMENT +; + +196  +ST_COMMENT_CLO_RT +: + +197 if( +C + =ð +RANGLE +) { + +198 + `TOKEN_CB_FINAL +( +PXML_COMMENT +, +ST_TEXT +, 1); + +199 } if( +C + =ð +CDASH +) { + +202 +¡©e + = +ST_COMMENT +; + +211 if( +p + - +chunk_¡¬t +) { + +212  +¡©e +) { + +213  +ST_COMMENT +: + +214 + `TOKEN_CB +( +PXML_COMMENT +, +¡©e +, 0); + +216  +ST_TEXT +: + +217 + `TOKEN_CB +( +PXML_TEXT +, +¡©e +, 0); + +223 +fšish +: + +224 * +¡©eCڋxt + = () +¡©e +; + +225  +chunk_¡¬t + - (cÚ¡ *) +xmlbuf +; + +226 + } +} + + @/usr/include/errno.h + +22 #iâdef +_ERRNO_H + + +23  + #_ERRNO_H + 1 + + ) + +25  + ~<ã©u»s.h +> + +28  + ~ + +32 #iâdeà +__ASSEMBLER__ + + +34 +__BEGIN_DECLS + + +37 * + $__”ºo_loÿtiÚ + (è +__THROW + +__©Œibu‹_cÚ¡__ +; + +38  + #”ºo + (* + `__”ºo_loÿtiÚ + ()) + + ) + +40 #ifdeà +__USE_GNU + + +45 * +´og¿m_švoÿtiÚ_Çme +; + +46 * +´og¿m_švoÿtiÚ_shÜt_Çme +; + +50 #iâdeà +__”rÜ_t_defšed + + +51  + #__”rÜ_t_defšed + 1 + + ) + +52  + t”rÜ_t +; + +57 +__END_DECLS + + + @/usr/include/math.h + +23 #iâdef +_MATH_H + + +24  + #_MATH_H + 1 + + ) + +26  + #__GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION + + + ) + +27  + ~ + +29 #ià +defšed + +log + && defšed +__GNUC__ + + +30 #w¬nšg +A + +maüo + +ÿÎed + +log + +was + +®»ady + +defšed + +wh’ + < +m©h +. +h +> wa  +šþuded +. + +31 #w¬nšg +This + +wžl + +ÿu£ + +compž©iÚ + +´obËms +. + +34 + g__BEGIN_DECLS + + +37  + ~ + +40  + ~ + +43  + ~ + +47 #ià +__GNUC_PREREQ + (3, 3) + +48  + #HUGE_VAL + ( + `__bužtš_huge_v® + ()) + + ) + +55  + #HUGE_VAL + 1e10000 + + ) + +57 #ifdeà +__USE_ISOC99 + + +58 #ià +__GNUC_PREREQ + (3, 3) + +59  + #HUGE_VALF + ( + `__bužtš_huge_v®f + ()) + + ) + +60  + #HUGE_VALL + ( + `__bužtš_huge_v®l + ()) + + ) + +62  + #HUGE_VALF + 1e10000f + + ) + +63  + #HUGE_VALL + 1e10000L + + ) + +66 #ià +__HAVE_FLOAT16 + && +__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +67  + #HUGE_VAL_F16 + ( + `__bužtš_huge_v®f16 + ()) + + ) + +69 #ià +__HAVE_FLOAT32 + && +__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +70  + #HUGE_VAL_F32 + ( + `__bužtš_huge_v®f32 + ()) + + ) + +72 #ià +__HAVE_FLOAT64 + && +__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +73  + #HUGE_VAL_F64 + ( + `__bužtš_huge_v®f64 + ()) + + ) + +75 #ià +__HAVE_FLOAT128 + && +__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +76  + #HUGE_VAL_F128 + ( + `__bužtš_huge_v®f128 + ()) + + ) + +78 #ià +__HAVE_FLOAT32X + && +__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +79  + #HUGE_VAL_F32X + ( + `__bužtš_huge_v®f32x + ()) + + ) + +81 #ià +__HAVE_FLOAT64X + && +__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +82  + #HUGE_VAL_F64X + ( + `__bužtš_huge_v®f64x + ()) + + ) + +84 #ià +__HAVE_FLOAT128X + && +__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +85  + #HUGE_VAL_F128X + ( + `__bužtš_huge_v®f128x + ()) + + ) + +88 #ifdeà +__USE_ISOC99 + + +90 #ià +__GNUC_PREREQ + (3, 3) + +91  + #INFINITY + ( + `__bužtš_šff + ()) + + ) + +93  + #INFINITY + +HUGE_VALF + + + ) + +97 #ià +__GNUC_PREREQ + (3, 3) + +98  + #NAN + ( + `__bužtš_Çnf + ("")) + + ) + +103  + #NAN + (0.0à/ 0.0f) + + ) + +107 #ià +__GLIBC_USE + ( +IEC_60559_BFP_EXT +) + +109 #ià +__GNUC_PREREQ + (3, 3) + +110  + #SNANF + ( + `__bužtš_Çnsf + ("")) + + ) + +111  + #SNAN + ( + `__bužtš_Çns + ("")) + + ) + +112  + #SNANL + ( + `__bužtš_Çn¦ + ("")) + + ) + +115 #ià +__HAVE_FLOAT16 + && +__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +116  + #SNANF16 + ( + `__bužtš_Çnsf16 + ("")) + + ) + +118 #ià +__HAVE_FLOAT32 + && +__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +119  + #SNANF32 + ( + `__bužtš_Çnsf32 + ("")) + + ) + +121 #ià +__HAVE_FLOAT64 + && +__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +122  + #SNANF64 + ( + `__bužtš_Çnsf64 + ("")) + + ) + +124 #ià +__HAVE_FLOAT128 + && +__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +125  + #SNANF128 + ( + `__bužtš_Çnsf128 + ("")) + + ) + +127 #ià +__HAVE_FLOAT32X + && +__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +128  + #SNANF32X + ( + `__bužtš_Çnsf32x + ("")) + + ) + +130 #ià +__HAVE_FLOAT64X + && +__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +131  + #SNANF64X + ( + `__bužtš_Çnsf64x + ("")) + + ) + +133 #ià +__HAVE_FLOAT128X + && +__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +134  + #SNANF128X + ( + `__bužtš_Çnsf128x + ("")) + + ) + +138  + ~ + +140 #ifdeà +__USE_ISOC99 + + +148 #ià +__GLIBC_FLT_EVAL_METHOD + == 0 || __GLIBC_FLT_EVAL_METHOD == 16 + +149  + tæßt_t +; + +150  + tdoubË_t +; + +151 #–ià +__GLIBC_FLT_EVAL_METHOD + == 1 + +152  + tæßt_t +; + +153  + tdoubË_t +; + +154 #–ià +__GLIBC_FLT_EVAL_METHOD + == 2 + +155  + tæßt_t +; + +156  + tdoubË_t +; + +157 #–ià +__GLIBC_FLT_EVAL_METHOD + == 32 + +158  +_Flßt32 + + tæßt_t +; + +159  + tdoubË_t +; + +160 #–ià +__GLIBC_FLT_EVAL_METHOD + == 33 + +161  +_Flßt32x + + tæßt_t +; + +162  +_Flßt32x + + tdoubË_t +; + +163 #–ià +__GLIBC_FLT_EVAL_METHOD + == 64 + +164  +_Flßt64 + + tæßt_t +; + +165  +_Flßt64 + + tdoubË_t +; + +166 #–ià +__GLIBC_FLT_EVAL_METHOD + == 65 + +167  +_Flßt64x + + tæßt_t +; + +168  +_Flßt64x + + tdoubË_t +; + +169 #–ià +__GLIBC_FLT_EVAL_METHOD + == 128 + +170  +_Flßt128 + + tæßt_t +; + +171  +_Flßt128 + + tdoubË_t +; + +172 #–ià +__GLIBC_FLT_EVAL_METHOD + == 129 + +173  +_Flßt128x + + tæßt_t +; + +174  +_Flßt128x + + tdoubË_t +; + +190  + ~ + +191 #ifdeà +__USE_ISOC99 + + +192 #ià +__FP_LOGB0_IS_MIN + + +193  + #FP_ILOGB0 + (-2147483647 - 1) + + ) + +195  + #FP_ILOGB0 + (-2147483647) + + ) + +197 #ià +__FP_LOGBNAN_IS_MIN + + +198  + #FP_ILOGBNAN + (-2147483647 - 1) + + ) + +200  + #FP_ILOGBNAN + 2147483647 + + ) + +203 #ià +__GLIBC_USE + ( +IEC_60559_BFP_EXT +) + +204 #ià +__WORDSIZE + == 32 + +205  + #__FP_LONG_MAX + 0x7fffffffL + + ) + +207  + #__FP_LONG_MAX + 0x7fffffffffffffffL + + ) + +209 #ià +__FP_LOGB0_IS_MIN + + +210  + #FP_LLOGB0 + (- +__FP_LONG_MAX + - 1) + + ) + +212  + #FP_LLOGB0 + (- +__FP_LONG_MAX +) + + ) + +214 #ià +__FP_LOGBNAN_IS_MIN + + +215  + #FP_LLOGBNAN + (- +__FP_LONG_MAX + - 1) + + ) + +217  + #FP_LLOGBNAN + +__FP_LONG_MAX + + + ) + +233  + ~ + +235 #ià +__GLIBC_USE + ( +IEC_60559_BFP_EXT +) + +239 + mFP_INT_UPWARD + = + +240  + #FP_INT_UPWARD + 0 + + ) + +241 +FP_INT_UPWARD +, + +242 + mFP_INT_DOWNWARD + = + +243  + #FP_INT_DOWNWARD + 1 + + ) + +244 +FP_INT_DOWNWARD +, + +245 + mFP_INT_TOWARDZERO + = + +246  + #FP_INT_TOWARDZERO + 2 + + ) + +247 +FP_INT_TOWARDZERO +, + +248 + mFP_INT_TONEARESTFROMZERO + = + +249  + #FP_INT_TONEARESTFROMZERO + 3 + + ) + +250 +FP_INT_TONEARESTFROMZERO +, + +251 + mFP_INT_TONEAREST + = + +252  + #FP_INT_TONEAREST + 4 + + ) + +253 +FP_INT_TONEAREST +, + +262  + #__SIMD_DECL +( +funùiÚ +è + `__CONCAT + ( +__DECL_SIMD_ +, funùiÚ) + + ) + +264  + #__MATHCALL_VEC +( +funùiÚ +, +suffix +, +¬gs +) \ + +265 + `__SIMD_DECL + ( + `__MATH_PRECNAME + ( +funùiÚ +, +suffix +)) \ + +266 + `__MATHCALL + ( +funùiÚ +, +suffix +, +¬gs +) + + ) + +268  + #__MATHDECL_VEC +( +ty³ +, +funùiÚ +, +suffix +, +¬gs +) \ + +269 + `__SIMD_DECL + ( + `__MATH_PRECNAME + ( +funùiÚ +, +suffix +)) \ + +270 + `__MATHDECL +( +ty³ +, +funùiÚ +, +suffix +, +¬gs +) + + ) + +272  + #__MATHCALL +( +funùiÚ +, +suffix +, +¬gs +) \ + +273 + `__MATHDECL + ( +_MdoubË_ +, +funùiÚ +, +suffix +, +¬gs +) + + ) + +274  + #__MATHDECL +( +ty³ +, +funùiÚ +, +suffix +, +¬gs +) \ + +275 + `__MATHDECL_1 +( +ty³ +, +funùiÚ +, +suffix +, +¬gs +); \ + +276 + `__MATHDECL_1 +( +ty³ +, + `__CONCAT +( +__ +, +funùiÚ +), +suffix +, +¬gs +) + + ) + +277  + #__MATHCALLX +( +funùiÚ +, +suffix +, +¬gs +, +©Œib +) \ + +278 + `__MATHDECLX + ( +_MdoubË_ +, +funùiÚ +, +suffix +, +¬gs +, +©Œib +) + + ) + +279  + #__MATHDECLX +( +ty³ +, +funùiÚ +, +suffix +, +¬gs +, +©Œib +) \ + +280 + `__MATHDECL_1 +( +ty³ +, +funùiÚ +, +suffix +, +¬gs +è + `__©Œibu‹__ + ( +©Œib +); \ + +281 + `__MATHDECL_1 +( +ty³ +, + `__CONCAT +( +__ +, +funùiÚ +), +suffix +, +¬gs +è + `__©Œibu‹__ + ( +©Œib +) + + ) + +282  + #__MATHDECL_1 +( +ty³ +, +funùiÚ +, +suffix +, +¬gs +) \ + +283 +ty³ + + `__MATH_PRECNAME +( +funùiÚ +, +suffix +è +¬gs + +__THROW + + + ) + +285  + #_MdoubË_ +  + + ) + +286  + #__MATH_PRECNAME +( +Çme +, +r +è + `__CONCAT +Òame,r) + + ) + +287  + #__MATH_DECLARING_DOUBLE + 1 + + ) + +288  + #__MATH_DECLARING_FLOATN + 0 + + ) + +289  + ~ + +290  + ~ + +291 #undeà +_MdoubË_ + + +292 #undeà +__MATH_PRECNAME + + +293 #undeà +__MATH_DECLARING_DOUBLE + + +294 #undeà +__MATH_DECLARING_FLOATN + + +296 #ifdeà +__USE_ISOC99 + + +302  + #_MdoubË_ +  + + ) + +303  + #__MATH_PRECNAME +( +Çme +, +r +èÇme## +f +## + ) +r + +304  + #__MATH_DECLARING_DOUBLE + 0 + + ) + +305  + #__MATH_DECLARING_FLOATN + 0 + + ) + +306  + ~ + +307  + ~ + +308 #undeà +_MdoubË_ + + +309 #undeà +__MATH_PRECNAME + + +310 #undeà +__MATH_DECLARING_DOUBLE + + +311 #undeà +__MATH_DECLARING_FLOATN + + +313 #ià!( +defšed + +__NO_LONG_DOUBLE_MATH + && defšed +_LIBC +) \ + +314 || +defšed + +__LDBL_COMPAT + \ + +315 || +defšed + +_LIBC_TEST + + +316 #ifdeà +__LDBL_COMPAT + + +318 #ifdeà +__USE_ISOC99 + + +319  + $__Ædbl_Ãx‰ow¬df + ( +__x +,  +__y +) + +320 +__THROW + + `__©Œibu‹__ + (( +__cÚ¡__ +)); + +321 #ifdeà +__REDIRECT_NTH + + +322  + `__REDIRECT_NTH + ( +Ãx‰ow¬df +, ( +__x +,  +__y +), + +323 +__Ædbl_Ãx‰ow¬df +) + +324 + `__©Œibu‹__ + (( +__cÚ¡__ +)); + +325  + `__REDIRECT_NTH + ( +Ãx‰ow¬d +, ( +__x +,  +__y +), + +326 +Ãxá” +è + `__©Œibu‹__ + (( +__cÚ¡__ +)); + +327  + `__REDIRECT_NTH + ( +Ãx‰ow¬dl +, + +328 ( +__x +,  +__y +), + +329 +Ãxá” +è + `__©Œibu‹__ + (( +__cÚ¡__ +)); + +333 #undeà +__MATHDECL_1 + + +334  + #__MATHDECL_2 +( +ty³ +, +funùiÚ +, +suffix +, +¬gs +, +®Ÿs +) \ + +335 +ty³ + + `__REDIRECT_NTH +( + `__MATH_PRECNAME +( +funùiÚ +, +suffix +), \ + +336 +¬gs +, +®Ÿs +) + + ) + +337  + #__MATHDECL_1 +( +ty³ +, +funùiÚ +, +suffix +, +¬gs +) \ + +338 + `__MATHDECL_2 +( +ty³ +, +funùiÚ +, +suffix +, +¬gs +, + `__CONCAT +(funùiÚ,suffix)) + + ) + +344  + #_MdoubË_ +  + + ) + +345  + #__MATH_PRECNAME +( +Çme +, +r +èÇme## +l +## + ) +r + +346  + #__MATH_DECLARING_DOUBLE + 0 + + ) + +347  + #__MATH_DECLARING_FLOATN + 0 + + ) + +348  + #__MATH_DECLARE_LDOUBLE + 1 + + ) + +349  + ~ + +350  + ~ + +351 #undeà +_MdoubË_ + + +352 #undeà +__MATH_PRECNAME + + +353 #undeà +__MATH_DECLARING_DOUBLE + + +354 #undeà +__MATH_DECLARING_FLOATN + + +363 #ià +__HAVE_DISTINCT_FLOAT16 + || ( +__HAVE_FLOAT16 + && ! +defšed + +_LIBC +) + +364  + #_MdoubË_ + +_Flßt16 + + + ) + +365  + #__MATH_PRECNAME +( +Çme +, +r +èÇme## +f16 +## + ) +r + +366  + #__MATH_DECLARING_DOUBLE + 0 + + ) + +367  + #__MATH_DECLARING_FLOATN + 1 + + ) + +368 #ià +__HAVE_DISTINCT_FLOAT16 + + +369  + ~ + +371 #ià + `__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +372  + ~ + +374 #undeà +_MdoubË_ + + +375 #undeà +__MATH_PRECNAME + + +376 #undeà +__MATH_DECLARING_DOUBLE + + +377 #undeà +__MATH_DECLARING_FLOATN + + +380 #ià +__HAVE_DISTINCT_FLOAT32 + || ( +__HAVE_FLOAT32 + && ! +defšed + +_LIBC +) + +381  + #_MdoubË_ + +_Flßt32 + + + ) + +382  + #__MATH_PRECNAME +( +Çme +, +r +èÇme## +f32 +## + ) +r + +383  + #__MATH_DECLARING_DOUBLE + 0 + + ) + +384  + #__MATH_DECLARING_FLOATN + 1 + + ) + +385 #ià +__HAVE_DISTINCT_FLOAT32 + + +386  + ~ + +388 #ià + `__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +389  + ~ + +391 #undeà +_MdoubË_ + + +392 #undeà +__MATH_PRECNAME + + +393 #undeà +__MATH_DECLARING_DOUBLE + + +394 #undeà +__MATH_DECLARING_FLOATN + + +397 #ià +__HAVE_DISTINCT_FLOAT64 + || ( +__HAVE_FLOAT64 + && ! +defšed + +_LIBC +) + +398  + #_MdoubË_ + +_Flßt64 + + + ) + +399  + #__MATH_PRECNAME +( +Çme +, +r +èÇme## +f64 +## + ) +r + +400  + #__MATH_DECLARING_DOUBLE + 0 + + ) + +401  + #__MATH_DECLARING_FLOATN + 1 + + ) + +402 #ià +__HAVE_DISTINCT_FLOAT64 + + +403  + ~ + +405 #ià + `__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +406  + ~ + +408 #undeà +_MdoubË_ + + +409 #undeà +__MATH_PRECNAME + + +410 #undeà +__MATH_DECLARING_DOUBLE + + +411 #undeà +__MATH_DECLARING_FLOATN + + +414 #ià +__HAVE_DISTINCT_FLOAT128 + || ( +__HAVE_FLOAT128 + && ! +defšed + +_LIBC +) + +415  + #_MdoubË_ + +_Flßt128 + + + ) + +416  + #__MATH_PRECNAME +( +Çme +, +r +èÇme## +f128 +## + ) +r + +417  + #__MATH_DECLARING_DOUBLE + 0 + + ) + +418  + #__MATH_DECLARING_FLOATN + 1 + + ) + +419 #ià +__HAVE_DISTINCT_FLOAT128 + + +420  + ~ + +422 #ià + `__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +423  + ~ + +425 #undeà +_MdoubË_ + + +426 #undeà +__MATH_PRECNAME + + +427 #undeà +__MATH_DECLARING_DOUBLE + + +428 #undeà +__MATH_DECLARING_FLOATN + + +431 #ià +__HAVE_DISTINCT_FLOAT32X + || ( +__HAVE_FLOAT32X + && ! +defšed + +_LIBC +) + +432  + #_MdoubË_ + +_Flßt32x + + + ) + +433  + #__MATH_PRECNAME +( +Çme +, +r +èÇme## +f32x +## + ) +r + +434  + #__MATH_DECLARING_DOUBLE + 0 + + ) + +435  + #__MATH_DECLARING_FLOATN + 1 + + ) + +436 #ià +__HAVE_DISTINCT_FLOAT32X + + +437  + ~ + +439 #ià + `__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +440  + ~ + +442 #undeà +_MdoubË_ + + +443 #undeà +__MATH_PRECNAME + + +444 #undeà +__MATH_DECLARING_DOUBLE + + +445 #undeà +__MATH_DECLARING_FLOATN + + +448 #ià +__HAVE_DISTINCT_FLOAT64X + || ( +__HAVE_FLOAT64X + && ! +defšed + +_LIBC +) + +449  + #_MdoubË_ + +_Flßt64x + + + ) + +450  + #__MATH_PRECNAME +( +Çme +, +r +èÇme## +f64x +## + ) +r + +451  + #__MATH_DECLARING_DOUBLE + 0 + + ) + +452  + #__MATH_DECLARING_FLOATN + 1 + + ) + +453 #ià +__HAVE_DISTINCT_FLOAT64X + + +454  + ~ + +456 #ià + `__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +457  + ~ + +459 #undeà +_MdoubË_ + + +460 #undeà +__MATH_PRECNAME + + +461 #undeà +__MATH_DECLARING_DOUBLE + + +462 #undeà +__MATH_DECLARING_FLOATN + + +465 #ià +__HAVE_DISTINCT_FLOAT128X + || ( +__HAVE_FLOAT128X + && ! +defšed + +_LIBC +) + +466  + #_MdoubË_ + +_Flßt128x + + + ) + +467  + #__MATH_PRECNAME +( +Çme +, +r +èÇme## +f128x +## + ) +r + +468  + #__MATH_DECLARING_DOUBLE + 0 + + ) + +469  + #__MATH_DECLARING_FLOATN + 1 + + ) + +470 #ià +__HAVE_DISTINCT_FLOAT128X + + +471  + ~ + +473 #ià + `__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +474  + ~ + +476 #undeà +_MdoubË_ + + +477 #undeà +__MATH_PRECNAME + + +478 #undeà +__MATH_DECLARING_DOUBLE + + +479 #undeà +__MATH_DECLARING_FLOATN + + +482 #undeà +__MATHDECL_1 + + +483 #undeà +__MATHDECL + + +484 #undeà +__MATHCALL + + +487 #ià +defšed + +__USE_MISC + || defšed +__USE_XOPEN + + +489  +signgam +; + +492 #ià( +__HAVE_DISTINCT_FLOAT16 + \ + +493 || +__HAVE_DISTINCT_FLOAT32 + \ + +494 || +__HAVE_DISTINCT_FLOAT64 + \ + +495 || +__HAVE_DISTINCT_FLOAT32X + \ + +496 || +__HAVE_DISTINCT_FLOAT64X + \ + +497 || +__HAVE_DISTINCT_FLOAT128X +) + +510 #ifdeà +__NO_LONG_DOUBLE_MATH + + +511 #ià +__HAVE_DISTINCT_FLOAT128 + + +514  + #__MATH_TG +( +TG_ARG +, +FUNC +, +ARGS +) \ + +515 ( ( +TG_ARG +è=ð (è? +FUNC + ## +f + +ARGS + : FUNC ARGS) + + ) + +516 #–ià +__HAVE_DISTINCT_FLOAT128 + + +517 #ià +__HAVE_GENERIC_SELECTION + + +518 #ià +__HAVE_FLOATN_NOT_TYPEDEF + && +__HAVE_FLOAT32 + + +519  + #__MATH_TG_F32 +( +FUNC +, +ARGS +è +_Flßt32 +: FUNC ## +f + ARGS, + + ) + +521  + #__MATH_TG_F32 +( +FUNC +, +ARGS +) + + ) + +523 #ià +__HAVE_FLOATN_NOT_TYPEDEF + && +__HAVE_FLOAT64X + + +524 #ià +__HAVE_FLOAT64X_LONG_DOUBLE + + +525  + #__MATH_TG_F64X +( +FUNC +, +ARGS +è +_Flßt64x +: FUNC ## +l + ARGS, + + ) + +527  + #__MATH_TG_F64X +( +FUNC +, +ARGS +è +_Flßt64x +: FUNC ## +f128 + ARGS, + + ) + +530  + #__MATH_TG_F64X +( +FUNC +, +ARGS +) + + ) + +532  + #__MATH_TG +( +TG_ARG +, +FUNC +, +ARGS +) \ + +533 + `_G’”ic + (( +TG_ARG +), \ + +534 : +FUNC + ## +f + +ARGS +, \ + +535 + `__MATH_TG_F32 + ( +FUNC +, +ARGS +) \ + +536 : +FUNC + +ARGS +, \ + +537 : +FUNC + ## +l + +ARGS +, \ + +538 + `__MATH_TG_F64X + ( +FUNC +, +ARGS +) \ + +539 +_Flßt128 +: +FUNC + ## +f128 + +ARGS +) + + ) + +541 #ià +__HAVE_FLOATN_NOT_TYPEDEF + + +544  + #__MATH_TG +( +TG_ARG +, +FUNC +, +ARGS +) \ + +545 +__bužtš_choo£_ex´ + \ + +546 ( + `__bužtš_ty³s_com·tibË_p + ( + `__ty³of + ( +TG_ARG +), ), \ + +547 +FUNC + ## +f + +ARGS +, \ + +548 +__bužtš_choo£_ex´ + \ + +549 ( + `__bužtš_ty³s_com·tibË_p + ( + `__ty³of + ( +TG_ARG +), ), \ + +550 +FUNC + +ARGS +, \ + +551 +__bužtš_choo£_ex´ + \ + +552 ( + `__bužtš_ty³s_com·tibË_p + ( + `__ty³of + ( +TG_ARG +), ), \ + +553 +FUNC + ## +l + +ARGS +, \ + +554 +FUNC + ## +f128 + +ARGS +))) + + ) + +557  + #__MATH_TG +( +TG_ARG +, +FUNC +, +ARGS +) \ + +558 ( ( +TG_ARG +) ==  () \ + +559 ? +FUNC + ## +f + +ARGS + \ + +560 :  ( +TG_ARG +) ==  () \ + +561 ? +FUNC + +ARGS + \ + +562 : +FUNC + ## +l + +ARGS +) + + ) + +566 #ifdeà +__USE_ISOC99 + + +571 +FP_NAN + = + +572  + #FP_NAN + 0 + + ) + +573 +FP_NAN +, + +574 +FP_INFINITE + = + +575  + #FP_INFINITE + 1 + + ) + +576 +FP_INFINITE +, + +577 +FP_ZERO + = + +578  + #FP_ZERO + 2 + + ) + +579 +FP_ZERO +, + +580 +FP_SUBNORMAL + = + +581  + #FP_SUBNORMAL + 3 + + ) + +582 +FP_SUBNORMAL +, + +583 +FP_NORMAL + = + +584  + #FP_NORMAL + 4 + + ) + +585 +FP_NORMAL + + +593 #ià + `__GNUC_PREREQ + (4,4è&& ! +defšed + +__SUPPORT_SNAN__ + \ + +594 && (! +defšed + +__OPTIMIZE_SIZE__ + || defšed +__ýlu¥lus +) + +601  + #åþassify +( +x +è + `__bužtš_åþassify + ( +FP_NAN +, +FP_INFINITE +, \ + +602 +FP_NORMAL +, +FP_SUBNORMAL +, +FP_ZERO +, +x +) + + ) + +604  + #åþassify +( +x +è + `__MATH_TG + ((x), +__åþassify +, (x)) + + ) + +608 #ià + `__GNUC_PREREQ + (6,0) + +609  + #signb™ +( +x +è + `__bužtš_signb™ + (x) + + ) + +610 #–ià +defšed + +__ýlu¥lus + + +618  + #signb™ +( +x +è + `__bužtš_signb™l + (x) + + ) + +619 #–ià + `__GNUC_PREREQ + (4,0) + +620  + #signb™ +( +x +è + `__MATH_TG + ((x), +__bužtš_signb™ +, (x)) + + ) + +622  + #signb™ +( +x +è + `__MATH_TG + ((x), +__signb™ +, (x)) + + ) + +626 #ià + `__GNUC_PREREQ + (4,4è&& ! +defšed + +__SUPPORT_SNAN__ + + +627  + #isfš™e +( +x +è + `__bužtš_isfš™e + (x) + + ) + +629  + #isfš™e +( +x +è + `__MATH_TG + ((x), +__fš™e +, (x)) + + ) + +633 #ià + `__GNUC_PREREQ + (4,4è&& ! +defšed + +__SUPPORT_SNAN__ + + +634  + #i¢Üm® +( +x +è + `__bužtš_i¢Üm® + (x) + + ) + +636  + #i¢Üm® +( +x +è( + `åþassify + (xè=ð +FP_NORMAL +) + + ) + +641 #ià + `__GNUC_PREREQ + (4,4è&& ! +defšed + +__SUPPORT_SNAN__ + + +642  + #i¢ª +( +x +è + `__bužtš_i¢ª + (x) + + ) + +644  + #i¢ª +( +x +è + `__MATH_TG + ((x), +__i¢ª +, (x)) + + ) + +648 #ià +__HAVE_DISTINCT_FLOAT128 + && ! + `__GNUC_PREREQ + (7,0) \ + +649 && ! +defšed + +__SUPPORT_SNAN__ + && !defšed +__ýlu¥lus + + +655  + #isšf +( +x +) \ + +656 ( + `__bužtš_ty³s_com·tibË_p + ( + `__ty³of + ( +x +), +_Flßt128 +) \ + +657 ? + `__isšff128 + ( +x +è: + `__bužtš_isšf_sign + (x)) + + ) + +658 #–ià + `__GNUC_PREREQ + (4,4è&& ! +defšed + +__SUPPORT_SNAN__ + + +659  + #isšf +( +x +è + `__bužtš_isšf_sign + (x) + + ) + +661  + #isšf +( +x +è + `__MATH_TG + ((x), +__isšf +, (x)) + + ) + +665  + #MATH_ERRNO + 1 + + ) + +666  + #MATH_ERREXCEPT + 2 + + ) + +673 #ifdeà +__FAST_MATH__ + + +674  + #m©h_”rhªdlšg + 0 + + ) + +675 #–ià +defšed + +__NO_MATH_ERRNO__ + + +676  + #m©h_”rhªdlšg + ( +MATH_ERREXCEPT +) + + ) + +678  + #m©h_”rhªdlšg + ( +MATH_ERRNO + | +MATH_ERREXCEPT +) + + ) + +683 #ià + `__GLIBC_USE + ( +IEC_60559_BFP_EXT +) + +684  + ~ + +687 #iâdeà +__ýlu¥lus + + +688  + #issigÇlšg +( +x +è + `__MATH_TG + ((x), +__issigÇlšg +, (x)) + + ) + +697 +šlše +  + `issigÇlšg + ( +__v® +è{  + `__issigÇlšgf + (__val); } + +698 +šlše +  + `issigÇlšg + ( +__v® +è{  + `__issigÇlšg + (__val); } + +699 +šlše +  + +700 + `issigÇlšg + ( +__v® +) + +702 #ifdeà +__NO_LONG_DOUBLE_MATH + + +703  + `__issigÇlšg + ( +__v® +); + +705  + `__issigÇlšgl + ( +__v® +); + +708 #ià +__HAVE_DISTINCT_FLOAT128 + + +709 +šlše +  + `issigÇlšg + ( +_Flßt128 + +__v® +è{  + `__issigÇlšgf128 + (__val); } + +711 + } +} + +715  + #issubnÜm® +( +x +è( + `åþassify + (xè=ð +FP_SUBNORMAL +) + + ) + +718 #iâdeà +__ýlu¥lus + + +719 #ifdeà +__SUPPORT_SNAN__ + + +720  + #isz”o +( +x +è( + `åþassify + (xè=ð +FP_ZERO +) + + ) + +722  + #isz”o +( +x +è((( + `__ty³of + (x)è(x)è=ð0) + + ) + +726 #ifdeà +__SUPPORT_SNAN__ + + +727 +šlše +  + +728 +isz”o + ( +__v® +) + +730  +__åþassifyf + ( +__v® +è=ð +FP_ZERO +; + +732 +šlše +  + +733 +isz”o + ( +__v® +) + +735  +__åþassify + ( +__v® +è=ð +FP_ZERO +; + +737 +šlše +  + +738 +isz”o + ( +__v® +) + +740 #ifdeà +__NO_LONG_DOUBLE_MATH + + +741  +__åþassify + ( +__v® +è=ð +FP_ZERO +; + +743  +__åþassifyl + ( +__v® +è=ð +FP_ZERO +; + +746 #ià +__HAVE_DISTINCT_FLOAT128 + + +747 +šlše +  + +748 +isz”o + ( +_Flßt128 + +__v® +) + +750  +__åþassifyf128 + ( +__v® +è=ð +FP_ZERO +; + +754 +‹m¶©e + < +þass + +__T +> +šlše + +boÞ + + +755 +isz”o + ( +__T + +__v® +) + +757  +__v® + == 0; + +764 #ifdeà +__USE_XOPEN + + +766  + #MAXFLOAT + 3.40282347e+38F + + ) + +771 #ià +defšed + +__USE_MISC + || defšed +__USE_XOPEN + + +772  + #M_E + 2.7182818284590452354 + + ) + +773  + #M_LOG2E + 1.4426950408889634074 + + ) + +774  + #M_LOG10E + 0.43429448190325182765 + + ) + +775  + #M_LN2 + 0.69314718055994530942 + + ) + +776  + #M_LN10 + 2.30258509299404568402 + + ) + +777  + #M_PI + 3.14159265358979323846 + + ) + +778  + #M_PI_2 + 1.57079632679489661923 + + ) + +779  + #M_PI_4 + 0.78539816339744830962 + + ) + +780  + #M_1_PI + 0.31830988618379067154 + + ) + +781  + #M_2_PI + 0.63661977236758134308 + + ) + +782  + #M_2_SQRTPI + 1.12837916709551257390 + + ) + +783  + #M_SQRT2 + 1.41421356237309504880 + + ) + +784  + #M_SQRT1_2 + 0.70710678118654752440 + + ) + +790 #ifdeà +__USE_GNU + + +791  + #M_El + 2.718281828459045235360287471352662498L + + ) + +792  + #M_LOG2El + 1.442695040888963407359924681001892137L + + ) + +793  + #M_LOG10El + 0.434294481903251827651128918916605082L + + ) + +794  + #M_LN2l + 0.693147180559945309417232121458176568L + + ) + +795  + #M_LN10l + 2.302585092994045684017991454684364208L + + ) + +796  + #M_PIl + 3.141592653589793238462643383279502884L + + ) + +797  + #M_PI_2l + 1.570796326794896619231321691639751442L + + ) + +798  + #M_PI_4l + 0.785398163397448309615660845819875721L + + ) + +799  + #M_1_PIl + 0.318309886183790671537767526745028724L + + ) + +800  + #M_2_PIl + 0.636619772367581343075535053490057448L + + ) + +801  + #M_2_SQRTPIl + 1.128379167095512573896158903121545172L + + ) + +802  + #M_SQRT2l + 1.414213562373095048801688724209698079L + + ) + +803  + #M_SQRT1_2l + 0.707106781186547524400844362104849039L + + ) + +806 #ià +__HAVE_FLOAT16 + && +defšed + +__USE_GNU + + +807  + #M_Ef16 + + `__f16 + (2.718281828459045235360287471352662498è + + ) + +808  + #M_LOG2Ef16 + + `__f16 + (1.442695040888963407359924681001892137è + + ) + +809  + #M_LOG10Ef16 + + `__f16 + (0.434294481903251827651128918916605082è + + ) + +810  + #M_LN2f16 + + `__f16 + (0.693147180559945309417232121458176568è + + ) + +811  + #M_LN10f16 + + `__f16 + (2.302585092994045684017991454684364208è + + ) + +812  + #M_PIf16 + + `__f16 + (3.141592653589793238462643383279502884è + + ) + +813  + #M_PI_2f16 + + `__f16 + (1.570796326794896619231321691639751442è + + ) + +814  + #M_PI_4f16 + + `__f16 + (0.785398163397448309615660845819875721è + + ) + +815  + #M_1_PIf16 + + `__f16 + (0.318309886183790671537767526745028724è + + ) + +816  + #M_2_PIf16 + + `__f16 + (0.636619772367581343075535053490057448è + + ) + +817  + #M_2_SQRTPIf16 + + `__f16 + (1.128379167095512573896158903121545172è + + ) + +818  + #M_SQRT2f16 + + `__f16 + (1.414213562373095048801688724209698079è + + ) + +819  + #M_SQRT1_2f16 + + `__f16 + (0.707106781186547524400844362104849039è + + ) + +822 #ià +__HAVE_FLOAT32 + && +defšed + +__USE_GNU + + +823  + #M_Ef32 + + `__f32 + (2.718281828459045235360287471352662498è + + ) + +824  + #M_LOG2Ef32 + + `__f32 + (1.442695040888963407359924681001892137è + + ) + +825  + #M_LOG10Ef32 + + `__f32 + (0.434294481903251827651128918916605082è + + ) + +826  + #M_LN2f32 + + `__f32 + (0.693147180559945309417232121458176568è + + ) + +827  + #M_LN10f32 + + `__f32 + (2.302585092994045684017991454684364208è + + ) + +828  + #M_PIf32 + + `__f32 + (3.141592653589793238462643383279502884è + + ) + +829  + #M_PI_2f32 + + `__f32 + (1.570796326794896619231321691639751442è + + ) + +830  + #M_PI_4f32 + + `__f32 + (0.785398163397448309615660845819875721è + + ) + +831  + #M_1_PIf32 + + `__f32 + (0.318309886183790671537767526745028724è + + ) + +832  + #M_2_PIf32 + + `__f32 + (0.636619772367581343075535053490057448è + + ) + +833  + #M_2_SQRTPIf32 + + `__f32 + (1.128379167095512573896158903121545172è + + ) + +834  + #M_SQRT2f32 + + `__f32 + (1.414213562373095048801688724209698079è + + ) + +835  + #M_SQRT1_2f32 + + `__f32 + (0.707106781186547524400844362104849039è + + ) + +838 #ià +__HAVE_FLOAT64 + && +defšed + +__USE_GNU + + +839  + #M_Ef64 + + `__f64 + (2.718281828459045235360287471352662498è + + ) + +840  + #M_LOG2Ef64 + + `__f64 + (1.442695040888963407359924681001892137è + + ) + +841  + #M_LOG10Ef64 + + `__f64 + (0.434294481903251827651128918916605082è + + ) + +842  + #M_LN2f64 + + `__f64 + (0.693147180559945309417232121458176568è + + ) + +843  + #M_LN10f64 + + `__f64 + (2.302585092994045684017991454684364208è + + ) + +844  + #M_PIf64 + + `__f64 + (3.141592653589793238462643383279502884è + + ) + +845  + #M_PI_2f64 + + `__f64 + (1.570796326794896619231321691639751442è + + ) + +846  + #M_PI_4f64 + + `__f64 + (0.785398163397448309615660845819875721è + + ) + +847  + #M_1_PIf64 + + `__f64 + (0.318309886183790671537767526745028724è + + ) + +848  + #M_2_PIf64 + + `__f64 + (0.636619772367581343075535053490057448è + + ) + +849  + #M_2_SQRTPIf64 + + `__f64 + (1.128379167095512573896158903121545172è + + ) + +850  + #M_SQRT2f64 + + `__f64 + (1.414213562373095048801688724209698079è + + ) + +851  + #M_SQRT1_2f64 + + `__f64 + (0.707106781186547524400844362104849039è + + ) + +854 #ià +__HAVE_FLOAT128 + && +defšed + +__USE_GNU + + +855  + #M_Ef128 + + `__f128 + (2.718281828459045235360287471352662498è + + ) + +856  + #M_LOG2Ef128 + + `__f128 + (1.442695040888963407359924681001892137è + + ) + +857  + #M_LOG10Ef128 + + `__f128 + (0.434294481903251827651128918916605082è + + ) + +858  + #M_LN2f128 + + `__f128 + (0.693147180559945309417232121458176568è + + ) + +859  + #M_LN10f128 + + `__f128 + (2.302585092994045684017991454684364208è + + ) + +860  + #M_PIf128 + + `__f128 + (3.141592653589793238462643383279502884è + + ) + +861  + #M_PI_2f128 + + `__f128 + (1.570796326794896619231321691639751442è + + ) + +862  + #M_PI_4f128 + + `__f128 + (0.785398163397448309615660845819875721è + + ) + +863  + #M_1_PIf128 + + `__f128 + (0.318309886183790671537767526745028724è + + ) + +864  + #M_2_PIf128 + + `__f128 + (0.636619772367581343075535053490057448è + + ) + +865  + #M_2_SQRTPIf128 + + `__f128 + (1.128379167095512573896158903121545172è + + ) + +866  + #M_SQRT2f128 + + `__f128 + (1.414213562373095048801688724209698079è + + ) + +867  + #M_SQRT1_2f128 + + `__f128 + (0.707106781186547524400844362104849039è + + ) + +870 #ià +__HAVE_FLOAT32X + && +defšed + +__USE_GNU + + +871  + #M_Ef32x + + `__f32x + (2.718281828459045235360287471352662498è + + ) + +872  + #M_LOG2Ef32x + + `__f32x + (1.442695040888963407359924681001892137è + + ) + +873  + #M_LOG10Ef32x + + `__f32x + (0.434294481903251827651128918916605082è + + ) + +874  + #M_LN2f32x + + `__f32x + (0.693147180559945309417232121458176568è + + ) + +875  + #M_LN10f32x + + `__f32x + (2.302585092994045684017991454684364208è + + ) + +876  + #M_PIf32x + + `__f32x + (3.141592653589793238462643383279502884è + + ) + +877  + #M_PI_2f32x + + `__f32x + (1.570796326794896619231321691639751442è + + ) + +878  + #M_PI_4f32x + + `__f32x + (0.785398163397448309615660845819875721è + + ) + +879  + #M_1_PIf32x + + `__f32x + (0.318309886183790671537767526745028724è + + ) + +880  + #M_2_PIf32x + + `__f32x + (0.636619772367581343075535053490057448è + + ) + +881  + #M_2_SQRTPIf32x + + `__f32x + (1.128379167095512573896158903121545172è + + ) + +882  + #M_SQRT2f32x + + `__f32x + (1.414213562373095048801688724209698079è + + ) + +883  + #M_SQRT1_2f32x + + `__f32x + (0.707106781186547524400844362104849039è + + ) + +886 #ià +__HAVE_FLOAT64X + && +defšed + +__USE_GNU + + +887  + #M_Ef64x + + `__f64x + (2.718281828459045235360287471352662498è + + ) + +888  + #M_LOG2Ef64x + + `__f64x + (1.442695040888963407359924681001892137è + + ) + +889  + #M_LOG10Ef64x + + `__f64x + (0.434294481903251827651128918916605082è + + ) + +890  + #M_LN2f64x + + `__f64x + (0.693147180559945309417232121458176568è + + ) + +891  + #M_LN10f64x + + `__f64x + (2.302585092994045684017991454684364208è + + ) + +892  + #M_PIf64x + + `__f64x + (3.141592653589793238462643383279502884è + + ) + +893  + #M_PI_2f64x + + `__f64x + (1.570796326794896619231321691639751442è + + ) + +894  + #M_PI_4f64x + + `__f64x + (0.785398163397448309615660845819875721è + + ) + +895  + #M_1_PIf64x + + `__f64x + (0.318309886183790671537767526745028724è + + ) + +896  + #M_2_PIf64x + + `__f64x + (0.636619772367581343075535053490057448è + + ) + +897  + #M_2_SQRTPIf64x + + `__f64x + (1.128379167095512573896158903121545172è + + ) + +898  + #M_SQRT2f64x + + `__f64x + (1.414213562373095048801688724209698079è + + ) + +899  + #M_SQRT1_2f64x + + `__f64x + (0.707106781186547524400844362104849039è + + ) + +902 #ià +__HAVE_FLOAT128X + && +defšed + +__USE_GNU + + +909 #ià +defšed + +__STRICT_ANSI__ + && !defšed +__NO_MATH_INLINES + + +910  + #__NO_MATH_INLINES + 1 + + ) + +913 #ifdeà +__USE_ISOC99 + + +914 #ià +__GNUC_PREREQ + (3, 1) + +921  + #isg»©” +( +x +, +y +è + `__bužtš_isg»©” +(x, y) + + ) + +922  + #isg»©”equ® +( +x +, +y +è + `__bužtš_isg»©”equ® +(x, y) + + ) + +923  + #i¦ess +( +x +, +y +è + `__bužtš_i¦ess +(x, y) + + ) + +924  + #i¦es£qu® +( +x +, +y +è + `__bužtš_i¦es£qu® +(x, y) + + ) + +925  + #i¦essg»©” +( +x +, +y +è + `__bužtš_i¦essg»©” +(x, y) + + ) + +926  + #isunÜd”ed +( +x +, +y +è + `__bužtš_isunÜd”ed +(x, y) + + ) + +928  + #isg»©” +( +x +, +y +) \ + +929 ( + `__ex‹nsiÚ__ + ({ + `__ty³of__ + ( +x +è +__x + = (x); __ty³of__ ( +y +è +__y + = (y); \ + +930 ! + `isunÜd”ed + ( +__x +, +__y +è&& __x > __y; })) + + ) + +931  + #isg»©”equ® +( +x +, +y +) \ + +932 ( + `__ex‹nsiÚ__ + ({ + `__ty³of__ + ( +x +è +__x + = (x); __ty³of__ ( +y +è +__y + = (y); \ + +933 ! + `isunÜd”ed + ( +__x +, +__y +è&& __x >ð__y; })) + + ) + +934  + #i¦ess +( +x +, +y +) \ + +935 ( + `__ex‹nsiÚ__ + ({ + `__ty³of__ + ( +x +è +__x + = (x); __ty³of__ ( +y +è +__y + = (y); \ + +936 ! + `isunÜd”ed + ( +__x +, +__y +è&& __x < __y; })) + + ) + +937  + #i¦es£qu® +( +x +, +y +) \ + +938 ( + `__ex‹nsiÚ__ + ({ + `__ty³of__ + ( +x +è +__x + = (x); __ty³of__ ( +y +è +__y + = (y); \ + +939 ! + `isunÜd”ed + ( +__x +, +__y +è&& __x <ð__y; })) + + ) + +940  + #i¦essg»©” +( +x +, +y +) \ + +941 ( + `__ex‹nsiÚ__ + ({ + `__ty³of__ + ( +x +è +__x + = (x); __ty³of__ ( +y +è +__y + = (y); \ + +942 ! + `isunÜd”ed + ( +__x +, +__y +è&& __x !ð__y; })) + + ) + +944  + #isunÜd”ed +( +x +, +y +) \ + +945 ( + `__ex‹nsiÚ__ + ({ + `__ty³of__ + ( +x +è +__u + = (x); __ty³of__ ( +y +è +__v + = (y); \ + +946 +__u + !ð +__v + && (__u !ð__u || __v !ð__v); })) + + ) + +951 #ifdeà +__USE_EXTERN_INLINES + + +952  + ~ + +957 #ià +defšed + +__FINITE_MATH_ONLY__ + && __FINITE_MATH_ONLY__ > 0 + +960  + #_MdoubË_ +  + + ) + +961  + #__MATH_DECLARING_DOUBLE + 1 + + ) + +962  + #__MATH_DECLARING_FLOATN + 0 + + ) + +963  + #__REDIRFROM_X +( +funùiÚ +, +»’Œªt +) \ + +964 +funùiÚ + ## +»’Œªt + + + ) + +965  + #__REDIRTO_X +( +funùiÚ +, +»’Œªt +) \ + +966 +__ + ## +funùiÚ + ## +»’Œªt + ## +_fš™e + + + ) + +967  + ~ + +968 #undeà +_MdoubË_ + + +969 #undeà +__MATH_DECLARING_DOUBLE + + +970 #undeà +__MATH_DECLARING_FLOATN + + +971 #undeà +__REDIRFROM_X + + +972 #undeà +__REDIRTO_X + + +976 #ifdeà +__USE_ISOC99 + + +979  + #_MdoubË_ +  + + ) + +980  + #__MATH_DECLARING_DOUBLE + 0 + + ) + +981  + #__MATH_DECLARING_FLOATN + 0 + + ) + +982  + #__REDIRFROM_X +( +funùiÚ +, +»’Œªt +) \ + +983 +funùiÚ + ## +f + ## +»’Œªt + + + ) + +984  + #__REDIRTO_X +( +funùiÚ +, +»’Œªt +) \ + +985 +__ + ## +funùiÚ + ## +f + ## +»’Œªt + ## +_fš™e + + + ) + +986  + ~ + +987 #undeà +_MdoubË_ + + +988 #undeà +__MATH_DECLARING_DOUBLE + + +989 #undeà +__MATH_DECLARING_FLOATN + + +990 #undeà +__REDIRFROM_X + + +991 #undeà +__REDIRTO_X + + +994 #ifdeà +__MATH_DECLARE_LDOUBLE + + +995  + #_MdoubË_ +  + + ) + +996  + #__MATH_DECLARING_DOUBLE + 0 + + ) + +997  + #__MATH_DECLARING_FLOATN + 0 + + ) + +998  + #__REDIRFROM_X +( +funùiÚ +, +»’Œªt +) \ + +999 +funùiÚ + ## +l + ## +»’Œªt + + + ) + +1000 #ifdeà +__NO_LONG_DOUBLE_MATH + + +1001  + #__REDIRTO_X +( +funùiÚ +, +»’Œªt +) \ + +1002 +__ + ## +funùiÚ + ## +»’Œªt + ## +_fš™e + + + ) + +1004  + #__REDIRTO_X +( +funùiÚ +, +»’Œªt +) \ + +1005 +__ + ## +funùiÚ + ## +l + ## +»’Œªt + ## +_fš™e + + + ) + +1007  + ~ + +1008 #undeà +_MdoubË_ + + +1009 #undeà +__MATH_DECLARING_DOUBLE + + +1010 #undeà +__MATH_DECLARING_FLOATN + + +1011 #undeà +__REDIRFROM_X + + +1012 #undeà +__REDIRTO_X + + +1019 #ià( +__HAVE_DISTINCT_FLOAT16 + || ( +__HAVE_FLOAT16 + && ! +defšed + +_LIBC +)) \ + +1020 && + $__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +1021  + #_MdoubË_ + +_Flßt16 + + + ) + +1022  + #__MATH_DECLARING_DOUBLE + 0 + + ) + +1023  + #__MATH_DECLARING_FLOATN + 1 + + ) + +1024  + #__REDIRFROM_X +( +funùiÚ +, +»’Œªt +) \ + +1025 +funùiÚ + ## +f16 + ## +»’Œªt + + + ) + +1026 #ià +__HAVE_DISTINCT_FLOAT16 + + +1027  + #__REDIRTO_X +( +funùiÚ +, +»’Œªt +) \ + +1028 +__ + ## +funùiÚ + ## +f16 + ## +»’Œªt + ## +_fš™e + + + ) + +1032  + ~ + +1033 #undeà +_MdoubË_ + + +1034 #undeà +__MATH_DECLARING_DOUBLE + + +1035 #undeà +__MATH_DECLARING_FLOATN + + +1036 #undeà +__REDIRFROM_X + + +1037 #undeà +__REDIRTO_X + + +1040 #ià( +__HAVE_DISTINCT_FLOAT32 + || ( +__HAVE_FLOAT32 + && ! +defšed + +_LIBC +)) \ + +1041 && + $__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +1042  + #_MdoubË_ + +_Flßt32 + + + ) + +1043  + #__MATH_DECLARING_DOUBLE + 0 + + ) + +1044  + #__MATH_DECLARING_FLOATN + 1 + + ) + +1045  + #__REDIRFROM_X +( +funùiÚ +, +»’Œªt +) \ + +1046 +funùiÚ + ## +f32 + ## +»’Œªt + + + ) + +1047 #ià +__HAVE_DISTINCT_FLOAT32 + + +1048  + #__REDIRTO_X +( +funùiÚ +, +»’Œªt +) \ + +1049 +__ + ## +funùiÚ + ## +f32 + ## +»’Œªt + ## +_fš™e + + + ) + +1051  + #__REDIRTO_X +( +funùiÚ +, +»’Œªt +) \ + +1052 +__ + ## +funùiÚ + ## +f + ## +»’Œªt + ## +_fš™e + + + ) + +1054  + ~ + +1055 #undeà +_MdoubË_ + + +1056 #undeà +__MATH_DECLARING_DOUBLE + + +1057 #undeà +__MATH_DECLARING_FLOATN + + +1058 #undeà +__REDIRFROM_X + + +1059 #undeà +__REDIRTO_X + + +1062 #ià( +__HAVE_DISTINCT_FLOAT64 + || ( +__HAVE_FLOAT64 + && ! +defšed + +_LIBC +)) \ + +1063 && + $__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +1064  + #_MdoubË_ + +_Flßt64 + + + ) + +1065  + #__MATH_DECLARING_DOUBLE + 0 + + ) + +1066  + #__MATH_DECLARING_FLOATN + 1 + + ) + +1067  + #__REDIRFROM_X +( +funùiÚ +, +»’Œªt +) \ + +1068 +funùiÚ + ## +f64 + ## +»’Œªt + + + ) + +1069 #ià +__HAVE_DISTINCT_FLOAT64 + + +1070  + #__REDIRTO_X +( +funùiÚ +, +»’Œªt +) \ + +1071 +__ + ## +funùiÚ + ## +f64 + ## +»’Œªt + ## +_fš™e + + + ) + +1073  + #__REDIRTO_X +( +funùiÚ +, +»’Œªt +) \ + +1074 +__ + ## +funùiÚ + ## +»’Œªt + ## +_fš™e + + + ) + +1076  + ~ + +1077 #undeà +_MdoubË_ + + +1078 #undeà +__MATH_DECLARING_DOUBLE + + +1079 #undeà +__MATH_DECLARING_FLOATN + + +1080 #undeà +__REDIRFROM_X + + +1081 #undeà +__REDIRTO_X + + +1084 #ià( +__HAVE_DISTINCT_FLOAT128 + || ( +__HAVE_FLOAT128 + && ! +defšed + +_LIBC +)) \ + +1085 && + $__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +1086  + #_MdoubË_ + +_Flßt128 + + + ) + +1087  + #__MATH_DECLARING_DOUBLE + 0 + + ) + +1088  + #__MATH_DECLARING_FLOATN + 1 + + ) + +1089  + #__REDIRFROM_X +( +funùiÚ +, +»’Œªt +) \ + +1090 +funùiÚ + ## +f128 + ## +»’Œªt + + + ) + +1091 #ià +__HAVE_DISTINCT_FLOAT128 + + +1092  + #__REDIRTO_X +( +funùiÚ +, +»’Œªt +) \ + +1093 +__ + ## +funùiÚ + ## +f128 + ## +»’Œªt + ## +_fš™e + + + ) + +1095  + #__REDIRTO_X +( +funùiÚ +, +»’Œªt +) \ + +1096 +__ + ## +funùiÚ + ## +l + ## +»’Œªt + ## +_fš™e + + + ) + +1098  + ~ + +1099 #undeà +_MdoubË_ + + +1100 #undeà +__MATH_DECLARING_DOUBLE + + +1101 #undeà +__MATH_DECLARING_FLOATN + + +1102 #undeà +__REDIRFROM_X + + +1103 #undeà +__REDIRTO_X + + +1106 #ià( +__HAVE_DISTINCT_FLOAT32X + || ( +__HAVE_FLOAT32X + && ! +defšed + +_LIBC +)) \ + +1107 && + $__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +1108  + #_MdoubË_ + +_Flßt32x + + + ) + +1109  + #__MATH_DECLARING_DOUBLE + 0 + + ) + +1110  + #__MATH_DECLARING_FLOATN + 1 + + ) + +1111  + #__REDIRFROM_X +( +funùiÚ +, +»’Œªt +) \ + +1112 +funùiÚ + ## +f32x + ## +»’Œªt + + + ) + +1113 #ià +__HAVE_DISTINCT_FLOAT32X + + +1114  + #__REDIRTO_X +( +funùiÚ +, +»’Œªt +) \ + +1115 +__ + ## +funùiÚ + ## +f32x + ## +»’Œªt + ## +_fš™e + + + ) + +1117  + #__REDIRTO_X +( +funùiÚ +, +»’Œªt +) \ + +1118 +__ + ## +funùiÚ + ## +»’Œªt + ## +_fš™e + + + ) + +1120  + ~ + +1121 #undeà +_MdoubË_ + + +1122 #undeà +__MATH_DECLARING_DOUBLE + + +1123 #undeà +__MATH_DECLARING_FLOATN + + +1124 #undeà +__REDIRFROM_X + + +1125 #undeà +__REDIRTO_X + + +1128 #ià( +__HAVE_DISTINCT_FLOAT64X + || ( +__HAVE_FLOAT64X + && ! +defšed + +_LIBC +)) \ + +1129 && + $__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +1130  + #_MdoubË_ + +_Flßt64x + + + ) + +1131  + #__MATH_DECLARING_DOUBLE + 0 + + ) + +1132  + #__MATH_DECLARING_FLOATN + 1 + + ) + +1133  + #__REDIRFROM_X +( +funùiÚ +, +»’Œªt +) \ + +1134 +funùiÚ + ## +f64x + ## +»’Œªt + + + ) + +1135 #ià +__HAVE_DISTINCT_FLOAT64X + + +1136  + #__REDIRTO_X +( +funùiÚ +, +»’Œªt +) \ + +1137 +__ + ## +funùiÚ + ## +f64x + ## +»’Œªt + ## +_fš™e + + + ) + +1138 #–ià +__HAVE_FLOAT64X_LONG_DOUBLE + + +1139  + #__REDIRTO_X +( +funùiÚ +, +»’Œªt +) \ + +1140 +__ + ## +funùiÚ + ## +l + ## +»’Œªt + ## +_fš™e + + + ) + +1142  + #__REDIRTO_X +( +funùiÚ +, +»’Œªt +) \ + +1143 +__ + ## +funùiÚ + ## +f128 + ## +»’Œªt + ## +_fš™e + + + ) + +1145  + ~ + +1146 #undeà +_MdoubË_ + + +1147 #undeà +__MATH_DECLARING_DOUBLE + + +1148 #undeà +__MATH_DECLARING_FLOATN + + +1149 #undeà +__REDIRFROM_X + + +1150 #undeà +__REDIRTO_X + + +1153 #ià( +__HAVE_DISTINCT_FLOAT128X + || ( +__HAVE_FLOAT128X + && ! +defšed + +_LIBC +)) \ + +1154 && + $__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +1155  + #_MdoubË_ + +_Flßt128x + + + ) + +1156  + #__MATH_DECLARING_DOUBLE + 0 + + ) + +1157  + #__MATH_DECLARING_FLOATN + 1 + + ) + +1158  + #__REDIRFROM_X +( +funùiÚ +, +»’Œªt +) \ + +1159 +funùiÚ + ## +f128x + ## +»’Œªt + + + ) + +1160 #ià +__HAVE_DISTINCT_FLOAT128X + + +1161  + #__REDIRTO_X +( +funùiÚ +, +»’Œªt +) \ + +1162 +__ + ## +funùiÚ + ## +f128x + ## +»’Œªt + ## +_fš™e + + + ) + +1166  + ~ + +1167 #undeà +_MdoubË_ + + +1168 #undeà +__MATH_DECLARING_DOUBLE + + +1169 #undeà +__MATH_DECLARING_FLOATN + + +1170 #undeà +__REDIRFROM_X + + +1171 #undeà +__REDIRTO_X + + +1176 #ià + `__GLIBC_USE + ( +IEC_60559_BFP_EXT +) + +1179 #ià +__FLT_EVAL_METHOD__ + == 2 || __FLT_EVAL_METHOD__ > 64 + +1180  + #__MATH_EVAL_FMT2 +( +x +, +y +è((xè+ (yè+ 0.0L) + + ) + +1181 #–ià +__FLT_EVAL_METHOD__ + == 1 || __FLT_EVAL_METHOD__ > 32 + +1182  + #__MATH_EVAL_FMT2 +( +x +, +y +è((xè+ (yè+ 0.0) + + ) + +1183 #–ià +__FLT_EVAL_METHOD__ + == 0 || __FLT_EVAL_METHOD__ == 32 + +1184  + #__MATH_EVAL_FMT2 +( +x +, +y +è((xè+ (yè+ 0.0f) + + ) + +1186  + #__MATH_EVAL_FMT2 +( +x +, +y +è((xè+ (y)) + + ) + +1191 #ià! +defšed + +__ýlu¥lus + || (__ýlu¥lu < 201103L && !defšed +__GNUC__ +) + +1192  + #i£qsig +( +x +, +y +) \ + +1193 + `__MATH_TG + ( + `__MATH_EVAL_FMT2 + ( +x +, +y +), +__i£qsig +, ((x), (y))) + + ) + +1206 +‹m¶©e +< +ty³Çme +>  +__i£qsig_ty³ +; + +1208 +‹m¶©e +<>  +__i£qsig_ty³ +<> + +1210  + `__ÿÎ + ( +__x +,  +__y +è + `throw + () + +1212  + `__i£qsigf + ( +__x +, +__y +); + +1216 +‹m¶©e +<>  +__i£qsig_ty³ +<> + +1218  + `__ÿÎ + ( +__x +,  +__y +è + `throw + () + +1220  + `__i£qsig + ( +__x +, +__y +); + +1224 +‹m¶©e +<>  +__i£qsig_ty³ +<> + +1226  + `__ÿÎ + ( +__x +,  +__y +è + `throw + () + +1228 #iâdeà +__NO_LONG_DOUBLE_MATH + + +1229  + `__i£qsigl + ( +__x +, +__y +); + +1231  + `__i£qsig + ( +__x +, +__y +); + +1236 #ià +__HAVE_DISTINCT_FLOAT128 + + +1237 +‹m¶©e +<>  +__i£qsig_ty³ +< +_Flßt128 +> + +1239  + `__ÿÎ + ( +_Flßt128 + +__x +, _Flßt128 +__y +è + `throw + () + +1241  + `__i£qsigf128 + ( +__x +, +__y +); + +1246 +‹m¶©e +< +ty³Çme + +_T1 +,y³Çm +_T2 +> + +1247 +šlše +  + +1248 + `i£qsig + ( +_T1 + +__x +, +_T2 + +__y +è + `throw + () + +1250 #ià +__ýlu¥lus + >= 201103L + +1251  + `deþty³ + ( + t__MATH_EVAL_FMT2 + ( + t__x +, + t__y +)è + t_T3 +; + +1253  + `__ty³of + ( + t__MATH_EVAL_FMT2 + ( + t__x +, + t__y +)è + t_T3 +; + +1255  +__i£qsig_ty³ +< +_T3 +>:: + `__ÿÎ + ( +__x +, +__y +); + +1258 + } +} + +1263 +__END_DECLS + + + @/usr/include/stdio.h + +23 #iâdeà +_STDIO_H + + +24  + #_STDIO_H + 1 + + ) + +26  + #__GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION + + + ) + +27  + ~ + +29 + g__BEGIN_DECLS + + +31  + #__Ãed_size_t + + + ) + +32  + #__Ãed_NULL + + + ) + +33  + ~<¡ddef.h +> + +35  + ~ + +36  + ~ + +37  + ~ + +39  + #_STDIO_USES_IOSTREAM + + + ) + +41  + ~ + +43 #ià +defšed + +__USE_XOPEN + || defšed +__USE_XOPEN2K8 + + +44 #ifdeà +__GNUC__ + + +45 #iâdeà +_VA_LIST_DEFINED + + +46  +_G_va_li¡ + + tva_li¡ +; + +47  + #_VA_LIST_DEFINED + + + ) + +50  + ~<¡d¬g.h +> + +54 #ià +defšed + +__USE_UNIX98 + || defšed +__USE_XOPEN2K + + +55 #iâdeà +__off_t_defšed + + +56 #iâdeà +__USE_FILE_OFFSET64 + + +57  +__off_t + + toff_t +; + +59  +__off64_t + + toff_t +; + +61  + #__off_t_defšed + + + ) + +63 #ià +defšed + +__USE_LARGEFILE64 + && !defšed +__off64_t_defšed + + +64  +__off64_t + + toff64_t +; + +65  + #__off64_t_defšed + + + ) + +69 #ifdeà +__USE_XOPEN2K8 + + +70 #iâdeà +__ssize_t_defšed + + +71  +__ssize_t + + tssize_t +; + +72  + #__ssize_t_defšed + + + ) + +77 #iâdeà +__USE_FILE_OFFSET64 + + +78  +_G_åos_t + + tåos_t +; + +80  +_G_åos64_t + + tåos_t +; + +82 #ifdeà +__USE_LARGEFILE64 + + +83  +_G_åos64_t + + tåos64_t +; + +87  + #_IOFBF + 0 + + ) + +88  + #_IOLBF + 1 + + ) + +89  + #_IONBF + 2 + + ) + +93 #iâdeà +BUFSIZ + + +94  + #BUFSIZ + +_IO_BUFSIZ + + + ) + +100 #iâdeà +EOF + + +101  + #EOF + (-1) + + ) + +107  + #SEEK_SET + 0 + + ) + +108  + #SEEK_CUR + 1 + + ) + +109  + #SEEK_END + 2 + + ) + +110 #ifdeà +__USE_GNU + + +111  + #SEEK_DATA + 3 + + ) + +112  + #SEEK_HOLE + 4 + + ) + +116 #ià +defšed + +__USE_MISC + || defšed +__USE_XOPEN + + +118  + #P_tmpdœ + "/tmp" + + ) + +131  + ~ + +135  +_IO_FILE + * +¡dš +; + +136  +_IO_FILE + * +¡dout +; + +137  +_IO_FILE + * +¡d”r +; + +139  + #¡dš + +¡dš + + + ) + +140  + #¡dout + +¡dout + + + ) + +141  + #¡d”r + +¡d”r + + + ) + +144  + $»move + (cÚ¡ * +__fž’ame +è +__THROW +; + +146  + $»Çme + (cÚ¡ * +__Þd +, cÚ¡ * +__Ãw +è +__THROW +; + +148 #ifdeà +__USE_ATFILE + + +150  + $»Çm—t + ( +__Þdfd +, cÚ¡ * +__Þd +,  +__Ãwfd +, + +151 cÚ¡ * +__Ãw +è +__THROW +; + +158 #iâdeà +__USE_FILE_OFFSET64 + + +159 +FILE + * + $tmpfže + (è +__wur +; + +161 #ifdeà +__REDIRECT + + +162 +FILE + * + `__REDIRECT + ( +tmpfže +, (), +tmpfže64 +è +__wur +; + +164  + #tmpfže + +tmpfže64 + + + ) + +168 #ifdeà +__USE_LARGEFILE64 + + +169 +FILE + * + $tmpfže64 + (è +__wur +; + +173 * + $tm²am + (* +__s +è +__THROW + +__wur +; + +175 #ifdeà +__USE_MISC + + +178 * + $tm²am_r + (* +__s +è +__THROW + +__wur +; + +182 #ià +defšed + +__USE_MISC + || defšed +__USE_XOPEN + + +190 * + $‹m²am + (cÚ¡ * +__dœ +, cÚ¡ * +__pfx +) + +191 +__THROW + +__©Œibu‹_m®loc__ + +__wur +; + +199  + `fþo£ + ( +FILE + * +__¡»am +); + +204  + `fæush + ( +FILE + * +__¡»am +); + +206 #ifdeà +__USE_MISC + + +213  + `fæush_uÆocked + ( +FILE + * +__¡»am +); + +216 #ifdeà +__USE_GNU + + +223  + `fþo£®l + (); + +227 #iâdeà +__USE_FILE_OFFSET64 + + +232 +FILE + * + $fݒ + (cÚ¡ * +__»¡riù + +__fž’ame +, + +233 cÚ¡ * +__»¡riù + +__modes +è +__wur +; + +238 +FILE + * + $äeݒ + (cÚ¡ * +__»¡riù + +__fž’ame +, + +239 cÚ¡ * +__»¡riù + +__modes +, + +240 +FILE + * +__»¡riù + +__¡»am +è +__wur +; + +242 #ifdeà +__REDIRECT + + +243 +FILE + * + `__REDIRECT + ( +fݒ +, (cÚ¡ * +__»¡riù + +__fž’ame +, + +244 cÚ¡ * +__»¡riù + +__modes +), +fݒ64 +) + +245 +__wur +; + +246 +FILE + * + `__REDIRECT + ( +äeݒ +, (cÚ¡ * +__»¡riù + +__fž’ame +, + +247 cÚ¡ * +__»¡riù + +__modes +, + +248 +FILE + * +__»¡riù + +__¡»am +), +äeݒ64 +) + +249 +__wur +; + +251  + #fݒ + +fݒ64 + + + ) + +252  + #äeݒ + +äeݒ64 + + + ) + +255 #ifdeà +__USE_LARGEFILE64 + + +256 +FILE + * + $fݒ64 + (cÚ¡ * +__»¡riù + +__fž’ame +, + +257 cÚ¡ * +__»¡riù + +__modes +è +__wur +; + +258 +FILE + * + $äeݒ64 + (cÚ¡ * +__»¡riù + +__fž’ame +, + +259 cÚ¡ * +__»¡riù + +__modes +, + +260 +FILE + * +__»¡riù + +__¡»am +è +__wur +; + +263 #ifdef +__USE_POSIX + + +265 +FILE + * + $fdݒ + ( +__fd +, cÚ¡ * +__modes +è +__THROW + +__wur +; + +268 #ifdef +__USE_GNU + + +271 +FILE + * + $fݒcook› + (* +__»¡riù + +__magic_cook› +, + +272 cÚ¡ * +__»¡riù + +__modes +, + +273 +_IO_cook›_io_funùiÚs_t + +__io_funcs +è +__THROW + +__wur +; + +276 #ià +defšed + +__USE_XOPEN2K8 + || + `__GLIBC_USE + ( +LIB_EXT2 +) + +278 +FILE + * + $fmemݒ + (* +__s +, +size_t + +__Ën +, cÚ¡ * +__modes +) + +279 +__THROW + +__wur +; + +284 +FILE + * + $ݒ_mem¡»am + (** +__buæoc +, +size_t + * +__siz–oc +è +__THROW + +__wur +; + +290  + $£tbuf + ( +FILE + * +__»¡riù + +__¡»am +, *__»¡riù +__buf +è +__THROW +; + +294  + $£tvbuf + ( +FILE + * +__»¡riù + +__¡»am +, *__»¡riù +__buf +, + +295  +__modes +, +size_t + +__n +è +__THROW +; + +297 #ifdef +__USE_MISC + + +300  + $£tbufãr + ( +FILE + * +__»¡riù + +__¡»am +, *__»¡riù +__buf +, + +301 +size_t + +__size +è +__THROW +; + +304  + $£Žšebuf + ( +FILE + * +__¡»am +è +__THROW +; + +312  + `årštf + ( +FILE + * +__»¡riù + +__¡»am +, + +313 cÚ¡ * +__»¡riù + +__fÜm© +, ...); + +318  + `´štf + (cÚ¡ * +__»¡riù + +__fÜm© +, ...); + +320  + $¥rštf + (* +__»¡riù + +__s +, + +321 cÚ¡ * +__»¡riù + +__fÜm© +, ...è +__THROWNL +; + +327  + `vårštf + ( +FILE + * +__»¡riù + +__s +, cÚ¡ *__»¡riù +__fÜm© +, + +328 +_G_va_li¡ + +__¬g +); + +333  + `v´štf + (cÚ¡ * +__»¡riù + +__fÜm© +, +_G_va_li¡ + +__¬g +); + +335  + $v¥rštf + (* +__»¡riù + +__s +, cÚ¡ *__»¡riù +__fÜm© +, + +336 +_G_va_li¡ + +__¬g +è +__THROWNL +; + +338 #ià +defšed + +__USE_ISOC99 + || defšed +__USE_UNIX98 + + +340  + $¢´štf + (* +__»¡riù + +__s +, +size_t + +__maxËn +, + +341 cÚ¡ * +__»¡riù + +__fÜm© +, ...) + +342 +__THROWNL + + `__©Œibu‹__ + (( + `__fÜm©__ + ( +__´štf__ +, 3, 4))); + +344  + $v¢´štf + (* +__»¡riù + +__s +, +size_t + +__maxËn +, + +345 cÚ¡ * +__»¡riù + +__fÜm© +, +_G_va_li¡ + +__¬g +) + +346 +__THROWNL + + `__©Œibu‹__ + (( + `__fÜm©__ + ( +__´štf__ +, 3, 0))); + +349 #ià + `__GLIBC_USE + ( +LIB_EXT2 +) + +352  + $va¥rštf + (** +__»¡riù + +__±r +, cÚ¡ *__»¡riù +__f +, + +353 +_G_va_li¡ + +__¬g +) + +354 +__THROWNL + + `__©Œibu‹__ + (( + $__fÜm©__ + ( +__´štf__ +, 2, 0))è +__wur +; + +355  + $__a¥rštf + (** +__»¡riù + +__±r +, + +356 cÚ¡ * +__»¡riù + +__fmt +, ...) + +357 +__THROWNL + + `__©Œibu‹__ + (( + $__fÜm©__ + ( +__´štf__ +, 2, 3))è +__wur +; + +358  + $a¥rštf + (** +__»¡riù + +__±r +, + +359 cÚ¡ * +__»¡riù + +__fmt +, ...) + +360 +__THROWNL + + `__©Œibu‹__ + (( + $__fÜm©__ + ( +__´štf__ +, 2, 3))è +__wur +; + +363 #ifdeà +__USE_XOPEN2K8 + + +365  + $vd´štf + ( +__fd +, cÚ¡ * +__»¡riù + +__fmt +, + +366 +_G_va_li¡ + +__¬g +) + +367 + `__©Œibu‹__ + (( + `__fÜm©__ + ( +__´štf__ +, 2, 0))); + +368  + $d´štf + ( +__fd +, cÚ¡ * +__»¡riù + +__fmt +, ...) + +369 + `__©Œibu‹__ + (( + `__fÜm©__ + ( +__´štf__ +, 2, 3))); + +377  + $fsÿnf + ( +FILE + * +__»¡riù + +__¡»am +, + +378 cÚ¡ * +__»¡riù + +__fÜm© +, ...è +__wur +; + +383  + $sÿnf + (cÚ¡ * +__»¡riù + +__fÜm© +, ...è +__wur +; + +385  + $ssÿnf + (cÚ¡ * +__»¡riù + +__s +, + +386 cÚ¡ * +__»¡riù + +__fÜm© +, ...è +__THROW +; + +388 #ià +defšed + +__USE_ISOC99 + && !defšed +__USE_GNU + \ + +389 && (! +defšed + +__LDBL_COMPAT + || !defšed +__REDIRECT +) \ + +390 && ( +defšed + +__STRICT_ANSI__ + || defšed +__USE_XOPEN2K +) + +391 #ifdeà +__REDIRECT + + +395  + `__REDIRECT + ( +fsÿnf +, ( +FILE + * +__»¡riù + +__¡»am +, + +396 cÚ¡ * +__»¡riù + +__fÜm© +, ...), + +397 +__isoc99_fsÿnf +è +__wur +; + +398  + `__REDIRECT + ( +sÿnf +, (cÚ¡ * +__»¡riù + +__fÜm© +, ...), + +399 +__isoc99_sÿnf +è +__wur +; + +400  + `__REDIRECT_NTH + ( +ssÿnf +, (cÚ¡ * +__»¡riù + +__s +, + +401 cÚ¡ * +__»¡riù + +__fÜm© +, ...), + +402 +__isoc99_ssÿnf +); + +404  + $__isoc99_fsÿnf + ( +FILE + * +__»¡riù + +__¡»am +, + +405 cÚ¡ * +__»¡riù + +__fÜm© +, ...è +__wur +; + +406  + $__isoc99_sÿnf + (cÚ¡ * +__»¡riù + +__fÜm© +, ...è +__wur +; + +407  + $__isoc99_ssÿnf + (cÚ¡ * +__»¡riù + +__s +, + +408 cÚ¡ * +__»¡riù + +__fÜm© +, ...è +__THROW +; + +409  + #fsÿnf + +__isoc99_fsÿnf + + + ) + +410  + #sÿnf + +__isoc99_sÿnf + + + ) + +411  + #ssÿnf + +__isoc99_ssÿnf + + + ) + +415 #ifdef +__USE_ISOC99 + + +420  + $vfsÿnf + ( +FILE + * +__»¡riù + +__s +, cÚ¡ *__»¡riù +__fÜm© +, + +421 +_G_va_li¡ + +__¬g +) + +422 + `__©Œibu‹__ + (( + $__fÜm©__ + ( +__sÿnf__ +, 2, 0))è +__wur +; + +428  + $vsÿnf + (cÚ¡ * +__»¡riù + +__fÜm© +, +_G_va_li¡ + +__¬g +) + +429 + `__©Œibu‹__ + (( + $__fÜm©__ + ( +__sÿnf__ +, 1, 0))è +__wur +; + +432  + $vssÿnf + (cÚ¡ * +__»¡riù + +__s +, + +433 cÚ¡ * +__»¡riù + +__fÜm© +, +_G_va_li¡ + +__¬g +) + +434 +__THROW + + `__©Œibu‹__ + (( + `__fÜm©__ + ( +__sÿnf__ +, 2, 0))); + +436 #ià! +defšed + +__USE_GNU + \ + +437 && (! +defšed + +__LDBL_COMPAT + || !defšed +__REDIRECT +) \ + +438 && ( +defšed + +__STRICT_ANSI__ + || defšed +__USE_XOPEN2K +) + +439 #ifdeà +__REDIRECT + + +443  + `__REDIRECT + ( +vfsÿnf +, + +444 ( +FILE + * +__»¡riù + +__s +, + +445 cÚ¡ * +__»¡riù + +__fÜm© +, +_G_va_li¡ + +__¬g +), + +446 +__isoc99_vfsÿnf +) + +447 + `__©Œibu‹__ + (( + $__fÜm©__ + ( +__sÿnf__ +, 2, 0))è +__wur +; + +448  + `__REDIRECT + ( +vsÿnf +, (cÚ¡ * +__»¡riù + +__fÜm© +, + +449 +_G_va_li¡ + +__¬g +), +__isoc99_vsÿnf +) + +450 + `__©Œibu‹__ + (( + $__fÜm©__ + ( +__sÿnf__ +, 1, 0))è +__wur +; + +451  + `__REDIRECT_NTH + ( +vssÿnf +, + +452 (cÚ¡ * +__»¡riù + +__s +, + +453 cÚ¡ * +__»¡riù + +__fÜm© +, + +454 +_G_va_li¡ + +__¬g +), +__isoc99_vssÿnf +) + +455 + `__©Œibu‹__ + (( + `__fÜm©__ + ( +__sÿnf__ +, 2, 0))); + +457  + $__isoc99_vfsÿnf + ( +FILE + * +__»¡riù + +__s +, + +458 cÚ¡ * +__»¡riù + +__fÜm© +, + +459 +_G_va_li¡ + +__¬g +è +__wur +; + +460  + $__isoc99_vsÿnf + (cÚ¡ * +__»¡riù + +__fÜm© +, + +461 +_G_va_li¡ + +__¬g +è +__wur +; + +462  + $__isoc99_vssÿnf + (cÚ¡ * +__»¡riù + +__s +, + +463 cÚ¡ * +__»¡riù + +__fÜm© +, + +464 +_G_va_li¡ + +__¬g +è +__THROW +; + +465  + #vfsÿnf + +__isoc99_vfsÿnf + + + ) + +466  + #vsÿnf + +__isoc99_vsÿnf + + + ) + +467  + #vssÿnf + +__isoc99_vssÿnf + + + ) + +477  + `fg‘c + ( +FILE + * +__¡»am +); + +478  + `g‘c + ( +FILE + * +__¡»am +); + +484  + `g‘ch¬ + (); + +488  + #g‘c +( +_å +è + `_IO_g‘c + (_å) + + ) + +490 #ifdeà +__USE_POSIX199506 + + +495  + `g‘c_uÆocked + ( +FILE + * +__¡»am +); + +496  + `g‘ch¬_uÆocked + (); + +499 #ifdeà +__USE_MISC + + +506  + `fg‘c_uÆocked + ( +FILE + * +__¡»am +); + +517  + `åutc + ( +__c +, +FILE + * +__¡»am +); + +518  + `putc + ( +__c +, +FILE + * +__¡»am +); + +524  + `putch¬ + ( +__c +); + +528  + #putc +( +_ch +, +_å +è + `_IO_putc + (_ch, _å) + + ) + +530 #ifdeà +__USE_MISC + + +537  + `åutc_uÆocked + ( +__c +, +FILE + * +__¡»am +); + +540 #ifdeà +__USE_POSIX199506 + + +545  + `putc_uÆocked + ( +__c +, +FILE + * +__¡»am +); + +546  + `putch¬_uÆocked + ( +__c +); + +550 #ià +defšed + +__USE_MISC + \ + +551 || ( +defšed + +__USE_XOPEN + && !defšed +__USE_XOPEN2K +) + +553  + `g‘w + ( +FILE + * +__¡»am +); + +556  + `putw + ( +__w +, +FILE + * +__¡»am +); + +564 * + $fg‘s + (* +__»¡riù + +__s +,  +__n +, +FILE + *__»¡riù +__¡»am +) + +565 +__wur +; + +567 #ià + `__GLIBC_USE + ( +DEPRECATED_GETS +) + +577 * + $g‘s + (* +__s +è +__wur + +__©Œibu‹_d•»ÿ‹d__ +; + +580 #ifdeà +__USE_GNU + + +587 * + $fg‘s_uÆocked + (* +__»¡riù + +__s +,  +__n +, + +588 +FILE + * +__»¡riù + +__¡»am +è +__wur +; + +592 #ià +defšed + +__USE_XOPEN2K8 + || + `__GLIBC_USE + ( +LIB_EXT2 +) + +603 +_IO_ssize_t + + $__g‘d–im + (** +__»¡riù + +__lš•Œ +, + +604 +size_t + * +__»¡riù + +__n +,  +__d–im™” +, + +605 +FILE + * +__»¡riù + +__¡»am +è +__wur +; + +606 +_IO_ssize_t + + $g‘d–im + (** +__»¡riù + +__lš•Œ +, + +607 +size_t + * +__»¡riù + +__n +,  +__d–im™” +, + +608 +FILE + * +__»¡riù + +__¡»am +è +__wur +; + +616 +_IO_ssize_t + + $g‘lše + (** +__»¡riù + +__lš•Œ +, + +617 +size_t + * +__»¡riù + +__n +, + +618 +FILE + * +__»¡riù + +__¡»am +è +__wur +; + +626  + `åuts + (cÚ¡ * +__»¡riù + +__s +, +FILE + *__»¡riù +__¡»am +); + +632  + `puts + (cÚ¡ * +__s +); + +639  + `ung‘c + ( +__c +, +FILE + * +__¡»am +); + +646 +size_t + + $ä—d + (* +__»¡riù + +__±r +, +size_t + +__size +, + +647 +size_t + +__n +, +FILE + * +__»¡riù + +__¡»am +è +__wur +; + +652 +size_t + + `fwr™e + (cÚ¡ * +__»¡riù + +__±r +, size_ˆ +__size +, + +653 +size_t + +__n +, +FILE + * +__»¡riù + +__s +); + +655 #ifdeà +__USE_GNU + + +662  + `åuts_uÆocked + (cÚ¡ * +__»¡riù + +__s +, + +663 +FILE + * +__»¡riù + +__¡»am +); + +666 #ifdeà +__USE_MISC + + +673 +size_t + + $ä—d_uÆocked + (* +__»¡riù + +__±r +, +size_t + +__size +, + +674 +size_t + +__n +, +FILE + * +__»¡riù + +__¡»am +è +__wur +; + +675 +size_t + + `fwr™e_uÆocked + (cÚ¡ * +__»¡riù + +__±r +, size_ˆ +__size +, + +676 +size_t + +__n +, +FILE + * +__»¡riù + +__¡»am +); + +684  + `f£ek + ( +FILE + * +__¡»am +,  +__off +,  +__wh’û +); + +689  + $á–l + ( +FILE + * +__¡»am +è +__wur +; + +694  + `»wšd + ( +FILE + * +__¡»am +); + +701 #ià +defšed + +__USE_LARGEFILE + || defšed +__USE_XOPEN2K + + +702 #iâdeà +__USE_FILE_OFFSET64 + + +707  + `f£eko + ( +FILE + * +__¡»am +, +__off_t + +__off +,  +__wh’û +); + +712 +__off_t + + $á–lo + ( +FILE + * +__¡»am +è +__wur +; + +714 #ifdeà +__REDIRECT + + +715  + `__REDIRECT + ( +f£eko +, + +716 ( +FILE + * +__¡»am +, +__off64_t + +__off +,  +__wh’û +), + +717 +f£eko64 +); + +718 +__off64_t + + `__REDIRECT + ( +á–lo +, ( +FILE + * +__¡»am +), +á–lo64 +); + +720  + #f£eko + +f£eko64 + + + ) + +721  + #á–lo + +á–lo64 + + + ) + +726 #iâdeà +__USE_FILE_OFFSET64 + + +731  + `fg‘pos + ( +FILE + * +__»¡riù + +__¡»am +, +åos_t + *__»¡riù +__pos +); + +736  + `f£os + ( +FILE + * +__¡»am +, cÚ¡ +åos_t + * +__pos +); + +738 #ifdeà +__REDIRECT + + +739  + `__REDIRECT + ( +fg‘pos +, ( +FILE + * +__»¡riù + +__¡»am +, + +740 +åos_t + * +__»¡riù + +__pos +), +fg‘pos64 +); + +741  + `__REDIRECT + ( +f£os +, + +742 ( +FILE + * +__¡»am +, cÚ¡ +åos_t + * +__pos +), +f£os64 +); + +744  + #fg‘pos + +fg‘pos64 + + + ) + +745  + #f£os + +f£os64 + + + ) + +749 #ifdeà +__USE_LARGEFILE64 + + +750  + `f£eko64 + ( +FILE + * +__¡»am +, +__off64_t + +__off +,  +__wh’û +); + +751 +__off64_t + + $á–lo64 + ( +FILE + * +__¡»am +è +__wur +; + +752  + `fg‘pos64 + ( +FILE + * +__»¡riù + +__¡»am +, +åos64_t + *__»¡riù +__pos +); + +753  + `f£os64 + ( +FILE + * +__¡»am +, cÚ¡ +åos64_t + * +__pos +); + +757  + $þ—»¼ + ( +FILE + * +__¡»am +è +__THROW +; + +759  + $ãof + ( +FILE + * +__¡»am +è +__THROW + +__wur +; + +761  + $ã¼Ü + ( +FILE + * +__¡»am +è +__THROW + +__wur +; + +763 #ifdeà +__USE_MISC + + +765  + $þ—»¼_uÆocked + ( +FILE + * +__¡»am +è +__THROW +; + +766  + $ãof_uÆocked + ( +FILE + * +__¡»am +è +__THROW + +__wur +; + +767  + $ã¼Ü_uÆocked + ( +FILE + * +__¡»am +è +__THROW + +__wur +; + +775  + `³¼Ü + (cÚ¡ * +__s +); + +781  + ~ + +784 #ifdef +__USE_POSIX + + +786  + $fž’o + ( +FILE + * +__¡»am +è +__THROW + +__wur +; + +789 #ifdeà +__USE_MISC + + +791  + $fž’o_uÆocked + ( +FILE + * +__¡»am +è +__THROW + +__wur +; + +795 #ifdeà +__USE_POSIX2 + + +800 +FILE + * + $pݒ + (cÚ¡ * +__commªd +, cÚ¡ * +__modes +è +__wur +; + +806  + `pþo£ + ( +FILE + * +__¡»am +); + +810 #ifdef +__USE_POSIX + + +812 * + $ù”mid + (* +__s +è +__THROW +; + +816 #ià( +defšed + +__USE_XOPEN + && !defšed +__USE_XOPEN2K +è|| defšed +__USE_GNU + + +818 * + `cu£rid + (* +__s +); + +822 #ifdef +__USE_GNU + + +823  +ob¡ack +; + +826  + $ob¡ack_´štf + ( +ob¡ack + * +__»¡riù + +__ob¡ack +, + +827 cÚ¡ * +__»¡riù + +__fÜm© +, ...) + +828 +__THROWNL + + `__©Œibu‹__ + (( + `__fÜm©__ + ( +__´štf__ +, 2, 3))); + +829  + $ob¡ack_v´štf + ( +ob¡ack + * +__»¡riù + +__ob¡ack +, + +830 cÚ¡ * +__»¡riù + +__fÜm© +, + +831 +_G_va_li¡ + +__¬gs +) + +832 +__THROWNL + + `__©Œibu‹__ + (( + `__fÜm©__ + ( +__´štf__ +, 2, 0))); + +836 #ifdeà +__USE_POSIX199506 + + +840  + $æockfže + ( +FILE + * +__¡»am +è +__THROW +; + +844  + $árylockfže + ( +FILE + * +__¡»am +è +__THROW + +__wur +; + +847  + $fuÆockfže + ( +FILE + * +__¡»am +è +__THROW +; + +850 #ià +defšed + +__USE_XOPEN + && !defšed +__USE_XOPEN2K + && !defšed +__USE_GNU + + +853  + ~ + +858 #ifdeà +__USE_EXTERN_INLINES + + +859  + ~ + +861 #ià +__USE_FORTIFY_LEVEL + > 0 && +defšed + +__fÜtify_funùiÚ + + +862  + ~ + +864 #ifdeà +__LDBL_COMPAT + + +865  + ~ + +868 +__END_DECLS + + + @/usr/include/stdlib.h + +22 #iâdef +_STDLIB_H + + +24  + #__GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION + + + ) + +25  + ~ + +28  + #__Ãed_size_t + + + ) + +29  + #__Ãed_wch¬_t + + + ) + +30  + #__Ãed_NULL + + + ) + +31  + ~<¡ddef.h +> + +33 + g__BEGIN_DECLS + + +35  + #_STDLIB_H + 1 + + ) + +37 #ià( +defšed + +__USE_XOPEN + || defšed +__USE_XOPEN2K8 +è&& !defšed +_SYS_WAIT_H + + +39  + ~ + +40  + ~ + +43  + #WEXITSTATUS +( +¡©us +è + `__WEXITSTATUS + (¡©us) + + ) + +44  + #WTERMSIG +( +¡©us +è + `__WTERMSIG + (¡©us) + + ) + +45  + #WSTOPSIG +( +¡©us +è + `__WSTOPSIG + (¡©us) + + ) + +46  + #WIFEXITED +( +¡©us +è + `__WIFEXITED + (¡©us) + + ) + +47  + #WIFSIGNALED +( +¡©us +è + `__WIFSIGNALED + (¡©us) + + ) + +48  + #WIFSTOPPED +( +¡©us +è + `__WIFSTOPPED + (¡©us) + + ) + +49 #ifdeà +__WIFCONTINUED + + +50  + #WIFCONTINUED +( +¡©us +è + `__WIFCONTINUED + (¡©us) + + ) + +55  + ~ + +60  + mquÙ +; + +61  + m»m +; + +62 } + tdiv_t +; + +65 #iâdeà +__ldiv_t_defšed + + +68  + mquÙ +; + +69  + m»m +; + +70 } + tldiv_t +; + +71  + #__ldiv_t_defšed + 1 + + ) + +74 #ià +defšed + +__USE_ISOC99 + && !defšed +__Îdiv_t_defšed + + +76 +__ex‹nsiÚ__ + struct + +78  + mquÙ +; + +79  + m»m +; + +80 } + tÎdiv_t +; + +81  + #__Îdiv_t_defšed + 1 + + ) + +86  + #RAND_MAX + 2147483647 + + ) + +91  + #EXIT_FAILURE + 1 + + ) + +92  + #EXIT_SUCCESS + 0 + + ) + +96  + #MB_CUR_MAX + ( + `__ùy³_g‘_mb_cur_max + ()) + + ) + +97 +size_t + + $__ùy³_g‘_mb_cur_max + (è +__THROW + +__wur +; + +101  + $©of + (cÚ¡ * +__Ō +) + +102 +__THROW + +__©Œibu‹_pu»__ + + `__nÚnuÎ + ((1)è +__wur +; + +104  + $©oi + (cÚ¡ * +__Ō +) + +105 +__THROW + +__©Œibu‹_pu»__ + + `__nÚnuÎ + ((1)è +__wur +; + +107  + $©Þ + (cÚ¡ * +__Ō +) + +108 +__THROW + +__©Œibu‹_pu»__ + + `__nÚnuÎ + ((1)è +__wur +; + +110 #ifdeà +__USE_ISOC99 + + +112 +__ex‹nsiÚ__ +  + $©Þl + (cÚ¡ * +__Ō +) + +113 +__THROW + +__©Œibu‹_pu»__ + + `__nÚnuÎ + ((1)è +__wur +; + +117  + $¡¹od + (cÚ¡ * +__»¡riù + +__Ō +, + +118 ** +__»¡riù + +__’d±r +) + +119 +__THROW + + `__nÚnuÎ + ((1)); + +121 #ifdef +__USE_ISOC99 + + +123  + $¡¹of + (cÚ¡ * +__»¡riù + +__Ō +, + +124 ** +__»¡riù + +__’d±r +è +__THROW + + `__nÚnuÎ + ((1)); + +126  + $¡¹Þd + (cÚ¡ * +__»¡riù + +__Ō +, + +127 ** +__»¡riù + +__’d±r +) + +128 +__THROW + + `__nÚnuÎ + ((1)); + +133 #ià +__HAVE_FLOAT16 + && + `__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +134 +_Flßt16 + + $¡¹of16 + (cÚ¡ * +__»¡riù + +__Ō +, + +135 ** +__»¡riù + +__’d±r +) + +136 +__THROW + + `__nÚnuÎ + ((1)); + +139 #ià +__HAVE_FLOAT32 + && + `__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +140 +_Flßt32 + + $¡¹of32 + (cÚ¡ * +__»¡riù + +__Ō +, + +141 ** +__»¡riù + +__’d±r +) + +142 +__THROW + + `__nÚnuÎ + ((1)); + +145 #ià +__HAVE_FLOAT64 + && + `__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +146 +_Flßt64 + + $¡¹of64 + (cÚ¡ * +__»¡riù + +__Ō +, + +147 ** +__»¡riù + +__’d±r +) + +148 +__THROW + + `__nÚnuÎ + ((1)); + +151 #ià +__HAVE_FLOAT128 + && + `__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +152 +_Flßt128 + + $¡¹of128 + (cÚ¡ * +__»¡riù + +__Ō +, + +153 ** +__»¡riù + +__’d±r +) + +154 +__THROW + + `__nÚnuÎ + ((1)); + +157 #ià +__HAVE_FLOAT32X + && + `__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +158 +_Flßt32x + + $¡¹of32x + (cÚ¡ * +__»¡riù + +__Ō +, + +159 ** +__»¡riù + +__’d±r +) + +160 +__THROW + + `__nÚnuÎ + ((1)); + +163 #ià +__HAVE_FLOAT64X + && + `__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +164 +_Flßt64x + + $¡¹of64x + (cÚ¡ * +__»¡riù + +__Ō +, + +165 ** +__»¡riù + +__’d±r +) + +166 +__THROW + + `__nÚnuÎ + ((1)); + +169 #ià +__HAVE_FLOAT128X + && + `__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +170 +_Flßt128x + + $¡¹of128x + (cÚ¡ * +__»¡riù + +__Ō +, + +171 ** +__»¡riù + +__’d±r +) + +172 +__THROW + + `__nÚnuÎ + ((1)); + +176  + $¡¹Þ + (cÚ¡ * +__»¡riù + +__Ō +, + +177 ** +__»¡riù + +__’d±r +,  +__ba£ +) + +178 +__THROW + + `__nÚnuÎ + ((1)); + +180  + $¡¹oul + (cÚ¡ * +__»¡riù + +__Ō +, + +181 ** +__»¡riù + +__’d±r +,  +__ba£ +) + +182 +__THROW + + `__nÚnuÎ + ((1)); + +184 #ifdeà +__USE_MISC + + +186 +__ex‹nsiÚ__ + + +187  + $¡¹oq + (cÚ¡ * +__»¡riù + +__Ō +, + +188 ** +__»¡riù + +__’d±r +,  +__ba£ +) + +189 +__THROW + + `__nÚnuÎ + ((1)); + +191 +__ex‹nsiÚ__ + + +192  + $¡¹ouq + (cÚ¡ * +__»¡riù + +__Ō +, + +193 ** +__»¡riù + +__’d±r +,  +__ba£ +) + +194 +__THROW + + `__nÚnuÎ + ((1)); + +197 #ifdeà +__USE_ISOC99 + + +199 +__ex‹nsiÚ__ + + +200  + $¡¹Þl + (cÚ¡ * +__»¡riù + +__Ō +, + +201 ** +__»¡riù + +__’d±r +,  +__ba£ +) + +202 +__THROW + + `__nÚnuÎ + ((1)); + +204 +__ex‹nsiÚ__ + + +205  + $¡¹ouÎ + (cÚ¡ * +__»¡riù + +__Ō +, + +206 ** +__»¡riù + +__’d±r +,  +__ba£ +) + +207 +__THROW + + `__nÚnuÎ + ((1)); + +211 #ià + `__GLIBC_USE + ( +IEC_60559_BFP_EXT +) + +212  + $¡räomd + (* +__de¡ +, +size_t + +__size +, cÚ¡ * +__fÜm© +, + +213  +__f +) + +214 +__THROW + + `__nÚnuÎ + ((3)); + +216  + $¡räomf + (* +__de¡ +, +size_t + +__size +, cÚ¡ * +__fÜm© +, + +217  +__f +) + +218 +__THROW + + `__nÚnuÎ + ((3)); + +220  + $¡räoml + (* +__de¡ +, +size_t + +__size +, cÚ¡ * +__fÜm© +, + +221  +__f +) + +222 +__THROW + + `__nÚnuÎ + ((3)); + +225 #ià +__HAVE_FLOAT16 + && + `__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +226  + $¡räomf16 + (* +__de¡ +, +size_t + +__size +, cÚ¡ * +__fÜm© +, + +227 +_Flßt16 + +__f +) + +228 +__THROW + + `__nÚnuÎ + ((3)); + +231 #ià +__HAVE_FLOAT32 + && + `__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +232  + $¡räomf32 + (* +__de¡ +, +size_t + +__size +, cÚ¡ * +__fÜm© +, + +233 +_Flßt32 + +__f +) + +234 +__THROW + + `__nÚnuÎ + ((3)); + +237 #ià +__HAVE_FLOAT64 + && + `__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +238  + $¡räomf64 + (* +__de¡ +, +size_t + +__size +, cÚ¡ * +__fÜm© +, + +239 +_Flßt64 + +__f +) + +240 +__THROW + + `__nÚnuÎ + ((3)); + +243 #ià +__HAVE_FLOAT128 + && + `__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +244  + $¡räomf128 + (* +__de¡ +, +size_t + +__size +, cÚ¡ * +__fÜm© +, + +245 +_Flßt128 + +__f +) + +246 +__THROW + + `__nÚnuÎ + ((3)); + +249 #ià +__HAVE_FLOAT32X + && + `__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +250  + $¡räomf32x + (* +__de¡ +, +size_t + +__size +, cÚ¡ * +__fÜm© +, + +251 +_Flßt32x + +__f +) + +252 +__THROW + + `__nÚnuÎ + ((3)); + +255 #ià +__HAVE_FLOAT64X + && + `__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +256  + $¡räomf64x + (* +__de¡ +, +size_t + +__size +, cÚ¡ * +__fÜm© +, + +257 +_Flßt64x + +__f +) + +258 +__THROW + + `__nÚnuÎ + ((3)); + +261 #ià +__HAVE_FLOAT128X + && + `__GLIBC_USE + ( +IEC_60559_TYPES_EXT +) + +262  + $¡räomf128x + (* +__de¡ +, +size_t + +__size +, cÚ¡ * +__fÜm© +, + +263 +_Flßt128x + +__f +) + +264 +__THROW + + `__nÚnuÎ + ((3)); + +268 #ifdeà +__USE_GNU + + +272  + ~ + +274  + $¡¹Þ_l + (cÚ¡ * +__»¡riù + +__Ō +, + +275 ** +__»¡riù + +__’d±r +,  +__ba£ +, + +276 +loÿË_t + +__loc +è +__THROW + + `__nÚnuÎ + ((1, 4)); + +278  + $¡¹oul_l + (cÚ¡ * +__»¡riù + +__Ō +, + +279 ** +__»¡riù + +__’d±r +, + +280  +__ba£ +, +loÿË_t + +__loc +) + +281 +__THROW + + `__nÚnuÎ + ((1, 4)); + +283 +__ex‹nsiÚ__ + + +284  + $¡¹Þl_l + (cÚ¡ * +__»¡riù + +__Ō +, + +285 ** +__»¡riù + +__’d±r +,  +__ba£ +, + +286 +loÿË_t + +__loc +) + +287 +__THROW + + `__nÚnuÎ + ((1, 4)); + +289 +__ex‹nsiÚ__ + + +290  + $¡¹ouÎ_l + (cÚ¡ * +__»¡riù + +__Ō +, + +291 ** +__»¡riù + +__’d±r +, + +292  +__ba£ +, +loÿË_t + +__loc +) + +293 +__THROW + + `__nÚnuÎ + ((1, 4)); + +295  + $¡¹od_l + (cÚ¡ * +__»¡riù + +__Ō +, + +296 ** +__»¡riù + +__’d±r +, +loÿË_t + +__loc +) + +297 +__THROW + + `__nÚnuÎ + ((1, 3)); + +299  + $¡¹of_l + (cÚ¡ * +__»¡riù + +__Ō +, + +300 ** +__»¡riù + +__’d±r +, +loÿË_t + +__loc +) + +301 +__THROW + + `__nÚnuÎ + ((1, 3)); + +303  + $¡¹Þd_l + (cÚ¡ * +__»¡riù + +__Ō +, + +304 ** +__»¡riù + +__’d±r +, + +305 +loÿË_t + +__loc +) + +306 +__THROW + + `__nÚnuÎ + ((1, 3)); + +308 #ià +__HAVE_FLOAT16 + + +309 +_Flßt16 + + $¡¹of16_l + (cÚ¡ * +__»¡riù + +__Ō +, + +310 ** +__»¡riù + +__’d±r +, + +311 +loÿË_t + +__loc +) + +312 +__THROW + + `__nÚnuÎ + ((1, 3)); + +315 #ià +__HAVE_FLOAT32 + + +316 +_Flßt32 + + $¡¹of32_l + (cÚ¡ * +__»¡riù + +__Ō +, + +317 ** +__»¡riù + +__’d±r +, + +318 +loÿË_t + +__loc +) + +319 +__THROW + + `__nÚnuÎ + ((1, 3)); + +322 #ià +__HAVE_FLOAT64 + + +323 +_Flßt64 + + $¡¹of64_l + (cÚ¡ * +__»¡riù + +__Ō +, + +324 ** +__»¡riù + +__’d±r +, + +325 +loÿË_t + +__loc +) + +326 +__THROW + + `__nÚnuÎ + ((1, 3)); + +329 #ià +__HAVE_FLOAT128 + + +330 +_Flßt128 + + $¡¹of128_l + (cÚ¡ * +__»¡riù + +__Ō +, + +331 ** +__»¡riù + +__’d±r +, + +332 +loÿË_t + +__loc +) + +333 +__THROW + + `__nÚnuÎ + ((1, 3)); + +336 #ià +__HAVE_FLOAT32X + + +337 +_Flßt32x + + $¡¹of32x_l + (cÚ¡ * +__»¡riù + +__Ō +, + +338 ** +__»¡riù + +__’d±r +, + +339 +loÿË_t + +__loc +) + +340 +__THROW + + `__nÚnuÎ + ((1, 3)); + +343 #ià +__HAVE_FLOAT64X + + +344 +_Flßt64x + + $¡¹of64x_l + (cÚ¡ * +__»¡riù + +__Ō +, + +345 ** +__»¡riù + +__’d±r +, + +346 +loÿË_t + +__loc +) + +347 +__THROW + + `__nÚnuÎ + ((1, 3)); + +350 #ià +__HAVE_FLOAT128X + + +351 +_Flßt128x + + $¡¹of128x_l + (cÚ¡ * +__»¡riù + +__Ō +, + +352 ** +__»¡riù + +__’d±r +, + +353 +loÿË_t + +__loc +) + +354 +__THROW + + `__nÚnuÎ + ((1, 3)); + +359 #ifdeà +__USE_EXTERN_INLINES + + +360 +__ex‹º_šlše +  + +361 + `__NTH + ( + $©oi + (cÚ¡ * +__Ō +)) + +363  (è + `¡¹Þ + ( +__Ō +, (**è +NULL +, 10); + +364 + } +} + +365 +__ex‹º_šlše +  + +366 +__NTH + ( + $©Þ + (cÚ¡ * +__Ō +)) + +368  + `¡¹Þ + ( +__Ō +, (**è +NULL +, 10); + +369 + } +} + +371 #ifdeà +__USE_ISOC99 + + +372 +__ex‹nsiÚ__ + +__ex‹º_šlše +  + +373 +__NTH + ( + $©Þl + (cÚ¡ * +__Ō +)) + +375  + `¡¹Þl + ( +__Ō +, (**è +NULL +, 10); + +376 + } +} + +381 #ià +defšed + +__USE_MISC + || defšed +__USE_XOPEN_EXTENDED + + +385 * + $l64a + ( +__n +è +__THROW + +__wur +; + +388  + $a64l + (cÚ¡ * +__s +) + +389 +__THROW + +__©Œibu‹_pu»__ + + `__nÚnuÎ + ((1)è +__wur +; + +393 #ià +defšed + +__USE_MISC + || defšed +__USE_XOPEN_EXTENDED + + +394  + ~ + +401  + $¿ndom + (è +__THROW +; + +404  + $¤ªdom + ( +__£ed +è +__THROW +; + +410 * + $𙡩e + ( +__£ed +, * +__¡©ebuf +, + +411 +size_t + +__¡©–’ +è +__THROW + + `__nÚnuÎ + ((2)); + +415 * + $£t¡©e + (* +__¡©ebuf +è +__THROW + + `__nÚnuÎ + ((1)); + +418 #ifdeà +__USE_MISC + + +423  + s¿ndom_d©a + + +425 +št32_t + * +åŒ +; + +426 +št32_t + * +½Œ +; + +427 +št32_t + * +¡©e +; + +428  +¿nd_ty³ +; + +429  +¿nd_deg +; + +430  +¿nd_£p +; + +431 +št32_t + * +’d_±r +; + +434  + $¿ndom_r + ( +¿ndom_d©a + * +__»¡riù + +__buf +, + +435 +št32_t + * +__»¡riù + +__»suÉ +è +__THROW + + `__nÚnuÎ + ((1, 2)); + +437  + $¤ªdom_r + ( +__£ed +,  +¿ndom_d©a + * +__buf +) + +438 +__THROW + + `__nÚnuÎ + ((2)); + +440  + $𙡩e_r + ( +__£ed +, * +__»¡riù + +__¡©ebuf +, + +441 +size_t + +__¡©–’ +, + +442  +¿ndom_d©a + * +__»¡riù + +__buf +) + +443 +__THROW + + `__nÚnuÎ + ((2, 4)); + +445  + $£t¡©e_r + (* +__»¡riù + +__¡©ebuf +, + +446  +¿ndom_d©a + * +__»¡riù + +__buf +) + +447 +__THROW + + `__nÚnuÎ + ((1, 2)); + +453  + $¿nd + (è +__THROW +; + +455  + $¤ªd + ( +__£ed +è +__THROW +; + +457 #ifdeà +__USE_POSIX199506 + + +459  + $¿nd_r + (* +__£ed +è +__THROW +; + +463 #ià +defšed + +__USE_MISC + || defšed +__USE_XOPEN + + +467  + $d¿nd48 + (è +__THROW +; + +468  + $”ªd48 + ( +__xsubi +[3]è +__THROW + + `__nÚnuÎ + ((1)); + +471  + $̪d48 + (è +__THROW +; + +472  + $Īd48 + ( +__xsubi +[3]) + +473 +__THROW + + `__nÚnuÎ + ((1)); + +476  + $m¿nd48 + (è +__THROW +; + +477  + $j¿nd48 + ( +__xsubi +[3]) + +478 +__THROW + + `__nÚnuÎ + ((1)); + +481  + $¤ªd48 + ( +__£edv® +è +__THROW +; + +482 * + $£ed48 + ( +__£ed16v +[3]) + +483 +__THROW + + `__nÚnuÎ + ((1)); + +484  + $lcÚg48 + ( +__·¿m +[7]è +__THROW + + `__nÚnuÎ + ((1)); + +486 #ifdeà +__USE_MISC + + +490  + sd¿nd48_d©a + + +492  +__x +[3]; + +493  +__Þd_x +[3]; + +494  +__c +; + +495  +__š™ +; + +496 +__ex‹nsiÚ__ +  +__a +; + +501  + $d¿nd48_r + ( +d¿nd48_d©a + * +__»¡riù + +__bufãr +, + +502 * +__»¡riù + +__»suÉ +è +__THROW + + `__nÚnuÎ + ((1, 2)); + +503  + $”ªd48_r + ( +__xsubi +[3], + +504  +d¿nd48_d©a + * +__»¡riù + +__bufãr +, + +505 * +__»¡riù + +__»suÉ +è +__THROW + + `__nÚnuÎ + ((1, 2)); + +508  + $̪d48_r + ( +d¿nd48_d©a + * +__»¡riù + +__bufãr +, + +509 * +__»¡riù + +__»suÉ +) + +510 +__THROW + + `__nÚnuÎ + ((1, 2)); + +511  + $Īd48_r + ( +__xsubi +[3], + +512  +d¿nd48_d©a + * +__»¡riù + +__bufãr +, + +513 * +__»¡riù + +__»suÉ +) + +514 +__THROW + + `__nÚnuÎ + ((1, 2)); + +517  + $m¿nd48_r + ( +d¿nd48_d©a + * +__»¡riù + +__bufãr +, + +518 * +__»¡riù + +__»suÉ +) + +519 +__THROW + + `__nÚnuÎ + ((1, 2)); + +520  + $j¿nd48_r + ( +__xsubi +[3], + +521  +d¿nd48_d©a + * +__»¡riù + +__bufãr +, + +522 * +__»¡riù + +__»suÉ +) + +523 +__THROW + + `__nÚnuÎ + ((1, 2)); + +526  + $¤ªd48_r + ( +__£edv® +,  +d¿nd48_d©a + * +__bufãr +) + +527 +__THROW + + `__nÚnuÎ + ((2)); + +529  + $£ed48_r + ( +__£ed16v +[3], + +530  +d¿nd48_d©a + * +__bufãr +è +__THROW + + `__nÚnuÎ + ((1, 2)); + +532  + $lcÚg48_r + ( +__·¿m +[7], + +533  +d¿nd48_d©a + * +__bufãr +) + +534 +__THROW + + `__nÚnuÎ + ((1, 2)); + +539 * + $m®loc + ( +size_t + +__size +è +__THROW + +__©Œibu‹_m®loc__ + +__wur +; + +541 * + $ÿÎoc + ( +size_t + +__nmemb +, size_ˆ +__size +) + +542 +__THROW + +__©Œibu‹_m®loc__ + +__wur +; + +549 * + $»®loc + (* +__±r +, +size_t + +__size +) + +550 +__THROW + +__©Œibu‹_w¬n_unu£d_»suÉ__ +; + +552 #ifdeà +__USE_GNU + + +558 * + $»®loÿ¼ay + (* +__±r +, +size_t + +__nmemb +, size_ˆ +__size +) + +559 +__THROW + +__©Œibu‹_w¬n_unu£d_»suÉ__ +; + +563  + $ä“ + (* +__±r +è +__THROW +; + +565 #ifdeà +__USE_MISC + + +566  + ~<®loÿ.h +> + +569 #ià( +defšed + +__USE_XOPEN_EXTENDED + && !defšed +__USE_XOPEN2K +) \ + +570 || +defšed + +__USE_MISC + + +572 * + $v®loc + ( +size_t + +__size +è +__THROW + +__©Œibu‹_m®loc__ + +__wur +; + +575 #ifdeà +__USE_XOPEN2K + + +577  + $posix_mem®ign + (** +__mem±r +, +size_t + +__®ignm’t +, size_ˆ +__size +) + +578 +__THROW + + `__nÚnuÎ + ((1)è +__wur +; + +581 #ifdeà +__USE_ISOC11 + + +583 * + $®igÃd_®loc + ( +size_t + +__®ignm’t +, size_ˆ +__size +) + +584 +__THROW + +__©Œibu‹_m®loc__ + + `__©Œibu‹_®loc_size__ + ((2)è +__wur +; + +588  + $abÜt + (è +__THROW + + `__©Œibu‹__ + (( +__nܑuº__ +)); + +592  + $©ex™ + ((* +__func +è()è +__THROW + + `__nÚnuÎ + ((1)); + +594 #ià +defšed + +__USE_ISOC11 + || defšed +__USE_ISOCXX11 + + +596 #ifdeà +__ýlu¥lus + + +597 "C++"  + $©_quick_ex™ + ((* +__func +) ()) + +598 +__THROW + + `__asm + ("©_quick_ex™"è + `__nÚnuÎ + ((1)); + +600  + $©_quick_ex™ + ((* +__func +è()è +__THROW + + `__nÚnuÎ + ((1)); + +604 #ifdef +__USE_MISC + + +607  + $Ú_ex™ + ((* +__func +è( +__¡©us +, * +__¬g +), *__arg) + +608 +__THROW + + `__nÚnuÎ + ((1)); + +614  + $ex™ + ( +__¡©us +è +__THROW + + `__©Œibu‹__ + (( +__nܑuº__ +)); + +616 #ià +defšed + +__USE_ISOC11 + || defšed +__USE_ISOCXX11 + + +620  + $quick_ex™ + ( +__¡©us +è +__THROW + + `__©Œibu‹__ + (( +__nܑuº__ +)); + +623 #ifdeà +__USE_ISOC99 + + +626  + $_Ex™ + ( +__¡©us +è +__THROW + + `__©Œibu‹__ + (( +__nܑuº__ +)); + +631 * + $g‘’v + (cÚ¡ * +__Çme +è +__THROW + + `__nÚnuÎ + ((1)è +__wur +; + +633 #ifdeà +__USE_GNU + + +636 * + $£cu»_g‘’v + (cÚ¡ * +__Çme +) + +637 +__THROW + + `__nÚnuÎ + ((1)è +__wur +; + +640 #ià +defšed + +__USE_MISC + || defšed +__USE_XOPEN + + +644  + $pu‹nv + (* +__¡ršg +è +__THROW + + `__nÚnuÎ + ((1)); + +647 #ifdeà +__USE_XOPEN2K + + +650  + $£‹nv + (cÚ¡ * +__Çme +, cÚ¡ * +__v®ue +,  +__»¶aû +) + +651 +__THROW + + `__nÚnuÎ + ((2)); + +654  + $un£‹nv + (cÚ¡ * +__Çme +è +__THROW + + `__nÚnuÎ + ((1)); + +657 #ifdef +__USE_MISC + + +661  + $þ—»nv + (è +__THROW +; + +665 #ià +defšed + +__USE_MISC + \ + +666 || ( +defšed + +__USE_XOPEN_EXTENDED + && !defšed +__USE_XOPEN2K8 +) + +672 * + $mk‹mp + (* +__‹m¶©e +è +__THROW + + `__nÚnuÎ + ((1)); + +675 #ià +defšed + +__USE_XOPEN_EXTENDED + || defšed +__USE_XOPEN2K8 + + +684 #iâdeà +__USE_FILE_OFFSET64 + + +685  + $mk¡emp + (* +__‹m¶©e +è + `__nÚnuÎ + ((1)è +__wur +; + +687 #ifdeà +__REDIRECT + + +688  + `__REDIRECT + ( +mk¡emp +, (* +__‹m¶©e +), +mk¡emp64 +) + +689 + `__nÚnuÎ + ((1)è +__wur +; + +691  + #mk¡emp + +mk¡emp64 + + + ) + +694 #ifdeà +__USE_LARGEFILE64 + + +695  + $mk¡emp64 + (* +__‹m¶©e +è + `__nÚnuÎ + ((1)è +__wur +; + +699 #ifdeà +__USE_MISC + + +706 #iâdeà +__USE_FILE_OFFSET64 + + +707  + $mk¡emps + (* +__‹m¶©e +,  +__suffixËn +è + `__nÚnuÎ + ((1)è +__wur +; + +709 #ifdeà +__REDIRECT + + +710  + `__REDIRECT + ( +mk¡emps +, (* +__‹m¶©e +,  +__suffixËn +), + +711 +mk¡emps64 +è + `__nÚnuÎ + ((1)è +__wur +; + +713  + #mk¡emps + +mk¡emps64 + + + ) + +716 #ifdeà +__USE_LARGEFILE64 + + +717  + $mk¡emps64 + (* +__‹m¶©e +,  +__suffixËn +) + +718 + `__nÚnuÎ + ((1)è +__wur +; + +722 #ifdeà +__USE_XOPEN2K8 + + +728 * + $mkd‹mp + (* +__‹m¶©e +è +__THROW + + `__nÚnuÎ + ((1)è +__wur +; + +731 #ifdeà +__USE_GNU + + +738 #iâdeà +__USE_FILE_OFFSET64 + + +739  + $mko¡emp + (* +__‹m¶©e +,  +__æags +è + `__nÚnuÎ + ((1)è +__wur +; + +741 #ifdeà +__REDIRECT + + +742  + `__REDIRECT + ( +mko¡emp +, (* +__‹m¶©e +,  +__æags +), +mko¡emp64 +) + +743 + `__nÚnuÎ + ((1)è +__wur +; + +745  + #mko¡emp + +mko¡emp64 + + + ) + +748 #ifdeà +__USE_LARGEFILE64 + + +749  + $mko¡emp64 + (* +__‹m¶©e +,  +__æags +è + `__nÚnuÎ + ((1)è +__wur +; + +758 #iâdeà +__USE_FILE_OFFSET64 + + +759  + $mko¡emps + (* +__‹m¶©e +,  +__suffixËn +,  +__æags +) + +760 + `__nÚnuÎ + ((1)è +__wur +; + +762 #ifdeà +__REDIRECT + + +763  + `__REDIRECT + ( +mko¡emps +, (* +__‹m¶©e +,  +__suffixËn +, + +764  +__æags +), +mko¡emps64 +) + +765 + `__nÚnuÎ + ((1)è +__wur +; + +767  + #mko¡emps + +mko¡emps64 + + + ) + +770 #ifdeà +__USE_LARGEFILE64 + + +771  + $mko¡emps64 + (* +__‹m¶©e +,  +__suffixËn +,  +__æags +) + +772 + `__nÚnuÎ + ((1)è +__wur +; + +781  + $sy¡em + (cÚ¡ * +__commªd +è +__wur +; + +784 #ifdef +__USE_GNU + + +787 * + $ÿnÚiÿlize_fže_Çme + (cÚ¡ * +__Çme +) + +788 +__THROW + + `__nÚnuÎ + ((1)è +__wur +; + +791 #ià +defšed + +__USE_MISC + || defšed +__USE_XOPEN_EXTENDED + + +797 * + $»®·th + (cÚ¡ * +__»¡riù + +__Çme +, + +798 * +__»¡riù + +__»sÞved +è +__THROW + +__wur +; + +803 #iâdeà +__COMPAR_FN_T + + +804  + #__COMPAR_FN_T + + + ) + +805 (* + t__com·r_â_t +) (const *, const *); + +807 #ifdef +__USE_GNU + + +808  +__com·r_â_t + + tcom·risÚ_â_t +; + +811 #ifdeà +__USE_GNU + + +812 (* + t__com·r_d_â_t +) (const *, const *, *); + +817 * + $b£¬ch + (cÚ¡ * +__key +, cÚ¡ * +__ba£ +, + +818 +size_t + +__nmemb +, size_ˆ +__size +, +__com·r_â_t + +__com·r +) + +819 + `__nÚnuÎ + ((1, 2, 5)è +__wur +; + +821 #ifdeà +__USE_EXTERN_INLINES + + +822  + ~ + +827  + $qsÜt + (* +__ba£ +, +size_t + +__nmemb +, size_ˆ +__size +, + +828 +__com·r_â_t + +__com·r +è + `__nÚnuÎ + ((1, 4)); + +829 #ifdeà +__USE_GNU + + +830  + $qsÜt_r + (* +__ba£ +, +size_t + +__nmemb +, size_ˆ +__size +, + +831 +__com·r_d_â_t + +__com·r +, * +__¬g +) + +832 + `__nÚnuÎ + ((1, 4)); + +837  + $abs + ( +__x +è +__THROW + + `__©Œibu‹__ + (( +__cÚ¡__ +)è +__wur +; + +838  + $Ïbs + ( +__x +è +__THROW + + `__©Œibu‹__ + (( +__cÚ¡__ +)è +__wur +; + +840 #ifdeà +__USE_ISOC99 + + +841 +__ex‹nsiÚ__ +  + $Îabs + ( +__x +) + +842 +__THROW + + `__©Œibu‹__ + (( +__cÚ¡__ +)è +__wur +; + +849 +div_t + + $div + ( +__num” +,  +__d’om +) + +850 +__THROW + + `__©Œibu‹__ + (( +__cÚ¡__ +)è +__wur +; + +851 +ldiv_t + + $ldiv + ( +__num” +,  +__d’om +) + +852 +__THROW + + `__©Œibu‹__ + (( +__cÚ¡__ +)è +__wur +; + +854 #ifdeà +__USE_ISOC99 + + +855 +__ex‹nsiÚ__ + +Îdiv_t + + $Îdiv + ( +__num” +, + +856  +__d’om +) + +857 +__THROW + + `__©Œibu‹__ + (( +__cÚ¡__ +)è +__wur +; + +861 #ià( +defšed + +__USE_XOPEN_EXTENDED + && !defšed +__USE_XOPEN2K8 +) \ + +862 || +defšed + +__USE_MISC + + +869 * + $ecvt + ( +__v®ue +,  +__ndig™ +, * +__»¡riù + +__deýt +, + +870 * +__»¡riù + +__sign +è +__THROW + + `__nÚnuÎ + ((3, 4)è +__wur +; + +875 * + $fcvt + ( +__v®ue +,  +__ndig™ +, * +__»¡riù + +__deýt +, + +876 * +__»¡riù + +__sign +è +__THROW + + `__nÚnuÎ + ((3, 4)è +__wur +; + +881 * + $gcvt + ( +__v®ue +,  +__ndig™ +, * +__buf +) + +882 +__THROW + + `__nÚnuÎ + ((3)è +__wur +; + +885 #ifdeà +__USE_MISC + + +887 * + $qecvt + ( +__v®ue +,  +__ndig™ +, + +888 * +__»¡riù + +__deýt +, *__»¡riù +__sign +) + +889 +__THROW + + `__nÚnuÎ + ((3, 4)è +__wur +; + +890 * + $qfcvt + ( +__v®ue +,  +__ndig™ +, + +891 * +__»¡riù + +__deýt +, *__»¡riù +__sign +) + +892 +__THROW + + `__nÚnuÎ + ((3, 4)è +__wur +; + +893 * + $qgcvt + ( +__v®ue +,  +__ndig™ +, * +__buf +) + +894 +__THROW + + `__nÚnuÎ + ((3)è +__wur +; + +899  + $ecvt_r + ( +__v®ue +,  +__ndig™ +, * +__»¡riù + +__deýt +, + +900 * +__»¡riù + +__sign +, *__»¡riù +__buf +, + +901 +size_t + +__Ën +è +__THROW + + `__nÚnuÎ + ((3, 4, 5)); + +902  + $fcvt_r + ( +__v®ue +,  +__ndig™ +, * +__»¡riù + +__deýt +, + +903 * +__»¡riù + +__sign +, *__»¡riù +__buf +, + +904 +size_t + +__Ën +è +__THROW + + `__nÚnuÎ + ((3, 4, 5)); + +906  + $qecvt_r + ( +__v®ue +,  +__ndig™ +, + +907 * +__»¡riù + +__deýt +, *__»¡riù +__sign +, + +908 * +__»¡riù + +__buf +, +size_t + +__Ën +) + +909 +__THROW + + `__nÚnuÎ + ((3, 4, 5)); + +910  + $qfcvt_r + ( +__v®ue +,  +__ndig™ +, + +911 * +__»¡riù + +__deýt +, *__»¡riù +__sign +, + +912 * +__»¡riù + +__buf +, +size_t + +__Ën +) + +913 +__THROW + + `__nÚnuÎ + ((3, 4, 5)); + +919  + $mbËn + (cÚ¡ * +__s +, +size_t + +__n +è +__THROW +; + +922  + $mbtowc + ( +wch¬_t + * +__»¡riù + +__pwc +, + +923 cÚ¡ * +__»¡riù + +__s +, +size_t + +__n +è +__THROW +; + +926  + $wùomb + (* +__s +, +wch¬_t + +__wch¬ +è +__THROW +; + +930 +size_t + + $mb¡owcs + ( +wch¬_t + * +__»¡riù + +__pwcs +, + +931 cÚ¡ * +__»¡riù + +__s +, +size_t + +__n +è +__THROW +; + +933 +size_t + + $wc¡ombs + (* +__»¡riù + +__s +, + +934 cÚ¡ +wch¬_t + * +__»¡riù + +__pwcs +, +size_t + +__n +) + +935 +__THROW +; + +938 #ifdeà +__USE_MISC + + +943  + $½m©ch + (cÚ¡ * +__»¥Ú£ +è +__THROW + + `__nÚnuÎ + ((1)è +__wur +; + +947 #ià +defšed + +__USE_XOPEN_EXTENDED + || defšed +__USE_XOPEN2K8 + + +954  + $g‘subÝt + (** +__»¡riù + +__ÝtiÚp +, + +955 *cÚ¡ * +__»¡riù + +__tok’s +, + +956 ** +__»¡riù + +__v®u• +) + +957 +__THROW + + `__nÚnuÎ + ((1, 2, 3)è +__wur +; + +961 #ifdeà +__USE_XOPEN + + +963  + $£tkey + (cÚ¡ * +__key +è +__THROW + + `__nÚnuÎ + ((1)); + +969 #ifdeà +__USE_XOPEN2KXSI + + +971  + $posix_ݒ± + ( +__oæag +è +__wur +; + +974 #ifdeà +__USE_XOPEN_EXTENDED + + +979  + $g¿Á± + ( +__fd +è +__THROW +; + +983  + $uÆock± + ( +__fd +è +__THROW +; + +988 * + $±¢ame + ( +__fd +è +__THROW + +__wur +; + +991 #ifdeà +__USE_GNU + + +995  + $±¢ame_r + ( +__fd +, * +__buf +, +size_t + +__buæ’ +) + +996 +__THROW + + `__nÚnuÎ + ((2)); + +999  + `g‘± + (); + +1002 #ifdeà +__USE_MISC + + +1006  + $g‘lßdavg + ( +__lßdavg +[],  +__ÃËm +) + +1007 +__THROW + + `__nÚnuÎ + ((1)); + +1010 #ià +defšed + +__USE_XOPEN_EXTENDED + && !defšed +__USE_XOPEN2K + + +1013  + $‰y¦Ù + (è +__THROW +; + +1016  + ~ + +1019 #ià +__USE_FORTIFY_LEVEL + > 0 && +defšed + +__fÜtify_funùiÚ + + +1020  + ~ + +1022 #ifdeà +__LDBL_COMPAT + + +1023  + ~ + +1026 +__END_DECLS + + + @/usr/include/alloca.h + +18 #iâdef +_ALLOCA_H + + +19  + #_ALLOCA_H + 1 + + ) + +21  + ~<ã©u»s.h +> + +23  + #__Ãed_size_t + + + ) + +24  + ~<¡ddef.h +> + +26 + g__BEGIN_DECLS + + +29 #undeà +®loÿ + + +32 * + $®loÿ + ( +size_t + +__size +è +__THROW +; + +34 #ifdef +__GNUC__ + + +35  + #®loÿ +( +size +è + `__bužtš_®loÿ + (size) + + ) + +38 +__END_DECLS + + + @/usr/include/features.h + +18 #iâdef +_FEATURES_H + + +19  + #_FEATURES_H + 1 + + ) + +119 #undeà +__USE_ISOC11 + + +120 #undeà +__USE_ISOC99 + + +121 #undeà +__USE_ISOC95 + + +122 #undeà +__USE_ISOCXX11 + + +123 #undeà +__USE_POSIX + + +124 #undeà +__USE_POSIX2 + + +125 #undeà +__USE_POSIX199309 + + +126 #undeà +__USE_POSIX199506 + + +127 #undeà +__USE_XOPEN + + +128 #undeà +__USE_XOPEN_EXTENDED + + +129 #undeà +__USE_UNIX98 + + +130 #undeà +__USE_XOPEN2K + + +131 #undeà +__USE_XOPEN2KXSI + + +132 #undeà +__USE_XOPEN2K8 + + +133 #undeà +__USE_XOPEN2K8XSI + + +134 #undeà +__USE_LARGEFILE + + +135 #undeà +__USE_LARGEFILE64 + + +136 #undeà +__USE_FILE_OFFSET64 + + +137 #undeà +__USE_MISC + + +138 #undeà +__USE_ATFILE + + +139 #undeà +__USE_GNU + + +140 #undeà +__USE_FORTIFY_LEVEL + + +141 #undeà +__KERNEL_STRICT_NAMES + + +142 #undeà +__GLIBC_USE_DEPRECATED_GETS + + +146 #iâdeà +_LOOSE_KERNEL_NAMES + + +147  + #__KERNEL_STRICT_NAMES + + + ) + +157 #ià +defšed + +__GNUC__ + && defšed +__GNUC_MINOR__ + + +158  + #__GNUC_PREREQ +( +maj +, +mš +) \ + +159 (( +__GNUC__ + << 16è+ +__GNUC_MINOR__ + >ð(( +maj +è<< 16è+ ( +mš +)) + + ) + +161  + #__GNUC_PREREQ +( +maj +, +mš +è0 + + ) + +168 #ià +defšed + +__þªg_majÜ__ + && defšed +__þªg_mšÜ__ + + +169  + #__glibc_þªg_´”eq +( +maj +, +mš +) \ + +170 (( +__þªg_majÜ__ + << 16è+ +__þªg_mšÜ__ + >ð(( +maj +è<< 16è+ ( +mš +)) + + ) + +172  + #__glibc_þªg_´”eq +( +maj +, +mš +è0 + + ) + +176  + #__GLIBC_USE +( +F +è +__GLIBC_USE_ + ## + ) +F + +182 #ià( +defšed + +_BSD_SOURCE + || defšed +_SVID_SOURCE +) \ + +183 && ! +defšed + + g_DEFAULT_SOURCE + + +185 #undeà +_DEFAULT_SOURCE + + +186  + #_DEFAULT_SOURCE + 1 + + ) + +190 #ifdeà +_GNU_SOURCE + + +191 #undeà +_ISOC95_SOURCE + + +192  + #_ISOC95_SOURCE + 1 + + ) + +193 #undeà +_ISOC99_SOURCE + + +194  + #_ISOC99_SOURCE + 1 + + ) + +195 #undeà +_ISOC11_SOURCE + + +196  + #_ISOC11_SOURCE + 1 + + ) + +197 #undeà +_POSIX_SOURCE + + +198  + #_POSIX_SOURCE + 1 + + ) + +199 #undeà +_POSIX_C_SOURCE + + +200  + #_POSIX_C_SOURCE + 200809L + + ) + +201 #undeà +_XOPEN_SOURCE + + +202  + #_XOPEN_SOURCE + 700 + + ) + +203 #undeà +_XOPEN_SOURCE_EXTENDED + + +204  + #_XOPEN_SOURCE_EXTENDED + 1 + + ) + +205 #undeà +_LARGEFILE64_SOURCE + + +206  + #_LARGEFILE64_SOURCE + 1 + + ) + +207 #undeà +_DEFAULT_SOURCE + + +208  + #_DEFAULT_SOURCE + 1 + + ) + +209 #undeà +_ATFILE_SOURCE + + +210  + #_ATFILE_SOURCE + 1 + + ) + +215 #ià( +defšed + +_DEFAULT_SOURCE + \ + +216 || (! +defšed + + g__STRICT_ANSI__ + \ + +217 && ! +defšed + + g_ISOC99_SOURCE + \ + +218 && ! +defšed + + g_POSIX_SOURCE + && !defšed + g_POSIX_C_SOURCE + \ + +219 && ! +defšed + + g_XOPEN_SOURCE +)) + +220 #undeà +_DEFAULT_SOURCE + + +221  + #_DEFAULT_SOURCE + 1 + + ) + +225 #ià( +defšed + +_ISOC11_SOURCE + \ + +226 || ( +defšed + + g__STDC_VERSION__ + && __STDC_VERSION__ >= 201112L)) + +227  + #__USE_ISOC11 + 1 + + ) + +231 #ià( +defšed + +_ISOC99_SOURCE + || defšed +_ISOC11_SOURCE + \ + +232 || ( +defšed + +__STDC_VERSION__ + && __STDC_VERSION__ >= 199901L)) + +233  + #__USE_ISOC99 + 1 + + ) + +237 #ià( +defšed + +_ISOC99_SOURCE + || defšed +_ISOC11_SOURCE + \ + +238 || ( +defšed + +__STDC_VERSION__ + && __STDC_VERSION__ >= 199409L)) + +239  + #__USE_ISOC95 + 1 + + ) + +242 #ifdeà +__ýlu¥lus + + +244 #ià +__ýlu¥lus + >= 201703L + +245  + #__USE_ISOC11 + 1 + + ) + +249 #ià +__ýlu¥lus + >ð201103L || +defšed + +__GXX_EXPERIMENTAL_CXX0X__ + + +250  + #__USE_ISOCXX11 + 1 + + ) + +251  + #__USE_ISOC99 + 1 + + ) + +258 #ifdeà +_DEFAULT_SOURCE + + +259 #ià! +defšed + +_POSIX_SOURCE + && !defšed +_POSIX_C_SOURCE + + +260  + #__USE_POSIX_IMPLICITLY + 1 + + ) + +262 #undeà +_POSIX_SOURCE + + +263  + #_POSIX_SOURCE + 1 + + ) + +264 #undeà +_POSIX_C_SOURCE + + +265  + #_POSIX_C_SOURCE + 200809L + + ) + +268 #ià((! +defšed + +__STRICT_ANSI__ + \ + +269 || ( +defšed + +_XOPEN_SOURCE + && (_XOPEN_SOURCE - 0) >= 500)) \ + +270 && ! +defšed + +_POSIX_SOURCE + && !defšed +_POSIX_C_SOURCE +) + +271  + #_POSIX_SOURCE + 1 + + ) + +272 #ià +defšed + +_XOPEN_SOURCE + && (_XOPEN_SOURCE - 0) < 500 + +273  + #_POSIX_C_SOURCE + 2 + + ) + +274 #–ià +defšed + +_XOPEN_SOURCE + && (_XOPEN_SOURCE - 0) < 600 + +275  + #_POSIX_C_SOURCE + 199506L + + ) + +276 #–ià +defšed + +_XOPEN_SOURCE + && (_XOPEN_SOURCE - 0) < 700 + +277  + #_POSIX_C_SOURCE + 200112L + + ) + +279  + #_POSIX_C_SOURCE + 200809L + + ) + +281  + #__USE_POSIX_IMPLICITLY + 1 + + ) + +290 #ià((! +defšed + +_POSIX_C_SOURCE + || (_POSIX_C_SOURCE - 0) < 199506L) \ + +291 && ( +defšed + +_REENTRANT + || defšed +_THREAD_SAFE +)) + +292  + #_POSIX_SOURCE + 1 + + ) + +293 #undeà +_POSIX_C_SOURCE + + +294  + #_POSIX_C_SOURCE + 199506L + + ) + +297 #ià( +defšed + +_POSIX_SOURCE + \ + +298 || ( +defšed + +_POSIX_C_SOURCE + && _POSIX_C_SOURCE >= 1) \ + +299 || +defšed + +_XOPEN_SOURCE +) + +300  + #__USE_POSIX + 1 + + ) + +303 #ià +defšed + +_POSIX_C_SOURCE + && _POSIX_C_SOURCE >ð2 || defšed +_XOPEN_SOURCE + + +304  + #__USE_POSIX2 + 1 + + ) + +307 #ià +defšed + +_POSIX_C_SOURCE + && (_POSIX_C_SOURCE - 0) >= 199309L + +308  + #__USE_POSIX199309 + 1 + + ) + +311 #ià +defšed + +_POSIX_C_SOURCE + && (_POSIX_C_SOURCE - 0) >= 199506L + +312  + #__USE_POSIX199506 + 1 + + ) + +315 #ià +defšed + +_POSIX_C_SOURCE + && (_POSIX_C_SOURCE - 0) >= 200112L + +316  + #__USE_XOPEN2K + 1 + + ) + +317 #undeà +__USE_ISOC95 + + +318  + #__USE_ISOC95 + 1 + + ) + +319 #undeà +__USE_ISOC99 + + +320  + #__USE_ISOC99 + 1 + + ) + +323 #ià +defšed + +_POSIX_C_SOURCE + && (_POSIX_C_SOURCE - 0) >= 200809L + +324  + #__USE_XOPEN2K8 + 1 + + ) + +325 #undeà +_ATFILE_SOURCE + + +326  + #_ATFILE_SOURCE + 1 + + ) + +329 #ifdef +_XOPEN_SOURCE + + +330  + #__USE_XOPEN + 1 + + ) + +331 #ià( +_XOPEN_SOURCE + - 0) >= 500 + +332  + #__USE_XOPEN_EXTENDED + 1 + + ) + +333  + #__USE_UNIX98 + 1 + + ) + +334 #undeà +_LARGEFILE_SOURCE + + +335  + #_LARGEFILE_SOURCE + 1 + + ) + +336 #ià( +_XOPEN_SOURCE + - 0) >= 600 + +337 #ià( +_XOPEN_SOURCE + - 0) >= 700 + +338  + #__USE_XOPEN2K8 + 1 + + ) + +339  + #__USE_XOPEN2K8XSI + 1 + + ) + +341  + #__USE_XOPEN2K + 1 + + ) + +342  + #__USE_XOPEN2KXSI + 1 + + ) + +343 #undeà +__USE_ISOC95 + + +344  + #__USE_ISOC95 + 1 + + ) + +345 #undeà +__USE_ISOC99 + + +346  + #__USE_ISOC99 + 1 + + ) + +349 #ifdeà +_XOPEN_SOURCE_EXTENDED + + +350  + #__USE_XOPEN_EXTENDED + 1 + + ) + +355 #ifdeà +_LARGEFILE_SOURCE + + +356  + #__USE_LARGEFILE + 1 + + ) + +359 #ifdeà +_LARGEFILE64_SOURCE + + +360  + #__USE_LARGEFILE64 + 1 + + ) + +363 #ià +defšed + +_FILE_OFFSET_BITS + && _FILE_OFFSET_BITS == 64 + +364  + #__USE_FILE_OFFSET64 + 1 + + ) + +367 #ià +defšed + +_DEFAULT_SOURCE + + +368  + #__USE_MISC + 1 + + ) + +371 #ifdef +_ATFILE_SOURCE + + +372  + #__USE_ATFILE + 1 + + ) + +375 #ifdef +_GNU_SOURCE + + +376  + #__USE_GNU + 1 + + ) + +379 #ià +defšed + +_FORTIFY_SOURCE + && _FORTIFY_SOURCE > 0 \ + +380 && +__GNUC_PREREQ + (4, 1è&& +defšed + + g__OPTIMIZE__ + && __OPTIMIZE__ > 0 + +381 #ià +_FORTIFY_SOURCE + > 1 + +382  + #__USE_FORTIFY_LEVEL + 2 + + ) + +384  + #__USE_FORTIFY_LEVEL + 1 + + ) + +387  + #__USE_FORTIFY_LEVEL + 0 + + ) + +394 #ià +defšed + +__ýlu¥lus + ? __ýlu¥lu >ð201402L : defšed +__USE_ISOC11 + + +395  + #__GLIBC_USE_DEPRECATED_GETS + 0 + + ) + +397  + #__GLIBC_USE_DEPRECATED_GETS + 1 + + ) + +402  + ~<¡dc-´edef.h +> + +410 #undeà +__GNU_LIBRARY__ + + +411  + #__GNU_LIBRARY__ + 6 + + ) + +415  + #__GLIBC__ + 2 + + ) + +416  + #__GLIBC_MINOR__ + 27 + + ) + +418  + #__GLIBC_PREREQ +( +maj +, +mš +) \ + +419 (( +__GLIBC__ + << 16è+ +__GLIBC_MINOR__ + >ð(( +maj +è<< 16è+ ( +mš +)) + + ) + +422 #iâdeà +__ASSEMBLER__ + + +423 #iâdeà +_SYS_CDEFS_H + + +424  + ~ + +429 #ià +defšed + +__USE_FILE_OFFSET64 + && !defšed +__REDIRECT + + +430  + #__USE_LARGEFILE + 1 + + ) + +431  + #__USE_LARGEFILE64 + 1 + + ) + +437 #ià +__GNUC_PREREQ + (2, 7è&& +defšed + +__OPTIMIZE__ + \ + +438 && ! +defšed + + g__OPTIMIZE_SIZE__ + && !defšed + g__NO_INLINE__ + \ + +439 && +defšed + + g__ex‹º_šlše + + +440  + #__USE_EXTERN_INLINES + 1 + + ) + +448  + ~ + + @/usr/include/stdc-predef.h + +18 #iâdef +_STDC_PREDEF_H + + +19  + #_STDC_PREDEF_H + 1 + + ) + +36 #ifdeà +__GCC_IEC_559 + + +37 #ià +__GCC_IEC_559 + > 0 + +38  + #__STDC_IEC_559__ + 1 + + ) + +41  + #__STDC_IEC_559__ + 1 + + ) + +44 #ifdeà +__GCC_IEC_559_COMPLEX + + +45 #ià +__GCC_IEC_559_COMPLEX + > 0 + +46  + #__STDC_IEC_559_COMPLEX__ + 1 + + ) + +49  + #__STDC_IEC_559_COMPLEX__ + 1 + + ) + +58  + #__STDC_ISO_10646__ + 201706L + + ) + +61  + #__STDC_NO_THREADS__ + 1 + + ) + + @ +1 +. +1 +/usr/include +176 +3161 +AMF-UE-NGAP-ID.c +AMFPointer.c +AMFRegionID.c +AMFSetID.c +BIT_STRING.c +BOOLEAN.c +CGI.c +CoreCPID.c +E-UTRA-ARFCN.c +E-UTRA-PCI.c +E-UTRA-TAC.c +E2SM-KPM-ActionDefinition-Format1.c +E2SM-KPM-ActionDefinition-Format2.c +E2SM-KPM-ActionDefinition-Format3.c +E2SM-KPM-ActionDefinition.c +E2SM-KPM-EventTriggerDefinition-Format1.c +E2SM-KPM-EventTriggerDefinition.c +E2SM-KPM-IndicationHeader-Format1.c +E2SM-KPM-IndicationHeader.c +E2SM-KPM-IndicationMessage-Format1.c +E2SM-KPM-IndicationMessage-Format2.c +E2SM-KPM-IndicationMessage.c +E2SM-KPM-RANfunction-Description.c +EN-GNB-ID.c +ENB-ID.c +ENB-UE-X2AP-ID-Extension.c +ENB-UE-X2AP-ID.c +EUTRA-CGI.c +EUTRACellIdentity.c +FiveGS-TAC.c +FiveQI.c +FreqBandNrItem.c +GNB-CU-CP-UE-E1AP-ID.c +GNB-CU-UE-F1AP-ID.c +GNB-CU-UP-ID.c +GNB-DU-ID.c +GNB-ID.c +GUAMI.c +GUMMEI.c +GlobalENB-ID.c +GlobalGNB-ID.c +GlobalNGRANNodeID.c +GlobalNgENB-ID.c +GlobalenGNB-ID.c +GranularityPeriod.c +GroupID.c +INTEGER.c +IndexToRFSP.c +Interface-MessageID.c +InterfaceID-E1.c +InterfaceID-F1.c +InterfaceID-NG.c +InterfaceID-S1.c +InterfaceID-W1.c +InterfaceID-X2.c +InterfaceID-Xn.c +InterfaceIdentifier.c +InterfaceType.c +LabelInfoItem.c +LabelInfoList.c +MME-Code.c +MME-Group-ID.c +MME-UE-S1AP-ID.c +MatchingCondItem.c +MatchingCondList.c +MatchingUEidItem.c +MatchingUEidList.c +MeasurementCondItem.c +MeasurementCondList.c +MeasurementCondUEidItem.c +MeasurementCondUEidList.c +MeasurementData.c +MeasurementDataItem.c +MeasurementInfo-Action-Item.c +MeasurementInfo-Action-List.c +MeasurementInfoItem.c +MeasurementInfoList.c +MeasurementLabel.c +MeasurementRecord.c +MeasurementRecordItem.c +MeasurementType.c +MeasurementTypeID.c +MeasurementTypeName.c +NG-RANnodeUEXnAPID.c +NGENB-CU-UE-W1AP-ID.c +NGENB-DU-ID.c +NR-ARFCN.c +NR-CGI.c +NR-PCI.c +NRCellIdentity.c +NRFrequencyBand-List.c +NRFrequencyBandItem.c +NRFrequencyInfo.c +NRFrequencyShift7p5khz.c +NULL.c +NativeEnumerated.c +NativeInteger.c +NativeReal.c +NgENB-ID.c +OCTET_STRING.c +OPEN_TYPE.c +PLMNIdentity.c +PrintableString.c +QCI.c +QoSID.c +QosFlowIdentifier.c +RANUEID.c +RANfunction-Name.c +REAL.c +RIC-EventTriggerStyle-Item.c +RIC-Format-Type.c +RIC-ReportStyle-Item.c +RIC-Style-Name.c +RIC-Style-Type.c +RRC-MessageID.c +RRCclass-LTE.c +RRCclass-NR.c +S-NSSAI.c +SD.c +SST.c +ServingCell-ARFCN.c +ServingCell-PCI.c +SubscriberProfileIDforRFP.c +SupportedSULBandList.c +SupportedSULFreqBandItem.c +TestCond-Expression.c +TestCond-Type.c +TestCond-Value.c +TestCondInfo.c +TimeStamp.c +UEID-EN-GNB.c +UEID-ENB.c +UEID-GNB-CU-CP-E1AP-ID-Item.c +UEID-GNB-CU-CP-E1AP-ID-List.c +UEID-GNB-CU-CP-F1AP-ID-Item.c +UEID-GNB-CU-F1AP-ID-List.c +UEID-GNB-CU-UP.c +UEID-GNB-DU.c +UEID-GNB.c +UEID-NG-ENB-DU.c +UEID-NG-ENB.c +UEID.c +asn_SEQUENCE_OF.c +asn_SET_OF.c +asn_application.c +asn_bit_data.c +asn_codecs_prim.c +asn_internal.c +asn_random_fill.c +ber_decoder.c +ber_tlv_length.c +ber_tlv_tag.c +constr_CHOICE.c +constr_SEQUENCE.c +constr_SEQUENCE_OF.c +constr_SET_OF.c +constr_TYPE.c +constraints.c +der_encoder.c +oer_decoder.c +oer_encoder.c +oer_support.c +per_decoder.c +per_encoder.c +per_opentype.c +per_support.c +xer_decoder.c +xer_encoder.c +xer_support.c +/usr/include/errno.h +/usr/include/math.h +/usr/include/stdio.h +/usr/include/stdlib.h +/usr/include/alloca.h +/usr/include/features.h +/usr/include/stdc-predef.h diff --git a/e2sm/lib/per_support.c b/e2sm/lib/per_support.c index 2285677..2c87a76 100644 --- a/e2sm/lib/per_support.c +++ b/e2sm/lib/per_support.c @@ -310,9 +310,12 @@ aper_get_length(asn_per_data_t *pd, int range, int ebits, int *repeat) { *repeat = 0; - if (range <= 65536 && range >= 0) - return aper_get_nsnnwn(pd, range); - + // First check effective_bits parameter. + if (ebits >= 0) { + if (range <= 65536 && range >= 0) + return aper_get_nsnnwn(pd, range); + } + if (aper_get_align(pd) < 0) return -1; diff --git a/e2sm/wrapper.c b/e2sm/wrapper.c index 6101121..61ec30f 100644 --- a/e2sm/wrapper.c +++ b/e2sm/wrapper.c @@ -1,10 +1,34 @@ #include #include "wrapper.h" +#include + + +// int main() { + +// long id[] = {1,2,3,4}; + +// void *buffer[8] = {} ; +// unsigned int sizeBuffer = 8; +// long actionDefCount = 8; +// long measId = 1; +// long ricStyleType = 1; +// long periods = 1; +// void *plm[8] = {} ; +// unsigned int sizePlm = 8; +// void *nRc[8] = {} ; +// unsigned int sizenRc = 8; + +// int a = e2sm_encode_ric_action_definition(buffer, sizeBuffer, actionDefCount, measId, ricStyleType, periods, plm, nRc); + +// printf("%d", a); + +// return 0; +// } ssize_t e2sm_encode_ric_event_trigger_definition(void *buffer, size_t buf_size, size_t event_trigger_count, long *RT_periods) { E2SM_KPM_EventTriggerDefinition_t *eventTriggerDef = (E2SM_KPM_EventTriggerDefinition_t *)calloc(1, sizeof(E2SM_KPM_EventTriggerDefinition_t)); if(!eventTriggerDef) { - fprintf(stderr, "alloc EventTriggerDefinition failed\n"); + fprintf(stderr, "Alloc EventTriggerDefinition failed\n"); return -1; } @@ -15,24 +39,23 @@ ssize_t e2sm_encode_ric_event_trigger_definition(void *buffer, size_t buf_size, return -1; } - eventTriggerDef->present = E2SM_KPM_EventTriggerDefinition_PR_eventDefinition_Format1; - eventTriggerDef->choice.eventDefinition_Format1 = innerDef; + eventTriggerDef->eventDefinition_formats.present = E2SM_KPM_EventTriggerDefinition__eventDefinition_formats_PR_eventDefinition_Format1; + eventTriggerDef->eventDefinition_formats.choice.eventDefinition_Format1 = innerDef; - struct E2SM_KPM_EventTriggerDefinition_Format1__policyTest_List *policyTestList = (struct E2SM_KPM_EventTriggerDefinition_Format1__policyTest_List *)calloc(1, sizeof(struct E2SM_KPM_EventTriggerDefinition_Format1__policyTest_List)); - innerDef->policyTest_List = policyTestList; + // struct E2SM_KPM_EventTriggerDefinition_Format1__policyTest_List *policyTestList = (struct E2SM_KPM_EventTriggerDefinition_Format1__policyTest_List *)calloc(1, sizeof(struct E2SM_KPM_EventTriggerDefinition_Format1__policyTest_List)); + // innerDef->policyTest_List = policyTestList; - int index = 0; - while(index < event_trigger_count) { - Trigger_ConditionIE_Item_t *triggerCondition = (Trigger_ConditionIE_Item_t *)calloc(1, sizeof(Trigger_ConditionIE_Item_t)); - assert(triggerCondition != 0); - triggerCondition->report_Period_IE = RT_periods[index]; - - ASN_SEQUENCE_ADD(&policyTestList->list, triggerCondition); - index++; - } + // int index = 0; + // while(index < event_trigger_count) { + // Trigger_ConditionIE_Item *triggerCondition = (Trigger_ConditionIE_Item *)calloc(1, sizeof(Trigger_ConditionIE_Item)); + // assert(triggerCondition != 0); + // triggerCondition->report_Period_IE = RT_periods[index]; + // ASN_SEQUENCE_ADD(&policyTestList->list, triggerCondition); + // index++; + // } asn_enc_rval_t encode_result; - encode_result = aper_encode_to_buffer(&asn_DEF_E2SM_KPM_EventTriggerDefinition, NULL, eventTriggerDef, buffer, buf_size); + encode_result = uper_encode_to_buffer(&asn_DEF_E2SM_KPM_EventTriggerDefinition, NULL, eventTriggerDef, buffer, buf_size); ASN_STRUCT_FREE(asn_DEF_E2SM_KPM_EventTriggerDefinition, eventTriggerDef); if(encode_result.encoded == -1) { fprintf(stderr, "Cannot encode %s: %s\n", encode_result.failed_type->name, strerror(errno)); @@ -41,34 +64,152 @@ ssize_t e2sm_encode_ric_event_trigger_definition(void *buffer, size_t buf_size, return encode_result.encoded; } } +// int main() { + +// long id[] = {1,2,3,4}; + +// void *buffer[8] = {} ; +// unsigned int sizeBuffer = 8; +// long actionDefCount = 8; +// long measId = 1; +// long ricStyleType = 1; +// long periods = 1; +// void *plm[8] = {} ; +// unsigned int sizePlm = 8; +// void *nRc[8] = {} ; +// unsigned int sizenRc = 8; + +// int a = e2sm_encode_ric_action_definition(buffer, sizeBuffer, actionDefCount, measId, ricStyleType, periods, plm, nRc); + +// printf("%d", a); + +// return 0; +// } -ssize_t e2sm_encode_ric_action_definition(void *buffer, size_t buf_size, long ric_style_type) { +/* +ssize_t e2sm_encode_ric_action_definition(void *buffer, size_t buf_size, long action_Def_count, long meas_ID, long ric_style_type, long GR_periods, Plm plm, Nrc nRc) { E2SM_KPM_ActionDefinition_t *actionDef = (E2SM_KPM_ActionDefinition_t *)calloc(1, sizeof(E2SM_KPM_ActionDefinition_t)); if(!actionDef) { fprintf(stderr, "alloc RIC ActionDefinition failed\n"); return -1; } + E2SM_KPM_ActionDefinition_Format1_t *actionDefFor1 = (E2SM_KPM_ActionDefinition_Format1_t *)calloc(1, sizeof(E2SM_KPM_ActionDefinition_Format1_t)); + if(!actionDefFor1) { + ASN_STRUCT_FREE(asn_DEF_E2SM_KPM_ActionDefinition, actionDef); + fprintf(stderr, "alloc RIC ActionDefinition failed\n"); + return -1; + } + CGI_t *cellGlobal = (CGI_t *)calloc(1, sizeof(CGI_t)); + if(!cellGlobal) { + fprintf(stderr, "alloc RIC ActionDefinition failed\n"); + return -1; + } + + NR_CGI_t *nrCGIs = (NR_CGI_t *)calloc(1, sizeof(NR_CGI_t)); + if(!nrCGIs) { + fprintf(stderr, "alloc RIC ActionDefinition failed\n"); + return -1; + } + actionDef->ric_Style_Type = ric_style_type; + actionDef->actionDefinition_formats.present = E2SM_KPM_ActionDefinition__actionDefinition_formats_PR_actionDefinition_Format1; + actionDef->actionDefinition_formats.choice.actionDefinition_Format1 = actionDefFor1; + actionDefFor1->granulPeriod = GR_periods; + actionDefFor1->cellGlobalID = cellGlobal; + cellGlobal->present = CGI_PR_nR_CGI; + cellGlobal->choice.nR_CGI = nrCGIs; + + + int plmSize = plm.size; + if(plmSize != 0) { + + } + + PLMNIdentity_t *plms = &nrCGIs->pLMNIdentity; + plms->buf = (uint8_t *)calloc(1, plmSize); + if(!plms->buf) { + fprintf(stderr, "alloc plms failed\n"); + ASN_STRUCT_FREE(asn_DEF_E2SM_KPM_ActionDefinition, actionDef); + return -1; + } + + memcpy(plms->buf, plm.plms, plmSize); + plms->size = plmSize; + + + int nRcSize = nRc.size; + + NRCellIdentity_t *nRCs = &nrCGIs->nRCellIdentity; + nRCs->buf = (uint8_t *)calloc(1, nRcSize); + if(!nRCs->buf) { + fprintf(stderr, "alloc nRCs failed\n"); + ASN_STRUCT_FREE(asn_DEF_E2SM_KPM_ActionDefinition, actionDef); + return -1; + } + + memcpy(nRCs->buf, nRc.nRcs, nRcSize); + nRCs->size = nRcSize; + + + MeasurementInfoList_t *infoList = &actionDefFor1->measInfoList; + + int index = 0; + while(index < action_Def_count) { + MeasurementInfoItem_t *infoItem = (MeasurementInfoItem_t *)calloc(1, sizeof(MeasurementInfoItem_t)); + // if(!infoItem) { + // fprintf(stderr, "alloc Measurement Info Item failed\n"); + // ASN_STRUCT_FREE(asn_DEF_E2SM_KPM_ActionDefinition, actionDef); + // return -1; + // } + assert(infoItem != 0); + + + MeasurementType_t *measureType = &infoItem->measType; + + measureType->present = MeasurementType_PR_measID; + measureType->choice.measID = meas_ID; + + + LabelInfoList_t *lableList = &infoItem->labelInfoList; + + ASN_SEQUENCE_ADD(&infoList->list, infoItem); + index++; + } asn_enc_rval_t encode_result; - encode_result = aper_encode_to_buffer(&asn_DEF_E2SM_KPM_ActionDefinition, NULL, actionDef, buffer, buf_size); + encode_result = uper_encode_to_buffer(&asn_DEF_E2SM_KPM_ActionDefinition, NULL,actionDef, buffer, buf_size); ASN_STRUCT_FREE(asn_DEF_E2SM_KPM_ActionDefinition, actionDef); + if(encode_result.encoded == -1) { fprintf(stderr, "Cannot encode %s: %s\n", encode_result.failed_type->name, strerror(errno)); return -1; } else { + fprintf(stderr, "successfully\n"); return encode_result.encoded; } } - +*/ E2SM_KPM_IndicationHeader_t* e2sm_decode_ric_indication_header(void *buffer, size_t buf_size) { asn_dec_rval_t decode_result; E2SM_KPM_IndicationHeader_t *indHdr = 0; - decode_result = aper_decode_complete(NULL, &asn_DEF_E2SM_KPM_IndicationHeader, (void **)&indHdr, buffer, buf_size); + //fprintf(stderr, "\nbuffer= %p",buffer); + //fprintf(stdout, "\nbuf_size=%ld",buf_size); + //fprintf(stdout, "\nE2SM_KPM_IndicationHeader_t_size=%ld",sizeof(E2SM_KPM_IndicationHeader_t)); + //decode_result = uper_decode_complete(NULL, &asn_DEF_E2SM_KPM_IndicationHeader, (void **)&indHdr, (char*)buffer, buf_size); + //ATS_ALIGNED_CANONICAL_PER + decode_result =asn_decode(0,ATS_ALIGNED_BASIC_PER,&asn_DEF_E2SM_KPM_IndicationHeader,(void **)&indHdr,buffer,buf_size); if(decode_result.code == RC_OK) { + // xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationHeader, indHdr); return indHdr; } + else if (decode_result.code ==RC_WMORE ) { + //xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationHeader, indHdr); + //fprintf(stderr, "\n decode_result.consumed= %ld \n",decode_result.consumed); + fprintf(stderr, "\nheader RC_WMORE "); + return indHdr; + } + else { ASN_STRUCT_FREE(asn_DEF_E2SM_KPM_IndicationHeader, indHdr); return NULL; @@ -81,11 +222,24 @@ void e2sm_free_ric_indication_header(E2SM_KPM_IndicationHeader_t* indHdr) { E2SM_KPM_IndicationMessage_t* e2sm_decode_ric_indication_message(void *buffer, size_t buf_size) { asn_dec_rval_t decode_result; - E2SM_KPM_IndicationMessage_t *indMsg = 0; - decode_result = aper_decode_complete(NULL, &asn_DEF_E2SM_KPM_IndicationMessage, (void **)&indMsg, buffer, buf_size); + E2SM_KPM_IndicationMessage_t *indMsg = 0; + //fprintf(stdout, "\nbuffer= %p",buffer); + //fprintf(stdout, "\nbuf_size=%ld",buf_size); + //fprintf(stdout, "\nE2SM_KPM_IndicationMessage_t size=%ld",sizeof(E2SM_KPM_IndicationMessage_t)); + //decode_result = uper_decode_complete(NULL, &asn_DEF_E2SM_KPM_IndicationMessage, (void **)&indMsg, (char *)buffer, buf_size); + //ATS_ALIGNED_CANONICAL_PER + decode_result =asn_decode(0,ATS_ALIGNED_BASIC_PER,&asn_DEF_E2SM_KPM_IndicationMessage,(void **)&indMsg,buffer,buf_size); if(decode_result.code == RC_OK) { + //xer_fprint(stdout, &asn_DEF_E2SM_KPM_IndicationMessage, indMsg); return indMsg; } + else if (decode_result.code ==RC_WMORE ) { + //xer_fprint(stderr, &asn_DEF_E2SM_KPM_IndicationMessage, indMsg); + //fprintf(stderr, "\n MSG decode_result.consumed= %ld \n",decode_result.consumed); + fprintf(stderr, "\n MSG RC_WMORE "); + return NULL; + } + else { ASN_STRUCT_FREE(asn_DEF_E2SM_KPM_IndicationMessage, indMsg); return NULL; @@ -94,4 +248,5 @@ E2SM_KPM_IndicationMessage_t* e2sm_decode_ric_indication_message(void *buffer, s void e2sm_free_ric_indication_message(E2SM_KPM_IndicationMessage_t* indMsg) { ASN_STRUCT_FREE(asn_DEF_E2SM_KPM_IndicationMessage, indMsg); -} \ No newline at end of file +} + diff --git a/e2sm/wrapper.h b/e2sm/wrapper.h index 2cdb163..a3bb5f3 100644 --- a/e2sm/wrapper.h +++ b/e2sm/wrapper.h @@ -1,61 +1,101 @@ #ifndef _WRAPPER_H_ #define _WRAPPER_H_ -#include "E2SM-KPM-EventTriggerDefinition.h" -#include "E2SM-KPM-EventTriggerDefinition-Format1.h" -#include "Trigger-ConditionIE-Item.h" -#include "E2SM-KPM-ActionDefinition.h" -#include "E2SM-KPM-IndicationHeader.h" -#include "E2SM-KPM-IndicationHeader-Format1.h" -#include "GlobalKPMnode-ID.h" -#include "GlobalKPMnode-gNB-ID.h" -#include "GlobalKPMnode-en-gNB-ID.h" -#include "GlobalKPMnode-ng-eNB-ID.h" -#include "GlobalKPMnode-eNB-ID.h" -#include "PLMN-Identity.h" -#include "GNB-ID-Choice.h" -#include "GNB-CU-UP-ID.h" -#include "GNB-DU-ID.h" -#include "ENGNB-ID.h" -#include "ENB-ID-Choice.h" -#include "ENB-ID.h" -#include "NRCGI.h" -#include "SNSSAI.h" -#include "GNB-Name.h" -#include "E2SM-KPM-IndicationMessage.h" -#include "E2SM-KPM-IndicationMessage-Format1.h" -#include "PM-Containers-List.h" -#include "PF-Container.h" -#include "RAN-Container.h" -#include "ODU-PF-Container.h" -#include "CellResourceReportListItem.h" -#include "ServedPlmnPerCellListItem.h" -#include "FGC-DU-PM-Container.h" -#include "EPC-DU-PM-Container.h" -#include "SlicePerPlmnPerCellListItem.h" -#include "FQIPERSlicesPerPlmnPerCellListItem.h" -#include "PerQCIReportListItem.h" -#include "OCUCP-PF-Container.h" -#include "OCUUP-PF-Container.h" -#include "PF-ContainerListItem.h" -#include "PlmnID-List.h" -#include "FGC-CUUP-PM-Format.h" -#include "SliceToReportListItem.h" -#include "FQIPERSlicesPerPlmnListItem.h" -#include "EPC-CUUP-PM-Format.h" -#include "PerQCIReportListItemFormat.h" -#include "DU-Usage-Report-Per-UE.h" -#include "DU-Usage-Report-CellResourceReportItem.h" -#include "DU-Usage-Report-UeResourceReportItem.h" -#include "CU-CP-Usage-Report-Per-UE.h" -#include "CU-CP-Usage-Report-CellResourceReportItem.h" -#include "CU-CP-Usage-Report-UeResourceReportItem.h" -#include "CU-UP-Usage-Report-Per-UE.h" -#include "CU-UP-Usage-Report-CellResourceReportItem.h" -#include "CU-UP-Usage-Report-UeResourceReportItem.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include "asn_application.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* +typedef struct Plm { + uint8_t *plms; + int size; +} Plm; + + +typedef struct Nrc { + uint8_t *nRcs; + int size; + int bits_unused; +} Nrc; +*/ ssize_t e2sm_encode_ric_event_trigger_definition(void *buffer, size_t buf_size, size_t event_trigger_count, long *RT_periods); -ssize_t e2sm_encode_ric_action_definition(void *buffer, size_t buf_size, long ric_style_type); +//ssize_t e2sm_encode_ric_action_definition(void *buffer, size_t buf_size, long action_Def_count, long meas_ID, long ric_style_type, long GR_periods, Plm plm, Nrc nRc); E2SM_KPM_IndicationHeader_t* e2sm_decode_ric_indication_header(void *buffer, size_t buf_size); void e2sm_free_ric_indication_header(E2SM_KPM_IndicationHeader_t* indHdr); E2SM_KPM_IndicationMessage_t* e2sm_decode_ric_indication_message(void *buffer, size_t buf_size); diff --git a/kpimon.go b/kpimon.go index 58fd16c..44e50f9 100644 --- a/kpimon.go +++ b/kpimon.go @@ -1,8 +1,18 @@ package main import "example.com/kpimon/control" +import "fmt" +import "time" func main() { + time.Sleep(15* time.Second) c := control.NewControl() + fmt.Printf("c.Run()") c.Run() + /* + err:=control.Test() + if err != nil { + fmt.Println(err) + } + */ } diff --git a/testfile1.txt b/testfile1.txt new file mode 100644 index 0000000..def8214 --- /dev/null +++ b/testfile1.txt @@ -0,0 +1,4 @@ + 5 29 + 123 35 5 2 + 15 1 28 + 27 1 25 0E E6 B0 F4 B7 00 00 06 44 55 20 31 3A 31 10 44 55 1C 56 69 61 76 69 20 52 49 43 20 54 65 73 74 26 04 00 00 00 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 27 0F diff --git a/testfile2.txt b/testfile2.txt new file mode 100644 index 0000000..e32d796 --- /dev/null +++ b/testfile2.txt @@ -0,0 +1,4 @@ + 5 29 + 123 35 5 2 + 15 4 28 + 27 4 25 0E E6 B0 F4 B7 00 00 06 44 55 20 31 3A 31 10 44 55 1C 56 69 61 76 69 20 52 49 43 20 54 65 73 74 26 28 00 1A 00 01 00 01 00 01 00 02 00 01 00 03 00 01 00 04 00 01 00 05 00 01 00 06 00 01 00 07 00 01 00 08 00 01 00 09 00 01 00 0A 00 01 00 0B 00 01 00 0C 00 01 00 0D 00 01 00 0E 00 01 00 0F 00 01 00 10 00 01 00 11 00 01 00 12 00 01 00 13 00 01 00 14 00 01 00 15 00 01 00 16 00 01 00 17 00 01 00 18 00 01 00 19 00 01 00 1A 00 01 00 1B 00 1A 48 00 00 00 10 00 00 00 00 00 08 00 01 48 00 00 00 10 00 00 00 00 00 08 00 01 48 00 00 00 10 00 00 00 00 00 08 00 01 48 00 00 00 10 00 00 00 00 00 08 00 01 48 00 00 00 10 00 00 00 00 00 08 00 01 48 00 00 00 10 00 00 00 00 00 08 00 01 48 00 00 00 10 00 00 00 00 00 08 00 01 48 00 00 00 10 00 00 00 00 00 08 00 01 48 00 00 00 10 00 00 00 00 00 08 00 01 48 00 00 00 10 00 00 00 00 00 08 00 01 48 00 00 00 10 00 00 00 00 00 08 00 01 48 00 00 00 10 00 00 00 00 00 08 00 01 48 00 00 00 10 00 00 00 00 00 08 00 01 48 00 00 00 10 00 00 00 00 00 08 00 01 48 00 00 00 10 00 00 00 00 00 08 00 01 48 00 00 00 10 00 00 00 00 00 08 00 01 48 00 00 00 10 00 00 00 00 00 08 00 01 48 00 00 00 10 00 00 00 00 00 08 00 01 48 00 00 00 10 00 00 00 00 00 08 00 01 48 00 00 00 10 00 00 00 00 00 08 00 01 48 00 00 00 10 00 00 00 00 00 08 00 01 48 00 00 00 10 00 00 00 00 00 08 00 01 48 00 00 00 10 00 00 00 00 00 08 00 01 48 00 00 00 10 00 00 00 00 00 08 00 01 48 00 00 00 10 00 00 00 00 00 08 00 01 48 00 00 00 10 00 00 00 00 00 08 00 01 48 00 00 00 10 00 00 00 00 00 08 00 01 40 27 0F -- 2.16.6