diff options
Diffstat (limited to 'epan/dissectors/packet-isdn-sup.c')
-rw-r--r-- | epan/dissectors/packet-isdn-sup.c | 3744 |
1 files changed, 3744 insertions, 0 deletions
diff --git a/epan/dissectors/packet-isdn-sup.c b/epan/dissectors/packet-isdn-sup.c new file mode 100644 index 00000000..159dd5d8 --- /dev/null +++ b/epan/dissectors/packet-isdn-sup.c @@ -0,0 +1,3744 @@ +/* Do not modify this file. Changes will be overwritten. */ +/* Generated automatically by the ASN.1 to Wireshark dissector compiler */ +/* packet-isdn-sup.c */ +/* asn2wrs.py -b -L -p isdn-sup -c ./isdn-sup.cnf -s ./packet-isdn-sup-template -D . -O ../.. Addressing-Data-Elements.asn Basic-Service-Elements.asn Embedded-Q931-Types.asn General-Errors.asn Advice-of-Charge-Operations.asn Closed-User-Group-Service-Operations.asn Conference-Add-On-Operations.asn Diversion-Operations.asn MCID-Operations.asn User-To-User-Signalling-Operations.asn Freephone-Operations.asn MLPP-Operations-And-Errors.asn */ + +/* packet-isdn-sup-template.c + * Routines for ETSI Integrated Services Digital Network (ISDN) + * supplementary services + * Copyright 2013, Anders Broman <anders.broman@ericsson.com> + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1998 Gerald Combs + * + * SPDX-License-Identifier: GPL-2.0-or-later + * References: ETSI 300 374 + */ + +#include "config.h" + +#include <epan/packet.h> +#include <epan/expert.h> + +#include "packet-ber.h" + +#define PNAME "ISDN supplementary services" +#define PSNAME "ISDN_SUP" +#define PFNAME "isdn_sup" + +void proto_register_isdn_sup(void); +void proto_reg_handoff_isdn_sup(void); + +static dissector_handle_t isdn_sup_arg_handle; +static dissector_handle_t isdn_sup_res_handle; +static dissector_handle_t isdn_sup_err_handle; + +#define fPHOID "0.4.0.210.1" + +/* Initialize the protocol and registered fields */ +static int proto_isdn_sup = -1; +static int hf_isdn_sup_operation = -1; +static int hf_isdn_sup_error = -1; + +/* Global variables */ + +#if 0 +/* ROSE context */ +static rose_ctx_t isdn_sup_rose_ctx; +#endif + +typedef struct _isdn_sup_op_t { + gint32 opcode; + dissector_t arg_pdu; + dissector_t res_pdu; +} isdn_sup_op_t; + +typedef struct _isdn_global_sup_op_t { + const char* oid; + dissector_t arg_pdu; + dissector_t res_pdu; +} isdn_sup_global_op_t; + + +typedef struct isdn_sup_err_t { + gint32 errcode; + dissector_t err_pdu; +} isdn_sup_err_t; + +static const value_string isdn_sup_str_operation[] = { + { 1, "userUserService" }, + { 2, "cUGcall" }, + { 3, "mCIDRequest" }, + { 7, "activationDiversion" }, + { 8, "deactivationDiversion" }, + { 9, "activationStatusNotificationDiv" }, + { 10, "deactivationStatusNotificationDiv" }, + { 11, "interrogationDiversion" }, + { 12, "diversionInformation" }, + { 13, "callDeflection" }, + { 14, "callRerouteing" }, + { 15, "divertingLegInformation2" }, + { 17, "interrogateServedUserNumbers" }, + { 18, "divertingLegInformation1" }, + { 19, "divertingLegInformation3" }, + { 24, "mLPPLFBQuery" }, + { 25, "mLPPCallRequest" }, + { 26, "mLPPCallPreemption" }, + { 30, "chargingRequest" }, + { 31, "aOCSCurrency" }, + { 32, "aOCSSpecialArr" }, + { 33, "aOCDCurrency" }, + { 34, "aOCDChargingUnit" }, + { 35, "aOCECurrency" }, + { 36, "aOCEChargingUnit" }, + { 40, "beginCONF" }, + { 41, "addCONF" }, + { 42, "splitCONF" }, + { 43, "dropCONF" }, + { 44, "isolateCONF" }, + { 45, "reattachCONF" }, + { 46, "partyDISC" }, + { 0, NULL} +}; + + +static const value_string isdn_sup_str_error[] = { + { 0, "notSubscribed" }, + { 3, "notAvailable" }, + { 4, "notImplemented" }, + { 6, "invalidServedUserNr" }, + { 7, "invalidCallState" }, + { 8, "basicServiceNotProvided" }, + { 9, "notIncomingCall" }, + { 10, "supplementaryServiceInteractionNotAllowed" }, + { 11, "resourceUnavailable" }, + { 26, "noChargingInfoAvailable" }, + { 16, "invalidOrUnregisteredCUGIndex" }, + { 17, "requestedBasicServiceViolatesCUGConstraints" }, + { 18, "outgoingCallsBarredWithinCUG" }, + { 19, "incomingCallsBarredWithinCUG" }, + { 20, "userNotMemberOfCUG" }, + { 21, "inconsistencyInDesignatedFacilityAndSubscriberClass" }, + { 28, "illConferenceId" }, + { 29, "illPartyId" }, + { 30, "numberOfPartiesExceeded" }, + { 31, "notActive" }, + { 32, "notAllowed" }, + { 12, "invalidDivertedToNr" }, + { 14, "specialServiceNr" }, + { 15, "diversionToServedUserNr" }, + { 23, "incomingCallAccepted" }, + { 24, "numberOfDiversionsExceeded" }, + { 46, "notActivated" }, + { 48, "requestAlreadyAccepted" }, + { 1, "rejectedByTheNetwork" }, + { 2, "rejectedByTheUser" }, + { 44, "unauthorizedPrecedenceLevel" }, + { 0, NULL} +}; + +static int hf_isdn_sup = -1; + +static int hf_isdn_sup_ChargingRequestArg_PDU = -1; /* ChargingRequestArg */ +static int hf_isdn_sup_ChargingRequestRes_PDU = -1; /* ChargingRequestRes */ +static int hf_isdn_sup_AOCSCurrencyArg_PDU = -1; /* AOCSCurrencyArg */ +static int hf_isdn_sup_AOCSSpecialArrArg_PDU = -1; /* AOCSSpecialArrArg */ +static int hf_isdn_sup_AOCDCurrencyArg_PDU = -1; /* AOCDCurrencyArg */ +static int hf_isdn_sup_AOCDChargingUnitArg_PDU = -1; /* AOCDChargingUnitArg */ +static int hf_isdn_sup_AOCECurrencyArg_PDU = -1; /* AOCECurrencyArg */ +static int hf_isdn_sup_AOCEChargingUnitArg_PDU = -1; /* AOCEChargingUnitArg */ +static int hf_isdn_sup_CUGcallArg_PDU = -1; /* CUGcallArg */ +static int hf_isdn_sup_BeginCONFArg_PDU = -1; /* BeginCONFArg */ +static int hf_isdn_sup_BeginCONFRes_PDU = -1; /* BeginCONFRes */ +static int hf_isdn_sup_AddCONFArg_PDU = -1; /* AddCONFArg */ +static int hf_isdn_sup_AddCONFRes_PDU = -1; /* AddCONFRes */ +static int hf_isdn_sup_SplitCONFArg_PDU = -1; /* SplitCONFArg */ +static int hf_isdn_sup_DropCONFArg_PDU = -1; /* DropCONFArg */ +static int hf_isdn_sup_IsolateCONFArg_PDU = -1; /* IsolateCONFArg */ +static int hf_isdn_sup_ReattachCONFArg_PDU = -1; /* ReattachCONFArg */ +static int hf_isdn_sup_PartyDISCArg_PDU = -1; /* PartyDISCArg */ +static int hf_isdn_sup_ActivationDiversionArg_PDU = -1; /* ActivationDiversionArg */ +static int hf_isdn_sup_DeactivationDiversionArg_PDU = -1; /* DeactivationDiversionArg */ +static int hf_isdn_sup_ActivationStatusNotificationDivArg_PDU = -1; /* ActivationStatusNotificationDivArg */ +static int hf_isdn_sup_DeactivationStatusNotificationDivArg_PDU = -1; /* DeactivationStatusNotificationDivArg */ +static int hf_isdn_sup_InterrogationDiversionArg_PDU = -1; /* InterrogationDiversionArg */ +static int hf_isdn_sup_InterrogationDiversionRes_PDU = -1; /* InterrogationDiversionRes */ +static int hf_isdn_sup_InterrogateServedUserNumbersRes_PDU = -1; /* InterrogateServedUserNumbersRes */ +static int hf_isdn_sup_DiversionInformationArg_PDU = -1; /* DiversionInformationArg */ +static int hf_isdn_sup_CallDeflectionArg_PDU = -1; /* CallDeflectionArg */ +static int hf_isdn_sup_CallRerouteingArg_PDU = -1; /* CallRerouteingArg */ +static int hf_isdn_sup_DivertingLegInformation1Arg_PDU = -1; /* DivertingLegInformation1Arg */ +static int hf_isdn_sup_DivertingLegInformation2Arg_PDU = -1; /* DivertingLegInformation2Arg */ +static int hf_isdn_sup_DivertingLegInformation3Arg_PDU = -1; /* DivertingLegInformation3Arg */ +static int hf_isdn_sup_UserUserServiceArg_PDU = -1; /* UserUserServiceArg */ +static int hf_isdn_sup_CalledFreephoneNrArg_PDU = -1; /* CalledFreephoneNrArg */ +static int hf_isdn_sup_Monitor_T_FPHArg_PDU = -1; /* Monitor_T_FPHArg */ +static int hf_isdn_sup_Free_T_FPHArg_PDU = -1; /* Free_T_FPHArg */ +static int hf_isdn_sup_Call_T_FPHArg_PDU = -1; /* Call_T_FPHArg */ +static int hf_isdn_sup_MLPPLFBArg_PDU = -1; /* MLPPLFBArg */ +static int hf_isdn_sup_MLPPLFBResp_PDU = -1; /* MLPPLFBResp */ +static int hf_isdn_sup_MLPPParams_PDU = -1; /* MLPPParams */ +static int hf_isdn_sup_StatusRequest_PDU = -1; /* StatusRequest */ +static int hf_isdn_sup_PreemptParams_PDU = -1; /* PreemptParams */ +static int hf_isdn_sup_presentationallowedaddressscreened = -1; /* AddressScreened */ +static int hf_isdn_sup_presentationRestricted = -1; /* NULL */ +static int hf_isdn_sup_numberNotAvailableDueToInterworking = -1; /* NULL */ +static int hf_isdn_sup_presentationrestrictedaddressscreened = -1; /* AddressScreened */ +static int hf_isdn_sup_presentationAllowedAddress = -1; /* Address */ +static int hf_isdn_sup_presentationRestrictedAddress = -1; /* Address */ +static int hf_isdn_sup_presentationallowednumberscreened = -1; /* NumberScreened */ +static int hf_isdn_sup_presentationrestrictednumberscreened = -1; /* NumberScreened */ +static int hf_isdn_sup_presentationAllowedNumber = -1; /* PartyNumber */ +static int hf_isdn_sup_presentationRestrictedNumber = -1; /* PartyNumber */ +static int hf_isdn_sup_partyNumber = -1; /* PartyNumber */ +static int hf_isdn_sup_screeningIndicator = -1; /* ScreeningIndicator */ +static int hf_isdn_sup_partySubaddress = -1; /* PartySubaddress */ +static int hf_isdn_sup_unknownPartyNumber = -1; /* NumberDigits */ +static int hf_isdn_sup_publicPartyNumber = -1; /* PublicPartyNumber */ +static int hf_isdn_sup_nsapEncodedNumber = -1; /* NsapEncodedNumber */ +static int hf_isdn_sup_dataPartyNumber = -1; /* NumberDigits */ +static int hf_isdn_sup_telexPartyNumber = -1; /* NumberDigits */ +static int hf_isdn_sup_privatePartyNumber = -1; /* PrivatePartyNumber */ +static int hf_isdn_sup_nationalStandardPartyNumber = -1; /* NumberDigits */ +static int hf_isdn_sup_publicTypeOfNumber = -1; /* PublicTypeOfNumber */ +static int hf_isdn_sup_publicNumberDigits = -1; /* NumberDigits */ +static int hf_isdn_sup_privateTypeOfNumber = -1; /* PrivateTypeOfNumber */ +static int hf_isdn_sup_privateNumberDigits = -1; /* NumberDigits */ +static int hf_isdn_sup_userSpecifiedSubaddress = -1; /* UserSpecifiedSubaddress */ +static int hf_isdn_sup_nSAPSubaddress = -1; /* NSAPSubaddress */ +static int hf_isdn_sup_subaddressInformation = -1; /* SubaddressInformation */ +static int hf_isdn_sup_oddCountIndicator = -1; /* BOOLEAN */ +static int hf_isdn_sup_aOCSCurrencyInfoList = -1; /* AOCSCurrencyInfoList */ +static int hf_isdn_sup_aOCSSpecialArrInfo = -1; /* AOCSSpecialArrInfo */ +static int hf_isdn_sup_chargingInfoFollows = -1; /* NULL */ +static int hf_isdn_sup_chargeNotAvailable = -1; /* NULL */ +static int hf_isdn_sup_aOCDCurrencyInfo = -1; /* AOCDCurrencyInfo */ +static int hf_isdn_sup_aOCDChargingUnitInfo = -1; /* AOCDChargingUnitInfo */ +static int hf_isdn_sup_aOCECurrencyInfo = -1; /* AOCECurrencyInfo */ +static int hf_isdn_sup_aOCEChargingUnitInfo = -1; /* AOCEChargingUnitInfo */ +static int hf_isdn_sup_AOCSCurrencyInfoList_item = -1; /* AOCSCurrencyInfo */ +static int hf_isdn_sup_chargedItem = -1; /* ChargedItem */ +static int hf_isdn_sup_chargingtype = -1; /* T_chargingtype */ +static int hf_isdn_sup_aocschargingtypespecificCurrency = -1; /* AOCSChargingTypeSpecificCurrency */ +static int hf_isdn_sup_durationCurrency = -1; /* DurationCurrency */ +static int hf_isdn_sup_flatRateCurrency = -1; /* FlatRateCurrency */ +static int hf_isdn_sup_volumeRateCurrency = -1; /* VolumeRateCurrency */ +static int hf_isdn_sup_specialChargingCode = -1; /* SpecialChargingCode */ +static int hf_isdn_sup_freeOfCharge = -1; /* NULL */ +static int hf_isdn_sup_currencyInfoNotAvailable = -1; /* NULL */ +static int hf_isdn_sup_dCurrency = -1; /* Currency */ +static int hf_isdn_sup_dAmount = -1; /* Amount */ +static int hf_isdn_sup_dChargingType = -1; /* ChargingType */ +static int hf_isdn_sup_dTime = -1; /* Time */ +static int hf_isdn_sup_dGranularity = -1; /* Time */ +static int hf_isdn_sup_fRCurrency = -1; /* Currency */ +static int hf_isdn_sup_fRAmount = -1; /* Amount */ +static int hf_isdn_sup_vRCurrency = -1; /* Currency */ +static int hf_isdn_sup_vRAmount = -1; /* Amount */ +static int hf_isdn_sup_vRVolumeUnit = -1; /* VolumeUnit */ +static int hf_isdn_sup_aocdspecificCurrency = -1; /* AOCDSpecificCurrency */ +static int hf_isdn_sup_recordedCurrency = -1; /* RecordedCurrency */ +static int hf_isdn_sup_typeOfChargingInfo = -1; /* TypeOfChargingInfo */ +static int hf_isdn_sup_aOCDBillingId = -1; /* AOCDBillingId */ +static int hf_isdn_sup_aocdspecificchargingunits = -1; /* AOCDSpecificChargingUnits */ +static int hf_isdn_sup_recordedUnitsList = -1; /* RecordedUnitsList */ +static int hf_isdn_sup_rCurrency = -1; /* Currency */ +static int hf_isdn_sup_rAmount = -1; /* Amount */ +static int hf_isdn_sup_RecordedUnitsList_item = -1; /* RecordedUnits */ +static int hf_isdn_sup_recoredunitscc = -1; /* RecoredUnitsCc */ +static int hf_isdn_sup_recordedNumberOfUnits = -1; /* NumberOfUnits */ +static int hf_isdn_sup_notAvailable = -1; /* NULL */ +static int hf_isdn_sup_recordedTypeOfUnits = -1; /* TypeOfUnit */ +static int hf_isdn_sup_aocecurrencycc = -1; /* AOCECurrencyCc */ +static int hf_isdn_sup_aoceccspecificCurrency = -1; /* AOCECcSpecificCurrency */ +static int hf_isdn_sup_aOCEBillingId = -1; /* AOCEBillingId */ +static int hf_isdn_sup_chargingAssociation = -1; /* ChargingAssociation */ +static int hf_isdn_sup_aocechargingunitcc = -1; /* AOCEChargingUnitCc */ +static int hf_isdn_sup_aoceccspecificchargingunits = -1; /* AOCECcSpecificChargingUnits */ +static int hf_isdn_sup_currencyAmount = -1; /* CurrencyAmount */ +static int hf_isdn_sup_multiplier = -1; /* Multiplier */ +static int hf_isdn_sup_lengthOfTimeUnit = -1; /* LengthOfTimeUnit */ +static int hf_isdn_sup_scale = -1; /* Scale */ +static int hf_isdn_sup_chargeNumber = -1; /* PartyNumber */ +static int hf_isdn_sup_chargeIdentifier = -1; /* ChargeIdentifier */ +static int hf_isdn_sup_oARequested = -1; /* OARequested */ +static int hf_isdn_sup_cUGIndex = -1; /* CUGIndex */ +static int hf_isdn_sup_conferenceId = -1; /* ConferenceId */ +static int hf_isdn_sup_partyId = -1; /* PartyId */ +static int hf_isdn_sup_procedure = -1; /* Procedure */ +static int hf_isdn_sup_basicService = -1; /* BasicService */ +static int hf_isdn_sup_forwardedToAddress = -1; /* Address */ +static int hf_isdn_sup_servedUserNr = -1; /* ServedUserNr */ +static int hf_isdn_sup_noReplyTimer = -1; /* NoReplyTimer */ +static int hf_isdn_sup_forwardedToAddresss = -1; /* Address */ +static int hf_isdn_sup_diversionReason = -1; /* DiversionReason */ +static int hf_isdn_sup_servedUserSubaddress = -1; /* PartySubaddress */ +static int hf_isdn_sup_callingAddress = -1; /* PresentedAddressScreened */ +static int hf_isdn_sup_originalCalledNr = -1; /* PresentedNumberUnscreened */ +static int hf_isdn_sup_lastDivertingNr = -1; /* PresentedNumberUnscreened */ +static int hf_isdn_sup_lastDivertingReason = -1; /* DiversionReason */ +static int hf_isdn_sup_userInfo = -1; /* Q931InformationElement */ +static int hf_isdn_sup_deflectionAddress = -1; /* Address */ +static int hf_isdn_sup_presentationAllowedDivertedToUser = -1; /* PresentationAllowedIndicator */ +static int hf_isdn_sup_rerouteingReason = -1; /* DiversionReason */ +static int hf_isdn_sup_calledAddress = -1; /* Address */ +static int hf_isdn_sup_rerouteingCounter = -1; /* DiversionCounter */ +static int hf_isdn_sup_q931InfoElement = -1; /* Q931InformationElement */ +static int hf_isdn_sup_lastRerouteingNr = -1; /* PresentedNumberUnscreened */ +static int hf_isdn_sup_subscriptionOption = -1; /* SubscriptionOption */ +static int hf_isdn_sup_callingPartySubaddress = -1; /* PartySubaddress */ +static int hf_isdn_sup_divertedToNumber = -1; /* PresentedNumberUnscreened */ +static int hf_isdn_sup_diversionCounter = -1; /* DiversionCounter */ +static int hf_isdn_sup_divertingNr = -1; /* PresentedNumberUnscreened */ +static int hf_isdn_sup_IntResultList_item = -1; /* IntResult */ +static int hf_isdn_sup_individualNumber = -1; /* PartyNumber */ +static int hf_isdn_sup_allNumbers = -1; /* NULL */ +static int hf_isdn_sup_ServedUserNumberList_item = -1; /* PartyNumber */ +static int hf_isdn_sup_service = -1; /* Service */ +static int hf_isdn_sup_preferred = -1; /* Preferred */ +static int hf_isdn_sup_servedUserDestination = -1; /* PartyNumber */ +static int hf_isdn_sup_queueIdentity = -1; /* QueueIdentity */ +static int hf_isdn_sup_fPHReference = -1; /* FPHReference */ +static int hf_isdn_sup_calledFreephoneNr = -1; /* CalledFreephoneNr */ +static int hf_isdn_sup_mlppParams = -1; /* MLPPParams */ +static int hf_isdn_sup_ieArg = -1; /* IEArg */ +static int hf_isdn_sup_precLevel = -1; /* PrecLevel */ +static int hf_isdn_sup_lfbIndictn = -1; /* LFBIndictn */ +static int hf_isdn_sup_mlppSvcDomn = -1; /* MLPPSvcDomn */ +static int hf_isdn_sup_statusQuery = -1; /* StatusQuery */ +static int hf_isdn_sup_location = -1; /* Location */ + + +/* Initialize the subtree pointers */ +static gint ett_isdn_sup = -1; + +static gint ett_isdn_sup_PresentedAddressScreened = -1; +static gint ett_isdn_sup_PresentedAddressUnscreened = -1; +static gint ett_isdn_sup_PresentedNumberScreened = -1; +static gint ett_isdn_sup_PresentedNumberUnscreened = -1; +static gint ett_isdn_sup_AddressScreened = -1; +static gint ett_isdn_sup_NumberScreened = -1; +static gint ett_isdn_sup_Address = -1; +static gint ett_isdn_sup_PartyNumber = -1; +static gint ett_isdn_sup_PublicPartyNumber = -1; +static gint ett_isdn_sup_PrivatePartyNumber = -1; +static gint ett_isdn_sup_PartySubaddress = -1; +static gint ett_isdn_sup_UserSpecifiedSubaddress = -1; +static gint ett_isdn_sup_ChargingRequestRes = -1; +static gint ett_isdn_sup_AOCSCurrencyArg = -1; +static gint ett_isdn_sup_AOCSSpecialArrArg = -1; +static gint ett_isdn_sup_AOCDCurrencyArg = -1; +static gint ett_isdn_sup_AOCDChargingUnitArg = -1; +static gint ett_isdn_sup_AOCECurrencyArg = -1; +static gint ett_isdn_sup_AOCEChargingUnitArg = -1; +static gint ett_isdn_sup_AOCSCurrencyInfoList = -1; +static gint ett_isdn_sup_AOCSCurrencyInfo = -1; +static gint ett_isdn_sup_T_chargingtype = -1; +static gint ett_isdn_sup_AOCSChargingTypeSpecificCurrency = -1; +static gint ett_isdn_sup_DurationCurrency = -1; +static gint ett_isdn_sup_FlatRateCurrency = -1; +static gint ett_isdn_sup_VolumeRateCurrency = -1; +static gint ett_isdn_sup_AOCDCurrencyInfo = -1; +static gint ett_isdn_sup_AOCDSpecificCurrency = -1; +static gint ett_isdn_sup_AOCDChargingUnitInfo = -1; +static gint ett_isdn_sup_AOCDSpecificChargingUnits = -1; +static gint ett_isdn_sup_RecordedCurrency = -1; +static gint ett_isdn_sup_RecordedUnitsList = -1; +static gint ett_isdn_sup_RecordedUnits = -1; +static gint ett_isdn_sup_RecoredUnitsCc = -1; +static gint ett_isdn_sup_AOCECurrencyInfo = -1; +static gint ett_isdn_sup_AOCECurrencyCc = -1; +static gint ett_isdn_sup_AOCECcSpecificCurrency = -1; +static gint ett_isdn_sup_AOCEChargingUnitInfo = -1; +static gint ett_isdn_sup_AOCEChargingUnitCc = -1; +static gint ett_isdn_sup_AOCECcSpecificChargingUnits = -1; +static gint ett_isdn_sup_Amount = -1; +static gint ett_isdn_sup_Time = -1; +static gint ett_isdn_sup_ChargingAssociation = -1; +static gint ett_isdn_sup_CUGcallArg = -1; +static gint ett_isdn_sup_BeginCONFRes = -1; +static gint ett_isdn_sup_SplitCONFArg = -1; +static gint ett_isdn_sup_ActivationDiversionArg = -1; +static gint ett_isdn_sup_DeactivationDiversionArg = -1; +static gint ett_isdn_sup_ActivationStatusNotificationDivArg = -1; +static gint ett_isdn_sup_DeactivationStatusNotificationDivArg = -1; +static gint ett_isdn_sup_InterrogationDiversionArg = -1; +static gint ett_isdn_sup_DiversionInformationArg = -1; +static gint ett_isdn_sup_CallDeflectionArg = -1; +static gint ett_isdn_sup_CallRerouteingArg = -1; +static gint ett_isdn_sup_DivertingLegInformation1Arg = -1; +static gint ett_isdn_sup_DivertingLegInformation2Arg = -1; +static gint ett_isdn_sup_IntResultList = -1; +static gint ett_isdn_sup_IntResult = -1; +static gint ett_isdn_sup_ServedUserNr = -1; +static gint ett_isdn_sup_ServedUserNumberList = -1; +static gint ett_isdn_sup_UserUserServiceArg = -1; +static gint ett_isdn_sup_Monitor_T_FPHArg = -1; +static gint ett_isdn_sup_Free_T_FPHArg = -1; +static gint ett_isdn_sup_Call_T_FPHArg = -1; +static gint ett_isdn_sup_MLPPLFBArg = -1; +static gint ett_isdn_sup_MLPPParams = -1; +static gint ett_isdn_sup_MLPPLFBResp = -1; + +/* static expert_field ei_isdn_sup_unsupported_arg_type = EI_INIT; */ +static expert_field ei_isdn_sup_unsupported_result_type = EI_INIT; +static expert_field ei_isdn_sup_unsupported_error_type = EI_INIT; + +/* Preference settings default */ + +/* Global variables */ + + + +static int +dissect_isdn_sup_NumberDigits(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_NumericString, + actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const value_string isdn_sup_PublicTypeOfNumber_vals[] = { + { 0, "unknown" }, + { 1, "internationalNumber" }, + { 2, "nationalNumber" }, + { 3, "networkSpecificNumber" }, + { 4, "subscriberNumber" }, + { 6, "abbreviatedNumber" }, + { 0, NULL } +}; + + +static int +dissect_isdn_sup_PublicTypeOfNumber(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const ber_sequence_t PublicPartyNumber_sequence[] = { + { &hf_isdn_sup_publicTypeOfNumber, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_PublicTypeOfNumber }, + { &hf_isdn_sup_publicNumberDigits, BER_CLASS_UNI, BER_UNI_TAG_NumericString, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_NumberDigits }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_PublicPartyNumber(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + PublicPartyNumber_sequence, hf_index, ett_isdn_sup_PublicPartyNumber); + + return offset; +} + + + +static int +dissect_isdn_sup_NsapEncodedNumber(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const value_string isdn_sup_PrivateTypeOfNumber_vals[] = { + { 0, "unknown" }, + { 1, "level2RegionalNumber" }, + { 2, "level1RegionalNumber" }, + { 3, "pTNSpecificNumber" }, + { 4, "localNumber" }, + { 6, "abbreviatedNumber" }, + { 0, NULL } +}; + + +static int +dissect_isdn_sup_PrivateTypeOfNumber(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const ber_sequence_t PrivatePartyNumber_sequence[] = { + { &hf_isdn_sup_privateTypeOfNumber, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_PrivateTypeOfNumber }, + { &hf_isdn_sup_privateNumberDigits, BER_CLASS_UNI, BER_UNI_TAG_NumericString, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_NumberDigits }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_PrivatePartyNumber(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + PrivatePartyNumber_sequence, hf_index, ett_isdn_sup_PrivatePartyNumber); + + return offset; +} + + +static const value_string isdn_sup_PartyNumber_vals[] = { + { 0, "unknownPartyNumber" }, + { 1, "publicPartyNumber" }, + { 2, "nsapEncodedNumber" }, + { 3, "dataPartyNumber" }, + { 4, "telexPartyNumber" }, + { 5, "privatePartyNumber" }, + { 8, "nationalStandardPartyNumber" }, + { 0, NULL } +}; + +static const ber_choice_t PartyNumber_choice[] = { + { 0, &hf_isdn_sup_unknownPartyNumber, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_isdn_sup_NumberDigits }, + { 1, &hf_isdn_sup_publicPartyNumber, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_PublicPartyNumber }, + { 2, &hf_isdn_sup_nsapEncodedNumber, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_isdn_sup_NsapEncodedNumber }, + { 3, &hf_isdn_sup_dataPartyNumber, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_isdn_sup_NumberDigits }, + { 4, &hf_isdn_sup_telexPartyNumber, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_isdn_sup_NumberDigits }, + { 5, &hf_isdn_sup_privatePartyNumber, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_isdn_sup_PrivatePartyNumber }, + { 8, &hf_isdn_sup_nationalStandardPartyNumber, BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_isdn_sup_NumberDigits }, + { 0, NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_PartyNumber(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_choice(actx, tree, tvb, offset, + PartyNumber_choice, hf_index, ett_isdn_sup_PartyNumber, + NULL); + + return offset; +} + + +static const value_string isdn_sup_ScreeningIndicator_vals[] = { + { 0, "userProvidedNotScreened" }, + { 1, "userProvidedVerifiedAndPassed" }, + { 2, "userProvidedVerifiedAndFailed" }, + { 3, "networkProvided" }, + { 0, NULL } +}; + + +static int +dissect_isdn_sup_ScreeningIndicator(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + + +static int +dissect_isdn_sup_SubaddressInformation(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + + +static int +dissect_isdn_sup_BOOLEAN(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_boolean(implicit_tag, actx, tree, tvb, offset, hf_index, NULL); + + return offset; +} + + +static const ber_sequence_t UserSpecifiedSubaddress_sequence[] = { + { &hf_isdn_sup_subaddressInformation, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_SubaddressInformation }, + { &hf_isdn_sup_oddCountIndicator, BER_CLASS_UNI, BER_UNI_TAG_BOOLEAN, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_isdn_sup_BOOLEAN }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_UserSpecifiedSubaddress(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + UserSpecifiedSubaddress_sequence, hf_index, ett_isdn_sup_UserSpecifiedSubaddress); + + return offset; +} + + + +static int +dissect_isdn_sup_NSAPSubaddress(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const value_string isdn_sup_PartySubaddress_vals[] = { + { 0, "userSpecifiedSubaddress" }, + { 1, "nSAPSubaddress" }, + { 0, NULL } +}; + +static const ber_choice_t PartySubaddress_choice[] = { + { 0, &hf_isdn_sup_userSpecifiedSubaddress, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_UserSpecifiedSubaddress }, + { 1, &hf_isdn_sup_nSAPSubaddress, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_NSAPSubaddress }, + { 0, NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_PartySubaddress(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_choice(actx, tree, tvb, offset, + PartySubaddress_choice, hf_index, ett_isdn_sup_PartySubaddress, + NULL); + + return offset; +} + + +static const ber_sequence_t AddressScreened_sequence[] = { + { &hf_isdn_sup_partyNumber, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_PartyNumber }, + { &hf_isdn_sup_screeningIndicator, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_ScreeningIndicator }, + { &hf_isdn_sup_partySubaddress, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_PartySubaddress }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_AddressScreened(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + AddressScreened_sequence, hf_index, ett_isdn_sup_AddressScreened); + + return offset; +} + + + +static int +dissect_isdn_sup_NULL(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_null(implicit_tag, actx, tree, tvb, offset, hf_index); + + return offset; +} + + +static const value_string isdn_sup_PresentedAddressScreened_vals[] = { + { 0, "presentationAllowedAddress" }, + { 1, "presentationRestricted" }, + { 2, "numberNotAvailableDueToInterworking" }, + { 3, "presentationRestrictedAddress" }, + { 0, NULL } +}; + +static const ber_choice_t PresentedAddressScreened_choice[] = { + { 0, &hf_isdn_sup_presentationallowedaddressscreened, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_isdn_sup_AddressScreened }, + { 1, &hf_isdn_sup_presentationRestricted, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_NULL }, + { 2, &hf_isdn_sup_numberNotAvailableDueToInterworking, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_isdn_sup_NULL }, + { 3, &hf_isdn_sup_presentationrestrictedaddressscreened, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_isdn_sup_AddressScreened }, + { 0, NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_PresentedAddressScreened(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_choice(actx, tree, tvb, offset, + PresentedAddressScreened_choice, hf_index, ett_isdn_sup_PresentedAddressScreened, + NULL); + + return offset; +} + + +static const ber_sequence_t Address_sequence[] = { + { &hf_isdn_sup_partyNumber, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_PartyNumber }, + { &hf_isdn_sup_partySubaddress, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_PartySubaddress }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_Address(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + Address_sequence, hf_index, ett_isdn_sup_Address); + + return offset; +} + + + + + +static const value_string isdn_sup_PresentedNumberUnscreened_vals[] = { + { 0, "presentationAllowedNumber" }, + { 1, "presentationRestricted" }, + { 2, "numberNotAvailableDueToInterworking" }, + { 3, "presentationRestrictedNumber" }, + { 0, NULL } +}; + +static const ber_choice_t PresentedNumberUnscreened_choice[] = { + { 0, &hf_isdn_sup_presentationAllowedNumber, BER_CLASS_CON, 0, 0, dissect_isdn_sup_PartyNumber }, + { 1, &hf_isdn_sup_presentationRestricted, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_NULL }, + { 2, &hf_isdn_sup_numberNotAvailableDueToInterworking, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_isdn_sup_NULL }, + { 3, &hf_isdn_sup_presentationRestrictedNumber, BER_CLASS_CON, 3, 0, dissect_isdn_sup_PartyNumber }, + { 0, NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_PresentedNumberUnscreened(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_choice(actx, tree, tvb, offset, + PresentedNumberUnscreened_choice, hf_index, ett_isdn_sup_PresentedNumberUnscreened, + NULL); + + return offset; +} + + + +static int +dissect_isdn_sup_PresentationAllowedIndicator(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_boolean(implicit_tag, actx, tree, tvb, offset, hf_index, NULL); + + return offset; +} + + +static const value_string isdn_sup_BasicService_vals[] = { + { 0, "allServices" }, + { 1, "speech" }, + { 2, "unrestrictedDigitalInformation" }, + { 3, "audio3k1Hz" }, + { 4, "unrestrictedDigitalInformationWithTonesAndAnnouncements" }, + { 5, "multirate" }, + { 32, "telephony3k1Hz" }, + { 33, "teletex" }, + { 34, "telefaxGroup4Class1" }, + { 35, "videotexSyntaxBased" }, + { 36, "videotelephony" }, + { 37, "telefaxGroup2-3" }, + { 38, "telephony7kHz" }, + { 39, "euroFileTransfer" }, + { 40, "fileTransferAndAccessManagement" }, + { 41, "videoconference" }, + { 42, "audioGraphicConference" }, + { 0, NULL } +}; + + +static int +dissect_isdn_sup_BasicService(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + + +static int +dissect_isdn_sup_OCTET_STRING(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + + +static int +dissect_isdn_sup_Q931InformationElement(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_tagged_type(implicit_tag, actx, tree, tvb, offset, + hf_index, BER_CLASS_APP, 0, TRUE, dissect_isdn_sup_OCTET_STRING); + + return offset; +} + + +static const value_string isdn_sup_ChargingCase_vals[] = { + { 0, "chargingInformationAtCallSetup" }, + { 1, "chargingDuringACall" }, + { 2, "chargingAtTheEndOfACall" }, + { 0, NULL } +}; + + +static int +dissect_isdn_sup_ChargingCase(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + + +static int +dissect_isdn_sup_ChargingRequestArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_isdn_sup_ChargingCase(implicit_tag, tvb, offset, actx, tree, hf_index); + + return offset; +} + + +static const value_string isdn_sup_ChargedItem_vals[] = { + { 0, "basicCommunication" }, + { 1, "callAttempt" }, + { 2, "callSetup" }, + { 3, "userToUserInfo" }, + { 4, "operationOfSupplementaryServ" }, + { 0, NULL } +}; + + +static int +dissect_isdn_sup_ChargedItem(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + + +static int +dissect_isdn_sup_Currency(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String, + actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + + +static int +dissect_isdn_sup_CurrencyAmount(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const value_string isdn_sup_Multiplier_vals[] = { + { 0, "oneThousandth" }, + { 1, "oneHundredth" }, + { 2, "oneTenth" }, + { 3, "one" }, + { 4, "ten" }, + { 5, "hundred" }, + { 6, "thousand" }, + { 0, NULL } +}; + + +static int +dissect_isdn_sup_Multiplier(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const ber_sequence_t Amount_sequence[] = { + { &hf_isdn_sup_currencyAmount, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_CurrencyAmount }, + { &hf_isdn_sup_multiplier , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_isdn_sup_Multiplier }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_Amount(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + Amount_sequence, hf_index, ett_isdn_sup_Amount); + + return offset; +} + + +static const value_string isdn_sup_ChargingType_vals[] = { + { 0, "continuousCharging" }, + { 1, "stepFunction" }, + { 0, NULL } +}; + + +static int +dissect_isdn_sup_ChargingType(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + + +static int +dissect_isdn_sup_LengthOfTimeUnit(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const value_string isdn_sup_Scale_vals[] = { + { 0, "oneHundredthSecond" }, + { 1, "oneTenthSecond" }, + { 2, "oneSecond" }, + { 3, "tenSeconds" }, + { 4, "oneMinute" }, + { 5, "oneHour" }, + { 6, "twentyFourHours" }, + { 0, NULL } +}; + + +static int +dissect_isdn_sup_Scale(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const ber_sequence_t Time_sequence[] = { + { &hf_isdn_sup_lengthOfTimeUnit, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_LengthOfTimeUnit }, + { &hf_isdn_sup_scale , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_isdn_sup_Scale }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_Time(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + Time_sequence, hf_index, ett_isdn_sup_Time); + + return offset; +} + + +static const ber_sequence_t DurationCurrency_sequence[] = { + { &hf_isdn_sup_dCurrency , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_Currency }, + { &hf_isdn_sup_dAmount , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_isdn_sup_Amount }, + { &hf_isdn_sup_dChargingType, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_isdn_sup_ChargingType }, + { &hf_isdn_sup_dTime , BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_isdn_sup_Time }, + { &hf_isdn_sup_dGranularity, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_isdn_sup_Time }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_DurationCurrency(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + DurationCurrency_sequence, hf_index, ett_isdn_sup_DurationCurrency); + + return offset; +} + + +static const ber_sequence_t FlatRateCurrency_sequence[] = { + { &hf_isdn_sup_fRCurrency , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_Currency }, + { &hf_isdn_sup_fRAmount , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_isdn_sup_Amount }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_FlatRateCurrency(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + FlatRateCurrency_sequence, hf_index, ett_isdn_sup_FlatRateCurrency); + + return offset; +} + + +static const value_string isdn_sup_VolumeUnit_vals[] = { + { 0, "octet" }, + { 1, "segment" }, + { 2, "message" }, + { 0, NULL } +}; + + +static int +dissect_isdn_sup_VolumeUnit(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const ber_sequence_t VolumeRateCurrency_sequence[] = { + { &hf_isdn_sup_vRCurrency , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_Currency }, + { &hf_isdn_sup_vRAmount , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_isdn_sup_Amount }, + { &hf_isdn_sup_vRVolumeUnit, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_isdn_sup_VolumeUnit }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_VolumeRateCurrency(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + VolumeRateCurrency_sequence, hf_index, ett_isdn_sup_VolumeRateCurrency); + + return offset; +} + + +static const value_string isdn_sup_AOCSChargingTypeSpecificCurrency_vals[] = { + { 1, "durationCurrency" }, + { 2, "flatRateCurrency" }, + { 3, "volumeRateCurrency" }, + { 0, NULL } +}; + +static const ber_choice_t AOCSChargingTypeSpecificCurrency_choice[] = { + { 1, &hf_isdn_sup_durationCurrency, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_DurationCurrency }, + { 2, &hf_isdn_sup_flatRateCurrency, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_isdn_sup_FlatRateCurrency }, + { 3, &hf_isdn_sup_volumeRateCurrency, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_isdn_sup_VolumeRateCurrency }, + { 0, NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_AOCSChargingTypeSpecificCurrency(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_choice(actx, tree, tvb, offset, + AOCSChargingTypeSpecificCurrency_choice, hf_index, ett_isdn_sup_AOCSChargingTypeSpecificCurrency, + NULL); + + return offset; +} + + + +static int +dissect_isdn_sup_SpecialChargingCode(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const value_string isdn_sup_T_chargingtype_vals[] = { + { 0, "specificCurrency" }, + { 1, "specialChargingCode" }, + { 2, "freeOfCharge" }, + { 3, "currencyInfoNotAvailable" }, + { 0, NULL } +}; + +static const ber_choice_t T_chargingtype_choice[] = { + { 0, &hf_isdn_sup_aocschargingtypespecificCurrency, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_AOCSChargingTypeSpecificCurrency }, + { 1, &hf_isdn_sup_specialChargingCode, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_SpecialChargingCode }, + { 2, &hf_isdn_sup_freeOfCharge, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_isdn_sup_NULL }, + { 3, &hf_isdn_sup_currencyInfoNotAvailable, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_isdn_sup_NULL }, + { 0, NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_T_chargingtype(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_choice(actx, tree, tvb, offset, + T_chargingtype_choice, hf_index, ett_isdn_sup_T_chargingtype, + NULL); + + return offset; +} + + +static const ber_sequence_t AOCSCurrencyInfo_sequence[] = { + { &hf_isdn_sup_chargedItem, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_ChargedItem }, + { &hf_isdn_sup_chargingtype, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_T_chargingtype }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_AOCSCurrencyInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + AOCSCurrencyInfo_sequence, hf_index, ett_isdn_sup_AOCSCurrencyInfo); + + return offset; +} + + +static const ber_sequence_t AOCSCurrencyInfoList_sequence_of[1] = { + { &hf_isdn_sup_AOCSCurrencyInfoList_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_AOCSCurrencyInfo }, +}; + +static int +dissect_isdn_sup_AOCSCurrencyInfoList(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset, + AOCSCurrencyInfoList_sequence_of, hf_index, ett_isdn_sup_AOCSCurrencyInfoList); + + return offset; +} + + + +static int +dissect_isdn_sup_AOCSSpecialArrInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const value_string isdn_sup_ChargingRequestRes_vals[] = { + { 0, "aOCSCurrencyInfoList" }, + { 1, "aOCSSpecialArrInfo" }, + { 2, "chargingInfoFollows" }, + { 0, NULL } +}; + +static const ber_choice_t ChargingRequestRes_choice[] = { + { 0, &hf_isdn_sup_aOCSCurrencyInfoList, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_AOCSCurrencyInfoList }, + { 1, &hf_isdn_sup_aOCSSpecialArrInfo, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_AOCSSpecialArrInfo }, + { 2, &hf_isdn_sup_chargingInfoFollows, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_NULL }, + { 0, NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_ChargingRequestRes(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_choice(actx, tree, tvb, offset, + ChargingRequestRes_choice, hf_index, ett_isdn_sup_ChargingRequestRes, + NULL); + + return offset; +} + + +static const value_string isdn_sup_AOCSCurrencyArg_vals[] = { + { 0, "chargeNotAvailable" }, + { 1, "aOCSCurrencyInfoList" }, + { 0, NULL } +}; + +static const ber_choice_t AOCSCurrencyArg_choice[] = { + { 0, &hf_isdn_sup_chargeNotAvailable, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_NULL }, + { 1, &hf_isdn_sup_aOCSCurrencyInfoList, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_AOCSCurrencyInfoList }, + { 0, NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_AOCSCurrencyArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_choice(actx, tree, tvb, offset, + AOCSCurrencyArg_choice, hf_index, ett_isdn_sup_AOCSCurrencyArg, + NULL); + + return offset; +} + + +static const value_string isdn_sup_AOCSSpecialArrArg_vals[] = { + { 0, "chargeNotAvailable" }, + { 1, "aOCSSpecialArrInfo" }, + { 0, NULL } +}; + +static const ber_choice_t AOCSSpecialArrArg_choice[] = { + { 0, &hf_isdn_sup_chargeNotAvailable, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_NULL }, + { 1, &hf_isdn_sup_aOCSSpecialArrInfo, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_AOCSSpecialArrInfo }, + { 0, NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_AOCSSpecialArrArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_choice(actx, tree, tvb, offset, + AOCSSpecialArrArg_choice, hf_index, ett_isdn_sup_AOCSSpecialArrArg, + NULL); + + return offset; +} + + +static const ber_sequence_t RecordedCurrency_sequence[] = { + { &hf_isdn_sup_rCurrency , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_Currency }, + { &hf_isdn_sup_rAmount , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_isdn_sup_Amount }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_RecordedCurrency(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + RecordedCurrency_sequence, hf_index, ett_isdn_sup_RecordedCurrency); + + return offset; +} + + +static const value_string isdn_sup_TypeOfChargingInfo_vals[] = { + { 0, "subTotal" }, + { 1, "total" }, + { 0, NULL } +}; + + +static int +dissect_isdn_sup_TypeOfChargingInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const value_string isdn_sup_AOCDBillingId_vals[] = { + { 0, "normalCharging" }, + { 1, "reverseCharging" }, + { 2, "creditCardCharging" }, + { 0, NULL } +}; + + +static int +dissect_isdn_sup_AOCDBillingId(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const ber_sequence_t AOCDSpecificCurrency_sequence[] = { + { &hf_isdn_sup_recordedCurrency, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_RecordedCurrency }, + { &hf_isdn_sup_typeOfChargingInfo, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_isdn_sup_TypeOfChargingInfo }, + { &hf_isdn_sup_aOCDBillingId, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_isdn_sup_AOCDBillingId }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_AOCDSpecificCurrency(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + AOCDSpecificCurrency_sequence, hf_index, ett_isdn_sup_AOCDSpecificCurrency); + + return offset; +} + + +static const value_string isdn_sup_AOCDCurrencyInfo_vals[] = { + { 0, "specificCurrency" }, + { 1, "freeOfCharge" }, + { 0, NULL } +}; + +static const ber_choice_t AOCDCurrencyInfo_choice[] = { + { 0, &hf_isdn_sup_aocdspecificCurrency, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_AOCDSpecificCurrency }, + { 1, &hf_isdn_sup_freeOfCharge, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_NULL }, + { 0, NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_AOCDCurrencyInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_choice(actx, tree, tvb, offset, + AOCDCurrencyInfo_choice, hf_index, ett_isdn_sup_AOCDCurrencyInfo, + NULL); + + return offset; +} + + +static const value_string isdn_sup_AOCDCurrencyArg_vals[] = { + { 0, "chargeNotAvailable" }, + { 1, "aOCDCurrencyInfo" }, + { 0, NULL } +}; + +static const ber_choice_t AOCDCurrencyArg_choice[] = { + { 0, &hf_isdn_sup_chargeNotAvailable, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_NULL }, + { 1, &hf_isdn_sup_aOCDCurrencyInfo, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_AOCDCurrencyInfo }, + { 0, NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_AOCDCurrencyArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_choice(actx, tree, tvb, offset, + AOCDCurrencyArg_choice, hf_index, ett_isdn_sup_AOCDCurrencyArg, + NULL); + + return offset; +} + + + +static int +dissect_isdn_sup_NumberOfUnits(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const value_string isdn_sup_RecoredUnitsCc_vals[] = { + { 0, "recordedNumberOfUnits" }, + { 1, "notAvailable" }, + { 0, NULL } +}; + +static const ber_choice_t RecoredUnitsCc_choice[] = { + { 0, &hf_isdn_sup_recordedNumberOfUnits, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_NumberOfUnits }, + { 1, &hf_isdn_sup_notAvailable, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_NULL }, + { 0, NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_RecoredUnitsCc(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_choice(actx, tree, tvb, offset, + RecoredUnitsCc_choice, hf_index, ett_isdn_sup_RecoredUnitsCc, + NULL); + + return offset; +} + + + +static int +dissect_isdn_sup_TypeOfUnit(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const ber_sequence_t RecordedUnits_sequence[] = { + { &hf_isdn_sup_recoredunitscc, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_RecoredUnitsCc }, + { &hf_isdn_sup_recordedTypeOfUnits, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_isdn_sup_TypeOfUnit }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_RecordedUnits(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + RecordedUnits_sequence, hf_index, ett_isdn_sup_RecordedUnits); + + return offset; +} + + +static const ber_sequence_t RecordedUnitsList_sequence_of[1] = { + { &hf_isdn_sup_RecordedUnitsList_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_RecordedUnits }, +}; + +static int +dissect_isdn_sup_RecordedUnitsList(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset, + RecordedUnitsList_sequence_of, hf_index, ett_isdn_sup_RecordedUnitsList); + + return offset; +} + + +static const ber_sequence_t AOCDSpecificChargingUnits_sequence[] = { + { &hf_isdn_sup_recordedUnitsList, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_RecordedUnitsList }, + { &hf_isdn_sup_typeOfChargingInfo, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_isdn_sup_TypeOfChargingInfo }, + { &hf_isdn_sup_aOCDBillingId, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_isdn_sup_AOCDBillingId }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_AOCDSpecificChargingUnits(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + AOCDSpecificChargingUnits_sequence, hf_index, ett_isdn_sup_AOCDSpecificChargingUnits); + + return offset; +} + + +static const value_string isdn_sup_AOCDChargingUnitInfo_vals[] = { + { 0, "specificChargingUnits" }, + { 1, "freeOfCharge" }, + { 0, NULL } +}; + +static const ber_choice_t AOCDChargingUnitInfo_choice[] = { + { 0, &hf_isdn_sup_aocdspecificchargingunits, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_AOCDSpecificChargingUnits }, + { 1, &hf_isdn_sup_freeOfCharge, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_NULL }, + { 0, NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_AOCDChargingUnitInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_choice(actx, tree, tvb, offset, + AOCDChargingUnitInfo_choice, hf_index, ett_isdn_sup_AOCDChargingUnitInfo, + NULL); + + return offset; +} + + +static const value_string isdn_sup_AOCDChargingUnitArg_vals[] = { + { 0, "chargeNotAvailable" }, + { 1, "aOCDChargingUnitInfo" }, + { 0, NULL } +}; + +static const ber_choice_t AOCDChargingUnitArg_choice[] = { + { 0, &hf_isdn_sup_chargeNotAvailable, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_NULL }, + { 1, &hf_isdn_sup_aOCDChargingUnitInfo, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_AOCDChargingUnitInfo }, + { 0, NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_AOCDChargingUnitArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_choice(actx, tree, tvb, offset, + AOCDChargingUnitArg_choice, hf_index, ett_isdn_sup_AOCDChargingUnitArg, + NULL); + + return offset; +} + + +static const value_string isdn_sup_AOCEBillingId_vals[] = { + { 0, "normalCharging" }, + { 1, "reverseCharging" }, + { 2, "creditCardCharging" }, + { 3, "callForwardingUnconditional" }, + { 4, "callForwardingBusy" }, + { 5, "callForwardingNoReply" }, + { 6, "callDeflection" }, + { 7, "callTransfer" }, + { 0, NULL } +}; + + +static int +dissect_isdn_sup_AOCEBillingId(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const ber_sequence_t AOCECcSpecificCurrency_sequence[] = { + { &hf_isdn_sup_recordedCurrency, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_RecordedCurrency }, + { &hf_isdn_sup_aOCEBillingId, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_isdn_sup_AOCEBillingId }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_AOCECcSpecificCurrency(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + AOCECcSpecificCurrency_sequence, hf_index, ett_isdn_sup_AOCECcSpecificCurrency); + + return offset; +} + + +static const value_string isdn_sup_AOCECurrencyCc_vals[] = { + { 0, "specificCurrency" }, + { 1, "freeOfCharge" }, + { 0, NULL } +}; + +static const ber_choice_t AOCECurrencyCc_choice[] = { + { 0, &hf_isdn_sup_aoceccspecificCurrency, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_AOCECcSpecificCurrency }, + { 1, &hf_isdn_sup_freeOfCharge, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_NULL }, + { 0, NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_AOCECurrencyCc(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_choice(actx, tree, tvb, offset, + AOCECurrencyCc_choice, hf_index, ett_isdn_sup_AOCECurrencyCc, + NULL); + + return offset; +} + + + +static int +dissect_isdn_sup_ChargeIdentifier(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const value_string isdn_sup_ChargingAssociation_vals[] = { + { 0, "chargeNumber" }, + { 1, "chargeIdentifier" }, + { 0, NULL } +}; + +static const ber_choice_t ChargingAssociation_choice[] = { + { 0, &hf_isdn_sup_chargeNumber, BER_CLASS_CON, 0, 0, dissect_isdn_sup_PartyNumber }, + { 1, &hf_isdn_sup_chargeIdentifier, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_ChargeIdentifier }, + { 0, NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_ChargingAssociation(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_choice(actx, tree, tvb, offset, + ChargingAssociation_choice, hf_index, ett_isdn_sup_ChargingAssociation, + NULL); + + return offset; +} + + +static const ber_sequence_t AOCECurrencyInfo_sequence[] = { + { &hf_isdn_sup_aocecurrencycc, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_AOCECurrencyCc }, + { &hf_isdn_sup_chargingAssociation, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_ChargingAssociation }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_AOCECurrencyInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + AOCECurrencyInfo_sequence, hf_index, ett_isdn_sup_AOCECurrencyInfo); + + return offset; +} + + +static const value_string isdn_sup_AOCECurrencyArg_vals[] = { + { 0, "chargeNotAvailable" }, + { 1, "aOCECurrencyInfo" }, + { 0, NULL } +}; + +static const ber_choice_t AOCECurrencyArg_choice[] = { + { 0, &hf_isdn_sup_chargeNotAvailable, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_NULL }, + { 1, &hf_isdn_sup_aOCECurrencyInfo, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_AOCECurrencyInfo }, + { 0, NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_AOCECurrencyArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_choice(actx, tree, tvb, offset, + AOCECurrencyArg_choice, hf_index, ett_isdn_sup_AOCECurrencyArg, + NULL); + + return offset; +} + + +static const ber_sequence_t AOCECcSpecificChargingUnits_sequence[] = { + { &hf_isdn_sup_recordedUnitsList, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_RecordedUnitsList }, + { &hf_isdn_sup_aOCEBillingId, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_isdn_sup_AOCEBillingId }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_AOCECcSpecificChargingUnits(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + AOCECcSpecificChargingUnits_sequence, hf_index, ett_isdn_sup_AOCECcSpecificChargingUnits); + + return offset; +} + + +static const value_string isdn_sup_AOCEChargingUnitCc_vals[] = { + { 0, "specificChargingUnits" }, + { 1, "freeOfCharge" }, + { 0, NULL } +}; + +static const ber_choice_t AOCEChargingUnitCc_choice[] = { + { 0, &hf_isdn_sup_aoceccspecificchargingunits, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_AOCECcSpecificChargingUnits }, + { 1, &hf_isdn_sup_freeOfCharge, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_NULL }, + { 0, NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_AOCEChargingUnitCc(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_choice(actx, tree, tvb, offset, + AOCEChargingUnitCc_choice, hf_index, ett_isdn_sup_AOCEChargingUnitCc, + NULL); + + return offset; +} + + +static const ber_sequence_t AOCEChargingUnitInfo_sequence[] = { + { &hf_isdn_sup_aocechargingunitcc, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_AOCEChargingUnitCc }, + { &hf_isdn_sup_chargingAssociation, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_ChargingAssociation }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_AOCEChargingUnitInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + AOCEChargingUnitInfo_sequence, hf_index, ett_isdn_sup_AOCEChargingUnitInfo); + + return offset; +} + + +static const value_string isdn_sup_AOCEChargingUnitArg_vals[] = { + { 0, "chargeNotAvailable" }, + { 1, "aOCEChargingUnitInfo" }, + { 0, NULL } +}; + +static const ber_choice_t AOCEChargingUnitArg_choice[] = { + { 0, &hf_isdn_sup_chargeNotAvailable, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_NULL }, + { 1, &hf_isdn_sup_aOCEChargingUnitInfo, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_AOCEChargingUnitInfo }, + { 0, NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_AOCEChargingUnitArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_choice(actx, tree, tvb, offset, + AOCEChargingUnitArg_choice, hf_index, ett_isdn_sup_AOCEChargingUnitArg, + NULL); + + return offset; +} + + + +static int +dissect_isdn_sup_OARequested(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_tagged_type(implicit_tag, actx, tree, tvb, offset, + hf_index, BER_CLASS_CON, 1, TRUE, dissect_isdn_sup_BOOLEAN); + + return offset; +} + + + +static int +dissect_isdn_sup_INTEGER_0_32767(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + + +static int +dissect_isdn_sup_CUGIndex(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_tagged_type(implicit_tag, actx, tree, tvb, offset, + hf_index, BER_CLASS_CON, 2, TRUE, dissect_isdn_sup_INTEGER_0_32767); + + return offset; +} + + +static const ber_sequence_t CUGcallArg_sequence[] = { + { &hf_isdn_sup_oARequested, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_isdn_sup_OARequested }, + { &hf_isdn_sup_cUGIndex , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_isdn_sup_CUGIndex }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_CUGcallArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + CUGcallArg_sequence, hf_index, ett_isdn_sup_CUGcallArg); + + return offset; +} + + + +static int +dissect_isdn_sup_ConfSize(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + + +static int +dissect_isdn_sup_BeginCONFArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_isdn_sup_ConfSize(implicit_tag, tvb, offset, actx, tree, hf_index); + + return offset; +} + + + +static int +dissect_isdn_sup_ConferenceId(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + + +static int +dissect_isdn_sup_PartyId(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const ber_sequence_t BeginCONFRes_sequence[] = { + { &hf_isdn_sup_conferenceId, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_ConferenceId }, + { &hf_isdn_sup_partyId , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_isdn_sup_PartyId }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_BeginCONFRes(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + BeginCONFRes_sequence, hf_index, ett_isdn_sup_BeginCONFRes); + + return offset; +} + + + +static int +dissect_isdn_sup_AddCONFArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_isdn_sup_ConferenceId(implicit_tag, tvb, offset, actx, tree, hf_index); + + return offset; +} + + + +static int +dissect_isdn_sup_AddCONFRes(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_isdn_sup_PartyId(implicit_tag, tvb, offset, actx, tree, hf_index); + + return offset; +} + + +static const ber_sequence_t SplitCONFArg_sequence[] = { + { &hf_isdn_sup_conferenceId, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_ConferenceId }, + { &hf_isdn_sup_partyId , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_PartyId }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_SplitCONFArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + SplitCONFArg_sequence, hf_index, ett_isdn_sup_SplitCONFArg); + + return offset; +} + + + +static int +dissect_isdn_sup_DropCONFArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_isdn_sup_PartyId(implicit_tag, tvb, offset, actx, tree, hf_index); + + return offset; +} + + + +static int +dissect_isdn_sup_IsolateCONFArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_isdn_sup_PartyId(implicit_tag, tvb, offset, actx, tree, hf_index); + + return offset; +} + + + +static int +dissect_isdn_sup_ReattachCONFArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_isdn_sup_PartyId(implicit_tag, tvb, offset, actx, tree, hf_index); + + return offset; +} + + + +static int +dissect_isdn_sup_PartyDISCArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_isdn_sup_PartyId(implicit_tag, tvb, offset, actx, tree, hf_index); + + return offset; +} + + +static const value_string isdn_sup_Procedure_vals[] = { + { 0, "cfu" }, + { 1, "cfb" }, + { 2, "cfnr" }, + { 0, NULL } +}; + + +static int +dissect_isdn_sup_Procedure(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const value_string isdn_sup_ServedUserNr_vals[] = { + { 0, "individualNumber" }, + { 1, "allNumbers" }, + { 0, NULL } +}; + +static const ber_choice_t ServedUserNr_choice[] = { + { 0, &hf_isdn_sup_individualNumber, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_PartyNumber }, + { 1, &hf_isdn_sup_allNumbers , BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_NULL }, + { 0, NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_ServedUserNr(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_choice(actx, tree, tvb, offset, + ServedUserNr_choice, hf_index, ett_isdn_sup_ServedUserNr, + NULL); + + return offset; +} + + + +static int +dissect_isdn_sup_NoReplyTimer(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const ber_sequence_t ActivationDiversionArg_sequence[] = { + { &hf_isdn_sup_procedure , BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_Procedure }, + { &hf_isdn_sup_basicService, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_BasicService }, + { &hf_isdn_sup_forwardedToAddress, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_Address }, + { &hf_isdn_sup_servedUserNr, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_ServedUserNr }, + { &hf_isdn_sup_noReplyTimer, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_isdn_sup_NoReplyTimer }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_ActivationDiversionArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + ActivationDiversionArg_sequence, hf_index, ett_isdn_sup_ActivationDiversionArg); + + return offset; +} + + +static const ber_sequence_t DeactivationDiversionArg_sequence[] = { + { &hf_isdn_sup_procedure , BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_Procedure }, + { &hf_isdn_sup_basicService, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_BasicService }, + { &hf_isdn_sup_servedUserNr, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_ServedUserNr }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_DeactivationDiversionArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + DeactivationDiversionArg_sequence, hf_index, ett_isdn_sup_DeactivationDiversionArg); + + return offset; +} + + +static const ber_sequence_t ActivationStatusNotificationDivArg_sequence[] = { + { &hf_isdn_sup_procedure , BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_Procedure }, + { &hf_isdn_sup_basicService, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_BasicService }, + { &hf_isdn_sup_forwardedToAddresss, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_Address }, + { &hf_isdn_sup_servedUserNr, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_ServedUserNr }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_ActivationStatusNotificationDivArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + ActivationStatusNotificationDivArg_sequence, hf_index, ett_isdn_sup_ActivationStatusNotificationDivArg); + + return offset; +} + + +static const ber_sequence_t DeactivationStatusNotificationDivArg_sequence[] = { + { &hf_isdn_sup_procedure , BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_Procedure }, + { &hf_isdn_sup_basicService, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_BasicService }, + { &hf_isdn_sup_servedUserNr, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_ServedUserNr }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_DeactivationStatusNotificationDivArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + DeactivationStatusNotificationDivArg_sequence, hf_index, ett_isdn_sup_DeactivationStatusNotificationDivArg); + + return offset; +} + + +static const ber_sequence_t InterrogationDiversionArg_sequence[] = { + { &hf_isdn_sup_procedure , BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_Procedure }, + { &hf_isdn_sup_basicService, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_isdn_sup_BasicService }, + { &hf_isdn_sup_servedUserNr, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_ServedUserNr }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_InterrogationDiversionArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + InterrogationDiversionArg_sequence, hf_index, ett_isdn_sup_InterrogationDiversionArg); + + return offset; +} + + +static const ber_sequence_t IntResult_sequence[] = { + { &hf_isdn_sup_servedUserNr, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_ServedUserNr }, + { &hf_isdn_sup_basicService, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_BasicService }, + { &hf_isdn_sup_procedure , BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_Procedure }, + { &hf_isdn_sup_forwardedToAddress, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_Address }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_IntResult(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + IntResult_sequence, hf_index, ett_isdn_sup_IntResult); + + return offset; +} + + +static const ber_sequence_t IntResultList_set_of[1] = { + { &hf_isdn_sup_IntResultList_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_IntResult }, +}; + +static int +dissect_isdn_sup_IntResultList(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset, + IntResultList_set_of, hf_index, ett_isdn_sup_IntResultList); + + return offset; +} + + + +static int +dissect_isdn_sup_InterrogationDiversionRes(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_isdn_sup_IntResultList(implicit_tag, tvb, offset, actx, tree, hf_index); + + return offset; +} + + +static const ber_sequence_t ServedUserNumberList_set_of[1] = { + { &hf_isdn_sup_ServedUserNumberList_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_PartyNumber }, +}; + +static int +dissect_isdn_sup_ServedUserNumberList(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset, + ServedUserNumberList_set_of, hf_index, ett_isdn_sup_ServedUserNumberList); + + return offset; +} + + + +static int +dissect_isdn_sup_InterrogateServedUserNumbersRes(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_isdn_sup_ServedUserNumberList(implicit_tag, tvb, offset, actx, tree, hf_index); + + return offset; +} + + +static const value_string isdn_sup_DiversionReason_vals[] = { + { 0, "unknown" }, + { 1, "cfu" }, + { 2, "cfb" }, + { 3, "cfnr" }, + { 4, "cdAlerting" }, + { 5, "cdImmediate" }, + { 0, NULL } +}; + + +static int +dissect_isdn_sup_DiversionReason(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const ber_sequence_t DiversionInformationArg_sequence[] = { + { &hf_isdn_sup_diversionReason, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_DiversionReason }, + { &hf_isdn_sup_basicService, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_BasicService }, + { &hf_isdn_sup_servedUserSubaddress, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_PartySubaddress }, + { &hf_isdn_sup_callingAddress, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_PresentedAddressScreened }, + { &hf_isdn_sup_originalCalledNr, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_PresentedNumberUnscreened }, + { &hf_isdn_sup_lastDivertingNr, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_PresentedNumberUnscreened }, + { &hf_isdn_sup_lastDivertingReason, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_isdn_sup_DiversionReason }, + { &hf_isdn_sup_userInfo , BER_CLASS_APP, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_isdn_sup_Q931InformationElement }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_DiversionInformationArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + DiversionInformationArg_sequence, hf_index, ett_isdn_sup_DiversionInformationArg); + + return offset; +} + + +static const ber_sequence_t CallDeflectionArg_sequence[] = { + { &hf_isdn_sup_deflectionAddress, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_Address }, + { &hf_isdn_sup_presentationAllowedDivertedToUser, BER_CLASS_UNI, BER_UNI_TAG_BOOLEAN, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_isdn_sup_PresentationAllowedIndicator }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_CallDeflectionArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + CallDeflectionArg_sequence, hf_index, ett_isdn_sup_CallDeflectionArg); + + return offset; +} + + + +static int +dissect_isdn_sup_DiversionCounter(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const value_string isdn_sup_SubscriptionOption_vals[] = { + { 0, "noNotification" }, + { 1, "notificationWithoutDivertedToNr" }, + { 2, "notificationWithDivertedToNr" }, + { 0, NULL } +}; + + +static int +dissect_isdn_sup_SubscriptionOption(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const ber_sequence_t CallRerouteingArg_sequence[] = { + { &hf_isdn_sup_rerouteingReason, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_DiversionReason }, + { &hf_isdn_sup_calledAddress, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_Address }, + { &hf_isdn_sup_rerouteingCounter, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_DiversionCounter }, + { &hf_isdn_sup_q931InfoElement, BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_Q931InformationElement }, + { &hf_isdn_sup_lastRerouteingNr, BER_CLASS_CON, 1, BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_PresentedNumberUnscreened }, + { &hf_isdn_sup_subscriptionOption, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_isdn_sup_SubscriptionOption }, + { &hf_isdn_sup_callingPartySubaddress, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_PartySubaddress }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_CallRerouteingArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + CallRerouteingArg_sequence, hf_index, ett_isdn_sup_CallRerouteingArg); + + return offset; +} + + +static const ber_sequence_t DivertingLegInformation1Arg_sequence[] = { + { &hf_isdn_sup_diversionReason, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_DiversionReason }, + { &hf_isdn_sup_subscriptionOption, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_SubscriptionOption }, + { &hf_isdn_sup_divertedToNumber, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_PresentedNumberUnscreened }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_DivertingLegInformation1Arg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + DivertingLegInformation1Arg_sequence, hf_index, ett_isdn_sup_DivertingLegInformation1Arg); + + return offset; +} + + +static const ber_sequence_t DivertingLegInformation2Arg_sequence[] = { + { &hf_isdn_sup_diversionCounter, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_DiversionCounter }, + { &hf_isdn_sup_diversionReason, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_DiversionReason }, + { &hf_isdn_sup_divertingNr, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_PresentedNumberUnscreened }, + { &hf_isdn_sup_originalCalledNr, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_PresentedNumberUnscreened }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_DivertingLegInformation2Arg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + DivertingLegInformation2Arg_sequence, hf_index, ett_isdn_sup_DivertingLegInformation2Arg); + + return offset; +} + + + +static int +dissect_isdn_sup_DivertingLegInformation3Arg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_isdn_sup_PresentationAllowedIndicator(implicit_tag, tvb, offset, actx, tree, hf_index); + + return offset; +} + + +static const value_string isdn_sup_Service_vals[] = { + { 1, "service1" }, + { 2, "service2" }, + { 3, "service3" }, + { 0, NULL } +}; + + +static int +dissect_isdn_sup_Service(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + + +static int +dissect_isdn_sup_Preferred(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_boolean(implicit_tag, actx, tree, tvb, offset, hf_index, NULL); + + return offset; +} + + +static const ber_sequence_t UserUserServiceArg_sequence[] = { + { &hf_isdn_sup_service , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_sup_Service }, + { &hf_isdn_sup_preferred , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_isdn_sup_Preferred }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_UserUserServiceArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + UserUserServiceArg_sequence, hf_index, ett_isdn_sup_UserUserServiceArg); + + return offset; +} + + + +static int +dissect_isdn_sup_CalledFreephoneNr(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_isdn_sup_PartyNumber(implicit_tag, tvb, offset, actx, tree, hf_index); + + return offset; +} + + + +static int +dissect_isdn_sup_CalledFreephoneNrArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_isdn_sup_CalledFreephoneNr(implicit_tag, tvb, offset, actx, tree, hf_index); + + return offset; +} + + + +static int +dissect_isdn_sup_QueueIdentity(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const ber_sequence_t Monitor_T_FPHArg_sequence[] = { + { &hf_isdn_sup_q931InfoElement, BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_Q931InformationElement }, + { &hf_isdn_sup_servedUserDestination, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_PartyNumber }, + { &hf_isdn_sup_queueIdentity, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_isdn_sup_QueueIdentity }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_Monitor_T_FPHArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + Monitor_T_FPHArg_sequence, hf_index, ett_isdn_sup_Monitor_T_FPHArg); + + return offset; +} + + + +static int +dissect_isdn_sup_FPHReference(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const ber_sequence_t Free_T_FPHArg_sequence[] = { + { &hf_isdn_sup_servedUserDestination, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_PartyNumber }, + { &hf_isdn_sup_fPHReference, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_FPHReference }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_Free_T_FPHArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + Free_T_FPHArg_sequence, hf_index, ett_isdn_sup_Free_T_FPHArg); + + return offset; +} + + +static const ber_sequence_t Call_T_FPHArg_sequence[] = { + { &hf_isdn_sup_fPHReference, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_FPHReference }, + { &hf_isdn_sup_calledFreephoneNr, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_isdn_sup_CalledFreephoneNr }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_Call_T_FPHArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + Call_T_FPHArg_sequence, hf_index, ett_isdn_sup_Call_T_FPHArg); + + return offset; +} + + +static const value_string isdn_sup_PrecLevel_vals[] = { + { 0, "flashOverride" }, + { 1, "flash" }, + { 2, "immediate" }, + { 3, "priority" }, + { 4, "routine" }, + { 0, NULL } +}; + + +static int +dissect_isdn_sup_PrecLevel(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const value_string isdn_sup_LFBIndictn_vals[] = { + { 0, "ifbAllowed" }, + { 1, "ifbNotAllowed" }, + { 2, "pathReserved" }, + { 0, NULL } +}; + + +static int +dissect_isdn_sup_LFBIndictn(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + + +static int +dissect_isdn_sup_MLPPSvcDomn(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const ber_sequence_t MLPPParams_sequence[] = { + { &hf_isdn_sup_precLevel , BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_PrecLevel }, + { &hf_isdn_sup_lfbIndictn , BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_LFBIndictn }, + { &hf_isdn_sup_mlppSvcDomn, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_MLPPSvcDomn }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_MLPPParams(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + MLPPParams_sequence, hf_index, ett_isdn_sup_MLPPParams); + + return offset; +} + + + +static int +dissect_isdn_sup_IEArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_isdn_sup_Q931InformationElement(implicit_tag, tvb, offset, actx, tree, hf_index); + + return offset; +} + + +static const ber_sequence_t MLPPLFBArg_sequence[] = { + { &hf_isdn_sup_mlppParams , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_MLPPParams }, + { &hf_isdn_sup_ieArg , BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_IEArg }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_MLPPLFBArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + MLPPLFBArg_sequence, hf_index, ett_isdn_sup_MLPPLFBArg); + + return offset; +} + + +static const value_string isdn_sup_StatusQuery_vals[] = { + { 1, "success" }, + { 2, "failure" }, + { 3, "bearerCapabilityNotAuthorized" }, + { 4, "bearerCapabilityNotlmplemented" }, + { 5, "bearerCapabilityNotAvailable" }, + { 6, "pathReservationDenied" }, + { 0, NULL } +}; + + +static int +dissect_isdn_sup_StatusQuery(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + + +static int +dissect_isdn_sup_Location(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_isdn_sup_Q931InformationElement(implicit_tag, tvb, offset, actx, tree, hf_index); + + return offset; +} + + +static const ber_sequence_t MLPPLFBResp_sequence[] = { + { &hf_isdn_sup_statusQuery, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_StatusQuery }, + { &hf_isdn_sup_location , BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_isdn_sup_Location }, + { NULL, 0, 0, 0, NULL } +}; + +static int +dissect_isdn_sup_MLPPLFBResp(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset, + MLPPLFBResp_sequence, hf_index, ett_isdn_sup_MLPPLFBResp); + + return offset; +} + + +static const value_string isdn_sup_StatusRequest_vals[] = { + { 1, "successCalledUserMLPPSubscriber" }, + { 2, "successCalledUserNotMLPPSubscriber" }, + { 3, "failureCaseA" }, + { 4, "failureCaseB" }, + { 0, NULL } +}; + + +static int +dissect_isdn_sup_StatusRequest(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const value_string isdn_sup_PreemptParams_vals[] = { + { 1, "circuitReservedForReuse" }, + { 2, "circuitNotReservedForReuse" }, + { 0, NULL } +}; + + +static int +dissect_isdn_sup_PreemptParams(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + +/*--- PDUs ---*/ + +static int dissect_ChargingRequestArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_ChargingRequestArg(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_ChargingRequestArg_PDU); + return offset; +} +static int dissect_ChargingRequestRes_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_ChargingRequestRes(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_ChargingRequestRes_PDU); + return offset; +} +static int dissect_AOCSCurrencyArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_AOCSCurrencyArg(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_AOCSCurrencyArg_PDU); + return offset; +} +static int dissect_AOCSSpecialArrArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_AOCSSpecialArrArg(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_AOCSSpecialArrArg_PDU); + return offset; +} +static int dissect_AOCDCurrencyArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_AOCDCurrencyArg(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_AOCDCurrencyArg_PDU); + return offset; +} +static int dissect_AOCDChargingUnitArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_AOCDChargingUnitArg(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_AOCDChargingUnitArg_PDU); + return offset; +} +static int dissect_AOCECurrencyArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_AOCECurrencyArg(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_AOCECurrencyArg_PDU); + return offset; +} +static int dissect_AOCEChargingUnitArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_AOCEChargingUnitArg(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_AOCEChargingUnitArg_PDU); + return offset; +} +static int dissect_CUGcallArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_CUGcallArg(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_CUGcallArg_PDU); + return offset; +} +static int dissect_BeginCONFArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_BeginCONFArg(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_BeginCONFArg_PDU); + return offset; +} +static int dissect_BeginCONFRes_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_BeginCONFRes(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_BeginCONFRes_PDU); + return offset; +} +static int dissect_AddCONFArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_AddCONFArg(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_AddCONFArg_PDU); + return offset; +} +static int dissect_AddCONFRes_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_AddCONFRes(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_AddCONFRes_PDU); + return offset; +} +static int dissect_SplitCONFArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_SplitCONFArg(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_SplitCONFArg_PDU); + return offset; +} +static int dissect_DropCONFArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_DropCONFArg(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_DropCONFArg_PDU); + return offset; +} +static int dissect_IsolateCONFArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_IsolateCONFArg(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_IsolateCONFArg_PDU); + return offset; +} +static int dissect_ReattachCONFArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_ReattachCONFArg(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_ReattachCONFArg_PDU); + return offset; +} +static int dissect_PartyDISCArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_PartyDISCArg(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_PartyDISCArg_PDU); + return offset; +} +static int dissect_ActivationDiversionArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_ActivationDiversionArg(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_ActivationDiversionArg_PDU); + return offset; +} +static int dissect_DeactivationDiversionArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_DeactivationDiversionArg(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_DeactivationDiversionArg_PDU); + return offset; +} +static int dissect_ActivationStatusNotificationDivArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_ActivationStatusNotificationDivArg(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_ActivationStatusNotificationDivArg_PDU); + return offset; +} +static int dissect_DeactivationStatusNotificationDivArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_DeactivationStatusNotificationDivArg(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_DeactivationStatusNotificationDivArg_PDU); + return offset; +} +static int dissect_InterrogationDiversionArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_InterrogationDiversionArg(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_InterrogationDiversionArg_PDU); + return offset; +} +static int dissect_InterrogationDiversionRes_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_InterrogationDiversionRes(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_InterrogationDiversionRes_PDU); + return offset; +} +static int dissect_InterrogateServedUserNumbersRes_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_InterrogateServedUserNumbersRes(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_InterrogateServedUserNumbersRes_PDU); + return offset; +} +static int dissect_DiversionInformationArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_DiversionInformationArg(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_DiversionInformationArg_PDU); + return offset; +} +static int dissect_CallDeflectionArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_CallDeflectionArg(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_CallDeflectionArg_PDU); + return offset; +} +static int dissect_CallRerouteingArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_CallRerouteingArg(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_CallRerouteingArg_PDU); + return offset; +} +static int dissect_DivertingLegInformation1Arg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_DivertingLegInformation1Arg(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_DivertingLegInformation1Arg_PDU); + return offset; +} +static int dissect_DivertingLegInformation2Arg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_DivertingLegInformation2Arg(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_DivertingLegInformation2Arg_PDU); + return offset; +} +static int dissect_DivertingLegInformation3Arg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_DivertingLegInformation3Arg(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_DivertingLegInformation3Arg_PDU); + return offset; +} +static int dissect_UserUserServiceArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_UserUserServiceArg(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_UserUserServiceArg_PDU); + return offset; +} +static int dissect_CalledFreephoneNrArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_CalledFreephoneNrArg(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_CalledFreephoneNrArg_PDU); + return offset; +} +static int dissect_Monitor_T_FPHArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_Monitor_T_FPHArg(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_Monitor_T_FPHArg_PDU); + return offset; +} +static int dissect_Free_T_FPHArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_Free_T_FPHArg(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_Free_T_FPHArg_PDU); + return offset; +} +static int dissect_Call_T_FPHArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_Call_T_FPHArg(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_Call_T_FPHArg_PDU); + return offset; +} +static int dissect_MLPPLFBArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_MLPPLFBArg(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_MLPPLFBArg_PDU); + return offset; +} +static int dissect_MLPPLFBResp_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_MLPPLFBResp(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_MLPPLFBResp_PDU); + return offset; +} +static int dissect_MLPPParams_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_MLPPParams(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_MLPPParams_PDU); + return offset; +} +static int dissect_StatusRequest_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_StatusRequest(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_StatusRequest_PDU); + return offset; +} +static int dissect_PreemptParams_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + offset = dissect_isdn_sup_PreemptParams(FALSE, tvb, offset, &asn1_ctx, tree, hf_isdn_sup_PreemptParams_PDU); + return offset; +} + + +static const isdn_sup_op_t isdn_sup_op_tab[] = { + /* chargingRequest */ { 30, dissect_ChargingRequestArg_PDU, dissect_ChargingRequestRes_PDU }, + /* aOCSCurrency */ { 31, dissect_AOCSCurrencyArg_PDU, NULL }, + /* aOCSSpecialArr */ { 32, dissect_AOCSSpecialArrArg_PDU, NULL }, + /* aOCDCurrency */ { 33, dissect_AOCDCurrencyArg_PDU, NULL }, + /* aOCDChargingUnit */ { 34, dissect_AOCDChargingUnitArg_PDU, NULL }, + /* aOCECurrency */ { 35, dissect_AOCECurrencyArg_PDU, NULL }, + /* aOCEChargingUnit */ { 36, dissect_AOCEChargingUnitArg_PDU, NULL }, + /* cUGcall */ { 2, dissect_CUGcallArg_PDU, NULL }, + /* beginCONF */ { 40, dissect_BeginCONFArg_PDU, dissect_BeginCONFRes_PDU }, + /* addCONF */ { 41, dissect_AddCONFArg_PDU, dissect_AddCONFRes_PDU }, + /* splitCONF */ { 42, dissect_SplitCONFArg_PDU, NULL }, + /* dropCONF */ { 43, dissect_DropCONFArg_PDU, NULL }, + /* isolateCONF */ { 44, dissect_IsolateCONFArg_PDU, NULL }, + /* reattachCONF */ { 45, dissect_ReattachCONFArg_PDU, NULL }, + /* partyDISC */ { 46, dissect_PartyDISCArg_PDU, NULL }, + /* activationDiversion */ { 7, dissect_ActivationDiversionArg_PDU, NULL }, + /* deactivationDiversion */ { 8, dissect_DeactivationDiversionArg_PDU, NULL }, + /* activationStatusNotificationDiv */ { 9, dissect_ActivationStatusNotificationDivArg_PDU, NULL }, + /* deactivationStatusNotificationDiv */ { 10, dissect_DeactivationStatusNotificationDivArg_PDU, NULL }, + /* interrogationDiversion */ { 11, dissect_InterrogationDiversionArg_PDU, dissect_InterrogationDiversionRes_PDU }, + /* interrogateServedUserNumbers */ { 17, NULL, dissect_InterrogateServedUserNumbersRes_PDU }, + /* diversionInformation */ { 12, dissect_DiversionInformationArg_PDU, NULL }, + /* callDeflection */ { 13, dissect_CallDeflectionArg_PDU, NULL }, + /* callRerouteing */ { 14, dissect_CallRerouteingArg_PDU, NULL }, + /* divertingLegInformation1 */ { 18, dissect_DivertingLegInformation1Arg_PDU, NULL }, + /* divertingLegInformation2 */ { 15, dissect_DivertingLegInformation2Arg_PDU, NULL }, + /* divertingLegInformation3 */ { 19, dissect_DivertingLegInformation3Arg_PDU, NULL }, + /* mCIDRequest */ { 3, NULL, NULL }, + /* userUserService */ { 1, dissect_UserUserServiceArg_PDU, NULL }, + /* mLPPLFBQuery */ { 24, dissect_MLPPLFBArg_PDU, dissect_MLPPLFBResp_PDU }, + /* mLPPCallRequest */ { 25, dissect_MLPPParams_PDU, dissect_StatusRequest_PDU }, + /* mLPPCallPreemption */ { 26, dissect_PreemptParams_PDU, NULL }, +}; + + +static const isdn_sup_global_op_t isdn_sup_global_op_tab[] = { + + /* callFPH */ { fPHOID".1", dissect_CalledFreephoneNrArg_PDU, NULL }, + /* monitor-T-FPH */ { fPHOID".2", dissect_Monitor_T_FPHArg_PDU, NULL }, + /* free-T-FPH */ { fPHOID".3", dissect_Free_T_FPHArg_PDU, NULL }, + /* call-T-FPH */ { fPHOID".4", dissect_Call_T_FPHArg_PDU, NULL }, +}; + +static const isdn_sup_err_t isdn_sup_err_tab[] = { + /* notSubscribed */ { 0, NULL }, + /* notAvailable */ { 3, NULL }, + /* notImplemented */ { 4, NULL }, + /* invalidServedUserNr */ { 6, NULL }, + /* invalidCallState */ { 7, NULL }, + /* basicServiceNotProvided */ { 8, NULL }, + /* notIncomingCall */ { 9, NULL }, + /* supplementaryServiceInteractionNotAllowed */ { 10, NULL }, + /* resourceUnavailable */ { 11, NULL }, + /* noChargingInfoAvailable */ { 26, NULL }, + /* invalidOrUnregisteredCUGIndex */ { 16, NULL }, + /* requestedBasicServiceViolatesCUGConstraints */ { 17, NULL }, + /* outgoingCallsBarredWithinCUG */ { 18, NULL }, + /* incomingCallsBarredWithinCUG */ { 19, NULL }, + /* userNotMemberOfCUG */ { 20, NULL }, + /* inconsistencyInDesignatedFacilityAndSubscriberClass */ { 21, NULL }, + /* illConferenceId */ { 28, NULL }, + /* illPartyId */ { 29, NULL }, + /* numberOfPartiesExceeded */ { 30, NULL }, + /* notActive */ { 31, NULL }, + /* notAllowed */ { 32, NULL }, + /* invalidDivertedToNr */ { 12, NULL }, + /* specialServiceNr */ { 14, NULL }, + /* diversionToServedUserNr */ { 15, NULL }, + /* incomingCallAccepted */ { 23, NULL }, + /* numberOfDiversionsExceeded */ { 24, NULL }, + /* notActivated */ { 46, NULL }, + /* requestAlreadyAccepted */ { 48, NULL }, + /* rejectedByTheNetwork */ { 1, NULL }, + /* rejectedByTheUser */ { 2, NULL }, + /* unauthorizedPrecedenceLevel */ { 44, NULL }, +}; + + +static const isdn_sup_op_t *get_op(gint32 opcode) { + int i; + + /* search from the end to get the last occurrence if the operation is redefined in some newer specification */ + for (i = array_length(isdn_sup_op_tab) - 1; i >= 0; i--) + if (isdn_sup_op_tab[i].opcode == opcode) + return &isdn_sup_op_tab[i]; + return NULL; +} + +static const isdn_sup_err_t *get_err(gint32 errcode) { + int i; + + /* search from the end to get the last occurrence if the operation is redefined in some newer specification */ + for (i = array_length(isdn_sup_err_tab) - 1; i >= 0; i--) + if (isdn_sup_err_tab[i].errcode == errcode) + return &isdn_sup_err_tab[i]; + return NULL; +} + +/*--- dissect_isdn_sup_arg ------------------------------------------------------*/ +static int +dissect_isdn_sup_arg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) { + int offset = 0; + rose_ctx_t *rctx; + gint32 opcode = 0; + const gchar *p; + const isdn_sup_op_t *op_ptr; + proto_item *ti; + proto_tree *isdn_sup_tree; + + /* Reject the packet if data is NULL */ + if (data == NULL) + return 0; + rctx = get_rose_ctx(data); + DISSECTOR_ASSERT(rctx); + + if (rctx->d.pdu != 1) /* invoke */ + return offset; + if (rctx->d.code == 0) { /* local */ + opcode = rctx->d.code_local; + } else { + return offset; + } + op_ptr = get_op(opcode); + if (!op_ptr) + return offset; + + ti = proto_tree_add_item(tree, proto_isdn_sup, tvb, offset, -1, ENC_NA); + isdn_sup_tree = proto_item_add_subtree(ti, ett_isdn_sup); + + proto_tree_add_uint(isdn_sup_tree, hf_isdn_sup_operation, tvb, 0, 0, opcode); + p = try_val_to_str(opcode, VALS(isdn_sup_str_operation)); + if (p) { + proto_item_append_text(ti, ": %s", p); + proto_item_append_text(rctx->d.code_item, " - %s", p); + if (rctx->apdu_depth >= 0) + proto_item_append_text(proto_item_get_parent_nth(proto_tree_get_parent(tree), rctx->apdu_depth), " %s", p); + } + + if (op_ptr->arg_pdu) + offset = op_ptr->arg_pdu(tvb, pinfo, isdn_sup_tree, NULL); + else + if (tvb_reported_length_remaining(tvb, offset) > 0) { + proto_tree_add_expert(tree, pinfo, &ei_isdn_sup_unsupported_error_type, tvb, offset, -1); + offset += tvb_reported_length_remaining(tvb, offset); + } + + return offset; +} + +/*--- dissect_isdn_sup_res -------------------------------------------------------*/ +static int +dissect_isdn_sup_res(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) { + gint offset = 0; + rose_ctx_t *rctx; + gint32 opcode = 0; + const gchar *p; + const isdn_sup_op_t *op_ptr; + proto_item *ti; + proto_tree *isdn_sup_tree; + + /* Reject the packet if data is NULL */ + if (data == NULL) + return 0; + rctx = get_rose_ctx(data); + DISSECTOR_ASSERT(rctx); + + if (rctx->d.pdu != 2) /* returnResult */ + return offset; + if (rctx->d.code != 0) /* local */ + return offset; + opcode = rctx->d.code_local; + op_ptr = get_op(opcode); + if (!op_ptr) + return offset; + + ti = proto_tree_add_item(tree, proto_isdn_sup, tvb, offset, -1, ENC_NA); + isdn_sup_tree = proto_item_add_subtree(ti, ett_isdn_sup); + + proto_tree_add_uint(isdn_sup_tree, hf_isdn_sup_operation, tvb, 0, 0, opcode); + p = try_val_to_str(opcode, VALS(isdn_sup_str_operation)); + if (p) { + proto_item_append_text(ti, ": %s", p); + proto_item_append_text(rctx->d.code_item, " - %s", p); + if (rctx->apdu_depth >= 0) + proto_item_append_text(proto_item_get_parent_nth(proto_tree_get_parent(tree), rctx->apdu_depth), " %s", p); + } + + if (op_ptr->res_pdu) + offset = op_ptr->res_pdu(tvb, pinfo, isdn_sup_tree, NULL); + else + if (tvb_reported_length_remaining(tvb, offset) > 0) { + proto_tree_add_expert(tree, pinfo, &ei_isdn_sup_unsupported_result_type, tvb, offset, -1); + offset += tvb_reported_length_remaining(tvb, offset); + } + + return offset; +} + + +/*--- dissect_isdn_sup_err ------------------------------------------------------*/ +static int +dissect_isdn_sup_err(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) { + int offset = 0; + rose_ctx_t *rctx; + gint32 errcode; + const isdn_sup_err_t *err_ptr; + const gchar *p; + proto_item *ti; + proto_tree *isdn_sup_tree; + + /* Reject the packet if data is NULL */ + if (data == NULL) + return 0; + rctx = get_rose_ctx(data); + DISSECTOR_ASSERT(rctx); + + if (rctx->d.pdu != 3) /* returnError */ + return offset; + if (rctx->d.code != 0) /* local */ + return offset; + errcode = rctx->d.code_local; + err_ptr = get_err(errcode); + if (!err_ptr) + return offset; + + ti = proto_tree_add_item(tree, proto_isdn_sup, tvb, offset, -1, ENC_NA); + isdn_sup_tree = proto_item_add_subtree(ti, ett_isdn_sup); + + proto_tree_add_uint(isdn_sup_tree, hf_isdn_sup_error, tvb, 0, 0, errcode); + p = try_val_to_str(errcode, VALS(isdn_sup_str_error)); + if (p) { + proto_item_append_text(ti, ": %s", p); + proto_item_append_text(rctx->d.code_item, " - %s", p); + if (rctx->apdu_depth >= 0) + proto_item_append_text(proto_item_get_parent_nth(proto_tree_get_parent(tree), rctx->apdu_depth), " %s", p); + } + + if (err_ptr->err_pdu) + offset = err_ptr->err_pdu(tvb, pinfo, isdn_sup_tree, NULL); + else + if (tvb_reported_length_remaining(tvb, offset) > 0) { + proto_tree_add_expert(tree, pinfo, &ei_isdn_sup_unsupported_error_type, tvb, offset, -1); + offset += tvb_reported_length_remaining(tvb, offset); + } + + return offset; +} + + +/*--- proto_reg_handoff_isdn_sup ---------------------------------------*/ + +void proto_reg_handoff_isdn_sup(void) { + int i; +#if 0 + dissector_handle_t q931_handle; + q931_handle = find_dissector("q931"); +#endif + + for (i=0; i<(int)array_length(isdn_sup_op_tab); i++) { + dissector_add_uint("q932.ros.etsi.local.arg", isdn_sup_op_tab[i].opcode, isdn_sup_arg_handle); + dissector_add_uint("q932.ros.etsi.local.res", isdn_sup_op_tab[i].opcode, isdn_sup_res_handle); + } + + for (i=0; i<(int)array_length(isdn_sup_global_op_tab); i++) { + if(isdn_sup_global_op_tab[i].arg_pdu) + dissector_add_string("q932.ros.global.arg", isdn_sup_global_op_tab[i].oid, create_dissector_handle(isdn_sup_global_op_tab[i].arg_pdu, proto_isdn_sup)); + if(isdn_sup_global_op_tab[i].res_pdu) + dissector_add_string("q932.ros.global.res", isdn_sup_global_op_tab[i].oid, create_dissector_handle(isdn_sup_global_op_tab[i].res_pdu, proto_isdn_sup)); + } + + for (i=0; i<(int)array_length(isdn_sup_err_tab); i++) { + dissector_add_uint("q932.ros.etsi.local.err", isdn_sup_err_tab[i].errcode, isdn_sup_err_handle); + } + + +} + +void proto_register_isdn_sup(void) { + + /* List of fields */ + static hf_register_info hf[] = { + { &hf_isdn_sup, + { "isdn_sup", "isdn_sup.1", + FT_INT32, BASE_DEC, NULL, 0, + NULL, HFILL } + }, + { &hf_isdn_sup_operation, + { "Operation", "isdn_sup.operation", + FT_UINT8, BASE_DEC, VALS(isdn_sup_str_operation), 0x0, + NULL, HFILL } + }, + { &hf_isdn_sup_error, + { "Error", "isdn_sup.error", + FT_UINT8, BASE_DEC, VALS(isdn_sup_str_error), 0x0, + NULL, HFILL } + }, + + { &hf_isdn_sup_ChargingRequestArg_PDU, + { "ChargingRequestArg", "isdn-sup.ChargingRequestArg", + FT_UINT32, BASE_DEC, VALS(isdn_sup_ChargingCase_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_ChargingRequestRes_PDU, + { "ChargingRequestRes", "isdn-sup.ChargingRequestRes", + FT_UINT32, BASE_DEC, VALS(isdn_sup_ChargingRequestRes_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_AOCSCurrencyArg_PDU, + { "AOCSCurrencyArg", "isdn-sup.AOCSCurrencyArg", + FT_UINT32, BASE_DEC, VALS(isdn_sup_AOCSCurrencyArg_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_AOCSSpecialArrArg_PDU, + { "AOCSSpecialArrArg", "isdn-sup.AOCSSpecialArrArg", + FT_UINT32, BASE_DEC, VALS(isdn_sup_AOCSSpecialArrArg_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_AOCDCurrencyArg_PDU, + { "AOCDCurrencyArg", "isdn-sup.AOCDCurrencyArg", + FT_UINT32, BASE_DEC, VALS(isdn_sup_AOCDCurrencyArg_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_AOCDChargingUnitArg_PDU, + { "AOCDChargingUnitArg", "isdn-sup.AOCDChargingUnitArg", + FT_UINT32, BASE_DEC, VALS(isdn_sup_AOCDChargingUnitArg_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_AOCECurrencyArg_PDU, + { "AOCECurrencyArg", "isdn-sup.AOCECurrencyArg", + FT_UINT32, BASE_DEC, VALS(isdn_sup_AOCECurrencyArg_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_AOCEChargingUnitArg_PDU, + { "AOCEChargingUnitArg", "isdn-sup.AOCEChargingUnitArg", + FT_UINT32, BASE_DEC, VALS(isdn_sup_AOCEChargingUnitArg_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_CUGcallArg_PDU, + { "CUGcallArg", "isdn-sup.CUGcallArg_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_BeginCONFArg_PDU, + { "BeginCONFArg", "isdn-sup.BeginCONFArg", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_BeginCONFRes_PDU, + { "BeginCONFRes", "isdn-sup.BeginCONFRes_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_AddCONFArg_PDU, + { "AddCONFArg", "isdn-sup.AddCONFArg", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_AddCONFRes_PDU, + { "AddCONFRes", "isdn-sup.AddCONFRes", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_SplitCONFArg_PDU, + { "SplitCONFArg", "isdn-sup.SplitCONFArg_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_DropCONFArg_PDU, + { "DropCONFArg", "isdn-sup.DropCONFArg", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_IsolateCONFArg_PDU, + { "IsolateCONFArg", "isdn-sup.IsolateCONFArg", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_ReattachCONFArg_PDU, + { "ReattachCONFArg", "isdn-sup.ReattachCONFArg", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_PartyDISCArg_PDU, + { "PartyDISCArg", "isdn-sup.PartyDISCArg", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_ActivationDiversionArg_PDU, + { "ActivationDiversionArg", "isdn-sup.ActivationDiversionArg_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_DeactivationDiversionArg_PDU, + { "DeactivationDiversionArg", "isdn-sup.DeactivationDiversionArg_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_ActivationStatusNotificationDivArg_PDU, + { "ActivationStatusNotificationDivArg", "isdn-sup.ActivationStatusNotificationDivArg_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_DeactivationStatusNotificationDivArg_PDU, + { "DeactivationStatusNotificationDivArg", "isdn-sup.DeactivationStatusNotificationDivArg_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_InterrogationDiversionArg_PDU, + { "InterrogationDiversionArg", "isdn-sup.InterrogationDiversionArg_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_InterrogationDiversionRes_PDU, + { "InterrogationDiversionRes", "isdn-sup.InterrogationDiversionRes", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_InterrogateServedUserNumbersRes_PDU, + { "InterrogateServedUserNumbersRes", "isdn-sup.InterrogateServedUserNumbersRes", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_DiversionInformationArg_PDU, + { "DiversionInformationArg", "isdn-sup.DiversionInformationArg_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_CallDeflectionArg_PDU, + { "CallDeflectionArg", "isdn-sup.CallDeflectionArg_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_CallRerouteingArg_PDU, + { "CallRerouteingArg", "isdn-sup.CallRerouteingArg_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_DivertingLegInformation1Arg_PDU, + { "DivertingLegInformation1Arg", "isdn-sup.DivertingLegInformation1Arg_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_DivertingLegInformation2Arg_PDU, + { "DivertingLegInformation2Arg", "isdn-sup.DivertingLegInformation2Arg_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_DivertingLegInformation3Arg_PDU, + { "DivertingLegInformation3Arg", "isdn-sup.DivertingLegInformation3Arg", + FT_BOOLEAN, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_UserUserServiceArg_PDU, + { "UserUserServiceArg", "isdn-sup.UserUserServiceArg_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_CalledFreephoneNrArg_PDU, + { "CalledFreephoneNrArg", "isdn-sup.CalledFreephoneNrArg", + FT_UINT32, BASE_DEC, VALS(isdn_sup_PartyNumber_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_Monitor_T_FPHArg_PDU, + { "Monitor-T-FPHArg", "isdn-sup.Monitor_T_FPHArg_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_Free_T_FPHArg_PDU, + { "Free-T-FPHArg", "isdn-sup.Free_T_FPHArg_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_Call_T_FPHArg_PDU, + { "Call-T-FPHArg", "isdn-sup.Call_T_FPHArg_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_MLPPLFBArg_PDU, + { "MLPPLFBArg", "isdn-sup.MLPPLFBArg_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_MLPPLFBResp_PDU, + { "MLPPLFBResp", "isdn-sup.MLPPLFBResp_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_MLPPParams_PDU, + { "MLPPParams", "isdn-sup.MLPPParams_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_StatusRequest_PDU, + { "StatusRequest", "isdn-sup.StatusRequest", + FT_UINT32, BASE_DEC, VALS(isdn_sup_StatusRequest_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_PreemptParams_PDU, + { "PreemptParams", "isdn-sup.PreemptParams", + FT_UINT32, BASE_DEC, VALS(isdn_sup_PreemptParams_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_presentationallowedaddressscreened, + { "presentationAllowedAddress", "isdn-sup.presentationAllowedAddress_element", + FT_NONE, BASE_NONE, NULL, 0, + "AddressScreened", HFILL }}, + { &hf_isdn_sup_presentationRestricted, + { "presentationRestricted", "isdn-sup.presentationRestricted_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_numberNotAvailableDueToInterworking, + { "numberNotAvailableDueToInterworking", "isdn-sup.numberNotAvailableDueToInterworking_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_presentationrestrictedaddressscreened, + { "presentationRestrictedAddress", "isdn-sup.presentationRestrictedAddress_element", + FT_NONE, BASE_NONE, NULL, 0, + "AddressScreened", HFILL }}, + { &hf_isdn_sup_presentationAllowedAddress, + { "presentationAllowedAddress", "isdn-sup.presentationAllowedAddress_element", + FT_NONE, BASE_NONE, NULL, 0, + "Address", HFILL }}, + { &hf_isdn_sup_presentationRestrictedAddress, + { "presentationRestrictedAddress", "isdn-sup.presentationRestrictedAddress_element", + FT_NONE, BASE_NONE, NULL, 0, + "Address", HFILL }}, + { &hf_isdn_sup_presentationallowednumberscreened, + { "presentationAllowedNumber", "isdn-sup.presentationAllowedNumber_element", + FT_NONE, BASE_NONE, NULL, 0, + "NumberScreened", HFILL }}, + { &hf_isdn_sup_presentationrestrictednumberscreened, + { "presentationRestrictedNumber", "isdn-sup.presentationRestrictedNumber_element", + FT_NONE, BASE_NONE, NULL, 0, + "NumberScreened", HFILL }}, + { &hf_isdn_sup_presentationAllowedNumber, + { "presentationAllowedNumber", "isdn-sup.presentationAllowedNumber", + FT_UINT32, BASE_DEC, VALS(isdn_sup_PartyNumber_vals), 0, + "PartyNumber", HFILL }}, + { &hf_isdn_sup_presentationRestrictedNumber, + { "presentationRestrictedNumber", "isdn-sup.presentationRestrictedNumber", + FT_UINT32, BASE_DEC, VALS(isdn_sup_PartyNumber_vals), 0, + "PartyNumber", HFILL }}, + { &hf_isdn_sup_partyNumber, + { "partyNumber", "isdn-sup.partyNumber", + FT_UINT32, BASE_DEC, VALS(isdn_sup_PartyNumber_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_screeningIndicator, + { "screeningIndicator", "isdn-sup.screeningIndicator", + FT_UINT32, BASE_DEC, VALS(isdn_sup_ScreeningIndicator_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_partySubaddress, + { "partySubaddress", "isdn-sup.partySubaddress", + FT_UINT32, BASE_DEC, VALS(isdn_sup_PartySubaddress_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_unknownPartyNumber, + { "unknownPartyNumber", "isdn-sup.unknownPartyNumber", + FT_STRING, BASE_NONE, NULL, 0, + "NumberDigits", HFILL }}, + { &hf_isdn_sup_publicPartyNumber, + { "publicPartyNumber", "isdn-sup.publicPartyNumber_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_nsapEncodedNumber, + { "nsapEncodedNumber", "isdn-sup.nsapEncodedNumber", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_dataPartyNumber, + { "dataPartyNumber", "isdn-sup.dataPartyNumber", + FT_STRING, BASE_NONE, NULL, 0, + "NumberDigits", HFILL }}, + { &hf_isdn_sup_telexPartyNumber, + { "telexPartyNumber", "isdn-sup.telexPartyNumber", + FT_STRING, BASE_NONE, NULL, 0, + "NumberDigits", HFILL }}, + { &hf_isdn_sup_privatePartyNumber, + { "privatePartyNumber", "isdn-sup.privatePartyNumber_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_nationalStandardPartyNumber, + { "nationalStandardPartyNumber", "isdn-sup.nationalStandardPartyNumber", + FT_STRING, BASE_NONE, NULL, 0, + "NumberDigits", HFILL }}, + { &hf_isdn_sup_publicTypeOfNumber, + { "publicTypeOfNumber", "isdn-sup.publicTypeOfNumber", + FT_UINT32, BASE_DEC, VALS(isdn_sup_PublicTypeOfNumber_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_publicNumberDigits, + { "publicNumberDigits", "isdn-sup.publicNumberDigits", + FT_STRING, BASE_NONE, NULL, 0, + "NumberDigits", HFILL }}, + { &hf_isdn_sup_privateTypeOfNumber, + { "privateTypeOfNumber", "isdn-sup.privateTypeOfNumber", + FT_UINT32, BASE_DEC, VALS(isdn_sup_PrivateTypeOfNumber_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_privateNumberDigits, + { "privateNumberDigits", "isdn-sup.privateNumberDigits", + FT_STRING, BASE_NONE, NULL, 0, + "NumberDigits", HFILL }}, + { &hf_isdn_sup_userSpecifiedSubaddress, + { "userSpecifiedSubaddress", "isdn-sup.userSpecifiedSubaddress_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_nSAPSubaddress, + { "nSAPSubaddress", "isdn-sup.nSAPSubaddress", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_subaddressInformation, + { "subaddressInformation", "isdn-sup.subaddressInformation", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_oddCountIndicator, + { "oddCountIndicator", "isdn-sup.oddCountIndicator", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_isdn_sup_aOCSCurrencyInfoList, + { "aOCSCurrencyInfoList", "isdn-sup.aOCSCurrencyInfoList", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_aOCSSpecialArrInfo, + { "aOCSSpecialArrInfo", "isdn-sup.aOCSSpecialArrInfo", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_chargingInfoFollows, + { "chargingInfoFollows", "isdn-sup.chargingInfoFollows_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_chargeNotAvailable, + { "chargeNotAvailable", "isdn-sup.chargeNotAvailable_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_aOCDCurrencyInfo, + { "aOCDCurrencyInfo", "isdn-sup.aOCDCurrencyInfo", + FT_UINT32, BASE_DEC, VALS(isdn_sup_AOCDCurrencyInfo_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_aOCDChargingUnitInfo, + { "aOCDChargingUnitInfo", "isdn-sup.aOCDChargingUnitInfo", + FT_UINT32, BASE_DEC, VALS(isdn_sup_AOCDChargingUnitInfo_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_aOCECurrencyInfo, + { "aOCECurrencyInfo", "isdn-sup.aOCECurrencyInfo_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_aOCEChargingUnitInfo, + { "aOCEChargingUnitInfo", "isdn-sup.aOCEChargingUnitInfo_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_AOCSCurrencyInfoList_item, + { "AOCSCurrencyInfo", "isdn-sup.AOCSCurrencyInfo_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_chargedItem, + { "chargedItem", "isdn-sup.chargedItem", + FT_UINT32, BASE_DEC, VALS(isdn_sup_ChargedItem_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_chargingtype, + { "chargingtype", "isdn-sup.chargingtype", + FT_UINT32, BASE_DEC, VALS(isdn_sup_T_chargingtype_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_aocschargingtypespecificCurrency, + { "specificCurrency", "isdn-sup.specificCurrency", + FT_UINT32, BASE_DEC, VALS(isdn_sup_AOCSChargingTypeSpecificCurrency_vals), 0, + "AOCSChargingTypeSpecificCurrency", HFILL }}, + { &hf_isdn_sup_durationCurrency, + { "durationCurrency", "isdn-sup.durationCurrency_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_flatRateCurrency, + { "flatRateCurrency", "isdn-sup.flatRateCurrency_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_volumeRateCurrency, + { "volumeRateCurrency", "isdn-sup.volumeRateCurrency_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_specialChargingCode, + { "specialChargingCode", "isdn-sup.specialChargingCode", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_freeOfCharge, + { "freeOfCharge", "isdn-sup.freeOfCharge_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_currencyInfoNotAvailable, + { "currencyInfoNotAvailable", "isdn-sup.currencyInfoNotAvailable_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_dCurrency, + { "dCurrency", "isdn-sup.dCurrency", + FT_STRING, BASE_NONE, NULL, 0, + "Currency", HFILL }}, + { &hf_isdn_sup_dAmount, + { "dAmount", "isdn-sup.dAmount_element", + FT_NONE, BASE_NONE, NULL, 0, + "Amount", HFILL }}, + { &hf_isdn_sup_dChargingType, + { "dChargingType", "isdn-sup.dChargingType", + FT_UINT32, BASE_DEC, VALS(isdn_sup_ChargingType_vals), 0, + "ChargingType", HFILL }}, + { &hf_isdn_sup_dTime, + { "dTime", "isdn-sup.dTime_element", + FT_NONE, BASE_NONE, NULL, 0, + "Time", HFILL }}, + { &hf_isdn_sup_dGranularity, + { "dGranularity", "isdn-sup.dGranularity_element", + FT_NONE, BASE_NONE, NULL, 0, + "Time", HFILL }}, + { &hf_isdn_sup_fRCurrency, + { "fRCurrency", "isdn-sup.fRCurrency", + FT_STRING, BASE_NONE, NULL, 0, + "Currency", HFILL }}, + { &hf_isdn_sup_fRAmount, + { "fRAmount", "isdn-sup.fRAmount_element", + FT_NONE, BASE_NONE, NULL, 0, + "Amount", HFILL }}, + { &hf_isdn_sup_vRCurrency, + { "vRCurrency", "isdn-sup.vRCurrency", + FT_STRING, BASE_NONE, NULL, 0, + "Currency", HFILL }}, + { &hf_isdn_sup_vRAmount, + { "vRAmount", "isdn-sup.vRAmount_element", + FT_NONE, BASE_NONE, NULL, 0, + "Amount", HFILL }}, + { &hf_isdn_sup_vRVolumeUnit, + { "vRVolumeUnit", "isdn-sup.vRVolumeUnit", + FT_UINT32, BASE_DEC, VALS(isdn_sup_VolumeUnit_vals), 0, + "VolumeUnit", HFILL }}, + { &hf_isdn_sup_aocdspecificCurrency, + { "specificCurrency", "isdn-sup.specificCurrency_element", + FT_NONE, BASE_NONE, NULL, 0, + "AOCDSpecificCurrency", HFILL }}, + { &hf_isdn_sup_recordedCurrency, + { "recordedCurrency", "isdn-sup.recordedCurrency_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_typeOfChargingInfo, + { "typeOfChargingInfo", "isdn-sup.typeOfChargingInfo", + FT_UINT32, BASE_DEC, VALS(isdn_sup_TypeOfChargingInfo_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_aOCDBillingId, + { "aOCDBillingId", "isdn-sup.aOCDBillingId", + FT_UINT32, BASE_DEC, VALS(isdn_sup_AOCDBillingId_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_aocdspecificchargingunits, + { "specificChargingUnits", "isdn-sup.specificChargingUnits_element", + FT_NONE, BASE_NONE, NULL, 0, + "AOCDSpecificChargingUnits", HFILL }}, + { &hf_isdn_sup_recordedUnitsList, + { "recordedUnitsList", "isdn-sup.recordedUnitsList", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_rCurrency, + { "rCurrency", "isdn-sup.rCurrency", + FT_STRING, BASE_NONE, NULL, 0, + "Currency", HFILL }}, + { &hf_isdn_sup_rAmount, + { "rAmount", "isdn-sup.rAmount_element", + FT_NONE, BASE_NONE, NULL, 0, + "Amount", HFILL }}, + { &hf_isdn_sup_RecordedUnitsList_item, + { "RecordedUnits", "isdn-sup.RecordedUnits_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_recoredunitscc, + { "cc", "isdn-sup.cc", + FT_UINT32, BASE_DEC, VALS(isdn_sup_RecoredUnitsCc_vals), 0, + "RecoredUnitsCc", HFILL }}, + { &hf_isdn_sup_recordedNumberOfUnits, + { "recordedNumberOfUnits", "isdn-sup.recordedNumberOfUnits", + FT_UINT32, BASE_DEC, NULL, 0, + "NumberOfUnits", HFILL }}, + { &hf_isdn_sup_notAvailable, + { "notAvailable", "isdn-sup.notAvailable_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_recordedTypeOfUnits, + { "recordedTypeOfUnits", "isdn-sup.recordedTypeOfUnits", + FT_UINT32, BASE_DEC, NULL, 0, + "TypeOfUnit", HFILL }}, + { &hf_isdn_sup_aocecurrencycc, + { "cc", "isdn-sup.cc", + FT_UINT32, BASE_DEC, VALS(isdn_sup_AOCECurrencyCc_vals), 0, + "AOCECurrencyCc", HFILL }}, + { &hf_isdn_sup_aoceccspecificCurrency, + { "specificCurrency", "isdn-sup.specificCurrency_element", + FT_NONE, BASE_NONE, NULL, 0, + "AOCECcSpecificCurrency", HFILL }}, + { &hf_isdn_sup_aOCEBillingId, + { "aOCEBillingId", "isdn-sup.aOCEBillingId", + FT_UINT32, BASE_DEC, VALS(isdn_sup_AOCEBillingId_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_chargingAssociation, + { "chargingAssociation", "isdn-sup.chargingAssociation", + FT_UINT32, BASE_DEC, VALS(isdn_sup_ChargingAssociation_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_aocechargingunitcc, + { "cc", "isdn-sup.cc", + FT_UINT32, BASE_DEC, VALS(isdn_sup_AOCEChargingUnitCc_vals), 0, + "AOCEChargingUnitCc", HFILL }}, + { &hf_isdn_sup_aoceccspecificchargingunits, + { "specificChargingUnits", "isdn-sup.specificChargingUnits_element", + FT_NONE, BASE_NONE, NULL, 0, + "AOCECcSpecificChargingUnits", HFILL }}, + { &hf_isdn_sup_currencyAmount, + { "currencyAmount", "isdn-sup.currencyAmount", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_multiplier, + { "multiplier", "isdn-sup.multiplier", + FT_UINT32, BASE_DEC, VALS(isdn_sup_Multiplier_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_lengthOfTimeUnit, + { "lengthOfTimeUnit", "isdn-sup.lengthOfTimeUnit", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_scale, + { "scale", "isdn-sup.scale", + FT_UINT32, BASE_DEC, VALS(isdn_sup_Scale_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_chargeNumber, + { "chargeNumber", "isdn-sup.chargeNumber", + FT_UINT32, BASE_DEC, VALS(isdn_sup_PartyNumber_vals), 0, + "PartyNumber", HFILL }}, + { &hf_isdn_sup_chargeIdentifier, + { "chargeIdentifier", "isdn-sup.chargeIdentifier", + FT_INT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_oARequested, + { "oARequested", "isdn-sup.oARequested", + FT_BOOLEAN, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_cUGIndex, + { "cUGIndex", "isdn-sup.cUGIndex", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_conferenceId, + { "conferenceId", "isdn-sup.conferenceId", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_partyId, + { "partyId", "isdn-sup.partyId", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_procedure, + { "procedure", "isdn-sup.procedure", + FT_UINT32, BASE_DEC, VALS(isdn_sup_Procedure_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_basicService, + { "basicService", "isdn-sup.basicService", + FT_UINT32, BASE_DEC, VALS(isdn_sup_BasicService_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_forwardedToAddress, + { "forwardedToAddress", "isdn-sup.forwardedToAddress_element", + FT_NONE, BASE_NONE, NULL, 0, + "Address", HFILL }}, + { &hf_isdn_sup_servedUserNr, + { "servedUserNr", "isdn-sup.servedUserNr", + FT_UINT32, BASE_DEC, VALS(isdn_sup_ServedUserNr_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_noReplyTimer, + { "noReplyTimer", "isdn-sup.noReplyTimer", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_forwardedToAddresss, + { "forwardedToAddresss", "isdn-sup.forwardedToAddresss_element", + FT_NONE, BASE_NONE, NULL, 0, + "Address", HFILL }}, + { &hf_isdn_sup_diversionReason, + { "diversionReason", "isdn-sup.diversionReason", + FT_UINT32, BASE_DEC, VALS(isdn_sup_DiversionReason_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_servedUserSubaddress, + { "servedUserSubaddress", "isdn-sup.servedUserSubaddress", + FT_UINT32, BASE_DEC, VALS(isdn_sup_PartySubaddress_vals), 0, + "PartySubaddress", HFILL }}, + { &hf_isdn_sup_callingAddress, + { "callingAddress", "isdn-sup.callingAddress", + FT_UINT32, BASE_DEC, VALS(isdn_sup_PresentedAddressScreened_vals), 0, + "PresentedAddressScreened", HFILL }}, + { &hf_isdn_sup_originalCalledNr, + { "originalCalledNr", "isdn-sup.originalCalledNr", + FT_UINT32, BASE_DEC, VALS(isdn_sup_PresentedNumberUnscreened_vals), 0, + "PresentedNumberUnscreened", HFILL }}, + { &hf_isdn_sup_lastDivertingNr, + { "lastDivertingNr", "isdn-sup.lastDivertingNr", + FT_UINT32, BASE_DEC, VALS(isdn_sup_PresentedNumberUnscreened_vals), 0, + "PresentedNumberUnscreened", HFILL }}, + { &hf_isdn_sup_lastDivertingReason, + { "lastDivertingReason", "isdn-sup.lastDivertingReason", + FT_UINT32, BASE_DEC, VALS(isdn_sup_DiversionReason_vals), 0, + "DiversionReason", HFILL }}, + { &hf_isdn_sup_userInfo, + { "userInfo", "isdn-sup.userInfo", + FT_BYTES, BASE_NONE, NULL, 0, + "Q931InformationElement", HFILL }}, + { &hf_isdn_sup_deflectionAddress, + { "deflectionAddress", "isdn-sup.deflectionAddress_element", + FT_NONE, BASE_NONE, NULL, 0, + "Address", HFILL }}, + { &hf_isdn_sup_presentationAllowedDivertedToUser, + { "presentationAllowedDivertedToUser", "isdn-sup.presentationAllowedDivertedToUser", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "PresentationAllowedIndicator", HFILL }}, + { &hf_isdn_sup_rerouteingReason, + { "rerouteingReason", "isdn-sup.rerouteingReason", + FT_UINT32, BASE_DEC, VALS(isdn_sup_DiversionReason_vals), 0, + "DiversionReason", HFILL }}, + { &hf_isdn_sup_calledAddress, + { "calledAddress", "isdn-sup.calledAddress_element", + FT_NONE, BASE_NONE, NULL, 0, + "Address", HFILL }}, + { &hf_isdn_sup_rerouteingCounter, + { "rerouteingCounter", "isdn-sup.rerouteingCounter", + FT_UINT32, BASE_DEC, NULL, 0, + "DiversionCounter", HFILL }}, + { &hf_isdn_sup_q931InfoElement, + { "q931InfoElement", "isdn-sup.q931InfoElement", + FT_BYTES, BASE_NONE, NULL, 0, + "Q931InformationElement", HFILL }}, + { &hf_isdn_sup_lastRerouteingNr, + { "lastRerouteingNr", "isdn-sup.lastRerouteingNr", + FT_UINT32, BASE_DEC, VALS(isdn_sup_PresentedNumberUnscreened_vals), 0, + "PresentedNumberUnscreened", HFILL }}, + { &hf_isdn_sup_subscriptionOption, + { "subscriptionOption", "isdn-sup.subscriptionOption", + FT_UINT32, BASE_DEC, VALS(isdn_sup_SubscriptionOption_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_callingPartySubaddress, + { "callingPartySubaddress", "isdn-sup.callingPartySubaddress", + FT_UINT32, BASE_DEC, VALS(isdn_sup_PartySubaddress_vals), 0, + "PartySubaddress", HFILL }}, + { &hf_isdn_sup_divertedToNumber, + { "divertedToNumber", "isdn-sup.divertedToNumber", + FT_UINT32, BASE_DEC, VALS(isdn_sup_PresentedNumberUnscreened_vals), 0, + "PresentedNumberUnscreened", HFILL }}, + { &hf_isdn_sup_diversionCounter, + { "diversionCounter", "isdn-sup.diversionCounter", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_divertingNr, + { "divertingNr", "isdn-sup.divertingNr", + FT_UINT32, BASE_DEC, VALS(isdn_sup_PresentedNumberUnscreened_vals), 0, + "PresentedNumberUnscreened", HFILL }}, + { &hf_isdn_sup_IntResultList_item, + { "IntResult", "isdn-sup.IntResult_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_individualNumber, + { "individualNumber", "isdn-sup.individualNumber", + FT_UINT32, BASE_DEC, VALS(isdn_sup_PartyNumber_vals), 0, + "PartyNumber", HFILL }}, + { &hf_isdn_sup_allNumbers, + { "allNumbers", "isdn-sup.allNumbers_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_ServedUserNumberList_item, + { "PartyNumber", "isdn-sup.PartyNumber", + FT_UINT32, BASE_DEC, VALS(isdn_sup_PartyNumber_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_service, + { "service", "isdn-sup.service", + FT_UINT32, BASE_DEC, VALS(isdn_sup_Service_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_preferred, + { "preferred", "isdn-sup.preferred", + FT_BOOLEAN, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_servedUserDestination, + { "servedUserDestination", "isdn-sup.servedUserDestination", + FT_UINT32, BASE_DEC, VALS(isdn_sup_PartyNumber_vals), 0, + "PartyNumber", HFILL }}, + { &hf_isdn_sup_queueIdentity, + { "queueIdentity", "isdn-sup.queueIdentity", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_fPHReference, + { "fPHReference", "isdn-sup.fPHReference", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_calledFreephoneNr, + { "calledFreephoneNr", "isdn-sup.calledFreephoneNr", + FT_UINT32, BASE_DEC, VALS(isdn_sup_PartyNumber_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_mlppParams, + { "mlppParams", "isdn-sup.mlppParams_element", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_ieArg, + { "ieArg", "isdn-sup.ieArg", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_precLevel, + { "precLevel", "isdn-sup.precLevel", + FT_UINT32, BASE_DEC, VALS(isdn_sup_PrecLevel_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_lfbIndictn, + { "lfbIndictn", "isdn-sup.lfbIndictn", + FT_UINT32, BASE_DEC, VALS(isdn_sup_LFBIndictn_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_mlppSvcDomn, + { "mlppSvcDomn", "isdn-sup.mlppSvcDomn", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_isdn_sup_statusQuery, + { "statusQuery", "isdn-sup.statusQuery", + FT_UINT32, BASE_DEC, VALS(isdn_sup_StatusQuery_vals), 0, + NULL, HFILL }}, + { &hf_isdn_sup_location, + { "location", "isdn-sup.location", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + }; + + /* List of subtrees */ + static gint *ett[] = { + &ett_isdn_sup, + + &ett_isdn_sup_PresentedAddressScreened, + &ett_isdn_sup_PresentedAddressUnscreened, + &ett_isdn_sup_PresentedNumberScreened, + &ett_isdn_sup_PresentedNumberUnscreened, + &ett_isdn_sup_AddressScreened, + &ett_isdn_sup_NumberScreened, + &ett_isdn_sup_Address, + &ett_isdn_sup_PartyNumber, + &ett_isdn_sup_PublicPartyNumber, + &ett_isdn_sup_PrivatePartyNumber, + &ett_isdn_sup_PartySubaddress, + &ett_isdn_sup_UserSpecifiedSubaddress, + &ett_isdn_sup_ChargingRequestRes, + &ett_isdn_sup_AOCSCurrencyArg, + &ett_isdn_sup_AOCSSpecialArrArg, + &ett_isdn_sup_AOCDCurrencyArg, + &ett_isdn_sup_AOCDChargingUnitArg, + &ett_isdn_sup_AOCECurrencyArg, + &ett_isdn_sup_AOCEChargingUnitArg, + &ett_isdn_sup_AOCSCurrencyInfoList, + &ett_isdn_sup_AOCSCurrencyInfo, + &ett_isdn_sup_T_chargingtype, + &ett_isdn_sup_AOCSChargingTypeSpecificCurrency, + &ett_isdn_sup_DurationCurrency, + &ett_isdn_sup_FlatRateCurrency, + &ett_isdn_sup_VolumeRateCurrency, + &ett_isdn_sup_AOCDCurrencyInfo, + &ett_isdn_sup_AOCDSpecificCurrency, + &ett_isdn_sup_AOCDChargingUnitInfo, + &ett_isdn_sup_AOCDSpecificChargingUnits, + &ett_isdn_sup_RecordedCurrency, + &ett_isdn_sup_RecordedUnitsList, + &ett_isdn_sup_RecordedUnits, + &ett_isdn_sup_RecoredUnitsCc, + &ett_isdn_sup_AOCECurrencyInfo, + &ett_isdn_sup_AOCECurrencyCc, + &ett_isdn_sup_AOCECcSpecificCurrency, + &ett_isdn_sup_AOCEChargingUnitInfo, + &ett_isdn_sup_AOCEChargingUnitCc, + &ett_isdn_sup_AOCECcSpecificChargingUnits, + &ett_isdn_sup_Amount, + &ett_isdn_sup_Time, + &ett_isdn_sup_ChargingAssociation, + &ett_isdn_sup_CUGcallArg, + &ett_isdn_sup_BeginCONFRes, + &ett_isdn_sup_SplitCONFArg, + &ett_isdn_sup_ActivationDiversionArg, + &ett_isdn_sup_DeactivationDiversionArg, + &ett_isdn_sup_ActivationStatusNotificationDivArg, + &ett_isdn_sup_DeactivationStatusNotificationDivArg, + &ett_isdn_sup_InterrogationDiversionArg, + &ett_isdn_sup_DiversionInformationArg, + &ett_isdn_sup_CallDeflectionArg, + &ett_isdn_sup_CallRerouteingArg, + &ett_isdn_sup_DivertingLegInformation1Arg, + &ett_isdn_sup_DivertingLegInformation2Arg, + &ett_isdn_sup_IntResultList, + &ett_isdn_sup_IntResult, + &ett_isdn_sup_ServedUserNr, + &ett_isdn_sup_ServedUserNumberList, + &ett_isdn_sup_UserUserServiceArg, + &ett_isdn_sup_Monitor_T_FPHArg, + &ett_isdn_sup_Free_T_FPHArg, + &ett_isdn_sup_Call_T_FPHArg, + &ett_isdn_sup_MLPPLFBArg, + &ett_isdn_sup_MLPPParams, + &ett_isdn_sup_MLPPLFBResp, + }; + + static ei_register_info ei[] = { +#if 0 + { &ei_isdn_sup_unsupported_arg_type, { "isdn_sup.unsupported.arg_type", PI_UNDECODED, PI_WARN, "UNSUPPORTED ARGUMENT TYPE (ETSI sup)", EXPFILL }}, +#endif + { &ei_isdn_sup_unsupported_result_type, { "isdn_sup.unsupported.result_type", PI_UNDECODED, PI_WARN, "UNSUPPORTED RESULT TYPE (ETSI sup)", EXPFILL }}, + { &ei_isdn_sup_unsupported_error_type, { "isdn_sup.unsupported.error_type", PI_UNDECODED, PI_WARN, "UNSUPPORTED ERROR TYPE (ETSI sup)", EXPFILL }}, + }; + + expert_module_t* expert_isdn_sup; + + /* Register protocol */ + proto_isdn_sup = proto_register_protocol(PNAME, PSNAME, PFNAME); + + /* Register fields and subtrees */ + proto_register_field_array(proto_isdn_sup, hf, array_length(hf)); + proto_register_subtree_array(ett, array_length(ett)); + expert_isdn_sup = expert_register_protocol(proto_isdn_sup); + expert_register_field_array(expert_isdn_sup, ei, array_length(ei)); + + /* Register dissectors */ + isdn_sup_arg_handle = register_dissector(PFNAME "_arg", dissect_isdn_sup_arg, proto_isdn_sup); + isdn_sup_res_handle = register_dissector(PFNAME "_res", dissect_isdn_sup_res, proto_isdn_sup); + isdn_sup_err_handle = register_dissector(PFNAME "_err", dissect_isdn_sup_err, proto_isdn_sup); +} |