/* Do not modify this file. Changes will be overwritten. */ /* Generated automatically by the ASN.1 to Wireshark dissector compiler */ /* packet-h460.c */ /* asn2wrs.py -q -L -c ./h460.cnf -s ./packet-h460-template -D . -O ../.. NUMBER-PORTABILITY.asn CIRCUIT-STATUS-MAP.asn CALL-PRIORITY.asn QOS-MONITORING-REPORT.asn QOS-MONITORING-EXTENDED-VOIP-REPORT.asn CALL-PARTY-CATEGORY.asn MLPP.asn SIGNALLING-CHANNEL-SUSPEND-REDIRECT.asn SIGNALLING-TRAVERSAL.asn MEDIA-TRAVERSAL.asn MESSAGE-BROADCAST.asn */ /* packet-h460.c * Routines for H.460.x packet dissection * 2007 Tomas Kukosa * * Wireshark - Network traffic analyzer * By Gerald Combs * Copyright 1998 Gerald Combs * * SPDX-License-Identifier: GPL-2.0-or-later */ #include "config.h" #include #include #include #include #include "packet-per.h" #include "packet-h225.h" #include "packet-h235.h" #include "packet-h245.h" #define PNAME "H.460 Supplementary Services" #define PSNAME "H.460" #define PFNAME "h460" void proto_register_h460(void); void proto_reg_handoff_h460(void); /* Initialize the protocol and registered fields */ static int proto_h460; /* --- Module NUMBER-PORTABILITY --- --- --- */ static int hf_h460_2_h460_2_NumberPortabilityInfo_PDU; /* NumberPortabilityInfo */ static int hf_h460_2_numberPortabilityRejectReason; /* NumberPortabilityRejectReason */ static int hf_h460_2_nUMBERPORTABILITYDATA; /* T_nUMBERPORTABILITYDATA */ static int hf_h460_2_addressTranslated; /* NULL */ static int hf_h460_2_portedAddress; /* PortabilityAddress */ static int hf_h460_2_routingAddress; /* PortabilityAddress */ static int hf_h460_2_regionalParams; /* RegionalParameters */ static int hf_h460_2_unspecified; /* NULL */ static int hf_h460_2_qorPortedNumber; /* NULL */ static int hf_h460_2_aliasAddress; /* AliasAddress */ static int hf_h460_2_typeOfAddress; /* NumberPortabilityTypeOfNumber */ static int hf_h460_2_publicTypeOfNumber; /* PublicTypeOfNumber */ static int hf_h460_2_privateTypeOfNumber; /* PrivateTypeOfNumber */ static int hf_h460_2_portabilityTypeOfNumber; /* PortabilityTypeOfNumber */ static int hf_h460_2_portedNumber; /* NULL */ static int hf_h460_2_routingNumber; /* NULL */ static int hf_h460_2_concatenatedNumber; /* NULL */ static int hf_h460_2_t35CountryCode; /* INTEGER_0_255 */ static int hf_h460_2_t35Extension; /* INTEGER_0_255 */ static int hf_h460_2_variantIdentifier; /* INTEGER_1_255 */ static int hf_h460_2_regionalData; /* OCTET_STRING */ /* --- Module CIRCUIT-STATUS-MAP --- --- --- */ static int hf_h460_3_h460_3_CircuitStatus_PDU; /* CircuitStatus */ static int hf_h460_3_circuitStatusMap; /* SEQUENCE_OF_CircuitStatusMap */ static int hf_h460_3_circuitStatusMap_item; /* CircuitStatusMap */ static int hf_h460_3_statusType; /* CircuitStatusType */ static int hf_h460_3_baseCircuitID; /* CircuitIdentifier */ static int hf_h460_3_range; /* INTEGER_0_4095 */ static int hf_h460_3_status; /* OCTET_STRING */ static int hf_h460_3_serviceStatus; /* NULL */ static int hf_h460_3_busyStatus; /* NULL */ /* --- Module CALL-PRIORITY --- --- --- */ static int hf_h460_4_h460_4_CallPriorityInfo_PDU; /* CallPriorityInfo */ static int hf_h460_4_h460_4_CountryInternationalNetworkCallOriginationIdentification_PDU; /* CountryInternationalNetworkCallOriginationIdentification */ static int hf_h460_4_priorityValue; /* T_priorityValue */ static int hf_h460_4_emergencyAuthorized; /* NULL */ static int hf_h460_4_emergencyPublic; /* NULL */ static int hf_h460_4_high; /* NULL */ static int hf_h460_4_normal; /* NULL */ static int hf_h460_4_priorityExtension; /* INTEGER_0_255 */ static int hf_h460_4_tokens; /* SEQUENCE_OF_ClearToken */ static int hf_h460_4_tokens_item; /* ClearToken */ static int hf_h460_4_cryptoTokens; /* SEQUENCE_OF_CryptoToken */ static int hf_h460_4_cryptoTokens_item; /* CryptoToken */ static int hf_h460_4_rejectReason; /* T_rejectReason */ static int hf_h460_4_priorityUnavailable; /* NULL */ static int hf_h460_4_priorityUnauthorized; /* NULL */ static int hf_h460_4_priorityValueUnknown; /* NULL */ static int hf_h460_4_numberingPlan; /* T_numberingPlan */ static int hf_h460_4_x121; /* T_x121 */ static int hf_h460_4_x121CountryCode; /* X121CountryCode */ static int hf_h460_4_e164; /* T_e164 */ static int hf_h460_4_e164CountryCode; /* E164CountryCode */ static int hf_h460_4_identificationCode; /* T_identificationCode */ /* --- Modules QOS-MONITORING-REPORT QOS-MONITORING-EXTENDED-VOIP-REPORT --- --- --- */ static int hf_h460_9_h460_9_QosMonitoringReportData_PDU; /* QosMonitoringReportData */ static int hf_h460_9_h460_9_ExtendedRTPMetrics_PDU; /* ExtendedRTPMetrics */ static int hf_h460_9_extensionId; /* GenericIdentifier */ static int hf_h460_9_extensionContent; /* OCTET_STRING */ static int hf_h460_9_rtpAddress; /* TransportChannelInfo */ static int hf_h460_9_rtcpAddress; /* TransportChannelInfo */ static int hf_h460_9_sessionId; /* INTEGER_1_255 */ static int hf_h460_9_nonStandardData; /* NonStandardParameter */ static int hf_h460_9_mediaSenderMeasures; /* T_mediaSenderMeasures */ static int hf_h460_9_worstEstimatedEnd2EndDelay; /* EstimatedEnd2EndDelay */ static int hf_h460_9_meanEstimatedEnd2EndDelay; /* EstimatedEnd2EndDelay */ static int hf_h460_9_mediaReceiverMeasures; /* T_mediaReceiverMeasures */ static int hf_h460_9_cumulativeNumberOfPacketsLost; /* INTEGER_0_4294967295 */ static int hf_h460_9_packetLostRate; /* INTEGER_0_65535 */ static int hf_h460_9_worstJitter; /* CalculatedJitter */ static int hf_h460_9_estimatedThroughput; /* BandWidth */ static int hf_h460_9_fractionLostRate; /* INTEGER_0_65535 */ static int hf_h460_9_meanJitter; /* CalculatedJitter */ static int hf_h460_9_extensions; /* SEQUENCE_OF_Extension */ static int hf_h460_9_extensions_item; /* Extension */ static int hf_h460_9_callReferenceValue; /* CallReferenceValue */ static int hf_h460_9_conferenceID; /* ConferenceIdentifier */ static int hf_h460_9_callIdentifier; /* CallIdentifier */ static int hf_h460_9_mediaChannelsQoS; /* SEQUENCE_OF_RTCPMeasures */ static int hf_h460_9_mediaChannelsQoS_item; /* RTCPMeasures */ static int hf_h460_9_periodic; /* PeriodicQoSMonReport */ static int hf_h460_9_final; /* FinalQosMonReport */ static int hf_h460_9_interGK; /* InterGKQosMonReport */ static int hf_h460_9_perCallInfo; /* SEQUENCE_OF_PerCallQoSReport */ static int hf_h460_9_perCallInfo_item; /* PerCallQoSReport */ static int hf_h460_9_mediaInfo; /* SEQUENCE_OF_RTCPMeasures */ static int hf_h460_9_mediaInfo_item; /* RTCPMeasures */ static int hf_h460_9_networkPacketLossRate; /* INTEGER_0_255 */ static int hf_h460_9_jitterBufferDiscardRate; /* INTEGER_0_255 */ static int hf_h460_9_burstMetrics; /* BurstMetrics */ static int hf_h460_9_rtcpRoundTripDelay; /* INTEGER_0_65535 */ static int hf_h460_9_endSystemDelay; /* INTEGER_0_65535 */ static int hf_h460_9_signalLevel; /* INTEGER_M127_10 */ static int hf_h460_9_noiseLevel; /* INTEGER_M127_0 */ static int hf_h460_9_residualEchoReturnLoss; /* INTEGER_0_127 */ static int hf_h460_9_rFactor; /* INTEGER_0_100 */ static int hf_h460_9_extRFactor; /* INTEGER_0_100 */ static int hf_h460_9_estimatedMOSLQ; /* INTEGER_10_50 */ static int hf_h460_9_estimatedMOSCQ; /* INTEGER_10_50 */ static int hf_h460_9_plcType; /* PLCtypes */ static int hf_h460_9_jitterBufferParms; /* JitterBufferParms */ static int hf_h460_9_gmin; /* INTEGER_0_255 */ static int hf_h460_9_burstLossDensity; /* INTEGER_0_255 */ static int hf_h460_9_gapLossDensity; /* INTEGER_0_255 */ static int hf_h460_9_burstDuration; /* INTEGER_0_65535 */ static int hf_h460_9_gapDuration; /* INTEGER_0_65535 */ static int hf_h460_9_unspecified; /* NULL */ static int hf_h460_9_disabled; /* NULL */ static int hf_h460_9_enhanced; /* NULL */ static int hf_h460_9_standard; /* NULL */ static int hf_h460_9_jitterBufferType; /* JitterBufferTypes */ static int hf_h460_9_jitterBufferAdaptRate; /* INTEGER_0_15 */ static int hf_h460_9_jitterBufferNominalSize; /* INTEGER_0_65535 */ static int hf_h460_9_jitterBufferMaxSize; /* INTEGER_0_65535 */ static int hf_h460_9_jitterBufferAbsoluteMax; /* INTEGER_0_65535 */ static int hf_h460_9_unknown; /* NULL */ static int hf_h460_9_reserved; /* NULL */ static int hf_h460_9_nonadaptive; /* NULL */ static int hf_h460_9_adaptive; /* NULL */ /* --- Module CALL-PARTY-CATEGORY --- --- --- */ static int hf_h460_10_h460_10_CallPartyCategoryInfo_PDU; /* CallPartyCategoryInfo */ static int hf_h460_10_callPartyCategory; /* CallPartyCategory */ static int hf_h460_10_originatingLineInfo; /* OriginatingLineInfo */ /* --- Module MLPP --- --- --- */ static int hf_h460_14_h460_14_MLPPInfo_PDU; /* MLPPInfo */ static int hf_h460_14_precedence; /* MlppPrecedence */ static int hf_h460_14_mlppReason; /* MlppReason */ static int hf_h460_14_mlppNotification; /* MlppNotification */ static int hf_h460_14_alternateParty; /* AlternateParty */ static int hf_h460_14_releaseCall; /* ReleaseCall */ static int hf_h460_14_preemptionPending; /* NULL */ static int hf_h460_14_preemptionInProgress; /* NULL */ static int hf_h460_14_preemptionEnd; /* NULL */ static int hf_h460_14_preemptionComplete; /* NULL */ static int hf_h460_14_altID; /* AliasAddress */ static int hf_h460_14_altTimer; /* INTEGER_0_255 */ static int hf_h460_14_preemptCallID; /* CallIdentifier */ static int hf_h460_14_releaseReason; /* MlppReason */ static int hf_h460_14_releaseDelay; /* INTEGER_0_255 */ /* --- Module SIGNALLING-CHANNEL-SUSPEND-REDIRECT --- --- --- */ static int hf_h460_15_h460_15_SignallingChannelData_PDU; /* SignallingChannelData */ static int hf_h460_15_signallingChannelData; /* T_signallingChannelData */ static int hf_h460_15_channelSuspendRequest; /* ChannelSuspendRequest */ static int hf_h460_15_channelSuspendResponse; /* ChannelSuspendResponse */ static int hf_h460_15_channelSuspendConfirm; /* ChannelSuspendConfirm */ static int hf_h460_15_channelSuspendCancel; /* ChannelSuspendCancel */ static int hf_h460_15_channelResumeRequest; /* ChannelResumeRequest */ static int hf_h460_15_channelResumeResponse; /* ChannelResumeResponse */ static int hf_h460_15_channelResumeAddress; /* SEQUENCE_OF_TransportAddress */ static int hf_h460_15_channelResumeAddress_item; /* TransportAddress */ static int hf_h460_15_immediateResume; /* BOOLEAN */ static int hf_h460_15_resetH245; /* NULL */ static int hf_h460_15_okToSuspend; /* BOOLEAN */ static int hf_h460_15_randomNumber; /* INTEGER_0_4294967295 */ /* --- Module SIGNALLING-TRAVERSAL --- --- --- */ static int hf_h460_18_h460_18_IncomingCallIndication_PDU; /* IncomingCallIndication */ static int hf_h460_18_h460_18_LRQKeepAliveData_PDU; /* LRQKeepAliveData */ static int hf_h460_18_callSignallingAddress; /* TransportAddress */ static int hf_h460_18_callID; /* CallIdentifier */ static int hf_h460_18_lrqKeepAliveInterval; /* TimeToLive */ /* --- Module MEDIA-TRAVERSAL --- --- --- */ static int hf_h460_19_h460_19_TraversalParameters_PDU; /* TraversalParameters */ static int hf_h460_19_multiplexedMediaChannel; /* TransportAddress */ static int hf_h460_19_multiplexedMediaControlChannel; /* TransportAddress */ static int hf_h460_19_multiplexID; /* INTEGER_0_4294967295 */ static int hf_h460_19_keepAliveChannel; /* TransportAddress */ static int hf_h460_19_keepAlivePayloadType; /* INTEGER_0_127 */ static int hf_h460_19_keepAliveInterval; /* TimeToLive */ /* --- Module MESSAGE-BROADCAST --- --- --- */ static int hf_h460_21_h460_21_CapabilityAdvertisement_PDU; /* CapabilityAdvertisement */ static int hf_h460_21_receiveCapabilities; /* ReceiveCapabilities */ static int hf_h460_21_transmitCapabilities; /* SEQUENCE_SIZE_1_256_OF_TransmitCapabilities */ static int hf_h460_21_transmitCapabilities_item; /* TransmitCapabilities */ static int hf_h460_21_capabilities; /* SEQUENCE_SIZE_1_256_OF_Capability */ static int hf_h460_21_capabilities_item; /* Capability */ static int hf_h460_21_maxGroups; /* INTEGER_1_65535 */ static int hf_h460_21_groupIdentifer; /* GloballyUniqueID */ static int hf_h460_21_capability; /* Capability */ static int hf_h460_21_sourceAddress; /* UnicastAddress */ /* Initialize the subtree pointers */ /* --- Module NUMBER-PORTABILITY --- --- --- */ static int ett_h460_2_NumberPortabilityInfo; static int ett_h460_2_T_nUMBERPORTABILITYDATA; static int ett_h460_2_NumberPortabilityRejectReason; static int ett_h460_2_PortabilityAddress; static int ett_h460_2_NumberPortabilityTypeOfNumber; static int ett_h460_2_PortabilityTypeOfNumber; static int ett_h460_2_RegionalParameters; /* --- Module CIRCUIT-STATUS-MAP --- --- --- */ static int ett_h460_3_CircuitStatus; static int ett_h460_3_SEQUENCE_OF_CircuitStatusMap; static int ett_h460_3_CircuitStatusMap; static int ett_h460_3_CircuitStatusType; /* --- Module CALL-PRIORITY --- --- --- */ static int ett_h460_4_CallPriorityInfo; static int ett_h460_4_T_priorityValue; static int ett_h460_4_SEQUENCE_OF_ClearToken; static int ett_h460_4_SEQUENCE_OF_CryptoToken; static int ett_h460_4_T_rejectReason; static int ett_h460_4_CountryInternationalNetworkCallOriginationIdentification; static int ett_h460_4_T_numberingPlan; static int ett_h460_4_T_x121; static int ett_h460_4_T_e164; /* --- Modules QOS-MONITORING-REPORT QOS-MONITORING-EXTENDED-VOIP-REPORT --- --- --- */ static int ett_h460_9_Extension; static int ett_h460_9_RTCPMeasures; static int ett_h460_9_T_mediaSenderMeasures; static int ett_h460_9_T_mediaReceiverMeasures; static int ett_h460_9_SEQUENCE_OF_Extension; static int ett_h460_9_PerCallQoSReport; static int ett_h460_9_SEQUENCE_OF_RTCPMeasures; static int ett_h460_9_QosMonitoringReportData; static int ett_h460_9_PeriodicQoSMonReport; static int ett_h460_9_SEQUENCE_OF_PerCallQoSReport; static int ett_h460_9_FinalQosMonReport; static int ett_h460_9_InterGKQosMonReport; static int ett_h460_9_ExtendedRTPMetrics; static int ett_h460_9_BurstMetrics; static int ett_h460_9_PLCtypes; static int ett_h460_9_JitterBufferParms; static int ett_h460_9_JitterBufferTypes; /* --- Module CALL-PARTY-CATEGORY --- --- --- */ static int ett_h460_10_CallPartyCategoryInfo; /* --- Module MLPP --- --- --- */ static int ett_h460_14_MLPPInfo; static int ett_h460_14_MlppNotification; static int ett_h460_14_AlternateParty; static int ett_h460_14_ReleaseCall; /* --- Module SIGNALLING-CHANNEL-SUSPEND-REDIRECT --- --- --- */ static int ett_h460_15_SignallingChannelData; static int ett_h460_15_T_signallingChannelData; static int ett_h460_15_ChannelSuspendRequest; static int ett_h460_15_SEQUENCE_OF_TransportAddress; static int ett_h460_15_ChannelSuspendResponse; static int ett_h460_15_ChannelSuspendConfirm; static int ett_h460_15_ChannelSuspendCancel; static int ett_h460_15_ChannelResumeRequest; static int ett_h460_15_ChannelResumeResponse; /* --- Module SIGNALLING-TRAVERSAL --- --- --- */ static int ett_h460_18_IncomingCallIndication; static int ett_h460_18_LRQKeepAliveData; /* --- Module MEDIA-TRAVERSAL --- --- --- */ static int ett_h460_19_TraversalParameters; /* --- Module MESSAGE-BROADCAST --- --- --- */ static int ett_h460_21_CapabilityAdvertisement; static int ett_h460_21_SEQUENCE_SIZE_1_256_OF_TransmitCapabilities; static int ett_h460_21_ReceiveCapabilities; static int ett_h460_21_SEQUENCE_SIZE_1_256_OF_Capability; static int ett_h460_21_TransmitCapabilities; /* Main dissector handle */ static dissector_handle_t h460_name_handle; /* Subdissectors */ static dissector_handle_t q931_ie_handle; static dissector_handle_t h225_ras_handle; /* --- Module NUMBER-PORTABILITY --- --- --- */ static int dissect_h460_2_NULL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_null(tvb, offset, actx, tree, hf_index); return offset; } static const value_string h460_2_NumberPortabilityRejectReason_vals[] = { { 0, "unspecified" }, { 1, "qorPortedNumber" }, { 0, NULL } }; static const per_choice_t h460_2_NumberPortabilityRejectReason_choice[] = { { 0, &hf_h460_2_unspecified , ASN1_EXTENSION_ROOT , dissect_h460_2_NULL }, { 1, &hf_h460_2_qorPortedNumber, ASN1_EXTENSION_ROOT , dissect_h460_2_NULL }, { 0, NULL, 0, NULL } }; static int dissect_h460_2_NumberPortabilityRejectReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, ett_h460_2_NumberPortabilityRejectReason, h460_2_NumberPortabilityRejectReason_choice, NULL); return offset; } static const value_string h460_2_PortabilityTypeOfNumber_vals[] = { { 0, "portedNumber" }, { 1, "routingNumber" }, { 2, "concatenatedNumber" }, { 0, NULL } }; static const per_choice_t h460_2_PortabilityTypeOfNumber_choice[] = { { 0, &hf_h460_2_portedNumber , ASN1_EXTENSION_ROOT , dissect_h460_2_NULL }, { 1, &hf_h460_2_routingNumber, ASN1_EXTENSION_ROOT , dissect_h460_2_NULL }, { 2, &hf_h460_2_concatenatedNumber, ASN1_EXTENSION_ROOT , dissect_h460_2_NULL }, { 0, NULL, 0, NULL } }; static int dissect_h460_2_PortabilityTypeOfNumber(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, ett_h460_2_PortabilityTypeOfNumber, h460_2_PortabilityTypeOfNumber_choice, NULL); return offset; } static const value_string h460_2_NumberPortabilityTypeOfNumber_vals[] = { { 0, "publicTypeOfNumber" }, { 1, "privateTypeOfNumber" }, { 2, "portabilityTypeOfNumber" }, { 0, NULL } }; static const per_choice_t h460_2_NumberPortabilityTypeOfNumber_choice[] = { { 0, &hf_h460_2_publicTypeOfNumber, ASN1_EXTENSION_ROOT , dissect_h225_PublicTypeOfNumber }, { 1, &hf_h460_2_privateTypeOfNumber, ASN1_EXTENSION_ROOT , dissect_h225_PrivateTypeOfNumber }, { 2, &hf_h460_2_portabilityTypeOfNumber, ASN1_EXTENSION_ROOT , dissect_h460_2_PortabilityTypeOfNumber }, { 0, NULL, 0, NULL } }; static int dissect_h460_2_NumberPortabilityTypeOfNumber(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, ett_h460_2_NumberPortabilityTypeOfNumber, h460_2_NumberPortabilityTypeOfNumber_choice, NULL); return offset; } static const per_sequence_t h460_2_PortabilityAddress_sequence[] = { { &hf_h460_2_aliasAddress , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h225_AliasAddress }, { &hf_h460_2_typeOfAddress, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_2_NumberPortabilityTypeOfNumber }, { NULL, 0, 0, NULL } }; static int dissect_h460_2_PortabilityAddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_2_PortabilityAddress, h460_2_PortabilityAddress_sequence); return offset; } static int dissect_h460_2_INTEGER_0_255(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 0U, 255U, NULL, false); return offset; } static int dissect_h460_2_INTEGER_1_255(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 1U, 255U, NULL, false); return offset; } static int dissect_h460_2_OCTET_STRING(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, NO_BOUND, NO_BOUND, false, NULL); return offset; } static const per_sequence_t h460_2_RegionalParameters_sequence[] = { { &hf_h460_2_t35CountryCode, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_2_INTEGER_0_255 }, { &hf_h460_2_t35Extension , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_2_INTEGER_0_255 }, { &hf_h460_2_variantIdentifier, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_2_INTEGER_1_255 }, { &hf_h460_2_regionalData , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_2_OCTET_STRING }, { NULL, 0, 0, NULL } }; static int dissect_h460_2_RegionalParameters(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_2_RegionalParameters, h460_2_RegionalParameters_sequence); return offset; } static const per_sequence_t h460_2_T_nUMBERPORTABILITYDATA_sequence[] = { { &hf_h460_2_addressTranslated, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_2_NULL }, { &hf_h460_2_portedAddress, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_2_PortabilityAddress }, { &hf_h460_2_routingAddress, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_2_PortabilityAddress }, { &hf_h460_2_regionalParams, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_2_RegionalParameters }, { NULL, 0, 0, NULL } }; static int dissect_h460_2_T_nUMBERPORTABILITYDATA(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_2_T_nUMBERPORTABILITYDATA, h460_2_T_nUMBERPORTABILITYDATA_sequence); return offset; } static const value_string h460_2_NumberPortabilityInfo_vals[] = { { 0, "numberPortabilityRejectReason" }, { 1, "nUMBERPORTABILITYDATA" }, { 0, NULL } }; static const per_choice_t h460_2_NumberPortabilityInfo_choice[] = { { 0, &hf_h460_2_numberPortabilityRejectReason, ASN1_EXTENSION_ROOT , dissect_h460_2_NumberPortabilityRejectReason }, { 1, &hf_h460_2_nUMBERPORTABILITYDATA, ASN1_EXTENSION_ROOT , dissect_h460_2_T_nUMBERPORTABILITYDATA }, { 0, NULL, 0, NULL } }; static int dissect_h460_2_NumberPortabilityInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, ett_h460_2_NumberPortabilityInfo, h460_2_NumberPortabilityInfo_choice, NULL); return offset; } /*--- PDUs ---*/ static int dissect_h460_2_NumberPortabilityInfo_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_PER, true, pinfo); offset = dissect_h460_2_NumberPortabilityInfo(tvb, offset, &asn1_ctx, tree, hf_h460_2_h460_2_NumberPortabilityInfo_PDU); offset += 7; offset >>= 3; return offset; } /* --- Module CIRCUIT-STATUS-MAP --- --- --- */ static int dissect_h460_3_NULL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_null(tvb, offset, actx, tree, hf_index); return offset; } static const value_string h460_3_CircuitStatusType_vals[] = { { 0, "serviceStatus" }, { 1, "busyStatus" }, { 0, NULL } }; static const per_choice_t h460_3_CircuitStatusType_choice[] = { { 0, &hf_h460_3_serviceStatus, ASN1_EXTENSION_ROOT , dissect_h460_3_NULL }, { 1, &hf_h460_3_busyStatus , ASN1_EXTENSION_ROOT , dissect_h460_3_NULL }, { 0, NULL, 0, NULL } }; static int dissect_h460_3_CircuitStatusType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, ett_h460_3_CircuitStatusType, h460_3_CircuitStatusType_choice, NULL); return offset; } static int dissect_h460_3_INTEGER_0_4095(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 0U, 4095U, NULL, false); return offset; } static int dissect_h460_3_OCTET_STRING(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, NO_BOUND, NO_BOUND, false, NULL); return offset; } static const per_sequence_t h460_3_CircuitStatusMap_sequence[] = { { &hf_h460_3_statusType , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_3_CircuitStatusType }, { &hf_h460_3_baseCircuitID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h225_CircuitIdentifier }, { &hf_h460_3_range , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_3_INTEGER_0_4095 }, { &hf_h460_3_status , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_3_OCTET_STRING }, { NULL, 0, 0, NULL } }; static int dissect_h460_3_CircuitStatusMap(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_3_CircuitStatusMap, h460_3_CircuitStatusMap_sequence); return offset; } static const per_sequence_t h460_3_SEQUENCE_OF_CircuitStatusMap_sequence_of[1] = { { &hf_h460_3_circuitStatusMap_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h460_3_CircuitStatusMap }, }; static int dissect_h460_3_SEQUENCE_OF_CircuitStatusMap(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index, ett_h460_3_SEQUENCE_OF_CircuitStatusMap, h460_3_SEQUENCE_OF_CircuitStatusMap_sequence_of); return offset; } static const per_sequence_t h460_3_CircuitStatus_sequence[] = { { &hf_h460_3_circuitStatusMap, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_3_SEQUENCE_OF_CircuitStatusMap }, { NULL, 0, 0, NULL } }; static int dissect_h460_3_CircuitStatus(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_3_CircuitStatus, h460_3_CircuitStatus_sequence); return offset; } /*--- PDUs ---*/ static int dissect_h460_3_CircuitStatus_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_PER, true, pinfo); offset = dissect_h460_3_CircuitStatus(tvb, offset, &asn1_ctx, tree, hf_h460_3_h460_3_CircuitStatus_PDU); offset += 7; offset >>= 3; return offset; } /* --- Module CALL-PRIORITY --- --- --- */ static int dissect_h460_4_NULL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_null(tvb, offset, actx, tree, hf_index); return offset; } static const value_string h460_4_T_priorityValue_vals[] = { { 0, "emergencyAuthorized" }, { 1, "emergencyPublic" }, { 2, "high" }, { 3, "normal" }, { 0, NULL } }; static const per_choice_t h460_4_T_priorityValue_choice[] = { { 0, &hf_h460_4_emergencyAuthorized, ASN1_EXTENSION_ROOT , dissect_h460_4_NULL }, { 1, &hf_h460_4_emergencyPublic, ASN1_EXTENSION_ROOT , dissect_h460_4_NULL }, { 2, &hf_h460_4_high , ASN1_EXTENSION_ROOT , dissect_h460_4_NULL }, { 3, &hf_h460_4_normal , ASN1_EXTENSION_ROOT , dissect_h460_4_NULL }, { 0, NULL, 0, NULL } }; static int dissect_h460_4_T_priorityValue(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, ett_h460_4_T_priorityValue, h460_4_T_priorityValue_choice, NULL); return offset; } static int dissect_h460_4_INTEGER_0_255(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 0U, 255U, NULL, false); return offset; } static const per_sequence_t h460_4_SEQUENCE_OF_ClearToken_sequence_of[1] = { { &hf_h460_4_tokens_item , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_ClearToken }, }; static int dissect_h460_4_SEQUENCE_OF_ClearToken(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index, ett_h460_4_SEQUENCE_OF_ClearToken, h460_4_SEQUENCE_OF_ClearToken_sequence_of); return offset; } static const per_sequence_t h460_4_SEQUENCE_OF_CryptoToken_sequence_of[1] = { { &hf_h460_4_cryptoTokens_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_CryptoToken }, }; static int dissect_h460_4_SEQUENCE_OF_CryptoToken(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index, ett_h460_4_SEQUENCE_OF_CryptoToken, h460_4_SEQUENCE_OF_CryptoToken_sequence_of); return offset; } static const value_string h460_4_T_rejectReason_vals[] = { { 0, "priorityUnavailable" }, { 1, "priorityUnauthorized" }, { 2, "priorityValueUnknown" }, { 0, NULL } }; static const per_choice_t h460_4_T_rejectReason_choice[] = { { 0, &hf_h460_4_priorityUnavailable, ASN1_EXTENSION_ROOT , dissect_h460_4_NULL }, { 1, &hf_h460_4_priorityUnauthorized, ASN1_EXTENSION_ROOT , dissect_h460_4_NULL }, { 2, &hf_h460_4_priorityValueUnknown, ASN1_EXTENSION_ROOT , dissect_h460_4_NULL }, { 0, NULL, 0, NULL } }; static int dissect_h460_4_T_rejectReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, ett_h460_4_T_rejectReason, h460_4_T_rejectReason_choice, NULL); return offset; } static const per_sequence_t h460_4_CallPriorityInfo_sequence[] = { { &hf_h460_4_priorityValue, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_4_T_priorityValue }, { &hf_h460_4_priorityExtension, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_4_INTEGER_0_255 }, { &hf_h460_4_tokens , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_4_SEQUENCE_OF_ClearToken }, { &hf_h460_4_cryptoTokens , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_4_SEQUENCE_OF_CryptoToken }, { &hf_h460_4_rejectReason , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_4_T_rejectReason }, { NULL, 0, 0, NULL } }; static int dissect_h460_4_CallPriorityInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_4_CallPriorityInfo, h460_4_CallPriorityInfo_sequence); return offset; } static int dissect_h460_4_X121CountryCode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index, 3, 3, false, "0123456789", 10, NULL); return offset; } static const per_sequence_t h460_4_T_x121_sequence[] = { { &hf_h460_4_x121CountryCode, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_4_X121CountryCode }, { NULL, 0, 0, NULL } }; static int dissect_h460_4_T_x121(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_4_T_x121, h460_4_T_x121_sequence); return offset; } static int dissect_h460_4_E164CountryCode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index, 3, 3, false, "0123456789", 10, NULL); return offset; } static int dissect_h460_4_T_identificationCode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index, 1, 4, false, "0123456789", 10, NULL); return offset; } static const per_sequence_t h460_4_T_e164_sequence[] = { { &hf_h460_4_e164CountryCode, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_4_E164CountryCode }, { &hf_h460_4_identificationCode, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_4_T_identificationCode }, { NULL, 0, 0, NULL } }; static int dissect_h460_4_T_e164(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_4_T_e164, h460_4_T_e164_sequence); return offset; } static const value_string h460_4_T_numberingPlan_vals[] = { { 0, "x121" }, { 1, "e164" }, { 0, NULL } }; static const per_choice_t h460_4_T_numberingPlan_choice[] = { { 0, &hf_h460_4_x121 , ASN1_EXTENSION_ROOT , dissect_h460_4_T_x121 }, { 1, &hf_h460_4_e164 , ASN1_EXTENSION_ROOT , dissect_h460_4_T_e164 }, { 0, NULL, 0, NULL } }; static int dissect_h460_4_T_numberingPlan(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, ett_h460_4_T_numberingPlan, h460_4_T_numberingPlan_choice, NULL); return offset; } static const per_sequence_t h460_4_CountryInternationalNetworkCallOriginationIdentification_sequence[] = { { &hf_h460_4_numberingPlan, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_4_T_numberingPlan }, { NULL, 0, 0, NULL } }; static int dissect_h460_4_CountryInternationalNetworkCallOriginationIdentification(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_4_CountryInternationalNetworkCallOriginationIdentification, h460_4_CountryInternationalNetworkCallOriginationIdentification_sequence); return offset; } /*--- PDUs ---*/ static int dissect_h460_4_CallPriorityInfo_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_PER, true, pinfo); offset = dissect_h460_4_CallPriorityInfo(tvb, offset, &asn1_ctx, tree, hf_h460_4_h460_4_CallPriorityInfo_PDU); offset += 7; offset >>= 3; return offset; } static int dissect_h460_4_CountryInternationalNetworkCallOriginationIdentification_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_PER, true, pinfo); offset = dissect_h460_4_CountryInternationalNetworkCallOriginationIdentification(tvb, offset, &asn1_ctx, tree, hf_h460_4_h460_4_CountryInternationalNetworkCallOriginationIdentification_PDU); offset += 7; offset >>= 3; return offset; } /* --- Modules QOS-MONITORING-REPORT QOS-MONITORING-EXTENDED-VOIP-REPORT --- --- --- */ static int dissect_h460_9_EstimatedEnd2EndDelay(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 0U, 4294967295U, NULL, false); return offset; } static int dissect_h460_9_CalculatedJitter(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 0U, 4294967295U, NULL, false); return offset; } static int dissect_h460_9_OCTET_STRING(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, NO_BOUND, NO_BOUND, false, NULL); return offset; } static const per_sequence_t h460_9_Extension_sequence[] = { { &hf_h460_9_extensionId , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h225_GenericIdentifier }, { &hf_h460_9_extensionContent, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_OCTET_STRING }, { NULL, 0, 0, NULL } }; static int dissect_h460_9_Extension(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_9_Extension, h460_9_Extension_sequence); return offset; } static int dissect_h460_9_INTEGER_1_255(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 1U, 255U, NULL, false); return offset; } static const per_sequence_t h460_9_T_mediaSenderMeasures_sequence[] = { { &hf_h460_9_worstEstimatedEnd2EndDelay, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_EstimatedEnd2EndDelay }, { &hf_h460_9_meanEstimatedEnd2EndDelay, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_EstimatedEnd2EndDelay }, { NULL, 0, 0, NULL } }; static int dissect_h460_9_T_mediaSenderMeasures(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_9_T_mediaSenderMeasures, h460_9_T_mediaSenderMeasures_sequence); return offset; } static int dissect_h460_9_INTEGER_0_4294967295(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 0U, 4294967295U, NULL, false); return offset; } static int dissect_h460_9_INTEGER_0_65535(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 0U, 65535U, NULL, false); return offset; } static const per_sequence_t h460_9_T_mediaReceiverMeasures_sequence[] = { { &hf_h460_9_cumulativeNumberOfPacketsLost, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_4294967295 }, { &hf_h460_9_packetLostRate, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_65535 }, { &hf_h460_9_worstJitter , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_CalculatedJitter }, { &hf_h460_9_estimatedThroughput, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h225_BandWidth }, { &hf_h460_9_fractionLostRate, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_65535 }, { &hf_h460_9_meanJitter , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_CalculatedJitter }, { NULL, 0, 0, NULL } }; static int dissect_h460_9_T_mediaReceiverMeasures(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_9_T_mediaReceiverMeasures, h460_9_T_mediaReceiverMeasures_sequence); return offset; } static const per_sequence_t h460_9_SEQUENCE_OF_Extension_sequence_of[1] = { { &hf_h460_9_extensions_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h460_9_Extension }, }; static int dissect_h460_9_SEQUENCE_OF_Extension(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index, ett_h460_9_SEQUENCE_OF_Extension, h460_9_SEQUENCE_OF_Extension_sequence_of); return offset; } static const per_sequence_t h460_9_RTCPMeasures_sequence[] = { { &hf_h460_9_rtpAddress , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h225_TransportChannelInfo }, { &hf_h460_9_rtcpAddress , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h225_TransportChannelInfo }, { &hf_h460_9_sessionId , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_9_INTEGER_1_255 }, { &hf_h460_9_nonStandardData, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h225_NonStandardParameter }, { &hf_h460_9_mediaSenderMeasures, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_T_mediaSenderMeasures }, { &hf_h460_9_mediaReceiverMeasures, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_T_mediaReceiverMeasures }, { &hf_h460_9_extensions , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_SEQUENCE_OF_Extension }, { NULL, 0, 0, NULL } }; static int dissect_h460_9_RTCPMeasures(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_9_RTCPMeasures, h460_9_RTCPMeasures_sequence); return offset; } static const per_sequence_t h460_9_SEQUENCE_OF_RTCPMeasures_sequence_of[1] = { { &hf_h460_9_mediaChannelsQoS_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h460_9_RTCPMeasures }, }; static int dissect_h460_9_SEQUENCE_OF_RTCPMeasures(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index, ett_h460_9_SEQUENCE_OF_RTCPMeasures, h460_9_SEQUENCE_OF_RTCPMeasures_sequence_of); return offset; } static const per_sequence_t h460_9_PerCallQoSReport_sequence[] = { { &hf_h460_9_nonStandardData, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h225_NonStandardParameter }, { &hf_h460_9_callReferenceValue, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h225_CallReferenceValue }, { &hf_h460_9_conferenceID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h225_ConferenceIdentifier }, { &hf_h460_9_callIdentifier, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h225_CallIdentifier }, { &hf_h460_9_mediaChannelsQoS, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_SEQUENCE_OF_RTCPMeasures }, { &hf_h460_9_extensions , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_SEQUENCE_OF_Extension }, { NULL, 0, 0, NULL } }; static int dissect_h460_9_PerCallQoSReport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_9_PerCallQoSReport, h460_9_PerCallQoSReport_sequence); return offset; } static const per_sequence_t h460_9_SEQUENCE_OF_PerCallQoSReport_sequence_of[1] = { { &hf_h460_9_perCallInfo_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h460_9_PerCallQoSReport }, }; static int dissect_h460_9_SEQUENCE_OF_PerCallQoSReport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index, ett_h460_9_SEQUENCE_OF_PerCallQoSReport, h460_9_SEQUENCE_OF_PerCallQoSReport_sequence_of); return offset; } static const per_sequence_t h460_9_PeriodicQoSMonReport_sequence[] = { { &hf_h460_9_perCallInfo , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_9_SEQUENCE_OF_PerCallQoSReport }, { &hf_h460_9_extensions , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_SEQUENCE_OF_Extension }, { NULL, 0, 0, NULL } }; static int dissect_h460_9_PeriodicQoSMonReport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_9_PeriodicQoSMonReport, h460_9_PeriodicQoSMonReport_sequence); return offset; } static const per_sequence_t h460_9_FinalQosMonReport_sequence[] = { { &hf_h460_9_mediaInfo , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_9_SEQUENCE_OF_RTCPMeasures }, { &hf_h460_9_nonStandardData, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h225_NonStandardParameter }, { &hf_h460_9_extensions , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_SEQUENCE_OF_Extension }, { NULL, 0, 0, NULL } }; static int dissect_h460_9_FinalQosMonReport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_9_FinalQosMonReport, h460_9_FinalQosMonReport_sequence); return offset; } static const per_sequence_t h460_9_InterGKQosMonReport_sequence[] = { { &hf_h460_9_mediaInfo , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_9_SEQUENCE_OF_RTCPMeasures }, { &hf_h460_9_nonStandardData, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h225_NonStandardParameter }, { &hf_h460_9_extensions , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_SEQUENCE_OF_Extension }, { NULL, 0, 0, NULL } }; static int dissect_h460_9_InterGKQosMonReport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_9_InterGKQosMonReport, h460_9_InterGKQosMonReport_sequence); return offset; } static const value_string h460_9_QosMonitoringReportData_vals[] = { { 0, "periodic" }, { 1, "final" }, { 2, "interGK" }, { 0, NULL } }; static const per_choice_t h460_9_QosMonitoringReportData_choice[] = { { 0, &hf_h460_9_periodic , ASN1_EXTENSION_ROOT , dissect_h460_9_PeriodicQoSMonReport }, { 1, &hf_h460_9_final , ASN1_EXTENSION_ROOT , dissect_h460_9_FinalQosMonReport }, { 2, &hf_h460_9_interGK , ASN1_EXTENSION_ROOT , dissect_h460_9_InterGKQosMonReport }, { 0, NULL, 0, NULL } }; static int dissect_h460_9_QosMonitoringReportData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, ett_h460_9_QosMonitoringReportData, h460_9_QosMonitoringReportData_choice, NULL); return offset; } static int dissect_h460_9_INTEGER_0_255(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 0U, 255U, NULL, false); return offset; } static const per_sequence_t h460_9_BurstMetrics_sequence[] = { { &hf_h460_9_gmin , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_255 }, { &hf_h460_9_burstLossDensity, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_255 }, { &hf_h460_9_gapLossDensity, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_255 }, { &hf_h460_9_burstDuration, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_65535 }, { &hf_h460_9_gapDuration , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_65535 }, { NULL, 0, 0, NULL } }; static int dissect_h460_9_BurstMetrics(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_9_BurstMetrics, h460_9_BurstMetrics_sequence); return offset; } static int dissect_h460_9_INTEGER_M127_10(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, -127, 10U, NULL, false); return offset; } static int dissect_h460_9_INTEGER_M127_0(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, -127, 0U, NULL, false); return offset; } static int dissect_h460_9_INTEGER_0_127(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 0U, 127U, NULL, false); return offset; } static int dissect_h460_9_INTEGER_0_100(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 0U, 100U, NULL, false); return offset; } static int dissect_h460_9_INTEGER_10_50(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 10U, 50U, NULL, false); return offset; } static int dissect_h460_9_NULL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_null(tvb, offset, actx, tree, hf_index); return offset; } static const value_string h460_9_PLCtypes_vals[] = { { 0, "unspecified" }, { 1, "disabled" }, { 2, "enhanced" }, { 3, "standard" }, { 0, NULL } }; static const per_choice_t h460_9_PLCtypes_choice[] = { { 0, &hf_h460_9_unspecified , ASN1_EXTENSION_ROOT , dissect_h460_9_NULL }, { 1, &hf_h460_9_disabled , ASN1_EXTENSION_ROOT , dissect_h460_9_NULL }, { 2, &hf_h460_9_enhanced , ASN1_EXTENSION_ROOT , dissect_h460_9_NULL }, { 3, &hf_h460_9_standard , ASN1_EXTENSION_ROOT , dissect_h460_9_NULL }, { 0, NULL, 0, NULL } }; static int dissect_h460_9_PLCtypes(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, ett_h460_9_PLCtypes, h460_9_PLCtypes_choice, NULL); return offset; } static const value_string h460_9_JitterBufferTypes_vals[] = { { 0, "unknown" }, { 1, "reserved" }, { 2, "nonadaptive" }, { 3, "adaptive" }, { 0, NULL } }; static const per_choice_t h460_9_JitterBufferTypes_choice[] = { { 0, &hf_h460_9_unknown , ASN1_EXTENSION_ROOT , dissect_h460_9_NULL }, { 1, &hf_h460_9_reserved , ASN1_EXTENSION_ROOT , dissect_h460_9_NULL }, { 2, &hf_h460_9_nonadaptive , ASN1_EXTENSION_ROOT , dissect_h460_9_NULL }, { 3, &hf_h460_9_adaptive , ASN1_EXTENSION_ROOT , dissect_h460_9_NULL }, { 0, NULL, 0, NULL } }; static int dissect_h460_9_JitterBufferTypes(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, ett_h460_9_JitterBufferTypes, h460_9_JitterBufferTypes_choice, NULL); return offset; } static int dissect_h460_9_INTEGER_0_15(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 0U, 15U, NULL, false); return offset; } static const per_sequence_t h460_9_JitterBufferParms_sequence[] = { { &hf_h460_9_jitterBufferType, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_JitterBufferTypes }, { &hf_h460_9_jitterBufferAdaptRate, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_15 }, { &hf_h460_9_jitterBufferNominalSize, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_65535 }, { &hf_h460_9_jitterBufferMaxSize, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_65535 }, { &hf_h460_9_jitterBufferAbsoluteMax, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_65535 }, { NULL, 0, 0, NULL } }; static int dissect_h460_9_JitterBufferParms(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_9_JitterBufferParms, h460_9_JitterBufferParms_sequence); return offset; } static const per_sequence_t h460_9_ExtendedRTPMetrics_sequence[] = { { &hf_h460_9_networkPacketLossRate, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_255 }, { &hf_h460_9_jitterBufferDiscardRate, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_255 }, { &hf_h460_9_burstMetrics , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_BurstMetrics }, { &hf_h460_9_rtcpRoundTripDelay, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_65535 }, { &hf_h460_9_endSystemDelay, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_65535 }, { &hf_h460_9_signalLevel , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_M127_10 }, { &hf_h460_9_noiseLevel , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_M127_0 }, { &hf_h460_9_residualEchoReturnLoss, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_127 }, { &hf_h460_9_rFactor , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_100 }, { &hf_h460_9_extRFactor , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_100 }, { &hf_h460_9_estimatedMOSLQ, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_10_50 }, { &hf_h460_9_estimatedMOSCQ, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_10_50 }, { &hf_h460_9_plcType , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_PLCtypes }, { &hf_h460_9_jitterBufferParms, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_JitterBufferParms }, { NULL, 0, 0, NULL } }; static int dissect_h460_9_ExtendedRTPMetrics(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_9_ExtendedRTPMetrics, h460_9_ExtendedRTPMetrics_sequence); return offset; } /*--- PDUs ---*/ static int dissect_h460_9_QosMonitoringReportData_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_PER, true, pinfo); offset = dissect_h460_9_QosMonitoringReportData(tvb, offset, &asn1_ctx, tree, hf_h460_9_h460_9_QosMonitoringReportData_PDU); offset += 7; offset >>= 3; return offset; } static int dissect_h460_9_ExtendedRTPMetrics_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_PER, true, pinfo); offset = dissect_h460_9_ExtendedRTPMetrics(tvb, offset, &asn1_ctx, tree, hf_h460_9_h460_9_ExtendedRTPMetrics_PDU); offset += 7; offset >>= 3; return offset; } /* --- Module CALL-PARTY-CATEGORY --- --- --- */ static int dissect_h460_10_CallPartyCategory(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 0U, 255U, NULL, false); return offset; } static int dissect_h460_10_OriginatingLineInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 0U, 255U, NULL, false); return offset; } static const per_sequence_t h460_10_CallPartyCategoryInfo_sequence[] = { { &hf_h460_10_callPartyCategory, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_10_CallPartyCategory }, { &hf_h460_10_originatingLineInfo, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_10_OriginatingLineInfo }, { NULL, 0, 0, NULL } }; static int dissect_h460_10_CallPartyCategoryInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_10_CallPartyCategoryInfo, h460_10_CallPartyCategoryInfo_sequence); return offset; } /*--- PDUs ---*/ static int dissect_h460_10_CallPartyCategoryInfo_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_PER, true, pinfo); offset = dissect_h460_10_CallPartyCategoryInfo(tvb, offset, &asn1_ctx, tree, hf_h460_10_h460_10_CallPartyCategoryInfo_PDU); offset += 7; offset >>= 3; return offset; } /* --- Module MLPP --- --- --- */ static const value_string h460_14_MlppPrecedence_vals[] = { { 0, "flashOveride" }, { 1, "flash" }, { 2, "immediate" }, { 3, "priority" }, { 4, "routine" }, { 0, NULL } }; static int dissect_h460_14_MlppPrecedence(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, 5, NULL, true, 0, NULL); return offset; } static const value_string h460_14_MlppReason_vals[] = { { 8, "preemptionNoReservation" }, { 9, "preemptionReservation" }, { 46, "callBlocked" }, { 0, NULL } }; static uint32_t h460_14_MlppReason_value_map[3+0] = {8, 9, 46}; static int dissect_h460_14_MlppReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, 3, NULL, true, 0, h460_14_MlppReason_value_map); return offset; } static int dissect_h460_14_NULL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_null(tvb, offset, actx, tree, hf_index); return offset; } static const value_string h460_14_MlppNotification_vals[] = { { 0, "preemptionPending" }, { 1, "preemptionInProgress" }, { 2, "preemptionEnd" }, { 3, "preemptionComplete" }, { 0, NULL } }; static const per_choice_t h460_14_MlppNotification_choice[] = { { 0, &hf_h460_14_preemptionPending, ASN1_EXTENSION_ROOT , dissect_h460_14_NULL }, { 1, &hf_h460_14_preemptionInProgress, ASN1_EXTENSION_ROOT , dissect_h460_14_NULL }, { 2, &hf_h460_14_preemptionEnd, ASN1_EXTENSION_ROOT , dissect_h460_14_NULL }, { 3, &hf_h460_14_preemptionComplete, ASN1_EXTENSION_ROOT , dissect_h460_14_NULL }, { 0, NULL, 0, NULL } }; static int dissect_h460_14_MlppNotification(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, ett_h460_14_MlppNotification, h460_14_MlppNotification_choice, NULL); return offset; } static int dissect_h460_14_INTEGER_0_255(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 0U, 255U, NULL, false); return offset; } static const per_sequence_t h460_14_AlternateParty_sequence[] = { { &hf_h460_14_altID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h225_AliasAddress }, { &hf_h460_14_altTimer , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_14_INTEGER_0_255 }, { NULL, 0, 0, NULL } }; static int dissect_h460_14_AlternateParty(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_14_AlternateParty, h460_14_AlternateParty_sequence); return offset; } static const per_sequence_t h460_14_ReleaseCall_sequence[] = { { &hf_h460_14_preemptCallID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h225_CallIdentifier }, { &hf_h460_14_releaseReason, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_14_MlppReason }, { &hf_h460_14_releaseDelay, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_14_INTEGER_0_255 }, { NULL, 0, 0, NULL } }; static int dissect_h460_14_ReleaseCall(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_14_ReleaseCall, h460_14_ReleaseCall_sequence); return offset; } static const per_sequence_t h460_14_MLPPInfo_sequence[] = { { &hf_h460_14_precedence , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_14_MlppPrecedence }, { &hf_h460_14_mlppReason , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_14_MlppReason }, { &hf_h460_14_mlppNotification, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_14_MlppNotification }, { &hf_h460_14_alternateParty, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_14_AlternateParty }, { &hf_h460_14_releaseCall , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_14_ReleaseCall }, { NULL, 0, 0, NULL } }; static int dissect_h460_14_MLPPInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_14_MLPPInfo, h460_14_MLPPInfo_sequence); return offset; } /*--- PDUs ---*/ static int dissect_h460_14_MLPPInfo_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_PER, true, pinfo); offset = dissect_h460_14_MLPPInfo(tvb, offset, &asn1_ctx, tree, hf_h460_14_h460_14_MLPPInfo_PDU); offset += 7; offset >>= 3; return offset; } /* --- Module SIGNALLING-CHANNEL-SUSPEND-REDIRECT --- --- --- */ static const per_sequence_t h460_15_SEQUENCE_OF_TransportAddress_sequence_of[1] = { { &hf_h460_15_channelResumeAddress_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h225_TransportAddress }, }; static int dissect_h460_15_SEQUENCE_OF_TransportAddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index, ett_h460_15_SEQUENCE_OF_TransportAddress, h460_15_SEQUENCE_OF_TransportAddress_sequence_of); return offset; } static int dissect_h460_15_BOOLEAN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_boolean(tvb, offset, actx, tree, hf_index, NULL); return offset; } static int dissect_h460_15_NULL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_null(tvb, offset, actx, tree, hf_index); return offset; } static const per_sequence_t h460_15_ChannelSuspendRequest_sequence[] = { { &hf_h460_15_channelResumeAddress, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_15_SEQUENCE_OF_TransportAddress }, { &hf_h460_15_immediateResume, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_15_BOOLEAN }, { &hf_h460_15_resetH245 , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_15_NULL }, { NULL, 0, 0, NULL } }; static int dissect_h460_15_ChannelSuspendRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_15_ChannelSuspendRequest, h460_15_ChannelSuspendRequest_sequence); return offset; } static const per_sequence_t h460_15_ChannelSuspendResponse_sequence[] = { { &hf_h460_15_okToSuspend , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_15_BOOLEAN }, { &hf_h460_15_channelResumeAddress, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_15_SEQUENCE_OF_TransportAddress }, { NULL, 0, 0, NULL } }; static int dissect_h460_15_ChannelSuspendResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_15_ChannelSuspendResponse, h460_15_ChannelSuspendResponse_sequence); return offset; } static const per_sequence_t h460_15_ChannelSuspendConfirm_sequence[] = { { NULL, ASN1_EXTENSION_ROOT, 0, NULL } }; static int dissect_h460_15_ChannelSuspendConfirm(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_15_ChannelSuspendConfirm, h460_15_ChannelSuspendConfirm_sequence); return offset; } static const per_sequence_t h460_15_ChannelSuspendCancel_sequence[] = { { NULL, ASN1_EXTENSION_ROOT, 0, NULL } }; static int dissect_h460_15_ChannelSuspendCancel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_15_ChannelSuspendCancel, h460_15_ChannelSuspendCancel_sequence); return offset; } static int dissect_h460_15_INTEGER_0_4294967295(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 0U, 4294967295U, NULL, false); return offset; } static const per_sequence_t h460_15_ChannelResumeRequest_sequence[] = { { &hf_h460_15_randomNumber, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_15_INTEGER_0_4294967295 }, { &hf_h460_15_resetH245 , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_15_NULL }, { NULL, 0, 0, NULL } }; static int dissect_h460_15_ChannelResumeRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_15_ChannelResumeRequest, h460_15_ChannelResumeRequest_sequence); return offset; } static const per_sequence_t h460_15_ChannelResumeResponse_sequence[] = { { NULL, ASN1_EXTENSION_ROOT, 0, NULL } }; static int dissect_h460_15_ChannelResumeResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_15_ChannelResumeResponse, h460_15_ChannelResumeResponse_sequence); return offset; } static const value_string h460_15_T_signallingChannelData_vals[] = { { 0, "channelSuspendRequest" }, { 1, "channelSuspendResponse" }, { 2, "channelSuspendConfirm" }, { 3, "channelSuspendCancel" }, { 4, "channelResumeRequest" }, { 5, "channelResumeResponse" }, { 0, NULL } }; static const per_choice_t h460_15_T_signallingChannelData_choice[] = { { 0, &hf_h460_15_channelSuspendRequest, ASN1_EXTENSION_ROOT , dissect_h460_15_ChannelSuspendRequest }, { 1, &hf_h460_15_channelSuspendResponse, ASN1_EXTENSION_ROOT , dissect_h460_15_ChannelSuspendResponse }, { 2, &hf_h460_15_channelSuspendConfirm, ASN1_EXTENSION_ROOT , dissect_h460_15_ChannelSuspendConfirm }, { 3, &hf_h460_15_channelSuspendCancel, ASN1_EXTENSION_ROOT , dissect_h460_15_ChannelSuspendCancel }, { 4, &hf_h460_15_channelResumeRequest, ASN1_EXTENSION_ROOT , dissect_h460_15_ChannelResumeRequest }, { 5, &hf_h460_15_channelResumeResponse, ASN1_EXTENSION_ROOT , dissect_h460_15_ChannelResumeResponse }, { 0, NULL, 0, NULL } }; static int dissect_h460_15_T_signallingChannelData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, ett_h460_15_T_signallingChannelData, h460_15_T_signallingChannelData_choice, NULL); return offset; } static const per_sequence_t h460_15_SignallingChannelData_sequence[] = { { &hf_h460_15_signallingChannelData, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_15_T_signallingChannelData }, { NULL, 0, 0, NULL } }; static int dissect_h460_15_SignallingChannelData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_15_SignallingChannelData, h460_15_SignallingChannelData_sequence); return offset; } /*--- PDUs ---*/ static int dissect_h460_15_SignallingChannelData_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_PER, true, pinfo); offset = dissect_h460_15_SignallingChannelData(tvb, offset, &asn1_ctx, tree, hf_h460_15_h460_15_SignallingChannelData_PDU); offset += 7; offset >>= 3; return offset; } /* --- Module SIGNALLING-TRAVERSAL --- --- --- */ static const per_sequence_t h460_18_IncomingCallIndication_sequence[] = { { &hf_h460_18_callSignallingAddress, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h225_TransportAddress }, { &hf_h460_18_callID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h225_CallIdentifier }, { NULL, 0, 0, NULL } }; static int dissect_h460_18_IncomingCallIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_18_IncomingCallIndication, h460_18_IncomingCallIndication_sequence); return offset; } static const per_sequence_t h460_18_LRQKeepAliveData_sequence[] = { { &hf_h460_18_lrqKeepAliveInterval, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h225_TimeToLive }, { NULL, 0, 0, NULL } }; static int dissect_h460_18_LRQKeepAliveData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_18_LRQKeepAliveData, h460_18_LRQKeepAliveData_sequence); return offset; } /*--- PDUs ---*/ static int dissect_h460_18_IncomingCallIndication_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_PER, true, pinfo); offset = dissect_h460_18_IncomingCallIndication(tvb, offset, &asn1_ctx, tree, hf_h460_18_h460_18_IncomingCallIndication_PDU); offset += 7; offset >>= 3; return offset; } static int dissect_h460_18_LRQKeepAliveData_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_PER, true, pinfo); offset = dissect_h460_18_LRQKeepAliveData(tvb, offset, &asn1_ctx, tree, hf_h460_18_h460_18_LRQKeepAliveData_PDU); offset += 7; offset >>= 3; return offset; } /* --- Module MEDIA-TRAVERSAL --- --- --- */ static int dissect_h460_19_INTEGER_0_4294967295(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 0U, 4294967295U, NULL, false); return offset; } static int dissect_h460_19_INTEGER_0_127(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 0U, 127U, NULL, false); return offset; } static const per_sequence_t h460_19_TraversalParameters_sequence[] = { { &hf_h460_19_multiplexedMediaChannel, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h245_TransportAddress }, { &hf_h460_19_multiplexedMediaControlChannel, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h245_TransportAddress }, { &hf_h460_19_multiplexID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_19_INTEGER_0_4294967295 }, { &hf_h460_19_keepAliveChannel, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h245_TransportAddress }, { &hf_h460_19_keepAlivePayloadType, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_19_INTEGER_0_127 }, { &hf_h460_19_keepAliveInterval, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h225_TimeToLive }, { NULL, 0, 0, NULL } }; static int dissect_h460_19_TraversalParameters(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_19_TraversalParameters, h460_19_TraversalParameters_sequence); return offset; } /*--- PDUs ---*/ static int dissect_h460_19_TraversalParameters_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_PER, true, pinfo); offset = dissect_h460_19_TraversalParameters(tvb, offset, &asn1_ctx, tree, hf_h460_19_h460_19_TraversalParameters_PDU); offset += 7; offset >>= 3; return offset; } /* --- Module MESSAGE-BROADCAST --- --- --- */ static const per_sequence_t h460_21_SEQUENCE_SIZE_1_256_OF_Capability_sequence_of[1] = { { &hf_h460_21_capabilities_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h245_Capability }, }; static int dissect_h460_21_SEQUENCE_SIZE_1_256_OF_Capability(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index, ett_h460_21_SEQUENCE_SIZE_1_256_OF_Capability, h460_21_SEQUENCE_SIZE_1_256_OF_Capability_sequence_of, 1, 256, false); return offset; } static int dissect_h460_21_INTEGER_1_65535(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 1U, 65535U, NULL, false); return offset; } static const per_sequence_t h460_21_ReceiveCapabilities_sequence[] = { { &hf_h460_21_capabilities, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_21_SEQUENCE_SIZE_1_256_OF_Capability }, { &hf_h460_21_maxGroups , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_21_INTEGER_1_65535 }, { NULL, 0, 0, NULL } }; static int dissect_h460_21_ReceiveCapabilities(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_21_ReceiveCapabilities, h460_21_ReceiveCapabilities_sequence); return offset; } static int dissect_h460_21_GloballyUniqueID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, 16, 16, false, NULL); return offset; } static const per_sequence_t h460_21_TransmitCapabilities_sequence[] = { { &hf_h460_21_groupIdentifer, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_21_GloballyUniqueID }, { &hf_h460_21_capability , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h245_Capability }, { &hf_h460_21_sourceAddress, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h245_UnicastAddress }, { NULL, 0, 0, NULL } }; static int dissect_h460_21_TransmitCapabilities(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_21_TransmitCapabilities, h460_21_TransmitCapabilities_sequence); return offset; } static const per_sequence_t h460_21_SEQUENCE_SIZE_1_256_OF_TransmitCapabilities_sequence_of[1] = { { &hf_h460_21_transmitCapabilities_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h460_21_TransmitCapabilities }, }; static int dissect_h460_21_SEQUENCE_SIZE_1_256_OF_TransmitCapabilities(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index, ett_h460_21_SEQUENCE_SIZE_1_256_OF_TransmitCapabilities, h460_21_SEQUENCE_SIZE_1_256_OF_TransmitCapabilities_sequence_of, 1, 256, false); return offset; } static const per_sequence_t h460_21_CapabilityAdvertisement_sequence[] = { { &hf_h460_21_receiveCapabilities, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_21_ReceiveCapabilities }, { &hf_h460_21_transmitCapabilities, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_21_SEQUENCE_SIZE_1_256_OF_TransmitCapabilities }, { NULL, 0, 0, NULL } }; static int dissect_h460_21_CapabilityAdvertisement(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, ett_h460_21_CapabilityAdvertisement, h460_21_CapabilityAdvertisement_sequence); return offset; } /*--- PDUs ---*/ static int dissect_h460_21_CapabilityAdvertisement_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_PER, true, pinfo); offset = dissect_h460_21_CapabilityAdvertisement(tvb, offset, &asn1_ctx, tree, hf_h460_21_h460_21_CapabilityAdvertisement_PDU); offset += 7; offset >>= 3; return offset; } static int dissect_ies(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) { int offset = 0; if (q931_ie_handle) { call_dissector(q931_ie_handle, tvb, pinfo, tree); offset += tvb_reported_length_remaining(tvb, offset); } return offset; } static int dissect_ras(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) { int offset = 0; if (h225_ras_handle) { call_dissector(h225_ras_handle, tvb, pinfo, tree); offset += tvb_reported_length_remaining(tvb, offset); } return offset; } typedef struct _h460_feature_t { uint32_t opt; const char *id; const char *name; dissector_t content_pdu; /*---*/ const char *key_gd; const char *key_fd; const char *key_gm; const char *key_gi; dissector_handle_t content_hnd; } h460_feature_t; /* Fill in the items after content_pdu */ #define FFILL NULL, NULL, NULL, NULL, NULL /* options */ #define GD 0x01 /* present in H.225 GenericData */ #define FD 0x02 /* present in H.225 FeatureDescriptor */ #define GM 0x04 /* present in H.245 GenericMessage */ #define GI 0x08 /* present in H.245 GenericInformation */ static h460_feature_t h460_feature_tab[] = { /* H.460.3 */ { GD|FD, "2", "Number Portability", NULL, FFILL }, { GD|FD, "2/1", "NumberPortabilityData", dissect_h460_2_NumberPortabilityInfo_PDU, FFILL }, /* H.460.3 */ { GD|FD, "3", "Circuit Status", NULL, FFILL }, { GD|FD, "3/1", "Circuit Status Map", dissect_h460_3_CircuitStatus_PDU, FFILL }, /* H.460.4 */ { GD|FD, "4", "CallPriorityDesignation", NULL, FFILL }, { GD|FD, "4/1", "CallPriorityRequest", dissect_h460_4_CallPriorityInfo_PDU, FFILL }, { GD|FD, "4/2", "CallPriorityConfirm", dissect_h460_4_CallPriorityInfo_PDU, FFILL }, { GD|FD, "4/3", "Country/InternationalNetworkCallOriginationRequest", dissect_h460_4_CountryInternationalNetworkCallOriginationIdentification_PDU, FFILL }, { GD|FD, "4/4", "Country/InternationalNetworkCallOriginationConfirm", dissect_h460_4_CountryInternationalNetworkCallOriginationIdentification_PDU, FFILL }, /* H.460.5 */ { GD|FD, "5", "DuplicateIEs", NULL, FFILL }, { GD|FD, "5/1", "IEsString", dissect_ies, FFILL }, /* H.460.6 */ { GD|FD, "6", "Extended Fast Connect", NULL, FFILL }, { GD|FD, "6/1", "EFC Proposal", NULL, FFILL }, { GD|FD, "6/2", "EFC Close All Media Channels", NULL, FFILL }, { GD|FD, "6/3", "EFC Request New Proposals", NULL, FFILL }, { GD|FD, "6/4", "EFC Require Symmetric Operation", NULL, FFILL }, /* H.460.7 */ { GD|FD, "7", "Digit Maps", NULL, FFILL }, { FD, "7/1", "Digit Maps Length", NULL, FFILL }, { FD, "7/2", "Digit Map Length for Overlapped Sending", NULL, FFILL }, { FD, "7/3", "HTTP Digit Maps Download Capability", NULL, FFILL }, { GD , "7/1", "Start Timer", NULL, FFILL }, { GD , "7/2", "Short Timer", NULL, FFILL }, { GD , "7/3", "Long Timer", NULL, FFILL }, { GD , "7/4", "Digit Map String", NULL, FFILL }, { GD , "7/5", "ToN Associated Digit Map", NULL, FFILL }, { GD , "7/5/1", "Type of Number", NULL, FFILL }, { GD , "7/5/2", "Digit Map Strings for ToN", NULL, FFILL }, { GD , "7/6", "Digit Map URL", NULL, FFILL }, /* H.460.8 */ { GD|FD, "8", "Querying for Alternate Routes", NULL, FFILL }, { GD|FD, "8/1", "Query Count", NULL, FFILL }, { GD|FD, "8/2", "Call Termination Cause", NULL, FFILL }, /* H.460.9 */ { GD|FD, "9", "QoS-monitoring Reporting", NULL, FFILL }, { GD|FD, "9/0", "qosMonitoringFinalOnly", NULL, FFILL }, { GD|FD, "9/1", "qosMonitoringReportData", dissect_h460_9_QosMonitoringReportData_PDU, FFILL }, { GD|FD, "9/2", "qosMonitoringExtendedRTPMetrics", dissect_h460_9_ExtendedRTPMetrics_PDU, FFILL }, /* H.460.10 */ { GD|FD, "10", "Call Party Category", NULL, FFILL }, { GD|FD, "10/1", "Call party category info", dissect_h460_10_CallPartyCategoryInfo_PDU, FFILL }, /* H.460.11 */ { GD|FD, "11", "Delayed Call Establishment", NULL, FFILL }, { GD|FD, "11/1", "Delay Point Indicator", NULL, FFILL }, { GD|FD, "11/2", "Implicit DCE Release", NULL, FFILL }, { GD|FD, "11/3", "Delay Point Reached", NULL, FFILL }, { GD|FD, "11/4", "DCE Release", NULL, FFILL }, /* H.460.12 */ { GD|FD, "12", "Glare Control Indicator", NULL, FFILL }, { GD|FD, "12/1", "Glare Control Indicator Parameter", NULL, FFILL }, /* H.460.13 */ { GD|FD, "13", "Called User Release Control", NULL, FFILL }, { GD|FD, "13/1", "Called User Release Control", NULL, FFILL }, /* H.460.14 */ { GD|FD, "14", "Multi-Level Precedence and Preemption", NULL, FFILL }, { GD|FD, "14/1", "MLPP Information", dissect_h460_14_MLPPInfo_PDU, FFILL }, /* H.460.15 */ { GD|FD, "15", "Call signalling transport channel suspension and redirection", NULL, FFILL }, { GD|FD, "15/1", "Signalling channel suspend and redirect", dissect_h460_15_SignallingChannelData_PDU, FFILL }, /* H.460.16 */ { GD|FD, "16", "Multiple-message Release Sequence", NULL, FFILL }, { GD|FD, "16/1", "MMRS use required", NULL, FFILL }, { GD|FD, "16/2", "MMRS procedure", NULL, FFILL }, { GD|FD, "16/3", "MMRS additional IEs", dissect_ies, FFILL }, /* H.460.17 */ { GD|FD, "17", "RAS over H.225.0", NULL, FFILL }, { GD|FD, "17/1", "RAS message", dissect_ras, FFILL }, /* H.460.18 */ { GD|FD , "18", "Signalling Traversal", NULL, FFILL }, { GD|FD , "18/1", "IncomingCallIndication", dissect_h460_18_IncomingCallIndication_PDU, FFILL }, { GD|FD , "18/2", "LRQKeepAliveData", dissect_h460_18_LRQKeepAliveData_PDU, FFILL }, { GM, "0.0.8.460.18.0.1", "Signalling Traversal", NULL, FFILL }, { GM, "0.0.8.460.18.0.1-1", "connectionCorrelation", NULL, FFILL }, { GM, "0.0.8.460.18.0.1-1/1", "callIdentifier", NULL, FFILL }, { GM, "0.0.8.460.18.0.1-1/2", "answerCall", NULL, FFILL }, /* H.460.19 */ { GD|FD , "19", "mediaNATFWTraversal", NULL, FFILL }, { GD|FD , "19/1", "supportTransmitMultiplexedMedia", NULL, FFILL }, { GD|FD , "19/2", "mediaTraversalServer", NULL, FFILL }, { GI, "0.0.8.460.19.0.1", "mediaNATFWTraversal", NULL, FFILL }, { GI, "0.0.8.460.19.0.1/1", "Traversal Parameters", dissect_h460_19_TraversalParameters_PDU, FFILL }, /* H.460.20 */ { GD|FD, "20", "LocationSourceAddress", NULL, FFILL }, { GD|FD, "20/1", "LocationSourceAddress", dissect_h225_ExtendedAliasAddress_PDU, FFILL }, /* H.460.21 */ { GD|FD, "21", "Message Broadcast", NULL, FFILL }, { GD|FD, "21/1", "MessageBroadcastParameter", dissect_h460_21_CapabilityAdvertisement_PDU, FFILL }, /* H.460.22 */ { GD|FD, "22", "securityProtocolNegotiation", NULL, FFILL }, { GD|FD, "22/1", "tlsSecurityProtocol", NULL, FFILL }, { GD|FD, "22/1/1", "priority", NULL, FFILL }, { GD|FD, "22/1/2", "connectionAddress", NULL, FFILL }, { GD|FD, "22/2", "ipsecSecurityProtocol", NULL, FFILL }, { GD|FD, "22/2/1", "priority", NULL, FFILL }, { 0, NULL, NULL, NULL, FFILL }, }; static h460_feature_t *find_ftr(const char *key) { h460_feature_t *ftr = NULL; h460_feature_t *f; for (f=h460_feature_tab; f->id; f++) { if (f->key_gd && !strcmp(key, f->key_gd)) { ftr = f; break; } if (f->key_fd && !strcmp(key, f->key_fd)) { ftr = f; break; } if (f->key_gm && !strcmp(key, f->key_gm)) { ftr = f; break; } if (f->key_gi && !strcmp(key, f->key_gi)) { ftr = f; break; } } return ftr; } /*--- dissect_h460_name -------------------------------------------*/ static int dissect_h460_name(tvbuff_t *tvb _U_, packet_info *pinfo, proto_tree *tree, void *data) { int offset = 0; asn1_ctx_t *actx; h460_feature_t *ftr; /* Reject the packet if data is NULL */ if (data == NULL) return 0; actx = get_asn1_ctx(data); DISSECTOR_ASSERT(actx); if (tree) { ftr = find_ftr(pinfo->match_string); if (ftr) { proto_item_append_text(actx->created_item, " - %s", ftr->name); proto_item_append_text(proto_item_get_parent(proto_tree_get_parent(tree)), ": %s", ftr->name); } else { proto_item_append_text(actx->created_item, " - unknown(%s)", pinfo->match_string); } } return offset; } /*--- proto_register_h460 ----------------------------------------------*/ void proto_register_h460(void) { h460_feature_t *ftr; /* List of fields */ static hf_register_info hf[] = { /* --- Module NUMBER-PORTABILITY --- --- --- */ { &hf_h460_2_h460_2_NumberPortabilityInfo_PDU, { "NumberPortabilityInfo", "h460.2.NumberPortabilityInfo", FT_UINT32, BASE_DEC, VALS(h460_2_NumberPortabilityInfo_vals), 0, NULL, HFILL }}, { &hf_h460_2_numberPortabilityRejectReason, { "numberPortabilityRejectReason", "h460.2.numberPortabilityRejectReason", FT_UINT32, BASE_DEC, VALS(h460_2_NumberPortabilityRejectReason_vals), 0, NULL, HFILL }}, { &hf_h460_2_nUMBERPORTABILITYDATA, { "nUMBERPORTABILITYDATA", "h460.2.nUMBERPORTABILITYDATA_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_2_addressTranslated, { "addressTranslated", "h460.2.addressTranslated_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_2_portedAddress, { "portedAddress", "h460.2.portedAddress_element", FT_NONE, BASE_NONE, NULL, 0, "PortabilityAddress", HFILL }}, { &hf_h460_2_routingAddress, { "routingAddress", "h460.2.routingAddress_element", FT_NONE, BASE_NONE, NULL, 0, "PortabilityAddress", HFILL }}, { &hf_h460_2_regionalParams, { "regionalParams", "h460.2.regionalParams_element", FT_NONE, BASE_NONE, NULL, 0, "RegionalParameters", HFILL }}, { &hf_h460_2_unspecified, { "unspecified", "h460.2.unspecified_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_2_qorPortedNumber, { "qorPortedNumber", "h460.2.qorPortedNumber_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_2_aliasAddress, { "aliasAddress", "h460.2.aliasAddress", FT_UINT32, BASE_DEC, VALS(AliasAddress_vals), 0, NULL, HFILL }}, { &hf_h460_2_typeOfAddress, { "typeOfAddress", "h460.2.typeOfAddress", FT_UINT32, BASE_DEC, VALS(h460_2_NumberPortabilityTypeOfNumber_vals), 0, "NumberPortabilityTypeOfNumber", HFILL }}, { &hf_h460_2_publicTypeOfNumber, { "publicTypeOfNumber", "h460.2.publicTypeOfNumber", FT_UINT32, BASE_DEC, VALS(h225_PublicTypeOfNumber_vals), 0, NULL, HFILL }}, { &hf_h460_2_privateTypeOfNumber, { "privateTypeOfNumber", "h460.2.privateTypeOfNumber", FT_UINT32, BASE_DEC, VALS(h225_PrivateTypeOfNumber_vals), 0, NULL, HFILL }}, { &hf_h460_2_portabilityTypeOfNumber, { "portabilityTypeOfNumber", "h460.2.portabilityTypeOfNumber", FT_UINT32, BASE_DEC, VALS(h460_2_PortabilityTypeOfNumber_vals), 0, NULL, HFILL }}, { &hf_h460_2_portedNumber, { "portedNumber", "h460.2.portedNumber_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_2_routingNumber, { "routingNumber", "h460.2.routingNumber_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_2_concatenatedNumber, { "concatenatedNumber", "h460.2.concatenatedNumber_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_2_t35CountryCode, { "t35CountryCode", "h460.2.t35CountryCode", FT_UINT32, BASE_DEC, NULL, 0, "INTEGER_0_255", HFILL }}, { &hf_h460_2_t35Extension, { "t35Extension", "h460.2.t35Extension", FT_UINT32, BASE_DEC, NULL, 0, "INTEGER_0_255", HFILL }}, { &hf_h460_2_variantIdentifier, { "variantIdentifier", "h460.2.variantIdentifier", FT_UINT32, BASE_DEC, NULL, 0, "INTEGER_1_255", HFILL }}, { &hf_h460_2_regionalData, { "regionalData", "h460.2.regionalData", FT_BYTES, BASE_NONE, NULL, 0, "OCTET_STRING", HFILL }}, /* --- Module CIRCUIT-STATUS-MAP --- --- --- */ { &hf_h460_3_h460_3_CircuitStatus_PDU, { "CircuitStatus", "h460.3.CircuitStatus_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_3_circuitStatusMap, { "circuitStatusMap", "h460.3.circuitStatusMap", FT_UINT32, BASE_DEC, NULL, 0, "SEQUENCE_OF_CircuitStatusMap", HFILL }}, { &hf_h460_3_circuitStatusMap_item, { "CircuitStatusMap", "h460.3.CircuitStatusMap_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_3_statusType, { "statusType", "h460.3.statusType", FT_UINT32, BASE_DEC, VALS(h460_3_CircuitStatusType_vals), 0, "CircuitStatusType", HFILL }}, { &hf_h460_3_baseCircuitID, { "baseCircuitID", "h460.3.baseCircuitID_element", FT_NONE, BASE_NONE, NULL, 0, "CircuitIdentifier", HFILL }}, { &hf_h460_3_range, { "range", "h460.3.range", FT_UINT32, BASE_DEC, NULL, 0, "INTEGER_0_4095", HFILL }}, { &hf_h460_3_status, { "status", "h460.3.status", FT_BYTES, BASE_NONE, NULL, 0, "OCTET_STRING", HFILL }}, { &hf_h460_3_serviceStatus, { "serviceStatus", "h460.3.serviceStatus_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_3_busyStatus, { "busyStatus", "h460.3.busyStatus_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, /* --- Module CALL-PRIORITY --- --- --- */ { &hf_h460_4_h460_4_CallPriorityInfo_PDU, { "CallPriorityInfo", "h460.4.CallPriorityInfo_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_4_h460_4_CountryInternationalNetworkCallOriginationIdentification_PDU, { "CountryInternationalNetworkCallOriginationIdentification", "h460.4.CountryInternationalNetworkCallOriginationIdentification_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_4_priorityValue, { "priorityValue", "h460.4.priorityValue", FT_UINT32, BASE_DEC, VALS(h460_4_T_priorityValue_vals), 0, NULL, HFILL }}, { &hf_h460_4_emergencyAuthorized, { "emergencyAuthorized", "h460.4.emergencyAuthorized_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_4_emergencyPublic, { "emergencyPublic", "h460.4.emergencyPublic_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_4_high, { "high", "h460.4.high_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_4_normal, { "normal", "h460.4.normal_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_4_priorityExtension, { "priorityExtension", "h460.4.priorityExtension", FT_UINT32, BASE_DEC, NULL, 0, "INTEGER_0_255", HFILL }}, { &hf_h460_4_tokens, { "tokens", "h460.4.tokens", FT_UINT32, BASE_DEC, NULL, 0, "SEQUENCE_OF_ClearToken", HFILL }}, { &hf_h460_4_tokens_item, { "ClearToken", "h460.4.ClearToken_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_4_cryptoTokens, { "cryptoTokens", "h460.4.cryptoTokens", FT_UINT32, BASE_DEC, NULL, 0, "SEQUENCE_OF_CryptoToken", HFILL }}, { &hf_h460_4_cryptoTokens_item, { "CryptoToken", "h460.4.CryptoToken", FT_UINT32, BASE_DEC, VALS(h235_CryptoToken_vals), 0, NULL, HFILL }}, { &hf_h460_4_rejectReason, { "rejectReason", "h460.4.rejectReason", FT_UINT32, BASE_DEC, VALS(h460_4_T_rejectReason_vals), 0, NULL, HFILL }}, { &hf_h460_4_priorityUnavailable, { "priorityUnavailable", "h460.4.priorityUnavailable_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_4_priorityUnauthorized, { "priorityUnauthorized", "h460.4.priorityUnauthorized_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_4_priorityValueUnknown, { "priorityValueUnknown", "h460.4.priorityValueUnknown_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_4_numberingPlan, { "numberingPlan", "h460.4.numberingPlan", FT_UINT32, BASE_DEC, VALS(h460_4_T_numberingPlan_vals), 0, NULL, HFILL }}, { &hf_h460_4_x121, { "x121", "h460.4.x121_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_4_x121CountryCode, { "countryCode", "h460.4.countryCode", FT_STRING, BASE_NONE, NULL, 0, "X121CountryCode", HFILL }}, { &hf_h460_4_e164, { "e164", "h460.4.e164_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_4_e164CountryCode, { "countryCode", "h460.4.countryCode", FT_STRING, BASE_NONE, NULL, 0, "E164CountryCode", HFILL }}, { &hf_h460_4_identificationCode, { "identificationCode", "h460.4.identificationCode", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, /* --- Modules QOS-MONITORING-REPORT QOS-MONITORING-EXTENDED-VOIP-REPORT --- --- --- */ { &hf_h460_9_h460_9_QosMonitoringReportData_PDU, { "QosMonitoringReportData", "h460.9.QosMonitoringReportData", FT_UINT32, BASE_DEC, VALS(h460_9_QosMonitoringReportData_vals), 0, NULL, HFILL }}, { &hf_h460_9_h460_9_ExtendedRTPMetrics_PDU, { "ExtendedRTPMetrics", "h460.9.ExtendedRTPMetrics_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_9_extensionId, { "extensionId", "h460.9.extensionId", FT_UINT32, BASE_DEC, VALS(h225_GenericIdentifier_vals), 0, "GenericIdentifier", HFILL }}, { &hf_h460_9_extensionContent, { "extensionContent", "h460.9.extensionContent", FT_BYTES, BASE_NONE, NULL, 0, "OCTET_STRING", HFILL }}, { &hf_h460_9_rtpAddress, { "rtpAddress", "h460.9.rtpAddress_element", FT_NONE, BASE_NONE, NULL, 0, "TransportChannelInfo", HFILL }}, { &hf_h460_9_rtcpAddress, { "rtcpAddress", "h460.9.rtcpAddress_element", FT_NONE, BASE_NONE, NULL, 0, "TransportChannelInfo", HFILL }}, { &hf_h460_9_sessionId, { "sessionId", "h460.9.sessionId", FT_UINT32, BASE_DEC, NULL, 0, "INTEGER_1_255", HFILL }}, { &hf_h460_9_nonStandardData, { "nonStandardData", "h460.9.nonStandardData_element", FT_NONE, BASE_NONE, NULL, 0, "NonStandardParameter", HFILL }}, { &hf_h460_9_mediaSenderMeasures, { "mediaSenderMeasures", "h460.9.mediaSenderMeasures_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_9_worstEstimatedEnd2EndDelay, { "worstEstimatedEnd2EndDelay", "h460.9.worstEstimatedEnd2EndDelay", FT_UINT32, BASE_DEC, NULL, 0, "EstimatedEnd2EndDelay", HFILL }}, { &hf_h460_9_meanEstimatedEnd2EndDelay, { "meanEstimatedEnd2EndDelay", "h460.9.meanEstimatedEnd2EndDelay", FT_UINT32, BASE_DEC, NULL, 0, "EstimatedEnd2EndDelay", HFILL }}, { &hf_h460_9_mediaReceiverMeasures, { "mediaReceiverMeasures", "h460.9.mediaReceiverMeasures_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_9_cumulativeNumberOfPacketsLost, { "cumulativeNumberOfPacketsLost", "h460.9.cumulativeNumberOfPacketsLost", FT_UINT32, BASE_DEC, NULL, 0, "INTEGER_0_4294967295", HFILL }}, { &hf_h460_9_packetLostRate, { "packetLostRate", "h460.9.packetLostRate", FT_UINT32, BASE_DEC, NULL, 0, "INTEGER_0_65535", HFILL }}, { &hf_h460_9_worstJitter, { "worstJitter", "h460.9.worstJitter", FT_UINT32, BASE_DEC, NULL, 0, "CalculatedJitter", HFILL }}, { &hf_h460_9_estimatedThroughput, { "estimatedThroughput", "h460.9.estimatedThroughput", FT_UINT32, BASE_DEC, NULL, 0, "BandWidth", HFILL }}, { &hf_h460_9_fractionLostRate, { "fractionLostRate", "h460.9.fractionLostRate", FT_UINT32, BASE_DEC, NULL, 0, "INTEGER_0_65535", HFILL }}, { &hf_h460_9_meanJitter, { "meanJitter", "h460.9.meanJitter", FT_UINT32, BASE_DEC, NULL, 0, "CalculatedJitter", HFILL }}, { &hf_h460_9_extensions, { "extensions", "h460.9.extensions", FT_UINT32, BASE_DEC, NULL, 0, "SEQUENCE_OF_Extension", HFILL }}, { &hf_h460_9_extensions_item, { "Extension", "h460.9.Extension_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_9_callReferenceValue, { "callReferenceValue", "h460.9.callReferenceValue", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, { &hf_h460_9_conferenceID, { "conferenceID", "h460.9.conferenceID", FT_GUID, BASE_NONE, NULL, 0, "ConferenceIdentifier", HFILL }}, { &hf_h460_9_callIdentifier, { "callIdentifier", "h460.9.callIdentifier_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_9_mediaChannelsQoS, { "mediaChannelsQoS", "h460.9.mediaChannelsQoS", FT_UINT32, BASE_DEC, NULL, 0, "SEQUENCE_OF_RTCPMeasures", HFILL }}, { &hf_h460_9_mediaChannelsQoS_item, { "RTCPMeasures", "h460.9.RTCPMeasures_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_9_periodic, { "periodic", "h460.9.periodic_element", FT_NONE, BASE_NONE, NULL, 0, "PeriodicQoSMonReport", HFILL }}, { &hf_h460_9_final, { "final", "h460.9.final_element", FT_NONE, BASE_NONE, NULL, 0, "FinalQosMonReport", HFILL }}, { &hf_h460_9_interGK, { "interGK", "h460.9.interGK_element", FT_NONE, BASE_NONE, NULL, 0, "InterGKQosMonReport", HFILL }}, { &hf_h460_9_perCallInfo, { "perCallInfo", "h460.9.perCallInfo", FT_UINT32, BASE_DEC, NULL, 0, "SEQUENCE_OF_PerCallQoSReport", HFILL }}, { &hf_h460_9_perCallInfo_item, { "PerCallQoSReport", "h460.9.PerCallQoSReport_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_9_mediaInfo, { "mediaInfo", "h460.9.mediaInfo", FT_UINT32, BASE_DEC, NULL, 0, "SEQUENCE_OF_RTCPMeasures", HFILL }}, { &hf_h460_9_mediaInfo_item, { "RTCPMeasures", "h460.9.RTCPMeasures_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_9_networkPacketLossRate, { "networkPacketLossRate", "h460.9.networkPacketLossRate", FT_UINT32, BASE_DEC, NULL, 0, "INTEGER_0_255", HFILL }}, { &hf_h460_9_jitterBufferDiscardRate, { "jitterBufferDiscardRate", "h460.9.jitterBufferDiscardRate", FT_UINT32, BASE_DEC, NULL, 0, "INTEGER_0_255", HFILL }}, { &hf_h460_9_burstMetrics, { "burstMetrics", "h460.9.burstMetrics_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_9_rtcpRoundTripDelay, { "rtcpRoundTripDelay", "h460.9.rtcpRoundTripDelay", FT_UINT32, BASE_DEC, NULL, 0, "INTEGER_0_65535", HFILL }}, { &hf_h460_9_endSystemDelay, { "endSystemDelay", "h460.9.endSystemDelay", FT_UINT32, BASE_DEC, NULL, 0, "INTEGER_0_65535", HFILL }}, { &hf_h460_9_signalLevel, { "signalLevel", "h460.9.signalLevel", FT_INT32, BASE_DEC, NULL, 0, "INTEGER_M127_10", HFILL }}, { &hf_h460_9_noiseLevel, { "noiseLevel", "h460.9.noiseLevel", FT_INT32, BASE_DEC, NULL, 0, "INTEGER_M127_0", HFILL }}, { &hf_h460_9_residualEchoReturnLoss, { "residualEchoReturnLoss", "h460.9.residualEchoReturnLoss", FT_UINT32, BASE_DEC, NULL, 0, "INTEGER_0_127", HFILL }}, { &hf_h460_9_rFactor, { "rFactor", "h460.9.rFactor", FT_UINT32, BASE_DEC, NULL, 0, "INTEGER_0_100", HFILL }}, { &hf_h460_9_extRFactor, { "extRFactor", "h460.9.extRFactor", FT_UINT32, BASE_DEC, NULL, 0, "INTEGER_0_100", HFILL }}, { &hf_h460_9_estimatedMOSLQ, { "estimatedMOSLQ", "h460.9.estimatedMOSLQ", FT_UINT32, BASE_DEC, NULL, 0, "INTEGER_10_50", HFILL }}, { &hf_h460_9_estimatedMOSCQ, { "estimatedMOSCQ", "h460.9.estimatedMOSCQ", FT_UINT32, BASE_DEC, NULL, 0, "INTEGER_10_50", HFILL }}, { &hf_h460_9_plcType, { "plcType", "h460.9.plcType", FT_UINT32, BASE_DEC, VALS(h460_9_PLCtypes_vals), 0, "PLCtypes", HFILL }}, { &hf_h460_9_jitterBufferParms, { "jitterBufferParms", "h460.9.jitterBufferParms_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_9_gmin, { "gmin", "h460.9.gmin", FT_UINT32, BASE_DEC, NULL, 0, "INTEGER_0_255", HFILL }}, { &hf_h460_9_burstLossDensity, { "burstLossDensity", "h460.9.burstLossDensity", FT_UINT32, BASE_DEC, NULL, 0, "INTEGER_0_255", HFILL }}, { &hf_h460_9_gapLossDensity, { "gapLossDensity", "h460.9.gapLossDensity", FT_UINT32, BASE_DEC, NULL, 0, "INTEGER_0_255", HFILL }}, { &hf_h460_9_burstDuration, { "burstDuration", "h460.9.burstDuration", FT_UINT32, BASE_DEC, NULL, 0, "INTEGER_0_65535", HFILL }}, { &hf_h460_9_gapDuration, { "gapDuration", "h460.9.gapDuration", FT_UINT32, BASE_DEC, NULL, 0, "INTEGER_0_65535", HFILL }}, { &hf_h460_9_unspecified, { "unspecified", "h460.9.unspecified_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_9_disabled, { "disabled", "h460.9.disabled_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_9_enhanced, { "enhanced", "h460.9.enhanced_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_9_standard, { "standard", "h460.9.standard_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_9_jitterBufferType, { "jitterBufferType", "h460.9.jitterBufferType", FT_UINT32, BASE_DEC, VALS(h460_9_JitterBufferTypes_vals), 0, "JitterBufferTypes", HFILL }}, { &hf_h460_9_jitterBufferAdaptRate, { "jitterBufferAdaptRate", "h460.9.jitterBufferAdaptRate", FT_UINT32, BASE_DEC, NULL, 0, "INTEGER_0_15", HFILL }}, { &hf_h460_9_jitterBufferNominalSize, { "jitterBufferNominalSize", "h460.9.jitterBufferNominalSize", FT_UINT32, BASE_DEC, NULL, 0, "INTEGER_0_65535", HFILL }}, { &hf_h460_9_jitterBufferMaxSize, { "jitterBufferMaxSize", "h460.9.jitterBufferMaxSize", FT_UINT32, BASE_DEC, NULL, 0, "INTEGER_0_65535", HFILL }}, { &hf_h460_9_jitterBufferAbsoluteMax, { "jitterBufferAbsoluteMax", "h460.9.jitterBufferAbsoluteMax", FT_UINT32, BASE_DEC, NULL, 0, "INTEGER_0_65535", HFILL }}, { &hf_h460_9_unknown, { "unknown", "h460.9.unknown_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_9_reserved, { "reserved", "h460.9.reserved_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_9_nonadaptive, { "nonadaptive", "h460.9.nonadaptive_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_9_adaptive, { "adaptive", "h460.9.adaptive_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, /* --- Module CALL-PARTY-CATEGORY --- --- --- */ { &hf_h460_10_h460_10_CallPartyCategoryInfo_PDU, { "CallPartyCategoryInfo", "h460.10.CallPartyCategoryInfo_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_10_callPartyCategory, { "callPartyCategory", "h460.10.callPartyCategory", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, { &hf_h460_10_originatingLineInfo, { "originatingLineInfo", "h460.10.originatingLineInfo", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }}, /* --- Module MLPP --- --- --- */ { &hf_h460_14_h460_14_MLPPInfo_PDU, { "MLPPInfo", "h460.14.MLPPInfo_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_14_precedence, { "precedence", "h460.14.precedence", FT_UINT32, BASE_DEC, VALS(h460_14_MlppPrecedence_vals), 0, "MlppPrecedence", HFILL }}, { &hf_h460_14_mlppReason, { "mlppReason", "h460.14.mlppReason", FT_UINT32, BASE_DEC, VALS(h460_14_MlppReason_vals), 0, NULL, HFILL }}, { &hf_h460_14_mlppNotification, { "mlppNotification", "h460.14.mlppNotification", FT_UINT32, BASE_DEC, VALS(h460_14_MlppNotification_vals), 0, NULL, HFILL }}, { &hf_h460_14_alternateParty, { "alternateParty", "h460.14.alternateParty_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_14_releaseCall, { "releaseCall", "h460.14.releaseCall_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_14_preemptionPending, { "preemptionPending", "h460.14.preemptionPending_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_14_preemptionInProgress, { "preemptionInProgress", "h460.14.preemptionInProgress_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_14_preemptionEnd, { "preemptionEnd", "h460.14.preemptionEnd_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_14_preemptionComplete, { "preemptionComplete", "h460.14.preemptionComplete_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_14_altID, { "altID", "h460.14.altID", FT_UINT32, BASE_DEC, VALS(AliasAddress_vals), 0, "AliasAddress", HFILL }}, { &hf_h460_14_altTimer, { "altTimer", "h460.14.altTimer", FT_UINT32, BASE_DEC, NULL, 0, "INTEGER_0_255", HFILL }}, { &hf_h460_14_preemptCallID, { "preemptCallID", "h460.14.preemptCallID_element", FT_NONE, BASE_NONE, NULL, 0, "CallIdentifier", HFILL }}, { &hf_h460_14_releaseReason, { "releaseReason", "h460.14.releaseReason", FT_UINT32, BASE_DEC, VALS(h460_14_MlppReason_vals), 0, "MlppReason", HFILL }}, { &hf_h460_14_releaseDelay, { "releaseDelay", "h460.14.releaseDelay", FT_UINT32, BASE_DEC, NULL, 0, "INTEGER_0_255", HFILL }}, /* --- Module SIGNALLING-CHANNEL-SUSPEND-REDIRECT --- --- --- */ { &hf_h460_15_h460_15_SignallingChannelData_PDU, { "SignallingChannelData", "h460.15.SignallingChannelData_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_15_signallingChannelData, { "signallingChannelData", "h460.15.signallingChannelData", FT_UINT32, BASE_DEC, VALS(h460_15_T_signallingChannelData_vals), 0, NULL, HFILL }}, { &hf_h460_15_channelSuspendRequest, { "channelSuspendRequest", "h460.15.channelSuspendRequest_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_15_channelSuspendResponse, { "channelSuspendResponse", "h460.15.channelSuspendResponse_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_15_channelSuspendConfirm, { "channelSuspendConfirm", "h460.15.channelSuspendConfirm_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_15_channelSuspendCancel, { "channelSuspendCancel", "h460.15.channelSuspendCancel_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_15_channelResumeRequest, { "channelResumeRequest", "h460.15.channelResumeRequest_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_15_channelResumeResponse, { "channelResumeResponse", "h460.15.channelResumeResponse_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_15_channelResumeAddress, { "channelResumeAddress", "h460.15.channelResumeAddress", FT_UINT32, BASE_DEC, NULL, 0, "SEQUENCE_OF_TransportAddress", HFILL }}, { &hf_h460_15_channelResumeAddress_item, { "TransportAddress", "h460.15.TransportAddress", FT_UINT32, BASE_DEC, VALS(h225_TransportAddress_vals), 0, NULL, HFILL }}, { &hf_h460_15_immediateResume, { "immediateResume", "h460.15.immediateResume", FT_BOOLEAN, BASE_NONE, NULL, 0, "BOOLEAN", HFILL }}, { &hf_h460_15_resetH245, { "resetH245", "h460.15.resetH245_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_15_okToSuspend, { "okToSuspend", "h460.15.okToSuspend", FT_BOOLEAN, BASE_NONE, NULL, 0, "BOOLEAN", HFILL }}, { &hf_h460_15_randomNumber, { "randomNumber", "h460.15.randomNumber", FT_UINT32, BASE_DEC, NULL, 0, "INTEGER_0_4294967295", HFILL }}, /* --- Module SIGNALLING-TRAVERSAL --- --- --- */ { &hf_h460_18_h460_18_IncomingCallIndication_PDU, { "IncomingCallIndication", "h460.18.IncomingCallIndication_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_18_h460_18_LRQKeepAliveData_PDU, { "LRQKeepAliveData", "h460.18.LRQKeepAliveData_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_18_callSignallingAddress, { "callSignallingAddress", "h460.18.callSignallingAddress", FT_UINT32, BASE_DEC, VALS(h225_TransportAddress_vals), 0, "TransportAddress", HFILL }}, { &hf_h460_18_callID, { "callID", "h460.18.callID_element", FT_NONE, BASE_NONE, NULL, 0, "CallIdentifier", HFILL }}, { &hf_h460_18_lrqKeepAliveInterval, { "lrqKeepAliveInterval", "h460.18.lrqKeepAliveInterval", FT_UINT32, BASE_DEC, NULL, 0, "TimeToLive", HFILL }}, /* --- Module MEDIA-TRAVERSAL --- --- --- */ { &hf_h460_19_h460_19_TraversalParameters_PDU, { "TraversalParameters", "h460.19.TraversalParameters_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_19_multiplexedMediaChannel, { "multiplexedMediaChannel", "h460.19.multiplexedMediaChannel", FT_UINT32, BASE_DEC, VALS(h245_TransportAddress_vals), 0, "TransportAddress", HFILL }}, { &hf_h460_19_multiplexedMediaControlChannel, { "multiplexedMediaControlChannel", "h460.19.multiplexedMediaControlChannel", FT_UINT32, BASE_DEC, VALS(h245_TransportAddress_vals), 0, "TransportAddress", HFILL }}, { &hf_h460_19_multiplexID, { "multiplexID", "h460.19.multiplexID", FT_UINT32, BASE_DEC, NULL, 0, "INTEGER_0_4294967295", HFILL }}, { &hf_h460_19_keepAliveChannel, { "keepAliveChannel", "h460.19.keepAliveChannel", FT_UINT32, BASE_DEC, VALS(h245_TransportAddress_vals), 0, "TransportAddress", HFILL }}, { &hf_h460_19_keepAlivePayloadType, { "keepAlivePayloadType", "h460.19.keepAlivePayloadType", FT_UINT32, BASE_DEC, NULL, 0, "INTEGER_0_127", HFILL }}, { &hf_h460_19_keepAliveInterval, { "keepAliveInterval", "h460.19.keepAliveInterval", FT_UINT32, BASE_DEC, NULL, 0, "TimeToLive", HFILL }}, /* --- Module MESSAGE-BROADCAST --- --- --- */ { &hf_h460_21_h460_21_CapabilityAdvertisement_PDU, { "CapabilityAdvertisement", "h460.21.CapabilityAdvertisement_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_21_receiveCapabilities, { "receiveCapabilities", "h460.21.receiveCapabilities_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_21_transmitCapabilities, { "transmitCapabilities", "h460.21.transmitCapabilities", FT_UINT32, BASE_DEC, NULL, 0, "SEQUENCE_SIZE_1_256_OF_TransmitCapabilities", HFILL }}, { &hf_h460_21_transmitCapabilities_item, { "TransmitCapabilities", "h460.21.TransmitCapabilities_element", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, { &hf_h460_21_capabilities, { "capabilities", "h460.21.capabilities", FT_UINT32, BASE_DEC, NULL, 0, "SEQUENCE_SIZE_1_256_OF_Capability", HFILL }}, { &hf_h460_21_capabilities_item, { "Capability", "h460.21.Capability", FT_UINT32, BASE_DEC, VALS(h245_Capability_vals), 0, NULL, HFILL }}, { &hf_h460_21_maxGroups, { "maxGroups", "h460.21.maxGroups", FT_UINT32, BASE_DEC, NULL, 0, "INTEGER_1_65535", HFILL }}, { &hf_h460_21_groupIdentifer, { "groupIdentifer", "h460.21.groupIdentifer", FT_BYTES, BASE_NONE, NULL, 0, "GloballyUniqueID", HFILL }}, { &hf_h460_21_capability, { "capability", "h460.21.capability", FT_UINT32, BASE_DEC, VALS(h245_Capability_vals), 0, NULL, HFILL }}, { &hf_h460_21_sourceAddress, { "sourceAddress", "h460.21.sourceAddress", FT_UINT32, BASE_DEC, VALS(h245_UnicastAddress_vals), 0, "UnicastAddress", HFILL }}, }; /* List of subtrees */ static int *ett[] = { /* --- Module NUMBER-PORTABILITY --- --- --- */ &ett_h460_2_NumberPortabilityInfo, &ett_h460_2_T_nUMBERPORTABILITYDATA, &ett_h460_2_NumberPortabilityRejectReason, &ett_h460_2_PortabilityAddress, &ett_h460_2_NumberPortabilityTypeOfNumber, &ett_h460_2_PortabilityTypeOfNumber, &ett_h460_2_RegionalParameters, /* --- Module CIRCUIT-STATUS-MAP --- --- --- */ &ett_h460_3_CircuitStatus, &ett_h460_3_SEQUENCE_OF_CircuitStatusMap, &ett_h460_3_CircuitStatusMap, &ett_h460_3_CircuitStatusType, /* --- Module CALL-PRIORITY --- --- --- */ &ett_h460_4_CallPriorityInfo, &ett_h460_4_T_priorityValue, &ett_h460_4_SEQUENCE_OF_ClearToken, &ett_h460_4_SEQUENCE_OF_CryptoToken, &ett_h460_4_T_rejectReason, &ett_h460_4_CountryInternationalNetworkCallOriginationIdentification, &ett_h460_4_T_numberingPlan, &ett_h460_4_T_x121, &ett_h460_4_T_e164, /* --- Modules QOS-MONITORING-REPORT QOS-MONITORING-EXTENDED-VOIP-REPORT --- --- --- */ &ett_h460_9_Extension, &ett_h460_9_RTCPMeasures, &ett_h460_9_T_mediaSenderMeasures, &ett_h460_9_T_mediaReceiverMeasures, &ett_h460_9_SEQUENCE_OF_Extension, &ett_h460_9_PerCallQoSReport, &ett_h460_9_SEQUENCE_OF_RTCPMeasures, &ett_h460_9_QosMonitoringReportData, &ett_h460_9_PeriodicQoSMonReport, &ett_h460_9_SEQUENCE_OF_PerCallQoSReport, &ett_h460_9_FinalQosMonReport, &ett_h460_9_InterGKQosMonReport, &ett_h460_9_ExtendedRTPMetrics, &ett_h460_9_BurstMetrics, &ett_h460_9_PLCtypes, &ett_h460_9_JitterBufferParms, &ett_h460_9_JitterBufferTypes, /* --- Module CALL-PARTY-CATEGORY --- --- --- */ &ett_h460_10_CallPartyCategoryInfo, /* --- Module MLPP --- --- --- */ &ett_h460_14_MLPPInfo, &ett_h460_14_MlppNotification, &ett_h460_14_AlternateParty, &ett_h460_14_ReleaseCall, /* --- Module SIGNALLING-CHANNEL-SUSPEND-REDIRECT --- --- --- */ &ett_h460_15_SignallingChannelData, &ett_h460_15_T_signallingChannelData, &ett_h460_15_ChannelSuspendRequest, &ett_h460_15_SEQUENCE_OF_TransportAddress, &ett_h460_15_ChannelSuspendResponse, &ett_h460_15_ChannelSuspendConfirm, &ett_h460_15_ChannelSuspendCancel, &ett_h460_15_ChannelResumeRequest, &ett_h460_15_ChannelResumeResponse, /* --- Module SIGNALLING-TRAVERSAL --- --- --- */ &ett_h460_18_IncomingCallIndication, &ett_h460_18_LRQKeepAliveData, /* --- Module MEDIA-TRAVERSAL --- --- --- */ &ett_h460_19_TraversalParameters, /* --- Module MESSAGE-BROADCAST --- --- --- */ &ett_h460_21_CapabilityAdvertisement, &ett_h460_21_SEQUENCE_SIZE_1_256_OF_TransmitCapabilities, &ett_h460_21_ReceiveCapabilities, &ett_h460_21_SEQUENCE_SIZE_1_256_OF_Capability, &ett_h460_21_TransmitCapabilities, }; /* Register protocol */ proto_h460 = proto_register_protocol(PNAME, PSNAME, PFNAME); /* Register fields and subtrees */ proto_register_field_array(proto_h460, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); h460_name_handle = register_dissector(PFNAME, dissect_h460_name, proto_h460); for (ftr=h460_feature_tab; ftr->id; ftr++) { if (ftr->opt & GD) ftr->key_gd = wmem_strdup_printf(wmem_epan_scope(), "GenericData/%s", ftr->id); if (ftr->opt & FD) ftr->key_fd = wmem_strdup_printf(wmem_epan_scope(), "FeatureDescriptor/%s", ftr->id); if (ftr->opt & GM) ftr->key_gm = wmem_strdup_printf(wmem_epan_scope(), "GenericMessage/%s", ftr->id); if (ftr->opt & GI) ftr->key_gi = wmem_strdup_printf(wmem_epan_scope(), "GenericInformation/%s", ftr->id); if (ftr->content_pdu) ftr->content_hnd = create_dissector_handle(ftr->content_pdu, proto_h460); } } /*--- proto_reg_handoff_h460 -------------------------------------------*/ void proto_reg_handoff_h460(void) { h460_feature_t *ftr; q931_ie_handle = find_dissector_add_dependency("q931.ie", proto_h460); h225_ras_handle = find_dissector_add_dependency("h225.ras", proto_h460); for (ftr=h460_feature_tab; ftr->id; ftr++) { if (ftr->key_gd) dissector_add_string("h225.gef.name", ftr->key_gd, h460_name_handle); if (ftr->key_fd) dissector_add_string("h225.gef.name", ftr->key_fd, h460_name_handle); if (ftr->key_gm) dissector_add_string("h245.gef.name", ftr->key_gm, h460_name_handle); if (ftr->key_gi) dissector_add_string("h245.gef.name", ftr->key_gi, h460_name_handle); if (ftr->content_hnd) { if (ftr->key_gd) dissector_add_string("h225.gef.content", ftr->key_gd, ftr->content_hnd); if (ftr->key_fd) dissector_add_string("h225.gef.content", ftr->key_fd, ftr->content_hnd); if (ftr->key_gm) dissector_add_string("h245.gef.content", ftr->key_gm, ftr->content_hnd); if (ftr->key_gi) dissector_add_string("h245.gef.content", ftr->key_gi, ftr->content_hnd); } } }