wireshark/epan/dissectors/packet-h248.c

7722 lines
320 KiB
C

/* Do not modify this file. Changes will be overwritten. */
/* Generated automatically by the ASN.1 to Wireshark dissector compiler */
/* packet-h248.c */
/* asn2wrs.py -b -p h248 -c ./h248.cnf -s ./packet-h248-template -D . -O ../.. h248v3.asn h248v1support.asn */
/* Input file: packet-h248-template.c */
#line 1 "./asn1/h248/packet-h248-template.c"
/* packet-h248.c
* Routines for H.248/MEGACO packet dissection
*
* Ronnie Sahlberg 2004
*
* Luis Ontanon 2005 - Context and Transaction Tracing
*
* Wireshark - Network traffic analyzer
* By Gerald Combs <gerald@wireshark.org>
* Copyright 1998 Gerald Combs
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "config.h"
#include <epan/packet.h>
#include <epan/exceptions.h>
#include <epan/tap.h>
#include <epan/asn1.h>
#include <epan/prefs.h>
#include <epan/exported_pdu.h>
#include <epan/address_types.h>
#include "packet-alcap.h"
#include "packet-ber.h"
#include "packet-tpkt.h"
#include "packet-mtp3.h"
#include "packet-h248.h"
#define PNAME "H.248 MEGACO"
#define PSNAME "H248"
#define PFNAME "h248"
void proto_register_h248(void);
/* Initialize the protocol and registered fields */
static int proto_h248 = -1;
static int hf_248_magic_num = -1;
static int hf_h248_mtpaddress_ni = -1;
static int hf_h248_mtpaddress_pc = -1;
static int hf_h248_pkg_name = -1;
static int hf_248_pkg_param = -1;
static int hf_h248_event_name = -1;
static int hf_h248_signal_name = -1;
static int hf_h248_signal_code = -1;
static int hf_h248_event_code = -1;
static int hf_h248_pkg_bcp_BNCChar_PDU = -1;
static int hf_h248_context_id = -1;
static int hf_h248_term_wild_type = -1;
static int hf_h248_term_wild_level = -1;
static int hf_h248_term_wild_position = -1;
static int hf_h248_no_pkg = -1;
static int hf_h248_no_sig = -1;
static int hf_h248_no_evt = -1;
static int hf_h248_param = -1;
static int hf_h248_serviceChangeReasonStr = -1;
static int hf_h248_transactionId64 = -1;
static int hf_h248_context_id64 = -1;
/* h248v1 support */
static int hf_h248_auditValueReplyV1 = -1;
/*--- Included file: packet-h248-hf.c ---*/
#line 1 "./asn1/h248/packet-h248-hf.c"
static int hf_h248_authHeader = -1; /* AuthenticationHeader */
static int hf_h248_mess = -1; /* Message */
static int hf_h248_secParmIndex = -1; /* SecurityParmIndex */
static int hf_h248_seqNum = -1; /* SequenceNum */
static int hf_h248_ad = -1; /* AuthData */
static int hf_h248_version = -1; /* T_version */
static int hf_h248_mId = -1; /* MId */
static int hf_h248_messageBody = -1; /* T_messageBody */
static int hf_h248_messageError = -1; /* ErrorDescriptor */
static int hf_h248_transactions = -1; /* SEQUENCE_OF_Transaction */
static int hf_h248_transactions_item = -1; /* Transaction */
static int hf_h248_ip4Address = -1; /* IP4Address */
static int hf_h248_ip6Address = -1; /* IP6Address */
static int hf_h248_domainName = -1; /* DomainName */
static int hf_h248_deviceName = -1; /* PathName */
static int hf_h248_mtpAddress = -1; /* MtpAddress */
static int hf_h248_domName = -1; /* IA5String */
static int hf_h248_portNumber = -1; /* INTEGER_0_65535 */
static int hf_h248_iP4Address = -1; /* OCTET_STRING_SIZE_4 */
static int hf_h248_iP6Address = -1; /* OCTET_STRING_SIZE_16 */
static int hf_h248_transactionRequest = -1; /* TransactionRequest */
static int hf_h248_transactionPending = -1; /* TransactionPending */
static int hf_h248_transactionReply = -1; /* TransactionReply */
static int hf_h248_transactionResponseAck = -1; /* TransactionResponseAck */
static int hf_h248_segmentReply = -1; /* SegmentReply */
static int hf_h248_transactionId = -1; /* T_transactionId */
static int hf_h248_actions = -1; /* SEQUENCE_OF_ActionRequest */
static int hf_h248_actions_item = -1; /* ActionRequest */
static int hf_h248_tpend_transactionId = -1; /* T_tpend_transactionId */
static int hf_h248_trep_transactionId = -1; /* T_trep_transactionId */
static int hf_h248_immAckRequired = -1; /* NULL */
static int hf_h248_transactionResult = -1; /* T_transactionResult */
static int hf_h248_transactionError = -1; /* ErrorDescriptor */
static int hf_h248_actionReplies = -1; /* SEQUENCE_OF_ActionReply */
static int hf_h248_actionReplies_item = -1; /* ActionReply */
static int hf_h248_segmentNumber = -1; /* SegmentNumber */
static int hf_h248_segmentationComplete = -1; /* NULL */
static int hf_h248_seg_rep_transactionId = -1; /* T_seg_rep_transactionId */
static int hf_h248_TransactionResponseAck_item = -1; /* TransactionAck */
static int hf_h248_firstAck = -1; /* TransactionId */
static int hf_h248_lastAck = -1; /* TransactionId */
static int hf_h248_errorCode = -1; /* T_errorCode */
static int hf_h248_errorText = -1; /* ErrorText */
static int hf_h248_contextId = -1; /* ContextId */
static int hf_h248_contextRequest = -1; /* ContextRequest */
static int hf_h248_contextAttrAuditReq = -1; /* T_contextAttrAuditReq */
static int hf_h248_commandRequests = -1; /* SEQUENCE_OF_CommandRequest */
static int hf_h248_commandRequests_item = -1; /* CommandRequest */
static int hf_h248_errorDescriptor = -1; /* ErrorDescriptor */
static int hf_h248_contextReply = -1; /* ContextRequest */
static int hf_h248_commandReply = -1; /* SEQUENCE_OF_CommandReply */
static int hf_h248_commandReply_item = -1; /* CommandReply */
static int hf_h248_priority = -1; /* INTEGER_0_15 */
static int hf_h248_emergency = -1; /* BOOLEAN */
static int hf_h248_topologyReq = -1; /* T_topologyReq */
static int hf_h248_topologyReq_item = -1; /* TopologyRequest */
static int hf_h248_iepscallind_BOOL = -1; /* Iepscallind_BOOL */
static int hf_h248_contextProp = -1; /* SEQUENCE_OF_PropertyParm */
static int hf_h248_contextProp_item = -1; /* PropertyParm */
static int hf_h248_contextList = -1; /* SEQUENCE_OF_ContextIDinList */
static int hf_h248_contextList_item = -1; /* ContextIDinList */
static int hf_h248_topology = -1; /* NULL */
static int hf_h248_cAAREmergency = -1; /* NULL */
static int hf_h248_cAARPriority = -1; /* NULL */
static int hf_h248_iepscallind = -1; /* NULL */
static int hf_h248_contextPropAud = -1; /* SEQUENCE_OF_IndAudPropertyParm */
static int hf_h248_contextPropAud_item = -1; /* IndAudPropertyParm */
static int hf_h248_selectpriority = -1; /* INTEGER_0_15 */
static int hf_h248_selectemergency = -1; /* BOOLEAN */
static int hf_h248_selectiepscallind = -1; /* BOOLEAN */
static int hf_h248_selectLogic = -1; /* SelectLogic */
static int hf_h248_andAUDITSelect = -1; /* NULL */
static int hf_h248_orAUDITSelect = -1; /* NULL */
static int hf_h248_command = -1; /* Command */
static int hf_h248_optional = -1; /* NULL */
static int hf_h248_wildcardReturn = -1; /* NULL */
static int hf_h248_addReq = -1; /* T_addReq */
static int hf_h248_moveReq = -1; /* T_moveReq */
static int hf_h248_modReq = -1; /* T_modReq */
static int hf_h248_subtractReq = -1; /* T_subtractReq */
static int hf_h248_auditCapRequest = -1; /* T_auditCapRequest */
static int hf_h248_auditValueRequest = -1; /* T_auditValueRequest */
static int hf_h248_notifyReq = -1; /* T_notifyReq */
static int hf_h248_serviceChangeReq = -1; /* ServiceChangeRequest */
static int hf_h248_addReply = -1; /* T_addReply */
static int hf_h248_moveReply = -1; /* T_moveReply */
static int hf_h248_modReply = -1; /* T_modReply */
static int hf_h248_subtractReply = -1; /* T_subtractReply */
static int hf_h248_auditCapReply = -1; /* T_auditCapReply */
static int hf_h248_auditValueReply = -1; /* T_auditValueReply */
static int hf_h248_notifyReply = -1; /* T_notifyReply */
static int hf_h248_serviceChangeReply = -1; /* ServiceChangeReply */
static int hf_h248_terminationFrom = -1; /* TerminationID */
static int hf_h248_terminationTo = -1; /* TerminationID */
static int hf_h248_topologyDirection = -1; /* T_topologyDirection */
static int hf_h248_streamID = -1; /* StreamID */
static int hf_h248_topologyDirectionExtension = -1; /* T_topologyDirectionExtension */
static int hf_h248_terminationIDList = -1; /* TerminationIDList */
static int hf_h248_descriptors = -1; /* SEQUENCE_OF_AmmDescriptor */
static int hf_h248_descriptors_item = -1; /* AmmDescriptor */
static int hf_h248_mediaDescriptor = -1; /* MediaDescriptor */
static int hf_h248_modemDescriptor = -1; /* ModemDescriptor */
static int hf_h248_muxDescriptor = -1; /* MuxDescriptor */
static int hf_h248_eventsDescriptor = -1; /* EventsDescriptor */
static int hf_h248_eventBufferDescriptor = -1; /* EventBufferDescriptor */
static int hf_h248_signalsDescriptor = -1; /* SignalsDescriptor */
static int hf_h248_digitMapDescriptor = -1; /* DigitMapDescriptor */
static int hf_h248_auditDescriptor = -1; /* AuditDescriptor */
static int hf_h248_aDstatisticsDescriptor = -1; /* StatisticsDescriptor */
static int hf_h248_terminationAudit = -1; /* TerminationAudit */
static int hf_h248_terminationID = -1; /* TerminationID */
static int hf_h248_contextAuditResult = -1; /* TerminationIDList */
static int hf_h248_error = -1; /* ErrorDescriptor */
static int hf_h248_auditResult = -1; /* AuditResult */
static int hf_h248_auditResultTermList = -1; /* TermListAuditResult */
static int hf_h248_terminationAuditResult = -1; /* TerminationAudit */
static int hf_h248_TerminationAudit_item = -1; /* AuditReturnParameter */
static int hf_h248_observedEventsDescriptor = -1; /* ObservedEventsDescriptor */
static int hf_h248_aRPstatisticsDescriptor = -1; /* StatisticsDescriptor */
static int hf_h248_packagesDescriptor = -1; /* PackagesDescriptor */
static int hf_h248_emptyDescriptors = -1; /* AuditDescriptor */
static int hf_h248_auditToken = -1; /* T_auditToken */
static int hf_h248_auditPropertyToken = -1; /* SEQUENCE_OF_IndAuditParameter */
static int hf_h248_auditPropertyToken_item = -1; /* IndAuditParameter */
static int hf_h248_indaudmediaDescriptor = -1; /* IndAudMediaDescriptor */
static int hf_h248_indaudeventsDescriptor = -1; /* IndAudEventsDescriptor */
static int hf_h248_indaudeventBufferDescriptor = -1; /* IndAudEventBufferDescriptor */
static int hf_h248_indaudsignalsDescriptor = -1; /* IndAudSignalsDescriptor */
static int hf_h248_indauddigitMapDescriptor = -1; /* IndAudDigitMapDescriptor */
static int hf_h248_indaudstatisticsDescriptor = -1; /* IndAudStatisticsDescriptor */
static int hf_h248_indaudpackagesDescriptor = -1; /* IndAudPackagesDescriptor */
static int hf_h248_indAudTerminationStateDescriptor = -1; /* IndAudTerminationStateDescriptor */
static int hf_h248_indAudMediaDescriptorStreams = -1; /* IndAudMediaDescriptorStreams */
static int hf_h248_oneStream = -1; /* IndAudStreamParms */
static int hf_h248_multiStream = -1; /* SEQUENCE_OF_IndAudStreamDescriptor */
static int hf_h248_multiStream_item = -1; /* IndAudStreamDescriptor */
static int hf_h248_indAudStreamParms = -1; /* IndAudStreamParms */
static int hf_h248_iASPLocalControlDescriptor = -1; /* IndAudLocalControlDescriptor */
static int hf_h248_iASPLocalDescriptor = -1; /* IndAudLocalRemoteDescriptor */
static int hf_h248_iASPRemoteDescriptor = -1; /* IndAudLocalRemoteDescriptor */
static int hf_h248_statisticsDescriptor = -1; /* IndAudStatisticsDescriptor */
static int hf_h248_iALCDStreamMode = -1; /* NULL */
static int hf_h248_iALCDReserveValue = -1; /* NULL */
static int hf_h248_iALCDReserveGroup = -1; /* NULL */
static int hf_h248_indAudPropertyParms = -1; /* SEQUENCE_OF_IndAudPropertyParm */
static int hf_h248_indAudPropertyParms_item = -1; /* IndAudPropertyParm */
static int hf_h248_streamModeSel = -1; /* StreamMode */
static int hf_h248_name = -1; /* PkgdName */
static int hf_h248_propertyParms = -1; /* PropertyParm */
static int hf_h248_propGroupID = -1; /* INTEGER_0_65535 */
static int hf_h248_iAPropertyGroup = -1; /* IndAudPropertyGroup */
static int hf_h248_IndAudPropertyGroup_item = -1; /* IndAudPropertyParm */
static int hf_h248_eventBufferControl = -1; /* NULL */
static int hf_h248_iATSDServiceState = -1; /* NULL */
static int hf_h248_serviceStateSel = -1; /* ServiceState */
static int hf_h248_requestID = -1; /* RequestID */
static int hf_h248_iAEDPkgdName = -1; /* PkgdName */
static int hf_h248_iAEBDEventName = -1; /* PkgdName */
static int hf_h248_indAudSignal = -1; /* IndAudSignal */
static int hf_h248_indAudSeqSigList = -1; /* IndAudSeqSigList */
static int hf_h248_id = -1; /* INTEGER_0_65535 */
static int hf_h248_iASignalList = -1; /* IndAudSignal */
static int hf_h248_iASignalName = -1; /* PkgdName */
static int hf_h248_signalRequestID = -1; /* RequestID */
static int hf_h248_digitMapName = -1; /* DigitMapName */
static int hf_h248_iAStatName = -1; /* PkgdName */
static int hf_h248_packageName = -1; /* Name */
static int hf_h248_packageVersion = -1; /* INTEGER_0_99 */
static int hf_h248_requestId = -1; /* RequestID */
static int hf_h248_observedEventLst = -1; /* SEQUENCE_OF_ObservedEvent */
static int hf_h248_observedEventLst_item = -1; /* ObservedEvent */
static int hf_h248_eventName = -1; /* EventName */
static int hf_h248_eventParList = -1; /* SEQUENCE_OF_EventParameter */
static int hf_h248_eventParList_item = -1; /* EventParameter */
static int hf_h248_timeNotation = -1; /* TimeNotation */
static int hf_h248_eventParameterName = -1; /* EventParameterName */
static int hf_h248_eventParamValue = -1; /* EventParamValues */
static int hf_h248_eventPar_extraInfo = -1; /* EventPar_extraInfo */
static int hf_h248_relation = -1; /* Relation */
static int hf_h248_range = -1; /* BOOLEAN */
static int hf_h248_sublist = -1; /* BOOLEAN */
static int hf_h248_EventParamValues_item = -1; /* EventParamValue */
static int hf_h248_serviceChangeParms = -1; /* ServiceChangeParm */
static int hf_h248_serviceChangeResult = -1; /* ServiceChangeResult */
static int hf_h248_serviceChangeResParms = -1; /* ServiceChangeResParm */
static int hf_h248_wildcard = -1; /* SEQUENCE_OF_WildcardField */
static int hf_h248_wildcard_item = -1; /* WildcardField */
static int hf_h248_terminationId = -1; /* T_terminationId */
static int hf_h248_TerminationIDList_item = -1; /* TerminationID */
static int hf_h248_termStateDescr = -1; /* TerminationStateDescriptor */
static int hf_h248_streams = -1; /* T_streams */
static int hf_h248_mediaDescriptorOneStream = -1; /* StreamParms */
static int hf_h248_mediaDescriptorMultiStream = -1; /* SEQUENCE_OF_StreamDescriptor */
static int hf_h248_mediaDescriptorMultiStream_item = -1; /* StreamDescriptor */
static int hf_h248_streamParms = -1; /* StreamParms */
static int hf_h248_localControlDescriptor = -1; /* LocalControlDescriptor */
static int hf_h248_localDescriptor = -1; /* LocalRemoteDescriptor */
static int hf_h248_remoteDescriptor = -1; /* LocalRemoteDescriptor */
static int hf_h248_sPstatisticsDescriptor = -1; /* StatisticsDescriptor */
static int hf_h248_streamMode = -1; /* StreamMode */
static int hf_h248_reserveValue = -1; /* BOOLEAN */
static int hf_h248_reserveGroup = -1; /* BOOLEAN */
static int hf_h248_lCDpropertyParms = -1; /* SEQUENCE_OF_PropertyParm */
static int hf_h248_lCDpropertyParms_item = -1; /* PropertyParm */
static int hf_h248_propertyName = -1; /* PropertyName */
static int hf_h248_propertyParamValue = -1; /* SEQUENCE_OF_PropertyID */
static int hf_h248_propertyParamValue_item = -1; /* PropertyID */
static int hf_h248_propParm_extraInfo = -1; /* PropParm_extraInfo */
static int hf_h248_propGrps = -1; /* SEQUENCE_OF_PropertyGroup */
static int hf_h248_propGrps_item = -1; /* PropertyGroup */
static int hf_h248_PropertyGroup_item = -1; /* PropertyParm */
static int hf_h248_tSDpropertyParms = -1; /* SEQUENCE_OF_PropertyParm */
static int hf_h248_tSDpropertyParms_item = -1; /* PropertyParm */
static int hf_h248_tSEventBufferControl = -1; /* EventBufferControl */
static int hf_h248_serviceState = -1; /* ServiceState */
static int hf_h248_muxType = -1; /* MuxType */
static int hf_h248_termList = -1; /* SEQUENCE_OF_TerminationID */
static int hf_h248_termList_item = -1; /* TerminationID */
static int hf_h248_nonStandardData = -1; /* NonStandardData */
static int hf_h248_eventList = -1; /* SEQUENCE_OF_RequestedEvent */
static int hf_h248_eventList_item = -1; /* RequestedEvent */
static int hf_h248_eventAction = -1; /* RequestedActions */
static int hf_h248_evParList = -1; /* SEQUENCE_OF_EventParameter */
static int hf_h248_evParList_item = -1; /* EventParameter */
static int hf_h248_secondEvent = -1; /* SecondEventsDescriptor */
static int hf_h248_notifyImmediate = -1; /* NULL */
static int hf_h248_notifyRegulated = -1; /* RegulatedEmbeddedDescriptor */
static int hf_h248_neverNotify = -1; /* NULL */
static int hf_h248_keepActive = -1; /* BOOLEAN */
static int hf_h248_eventDM = -1; /* EventDM */
static int hf_h248_notifyBehaviour = -1; /* NotifyBehaviour */
static int hf_h248_resetEventsDescriptor = -1; /* NULL */
static int hf_h248_digitMapValue = -1; /* DigitMapValue */
static int hf_h248_secondaryEventList = -1; /* SEQUENCE_OF_SecondRequestedEvent */
static int hf_h248_secondaryEventList_item = -1; /* SecondRequestedEvent */
static int hf_h248_pkgdName = -1; /* PkgdName */
static int hf_h248_secondaryEventAction = -1; /* SecondRequestedActions */
static int hf_h248_EventBufferDescriptor_item = -1; /* EventSpec */
static int hf_h248_SignalsDescriptor_item = -1; /* SignalRequest */
static int hf_h248_signal = -1; /* Signal */
static int hf_h248_seqSigList = -1; /* SeqSigList */
static int hf_h248_signalList = -1; /* SEQUENCE_OF_Signal */
static int hf_h248_signalList_item = -1; /* Signal */
static int hf_h248_signalName = -1; /* SignalName */
static int hf_h248_sigType = -1; /* SignalType */
static int hf_h248_duration = -1; /* INTEGER_0_65535 */
static int hf_h248_notifyCompletion = -1; /* NotifyCompletion */
static int hf_h248_sigParList = -1; /* SEQUENCE_OF_SigParameter */
static int hf_h248_sigParList_item = -1; /* SigParameter */
static int hf_h248_direction = -1; /* SignalDirection */
static int hf_h248_intersigDelay = -1; /* INTEGER_0_65535 */
static int hf_h248_sigParameterName = -1; /* SigParameterName */
static int hf_h248_value = -1; /* SigParamValues */
static int hf_h248_extraInfo = -1; /* T_extraInfo */
static int hf_h248_SigParamValues_item = -1; /* SigParamValue */
static int hf_h248_mtl = -1; /* SEQUENCE_OF_ModemType */
static int hf_h248_mtl_item = -1; /* ModemType */
static int hf_h248_mpl = -1; /* SEQUENCE_OF_PropertyParm */
static int hf_h248_mpl_item = -1; /* PropertyParm */
static int hf_h248_startTimer = -1; /* INTEGER_0_99 */
static int hf_h248_shortTimer = -1; /* INTEGER_0_99 */
static int hf_h248_longTimer = -1; /* INTEGER_0_99 */
static int hf_h248_digitMapBody = -1; /* IA5String */
static int hf_h248_durationTimer = -1; /* INTEGER_0_99 */
static int hf_h248_serviceChangeMethod = -1; /* ServiceChangeMethod */
static int hf_h248_serviceChangeAddress = -1; /* ServiceChangeAddress */
static int hf_h248_serviceChangeVersion = -1; /* INTEGER_0_99 */
static int hf_h248_serviceChangeProfile = -1; /* ServiceChangeProfile */
static int hf_h248_serviceChangeReason = -1; /* SCreasonValue */
static int hf_h248_serviceChangeDelay = -1; /* INTEGER_0_4294967295 */
static int hf_h248_serviceChangeMgcId = -1; /* MId */
static int hf_h248_timeStamp = -1; /* TimeNotation */
static int hf_h248_serviceChangeInfo = -1; /* AuditDescriptor */
static int hf_h248_serviceChangeIncompleteFlag = -1; /* NULL */
static int hf_h248_SCreasonValue_item = -1; /* SCreasonValueOctetStr */
static int hf_h248_timestamp = -1; /* TimeNotation */
static int hf_h248_profileName = -1; /* IA5String_SIZE_1_67 */
static int hf_h248_PackagesDescriptor_item = -1; /* PackagesItem */
static int hf_h248_StatisticsDescriptor_item = -1; /* StatisticsParameter */
static int hf_h248_statName = -1; /* StatName */
static int hf_h248_statValue = -1; /* StatValue */
static int hf_h248_nonStandardIdentifier = -1; /* NonStandardIdentifier */
static int hf_h248_data = -1; /* OCTET_STRING */
static int hf_h248_object = -1; /* OBJECT_IDENTIFIER */
static int hf_h248_h221NonStandard = -1; /* H221NonStandard */
static int hf_h248_experimental = -1; /* IA5String_SIZE_8 */
static int hf_h248_t35CountryCode1 = -1; /* INTEGER_0_255 */
static int hf_h248_t35CountryCode2 = -1; /* INTEGER_0_255 */
static int hf_h248_t35Extension = -1; /* INTEGER_0_255 */
static int hf_h248_manufacturerCode = -1; /* INTEGER_0_65535 */
static int hf_h248_date = -1; /* IA5String_SIZE_8 */
static int hf_h248_time = -1; /* IA5String_SIZE_8 */
static int hf_h248_Value_item = -1; /* OCTET_STRING */
static int hf_h248_audit_result = -1; /* AuditResultV1 */
static int hf_h248_contectAuditResult = -1; /* TerminationID */
static int hf_h248_eventParamterName = -1; /* EventParameterName */
static int hf_h248_event_param_value = -1; /* EventParamValueV1 */
static int hf_h248_sig_param_value = -1; /* SigParamValueV1 */
/* named bits */
static int hf_h248_T_auditToken_muxToken = -1;
static int hf_h248_T_auditToken_modemToken = -1;
static int hf_h248_T_auditToken_mediaToken = -1;
static int hf_h248_T_auditToken_eventsToken = -1;
static int hf_h248_T_auditToken_signalsToken = -1;
static int hf_h248_T_auditToken_digitMapToken = -1;
static int hf_h248_T_auditToken_statsToken = -1;
static int hf_h248_T_auditToken_observedEventsToken = -1;
static int hf_h248_T_auditToken_packagesToken = -1;
static int hf_h248_T_auditToken_eventBufferToken = -1;
static int hf_h248_NotifyCompletion_onTimeOut = -1;
static int hf_h248_NotifyCompletion_onInterruptByEvent = -1;
static int hf_h248_NotifyCompletion_onInterruptByNewSignalDescr = -1;
static int hf_h248_NotifyCompletion_otherReason = -1;
static int hf_h248_NotifyCompletion_onIteration = -1;
/*--- End of included file: packet-h248-hf.c ---*/
#line 69 "./asn1/h248/packet-h248-template.c"
/* Initialize the subtree pointers */
static gint ett_h248 = -1;
static gint ett_mtpaddress = -1;
static gint ett_packagename = -1;
static gint ett_codec = -1;
static gint ett_wildcard = -1;
static gint ett_h248_no_pkg = -1;
static gint ett_h248_no_sig = -1;
static gint ett_h248_no_evt = -1;
static int h248_tap = -1;
static gcp_hf_ett_t h248_arrel = {{-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1}};
static gint exported_pdu_tap = -1;
/*--- Included file: packet-h248-ett.c ---*/
#line 1 "./asn1/h248/packet-h248-ett.c"
static gint ett_h248_MegacoMessage = -1;
static gint ett_h248_AuthenticationHeader = -1;
static gint ett_h248_Message = -1;
static gint ett_h248_T_messageBody = -1;
static gint ett_h248_SEQUENCE_OF_Transaction = -1;
static gint ett_h248_MId = -1;
static gint ett_h248_DomainName = -1;
static gint ett_h248_IP4Address = -1;
static gint ett_h248_IP6Address = -1;
static gint ett_h248_Transaction = -1;
static gint ett_h248_TransactionRequest = -1;
static gint ett_h248_SEQUENCE_OF_ActionRequest = -1;
static gint ett_h248_TransactionPending = -1;
static gint ett_h248_TransactionReply = -1;
static gint ett_h248_T_transactionResult = -1;
static gint ett_h248_SEQUENCE_OF_ActionReply = -1;
static gint ett_h248_SegmentReply = -1;
static gint ett_h248_TransactionResponseAck = -1;
static gint ett_h248_TransactionAck = -1;
static gint ett_h248_ErrorDescriptor = -1;
static gint ett_h248_ActionRequest = -1;
static gint ett_h248_SEQUENCE_OF_CommandRequest = -1;
static gint ett_h248_ActionReply = -1;
static gint ett_h248_SEQUENCE_OF_CommandReply = -1;
static gint ett_h248_ContextRequest = -1;
static gint ett_h248_T_topologyReq = -1;
static gint ett_h248_SEQUENCE_OF_PropertyParm = -1;
static gint ett_h248_SEQUENCE_OF_ContextIDinList = -1;
static gint ett_h248_ContextAttrAuditRequest = -1;
static gint ett_h248_SEQUENCE_OF_IndAudPropertyParm = -1;
static gint ett_h248_SelectLogic = -1;
static gint ett_h248_CommandRequest = -1;
static gint ett_h248_Command = -1;
static gint ett_h248_CommandReply = -1;
static gint ett_h248_TopologyRequest = -1;
static gint ett_h248_AmmRequest = -1;
static gint ett_h248_SEQUENCE_OF_AmmDescriptor = -1;
static gint ett_h248_AmmDescriptor = -1;
static gint ett_h248_AmmsReply = -1;
static gint ett_h248_SubtractRequest = -1;
static gint ett_h248_AuditRequest = -1;
static gint ett_h248_AuditReply = -1;
static gint ett_h248_AuditResult = -1;
static gint ett_h248_TermListAuditResult = -1;
static gint ett_h248_TerminationAudit = -1;
static gint ett_h248_AuditReturnParameter = -1;
static gint ett_h248_AuditDescriptor = -1;
static gint ett_h248_T_auditToken = -1;
static gint ett_h248_SEQUENCE_OF_IndAuditParameter = -1;
static gint ett_h248_IndAuditParameter = -1;
static gint ett_h248_IndAudMediaDescriptor = -1;
static gint ett_h248_IndAudMediaDescriptorStreams = -1;
static gint ett_h248_SEQUENCE_OF_IndAudStreamDescriptor = -1;
static gint ett_h248_IndAudStreamDescriptor = -1;
static gint ett_h248_IndAudStreamParms = -1;
static gint ett_h248_IndAudLocalControlDescriptor = -1;
static gint ett_h248_IndAudPropertyParm = -1;
static gint ett_h248_IndAudLocalRemoteDescriptor = -1;
static gint ett_h248_IndAudPropertyGroup = -1;
static gint ett_h248_IndAudTerminationStateDescriptor = -1;
static gint ett_h248_IndAudEventsDescriptor = -1;
static gint ett_h248_IndAudEventBufferDescriptor = -1;
static gint ett_h248_IndAudSignalsDescriptor = -1;
static gint ett_h248_IndAudSeqSigList = -1;
static gint ett_h248_IndAudSignal = -1;
static gint ett_h248_IndAudDigitMapDescriptor = -1;
static gint ett_h248_IndAudStatisticsDescriptor = -1;
static gint ett_h248_IndAudPackagesDescriptor = -1;
static gint ett_h248_NotifyRequest = -1;
static gint ett_h248_NotifyReply = -1;
static gint ett_h248_ObservedEventsDescriptor = -1;
static gint ett_h248_SEQUENCE_OF_ObservedEvent = -1;
static gint ett_h248_ObservedEvent = -1;
static gint ett_h248_SEQUENCE_OF_EventParameter = -1;
static gint ett_h248_EventParameter = -1;
static gint ett_h248_EventPar_extraInfo = -1;
static gint ett_h248_EventParamValues = -1;
static gint ett_h248_ServiceChangeRequest = -1;
static gint ett_h248_ServiceChangeReply = -1;
static gint ett_h248_ServiceChangeResult = -1;
static gint ett_h248_TerminationID = -1;
static gint ett_h248_SEQUENCE_OF_WildcardField = -1;
static gint ett_h248_TerminationIDList = -1;
static gint ett_h248_MediaDescriptor = -1;
static gint ett_h248_T_streams = -1;
static gint ett_h248_SEQUENCE_OF_StreamDescriptor = -1;
static gint ett_h248_StreamDescriptor = -1;
static gint ett_h248_StreamParms = -1;
static gint ett_h248_LocalControlDescriptor = -1;
static gint ett_h248_PropertyParm = -1;
static gint ett_h248_SEQUENCE_OF_PropertyID = -1;
static gint ett_h248_PropParm_extraInfo = -1;
static gint ett_h248_LocalRemoteDescriptor = -1;
static gint ett_h248_SEQUENCE_OF_PropertyGroup = -1;
static gint ett_h248_PropertyGroup = -1;
static gint ett_h248_TerminationStateDescriptor = -1;
static gint ett_h248_MuxDescriptor = -1;
static gint ett_h248_SEQUENCE_OF_TerminationID = -1;
static gint ett_h248_EventsDescriptor = -1;
static gint ett_h248_SEQUENCE_OF_RequestedEvent = -1;
static gint ett_h248_RequestedEvent = -1;
static gint ett_h248_RegulatedEmbeddedDescriptor = -1;
static gint ett_h248_NotifyBehaviour = -1;
static gint ett_h248_RequestedActions = -1;
static gint ett_h248_EventDM = -1;
static gint ett_h248_SecondEventsDescriptor = -1;
static gint ett_h248_SEQUENCE_OF_SecondRequestedEvent = -1;
static gint ett_h248_SecondRequestedEvent = -1;
static gint ett_h248_SecondRequestedActions = -1;
static gint ett_h248_EventBufferDescriptor = -1;
static gint ett_h248_EventSpec = -1;
static gint ett_h248_SignalsDescriptor = -1;
static gint ett_h248_SignalRequest = -1;
static gint ett_h248_SeqSigList = -1;
static gint ett_h248_SEQUENCE_OF_Signal = -1;
static gint ett_h248_Signal = -1;
static gint ett_h248_SEQUENCE_OF_SigParameter = -1;
static gint ett_h248_NotifyCompletion = -1;
static gint ett_h248_SigParameter = -1;
static gint ett_h248_T_extraInfo = -1;
static gint ett_h248_SigParamValues = -1;
static gint ett_h248_ModemDescriptor = -1;
static gint ett_h248_SEQUENCE_OF_ModemType = -1;
static gint ett_h248_DigitMapDescriptor = -1;
static gint ett_h248_DigitMapValue = -1;
static gint ett_h248_ServiceChangeParm = -1;
static gint ett_h248_SCreasonValue = -1;
static gint ett_h248_ServiceChangeAddress = -1;
static gint ett_h248_ServiceChangeResParm = -1;
static gint ett_h248_ServiceChangeProfile = -1;
static gint ett_h248_PackagesDescriptor = -1;
static gint ett_h248_PackagesItem = -1;
static gint ett_h248_StatisticsDescriptor = -1;
static gint ett_h248_StatisticsParameter = -1;
static gint ett_h248_NonStandardData = -1;
static gint ett_h248_NonStandardIdentifier = -1;
static gint ett_h248_H221NonStandard = -1;
static gint ett_h248_TimeNotation = -1;
static gint ett_h248_Value = -1;
static gint ett_h248_AuditReplyV1 = -1;
static gint ett_h248_AuditResultV1 = -1;
static gint ett_h248_EventParameterV1 = -1;
static gint ett_h248_SigParameterV1 = -1;
/*--- End of included file: packet-h248-ett.c ---*/
#line 89 "./asn1/h248/packet-h248-template.c"
static expert_field ei_h248_errored_command = EI_INIT;
static expert_field ei_h248_transactionId64 = EI_INIT;
static expert_field ei_h248_context_id64 = EI_INIT;
static expert_field ei_h248_octet_string_expected = EI_INIT;
static dissector_table_t subdissector_table;
static int ss7pc_address_type = -1;
/* Gateway Control Protocol -- Context Tracking */
const value_string gcp_cmd_type[] = {
{ GCP_CMD_NONE, "NoCommand"},
{ GCP_CMD_ADD_REQ, "addReq"},
{ GCP_CMD_MOVE_REQ, "moveReq"},
{ GCP_CMD_MOD_REQ, "modReq"},
{ GCP_CMD_SUB_REQ, "subtractReq"},
{ GCP_CMD_AUDITCAP_REQ, "auditCapRequest"},
{ GCP_CMD_AUDITVAL_REQ, "auditValueRequest"},
{ GCP_CMD_NOTIFY_REQ, "notifyReq"},
{ GCP_CMD_SVCCHG_REQ, "serviceChangeReq"},
{ GCP_CMD_TOPOLOGY_REQ, "topologyReq"},
{ GCP_CMD_CTX_ATTR_AUDIT_REQ, "ctxAttrAuditReq"},
{ GCP_CMD_ADD_REPLY, "addReply"},
{ GCP_CMD_MOVE_REPLY, "moveReply"},
{ GCP_CMD_MOD_REPLY, "modReply"},
{ GCP_CMD_SUB_REPLY, "subtractReply"},
{ GCP_CMD_AUDITCAP_REPLY, "auditCapReply"},
{ GCP_CMD_AUDITVAL_REPLY, "auditValReply"},
{ GCP_CMD_NOTIFY_REPLY, "notifyReply"},
{ GCP_CMD_SVCCHG_REPLY, "serviceChangeReply"},
{ GCP_CMD_TOPOLOGY_REPLY, "topologyReply"},
{ 0, NULL }
};
const value_string gcp_term_types[] = {
{ GCP_TERM_TYPE_AAL1, "aal1" },
{ GCP_TERM_TYPE_AAL2, "aal2" },
{ GCP_TERM_TYPE_AAL1_STRUCT, "aal1struct" },
{ GCP_TERM_TYPE_IP_RTP, "ipRtp" },
{ GCP_TERM_TYPE_TDM, "tdm" },
{ 0, NULL }
};
static wmem_tree_t* gcp_msgs = NULL;
static wmem_tree_t* gcp_trxs = NULL;
static wmem_tree_t* gcp_ctxs_by_trx = NULL;
static wmem_tree_t* gcp_ctxs = NULL;
gcp_msg_t* gcp_msg(packet_info* pinfo, int o, gboolean keep_persistent_data) {
gcp_msg_t* m;
guint32 framenum = (guint32)pinfo->num;
guint32 offset = (guint32)o;
address* src = &(pinfo->src);
address* dst = &(pinfo->dst);
address* lo_addr;
address* hi_addr;
if (keep_persistent_data) {
wmem_tree_key_t key[3];
key[0].length = 1;
key[0].key = &(framenum);
key[1].length = 1;
key[1].key = &offset;
key[2].length = 0;
key[2].key =NULL;
if (( m = (gcp_msg_t *)wmem_tree_lookup32_array(gcp_msgs,key) )) {
m->committed = TRUE;
return m;
} else {
m = wmem_new(wmem_file_scope(), gcp_msg_t);
m->framenum = framenum;
m->frametime = pinfo->abs_ts;
m->trxs = NULL;
m->committed = FALSE;
wmem_tree_insert32_array(gcp_msgs,key,m);
}
} else {
m = wmem_new0(wmem_packet_scope(), gcp_msg_t);
m->framenum = framenum;
m->trxs = NULL;
m->committed = FALSE;
}
if (cmp_address(src, dst) < 0) {
lo_addr = src;
hi_addr = dst;
} else {
lo_addr = dst;
hi_addr = src;
}
switch(lo_addr->type) {
case AT_NONE:
m->lo_addr = 0;
m->hi_addr = 0;
break;
case AT_IPv4:
memcpy((guint8*)&(m->hi_addr),hi_addr->data,4);
memcpy((guint8*)&(m->lo_addr),lo_addr->data,4);
break;
default:
if (lo_addr->type == ss7pc_address_type) {
m->hi_addr = mtp3_pc_hash((const mtp3_addr_pc_t *)hi_addr->data);
m->lo_addr = mtp3_pc_hash((const mtp3_addr_pc_t *)lo_addr->data);
}
else {
/* XXX: heuristic and error prone */
m->hi_addr = g_str_hash(address_to_str(wmem_packet_scope(), hi_addr));
m->lo_addr = g_str_hash(address_to_str(wmem_packet_scope(), lo_addr));
}
break;
}
return m;
}
gcp_trx_t* gcp_trx(gcp_msg_t* m ,guint32 t_id , gcp_trx_type_t type, gboolean keep_persistent_data) {
gcp_trx_t* t = NULL;
gcp_trx_msg_t* trxmsg;
if ( !m ) return NULL;
if (keep_persistent_data) {
if (m->committed) {
for ( trxmsg = m->trxs; trxmsg; trxmsg = trxmsg->next) {
if (trxmsg->trx && trxmsg->trx->id == t_id) {
return trxmsg->trx;
}
}
DISSECTOR_ASSERT_NOT_REACHED();
} else {
wmem_tree_key_t key[4];
key[0].length = 1;
key[0].key = &(m->hi_addr);
key[1].length = 1;
key[1].key = &(m->lo_addr);
key[2].length = 1;
key[2].key = &(t_id);
key[3].length = 0;
key[3].key = NULL;
trxmsg = wmem_new(wmem_file_scope(), gcp_trx_msg_t);
t = (gcp_trx_t *)wmem_tree_lookup32_array(gcp_trxs,key);
if (!t) {
t = wmem_new(wmem_file_scope(), gcp_trx_t);
t->initial = m;
t->id = t_id;
t->type = type;
t->pendings = 0;
t->error = 0;
t->cmds = NULL;
wmem_tree_insert32_array(gcp_trxs,key,t);
}
/* XXX: request, reply and ack + point to frames where they are */
switch ( type ) {
case GCP_TRX_PENDING:
t->pendings++;
break;
default:
break;
}
}
} else {
t = wmem_new(wmem_packet_scope(), gcp_trx_t);
trxmsg = wmem_new(wmem_packet_scope(), gcp_trx_msg_t);
t->initial = NULL;
t->id = t_id;
t->type = type;
t->pendings = 0;
t->error = 0;
t->cmds = NULL;
}
DISSECTOR_ASSERT(trxmsg);
trxmsg->trx = t;
trxmsg->next = NULL;
trxmsg->last = trxmsg;
if (m->trxs) {
m->trxs->last = m->trxs->last->next = trxmsg;
} else {
m->trxs = trxmsg;
}
return t;
}
gcp_ctx_t* gcp_ctx(gcp_msg_t* m, gcp_trx_t* t, guint32 c_id, gboolean persistent) {
gcp_ctx_t* context = NULL;
gcp_ctx_t** context_p = NULL;
if ( !m || !t ) return NULL;
if (persistent) {
wmem_tree_key_t ctx_key[4];
wmem_tree_key_t trx_key[4];
ctx_key[0].length = 1;
ctx_key[0].key = &(m->hi_addr);
ctx_key[1].length = 1;
ctx_key[1].key = &(m->lo_addr);
ctx_key[2].length = 1;
ctx_key[2].key = &(c_id);
ctx_key[3].length = 0;
ctx_key[3].key = NULL;
trx_key[0].length = 1;
trx_key[0].key = &(m->hi_addr);
trx_key[1].length = 1;
trx_key[1].key = &(m->lo_addr);
trx_key[2].length = 1;
trx_key[2].key = &(t->id);
trx_key[3].length = 0;
trx_key[3].key = NULL;
if (m->committed) {
if (( context = (gcp_ctx_t *)wmem_tree_lookup32_array(gcp_ctxs_by_trx,trx_key) )) {
return context;
} if ((context_p = (gcp_ctx_t **)wmem_tree_lookup32_array(gcp_ctxs,ctx_key))) {
context = *context_p;
do {
if (context->initial->framenum <= m->framenum) {
return context;
}
} while(( context = context->prev ));
DISSECTOR_ASSERT(! "a context should exist");
}
} else {
if (c_id == CHOOSE_CONTEXT) {
if (! ( context = (gcp_ctx_t *)wmem_tree_lookup32_array(gcp_ctxs_by_trx,trx_key))) {
context = wmem_new(wmem_file_scope(), gcp_ctx_t);
context->initial = m;
context->cmds = NULL;
context->id = c_id;
context->terms.last = &(context->terms);
context->terms.next = NULL;
context->terms.term = NULL;
wmem_tree_insert32_array(gcp_ctxs_by_trx,trx_key,context);
}
} else {
if (( context = (gcp_ctx_t *)wmem_tree_lookup32_array(gcp_ctxs_by_trx,trx_key) )) {
if (( context_p = (gcp_ctx_t **)wmem_tree_lookup32_array(gcp_ctxs,ctx_key) )) {
if (context != *context_p) {
if(context->id != CHOOSE_CONTEXT) {
context = wmem_new(wmem_file_scope(), gcp_ctx_t);
}
context->initial = m;
context->id = c_id;
context->cmds = NULL;
context->terms.last = &(context->terms);
context->terms.next = NULL;
context->terms.term = NULL;
context->prev = *context_p;
*context_p = context;
}
} else {
context_p = wmem_new(wmem_file_scope(), gcp_ctx_t*);
*context_p = context;
context->initial = m;
context->id = c_id;
wmem_tree_insert32_array(gcp_ctxs,ctx_key,context_p);
}
} else if (! ( context_p = (gcp_ctx_t**)wmem_tree_lookup32_array(gcp_ctxs,ctx_key) )) {
context = wmem_new(wmem_file_scope(), gcp_ctx_t);
context->initial = m;
context->id = c_id;
context->cmds = NULL;
context->terms.last = &(context->terms);
context->terms.next = NULL;
context->terms.term = NULL;
context_p = wmem_new(wmem_file_scope(), gcp_ctx_t*);
*context_p = context;
wmem_tree_insert32_array(gcp_ctxs,ctx_key,context_p);
} else {
context = *context_p;
}
}
}
} else {
context = wmem_new(wmem_packet_scope(), gcp_ctx_t);
context->initial = m;
context->cmds = NULL;
context->id = c_id;
context->terms.last = &(context->terms);
context->terms.next = NULL;
context->terms.term = NULL;
}
return context;
}
gcp_cmd_t* gcp_cmd(gcp_msg_t* m, gcp_trx_t* t, gcp_ctx_t* c, gcp_cmd_type_t type, guint offset, gboolean persistent) {
gcp_cmd_t* cmd;
gcp_cmd_msg_t* cmdtrx;
gcp_cmd_msg_t* cmdctx;
if ( !m || !t || !c ) return NULL;
if (persistent) {
if (m->committed) {
DISSECTOR_ASSERT(t->cmds != NULL);
for (cmdctx = t->cmds; cmdctx; cmdctx = cmdctx->next) {
cmd = cmdctx->cmd;
if (cmd->msg == m && cmd->offset == offset) {
return cmd;
}
}
DISSECTOR_ASSERT(!"called for a command that does not exist!");
return NULL;
} else {
cmd = wmem_new(wmem_file_scope(), gcp_cmd_t);
cmdtrx = wmem_new(wmem_file_scope(), gcp_cmd_msg_t);
cmdctx = wmem_new(wmem_file_scope(), gcp_cmd_msg_t);
}
} else {
cmd = wmem_new(wmem_packet_scope(), gcp_cmd_t);
cmdtrx = wmem_new(wmem_packet_scope(), gcp_cmd_msg_t);
cmdctx = wmem_new(wmem_packet_scope(), gcp_cmd_msg_t);
}
cmd->type = type;
cmd->offset = offset;
cmd->terms.term = NULL;
cmd->terms.next = NULL;
cmd->terms.last = &(cmd->terms);
cmd->str = NULL;
cmd->msg = m;
if ((type != GCP_CMD_NONE) && (!persistent)){
cmd->str = val_to_str_const(type, gcp_cmd_type, "Unknown");
}
cmd->trx = t;
cmd->ctx = c;
cmd->error = 0;
cmdctx->cmd = cmdtrx->cmd = cmd;
cmdctx->next = cmdtrx->next = NULL;
cmdctx->last = cmdtrx->last = NULL;
if (t->cmds) {
t->cmds->last->next = cmdtrx;
t->cmds->last = cmdtrx;
} else {
t->cmds = cmdtrx;
t->cmds->last = cmdtrx;
}
if (c->cmds) {
c->cmds->last->next = cmdctx;
c->cmds->last = cmdctx;
} else {
c->cmds = cmdctx;
c->cmds->last = cmdctx;
}
return cmd;
}
gcp_term_t* gcp_cmd_add_term(gcp_msg_t* m, gcp_trx_t* tr, gcp_cmd_t* c, gcp_term_t* t, gcp_wildcard_t wildcard, gboolean persistent) {
gcp_terms_t* ct;
gcp_terms_t* ct2;
static gcp_term_t all_terms = {"$",(const guint8*)"",1,GCP_TERM_TYPE_UNKNOWN,NULL,NULL,NULL};
if ( !c ) return NULL;
if ( wildcard == GCP_WILDCARD_CHOOSE) {
return &all_terms;
}
if (persistent) {
if ( c->msg->committed ) {
if (wildcard == GCP_WILDCARD_ALL) {
for (ct = c->ctx->terms.next; ct; ct = ct->next) {
/* XXX not handling more wilcards in one msg */
if ( ct->term->start == m ) {
return ct->term;
}
}
return NULL;
} else {
for (ct = c->ctx->terms.next; ct; ct = ct->next) {
if ( g_str_equal(ct->term->str,t->str) ) {
return ct->term;
}
}
return NULL;
}
} else {
for (ct = c->ctx->terms.next; ct; ct = ct->next) {
if ( g_str_equal(ct->term->str,t->str) || ct->term->start == m) {
break;
}
}
if ( ! ct ) {
if (wildcard == GCP_WILDCARD_ALL) {
ct = wmem_new(wmem_file_scope(), gcp_terms_t);
ct->next = NULL;
ct->term = wmem_new0(wmem_file_scope(), gcp_term_t);
ct->term->start = m;
ct->term->str = "*";
ct->term->buffer = NULL;
ct->term->len = 0;
c->terms.last = c->terms.last->next = ct;
ct2 = wmem_new0(wmem_file_scope(), gcp_terms_t);
ct2->term = ct->term;
c->ctx->terms.last->next = ct2;
c->ctx->terms.last = ct2;
return ct->term;
} else {
for (ct = c->ctx->terms.next; ct; ct = ct->next) {
/* XXX not handling more wilcards in one msg */
if ( ct->term->buffer == NULL && tr->cmds->cmd->msg == ct->term->start ) {
ct->term->str = wmem_strdup(wmem_file_scope(), t->str);
ct->term->buffer = (const guint8 *)wmem_memdup(wmem_file_scope(), t->buffer,t->len);
ct->term->len = t->len;
ct2 = wmem_new0(wmem_file_scope(), gcp_terms_t);
ct2->term = ct->term;
c->terms.last = c->terms.last->next = ct2;
return ct->term;
}
if ( g_str_equal(ct->term->str,t->str) ) {
ct2 = wmem_new0(wmem_file_scope(), gcp_terms_t);
ct2->term = ct->term;
c->terms.last = c->terms.last->next = ct2;
return ct->term;
}
}
ct = wmem_new(wmem_file_scope(), gcp_terms_t);
ct->next = NULL;
ct->term = wmem_new0(wmem_file_scope(), gcp_term_t);
ct->term->start = m;
ct->term->str = wmem_strdup(wmem_file_scope(), t->str);
ct->term->buffer = (const guint8 *)wmem_memdup(wmem_file_scope(), t->buffer,t->len);
ct->term->len = t->len;
ct2 = wmem_new0(wmem_file_scope(), gcp_terms_t);
ct2->term = ct->term;
c->terms.last = c->terms.last->next = ct2;
ct2 = wmem_new0(wmem_file_scope(), gcp_terms_t);
ct2->term = ct->term;
c->ctx->terms.last = c->ctx->terms.last->next = ct2;
return ct->term;
}
} else {
ct2 = wmem_new0(wmem_file_scope(), gcp_terms_t);
ct2->term = ct->term;
c->terms.last = c->terms.last->next = ct2;
return ct->term;
}
DISSECTOR_ASSERT_NOT_REACHED();
}
} else {
ct = wmem_new(wmem_packet_scope(), gcp_terms_t);
ct->term = t;
ct->next = NULL;
c->terms.last = c->terms.last->next = ct;
return t;
}
}
static const gchar* gcp_cmd_to_str(gcp_cmd_t* c, gboolean persistent) {
const gchar* s;
gcp_terms_t* term;
if ( !c ) return "-";
switch (c->type) {
case GCP_CMD_NONE:
return "-";
break;
case GCP_CMD_ADD_REQ:
s = "AddReq {";
break;
case GCP_CMD_MOVE_REQ:
s = "MoveReq {";
break;
case GCP_CMD_MOD_REQ:
s = "ModReq {";
break;
case GCP_CMD_SUB_REQ:
s = "SubReq {";
break;
case GCP_CMD_AUDITCAP_REQ:
s = "AuditCapReq {";
break;
case GCP_CMD_AUDITVAL_REQ:
s = "AuditValReq {";
break;
case GCP_CMD_NOTIFY_REQ:
s = "NotifyReq {";
break;
case GCP_CMD_SVCCHG_REQ:
s = "SvcChgReq {";
break;
case GCP_CMD_TOPOLOGY_REQ:
s = "TopologyReq {";
break;
case GCP_CMD_CTX_ATTR_AUDIT_REQ:
s = "CtxAttribAuditReq {";
break;
case GCP_CMD_ADD_REPLY:
s = "AddReply {";
break;
case GCP_CMD_MOVE_REPLY:
s = "MoveReply {";
break;
case GCP_CMD_MOD_REPLY:
s = "ModReply {";
break;
case GCP_CMD_SUB_REPLY:
s = "SubReply {";
break;
case GCP_CMD_AUDITCAP_REPLY:
s = "AuditCapReply {";
break;
case GCP_CMD_AUDITVAL_REPLY:
s = "AuditValReply {";
break;
case GCP_CMD_NOTIFY_REPLY:
s = "NotifyReply {";
break;
case GCP_CMD_SVCCHG_REPLY:
s = "SvcChgReply {";
break;
case GCP_CMD_TOPOLOGY_REPLY:
s = "TopologyReply {";
break;
case GCP_CMD_REPLY:
s = "ActionReply {";
break;
case GCP_CMD_OTHER_REQ:
s = "Request {";
break;
default:
s = "-";
break;
}
for (term = c->terms.next; term; term = term->next) {
s = wmem_strdup_printf(wmem_packet_scope(), "%s %s",s,term->term->str);
}
if (c->error) {
s = wmem_strdup_printf(wmem_packet_scope(), "%s Error=%i",s,c->error);
}
s = wmem_strdup_printf(wmem_packet_scope(), "%s }", s);
if (persistent) {
if (! c->str) c->str = wmem_strdup(wmem_file_scope(), s);
} else {
c->str = s;
}
return s;
}
static const gchar* gcp_trx_to_str(gcp_msg_t* m, gcp_trx_t* t, gboolean persistent) {
gchar* s;
gcp_cmd_msg_t* c;
if ( !m || !t ) return "-";
s = wmem_strdup_printf(wmem_packet_scope(), "T %x { ",t->id);
if (t->cmds) {
if (t->cmds->cmd->ctx) {
s = wmem_strdup_printf(wmem_packet_scope(), "%s C %x {",s,t->cmds->cmd->ctx->id);
for (c = t->cmds; c; c = c->next) {
if (c->cmd->msg == m) {
s = wmem_strdup_printf(wmem_packet_scope(), "%s %s",s,gcp_cmd_to_str(c->cmd,persistent));
}
}
s = wmem_strdup_printf(wmem_packet_scope(), "%s %s",s,"}");
}
}
if (t->error) {
s = wmem_strdup_printf(wmem_packet_scope(), "%s Error=%i",s,t->error);
}
return wmem_strdup_printf(wmem_packet_scope(), "%s %s",s,"}");
}
const gchar* gcp_msg_to_str(gcp_msg_t* m, gboolean persistent) {
gcp_trx_msg_t* t;
const gchar* s = "";
if ( !m ) return "-";
for (t = m->trxs; t; t = t->next) {
s = wmem_strdup_printf(wmem_packet_scope(), "%s %s",s,gcp_trx_to_str(m,t->trx, persistent));
}
return s;
}
typedef struct _gcp_ctxs_t {
struct _gcp_ctx_t* ctx;
struct _gcp_ctxs_t* next;
} gcp_ctxs_t;
/*static const gchar* trx_types[] = {"None","Req","Reply","Pending","Ack"};*/
void gcp_analyze_msg(proto_tree* gcp_tree, packet_info* pinfo, tvbuff_t* gcp_tvb, gcp_msg_t* m, gcp_hf_ett_t* ids, expert_field* command_err) {
gcp_trx_msg_t* t;
gcp_ctxs_t contexts = {NULL,NULL};
gcp_ctxs_t* ctx_node;
gcp_cmd_msg_t* c;
for (t = m->trxs; t; t = t->next) {
for (c = t->trx->cmds; c; c = c->next) {
gcp_ctx_t* ctx = c->cmd->ctx;
for (ctx_node = contexts.next; ctx_node; ctx_node = ctx_node->next) {
if (ctx_node->ctx->id == ctx->id) {
break;
}
}
if (! ctx_node) {
ctx_node = wmem_new(wmem_packet_scope(), gcp_ctxs_t);
ctx_node->ctx = ctx;
ctx_node->next = contexts.next;
contexts.next = ctx_node;
}
}
}
for (ctx_node = contexts.next; ctx_node; ctx_node = ctx_node->next) {
gcp_ctx_t* ctx = ctx_node->ctx;
proto_item* ctx_item = proto_tree_add_uint(gcp_tree,ids->hf.ctx,gcp_tvb,0,0,ctx->id);
proto_tree* ctx_tree = proto_item_add_subtree(ctx_item,ids->ett.ctx);
gcp_terms_t *ctx_term;
proto_item_set_generated(ctx_item);
if (ctx->cmds) {
proto_tree* history_tree = proto_tree_add_subtree(ctx_tree,gcp_tvb,0,0,ids->ett.ctx_cmds,NULL,"[ Command History ]");
for (c = ctx->cmds; c; c = c->next) {
proto_item* cmd_item = proto_tree_add_uint(history_tree,ids->hf.ctx_cmd,gcp_tvb,0,0,c->cmd->msg->framenum);
if (c->cmd->str) proto_item_append_text(cmd_item," %s ",c->cmd->str);
proto_item_set_generated(cmd_item);
if (c->cmd->error) {
expert_add_info(pinfo, cmd_item, command_err);
}
}
}
if (( ctx_term = ctx->terms.next )) {
proto_tree* terms_tree = proto_tree_add_subtree(ctx_tree,gcp_tvb,0,0,ids->ett.ctx_terms,NULL,"[ Terminations Used ]");
for (; ctx_term; ctx_term = ctx_term->next ) {
if ( ctx_term->term && ctx_term->term->str) {
proto_item* pi = proto_tree_add_string(terms_tree,ids->hf.ctx_term,gcp_tvb,0,0,ctx_term->term->str);
proto_tree* term_tree = proto_item_add_subtree(pi,ids->ett.ctx_term);
proto_item_set_generated(pi);
if (ctx_term->term->type) {
pi = proto_tree_add_uint(term_tree,ids->hf.ctx_term_type,gcp_tvb,0,0,ctx_term->term->type);
proto_item_set_generated(pi);
}
if (ctx_term->term->bir) {
pi = proto_tree_add_string(term_tree,ids->hf.ctx_term_bir,gcp_tvb,0,0,ctx_term->term->bir);
proto_item_set_generated(pi);
}
if (ctx_term->term->nsap) {
pi = proto_tree_add_string(term_tree,ids->hf.ctx_term_nsap,gcp_tvb,0,0,ctx_term->term->nsap);
proto_item_set_generated(pi);
}
if (ctx_term->term->bir && ctx_term->term->nsap) {
gchar* tmp_key = wmem_strdup_printf(wmem_packet_scope(), "%s:%s",ctx_term->term->nsap,ctx_term->term->bir);
gchar* key = g_ascii_strdown(tmp_key, -1);
alcap_tree_from_bearer_key(term_tree, gcp_tvb, pinfo, key);
g_free(key);
}
}
}
}
}
}
/* END Gateway Control Protocol -- Context Tracking */
#define H248_PORT 2945
static gboolean keep_persistent_data = FALSE;
static gboolean h248_desegment = TRUE;
static proto_tree *h248_tree;
static dissector_handle_t h248_handle;
static dissector_handle_t h248_term_handle;
static dissector_handle_t h248_tpkt_handle;
/* Forward declarations */
static int dissect_h248_ServiceChangeReasonStr(gboolean implicit_tag, tvbuff_t *tvb, int offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index);
/* h248v1 support */
static int dissect_h248_AuditReplyV1(gboolean implicit_tag, tvbuff_t *tvb, int offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index);
static int dissect_h248_EventParameterV1(gboolean implicit_tag, tvbuff_t *tvb, int offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index);
static int dissect_h248_SigParameterV1(gboolean implicit_tag, tvbuff_t *tvb, int offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index);
static int dissect_h248_SigParamValueV1(gboolean implicit_tag, tvbuff_t *tvb, int offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index);
#if 0
static const value_string context_id_type[] = {
{NULL_CONTEXT,"0 (Null Context)"},
{CHOOSE_CONTEXT,"$ (Choose Context)"},
{ALL_CONTEXTS,"* (All Contexts)"},
{0,NULL}
};
#endif
/* the following value_strings are used to build defalut packages.
To add additional detail to a package, build a register a h248_package_t structure
*/
static const value_string base_package_name_vals[] = {
{ 0x0000, "Media stream properties H.248.1 Annex C" },
{ 0x0001, "Generic H.248.1 Annex E" },
{ 0x0002, "root H.248.1 Annex E" },
{ 0x0003, "tonegen H.248.1 Annex E" },
{ 0x0004, "tonedet H.248.1 Annex E" },
{ 0x0005, "dg H.248.1 Annex E" },
{ 0x0006, "dd H.248.1 Annex E" },
{ 0x0007, "cg H.248.1 Annex E" },
{ 0x0008, "cd H.248.1 Annex E" },
{ 0x0009, "al H.248.1 Annex E" },
{ 0x000a, "ct H.248.1 Annex E" },
{ 0x000b, "nt H.248.1 Annex E" },
{ 0x000c, "rtp H.248.1 Annex E" },
{ 0x000d, "tdmc H.248.1 Annex E" },
{ 0x000e, "ftmd H.248.1 Annex E" },
{ 0x000f, "txc H.248.2" }, /* H.248.2 */
{ 0x0010, "txp H.248.2" },
{ 0x0011, "ctyp H.248.2" },
{ 0x0012, "fax H.248.2" },
{ 0x0013, "ipfax H.248.2" },
{ 0x0014, "dis H.248.3" }, /* H.248.3 */
{ 0x0015, "key H.248.3" },
{ 0x0016, "kp H.248.3" },
{ 0x0017, "labelkey H.248.3" },
{ 0x0018, "kf H.248.3" },
{ 0x0019, "ind H.248.3" },
{ 0x001a, "ks H.248.3" },
{ 0x001b, "anci H.248.3" },
{ 0x001c, "dtd H.248.6" }, /* H.248.6 */
{ 0x001d, "an H.248.7" }, /* H.248.7 */
{ 0x001e, "Bearer Characteristics Q.1950 Annex A" }, /* Q.1950 Annex A */
{ 0x001f, "Bearer Network Connection Cut Q.1950 Annex A" },
{ 0x0020, "Reuse Idle Q.1950 Annex A" },
{ 0x0021, "Generic Bearer Connection Q.1950 Annex A" },
{ 0x0022, "Bearer Control Tunnelling Q.1950 Annex A" },
{ 0x0023, "Basic Call Progress Tones Q.1950 Annex A" },
{ 0x0024, "Expanded Call Progress Tones Q.1950 Annex A" },
{ 0x0025, "Basic Services Tones Q.1950 Annex A" },
{ 0x0026, "Expanded Services Tones Q.1950 Annex A" },
{ 0x0027, "Intrusion Tones Q.1950 Annex A" },
{ 0x0028, "Business Tones Q.1950 Annex A" },
{ 0x0029, "Media Gateway Resource Congestion Handling H.248.10" }, /* H.248.10 */
{ 0x002a, "H245 package H248.12" }, /* H.248.12 */
{ 0x002b, "H323 bearer control package H.248.12" }, /* H.248.12 */
{ 0x002c, "H324 package H.248.12" }, /* H.248.12 */
{ 0x002d, "H245 command package H.248.12" }, /* H.248.12 */
{ 0x002e, "H245 indication package H.248.12" }, /* H.248.12 */
{ 0x002f, "3G User Plane" }, /* 3GPP TS 29.232 v4.1.0 */
{ 0x0030, "3G Circuit Switched Data" },
{ 0x0031, "3G TFO Control" },
{ 0x0032, "3G Expanded Call Progress Tones" },
{ 0x0033, "Advanced Audio Server (AAS Base)" }, /* H.248.9 */
{ 0x0034, "AAS Digit Collection" }, /* H.248.9 */
{ 0x0035, "AAS Recording" }, /* H.248.9 */
{ 0x0036, "AAS Segment Management" }, /* H.248.9 */
{ 0x0037, "Quality Alert Ceasing" }, /* H.248.13 */
{ 0x0038, "Conferencing Tones Generation" }, /* H.248.27 */
{ 0x0039, "Diagnostic Tones Generation" }, /* H.248.27 */
{ 0x003a, "Carrier Tones Generation Package H.248.23" }, /* H.248.27 */
{ 0x003b, "Enhanced Alerting Package H.248.23" }, /* H.248.23 */
{ 0x003c, "Analog Display Signalling Package H.248.23" }, /* H.248.23 */
{ 0x003d, "Multi-Frequency Tone Generation Package H.248.24" }, /* H.248.24 */
{ 0x003e, "H.248.23Multi-Frequency Tone Detection Package H.248.24" }, /* H.248.24 */
{ 0x003f, "Basic CAS Package H.248.25" }, /* H.248.25 */
{ 0x0040, "Robbed Bit Signalling Package H.248.25" }, /* H.248.25 */
{ 0x0041, "Operator Services and Emergency Services Package H.248.25" },
{ 0x0042, "Operator Services Extension Package H.248.25" },
{ 0x0043, "Extended Analog Line Supervision Package H.248.26" },
{ 0x0044, "Automatic Metering Package H.248.26" },
{ 0x0045, "Inactivity Timer Package H.248.14" },
{ 0x0046, "3G Modification of Link Characteristics Bearer Capability" }, /* 3GPP TS 29.232 v4.4.0 */
{ 0x0047, "Base Announcement Syntax H.248.9" },
{ 0x0048, "Voice Variable Syntax H.248.9" },
{ 0x0049, "Announcement Set Syntax H.248.9" },
{ 0x004a, "Phrase Variable Syntax H.248.9" },
{ 0x004b, "Basic NAS package" },
{ 0x004c, "NAS incoming package" },
{ 0x004d, "NAS outgoing package" },
{ 0x004e, "NAS control package" },
{ 0x004f, "NAS root package" },
{ 0x0050, "Profile Handling Package H.248.18" },
{ 0x0051, "Media Gateway Overload Control Package H.248.11" },
{ 0x0052, "Extended DTMF Detection Package H.248.16" },
{ 0x0053, "Quiet Termination Line Test" },
{ 0x0054, "Loopback Line Test Response" }, /* H.248.17 */
{ 0x0055, "ITU 404Hz Line Test" }, /* H.248.17 */
{ 0x0056, "ITU 816Hz Line Test" }, /* H.248.17 */
{ 0x0057, "ITU 1020Hz Line Test" }, /* H.248.17 */
{ 0x0058, "ITU 2100Hz Disable Tone Line Test" }, /* H.248.17 */
{ 0x0059, "ITU 2100Hz Disable Echo Canceller Tone Line Test" }, /* H.248.17 */
{ 0x005a, "ITU 2804Hz Tone Line Test" }, /* H.248.17 */
{ 0x005b, "ITU Noise Test Tone Line Test" }, /* H.248.17 */
{ 0x005c, "ITU Digital Pseudo Random Test Line Test" }, /* H.248.17 */
{ 0x005d, "ITU ATME No.2 Test Line Response" }, /* H.248.17 */
{ 0x005e, "ANSI 1004Hz Test Tone Line Test" }, /* H.248.17 */
{ 0x005f, "ANSI Test Responder Line Test" }, /* H.248.17 */
{ 0x0060, "ANSI 2225Hz Test Progress Tone Line Test" }, /* H.248.17 */
{ 0x0061, "ANSI Digital Test Signal Line Test" }, /* H.248.17 */
{ 0x0062, "ANSI Inverting Loopback Line Test Response" }, /* H.248.17 */
{ 0x0063, "Extended H.324 Packages H.248.12 Annex A" },
{ 0x0064, "Extended H.245 Command Package H.248.12 Annex A" },
{ 0x0065, "Extended H.245 Indication Package H.248.12 Annex A" },
{ 0x0066, "Enhanced DTMF Detection Package H.248.16" },
{ 0x0067, "Connection Group Identity Package Q.1950 Annex E" },
{ 0x0068, "CTM Text Transport 3GPP TS 29.232 v5.2.0" },
{ 0x0069, "SPNE Control Package Q.115.0" },
{ 0x006a, "Semi-permanent Connection Package H.248.21" },
{ 0x006b, "Shared Risk Group Package H.248.22" },
{ 0x006c, "isuptn Annex B of ITU-T Rec. J.171" },
{ 0x006d, "Basic CAS Addressing Package H.248.25" },
{ 0x006e, "Floor Control Package H.248.19" },
{ 0x006f, "Indication of Being Viewed Package H.248.19" },
{ 0x0070, "Volume Control Package H.248.19" },
{ 0x0071, "UNASSIGNED" },
{ 0x0072, "Volume Detection Package H.248.19" },
{ 0x0073, "Volume Level Mixing Package H.248.19" },
{ 0x0074, "Mixing Volume Level Control Package H.248.19" },
{ 0x0075, "Voice Activated Video Switch Package H.248.19" },
{ 0x0076, "Lecture Video Mode Package H.248.19" },
{ 0x0077, "Contributing Video Source Package H.248.19" },
{ 0x0078, "Video Window Package H.248.19" },
{ 0x0079, "Tiled Window Package H.248.19" },
{ 0x007a, "Adaptive Jitter Buffer Package H.248.31" },
{ 0x007b, "International CAS Package H.248.28" },
{ 0x007c, "CAS Blocking Package H.248.28" },
{ 0x007d, "International CAS Compelled Package H.248.29" },
{ 0x007e, "International CAS Compelled with Overlap Package H.248.29" },
{ 0x007f, "International CAS Compelled with End-to-end Package H.248.29" },
{ 0x0080, "RTCP XR Package H.248.30" },
{ 0x0081, "RTCP XR Burst Metrics Package H.248.30" },
{ 0x0082, "threegcsden 3G Circuit Switched Data" }, /* 3GPP TS 29.232 v5.6.0 */
{ 0x0083, "threegiptra 3G Circuit Switched Data" }, /* 3GPP TS 29.232 v5.6.0 */
{ 0x0084, "threegflex 3G Circuit Switched Data" }, /* 3GPP TS 29.232 v5.6.0 */
{ 0x0085, "H.248 PCMSB" },
{ 0x008a, "TIPHON Extended H.248/MEGACO Package" }, /* ETSI specification TS 101 3 */
{ 0x008b, "Differentiated Services Package" }, /* Annex A of ETSI TS 102 333 */
{ 0x008c, "Gate Management Package" }, /* Annex B of ETSI TS 102 333 */
{ 0x008d, "Traffic Management Package" }, /* Annex C of ETSI TS 102 333 */
{ 0x008e, "Gate Recovery Information Package" }, /* Annex D of ETSI TS 102 333 */
{ 0x008f, "NAT Traversal Package" }, /* Annex E of ETSI TS 102 333 */
{ 0x0090, "MPLS Package" }, /* Annex F of ETSI TS 102 333 */
{ 0x0091, "VLAN Package" }, /* Annex G of ETSI TS 102 333 */
{ 0x0092, "Detailed Congestion Reporting Package" }, /* H.248.32 */
{ 0x0093, "Stimulus Analogue Lines Package" }, /* H.248.34 */
{ 0x0094, "icascgen" }, /* H.248.29 Annex B */
{ 0x0095, "Coin Operated Phone Control Package" }, /* H.248.35 */
{ 0x0096, "Metering Pulse Detection Package" }, /* H.248.26 Amendment 1 */
{ 0x0097, "Trace Package" }, /* 3GPP TS 29.232 v6.3.0 */
{ 0x0098, "Hanging Termination Package" }, /* H.248.36 */
{ 0x0099, "IP NAPT Traversal Package" }, /* H.248.37 */
{ 0x009a, "Notification Behaviour Package" }, /* H.248.1v3 */
{ 0x009b, "Base Context Package" }, /* H.248.38 */
{ 0x009c, "Application Data Inactivity Detection Package" }, /* H.248.40 */
{ 0x009d, "Domain Connection Package " }, /* H.248.41 */
{ 0x009e, "Digital Circuit Multiplication Equipment Package" }, /* H.248.42 */
{ 0x009f, "Multi-level Precedence and Pre-emption Package" }, /* H.248.44 */
{ 0x00a0, "MGC Information Package" }, /* H.248.45 */
{ 0x00a1, "Text Overlay Package" }, /* H.248.19 Amendment 1 */
{ 0x00a2, "Border and Background Package" }, /* H.248.19 Amendment 1 */
{ 0x00a3, "Segmentation Package" }, /* H.248.1v3 */
{ 0x00a4, "ETSI notification behaviour package" }, /* ETSI ES 283 039-3 */
{ 0x00a5, "ETSI notification rate package" }, /* ETSI ES 283 039-4 */
{ 0x00a6, "Automatic Speech Recognition Package" }, /* H.248.9 Amendment 1 */
{ 0x00a7, "Set extension to basic syntax for TTS enhancement Package" },/* H.248.9 Amendment 1 */
{ 0x00a8, "Advanced audio server base package for TTS enhancement" }, /* H.248.9 Amendment 1 */
{ 0x00a9, "Multimedia Play Package" }, /* H.248.9 Amendment 1 */
{ 0x00aa, "Floor Status Detection Package" }, /* H.248.19 Amendment 2 */
{ 0x00ab, "Floor Control Policy Package" }, /* H.248.19 Amendment 2 */
{ 0x00ac, "Address Reporting Package" }, /* H.248.37 Amendment 1 */
{ 0x00ad, "Connection Capability Control Package" }, /* H.248.46 */
{ 0x00ae, "Statistic Conditional Reporting Package" }, /* H.248.47 Amendment 1 */
{ 0x00af, "RTCP HR QoS Statistics Package" }, /* H.248.48 */
{ 0x00b0, "Received RTCP XR Package" }, /* H.248.30 (01/2007) */
{ 0x00b1, "Received RTCP XR Burst Metrics Package" }, /* H.248.30 (01/2007) */
{ 0x00b2, "ASCI Group call package" }, /* 3GPP TS 29.232 v7.4.0 */
{ 0x00b3, "Multimedia Recording Package" }, /* H.248.9 Amendment 1 */
{ 0x00b4, "H.245 Transport Package" }, /* H.248.12 Amendment 2 */
{ 0x00b5, "RTCP Handling package" }, /* H.248.57 */
{ 0x00b6, "Gate Management - Outgoing Destination Address/Port Filtering Package" },/* H.248.43 */
{ 0x00b7, "Gate Management - Incoming Protocol Filtering Package" }, /* H.248.43 */
{ 0x00b8, "Gate Management - Outgoing Protocol Filtering Package" }, /* H.248.43 */
{ 0x00b9, "Gate Management - Incoming Filtering Behaviour Package" }, /* H.248.43 */
{ 0x00ba, "Gate Management - Outgoing Filtering Behaviour Package" }, /* H.248.43 */
{ 0x00bb, "Session Description Protocol RFC Package" }, /* H.248.49 */
{ 0x00bc, "Session Description Protocol Capabilities Package" }, /* H.248.49 */
{ 0x00bd, "NAT Traversal Toolkit - STUN Base Package" }, /* H.248.50 */
{ 0x00be, "NAT Traversal Toolkit - MG STUN Client Package" }, /* H.248.50 */
{ 0x00bf, "NAT Traversal Toolkit - MG TURN Client Package" }, /* H.248.50 */
{ 0x00c0, "NAT Traversal Toolkit - MGC STUN Client Package" }, /* H.248.50 */
{ 0x00c1, "NAT Traversal Toolkit - STUN Information Package" }, /* H.248.50 */
{ 0x00c2, "NAT Traversal Toolkit - MG Act-as STUN Server Package" }, /* H.248.50 */
{ 0x00c3, "NAT Traversal Toolkit - Originate STUN Continuity Check Package" }, /* H.248.50 */
{ 0x00c4, "NAT Traversal Toolkit - MGC Originated STUN Request Package" }, /* H.248.50 */
{ 0x00c5, "NAT Traversal Toolkit - RTP NOOP Request Package" }, /* H.248.50 */
{ 0x00c6, "Termination Connection Model Package" }, /* H.248.51 */
{ 0x00c7, "QoS Class Package" }, /* H.248.52 */
{ 0x00c8, "Traffic Policing Statistics Package" }, /* H.248.53 */
{ 0x00c9, "Packet Size Package" }, /* H.248.53 */
{ 0x00ca, "Pull Mode Package" }, /* H.248.55 */
{ 0x00cb, "RTP Application Data Package" }, /* H.248.58 */
{ 0x00cc, "Event Timestamp Notification Package" }, /* H.248.59 */
{ 0x00cd, "Resource Management Rules Package" }, /* H.248.63 */
{ 0x00ce, "Resource Management Configuration Package" }, /* H.248.63 */
{ 0x00cf, "Abstract Resource Management Packages" }, /* H.248.63 */
{ 0x00d0, "IP layer octets count statistics Package" }, /* H.248.61 */
{ 0x00d1, "Content of Communication Identity Package" }, /* H.248.60 */
{ 0x00d2, "RSVP extension package" }, /* H.248.65 */
{ 0x00d3, "GCP Transport Mode Indication Package" }, /* H.248.67 */
{ 0x00d4, "IP Router Package" }, /* H.248.64 */
{ 0x00d5, "Media Resource Identification Package" }, /* H.248.66 */
{ 0x00d6, "Range Format Support Package" }, /* H.248.66 */
{ 0x00d7, "Media Resource Description Expiry Package" }, /* H.248.66 */
{ 0x00d8, "Media Block Size Package" }, /* H.248.66 */
{ 0x00d9, "RTSP Media Resource Syntax Package" }, /* H.248.66 */
{ 0x00da, "RTSP Play Package" }, /* H.248.66 */
{ 0x00db, "Signal Pause Package" }, /* H.248.66 */
{ 0x00dc, "Data Delivery Speed Adjustme Package" }, /* H.248.66 */
{ 0x00dd, "Playback Relative Scale Adjustment Package" }, /* H.248.66 */
{ 0x00de, "RTP Information Package" }, /* H.248.66 */
{ 0x00df, "RTP Interleaving Package" }, /* H.248.66 */
{ 0x00e0, "IP Realm Availability Package" }, /* H.248.41 Amendment 1 */
{ 0x00e1, "General IP Header QoS Octet Package" }, /* H.248.52 */
{ 0x00e2, "Re-answer Package" }, /* H.248.62 */
{ 0x00e3, "3G Interface Type package" }, /* 3GPP TS 29.232 v8.4.0 */
{ 0x00e4, "Latch Statistics Package" }, /* H.248.37 */
{ 0x00e5, "Floor Control Signalling Package" }, /* H.248.19 Amendment 2 */
{ 0x00e6, "Include Participant in Mix Package" }, /* H.248.19 Amendment 2 */
{ 0x00e7, "Speaker Reporting Package" }, /* H.248.19 Amendment 2 */
{ 0x00e8, "IP Layer Packet Count Statistics Package" }, /* H.248.61 */
{ 0x00e9, "Removal of Digits and Tones Package" }, /* H.248.68 */
{ 0x00ea, "MSRP Statistics Package" }, /* H.248.69 */
{ 0x00eb, "MSRP Connection Status Package" }, /* H.248.69 */
{ 0x00ec, "Play Message Package" }, /* H.248.69 */
{ 0x00ed, "Delete Stored Message Package" }, /* H.248.69 */
{ 0x00ee, "Message Session Information Package" }, /* H.248.69 */
{ 0x00ef, "Message Filtering Package" }, /* H.248.69 */
{ 0x00f0, "Stored Message Information Package" }, /* H.248.69 */
{ 0x00f1, "Record Message Package" }, /* H.248.69 */
{ 0x00f2, "Digit Dialling Method Information Package" }, /* H.248.70 */
{ 0x00f3, "Digit Dialling Method Information for Extended Digitmap Detection Package" }, /* H.248.70 */
{ 0x00f4, "Digit Dialling Method Information for Enhanced Digitmap Detection Package" }, /* H.248.70 */
{ 0x00f5, "Received RTCP Package " }, /* H.248.71 */
{ 0x00f6, "RTP Cumulative Loss Package" }, /* H.248.71 */
{ 0x00f7, "H.245 Transport Package for SPC use" }, /* H.248.72 */
{ 0x00f8, "MONA Preference Package" }, /* H.248.72 */
{ 0x00f9, "TDM Gain Control Package" }, /* H.248.73 */
{ 0x00fa, "Media Start Package" }, /* H.248.74 */
{ 0x00fb, "Trim Package" }, /* H.248.74 */
{ 0x00fc, "Enhanced Recording Package" }, /* H.248.74 */
{ 0x00fd, "Enhanced ASR Package" }, /* H.248.74 */
{ 0x00fe, "Enhanced TTS Package" }, /* H.248.74 */
{ 0x00ff, "Play Offset Control Package" }, /* H.248.74 */
{ 0x0100, "Enhanced DTMF Detection Package" }, /* H.248.9 Revised 2009 */
{ 0x0101, "IP Router NAT Package" }, /* H.248.64 */
{ 0x0102, "Voice Enrolled Grammar Package" }, /* H.248.74 */
{ 0x0103, "Filter Group Package" }, /* H.248.76 */
{ 0x0104, "RTCP Source Description Package" }, /* H.248.71 */
{ 0x0105, "Speaker Verification and Identification Package" }, /* H.248.74 */
{ 0x0106, "Package Identifier Publishing and Application Package" }, /* H.248 */
{ 0x0107, "Secure RTP Package " }, /* H.248.77 */
{ 0x0108, "MGC Controlled Bearer Level ALG Package" }, /* H.248.78 */
{ 0x0109, "Enhanced Revised Offer/Answer SDP Support Package" }, /* H.248.80 */
{ 0x010a, "Enhanced SDP Media Capabilities Negotiation Support Package" }, /* H.248.80 */
{ 0x8000, "Ericsson IU" },
{ 0x8001, "Ericsson UMTS and GSM Circuit" },
{ 0x8002, "Ericsson Tone Generator Package" },
{ 0x8003, "Ericsson Line Test Package" },
{ 0x8004, "Nokia Advanced TFO Package" },
{ 0x8005, "Nokia IWF Package" },
{ 0x8006, "Nokia Root Package" },
{ 0x8007, "Nokia Trace Package" },
{ 0x8008, "Ericsson V5.2 Layer" },
{ 0x8009, "Ericsson Detailed Termination Information Package" },
{ 0x800a, "Nokia Bearer Characteristics Package" },
{ 0x800b, "Nokia Test Call Package" },
{ 0x800c, "Nokia Extended Continuity Package" },
{ 0x800d, "Nokia IPnwR Package" },
{ 0x800e, "Ericsson Tracing Enhancements Package" },
{ 0x800f, "Ericsson Partially Wildcarded TerminationID Package" },
{ 0x8010, "SCTP Stream Handling Package" },
{0, NULL}
};
/*
* This table consist of PackageName + EventName and its corresponding string
*
*/
static const value_string base_event_name_vals[] = {
{ 0x00000000, "Media stream properties H.248.1 Annex C" },
{ 0x00010000, "g H.248.1 Annex E" },
{ 0x00010001, "g/Cause" },
{ 0x00010002, "g/Signal Completion" },
{ 0x00040000, "tonedet H.248.1 Annex E" },
{ 0x00040001, "tonedet/std(Start tone detected)" },
{ 0x00040002, "tonedet/etd(End tone detected)" },
{ 0x00040003, "tonedet/ltd(Long tone detected)" },
{ 0x00060000, "dd H.248.1 Annex E" },
{ 0x00060001, "dd/std" },
{ 0x00060002, "dd/etd" },
{ 0x00060003, "dd/ltd" },
{ 0x00060004, "dd, DigitMap Completion Event" },
{ 0x00060010, "dd/d0, DTMF character 0" },
{ 0x00060011, "dd/d1, DTMF character 1" },
{ 0x00060012, "dd/d2, DTMF character 2" },
{ 0x00060013, "dd/d3, DTMF character 3" },
{ 0x00060014, "dd/d4, DTMF character 4" },
{ 0x00060015, "dd/d5, DTMF character 5" },
{ 0x00060016, "dd/d6, DTMF character 6" },
{ 0x00060017, "dd/d7, DTMF character 7" },
{ 0x00060018, "dd/d8, DTMF character 8" },
{ 0x00060019, "dd/d9, DTMF character 9" },
{ 0x0006001a, "dd/a, DTMF character A" },
{ 0x0006001b, "dd/b, DTMF character B" },
{ 0x0006001c, "dd/c, DTMF character C" },
{ 0x0006001d, "dd/d, DTMF character D" },
{ 0x00060020, "dd/" "*, DTMF character *" }, /* XXX: hack so checkAPIs & etc won't see a 'start of comment' */
{ 0x00060021, "dd/#, DTMF character #" },
{ 0x00080030, "cd, Dial Tone" },
{ 0x00080031, "cd, Ringing Tone" },
{ 0x00080032, "cd, Busy Tone" },
{ 0x00080033, "cd, Congestion Tone" },
{ 0x00080034, "cd, Special Information Tone" },
{ 0x00080035, "cd, (Recording) Warning Tone" },
{ 0x00080036, "cd, Payphone Recognition Tone" },
{ 0x00080037, "cd, Call Waiting Tone" },
{ 0x00080038, "cd, Caller Waiting Tone" },
{ 0x00090004, "al, onhook" },
{ 0x00090005, "al, offhook" },
{ 0x00090006, "al, flashhook" },
{ 0x0009ffff, "al, *" },
{ 0x000a0005, "ct, Completion of Continuity test" },
{ 0x000b0005, "nt, network failure" },
{ 0x000b0006, "nt, quality alert" },
{ 0x000c0001, "rtp, Payload Transition" },
{ 0x00210000, "Generic Bearer Connection Q.1950 Annex A" },
{ 0x00210001, "GB/BNCChange" },
{ 0x00220001, "BT/TIND (Tunnel Indication)" },
{ 0x002a0001, "H.245/h245msg (Incoming H.245 Message)" },
{ 0x002a0004, "H.245/h245ChC (H.245 Channel Closed)" },
{ 0x00450000, "Inactivity Timer H.248.14" },
{ 0x00450001, "it/ito" },
{ 0x00450002, "it/ito" },
{ 0x00460001, "threegmlc/mod_link_supp (Bearer Modification Support Event)" },
{ 0x00980000, "Hanging Termination Package" },
{ 0x00980001, "Termination Heartbeat" },
{ 0x800a0000, "Nokia Bearer Characteristics Package" },
{0, NULL}
};
/*
* This table consist of PackageName + SignalName and its corresponding string
*/
static const value_string base_signal_name_vals[] = {
{ 0x00000000, "Media stream properties H.248.1 Annex C" },
{ 0x00010000, "g H.248.1 Annex E" },
{ 0x00030001, "tonegen/pt(Play tone)" },
{ 0x00050010, "dg, DTMF character 0" },
{ 0x00050011, "dg, DTMF character 1" },
{ 0x00050012, "dg, DTMF character 2" },
{ 0x00050013, "dg, DTMF character 3" },
{ 0x00050014, "dg, DTMF character 4" },
{ 0x00050015, "dg, DTMF character 5" },
{ 0x00050016, "dg, DTMF character 6" },
{ 0x00050017, "dg, DTMF character 7" },
{ 0x00050018, "dg, DTMF character 8" },
{ 0x00050019, "dg, DTMF character 9" },
{ 0x0005001a, "dg, DTMF character A" },
{ 0x0005001b, "dg, DTMF character B" },
{ 0x0005001c, "dg, DTMF character C" },
{ 0x0005001d, "dg, DTMF character D" },
{ 0x00050020, "dg, DTMF character *" },
{ 0x00050021, "dg, DTMF character #" },
{ 0x00070030, "cg, Dial Tone" },
{ 0x00070031, "cg/rt (Ringing Tone)" },
{ 0x00070032, "cg, Busy Tone" },
{ 0x00070033, "cg, Congestion Tone" },
{ 0x00070034, "cg, Special Information Tone" },
{ 0x00070035, "cg, (Recording) Warning Tone" },
{ 0x00070036, "cg, Payphone Recognition Tone" },
{ 0x00070037, "cg, Call Waiting Tone" },
{ 0x00070038, "cg, Caller Waiting Tone" },
{ 0x00090002, "al, ring" },
{ 0x0009ffff, "al, *" },
{ 0x000a0003, "ct, Continuity test" },
{ 0x000a0004, "ct, Continuity respond" },
{ 0x00210000, "GB Generic Bearer Connection Q.1950 Annex A" },
{ 0x00210001, "GB/EstBNC(Establish BNC)" },
{ 0x00210002, "GB/ModBNC (Modify BNC)" },
{ 0x00210003, "GB/RelBNC(Release BNC)" },
{ 0x002a0001, "H.245/cs (channel state)" },
{ 0x002a0002, "H.245/termtype (Terminal Type)" },
{ 0x002c0001, "H.324/cmod (Communication mode)" },
{ 0x002c0002, "H.324/muxlv (Highest Multiplexing level)" },
{ 0x002c0003, "H.324/demux (Demultiplex)" },
{ 0x002c0004, "H.324/h223capr (Remote H.223 capability)" },
{ 0x002c0005, "H.324/muxtbl_in (Incoming Multiplex Table)" },
{ 0x002c0006, "H.324/muxtbl_out (Outgoing Multiplex Table)" },
{ 0x800a0000, "Nokia Bearer Characteristics Package" },
{0, NULL}
};
static const value_string h248_reasons[] = {
{ 400, "Syntax error in message"},
{ 401, "Protocol Error"},
{ 402, "Unauthorized"},
{ 403, "Syntax error in transaction request"},
{ 406, "Version Not Supported"},
{ 410, "Incorrect identifier"},
{ 411, "The transaction refers to an unknown ContextId"},
{ 412, "No ContextIDs available"},
{ 413, "Number of transactions in message exceeds maximum"}, /* [H.248.8 (08/07)] */
{ 421, "Unknown action or illegal combination of actions"},
{ 422, "Syntax Error in Action"},
{ 430, "Unknown TerminationID"},
{ 431, "No TerminationID matched a wildcard"},
{ 432, "Out of TerminationIDs or No TerminationID available"},
{ 433, "TerminationID is already in a Context"},
{ 434, "Max number of Terminations in a Context exceeded"},
{ 435, "Termination ID is not in specified Context"},
{ 440, "Unsupported or unknown Package"},
{ 441, "Missing Remote or Local Descriptor"},
{ 442, "Syntax Error in Command"},
{ 443, "Unsupported or Unknown Command"},
{ 444, "Unsupported or Unknown Descriptor"},
{ 445, "Unsupported or Unknown Property"},
{ 446, "Unsupported or Unknown Parameter"},
{ 447, "Descriptor not legal in this command"},
{ 448, "Descriptor appears twice in a command"},
{ 449, "Unsupported or Unknown Parameter or Property Value"},
{ 450, "No such property in this package"},
{ 451, "No such event in this package"},
{ 452, "No such signal in this package"},
{ 453, "No such statistic in this package"},
{ 454, "No such parameter value in this package"},
{ 455, "Property illegal in this Descriptor"},
{ 456, "Property appears twice in this Descriptor"},
{ 457, "Missing parameter in signal or event"},
{ 458, "Unexpected Event/Request ID"},
{ 459, "Unsupported or Unknown Profile"},
{ 460, "Unable to set statistic on stream"},
{ 461, "Unsupported or Unknown Profile"}, /*[H.248.18] */
{ 471, "Implied Add for Multiplex failure"},
{ 472, "Required Information Missing"}, /*[H.248.8 (08/07)] */
{ 473, "Conflicting Property Values"}, /*[H.248.8 (08/07)] */
{ 474, "Invalid SDP Syntax"}, /*[H.248.49] */
{ 475, "Unable to pause the playout of the signal"}, /*[H.248.66] */
{ 476, "Unable to adjust the data delivery speed of the Signal"}, /*[H.248.66] */
{ 477, "Unable to adjust the playback relative scale of the signal"}, /*[H.248.66] */
{ 478, "Behaviour Contradicts Resource Rule"}, /*[H.248.63] */
{ 500, "Internal software Failure in MG"},
{ 501, "Not Implemented"},
{ 502, "Not ready"},
{ 503, "Service Unavailable"},
{ 504, "Command Received from unauthorized entity"},
{ 505, "Transaction Request Received before a Service Change Reply has been received"},
{ 506, "Number of Transaction Pendings Exceeded"},
{ 510, "Insufficient resources"},
{ 511, "Temporarily Busy"}, /* [H.248.8 (08/07)] */
{ 512, "Media Gateway unequipped to detect requested Event"},
{ 513, "Media Gateway unequipped to generate requested Signals"},
{ 514, "Media Gateway cannot send the specified announcement"},
{ 515, "Unsupported Media Type"},
{ 517, "Unsupported or invalid mode"},
{ 518, "Event buffer full"},
{ 519, "Out of space to store digit map"},
{ 520, "Digit Map undefined in the MG"},
{ 521, "Termination is ServiceChanging"},
{ 522, "Functionality Requested in Topology Triple Not Supported"},
{ 526, "Insufficient bandwidth"},
{ 529, "Internal hardware failure in MG"},
{ 530, "Temporary Network failure"},
{ 531, "Permanent Network failure"},
{ 532, "Audited Property, Statistic, Event or Signal does not exist"},
{ 533, "Response exceeds maximum transport PDU size"},
{ 534, "Illegal write or read only property"},
{ 540, "Unexpected initial hook state"},
{ 541, "Unexpected Spare Bit State"}, /* [H.248.33] */
{ 542, "Command is not allowed on this termination"},
{ 543, "MGC requested event detection timestamp not supported"}, /* [H.248.8 (08/07)] */
{ 581, "Does Not Exist"},
{ 600, "Illegal syntax within an announcement specification"},
{ 601, "Variable type not supported"},
{ 602, "Variable value out of range"},
{ 603, "Category not supported"},
{ 604, "Selector type not supported"},
{ 605, "Selector value not supported"},
{ 606, "Unknown segment ID"},
{ 607, "Mismatch between play specification and provisioned data"},
{ 608, "Provisioning error"},
{ 609, "Invalid offset"},
{ 610, "No free segment IDs"},
{ 611, "Temporary segment not found"},
{ 612, "Segment in use"},
{ 613, "ISP port limit overrun"},
{ 614, "No modems available"},
{ 615, "Calling number unacceptable"},
{ 616, "Called number unacceptable"},
{ 617, "Reserved for H.248.9 return code"}, /* [H.248.9] */
{ 618, "Reserved for H.248.9 return code"}, /* [H.248.9] */
{ 622, "Reserved for H.248.9 return code"}, /* [H.248.9] */
{ 623, "Reserved for H.248.9 return code"}, /* [H.248.9] */
{ 624, "Reserved for H.248.9 return code"}, /* [H.248.9] */
{ 625, "Reserved for H.248.9 return code"}, /* [H.248.9 Amendment 1] */
{ 626, "Reserved for H.248.9 return code"}, /* [H.248.9 Amendment 1] */
{ 627, "Reserved for H.248.9 return code"}, /* [H.248.9 Amendment 1] */
{ 628, "Reserved for H.248.9 return code"}, /* [H.248.9 Amendment 1] */
{ 629, "Reserved for H.248.9 return code"}, /* [H.248.9 Amendment 1] */
{ 700, "Sieve Script Syntax Error"}, /* [H.248.69] */
{ 701, "Unsupported Sieve Require Error"}, /* [H.248.69] */
{ 702, "Sieve Actions Exceeded Error"}, /* [H.248.69] */
{ 900, "Service Restored"},
{ 901, "Cold Boot"},
{ 902, "Warm Boot"},
{ 903, "MGC Directed Change"},
{ 904, "Termination malfunctioning"},
{ 905, "Termination taken out of service"},
{ 906, "Loss of lower layer connectivity (e.g. downstream sync)"},
{ 907, "Transmission Failure"},
{ 908, "MG Impending Failure"},
{ 909, "MGC Impending Failure"},
{ 910, "Media Capability Failure"},
{ 911, "Modem Capability Failure"},
{ 912, "Mux Capability Failure"},
{ 913, "Signal Capability Failure"},
{ 914, "Event Capability Failure"},
{ 915, "State Loss"},
{ 916, "Packages Change"},
{ 917, "Capabilities Change"},
{ 918, "Cancel Graceful"},
{ 919, "Warm Failover"},
{ 920, "Cold Failover"},
{0,NULL}
};
static value_string_ext h248_reasons_ext = VALUE_STRING_EXT_INIT(h248_reasons);
static const value_string wildcard_modes[] = {
{ 0, "Choose" },
{ 1, "All" },
{ 0, NULL }
};
static const value_string wildcard_levels[] = {
{ 0, "This One Level" },
{ 1, "This Level and those below" },
{ 0, NULL }
};
static h248_curr_info_t curr_info = {NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};
static guint32 error_code;
static guint32 h248_version = 0; /* h248v1 support */
static gcp_wildcard_t wild_term;
static guint8 wild_card = 0xFF; /* place to store wildcardField */
/* Call the export PDU tap with relevant data */
static void
export_h248_pdu(packet_info *pinfo, tvbuff_t *tvb)
{
if (have_tap_listener(exported_pdu_tap)) {
exp_pdu_data_t *exp_pdu_data = export_pdu_create_common_tags(pinfo, "h248", EXP_PDU_TAG_PROTO_NAME);
exp_pdu_data->tvb_captured_length = tvb_captured_length(tvb);
exp_pdu_data->tvb_reported_length = tvb_reported_length(tvb);
exp_pdu_data->pdu_tvb = tvb;
tap_queue_packet(exported_pdu_tap, pinfo, exp_pdu_data);
}
}
extern void h248_param_ber_integer(proto_tree* tree, tvbuff_t* tvb, packet_info* pinfo, int hfid, h248_curr_info_t* u _U_, void* implicit) {
asn1_ctx_t asn1_ctx;
asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
dissect_ber_integer(implicit ? *((gboolean*)implicit) : FALSE, &asn1_ctx, tree, tvb, 0, hfid, NULL);
}
extern void h248_param_ber_octetstring(proto_tree* tree, tvbuff_t* tvb, packet_info* pinfo, int hfid, h248_curr_info_t* u _U_, void* implicit) {
asn1_ctx_t asn1_ctx;
asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
dissect_ber_octet_string(implicit ? *((gboolean*)implicit) : FALSE, &asn1_ctx, tree, tvb, 0, hfid, NULL);
}
extern void h248_param_ber_boolean(proto_tree* tree, tvbuff_t* tvb, packet_info* pinfo, int hfid, h248_curr_info_t* u _U_, void* implicit) {
asn1_ctx_t asn1_ctx;
asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
dissect_ber_boolean(implicit ? *((gboolean*)implicit) : FALSE, &asn1_ctx, tree, tvb, 0, hfid, NULL);
}
extern void h248_param_bytes_item(proto_tree* tree,
tvbuff_t* tvb,
packet_info* pinfo _U_,
int hfid,
h248_curr_info_t* h248_info _U_,
void* lenp ) {
int len = lenp ? *((int*)lenp) : -1;
proto_tree_add_item(tree,hfid,tvb,0,len,ENC_NA);
}
extern void h248_param_uint_item(proto_tree* tree,
tvbuff_t* tvb,
packet_info* pinfo _U_,
int hfid,
h248_curr_info_t* h248_info _U_,
void* lenp ) {
int len = lenp ? *((int*)lenp) : -1;
proto_tree_add_item(tree,hfid,tvb,0,len,ENC_BIG_ENDIAN);
}
extern void h248_param_external_dissector(proto_tree* tree, tvbuff_t* tvb, packet_info* pinfo , int hfid _U_, h248_curr_info_t* u _U_, void* dissector_hdl) {
call_dissector((dissector_handle_t) dissector_hdl,tvb,pinfo,tree);
}
static const h248_package_t no_package = { 0xffff, &hf_h248_no_pkg, &ett_h248_no_pkg, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL };
static const h248_pkg_sig_t no_signal = { 0, &hf_h248_no_sig, &ett_h248_no_sig, NULL, NULL };
static const h248_pkg_param_t no_param = { 0, &hf_h248_param, h248_param_uint_item, NULL };
static const h248_pkg_evt_t no_event = { 0, &hf_h248_no_evt, &ett_h248_no_evt, NULL, NULL };
const h248_package_t *find_package_id(guint16 pkgid);
static wmem_tree_t* packages = NULL;
extern void h248_param_PkgdName(proto_tree* tree, tvbuff_t* tvb, packet_info* pinfo , int hfid _U_, h248_curr_info_t* u1 _U_, void* u2 _U_) {
tvbuff_t *new_tvb = NULL;
proto_tree *package_tree=NULL;
guint16 name_major, name_minor;
const h248_package_t* pkg = NULL;
int offset = 0;
asn1_ctx_t asn1_ctx;
asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
offset = dissect_ber_octet_string(FALSE, &asn1_ctx, tree, tvb, offset, hfid , &new_tvb);
if (new_tvb) {
/* this field is always 4 bytes so just read it into two integers */
name_major=tvb_get_ntohs(new_tvb, 0);
name_minor=tvb_get_ntohs(new_tvb, 2);
pkg = find_package_id(name_major);
/* do the prettification */
proto_item_append_text(asn1_ctx.created_item, " %s (%04x)",
val_to_str(0, pkg->param_names, "Unknown Package"),
name_major);
if(tree){
proto_item* pi;
const gchar* strval;
package_tree = proto_item_add_subtree(asn1_ctx.created_item, ett_packagename);
proto_tree_add_uint_format(package_tree, hf_h248_pkg_name, tvb, offset-4, 2, name_major,
"%s (0x%04x)", val_to_str(0, pkg->param_names, "Unknown Package"), name_major);
pi = proto_tree_add_uint(package_tree, hf_248_pkg_param, tvb, offset-2, 2, name_minor);
if (pkg->signal_names && ( strval = try_val_to_str(name_minor, pkg->signal_names) )) {
strval = wmem_strdup_printf(wmem_packet_scope(), "%s (%d)",strval,name_minor);
} else {
strval = wmem_strdup_printf(wmem_packet_scope(), "Unknown (%d)",name_minor);
}
proto_item_set_text(pi,"Signal ID: %s", strval);
}
}
}
static int dissect_h248_trx_id(gboolean implicit_tag, packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset, guint32* trx_id_p) {
guint64 trx_id = 0;
gint8 ber_class;
gboolean pc;
gint32 tag;
guint32 len;
guint32 i;
if(!implicit_tag){
offset=dissect_ber_identifier(pinfo, tree, tvb, offset, &ber_class, &pc, &tag);
offset=dissect_ber_length(pinfo, tree, tvb, offset, &len, NULL);
} else {
len=tvb_reported_length_remaining(tvb, offset);
}
if (len > 8 || len < 1) {
THROW(BoundsError);
} else {
for(i=1;i<=len;i++){
trx_id=(trx_id<<8)|tvb_get_guint8(tvb, offset);
offset++;
}
if (trx_id > 0xffffffff) {
proto_item* pi = proto_tree_add_uint64(tree, hf_h248_transactionId64, tvb, offset-len, len, trx_id);
expert_add_info(pinfo, pi, &ei_h248_transactionId64);
*trx_id_p = 0;
} else {
proto_tree_add_uint(tree, hf_h248_transactionId, tvb, offset-len, len, (guint32)trx_id);
*trx_id_p = (guint32)trx_id;
}
}
return offset;
}
static int dissect_h248_ctx_id(gboolean implicit_tag, packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset, guint32* ctx_id_p) {
gint8 ber_class;
gboolean pc;
gint32 tag;
guint32 len;
guint64 ctx_id = 0;
guint32 i;
if(!implicit_tag){
offset=dissect_ber_identifier(pinfo, tree, tvb, offset, &ber_class, &pc, &tag);
offset=dissect_ber_length(pinfo, tree, tvb, offset, &len, NULL);
} else {
len=tvb_reported_length_remaining(tvb, offset);
}
if (len > 8 || len < 1) {
THROW(BoundsError);
} else {
for(i=1;i<=len;i++){
ctx_id=(ctx_id<<8)|tvb_get_guint8(tvb, offset);
offset++;
}
if (ctx_id > 0xffffffff) {
proto_item* pi = proto_tree_add_uint64(tree, hf_h248_context_id64, tvb, offset-len, len, ctx_id);
expert_add_info(pinfo, pi, &ei_h248_context_id64);
*ctx_id_p = 0xfffffffd;
} else {
proto_item* pi = proto_tree_add_uint(tree, hf_h248_context_id, tvb, offset-len, len, (guint32)ctx_id);
if ( ctx_id == NULL_CONTEXT ) {
proto_item_set_text(pi,"contextId: Null Context(0)");
} else if ( ctx_id == CHOOSE_CONTEXT ) {
proto_item_set_text(pi,"contextId: $ (Choose Context = 0xfffffffe)");
} else if ( ctx_id == ALL_CONTEXTS ) {
proto_item_set_text(pi,"contextId: * (All Contexts = 0xffffffff)");
}
*ctx_id_p = (guint32) ctx_id;
}
}
return offset;
}
static s_h248_package_t *s_find_package_id(guint16 pkgid) {
s_h248_package_t *s_pkg = NULL;
s_pkg = (s_h248_package_t *)wmem_tree_lookup32(packages, (guint32)(pkgid));
return s_pkg;
}
const h248_package_t *find_package_id(guint16 pkgid) {
s_h248_package_t *s_pkg = NULL;
s_pkg = s_find_package_id(pkgid); /*(packages, GUINT_TO_POINTER((guint32)(pkgid))); */
if (! s_pkg ) return &no_package;
return s_pkg->pkg;
}
static gboolean is_pkg_default(guint16 pkgid) {
s_h248_package_t *s_pkg = NULL;
s_pkg = (s_h248_package_t *)wmem_tree_lookup32(packages, (guint32)(pkgid));
if(! s_pkg ) return TRUE;
return s_pkg->is_default;
}
void h248_register_package(h248_package_t* pkg, pkg_reg_action reg_action) {
h248_package_t *pkg_found = NULL, *pkg_high = NULL, *pkg_low = NULL;
s_h248_package_t *s_pkg = NULL;
value_string *vst;
gboolean pkg_default = FALSE;
gint j = 0, idx = 0, i = 0, k = 0;
if (! packages) {
/* no packaegs are yet registerd so create tree and add default packages to tree
*/
packages = wmem_tree_new(wmem_epan_scope()); /* init tree if no entries */
while (base_package_name_vals[i].strptr != NULL) {
pkg_found = wmem_new0(wmem_epan_scope(), h248_package_t); /* create a h248 package structure */
pkg_found->id = base_package_name_vals[i].value;
vst = (value_string *)wmem_alloc0(wmem_epan_scope(), sizeof(value_string)*2);
vst[0].strptr = base_package_name_vals[i].strptr;
pkg_found->param_names = vst;
pkg_found->hfid = &hf_h248_pkg_name;
pkg_found->ett = &ett_packagename;
try_val_to_str_idx((pkg_found->id)<<16,base_event_name_vals, &j);
/* now look for events and signals that may be defined for package. If found, create value_strings */
if (j != -1) {
j++; idx=j;
while((base_event_name_vals[j].strptr!=NULL) && (((base_event_name_vals[j].value)>>16) == (pkg_found->id))) {
j++;
};
if (idx < j) {
vst = (value_string *)wmem_alloc0(wmem_epan_scope(), sizeof(value_string)*(j-idx+1));
for (k=0;idx<j;k++) {
vst[k].strptr = base_event_name_vals[idx].strptr;
vst[k].value = (base_event_name_vals[idx].value & 0xffff);
idx++;
};
pkg_found->event_names = vst;
}
}
/* now look at signals */
if (!try_val_to_str_idx((pkg_found->id)<<16, base_signal_name_vals, &j)) {
j++; idx=j;
while((base_signal_name_vals[j].strptr != NULL) && ((base_signal_name_vals[j].value>>16) == (pkg_found->id))) {
j++;
};
if (idx < j) {
vst = (value_string *)wmem_alloc0(wmem_epan_scope(), sizeof(value_string)*(j-idx+1));
for (k=0;idx<j;k++) {
vst[k].strptr = base_signal_name_vals[idx].strptr;
vst[k].value = (base_signal_name_vals[idx].value &0xffff);
idx++;
};
pkg_found->signal_names = vst;
}
};
s_pkg = wmem_new0(wmem_epan_scope(), s_h248_package_t);
s_pkg->is_default = TRUE;
s_pkg->pkg = pkg_found;
wmem_tree_insert32(packages, pkg_found->id, s_pkg);
i++;
};
pkg_found = NULL; /* reset pointer */
};
pkg_default = is_pkg_default(pkg->id);
if (((reg_action==REPLACE_PKG) || (reg_action==ADD_PKG)) && pkg_default) {
/* add/replace in tree */
s_pkg = wmem_new0(wmem_epan_scope(), s_h248_package_t);
s_pkg->is_default = FALSE;
s_pkg->pkg = (h248_package_t *)pkg;
wmem_tree_insert32(packages, pkg->id, s_pkg);
return;
};
if(pkg_default) reg_action = MERGE_PKG_HIGH; /* always make new package overide default */
s_pkg = s_find_package_id(pkg->id);
if (s_pkg == NULL) { /* no need to merge - package not in tree */
s_pkg = wmem_new0(wmem_epan_scope(), s_h248_package_t);
s_pkg->is_default = FALSE;
s_pkg->pkg = (h248_package_t *)pkg;
wmem_tree_insert32(packages, pkg->id, s_pkg);
return;
}
pkg_found = s_pkg->pkg;
if (reg_action==MERGE_PKG_HIGH) {
pkg_high = (h248_package_t *)pkg;
pkg_low = pkg_found;
};
if (reg_action==MERGE_PKG_LOW) {
pkg_high = pkg_found;
pkg_low = (h248_package_t *)pkg;
};
if(pkg_high) {
/* if h248_package_t High Priority value !NULL, replace it in the found tree entry else use current entry */
(pkg_high->hfid ? (pkg_found->hfid=pkg_high->hfid) : (pkg_found->hfid=pkg_low->hfid));
(pkg_high->ett ? (pkg_found->ett=pkg_high->ett ):( pkg_found->ett=pkg_low->ett));
(pkg_high->param_names ? (pkg_found->param_names=pkg_high->param_names ):( pkg_found->param_names=pkg_low->param_names));
(pkg_high->signal_names ? (pkg_found->signal_names=pkg_high->signal_names ):( pkg_found->signal_names=pkg_low->signal_names));
(pkg_high->event_names ? (pkg_found->event_names=pkg_high->event_names ):( pkg_found->event_names=pkg_low->event_names));
(pkg_high->stats_names ? (pkg_found->stats_names=pkg_high->stats_names ):( pkg_found->stats_names=pkg_low->stats_names));
(pkg_high->properties ? (pkg_found->properties=pkg_high->properties ):( pkg_found->properties=pkg_low->properties));
(pkg_high->signals ? (pkg_found->signals=pkg_high->signals ):( pkg_found->signals=pkg_low->signals));
(pkg_high->events ? (pkg_found->events=pkg_high->events ):( pkg_found->events=pkg_low->events));
(pkg_high->statistics ? (pkg_found->statistics=pkg_high->statistics ):( pkg_found->statistics=pkg_low->statistics));
s_pkg->pkg = pkg_found;
s_pkg->is_default = FALSE;
}
}
static guint32 packageandid;
static int dissect_h248_PkgdName(gboolean implicit_tag, tvbuff_t *tvb, int offset, asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
tvbuff_t *new_tvb = NULL;
proto_tree *package_tree=NULL;
guint16 name_major, name_minor;
const h248_package_t* pkg = NULL;
offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &new_tvb);
if (new_tvb) {
/* this field is always 4 bytes so just read it into two integers */
name_major=tvb_get_ntohs(new_tvb, 0);
name_minor=tvb_get_ntohs(new_tvb, 2);
packageandid=(name_major<<16)|name_minor;
pkg = find_package_id(name_major);
/* do the prettification */
proto_item_append_text(actx->created_item, " %s (%04x)",
val_to_str(0, pkg->param_names, "Unknown Package"),
name_major);
if(tree){
package_tree = proto_item_add_subtree(actx->created_item, ett_packagename);
proto_tree_add_uint_format(package_tree, hf_h248_pkg_name, tvb, offset-4, 2, name_major,
"PkgName: %s (0x%04x)", val_to_str(0, pkg->param_names, "Unknown Package"), name_major);
}
{
proto_item* pi = proto_tree_add_uint(package_tree, hf_248_pkg_param, tvb, offset-2, 2, name_minor);
const gchar* strval;
if (pkg->param_names && ( strval = try_val_to_str(name_minor, pkg->param_names) )) {
strval = wmem_strdup_printf(wmem_packet_scope(), "%s (%d)",strval,name_minor);
} else {
strval = wmem_strdup_printf(wmem_packet_scope(), "Unknown (%d)",name_minor);
}
proto_item_set_text(pi,"Parameter: %s", strval);
}
} else {
pkg = &no_package;
}
curr_info.pkg = pkg;
return offset;
}
static int dissect_h248_EventName(gboolean implicit_tag, tvbuff_t *tvb, int offset, asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
tvbuff_t *new_tvb;
proto_tree *package_tree=NULL;
guint16 name_major, name_minor;
const h248_package_t* pkg = NULL;
const h248_pkg_evt_t* evt = NULL;
offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &new_tvb);
if (new_tvb) {
/* this field is always 4 bytes so just read it into two integers */
name_major=tvb_get_ntohs(new_tvb, 0);
name_minor=tvb_get_ntohs(new_tvb, 2);
packageandid=(name_major<<16)|name_minor;
pkg = find_package_id(name_major);
/* do the prettification */
proto_item_append_text(actx->created_item, " %s (%04x)",
val_to_str(0, pkg->param_names, "Unknown Package"),
name_major);
if(tree){
package_tree = proto_item_add_subtree(actx->created_item, ett_packagename);
}
proto_tree_add_uint_format(package_tree, hf_h248_pkg_name, tvb, offset-4, 2, name_major,
"%s (0x%04x)", val_to_str(0, pkg->param_names, "Unknown Package"), name_major);
curr_info.pkg = pkg;
if (pkg->events) {
for (evt = pkg->events; evt->hfid; evt++) {
if (name_minor == evt->id) {
break;
}
}
if (! evt->hfid) evt = &no_event;
} else {
evt = &no_event;
}
curr_info.evt = evt;
{
proto_item* pi = proto_tree_add_uint(package_tree, hf_h248_event_code, tvb, offset-2, 2, name_minor);
const gchar* strval;
if (pkg->event_names && ( strval = try_val_to_str(name_minor, pkg->event_names) )) {
strval = wmem_strdup_printf(wmem_packet_scope(), "%s (%d)",strval,name_minor);
} else {
strval = wmem_strdup_printf(wmem_packet_scope(), "Unknown (%d)",name_minor);
}
proto_item_set_text(pi,"Event ID: %s", strval);
}
} else {
curr_info.pkg = &no_package;
curr_info.evt = &no_event;
}
return offset;
}
static int dissect_h248_SignalName(gboolean implicit_tag , tvbuff_t *tvb, int offset, asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
tvbuff_t *new_tvb;
proto_tree *package_tree=NULL;
guint16 name_major, name_minor;
const h248_package_t* pkg = NULL;
const h248_pkg_sig_t* sig;
offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &new_tvb);
if (new_tvb) {
/* this field is always 4 bytes so just read it into two integers */
name_major=tvb_get_ntohs(new_tvb, 0);
name_minor=tvb_get_ntohs(new_tvb, 2);
packageandid=(name_major<<16)|name_minor;
pkg = find_package_id(name_major);
/* do the prettification */
proto_item_append_text(actx->created_item, " %s (%04x)",
val_to_str(0, pkg->param_names, "Unknown Package"),
name_major);
if(tree){
package_tree = proto_item_add_subtree(actx->created_item, ett_packagename);
}
proto_tree_add_uint_format(package_tree, hf_h248_pkg_name, tvb, offset-4, 2, name_major,
"%s (0x%04x)", val_to_str(0, pkg->param_names, "Unknown Package"), name_major);
if (pkg->signals) {
for (sig = pkg->signals; sig->hfid; sig++) {
if (name_minor == sig->id) {
break;
}
}
if (! sig->hfid) sig = &no_signal;
curr_info.pkg = pkg;
curr_info.sig = sig;
} else {
curr_info.pkg = &no_package;
curr_info.sig = &no_signal;
}
{
proto_item* pi = proto_tree_add_uint(package_tree, hf_h248_signal_code, tvb, offset-2, 2, name_minor);
const gchar* strval;
if (pkg->signal_names && ( strval = try_val_to_str(name_minor, pkg->signal_names) )) {
strval = wmem_strdup_printf(wmem_packet_scope(), "%s (%d)",strval,name_minor);
} else {
strval = wmem_strdup_printf(wmem_packet_scope(), "Unknown (%d)",name_minor);
}
proto_item_set_text(pi,"Signal ID: %s", strval);
}
} else {
curr_info.pkg = &no_package;
curr_info.sig = &no_signal;
}
return offset;
}
static int dissect_h248_PropertyID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index _U_) {
gint8 ber_class;
gboolean pc, ind;
gint32 tag;
guint32 len;
guint16 name_minor;
int end_offset;
const h248_package_t* pkg;
const h248_pkg_param_t* prop;
tvbuff_t *next_tvb = NULL;
offset=dissect_ber_identifier(actx->pinfo, tree, tvb, offset, &ber_class, &pc, &tag);
offset=dissect_ber_length(actx->pinfo, tree, tvb, offset, &len, &ind);
end_offset=offset+len;
if( (ber_class!=BER_CLASS_UNI)
||(tag!=BER_UNI_TAG_OCTETSTRING) ){
proto_tree_add_expert_format(tree, actx->pinfo, &ei_h248_octet_string_expected, tvb, offset-2, 2,
"H.248 BER Error: OctetString expected but Class:%d PC:%d Tag:%d was unexpected", ber_class, pc, tag);
return end_offset;
}
next_tvb = tvb_new_subset_length(tvb,offset,len);
name_minor = packageandid & 0xffff;
pkg = (curr_info.pkg) ? curr_info.pkg : &no_package;
if (pkg->properties) {
for (prop = pkg->properties; prop && prop->hfid; prop++) {
if (name_minor == prop->id) {
break;
}
}
} else {
prop = &no_param;
}
if (prop && prop->hfid && prop->dissector) {
prop->dissector(tree, next_tvb, actx->pinfo, *(prop->hfid), &curr_info, prop->data);
}
return end_offset;
}
static int dissect_h248_SigParameterName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index _U_) {
tvbuff_t *next_tvb;
guint32 param_id = 0xffffffff;
const h248_pkg_param_t* sigpar;
const gchar* strval;
proto_item* pi;
offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &next_tvb);
pi = actx->created_item;
switch(tvb_reported_length(next_tvb)) {
case 4: param_id = tvb_get_ntohl(next_tvb,0); break;
case 3: param_id = tvb_get_ntoh24(next_tvb,0); break;
case 2: param_id = tvb_get_ntohs(next_tvb,0); break;
case 1: param_id = tvb_get_guint8(next_tvb,0); break;
default: break;
}
curr_info.par = &no_param;
if (curr_info.sig && curr_info.sig->parameters) {
for(sigpar = curr_info.sig->parameters; sigpar->hfid; sigpar++) {
if (sigpar->id == param_id) {
curr_info.par = sigpar;
break;
}
}
}
if (curr_info.sig && curr_info.sig->param_names && ( strval = try_val_to_str(param_id, curr_info.sig->param_names) )) {
strval = wmem_strdup_printf(wmem_packet_scope(), "%s (%d)",strval,param_id);
} else {
strval = wmem_strdup_printf(wmem_packet_scope(), "Unknown (%d)",param_id);
}
proto_item_set_text(pi,"Parameter: %s", strval);
return offset;
}
static int dissect_h248_SigParamValue(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index _U_) {
int end_offset;
gint8 ber_class;
gboolean pc, ind;
gint32 tag;
guint32 len;
tvbuff_t *next_tvb = NULL;
offset=dissect_ber_identifier(actx->pinfo, tree, tvb, offset, &ber_class, &pc, &tag);
offset=dissect_ber_length(actx->pinfo, tree, tvb, offset, &len, &ind);
end_offset=offset+len;
if( (ber_class!=BER_CLASS_UNI)
||(tag!=BER_UNI_TAG_OCTETSTRING) ){
proto_tree_add_expert_format(tree, actx->pinfo, &ei_h248_octet_string_expected, tvb, offset-2, 2,
"H.248 BER Error: OctetString expected but Class:%d PC:%d Tag:%d was unexpected", ber_class, pc, tag);
return end_offset;
}
next_tvb = tvb_new_subset_length(tvb,offset,len);
if ( curr_info.par && curr_info.par->dissector) {
curr_info.par->dissector(tree, next_tvb, actx->pinfo, *(curr_info.par->hfid), &curr_info, curr_info.par->data);
}
return end_offset;
}
static int dissect_h248_SigParamValueV1(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index _U_) {
return dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
}
static int dissect_h248_EventParameterName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index _U_) {
tvbuff_t *next_tvb;
guint32 param_id = 0xffffffff;
const h248_pkg_param_t* evtpar;
const gchar* strval;
proto_item* pi;
offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &next_tvb);
pi = actx->created_item;
if (next_tvb) {
switch(tvb_reported_length(next_tvb)) {
case 4: param_id = tvb_get_ntohl(next_tvb,0); break;
case 3: param_id = tvb_get_ntoh24(next_tvb,0); break;
case 2: param_id = tvb_get_ntohs(next_tvb,0); break;
case 1: param_id = tvb_get_guint8(next_tvb,0); break;
default: break;
}
}
curr_info.par = &no_param;
if (curr_info.evt && curr_info.evt->parameters) {
for(evtpar = curr_info.evt->parameters; evtpar->hfid; evtpar++) {
if (evtpar->id == param_id) {
curr_info.par = evtpar;
break;
}
}
} else {
curr_info.par = &no_param;
}
if (curr_info.evt && curr_info.evt->param_names && ( strval = try_val_to_str(param_id, curr_info.evt->param_names) )) {
strval = wmem_strdup_printf(wmem_packet_scope(), "%s (%d)",strval,param_id);
} else {
strval = wmem_strdup_printf(wmem_packet_scope(), "Unknown (%d)",param_id);
}
proto_item_set_text(pi,"Parameter: %s", strval);
return offset;
}
static int dissect_h248_EventParamValue(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index _U_) {
tvbuff_t *next_tvb;
int end_offset;
gint8 ber_class;
gboolean pc, ind;
gint32 tag;
guint32 len;
offset=dissect_ber_identifier(actx->pinfo, tree, tvb, offset, &ber_class, &pc, &tag);
offset=dissect_ber_length(actx->pinfo, tree, tvb, offset, &len, &ind);
end_offset=offset+len;
if( (ber_class!=BER_CLASS_UNI)
||(tag!=BER_UNI_TAG_OCTETSTRING) ){
proto_tree_add_expert_format(tree, actx->pinfo, &ei_h248_octet_string_expected, tvb, offset-2, 2,
"H.248 BER Error: OctetString expected but Class:%d PC:%d Tag:%d was unexpected", ber_class, pc, tag);
return end_offset;
}
next_tvb = tvb_new_subset_length(tvb,offset,len);
if ( curr_info.par && curr_info.par->dissector) {
curr_info.par->dissector(tree, next_tvb, actx->pinfo, *(curr_info.par->hfid), &curr_info, curr_info.par->data);
}
return end_offset;
}
static int dissect_h248_EventParamValueV1(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index _U_) {
return dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &tvb);
}
static int dissect_h248_MtpAddress(gboolean implicit_tag, tvbuff_t *tvb, int offset, asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
tvbuff_t *new_tvb;
proto_tree *mtp_tree=NULL;
guint32 val;
int i, len, old_offset;
old_offset=offset;
offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &new_tvb);
if (new_tvb) {
/* this field is either 2 or 4 bytes so just read it into an integer */
val=0;
len=tvb_reported_length(new_tvb);
for(i=0;i<len;i++){
val= (val<<8)|tvb_get_guint8(new_tvb, i);
}
/* do the prettification */
proto_item_append_text(actx->created_item, " NI = %d, PC = %d ( %d-%d )", val&0x03,val>>2,val&0x03,val>>2);
if(tree){
mtp_tree = proto_item_add_subtree(actx->created_item, ett_mtpaddress);
}
proto_tree_add_uint(mtp_tree, hf_h248_mtpaddress_ni, tvb, old_offset, offset-old_offset, val&0x03);
proto_tree_add_uint(mtp_tree, hf_h248_mtpaddress_pc, tvb, old_offset, offset-old_offset, val>>2);
}
return offset;
}
#define H248_TAP() do { if (keep_persistent_data && curr_info.cmd) tap_queue_packet(h248_tap, actx->pinfo, curr_info.cmd); } while(0)
/*--- Included file: packet-h248-fn.c ---*/
#line 1 "./asn1/h248/packet-h248-fn.c"
/*--- Cyclic dependencies ---*/
/* SecondEventsDescriptor -> SecondEventsDescriptor/eventList -> SecondRequestedEvent -> SecondRequestedActions -> NotifyBehaviour -> RegulatedEmbeddedDescriptor -> SecondEventsDescriptor */
static int dissect_h248_SecondEventsDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
static int
dissect_h248_SecurityParmIndex(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
NULL);
return offset;
}
static int
dissect_h248_SequenceNum(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
NULL);
return offset;
}
static int
dissect_h248_AuthData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
NULL);
return offset;
}
static const ber_sequence_t AuthenticationHeader_sequence[] = {
{ &hf_h248_secParmIndex , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_SecurityParmIndex },
{ &hf_h248_seqNum , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SequenceNum },
{ &hf_h248_ad , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_AuthData },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_AuthenticationHeader(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
AuthenticationHeader_sequence, hf_index, ett_h248_AuthenticationHeader);
return offset;
}
static int
dissect_h248_T_version(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 118 "./asn1/h248/h248.cnf"
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
&h248_version);
return offset;
}
static int
dissect_h248_OCTET_STRING_SIZE_4(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
NULL);
return offset;
}
static int
dissect_h248_INTEGER_0_65535(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
NULL);
return offset;
}
static const ber_sequence_t IP4Address_sequence[] = {
{ &hf_h248_iP4Address , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_OCTET_STRING_SIZE_4 },
{ &hf_h248_portNumber , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_IP4Address(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
IP4Address_sequence, hf_index, ett_h248_IP4Address);
return offset;
}
static int
dissect_h248_OCTET_STRING_SIZE_16(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
NULL);
return offset;
}
static const ber_sequence_t IP6Address_sequence[] = {
{ &hf_h248_iP6Address , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_OCTET_STRING_SIZE_16 },
{ &hf_h248_portNumber , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_IP6Address(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
IP6Address_sequence, hf_index, ett_h248_IP6Address);
return offset;
}
static int
dissect_h248_IA5String(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
actx, tree, tvb, offset, hf_index,
NULL);
return offset;
}
static const ber_sequence_t DomainName_sequence[] = {
{ &hf_h248_domName , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_IA5String },
{ &hf_h248_portNumber , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_DomainName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
DomainName_sequence, hf_index, ett_h248_DomainName);
return offset;
}
static int
dissect_h248_PathName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
actx, tree, tvb, offset, hf_index,
NULL);
return offset;
}
static const value_string h248_MId_vals[] = {
{ 0, "ip4Address" },
{ 1, "ip6Address" },
{ 2, "domainName" },
{ 3, "deviceName" },
{ 4, "mtpAddress" },
{ 0, NULL }
};
static const ber_choice_t MId_choice[] = {
{ 0, &hf_h248_ip4Address , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_IP4Address },
{ 1, &hf_h248_ip6Address , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_IP6Address },
{ 2, &hf_h248_domainName , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_DomainName },
{ 3, &hf_h248_deviceName , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_PathName },
{ 4, &hf_h248_mtpAddress , BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_h248_MtpAddress },
{ 0, NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_MId(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_choice(actx, tree, tvb, offset,
MId_choice, hf_index, ett_h248_MId,
NULL);
return offset;
}
static int
dissect_h248_T_errorCode(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 312 "./asn1/h248/h248.cnf"
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, &error_code);
expert_add_info(actx->pinfo, actx->created_item, &ei_h248_errored_command);
if (curr_info.cmd) {
gcp_cmd_set_error(curr_info.cmd,error_code);
} else if (curr_info.trx) {
gcp_trx_set_error(curr_info.trx,error_code);
}
return offset;
return offset;
}
static int
dissect_h248_ErrorText(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
actx, tree, tvb, offset, hf_index,
NULL);
return offset;
}
static const ber_sequence_t ErrorDescriptor_sequence[] = {
{ &hf_h248_errorCode , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_T_errorCode },
{ &hf_h248_errorText , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_ErrorText },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_ErrorDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
ErrorDescriptor_sequence, hf_index, ett_h248_ErrorDescriptor);
return offset;
}
static int
dissect_h248_TransactionId(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
NULL);
return offset;
}
static int
dissect_h248_T_transactionId(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 122 "./asn1/h248/h248.cnf"
guint32 trx_id = 0;
offset = dissect_h248_trx_id(implicit_tag, actx->pinfo, tree, tvb, offset, &trx_id);
curr_info.trx = gcp_trx(curr_info.msg, trx_id, GCP_TRX_REQUEST, keep_persistent_data);
error_code = 0;
return offset;
}
static int
dissect_h248_ContextId(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 147 "./asn1/h248/h248.cnf"
guint32 ctx_id = 0;
offset = dissect_h248_ctx_id(implicit_tag, actx->pinfo, tree, tvb, offset, &ctx_id);
curr_info.ctx = gcp_ctx(curr_info.msg,curr_info.trx,ctx_id,keep_persistent_data);
curr_info.cmd = NULL;
curr_info.term = NULL;
return offset;
}
static int
dissect_h248_INTEGER_0_15(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
NULL);
return offset;
}
static int
dissect_h248_BOOLEAN(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_boolean(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
return offset;
}
static int
dissect_h248_WildcardField(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 330 "./asn1/h248/h248.cnf"
tvbuff_t* new_tvb;
offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &new_tvb);
tree = proto_item_add_subtree(actx->created_item,ett_wildcard);
proto_tree_add_item(tree,hf_h248_term_wild_type,new_tvb,0,1,ENC_BIG_ENDIAN);
proto_tree_add_item(tree,hf_h248_term_wild_level,new_tvb,0,1,ENC_BIG_ENDIAN);
proto_tree_add_item(tree,hf_h248_term_wild_position,new_tvb,0,1,ENC_BIG_ENDIAN);
wild_term = tvb_get_guint8(new_tvb,0) & 0x80 ? GCP_WILDCARD_CHOOSE : GCP_WILDCARD_ALL;
/* limitation: assume only one wildcard is used */
wild_card = tvb_get_guint8(new_tvb,0);
return offset;
}
static const ber_sequence_t SEQUENCE_OF_WildcardField_sequence_of[1] = {
{ &hf_h248_wildcard_item , BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_h248_WildcardField },
};
static int
dissect_h248_SEQUENCE_OF_WildcardField(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
SEQUENCE_OF_WildcardField_sequence_of, hf_index, ett_h248_SEQUENCE_OF_WildcardField);
return offset;
}
static int
dissect_h248_T_terminationId(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 344 "./asn1/h248/h248.cnf"
tvbuff_t* new_tvb;
h248_term_info_t term_info;
term_info.wild_card = wild_card;
term_info.str = NULL;
offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &new_tvb);
if (new_tvb) {
curr_info.term->len = tvb_reported_length(new_tvb);
curr_info.term->type = 0; /* unknown */
if (h248_term_handle) {
call_dissector_with_data(h248_term_handle, new_tvb, actx->pinfo, tree, &term_info);
wild_card = 0xFF;
}
if (curr_info.term->len) {
curr_info.term->buffer = (guint8 *)tvb_memdup(wmem_packet_scope(),new_tvb,0,curr_info.term->len);
if(term_info.str){
curr_info.term->str = wmem_strdup_printf(wmem_packet_scope(), "%s %s",
bytestring_to_str(wmem_packet_scope(),curr_info.term->buffer,curr_info.term->len, 0),
term_info.str);
}else{
curr_info.term->str = bytestring_to_str(wmem_packet_scope(),curr_info.term->buffer,curr_info.term->len, 0);
}
}
curr_info.term = gcp_cmd_add_term(curr_info.msg, curr_info.trx, curr_info.cmd, curr_info.term, wild_term, keep_persistent_data);
} else {
curr_info.term->len = 0;
curr_info.term->buffer = (guint8*)wmem_strdup(wmem_packet_scope(), "");
curr_info.term->str = wmem_strdup(wmem_packet_scope(), "?");
}
return offset;
}
static const ber_sequence_t TerminationID_sequence[] = {
{ &hf_h248_wildcard , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_WildcardField },
{ &hf_h248_terminationId , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_T_terminationId },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_TerminationID(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 325 "./asn1/h248/h248.cnf"
curr_info.term = wmem_new0(wmem_packet_scope(), gcp_term_t);
wild_term = GCP_WILDCARD_NONE;
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
TerminationID_sequence, hf_index, ett_h248_TerminationID);
return offset;
}
static const value_string h248_T_topologyDirection_vals[] = {
{ 0, "bothway" },
{ 1, "isolate" },
{ 2, "oneway" },
{ 0, NULL }
};
static int
dissect_h248_T_topologyDirection(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
NULL);
return offset;
}
static int
dissect_h248_StreamID(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
NULL);
return offset;
}
static const value_string h248_T_topologyDirectionExtension_vals[] = {
{ 0, "onewayexternal" },
{ 1, "onewayboth" },
{ 0, NULL }
};
static int
dissect_h248_T_topologyDirectionExtension(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
NULL);
return offset;
}
static const ber_sequence_t TopologyRequest_sequence[] = {
{ &hf_h248_terminationFrom, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationID },
{ &hf_h248_terminationTo , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_TerminationID },
{ &hf_h248_topologyDirection, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_T_topologyDirection },
{ &hf_h248_streamID , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
{ &hf_h248_topologyDirectionExtension, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_T_topologyDirectionExtension },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_TopologyRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
TopologyRequest_sequence, hf_index, ett_h248_TopologyRequest);
return offset;
}
static const ber_sequence_t T_topologyReq_sequence_of[1] = {
{ &hf_h248_topologyReq_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_TopologyRequest },
};
static int
dissect_h248_T_topologyReq(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 230 "./asn1/h248/h248.cnf"
curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_TOPOLOGY_REQ,offset,keep_persistent_data);
H248_TAP();
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
T_topologyReq_sequence_of, hf_index, ett_h248_T_topologyReq);
#line 234 "./asn1/h248/h248.cnf"
curr_info.cmd = NULL;
return offset;
}
static int
dissect_h248_Iepscallind_BOOL(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_boolean(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
return offset;
}
static int
dissect_h248_PropertyName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_h248_PkgdName(implicit_tag, tvb, offset, actx, tree, hf_index);
return offset;
}
static const ber_sequence_t SEQUENCE_OF_PropertyID_sequence_of[1] = {
{ &hf_h248_propertyParamValue_item, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_h248_PropertyID },
};
static int
dissect_h248_SEQUENCE_OF_PropertyID(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
SEQUENCE_OF_PropertyID_sequence_of, hf_index, ett_h248_SEQUENCE_OF_PropertyID);
return offset;
}
static const value_string h248_Relation_vals[] = {
{ 0, "greaterThan" },
{ 1, "smallerThan" },
{ 2, "unequalTo" },
{ 0, NULL }
};
static int
dissect_h248_Relation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
NULL);
return offset;
}
static const value_string h248_PropParm_extraInfo_vals[] = {
{ 0, "relation" },
{ 1, "range" },
{ 2, "sublist" },
{ 0, NULL }
};
static const ber_choice_t PropParm_extraInfo_choice[] = {
{ 0, &hf_h248_relation , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_Relation },
{ 1, &hf_h248_range , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
{ 2, &hf_h248_sublist , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
{ 0, NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_PropParm_extraInfo(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_choice(actx, tree, tvb, offset,
PropParm_extraInfo_choice, hf_index, ett_h248_PropParm_extraInfo,
NULL);
return offset;
}
static const ber_sequence_t PropertyParm_sequence[] = {
{ &hf_h248_propertyName , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_PropertyName },
{ &hf_h248_propertyParamValue, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_PropertyID },
{ &hf_h248_propParm_extraInfo, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_PropParm_extraInfo },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_PropertyParm(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
PropertyParm_sequence, hf_index, ett_h248_PropertyParm);
return offset;
}
static const ber_sequence_t SEQUENCE_OF_PropertyParm_sequence_of[1] = {
{ &hf_h248_contextProp_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_PropertyParm },
};
static int
dissect_h248_SEQUENCE_OF_PropertyParm(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
SEQUENCE_OF_PropertyParm_sequence_of, hf_index, ett_h248_SEQUENCE_OF_PropertyParm);
return offset;
}
static int
dissect_h248_ContextIDinList(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
NULL);
return offset;
}
static const ber_sequence_t SEQUENCE_OF_ContextIDinList_sequence_of[1] = {
{ &hf_h248_contextList_item, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_h248_ContextIDinList },
};
static int
dissect_h248_SEQUENCE_OF_ContextIDinList(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
SEQUENCE_OF_ContextIDinList_sequence_of, hf_index, ett_h248_SEQUENCE_OF_ContextIDinList);
return offset;
}
static const ber_sequence_t ContextRequest_sequence[] = {
{ &hf_h248_priority , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_15 },
{ &hf_h248_emergency , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
{ &hf_h248_topologyReq , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_T_topologyReq },
{ &hf_h248_iepscallind_BOOL, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_Iepscallind_BOOL },
{ &hf_h248_contextProp , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_PropertyParm },
{ &hf_h248_contextList , BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_ContextIDinList },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_ContextRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
ContextRequest_sequence, hf_index, ett_h248_ContextRequest);
return offset;
}
static int
dissect_h248_NULL(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_null(implicit_tag, actx, tree, tvb, offset, hf_index);
return offset;
}
static const ber_sequence_t IndAudPropertyParm_sequence[] = {
{ &hf_h248_name , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_PkgdName },
{ &hf_h248_propertyParms , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_PropertyParm },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_IndAudPropertyParm(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
IndAudPropertyParm_sequence, hf_index, ett_h248_IndAudPropertyParm);
return offset;
}
static const ber_sequence_t SEQUENCE_OF_IndAudPropertyParm_sequence_of[1] = {
{ &hf_h248_contextPropAud_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_IndAudPropertyParm },
};
static int
dissect_h248_SEQUENCE_OF_IndAudPropertyParm(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
SEQUENCE_OF_IndAudPropertyParm_sequence_of, hf_index, ett_h248_SEQUENCE_OF_IndAudPropertyParm);
return offset;
}
static const value_string h248_SelectLogic_vals[] = {
{ 0, "andAUDITSelect" },
{ 1, "orAUDITSelect" },
{ 0, NULL }
};
static const ber_choice_t SelectLogic_choice[] = {
{ 0, &hf_h248_andAUDITSelect , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_NULL },
{ 1, &hf_h248_orAUDITSelect , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_NULL },
{ 0, NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_SelectLogic(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_choice(actx, tree, tvb, offset,
SelectLogic_choice, hf_index, ett_h248_SelectLogic,
NULL);
return offset;
}
static const ber_sequence_t ContextAttrAuditRequest_sequence[] = {
{ &hf_h248_topology , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
{ &hf_h248_cAAREmergency , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
{ &hf_h248_cAARPriority , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
{ &hf_h248_iepscallind , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
{ &hf_h248_contextPropAud , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_IndAudPropertyParm },
{ &hf_h248_selectpriority , BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_15 },
{ &hf_h248_selectemergency, BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
{ &hf_h248_selectiepscallind, BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
{ &hf_h248_selectLogic , BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_SelectLogic },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_ContextAttrAuditRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
ContextAttrAuditRequest_sequence, hf_index, ett_h248_ContextAttrAuditRequest);
return offset;
}
static int
dissect_h248_T_contextAttrAuditReq(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 238 "./asn1/h248/h248.cnf"
curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_CTX_ATTR_AUDIT_REQ,offset,keep_persistent_data);
H248_TAP();
offset = dissect_h248_ContextAttrAuditRequest(implicit_tag, tvb, offset, actx, tree, hf_index);
#line 242 "./asn1/h248/h248.cnf"
curr_info.cmd = NULL;
return offset;
}
static const ber_sequence_t TerminationIDList_sequence_of[1] = {
{ &hf_h248_TerminationIDList_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_TerminationID },
};
static int
dissect_h248_TerminationIDList(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
TerminationIDList_sequence_of, hf_index, ett_h248_TerminationIDList);
return offset;
}
static const value_string h248_EventBufferControl_vals[] = {
{ 0, "off" },
{ 1, "lockStep" },
{ 0, NULL }
};
static int
dissect_h248_EventBufferControl(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
NULL);
return offset;
}
static const value_string h248_ServiceState_vals[] = {
{ 0, "test" },
{ 1, "outOfSvc" },
{ 2, "inSvc" },
{ 0, NULL }
};
static int
dissect_h248_ServiceState(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
NULL);
return offset;
}
static const ber_sequence_t TerminationStateDescriptor_sequence[] = {
{ &hf_h248_tSDpropertyParms, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_PropertyParm },
{ &hf_h248_tSEventBufferControl, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_EventBufferControl },
{ &hf_h248_serviceState , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_ServiceState },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_TerminationStateDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
TerminationStateDescriptor_sequence, hf_index, ett_h248_TerminationStateDescriptor);
return offset;
}
static const value_string h248_StreamMode_vals[] = {
{ 0, "sendOnly" },
{ 1, "recvOnly" },
{ 2, "sendRecv" },
{ 3, "inactive" },
{ 4, "loopBack" },
{ 0, NULL }
};
static int
dissect_h248_StreamMode(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
NULL);
return offset;
}
static const ber_sequence_t LocalControlDescriptor_sequence[] = {
{ &hf_h248_streamMode , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamMode },
{ &hf_h248_reserveValue , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
{ &hf_h248_reserveGroup , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
{ &hf_h248_lCDpropertyParms, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_PropertyParm },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_LocalControlDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
LocalControlDescriptor_sequence, hf_index, ett_h248_LocalControlDescriptor);
return offset;
}
static const ber_sequence_t PropertyGroup_sequence_of[1] = {
{ &hf_h248_PropertyGroup_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_PropertyParm },
};
static int
dissect_h248_PropertyGroup(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
PropertyGroup_sequence_of, hf_index, ett_h248_PropertyGroup);
return offset;
}
static const ber_sequence_t SEQUENCE_OF_PropertyGroup_sequence_of[1] = {
{ &hf_h248_propGrps_item , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_PropertyGroup },
};
static int
dissect_h248_SEQUENCE_OF_PropertyGroup(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
SEQUENCE_OF_PropertyGroup_sequence_of, hf_index, ett_h248_SEQUENCE_OF_PropertyGroup);
return offset;
}
static const ber_sequence_t LocalRemoteDescriptor_sequence[] = {
{ &hf_h248_propGrps , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_PropertyGroup },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_LocalRemoteDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
LocalRemoteDescriptor_sequence, hf_index, ett_h248_LocalRemoteDescriptor);
return offset;
}
static int
dissect_h248_StatName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_h248_PkgdName(implicit_tag, tvb, offset, actx, tree, hf_index);
return offset;
}
static int
dissect_h248_OCTET_STRING(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
NULL);
return offset;
}
static const ber_sequence_t Value_sequence_of[1] = {
{ &hf_h248_Value_item , BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_h248_OCTET_STRING },
};
static int
dissect_h248_Value(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
Value_sequence_of, hf_index, ett_h248_Value);
return offset;
}
static int
dissect_h248_StatValue(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_h248_Value(implicit_tag, tvb, offset, actx, tree, hf_index);
return offset;
}
static const ber_sequence_t StatisticsParameter_sequence[] = {
{ &hf_h248_statName , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_StatName },
{ &hf_h248_statValue , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StatValue },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_StatisticsParameter(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
StatisticsParameter_sequence, hf_index, ett_h248_StatisticsParameter);
return offset;
}
static const ber_sequence_t StatisticsDescriptor_sequence_of[1] = {
{ &hf_h248_StatisticsDescriptor_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_StatisticsParameter },
};
static int
dissect_h248_StatisticsDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
StatisticsDescriptor_sequence_of, hf_index, ett_h248_StatisticsDescriptor);
return offset;
}
static const ber_sequence_t StreamParms_sequence[] = {
{ &hf_h248_localControlDescriptor, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_LocalControlDescriptor },
{ &hf_h248_localDescriptor, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_LocalRemoteDescriptor },
{ &hf_h248_remoteDescriptor, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_LocalRemoteDescriptor },
{ &hf_h248_sPstatisticsDescriptor, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StatisticsDescriptor },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_StreamParms(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
StreamParms_sequence, hf_index, ett_h248_StreamParms);
return offset;
}
static const ber_sequence_t StreamDescriptor_sequence[] = {
{ &hf_h248_streamID , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
{ &hf_h248_streamParms , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_StreamParms },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_StreamDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
StreamDescriptor_sequence, hf_index, ett_h248_StreamDescriptor);
return offset;
}
static const ber_sequence_t SEQUENCE_OF_StreamDescriptor_sequence_of[1] = {
{ &hf_h248_mediaDescriptorMultiStream_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_StreamDescriptor },
};
static int
dissect_h248_SEQUENCE_OF_StreamDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
SEQUENCE_OF_StreamDescriptor_sequence_of, hf_index, ett_h248_SEQUENCE_OF_StreamDescriptor);
return offset;
}
static const value_string h248_T_streams_vals[] = {
{ 0, "oneStream" },
{ 1, "multiStream" },
{ 0, NULL }
};
static const ber_choice_t T_streams_choice[] = {
{ 0, &hf_h248_mediaDescriptorOneStream, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_StreamParms },
{ 1, &hf_h248_mediaDescriptorMultiStream, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_StreamDescriptor },
{ 0, NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_T_streams(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_choice(actx, tree, tvb, offset,
T_streams_choice, hf_index, ett_h248_T_streams,
NULL);
return offset;
}
static const ber_sequence_t MediaDescriptor_sequence[] = {
{ &hf_h248_termStateDescr , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_TerminationStateDescriptor },
{ &hf_h248_streams , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_T_streams },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_MediaDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
MediaDescriptor_sequence, hf_index, ett_h248_MediaDescriptor);
return offset;
}
static const value_string h248_ModemType_vals[] = {
{ 0, "v18" },
{ 1, "v22" },
{ 2, "v22bis" },
{ 3, "v32" },
{ 4, "v32bis" },
{ 5, "v34" },
{ 6, "v90" },
{ 7, "v91" },
{ 8, "synchISDN" },
{ 0, NULL }
};
static int
dissect_h248_ModemType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
NULL);
return offset;
}
static const ber_sequence_t SEQUENCE_OF_ModemType_sequence_of[1] = {
{ &hf_h248_mtl_item , BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_h248_ModemType },
};
static int
dissect_h248_SEQUENCE_OF_ModemType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
SEQUENCE_OF_ModemType_sequence_of, hf_index, ett_h248_SEQUENCE_OF_ModemType);
return offset;
}
static int
dissect_h248_OBJECT_IDENTIFIER(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_object_identifier(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
return offset;
}
static int
dissect_h248_INTEGER_0_255(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
NULL);
return offset;
}
static const ber_sequence_t H221NonStandard_sequence[] = {
{ &hf_h248_t35CountryCode1, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_255 },
{ &hf_h248_t35CountryCode2, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_255 },
{ &hf_h248_t35Extension , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_255 },
{ &hf_h248_manufacturerCode, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_H221NonStandard(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
H221NonStandard_sequence, hf_index, ett_h248_H221NonStandard);
return offset;
}
static int
dissect_h248_IA5String_SIZE_8(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
actx, tree, tvb, offset, hf_index,
NULL);
return offset;
}
static const value_string h248_NonStandardIdentifier_vals[] = {
{ 0, "object" },
{ 1, "h221NonStandard" },
{ 2, "experimental" },
{ 0, NULL }
};
static const ber_choice_t NonStandardIdentifier_choice[] = {
{ 0, &hf_h248_object , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_OBJECT_IDENTIFIER },
{ 1, &hf_h248_h221NonStandard, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_H221NonStandard },
{ 2, &hf_h248_experimental , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_IA5String_SIZE_8 },
{ 0, NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_NonStandardIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_choice(actx, tree, tvb, offset,
NonStandardIdentifier_choice, hf_index, ett_h248_NonStandardIdentifier,
NULL);
return offset;
}
static const ber_sequence_t NonStandardData_sequence[] = {
{ &hf_h248_nonStandardIdentifier, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_NonStandardIdentifier },
{ &hf_h248_data , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_OCTET_STRING },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_NonStandardData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
NonStandardData_sequence, hf_index, ett_h248_NonStandardData);
return offset;
}
static const ber_sequence_t ModemDescriptor_sequence[] = {
{ &hf_h248_mtl , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_ModemType },
{ &hf_h248_mpl , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_PropertyParm },
{ &hf_h248_nonStandardData, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NonStandardData },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_ModemDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
ModemDescriptor_sequence, hf_index, ett_h248_ModemDescriptor);
return offset;
}
static const value_string h248_MuxType_vals[] = {
{ 0, "h221" },
{ 1, "h223" },
{ 2, "h226" },
{ 3, "v76" },
{ 4, "nx64k" },
{ 0, NULL }
};
static int
dissect_h248_MuxType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
NULL);
return offset;
}
static const ber_sequence_t SEQUENCE_OF_TerminationID_sequence_of[1] = {
{ &hf_h248_termList_item , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_TerminationID },
};
static int
dissect_h248_SEQUENCE_OF_TerminationID(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
SEQUENCE_OF_TerminationID_sequence_of, hf_index, ett_h248_SEQUENCE_OF_TerminationID);
return offset;
}
static const ber_sequence_t MuxDescriptor_sequence[] = {
{ &hf_h248_muxType , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_MuxType },
{ &hf_h248_termList , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_TerminationID },
{ &hf_h248_nonStandardData, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NonStandardData },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_MuxDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
MuxDescriptor_sequence, hf_index, ett_h248_MuxDescriptor);
return offset;
}
static int
dissect_h248_RequestID(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
NULL);
return offset;
}
static int
dissect_h248_Name(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
NULL);
return offset;
}
static int
dissect_h248_DigitMapName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_h248_Name(implicit_tag, tvb, offset, actx, tree, hf_index);
return offset;
}
static int
dissect_h248_INTEGER_0_99(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
NULL);
return offset;
}
static const ber_sequence_t DigitMapValue_sequence[] = {
{ &hf_h248_startTimer , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_99 },
{ &hf_h248_shortTimer , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_99 },
{ &hf_h248_longTimer , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_99 },
{ &hf_h248_digitMapBody , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_IA5String },
{ &hf_h248_durationTimer , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_99 },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_DigitMapValue(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
DigitMapValue_sequence, hf_index, ett_h248_DigitMapValue);
return offset;
}
static const value_string h248_EventDM_vals[] = {
{ 0, "digitMapName" },
{ 1, "digitMapValue" },
{ 0, NULL }
};
static const ber_choice_t EventDM_choice[] = {
{ 0, &hf_h248_digitMapName , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_DigitMapName },
{ 1, &hf_h248_digitMapValue , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_DigitMapValue },
{ 0, NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_EventDM(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_choice(actx, tree, tvb, offset,
EventDM_choice, hf_index, ett_h248_EventDM,
NULL);
return offset;
}
static const value_string h248_SignalType_vals[] = {
{ 0, "brief" },
{ 1, "onOff" },
{ 2, "timeOut" },
{ 0, NULL }
};
static int
dissect_h248_SignalType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
NULL);
return offset;
}
static int * const NotifyCompletion_bits[] = {
&hf_h248_NotifyCompletion_onTimeOut,
&hf_h248_NotifyCompletion_onInterruptByEvent,
&hf_h248_NotifyCompletion_onInterruptByNewSignalDescr,
&hf_h248_NotifyCompletion_otherReason,
&hf_h248_NotifyCompletion_onIteration,
NULL
};
static int
dissect_h248_NotifyCompletion(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
NotifyCompletion_bits, 5, hf_index, ett_h248_NotifyCompletion,
NULL);
return offset;
}
static const ber_sequence_t SigParamValues_sequence_of[1] = {
{ &hf_h248_SigParamValues_item, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_h248_SigParamValue },
};
static int
dissect_h248_SigParamValues(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
SigParamValues_sequence_of, hf_index, ett_h248_SigParamValues);
return offset;
}
static const value_string h248_T_extraInfo_vals[] = {
{ 0, "relation" },
{ 1, "range" },
{ 2, "sublist" },
{ 0, NULL }
};
static const ber_choice_t T_extraInfo_choice[] = {
{ 0, &hf_h248_relation , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_Relation },
{ 1, &hf_h248_range , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
{ 2, &hf_h248_sublist , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
{ 0, NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_T_extraInfo(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_choice(actx, tree, tvb, offset,
T_extraInfo_choice, hf_index, ett_h248_T_extraInfo,
NULL);
return offset;
}
static const ber_sequence_t SigParameter_sequence[] = {
{ &hf_h248_sigParameterName, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_SigParameterName },
{ &hf_h248_value , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SigParamValues },
{ &hf_h248_extraInfo , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_T_extraInfo },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_SigParameter(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 402 "./asn1/h248/h248.cnf"
/* H248 v1 support */
if (h248_version > 1) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
SigParameter_sequence, hf_index, ett_h248_SigParameter);
} else {
offset = dissect_h248_SigParameterV1( implicit_tag, tvb, offset, actx, tree, hf_index);
}
return offset;
}
static const ber_sequence_t SEQUENCE_OF_SigParameter_sequence_of[1] = {
{ &hf_h248_sigParList_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_SigParameter },
};
static int
dissect_h248_SEQUENCE_OF_SigParameter(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
SEQUENCE_OF_SigParameter_sequence_of, hf_index, ett_h248_SEQUENCE_OF_SigParameter);
return offset;
}
static const value_string h248_SignalDirection_vals[] = {
{ 0, "internal" },
{ 1, "external" },
{ 2, "both" },
{ 0, NULL }
};
static int
dissect_h248_SignalDirection(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
NULL);
return offset;
}
static const ber_sequence_t Signal_sequence[] = {
{ &hf_h248_signalName , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_SignalName },
{ &hf_h248_streamID , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
{ &hf_h248_sigType , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SignalType },
{ &hf_h248_duration , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
{ &hf_h248_notifyCompletion, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NotifyCompletion },
{ &hf_h248_keepActive , BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
{ &hf_h248_sigParList , BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_SigParameter },
{ &hf_h248_direction , BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SignalDirection },
{ &hf_h248_requestID , BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_RequestID },
{ &hf_h248_intersigDelay , BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_Signal(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
Signal_sequence, hf_index, ett_h248_Signal);
return offset;
}
static const ber_sequence_t SEQUENCE_OF_Signal_sequence_of[1] = {
{ &hf_h248_signalList_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_Signal },
};
static int
dissect_h248_SEQUENCE_OF_Signal(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
SEQUENCE_OF_Signal_sequence_of, hf_index, ett_h248_SEQUENCE_OF_Signal);
return offset;
}
static const ber_sequence_t SeqSigList_sequence[] = {
{ &hf_h248_id , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
{ &hf_h248_signalList , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_Signal },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_SeqSigList(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
SeqSigList_sequence, hf_index, ett_h248_SeqSigList);
return offset;
}
static const value_string h248_SignalRequest_vals[] = {
{ 0, "signal" },
{ 1, "seqSigList" },
{ 0, NULL }
};
static const ber_choice_t SignalRequest_choice[] = {
{ 0, &hf_h248_signal , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_Signal },
{ 1, &hf_h248_seqSigList , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SeqSigList },
{ 0, NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_SignalRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_choice(actx, tree, tvb, offset,
SignalRequest_choice, hf_index, ett_h248_SignalRequest,
NULL);
return offset;
}
static const ber_sequence_t SignalsDescriptor_sequence_of[1] = {
{ &hf_h248_SignalsDescriptor_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_SignalRequest },
};
static int
dissect_h248_SignalsDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
SignalsDescriptor_sequence_of, hf_index, ett_h248_SignalsDescriptor);
return offset;
}
static const ber_sequence_t RegulatedEmbeddedDescriptor_sequence[] = {
{ &hf_h248_secondEvent , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SecondEventsDescriptor },
{ &hf_h248_signalsDescriptor, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SignalsDescriptor },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_RegulatedEmbeddedDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
RegulatedEmbeddedDescriptor_sequence, hf_index, ett_h248_RegulatedEmbeddedDescriptor);
return offset;
}
static const value_string h248_NotifyBehaviour_vals[] = {
{ 0, "notifyImmediate" },
{ 1, "notifyRegulated" },
{ 2, "neverNotify" },
{ 0, NULL }
};
static const ber_choice_t NotifyBehaviour_choice[] = {
{ 0, &hf_h248_notifyImmediate, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_NULL },
{ 1, &hf_h248_notifyRegulated, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_RegulatedEmbeddedDescriptor },
{ 2, &hf_h248_neverNotify , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_NULL },
{ 0, NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_NotifyBehaviour(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_choice(actx, tree, tvb, offset,
NotifyBehaviour_choice, hf_index, ett_h248_NotifyBehaviour,
NULL);
return offset;
}
static const ber_sequence_t SecondRequestedActions_sequence[] = {
{ &hf_h248_keepActive , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
{ &hf_h248_eventDM , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_EventDM },
{ &hf_h248_signalsDescriptor, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SignalsDescriptor },
{ &hf_h248_notifyBehaviour, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_NotifyBehaviour },
{ &hf_h248_resetEventsDescriptor, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_SecondRequestedActions(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
SecondRequestedActions_sequence, hf_index, ett_h248_SecondRequestedActions);
return offset;
}
static const ber_sequence_t EventParamValues_sequence_of[1] = {
{ &hf_h248_EventParamValues_item, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_h248_EventParamValue },
};
static int
dissect_h248_EventParamValues(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
EventParamValues_sequence_of, hf_index, ett_h248_EventParamValues);
return offset;
}
static const value_string h248_EventPar_extraInfo_vals[] = {
{ 0, "relation" },
{ 1, "range" },
{ 2, "sublist" },
{ 0, NULL }
};
static const ber_choice_t EventPar_extraInfo_choice[] = {
{ 0, &hf_h248_relation , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_Relation },
{ 1, &hf_h248_range , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
{ 2, &hf_h248_sublist , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
{ 0, NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_EventPar_extraInfo(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_choice(actx, tree, tvb, offset,
EventPar_extraInfo_choice, hf_index, ett_h248_EventPar_extraInfo,
NULL);
return offset;
}
static const ber_sequence_t EventParameter_sequence[] = {
{ &hf_h248_eventParameterName, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_EventParameterName },
{ &hf_h248_eventParamValue, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_EventParamValues },
{ &hf_h248_eventPar_extraInfo, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_EventPar_extraInfo },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_EventParameter(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 393 "./asn1/h248/h248.cnf"
/* H248 v1 support */
if (h248_version > 1) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
EventParameter_sequence, hf_index, ett_h248_EventParameter);
} else {
offset = dissect_h248_EventParameterV1( implicit_tag, tvb, offset, actx, tree, hf_index);
}
return offset;
}
static const ber_sequence_t SEQUENCE_OF_EventParameter_sequence_of[1] = {
{ &hf_h248_eventParList_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_EventParameter },
};
static int
dissect_h248_SEQUENCE_OF_EventParameter(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
SEQUENCE_OF_EventParameter_sequence_of, hf_index, ett_h248_SEQUENCE_OF_EventParameter);
return offset;
}
static const ber_sequence_t SecondRequestedEvent_sequence[] = {
{ &hf_h248_pkgdName , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_PkgdName },
{ &hf_h248_streamID , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
{ &hf_h248_secondaryEventAction, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SecondRequestedActions },
{ &hf_h248_evParList , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_EventParameter },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_SecondRequestedEvent(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
SecondRequestedEvent_sequence, hf_index, ett_h248_SecondRequestedEvent);
return offset;
}
static const ber_sequence_t SEQUENCE_OF_SecondRequestedEvent_sequence_of[1] = {
{ &hf_h248_secondaryEventList_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_SecondRequestedEvent },
};
static int
dissect_h248_SEQUENCE_OF_SecondRequestedEvent(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
SEQUENCE_OF_SecondRequestedEvent_sequence_of, hf_index, ett_h248_SEQUENCE_OF_SecondRequestedEvent);
return offset;
}
static const ber_sequence_t SecondEventsDescriptor_sequence[] = {
{ &hf_h248_requestID , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_RequestID },
{ &hf_h248_secondaryEventList, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_SecondRequestedEvent },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_SecondEventsDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
SecondEventsDescriptor_sequence, hf_index, ett_h248_SecondEventsDescriptor);
return offset;
}
static const ber_sequence_t RequestedActions_sequence[] = {
{ &hf_h248_keepActive , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
{ &hf_h248_eventDM , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_EventDM },
{ &hf_h248_secondEvent , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SecondEventsDescriptor },
{ &hf_h248_signalsDescriptor, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SignalsDescriptor },
{ &hf_h248_notifyBehaviour, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_NotifyBehaviour },
{ &hf_h248_resetEventsDescriptor, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_RequestedActions(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
RequestedActions_sequence, hf_index, ett_h248_RequestedActions);
return offset;
}
static const ber_sequence_t RequestedEvent_sequence[] = {
{ &hf_h248_eventName , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_EventName },
{ &hf_h248_streamID , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
{ &hf_h248_eventAction , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_RequestedActions },
{ &hf_h248_evParList , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_EventParameter },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_RequestedEvent(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
RequestedEvent_sequence, hf_index, ett_h248_RequestedEvent);
return offset;
}
static const ber_sequence_t SEQUENCE_OF_RequestedEvent_sequence_of[1] = {
{ &hf_h248_eventList_item , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_RequestedEvent },
};
static int
dissect_h248_SEQUENCE_OF_RequestedEvent(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
SEQUENCE_OF_RequestedEvent_sequence_of, hf_index, ett_h248_SEQUENCE_OF_RequestedEvent);
return offset;
}
static const ber_sequence_t EventsDescriptor_sequence[] = {
{ &hf_h248_requestID , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_RequestID },
{ &hf_h248_eventList , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_RequestedEvent },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_EventsDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
EventsDescriptor_sequence, hf_index, ett_h248_EventsDescriptor);
return offset;
}
static const ber_sequence_t EventSpec_sequence[] = {
{ &hf_h248_eventName , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_EventName },
{ &hf_h248_streamID , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
{ &hf_h248_eventParList , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_EventParameter },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_EventSpec(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
EventSpec_sequence, hf_index, ett_h248_EventSpec);
return offset;
}
static const ber_sequence_t EventBufferDescriptor_sequence_of[1] = {
{ &hf_h248_EventBufferDescriptor_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_EventSpec },
};
static int
dissect_h248_EventBufferDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
EventBufferDescriptor_sequence_of, hf_index, ett_h248_EventBufferDescriptor);
return offset;
}
static const ber_sequence_t DigitMapDescriptor_sequence[] = {
{ &hf_h248_digitMapName , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_DigitMapName },
{ &hf_h248_digitMapValue , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_DigitMapValue },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_DigitMapDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
DigitMapDescriptor_sequence, hf_index, ett_h248_DigitMapDescriptor);
return offset;
}
static int * const T_auditToken_bits[] = {
&hf_h248_T_auditToken_muxToken,
&hf_h248_T_auditToken_modemToken,
&hf_h248_T_auditToken_mediaToken,
&hf_h248_T_auditToken_eventsToken,
&hf_h248_T_auditToken_signalsToken,
&hf_h248_T_auditToken_digitMapToken,
&hf_h248_T_auditToken_statsToken,
&hf_h248_T_auditToken_observedEventsToken,
&hf_h248_T_auditToken_packagesToken,
&hf_h248_T_auditToken_eventBufferToken,
NULL
};
static int
dissect_h248_T_auditToken(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
T_auditToken_bits, 10, hf_index, ett_h248_T_auditToken,
NULL);
return offset;
}
static const ber_sequence_t IndAudTerminationStateDescriptor_sequence[] = {
{ &hf_h248_indAudPropertyParms, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_IndAudPropertyParm },
{ &hf_h248_eventBufferControl, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
{ &hf_h248_iATSDServiceState, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
{ &hf_h248_serviceStateSel, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_ServiceState },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_IndAudTerminationStateDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
IndAudTerminationStateDescriptor_sequence, hf_index, ett_h248_IndAudTerminationStateDescriptor);
return offset;
}
static const ber_sequence_t IndAudLocalControlDescriptor_sequence[] = {
{ &hf_h248_iALCDStreamMode, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
{ &hf_h248_iALCDReserveValue, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
{ &hf_h248_iALCDReserveGroup, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
{ &hf_h248_indAudPropertyParms, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_IndAudPropertyParm },
{ &hf_h248_streamModeSel , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamMode },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_IndAudLocalControlDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
IndAudLocalControlDescriptor_sequence, hf_index, ett_h248_IndAudLocalControlDescriptor);
return offset;
}
static const ber_sequence_t IndAudPropertyGroup_sequence_of[1] = {
{ &hf_h248_IndAudPropertyGroup_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_IndAudPropertyParm },
};
static int
dissect_h248_IndAudPropertyGroup(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
IndAudPropertyGroup_sequence_of, hf_index, ett_h248_IndAudPropertyGroup);
return offset;
}
static const ber_sequence_t IndAudLocalRemoteDescriptor_sequence[] = {
{ &hf_h248_propGroupID , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
{ &hf_h248_iAPropertyGroup, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_IndAudPropertyGroup },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_IndAudLocalRemoteDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
IndAudLocalRemoteDescriptor_sequence, hf_index, ett_h248_IndAudLocalRemoteDescriptor);
return offset;
}
static const ber_sequence_t IndAudStatisticsDescriptor_sequence[] = {
{ &hf_h248_iAStatName , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_PkgdName },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_IndAudStatisticsDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
IndAudStatisticsDescriptor_sequence, hf_index, ett_h248_IndAudStatisticsDescriptor);
return offset;
}
static const ber_sequence_t IndAudStreamParms_sequence[] = {
{ &hf_h248_iASPLocalControlDescriptor, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_IndAudLocalControlDescriptor },
{ &hf_h248_iASPLocalDescriptor, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_IndAudLocalRemoteDescriptor },
{ &hf_h248_iASPRemoteDescriptor, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_IndAudLocalRemoteDescriptor },
{ &hf_h248_statisticsDescriptor, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_IndAudStatisticsDescriptor },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_IndAudStreamParms(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
IndAudStreamParms_sequence, hf_index, ett_h248_IndAudStreamParms);
return offset;
}
static const ber_sequence_t IndAudStreamDescriptor_sequence[] = {
{ &hf_h248_streamID , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
{ &hf_h248_indAudStreamParms, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_IndAudStreamParms },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_IndAudStreamDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
IndAudStreamDescriptor_sequence, hf_index, ett_h248_IndAudStreamDescriptor);
return offset;
}
static const ber_sequence_t SEQUENCE_OF_IndAudStreamDescriptor_sequence_of[1] = {
{ &hf_h248_multiStream_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_IndAudStreamDescriptor },
};
static int
dissect_h248_SEQUENCE_OF_IndAudStreamDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
SEQUENCE_OF_IndAudStreamDescriptor_sequence_of, hf_index, ett_h248_SEQUENCE_OF_IndAudStreamDescriptor);
return offset;
}
static const value_string h248_IndAudMediaDescriptorStreams_vals[] = {
{ 0, "oneStream" },
{ 1, "multiStream" },
{ 0, NULL }
};
static const ber_choice_t IndAudMediaDescriptorStreams_choice[] = {
{ 0, &hf_h248_oneStream , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_IndAudStreamParms },
{ 1, &hf_h248_multiStream , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_IndAudStreamDescriptor },
{ 0, NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_IndAudMediaDescriptorStreams(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_choice(actx, tree, tvb, offset,
IndAudMediaDescriptorStreams_choice, hf_index, ett_h248_IndAudMediaDescriptorStreams,
NULL);
return offset;
}
static const ber_sequence_t IndAudMediaDescriptor_sequence[] = {
{ &hf_h248_indAudTerminationStateDescriptor, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_IndAudTerminationStateDescriptor },
{ &hf_h248_indAudMediaDescriptorStreams, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_IndAudMediaDescriptorStreams },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_IndAudMediaDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
IndAudMediaDescriptor_sequence, hf_index, ett_h248_IndAudMediaDescriptor);
return offset;
}
static const ber_sequence_t IndAudEventsDescriptor_sequence[] = {
{ &hf_h248_requestID , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_RequestID },
{ &hf_h248_iAEDPkgdName , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_PkgdName },
{ &hf_h248_streamID , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_IndAudEventsDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
IndAudEventsDescriptor_sequence, hf_index, ett_h248_IndAudEventsDescriptor);
return offset;
}
static const ber_sequence_t IndAudEventBufferDescriptor_sequence[] = {
{ &hf_h248_iAEBDEventName , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_PkgdName },
{ &hf_h248_streamID , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_IndAudEventBufferDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
IndAudEventBufferDescriptor_sequence, hf_index, ett_h248_IndAudEventBufferDescriptor);
return offset;
}
static const ber_sequence_t IndAudSignal_sequence[] = {
{ &hf_h248_iASignalName , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_PkgdName },
{ &hf_h248_streamID , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
{ &hf_h248_signalRequestID, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_RequestID },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_IndAudSignal(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
IndAudSignal_sequence, hf_index, ett_h248_IndAudSignal);
return offset;
}
static const ber_sequence_t IndAudSeqSigList_sequence[] = {
{ &hf_h248_id , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
{ &hf_h248_iASignalList , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_IndAudSignal },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_IndAudSeqSigList(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
IndAudSeqSigList_sequence, hf_index, ett_h248_IndAudSeqSigList);
return offset;
}
static const value_string h248_IndAudSignalsDescriptor_vals[] = {
{ 0, "signal" },
{ 1, "seqSigList" },
{ 0, NULL }
};
static const ber_choice_t IndAudSignalsDescriptor_choice[] = {
{ 0, &hf_h248_indAudSignal , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_IndAudSignal },
{ 1, &hf_h248_indAudSeqSigList, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_IndAudSeqSigList },
{ 0, NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_IndAudSignalsDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_choice(actx, tree, tvb, offset,
IndAudSignalsDescriptor_choice, hf_index, ett_h248_IndAudSignalsDescriptor,
NULL);
return offset;
}
static const ber_sequence_t IndAudDigitMapDescriptor_sequence[] = {
{ &hf_h248_digitMapName , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_DigitMapName },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_IndAudDigitMapDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
IndAudDigitMapDescriptor_sequence, hf_index, ett_h248_IndAudDigitMapDescriptor);
return offset;
}
static const ber_sequence_t IndAudPackagesDescriptor_sequence[] = {
{ &hf_h248_packageName , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_Name },
{ &hf_h248_packageVersion , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_99 },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_IndAudPackagesDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
IndAudPackagesDescriptor_sequence, hf_index, ett_h248_IndAudPackagesDescriptor);
return offset;
}
static const value_string h248_IndAuditParameter_vals[] = {
{ 0, "indaudmediaDescriptor" },
{ 1, "indaudeventsDescriptor" },
{ 2, "indaudeventBufferDescriptor" },
{ 3, "indaudsignalsDescriptor" },
{ 4, "indauddigitMapDescriptor" },
{ 5, "indaudstatisticsDescriptor" },
{ 6, "indaudpackagesDescriptor" },
{ 0, NULL }
};
static const ber_choice_t IndAuditParameter_choice[] = {
{ 0, &hf_h248_indaudmediaDescriptor, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_IndAudMediaDescriptor },
{ 1, &hf_h248_indaudeventsDescriptor, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_IndAudEventsDescriptor },
{ 2, &hf_h248_indaudeventBufferDescriptor, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_IndAudEventBufferDescriptor },
{ 3, &hf_h248_indaudsignalsDescriptor, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_IndAudSignalsDescriptor },
{ 4, &hf_h248_indauddigitMapDescriptor, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_h248_IndAudDigitMapDescriptor },
{ 5, &hf_h248_indaudstatisticsDescriptor, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_h248_IndAudStatisticsDescriptor },
{ 6, &hf_h248_indaudpackagesDescriptor, BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_h248_IndAudPackagesDescriptor },
{ 0, NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_IndAuditParameter(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_choice(actx, tree, tvb, offset,
IndAuditParameter_choice, hf_index, ett_h248_IndAuditParameter,
NULL);
return offset;
}
static const ber_sequence_t SEQUENCE_OF_IndAuditParameter_sequence_of[1] = {
{ &hf_h248_auditPropertyToken_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_IndAuditParameter },
};
static int
dissect_h248_SEQUENCE_OF_IndAuditParameter(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
SEQUENCE_OF_IndAuditParameter_sequence_of, hf_index, ett_h248_SEQUENCE_OF_IndAuditParameter);
return offset;
}
static const ber_sequence_t AuditDescriptor_sequence[] = {
{ &hf_h248_auditToken , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_T_auditToken },
{ &hf_h248_auditPropertyToken, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_IndAuditParameter },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_AuditDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
AuditDescriptor_sequence, hf_index, ett_h248_AuditDescriptor);
return offset;
}
static const value_string h248_AmmDescriptor_vals[] = {
{ 0, "mediaDescriptor" },
{ 1, "modemDescriptor" },
{ 2, "muxDescriptor" },
{ 3, "eventsDescriptor" },
{ 4, "eventBufferDescriptor" },
{ 5, "signalsDescriptor" },
{ 6, "digitMapDescriptor" },
{ 7, "auditDescriptor" },
{ 8, "statisticsDescriptor" },
{ 0, NULL }
};
static const ber_choice_t AmmDescriptor_choice[] = {
{ 0, &hf_h248_mediaDescriptor, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_MediaDescriptor },
{ 1, &hf_h248_modemDescriptor, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_ModemDescriptor },
{ 2, &hf_h248_muxDescriptor , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_MuxDescriptor },
{ 3, &hf_h248_eventsDescriptor, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_EventsDescriptor },
{ 4, &hf_h248_eventBufferDescriptor, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_h248_EventBufferDescriptor },
{ 5, &hf_h248_signalsDescriptor, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_h248_SignalsDescriptor },
{ 6, &hf_h248_digitMapDescriptor, BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_h248_DigitMapDescriptor },
{ 7, &hf_h248_auditDescriptor, BER_CLASS_CON, 7, BER_FLAGS_IMPLTAG, dissect_h248_AuditDescriptor },
{ 8, &hf_h248_aDstatisticsDescriptor, BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_h248_StatisticsDescriptor },
{ 0, NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_AmmDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_choice(actx, tree, tvb, offset,
AmmDescriptor_choice, hf_index, ett_h248_AmmDescriptor,
NULL);
return offset;
}
static const ber_sequence_t SEQUENCE_OF_AmmDescriptor_sequence_of[1] = {
{ &hf_h248_descriptors_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_AmmDescriptor },
};
static int
dissect_h248_SEQUENCE_OF_AmmDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
SEQUENCE_OF_AmmDescriptor_sequence_of, hf_index, ett_h248_SEQUENCE_OF_AmmDescriptor);
return offset;
}
static const ber_sequence_t AmmRequest_sequence[] = {
{ &hf_h248_terminationIDList, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationIDList },
{ &hf_h248_descriptors , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_AmmDescriptor },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_AmmRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
AmmRequest_sequence, hf_index, ett_h248_AmmRequest);
return offset;
}
static int
dissect_h248_T_addReq(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 163 "./asn1/h248/h248.cnf"
curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_ADD_REQ,offset,keep_persistent_data);
H248_TAP();
offset = dissect_h248_AmmRequest(implicit_tag, tvb, offset, actx, tree, hf_index);
#line 168 "./asn1/h248/h248.cnf"
curr_info.cmd = NULL;
return offset;
}
static int
dissect_h248_T_moveReq(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 172 "./asn1/h248/h248.cnf"
curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_MOVE_REQ,offset,keep_persistent_data);
H248_TAP();
offset = dissect_h248_AmmRequest(implicit_tag, tvb, offset, actx, tree, hf_index);
#line 178 "./asn1/h248/h248.cnf"
curr_info.cmd = NULL;
return offset;
}
static int
dissect_h248_T_modReq(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 182 "./asn1/h248/h248.cnf"
curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_MOD_REQ,offset,keep_persistent_data);
H248_TAP();
offset = dissect_h248_AmmRequest(implicit_tag, tvb, offset, actx, tree, hf_index);
#line 186 "./asn1/h248/h248.cnf"
curr_info.cmd = NULL;
return offset;
}
static const ber_sequence_t SubtractRequest_sequence[] = {
{ &hf_h248_terminationIDList, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationIDList },
{ &hf_h248_auditDescriptor, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_AuditDescriptor },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_SubtractRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
SubtractRequest_sequence, hf_index, ett_h248_SubtractRequest);
return offset;
}
static int
dissect_h248_T_subtractReq(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 190 "./asn1/h248/h248.cnf"
curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_SUB_REQ,offset,keep_persistent_data);
H248_TAP();
offset = dissect_h248_SubtractRequest(implicit_tag, tvb, offset, actx, tree, hf_index);
#line 194 "./asn1/h248/h248.cnf"
curr_info.cmd = NULL;
return offset;
}
static const ber_sequence_t AuditRequest_sequence[] = {
{ &hf_h248_terminationID , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationID },
{ &hf_h248_auditDescriptor, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_AuditDescriptor },
{ &hf_h248_terminationIDList, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_TerminationIDList },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_AuditRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
AuditRequest_sequence, hf_index, ett_h248_AuditRequest);
return offset;
}
static int
dissect_h248_T_auditCapRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 198 "./asn1/h248/h248.cnf"
curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_AUDITCAP_REQ,offset,keep_persistent_data);
H248_TAP();
offset = dissect_h248_AuditRequest(implicit_tag, tvb, offset, actx, tree, hf_index);
#line 202 "./asn1/h248/h248.cnf"
curr_info.cmd = NULL;
return offset;
}
static int
dissect_h248_T_auditValueRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 206 "./asn1/h248/h248.cnf"
curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_AUDITVAL_REQ,offset,keep_persistent_data);
H248_TAP();
offset = dissect_h248_AuditRequest(implicit_tag, tvb, offset, actx, tree, hf_index);
#line 210 "./asn1/h248/h248.cnf"
curr_info.cmd = NULL;
return offset;
}
static const ber_sequence_t TimeNotation_sequence[] = {
{ &hf_h248_date , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_IA5String_SIZE_8 },
{ &hf_h248_time , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_IA5String_SIZE_8 },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_TimeNotation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
TimeNotation_sequence, hf_index, ett_h248_TimeNotation);
return offset;
}
static const ber_sequence_t ObservedEvent_sequence[] = {
{ &hf_h248_eventName , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_EventName },
{ &hf_h248_streamID , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
{ &hf_h248_eventParList , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_EventParameter },
{ &hf_h248_timeNotation , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_TimeNotation },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_ObservedEvent(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
ObservedEvent_sequence, hf_index, ett_h248_ObservedEvent);
return offset;
}
static const ber_sequence_t SEQUENCE_OF_ObservedEvent_sequence_of[1] = {
{ &hf_h248_observedEventLst_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_ObservedEvent },
};
static int
dissect_h248_SEQUENCE_OF_ObservedEvent(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
SEQUENCE_OF_ObservedEvent_sequence_of, hf_index, ett_h248_SEQUENCE_OF_ObservedEvent);
return offset;
}
static const ber_sequence_t ObservedEventsDescriptor_sequence[] = {
{ &hf_h248_requestId , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_RequestID },
{ &hf_h248_observedEventLst, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_ObservedEvent },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_ObservedEventsDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
ObservedEventsDescriptor_sequence, hf_index, ett_h248_ObservedEventsDescriptor);
return offset;
}
static const ber_sequence_t NotifyRequest_sequence[] = {
{ &hf_h248_terminationIDList, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationIDList },
{ &hf_h248_observedEventsDescriptor, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_ObservedEventsDescriptor },
{ &hf_h248_errorDescriptor, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_ErrorDescriptor },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_NotifyRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
NotifyRequest_sequence, hf_index, ett_h248_NotifyRequest);
return offset;
}
static int
dissect_h248_T_notifyReq(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 214 "./asn1/h248/h248.cnf"
curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_NOTIFY_REQ,offset,keep_persistent_data);
H248_TAP();
offset = dissect_h248_NotifyRequest(implicit_tag, tvb, offset, actx, tree, hf_index);
#line 218 "./asn1/h248/h248.cnf"
curr_info.cmd = NULL;
return offset;
}
static const value_string h248_ServiceChangeMethod_vals[] = {
{ 0, "failover" },
{ 1, "forced" },
{ 2, "graceful" },
{ 3, "restart" },
{ 4, "disconnected" },
{ 5, "handOff" },
{ 0, NULL }
};
static int
dissect_h248_ServiceChangeMethod(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
NULL);
return offset;
}
static const value_string h248_ServiceChangeAddress_vals[] = {
{ 0, "portNumber" },
{ 1, "ip4Address" },
{ 2, "ip6Address" },
{ 3, "domainName" },
{ 4, "deviceName" },
{ 5, "mtpAddress" },
{ 0, NULL }
};
static const ber_choice_t ServiceChangeAddress_choice[] = {
{ 0, &hf_h248_portNumber , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
{ 1, &hf_h248_ip4Address , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_IP4Address },
{ 2, &hf_h248_ip6Address , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_IP6Address },
{ 3, &hf_h248_domainName , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_DomainName },
{ 4, &hf_h248_deviceName , BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_h248_PathName },
{ 5, &hf_h248_mtpAddress , BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_h248_MtpAddress },
{ 0, NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_ServiceChangeAddress(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_choice(actx, tree, tvb, offset,
ServiceChangeAddress_choice, hf_index, ett_h248_ServiceChangeAddress,
NULL);
return offset;
}
static int
dissect_h248_IA5String_SIZE_1_67(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
actx, tree, tvb, offset, hf_index,
NULL);
return offset;
}
static const ber_sequence_t ServiceChangeProfile_sequence[] = {
{ &hf_h248_profileName , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_IA5String_SIZE_1_67 },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_ServiceChangeProfile(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
ServiceChangeProfile_sequence, hf_index, ett_h248_ServiceChangeProfile);
return offset;
}
static int
dissect_h248_SCreasonValueOctetStr(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 383 "./asn1/h248/h248.cnf"
tvbuff_t *parameter_tvb;
offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
&parameter_tvb);
if (!parameter_tvb)
return offset;
dissect_h248_ServiceChangeReasonStr(FALSE, parameter_tvb, 0, actx, tree, hf_h248_serviceChangeReasonStr);
return offset;
}
static const ber_sequence_t SCreasonValue_sequence_of[1] = {
{ &hf_h248_SCreasonValue_item, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_h248_SCreasonValueOctetStr },
};
static int
dissect_h248_SCreasonValue(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
SCreasonValue_sequence_of, hf_index, ett_h248_SCreasonValue);
return offset;
}
static int
dissect_h248_INTEGER_0_4294967295(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
NULL);
return offset;
}
static const ber_sequence_t ServiceChangeParm_sequence[] = {
{ &hf_h248_serviceChangeMethod, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_ServiceChangeMethod },
{ &hf_h248_serviceChangeAddress, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_ServiceChangeAddress },
{ &hf_h248_serviceChangeVersion, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_99 },
{ &hf_h248_serviceChangeProfile, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_ServiceChangeProfile },
{ &hf_h248_serviceChangeReason, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_h248_SCreasonValue },
{ &hf_h248_serviceChangeDelay, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_4294967295 },
{ &hf_h248_serviceChangeMgcId, BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_MId },
{ &hf_h248_timeStamp , BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_TimeNotation },
{ &hf_h248_nonStandardData, BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NonStandardData },
{ &hf_h248_serviceChangeInfo, BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_AuditDescriptor },
{ &hf_h248_serviceChangeIncompleteFlag, BER_CLASS_CON, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_ServiceChangeParm(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
ServiceChangeParm_sequence, hf_index, ett_h248_ServiceChangeParm);
return offset;
}
static const ber_sequence_t ServiceChangeRequest_sequence[] = {
{ &hf_h248_terminationIDList, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationIDList },
{ &hf_h248_serviceChangeParms, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_ServiceChangeParm },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_ServiceChangeRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 222 "./asn1/h248/h248.cnf"
curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_SVCCHG_REQ,offset,keep_persistent_data);
H248_TAP();
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
ServiceChangeRequest_sequence, hf_index, ett_h248_ServiceChangeRequest);
#line 226 "./asn1/h248/h248.cnf"
curr_info.cmd = NULL;
return offset;
}
static const value_string h248_Command_vals[] = {
{ 0, "addReq" },
{ 1, "moveReq" },
{ 2, "modReq" },
{ 3, "subtractReq" },
{ 4, "auditCapRequest" },
{ 5, "auditValueRequest" },
{ 6, "notifyReq" },
{ 7, "serviceChangeReq" },
{ 0, NULL }
};
static const ber_choice_t Command_choice[] = {
{ 0, &hf_h248_addReq , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_T_addReq },
{ 1, &hf_h248_moveReq , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_T_moveReq },
{ 2, &hf_h248_modReq , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_T_modReq },
{ 3, &hf_h248_subtractReq , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_T_subtractReq },
{ 4, &hf_h248_auditCapRequest, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_h248_T_auditCapRequest },
{ 5, &hf_h248_auditValueRequest, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_h248_T_auditValueRequest },
{ 6, &hf_h248_notifyReq , BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_h248_T_notifyReq },
{ 7, &hf_h248_serviceChangeReq, BER_CLASS_CON, 7, BER_FLAGS_IMPLTAG, dissect_h248_ServiceChangeRequest },
{ 0, NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_Command(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_choice(actx, tree, tvb, offset,
Command_choice, hf_index, ett_h248_Command,
NULL);
return offset;
}
static const ber_sequence_t CommandRequest_sequence[] = {
{ &hf_h248_command , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_Command },
{ &hf_h248_optional , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
{ &hf_h248_wildcardReturn , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_CommandRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
CommandRequest_sequence, hf_index, ett_h248_CommandRequest);
return offset;
}
static const ber_sequence_t SEQUENCE_OF_CommandRequest_sequence_of[1] = {
{ &hf_h248_commandRequests_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_CommandRequest },
};
static int
dissect_h248_SEQUENCE_OF_CommandRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
SEQUENCE_OF_CommandRequest_sequence_of, hf_index, ett_h248_SEQUENCE_OF_CommandRequest);
return offset;
}
static const ber_sequence_t ActionRequest_sequence[] = {
{ &hf_h248_contextId , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_ContextId },
{ &hf_h248_contextRequest , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_ContextRequest },
{ &hf_h248_contextAttrAuditReq, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_T_contextAttrAuditReq },
{ &hf_h248_commandRequests, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_CommandRequest },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_ActionRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
ActionRequest_sequence, hf_index, ett_h248_ActionRequest);
return offset;
}
static const ber_sequence_t SEQUENCE_OF_ActionRequest_sequence_of[1] = {
{ &hf_h248_actions_item , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_ActionRequest },
};
static int
dissect_h248_SEQUENCE_OF_ActionRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
SEQUENCE_OF_ActionRequest_sequence_of, hf_index, ett_h248_SEQUENCE_OF_ActionRequest);
return offset;
}
static const ber_sequence_t TransactionRequest_sequence[] = {
{ &hf_h248_transactionId , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_T_transactionId },
{ &hf_h248_actions , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_ActionRequest },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_TransactionRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
TransactionRequest_sequence, hf_index, ett_h248_TransactionRequest);
return offset;
}
static int
dissect_h248_T_tpend_transactionId(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 129 "./asn1/h248/h248.cnf"
guint32 trx_id = 0;
offset = dissect_h248_trx_id(implicit_tag, actx->pinfo, tree, tvb, offset, &trx_id);
curr_info.trx = gcp_trx(curr_info.msg, trx_id, GCP_TRX_PENDING, keep_persistent_data);
error_code = 0;
return offset;
}
static const ber_sequence_t TransactionPending_sequence[] = {
{ &hf_h248_tpend_transactionId, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_T_tpend_transactionId },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_TransactionPending(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
TransactionPending_sequence, hf_index, ett_h248_TransactionPending);
return offset;
}
static int
dissect_h248_T_trep_transactionId(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 135 "./asn1/h248/h248.cnf"
guint32 trx_id = 0;
offset = dissect_h248_trx_id(implicit_tag, actx->pinfo, tree, tvb, offset, &trx_id);
curr_info.trx = gcp_trx(curr_info.msg, trx_id, GCP_TRX_REPLY, keep_persistent_data);
error_code = 0;
return offset;
}
static const ber_sequence_t PackagesItem_sequence[] = {
{ &hf_h248_packageName , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_Name },
{ &hf_h248_packageVersion , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_99 },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_PackagesItem(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
PackagesItem_sequence, hf_index, ett_h248_PackagesItem);
return offset;
}
static const ber_sequence_t PackagesDescriptor_sequence_of[1] = {
{ &hf_h248_PackagesDescriptor_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_PackagesItem },
};
static int
dissect_h248_PackagesDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
PackagesDescriptor_sequence_of, hf_index, ett_h248_PackagesDescriptor);
return offset;
}
static const value_string h248_AuditReturnParameter_vals[] = {
{ 0, "errorDescriptor" },
{ 1, "mediaDescriptor" },
{ 2, "modemDescriptor" },
{ 3, "muxDescriptor" },
{ 4, "eventsDescriptor" },
{ 5, "eventBufferDescriptor" },
{ 6, "signalsDescriptor" },
{ 7, "digitMapDescriptor" },
{ 8, "observedEventsDescriptor" },
{ 9, "statisticsDescriptor" },
{ 10, "packagesDescriptor" },
{ 11, "emptyDescriptors" },
{ 0, NULL }
};
static const ber_choice_t AuditReturnParameter_choice[] = {
{ 0, &hf_h248_errorDescriptor, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_ErrorDescriptor },
{ 1, &hf_h248_mediaDescriptor, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_MediaDescriptor },
{ 2, &hf_h248_modemDescriptor, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_ModemDescriptor },
{ 3, &hf_h248_muxDescriptor , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_MuxDescriptor },
{ 4, &hf_h248_eventsDescriptor, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_h248_EventsDescriptor },
{ 5, &hf_h248_eventBufferDescriptor, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_h248_EventBufferDescriptor },
{ 6, &hf_h248_signalsDescriptor, BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_h248_SignalsDescriptor },
{ 7, &hf_h248_digitMapDescriptor, BER_CLASS_CON, 7, BER_FLAGS_IMPLTAG, dissect_h248_DigitMapDescriptor },
{ 8, &hf_h248_observedEventsDescriptor, BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_h248_ObservedEventsDescriptor },
{ 9, &hf_h248_aRPstatisticsDescriptor, BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_h248_StatisticsDescriptor },
{ 10, &hf_h248_packagesDescriptor, BER_CLASS_CON, 10, BER_FLAGS_IMPLTAG, dissect_h248_PackagesDescriptor },
{ 11, &hf_h248_emptyDescriptors, BER_CLASS_CON, 11, BER_FLAGS_IMPLTAG, dissect_h248_AuditDescriptor },
{ 0, NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_AuditReturnParameter(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_choice(actx, tree, tvb, offset,
AuditReturnParameter_choice, hf_index, ett_h248_AuditReturnParameter,
NULL);
return offset;
}
static const ber_sequence_t TerminationAudit_sequence_of[1] = {
{ &hf_h248_TerminationAudit_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_AuditReturnParameter },
};
static int
dissect_h248_TerminationAudit(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
TerminationAudit_sequence_of, hf_index, ett_h248_TerminationAudit);
return offset;
}
static const ber_sequence_t AmmsReply_sequence[] = {
{ &hf_h248_terminationIDList, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationIDList },
{ &hf_h248_terminationAudit, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_TerminationAudit },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_AmmsReply(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
AmmsReply_sequence, hf_index, ett_h248_AmmsReply);
return offset;
}
static int
dissect_h248_T_addReply(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 246 "./asn1/h248/h248.cnf"
curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_ADD_REPLY,offset,keep_persistent_data);
H248_TAP();
offset = dissect_h248_AmmsReply(implicit_tag, tvb, offset, actx, tree, hf_index);
return offset;
}
static int
dissect_h248_T_moveReply(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 251 "./asn1/h248/h248.cnf"
curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_MOVE_REPLY,offset,keep_persistent_data);
H248_TAP();
offset = dissect_h248_AmmsReply(implicit_tag, tvb, offset, actx, tree, hf_index);
return offset;
}
static int
dissect_h248_T_modReply(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 256 "./asn1/h248/h248.cnf"
curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_MOD_REPLY,offset,keep_persistent_data);
H248_TAP();
offset = dissect_h248_AmmsReply(implicit_tag, tvb, offset, actx, tree, hf_index);
return offset;
}
static int
dissect_h248_T_subtractReply(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 261 "./asn1/h248/h248.cnf"
curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_SUB_REPLY,offset,keep_persistent_data);
H248_TAP();
offset = dissect_h248_AmmsReply(implicit_tag, tvb, offset, actx, tree, hf_index);
return offset;
}
static const ber_sequence_t AuditResult_sequence[] = {
{ &hf_h248_terminationID , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationID },
{ &hf_h248_terminationAuditResult, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_TerminationAudit },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_AuditResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
AuditResult_sequence, hf_index, ett_h248_AuditResult);
return offset;
}
static const ber_sequence_t TermListAuditResult_sequence[] = {
{ &hf_h248_terminationIDList, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationIDList },
{ &hf_h248_terminationAuditResult, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_TerminationAudit },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_TermListAuditResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
TermListAuditResult_sequence, hf_index, ett_h248_TermListAuditResult);
return offset;
}
static const value_string h248_AuditReply_vals[] = {
{ 0, "contextAuditResult" },
{ 1, "error" },
{ 2, "auditResult" },
{ 3, "auditResultTermList" },
{ 0, NULL }
};
static const ber_choice_t AuditReply_choice[] = {
{ 0, &hf_h248_contextAuditResult, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationIDList },
{ 1, &hf_h248_error , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_ErrorDescriptor },
{ 2, &hf_h248_auditResult , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_AuditResult },
{ 3, &hf_h248_auditResultTermList, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_TermListAuditResult },
{ 0, NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_AuditReply(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_choice(actx, tree, tvb, offset,
AuditReply_choice, hf_index, ett_h248_AuditReply,
NULL);
return offset;
}
static int
dissect_h248_T_auditCapReply(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 276 "./asn1/h248/h248.cnf"
curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_AUDITCAP_REPLY,offset,keep_persistent_data);
H248_TAP();
#line 281 "./asn1/h248/h248.cnf"
/* h248v1 support */
if(h248_version > 1) {
offset = dissect_h248_AuditReply(implicit_tag, tvb, offset, actx, tree, hf_index);
} else {
/* call V1 of the dissector */
offset = dissect_h248_AuditReplyV1(implicit_tag, tvb, offset, actx, tree, hf_index);
}
return offset;
}
static int
dissect_h248_T_auditValueReply(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 291 "./asn1/h248/h248.cnf"
curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_AUDITVAL_REPLY,offset,keep_persistent_data);
H248_TAP();
#line 296 "./asn1/h248/h248.cnf"
/* h248v1 support */
if(h248_version > 1) {
offset = dissect_h248_AuditReply(implicit_tag, tvb, offset, actx, tree, hf_index);
} else {
/* call V1 of the dissector */
offset = dissect_h248_AuditReplyV1(implicit_tag, tvb, offset, actx, tree, hf_index);
}
return offset;
}
static const ber_sequence_t NotifyReply_sequence[] = {
{ &hf_h248_terminationIDList, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationIDList },
{ &hf_h248_errorDescriptor, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_ErrorDescriptor },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_NotifyReply(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
NotifyReply_sequence, hf_index, ett_h248_NotifyReply);
return offset;
}
static int
dissect_h248_T_notifyReply(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 266 "./asn1/h248/h248.cnf"
curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_NOTIFY_REPLY,offset,keep_persistent_data);
H248_TAP();
offset = dissect_h248_NotifyReply(implicit_tag, tvb, offset, actx, tree, hf_index);
return offset;
}
static const ber_sequence_t ServiceChangeResParm_sequence[] = {
{ &hf_h248_serviceChangeMgcId, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_MId },
{ &hf_h248_serviceChangeAddress, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_ServiceChangeAddress },
{ &hf_h248_serviceChangeVersion, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_99 },
{ &hf_h248_serviceChangeProfile, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_ServiceChangeProfile },
{ &hf_h248_timestamp , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_TimeNotation },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_ServiceChangeResParm(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
ServiceChangeResParm_sequence, hf_index, ett_h248_ServiceChangeResParm);
return offset;
}
static const value_string h248_ServiceChangeResult_vals[] = {
{ 0, "errorDescriptor" },
{ 1, "serviceChangeResParms" },
{ 0, NULL }
};
static const ber_choice_t ServiceChangeResult_choice[] = {
{ 0, &hf_h248_errorDescriptor, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_ErrorDescriptor },
{ 1, &hf_h248_serviceChangeResParms, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_ServiceChangeResParm },
{ 0, NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_ServiceChangeResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_choice(actx, tree, tvb, offset,
ServiceChangeResult_choice, hf_index, ett_h248_ServiceChangeResult,
NULL);
return offset;
}
static const ber_sequence_t ServiceChangeReply_sequence[] = {
{ &hf_h248_terminationIDList, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationIDList },
{ &hf_h248_serviceChangeResult, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_ServiceChangeResult },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_ServiceChangeReply(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 271 "./asn1/h248/h248.cnf"
curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_SVCCHG_REPLY,offset,keep_persistent_data);
H248_TAP();
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
ServiceChangeReply_sequence, hf_index, ett_h248_ServiceChangeReply);
return offset;
}
static const value_string h248_CommandReply_vals[] = {
{ 0, "addReply" },
{ 1, "moveReply" },
{ 2, "modReply" },
{ 3, "subtractReply" },
{ 4, "auditCapReply" },
{ 5, "auditValueReply" },
{ 6, "notifyReply" },
{ 7, "serviceChangeReply" },
{ 0, NULL }
};
static const ber_choice_t CommandReply_choice[] = {
{ 0, &hf_h248_addReply , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_T_addReply },
{ 1, &hf_h248_moveReply , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_T_moveReply },
{ 2, &hf_h248_modReply , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_T_modReply },
{ 3, &hf_h248_subtractReply , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_T_subtractReply },
{ 4, &hf_h248_auditCapReply , BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_h248_T_auditCapReply },
{ 5, &hf_h248_auditValueReply, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_h248_T_auditValueReply },
{ 6, &hf_h248_notifyReply , BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_h248_T_notifyReply },
{ 7, &hf_h248_serviceChangeReply, BER_CLASS_CON, 7, BER_FLAGS_IMPLTAG, dissect_h248_ServiceChangeReply },
{ 0, NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_CommandReply(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_choice(actx, tree, tvb, offset,
CommandReply_choice, hf_index, ett_h248_CommandReply,
NULL);
return offset;
}
static const ber_sequence_t SEQUENCE_OF_CommandReply_sequence_of[1] = {
{ &hf_h248_commandReply_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_CommandReply },
};
static int
dissect_h248_SEQUENCE_OF_CommandReply(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
SEQUENCE_OF_CommandReply_sequence_of, hf_index, ett_h248_SEQUENCE_OF_CommandReply);
return offset;
}
static const ber_sequence_t ActionReply_sequence[] = {
{ &hf_h248_contextId , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_ContextId },
{ &hf_h248_errorDescriptor, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_ErrorDescriptor },
{ &hf_h248_contextReply , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_ContextRequest },
{ &hf_h248_commandReply , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_CommandReply },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_ActionReply(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
ActionReply_sequence, hf_index, ett_h248_ActionReply);
#line 156 "./asn1/h248/h248.cnf"
if (!curr_info.cmd) {
curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_REPLY,offset,keep_persistent_data);
H248_TAP();
}
return offset;
}
static const ber_sequence_t SEQUENCE_OF_ActionReply_sequence_of[1] = {
{ &hf_h248_actionReplies_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_ActionReply },
};
static int
dissect_h248_SEQUENCE_OF_ActionReply(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
SEQUENCE_OF_ActionReply_sequence_of, hf_index, ett_h248_SEQUENCE_OF_ActionReply);
return offset;
}
static const value_string h248_T_transactionResult_vals[] = {
{ 0, "transactionError" },
{ 1, "actionReplies" },
{ 0, NULL }
};
static const ber_choice_t T_transactionResult_choice[] = {
{ 0, &hf_h248_transactionError, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_ErrorDescriptor },
{ 1, &hf_h248_actionReplies , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_ActionReply },
{ 0, NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_T_transactionResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_choice(actx, tree, tvb, offset,
T_transactionResult_choice, hf_index, ett_h248_T_transactionResult,
NULL);
return offset;
}
static int
dissect_h248_SegmentNumber(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
NULL);
return offset;
}
static const ber_sequence_t TransactionReply_sequence[] = {
{ &hf_h248_trep_transactionId, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_T_trep_transactionId },
{ &hf_h248_immAckRequired , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
{ &hf_h248_transactionResult, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_T_transactionResult },
{ &hf_h248_segmentNumber , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SegmentNumber },
{ &hf_h248_segmentationComplete, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_TransactionReply(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
TransactionReply_sequence, hf_index, ett_h248_TransactionReply);
return offset;
}
static const ber_sequence_t TransactionAck_sequence[] = {
{ &hf_h248_firstAck , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TransactionId },
{ &hf_h248_lastAck , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_TransactionId },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_TransactionAck(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
TransactionAck_sequence, hf_index, ett_h248_TransactionAck);
return offset;
}
static const ber_sequence_t TransactionResponseAck_sequence_of[1] = {
{ &hf_h248_TransactionResponseAck_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_TransactionAck },
};
static int
dissect_h248_TransactionResponseAck(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
TransactionResponseAck_sequence_of, hf_index, ett_h248_TransactionResponseAck);
return offset;
}
static int
dissect_h248_T_seg_rep_transactionId(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 141 "./asn1/h248/h248.cnf"
guint32 trx_id = 0;
offset = dissect_h248_trx_id(implicit_tag, actx->pinfo, tree, tvb, offset, &trx_id);
curr_info.trx = gcp_trx(curr_info.msg, trx_id, GCP_TRX_ACK, keep_persistent_data);
error_code = 0;
return offset;
}
static const ber_sequence_t SegmentReply_sequence[] = {
{ &hf_h248_seg_rep_transactionId, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_T_seg_rep_transactionId },
{ &hf_h248_segmentNumber , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SegmentNumber },
{ &hf_h248_segmentationComplete, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_SegmentReply(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
SegmentReply_sequence, hf_index, ett_h248_SegmentReply);
return offset;
}
static const value_string h248_Transaction_vals[] = {
{ 0, "transactionRequest" },
{ 1, "transactionPending" },
{ 2, "transactionReply" },
{ 3, "transactionResponseAck" },
{ 4, "segmentReply" },
{ 0, NULL }
};
static const ber_choice_t Transaction_choice[] = {
{ 0, &hf_h248_transactionRequest, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TransactionRequest },
{ 1, &hf_h248_transactionPending, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_TransactionPending },
{ 2, &hf_h248_transactionReply, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_TransactionReply },
{ 3, &hf_h248_transactionResponseAck, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_TransactionResponseAck },
{ 4, &hf_h248_segmentReply , BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_h248_SegmentReply },
{ 0, NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_Transaction(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_choice(actx, tree, tvb, offset,
Transaction_choice, hf_index, ett_h248_Transaction,
NULL);
return offset;
}
static const ber_sequence_t SEQUENCE_OF_Transaction_sequence_of[1] = {
{ &hf_h248_transactions_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_Transaction },
};
static int
dissect_h248_SEQUENCE_OF_Transaction(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
SEQUENCE_OF_Transaction_sequence_of, hf_index, ett_h248_SEQUENCE_OF_Transaction);
return offset;
}
static const value_string h248_T_messageBody_vals[] = {
{ 0, "messageError" },
{ 1, "transactions" },
{ 0, NULL }
};
static const ber_choice_t T_messageBody_choice[] = {
{ 0, &hf_h248_messageError , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_ErrorDescriptor },
{ 1, &hf_h248_transactions , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_Transaction },
{ 0, NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_T_messageBody(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_choice(actx, tree, tvb, offset,
T_messageBody_choice, hf_index, ett_h248_T_messageBody,
NULL);
return offset;
}
static const ber_sequence_t Message_sequence[] = {
{ &hf_h248_version , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_T_version },
{ &hf_h248_mId , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_MId },
{ &hf_h248_messageBody , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_T_messageBody },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_Message(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 107 "./asn1/h248/h248.cnf"
curr_info.msg = gcp_msg(actx->pinfo,tvb_raw_offset(tvb),keep_persistent_data);
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
Message_sequence, hf_index, ett_h248_Message);
#line 111 "./asn1/h248/h248.cnf"
col_add_str(actx->pinfo->cinfo, COL_INFO, gcp_msg_to_str(curr_info.msg,keep_persistent_data));
if (keep_persistent_data)
gcp_analyze_msg(h248_tree, actx->pinfo, tvb, curr_info.msg, &h248_arrel, &ei_h248_errored_command);
return offset;
}
static const ber_sequence_t MegacoMessage_sequence[] = {
{ &hf_h248_authHeader , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_AuthenticationHeader },
{ &hf_h248_mess , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_Message },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_MegacoMessage(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
MegacoMessage_sequence, hf_index, ett_h248_MegacoMessage);
return offset;
}
static int
dissect_h248_ServiceChangeReasonStr(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
actx, tree, tvb, offset, hf_index,
NULL);
return offset;
}
static const value_string h248_AuditResultV1_vals[] = {
{ 0, "contectAuditResult" },
{ 1, "terminationAuditResult" },
{ 0, NULL }
};
static const ber_choice_t AuditResultV1_choice[] = {
{ 0, &hf_h248_contectAuditResult, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationID },
{ 1, &hf_h248_terminationAuditResult, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_TerminationAudit },
{ 0, NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_AuditResultV1(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_choice(actx, tree, tvb, offset,
AuditResultV1_choice, hf_index, ett_h248_AuditResultV1,
NULL);
return offset;
}
static const ber_sequence_t AuditReplyV1_sequence[] = {
{ &hf_h248_terminationID , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationID },
{ &hf_h248_audit_result , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_AuditResultV1 },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_AuditReplyV1(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 306 "./asn1/h248/h248.cnf"
/* h248v1 support */
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
AuditReplyV1_sequence, hf_h248_auditValueReplyV1, ett_h248_AuditReplyV1);
return offset;
}
static const ber_sequence_t EventParameterV1_sequence[] = {
{ &hf_h248_eventParamterName, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_EventParameterName },
{ &hf_h248_event_param_value, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_EventParamValueV1 },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_EventParameterV1(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
EventParameterV1_sequence, hf_index, ett_h248_EventParameterV1);
return offset;
}
static const ber_sequence_t SigParameterV1_sequence[] = {
{ &hf_h248_sigParameterName, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_SigParameterName },
{ &hf_h248_sig_param_value, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SigParamValueV1 },
{ NULL, 0, 0, 0, NULL }
};
static int
dissect_h248_SigParameterV1(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
SigParameterV1_sequence, hf_index, ett_h248_SigParameterV1);
return offset;
}
/*--- End of included file: packet-h248-fn.c ---*/
#line 2150 "./asn1/h248/packet-h248-template.c"
static int dissect_h248_tpkt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_) {
dissect_tpkt_encap(tvb, pinfo, tree, h248_desegment, h248_handle);
return tvb_captured_length(tvb);
}
static int
dissect_h248(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
{
proto_item *h248_item;
asn1_ctx_t asn1_ctx;
h248_tree = NULL;
asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
curr_info.msg = NULL;
curr_info.trx = NULL;
curr_info.ctx = NULL;
curr_info.cmd = NULL;
curr_info.term = NULL;
curr_info.pkg = NULL;
curr_info.evt = NULL;
curr_info.sig = NULL;
curr_info.stat = NULL;
curr_info.par = NULL;
/* Check if it is actually a text-based H.248 encoding, which we
dissect with the "megaco" dissector in Wireshark. (Both
encodings are MEGACO (RFC 3015) and both are H.248.)
*/
if(tvb_captured_length(tvb)>=6){
if(!tvb_strneql(tvb, 0, "MEGACO", 6)){
static dissector_handle_t megaco_handle=NULL;
if(!megaco_handle){
megaco_handle = find_dissector("megaco");
}
if(megaco_handle){
call_dissector(megaco_handle, tvb, pinfo, tree);
return tvb_captured_length(tvb);
}
}
{
proto_item *hidden_item = NULL;
guint32 magic_num = 0, offset = 0;
magic_num = tvb_get_ntohl(tvb, offset);
hidden_item = proto_tree_add_uint(tree, hf_248_magic_num, tvb, offset, 4, magic_num);
proto_item_set_hidden(hidden_item);
if( dissector_try_uint(subdissector_table, magic_num, tvb, pinfo, tree) ) {
return tvb_captured_length(tvb);
}
}
}
export_h248_pdu(pinfo, tvb);
/* Make entry in the Protocol column on summary display */
col_set_str(pinfo->cinfo, COL_PROTOCOL, "H.248");
if (tree) {
h248_item = proto_tree_add_item(tree, proto_h248, tvb, 0, -1, ENC_NA);
h248_tree = proto_item_add_subtree(h248_item, ett_h248);
}
dissect_h248_MegacoMessage(FALSE, tvb, 0, &asn1_ctx, h248_tree, -1);
return tvb_captured_length(tvb);
}
/*--- proto_register_h248 ----------------------------------------------*/
void proto_reg_handoff_h248(void);
void proto_register_h248(void) {
/* List of fields */
static hf_register_info hf[] = {
{ &hf_248_magic_num,
{ "Magic Number for Avaya H.248", "h248.magic_num",
FT_UINT32, BASE_HEX, NULL, 0,
NULL, HFILL}},
{ &hf_h248_mtpaddress_ni,
{ "NI", "h248.mtpaddress.ni",
FT_UINT32, BASE_DEC, NULL, 0,
NULL, HFILL }},
{ &hf_h248_mtpaddress_pc,
{ "PC", "h248.mtpaddress.pc",
FT_UINT32, BASE_DEC, NULL, 0,
NULL, HFILL }},
{ &hf_h248_pkg_name,
{ "Package", "h248.package_name",
FT_UINT16, BASE_HEX, NULL, 0,
NULL, HFILL }},
{ &hf_248_pkg_param,
{ "Parameter ID", "h248.package_paramid",
FT_UINT16, BASE_HEX, NULL, 0,
NULL, HFILL }},
{ &hf_h248_signal_code,
{ "Signal ID", "h248.package_signalid",
FT_UINT16, BASE_HEX, NULL, 0,
NULL, HFILL }},
{ &hf_h248_event_code,
{ "Event ID", "h248.package_eventid",
FT_UINT16, BASE_HEX, NULL, 0,
NULL, HFILL }},
{ &hf_h248_event_name,
{ "Package and Event name", "h248.event_name",
FT_UINT32, BASE_HEX, NULL, 0,
NULL, HFILL }},
{ &hf_h248_signal_name,
{ "Package and Signal name", "h248.signal_name",
FT_UINT32, BASE_HEX, NULL, 0,
NULL, HFILL }},
{ &hf_h248_pkg_bcp_BNCChar_PDU,
{ "BNCChar", "h248.package_bcp.BNCChar",
FT_UINT32, BASE_DEC, VALS(gcp_term_types), 0,
NULL, HFILL }},
{ &hf_h248_context_id,
{ "contextId", "h248.contextId",
FT_UINT32, BASE_HEX, NULL, 0,
"Context ID", HFILL }},
{ &hf_h248_term_wild_type,
{ "Wildcard Mode", "h248.term.wildcard.mode",
FT_UINT8, BASE_DEC, VALS(wildcard_modes), 0x80,
NULL, HFILL }},
{ &hf_h248_term_wild_level,
{ "Wildcarding Level", "h248.term.wildcard.level",
FT_UINT8, BASE_DEC, VALS(wildcard_levels), 0x40,
NULL, HFILL }},
{ &hf_h248_term_wild_position,
{ "Wildcarding Position", "h248.term.wildcard.pos",
FT_UINT8, BASE_DEC, NULL, 0x3F,
NULL, HFILL }},
{ &hf_h248_no_pkg,
{ "Unknown Package", "h248.pkg.unknown",
FT_BYTES, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_no_sig,
{ "Unknown Signal", "h248.pkg.unknown.sig",
FT_BYTES, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_no_evt,
{ "Unknown Event", "h248.pkg.unknown.evt",
FT_BYTES, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_param,
{ "Parameter", "h248.pkg.unknown.param",
FT_BYTES, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_serviceChangeReasonStr,
{ "ServiceChangeReasonStr", "h248.serviceChangeReasonstr",
FT_STRING, BASE_NONE, NULL, 0,
"h248.IA5String", HFILL }},
{ &hf_h248_context_id64,
{ "contextId", "h248.contextId64",
FT_UINT64, BASE_HEX, NULL, 0,
"Context ID", HFILL }},
{ &hf_h248_transactionId64,
{ "transactionId", "h248.transactionId",
FT_UINT64, BASE_DEC, NULL, 0,
NULL, HFILL }},
/* h248v1 support */
{ &hf_h248_auditValueReplyV1,
{ "auditValueReplyV1", "h248.auditValueReplyV1",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
/*--- Included file: packet-h248-hfarr.c ---*/
#line 1 "./asn1/h248/packet-h248-hfarr.c"
{ &hf_h248_authHeader,
{ "authHeader", "h248.authHeader_element",
FT_NONE, BASE_NONE, NULL, 0,
"AuthenticationHeader", HFILL }},
{ &hf_h248_mess,
{ "mess", "h248.mess_element",
FT_NONE, BASE_NONE, NULL, 0,
"Message", HFILL }},
{ &hf_h248_secParmIndex,
{ "secParmIndex", "h248.secParmIndex",
FT_BYTES, BASE_NONE, NULL, 0,
"SecurityParmIndex", HFILL }},
{ &hf_h248_seqNum,
{ "seqNum", "h248.seqNum",
FT_BYTES, BASE_NONE, NULL, 0,
"SequenceNum", HFILL }},
{ &hf_h248_ad,
{ "ad", "h248.ad",
FT_BYTES, BASE_NONE, NULL, 0,
"AuthData", HFILL }},
{ &hf_h248_version,
{ "version", "h248.version",
FT_UINT32, BASE_DEC, NULL, 0,
NULL, HFILL }},
{ &hf_h248_mId,
{ "mId", "h248.mId",
FT_UINT32, BASE_DEC, VALS(h248_MId_vals), 0,
NULL, HFILL }},
{ &hf_h248_messageBody,
{ "messageBody", "h248.messageBody",
FT_UINT32, BASE_DEC, VALS(h248_T_messageBody_vals), 0,
NULL, HFILL }},
{ &hf_h248_messageError,
{ "messageError", "h248.messageError_element",
FT_NONE, BASE_NONE, NULL, 0,
"ErrorDescriptor", HFILL }},
{ &hf_h248_transactions,
{ "transactions", "h248.transactions",
FT_UINT32, BASE_DEC, NULL, 0,
"SEQUENCE_OF_Transaction", HFILL }},
{ &hf_h248_transactions_item,
{ "Transaction", "h248.Transaction",
FT_UINT32, BASE_DEC, VALS(h248_Transaction_vals), 0,
NULL, HFILL }},
{ &hf_h248_ip4Address,
{ "ip4Address", "h248.ip4Address_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_ip6Address,
{ "ip6Address", "h248.ip6Address_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_domainName,
{ "domainName", "h248.domainName_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_deviceName,
{ "deviceName", "h248.deviceName",
FT_STRING, BASE_NONE, NULL, 0,
"PathName", HFILL }},
{ &hf_h248_mtpAddress,
{ "mtpAddress", "h248.mtpAddress",
FT_BYTES, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_domName,
{ "name", "h248.domainname",
FT_STRING, BASE_NONE, NULL, 0,
"IA5String", HFILL }},
{ &hf_h248_portNumber,
{ "portNumber", "h248.portNumber",
FT_UINT32, BASE_DEC, NULL, 0,
"INTEGER_0_65535", HFILL }},
{ &hf_h248_iP4Address,
{ "address", "h248.iP4Address",
FT_IPv4, BASE_NONE, NULL, 0,
"OCTET_STRING_SIZE_4", HFILL }},
{ &hf_h248_iP6Address,
{ "address", "h248.iP6Address",
FT_IPv6, BASE_NONE, NULL, 0,
"OCTET_STRING_SIZE_16", HFILL }},
{ &hf_h248_transactionRequest,
{ "transactionRequest", "h248.transactionRequest_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_transactionPending,
{ "transactionPending", "h248.transactionPending_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_transactionReply,
{ "transactionReply", "h248.transactionReply_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_transactionResponseAck,
{ "transactionResponseAck", "h248.transactionResponseAck",
FT_UINT32, BASE_DEC, NULL, 0,
NULL, HFILL }},
{ &hf_h248_segmentReply,
{ "segmentReply", "h248.segmentReply_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_transactionId,
{ "transactionId", "h248.transactionRequest.transactionId",
FT_UINT32, BASE_DEC, NULL, 0,
NULL, HFILL }},
{ &hf_h248_actions,
{ "actions", "h248.actions",
FT_UINT32, BASE_DEC, NULL, 0,
"SEQUENCE_OF_ActionRequest", HFILL }},
{ &hf_h248_actions_item,
{ "ActionRequest", "h248.ActionRequest_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_tpend_transactionId,
{ "transactionId", "h248.transactionpending.transactionId",
FT_UINT32, BASE_DEC, NULL, 0,
"T_tpend_transactionId", HFILL }},
{ &hf_h248_trep_transactionId,
{ "transactionId", "h248.transactionreply.transactionId",
FT_UINT32, BASE_DEC, NULL, 0,
"T_trep_transactionId", HFILL }},
{ &hf_h248_immAckRequired,
{ "immAckRequired", "h248.immAckRequired_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_transactionResult,
{ "transactionResult", "h248.transactionResult",
FT_UINT32, BASE_DEC, VALS(h248_T_transactionResult_vals), 0,
NULL, HFILL }},
{ &hf_h248_transactionError,
{ "transactionError", "h248.transactionError_element",
FT_NONE, BASE_NONE, NULL, 0,
"ErrorDescriptor", HFILL }},
{ &hf_h248_actionReplies,
{ "actionReplies", "h248.actionReplies",
FT_UINT32, BASE_DEC, NULL, 0,
"SEQUENCE_OF_ActionReply", HFILL }},
{ &hf_h248_actionReplies_item,
{ "ActionReply", "h248.ActionReply_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_segmentNumber,
{ "segmentNumber", "h248.segmentNumber",
FT_UINT32, BASE_DEC, NULL, 0,
NULL, HFILL }},
{ &hf_h248_segmentationComplete,
{ "segmentationComplete", "h248.segmentationComplete_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_seg_rep_transactionId,
{ "transactionId", "h248.segmentreply.transactionId",
FT_UINT32, BASE_DEC, NULL, 0,
"T_seg_rep_transactionId", HFILL }},
{ &hf_h248_TransactionResponseAck_item,
{ "TransactionAck", "h248.TransactionAck_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_firstAck,
{ "firstAck", "h248.firstAck",
FT_UINT32, BASE_DEC, NULL, 0,
"TransactionId", HFILL }},
{ &hf_h248_lastAck,
{ "lastAck", "h248.lastAck",
FT_UINT32, BASE_DEC, NULL, 0,
"TransactionId", HFILL }},
{ &hf_h248_errorCode,
{ "errorCode", "h248.errorCode",
FT_UINT32, BASE_DEC|BASE_EXT_STRING, &h248_reasons_ext, 0,
NULL, HFILL }},
{ &hf_h248_errorText,
{ "errorText", "h248.errorText",
FT_STRING, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_contextId,
{ "contextId", "h248.contextId",
FT_UINT32, BASE_HEX, NULL, 0,
NULL, HFILL }},
{ &hf_h248_contextRequest,
{ "contextRequest", "h248.contextRequest_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_contextAttrAuditReq,
{ "contextAttrAuditReq", "h248.contextAttrAuditReq_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_commandRequests,
{ "commandRequests", "h248.commandRequests",
FT_UINT32, BASE_DEC, NULL, 0,
"SEQUENCE_OF_CommandRequest", HFILL }},
{ &hf_h248_commandRequests_item,
{ "CommandRequest", "h248.CommandRequest_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_errorDescriptor,
{ "errorDescriptor", "h248.errorDescriptor_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_contextReply,
{ "contextReply", "h248.contextReply_element",
FT_NONE, BASE_NONE, NULL, 0,
"ContextRequest", HFILL }},
{ &hf_h248_commandReply,
{ "commandReply", "h248.commandReply",
FT_UINT32, BASE_DEC, NULL, 0,
"SEQUENCE_OF_CommandReply", HFILL }},
{ &hf_h248_commandReply_item,
{ "CommandReply", "h248.CommandReply",
FT_UINT32, BASE_DEC, VALS(h248_CommandReply_vals), 0,
NULL, HFILL }},
{ &hf_h248_priority,
{ "priority", "h248.priority",
FT_UINT32, BASE_DEC, NULL, 0,
"INTEGER_0_15", HFILL }},
{ &hf_h248_emergency,
{ "emergency", "h248.emergency",
FT_BOOLEAN, BASE_NONE, NULL, 0,
"BOOLEAN", HFILL }},
{ &hf_h248_topologyReq,
{ "topologyReq", "h248.topologyReq",
FT_UINT32, BASE_DEC, NULL, 0,
NULL, HFILL }},
{ &hf_h248_topologyReq_item,
{ "TopologyRequest", "h248.TopologyRequest_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_iepscallind_BOOL,
{ "iepscallind", "h248.iepscallind",
FT_BOOLEAN, BASE_NONE, NULL, 0,
"Iepscallind_BOOL", HFILL }},
{ &hf_h248_contextProp,
{ "contextProp", "h248.contextProp",
FT_UINT32, BASE_DEC, NULL, 0,
"SEQUENCE_OF_PropertyParm", HFILL }},
{ &hf_h248_contextProp_item,
{ "PropertyParm", "h248.PropertyParm_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_contextList,
{ "contextList", "h248.contextList",
FT_UINT32, BASE_DEC, NULL, 0,
"SEQUENCE_OF_ContextIDinList", HFILL }},
{ &hf_h248_contextList_item,
{ "ContextIDinList", "h248.ContextIDinList",
FT_UINT32, BASE_DEC, NULL, 0,
NULL, HFILL }},
{ &hf_h248_topology,
{ "topology", "h248.topology_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_cAAREmergency,
{ "emergency", "h248.emergency_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_cAARPriority,
{ "priority", "h248.priority_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_iepscallind,
{ "iepscallind", "h248.iepscallind_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_contextPropAud,
{ "contextPropAud", "h248.contextPropAud",
FT_UINT32, BASE_DEC, NULL, 0,
"SEQUENCE_OF_IndAudPropertyParm", HFILL }},
{ &hf_h248_contextPropAud_item,
{ "IndAudPropertyParm", "h248.IndAudPropertyParm_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_selectpriority,
{ "selectpriority", "h248.selectpriority",
FT_UINT32, BASE_DEC, NULL, 0,
"INTEGER_0_15", HFILL }},
{ &hf_h248_selectemergency,
{ "selectemergency", "h248.selectemergency",
FT_BOOLEAN, BASE_NONE, NULL, 0,
"BOOLEAN", HFILL }},
{ &hf_h248_selectiepscallind,
{ "selectiepscallind", "h248.selectiepscallind",
FT_BOOLEAN, BASE_NONE, NULL, 0,
"BOOLEAN", HFILL }},
{ &hf_h248_selectLogic,
{ "selectLogic", "h248.selectLogic",
FT_UINT32, BASE_DEC, VALS(h248_SelectLogic_vals), 0,
NULL, HFILL }},
{ &hf_h248_andAUDITSelect,
{ "andAUDITSelect", "h248.andAUDITSelect_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_orAUDITSelect,
{ "orAUDITSelect", "h248.orAUDITSelect_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_command,
{ "command", "h248.command",
FT_UINT32, BASE_DEC, VALS(h248_Command_vals), 0,
NULL, HFILL }},
{ &hf_h248_optional,
{ "optional", "h248.optional_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_wildcardReturn,
{ "wildcardReturn", "h248.wildcardReturn_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_addReq,
{ "addReq", "h248.addReq_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_moveReq,
{ "moveReq", "h248.moveReq_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_modReq,
{ "modReq", "h248.modReq_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_subtractReq,
{ "subtractReq", "h248.subtractReq_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_auditCapRequest,
{ "auditCapRequest", "h248.auditCapRequest_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_auditValueRequest,
{ "auditValueRequest", "h248.auditValueRequest_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_notifyReq,
{ "notifyReq", "h248.notifyReq_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_serviceChangeReq,
{ "serviceChangeReq", "h248.serviceChangeReq_element",
FT_NONE, BASE_NONE, NULL, 0,
"ServiceChangeRequest", HFILL }},
{ &hf_h248_addReply,
{ "addReply", "h248.addReply_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_moveReply,
{ "moveReply", "h248.moveReply_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_modReply,
{ "modReply", "h248.modReply_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_subtractReply,
{ "subtractReply", "h248.subtractReply_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_auditCapReply,
{ "auditCapReply", "h248.auditCapReply",
FT_UINT32, BASE_DEC, VALS(h248_AuditReply_vals), 0,
NULL, HFILL }},
{ &hf_h248_auditValueReply,
{ "auditValueReply", "h248.auditValueReply",
FT_UINT32, BASE_DEC, VALS(h248_AuditReply_vals), 0,
NULL, HFILL }},
{ &hf_h248_notifyReply,
{ "notifyReply", "h248.notifyReply_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_serviceChangeReply,
{ "serviceChangeReply", "h248.serviceChangeReply_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_terminationFrom,
{ "terminationFrom", "h248.terminationFrom_element",
FT_NONE, BASE_NONE, NULL, 0,
"TerminationID", HFILL }},
{ &hf_h248_terminationTo,
{ "terminationTo", "h248.terminationTo_element",
FT_NONE, BASE_NONE, NULL, 0,
"TerminationID", HFILL }},
{ &hf_h248_topologyDirection,
{ "topologyDirection", "h248.topologyDirection",
FT_UINT32, BASE_DEC, VALS(h248_T_topologyDirection_vals), 0,
NULL, HFILL }},
{ &hf_h248_streamID,
{ "streamID", "h248.streamID",
FT_UINT32, BASE_DEC, NULL, 0,
NULL, HFILL }},
{ &hf_h248_topologyDirectionExtension,
{ "topologyDirectionExtension", "h248.topologyDirectionExtension",
FT_UINT32, BASE_DEC, VALS(h248_T_topologyDirectionExtension_vals), 0,
NULL, HFILL }},
{ &hf_h248_terminationIDList,
{ "terminationID", "h248.terminationID",
FT_UINT32, BASE_DEC, NULL, 0,
"TerminationIDList", HFILL }},
{ &hf_h248_descriptors,
{ "descriptors", "h248.descriptors",
FT_UINT32, BASE_DEC, NULL, 0,
"SEQUENCE_OF_AmmDescriptor", HFILL }},
{ &hf_h248_descriptors_item,
{ "AmmDescriptor", "h248.AmmDescriptor",
FT_UINT32, BASE_DEC, VALS(h248_AmmDescriptor_vals), 0,
NULL, HFILL }},
{ &hf_h248_mediaDescriptor,
{ "mediaDescriptor", "h248.mediaDescriptor_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_modemDescriptor,
{ "modemDescriptor", "h248.modemDescriptor_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_muxDescriptor,
{ "muxDescriptor", "h248.muxDescriptor_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_eventsDescriptor,
{ "eventsDescriptor", "h248.eventsDescriptor_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_eventBufferDescriptor,
{ "eventBufferDescriptor", "h248.eventBufferDescriptor",
FT_UINT32, BASE_DEC, NULL, 0,
NULL, HFILL }},
{ &hf_h248_signalsDescriptor,
{ "signalsDescriptor", "h248.signalsDescriptor",
FT_UINT32, BASE_DEC, NULL, 0,
NULL, HFILL }},
{ &hf_h248_digitMapDescriptor,
{ "digitMapDescriptor", "h248.digitMapDescriptor_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_auditDescriptor,
{ "auditDescriptor", "h248.auditDescriptor_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_aDstatisticsDescriptor,
{ "statisticsDescriptor", "h248.statisticsDescriptor",
FT_UINT32, BASE_DEC, NULL, 0,
NULL, HFILL }},
{ &hf_h248_terminationAudit,
{ "terminationAudit", "h248.terminationAudit",
FT_UINT32, BASE_DEC, NULL, 0,
NULL, HFILL }},
{ &hf_h248_terminationID,
{ "terminationID", "h248.terminationID_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_contextAuditResult,
{ "contextAuditResult", "h248.contextAuditResult",
FT_UINT32, BASE_DEC, NULL, 0,
"TerminationIDList", HFILL }},
{ &hf_h248_error,
{ "error", "h248.error_element",
FT_NONE, BASE_NONE, NULL, 0,
"ErrorDescriptor", HFILL }},
{ &hf_h248_auditResult,
{ "auditResult", "h248.auditResult_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_auditResultTermList,
{ "auditResultTermList", "h248.auditResultTermList_element",
FT_NONE, BASE_NONE, NULL, 0,
"TermListAuditResult", HFILL }},
{ &hf_h248_terminationAuditResult,
{ "terminationAuditResult", "h248.terminationAuditResult",
FT_UINT32, BASE_DEC, NULL, 0,
"TerminationAudit", HFILL }},
{ &hf_h248_TerminationAudit_item,
{ "AuditReturnParameter", "h248.AuditReturnParameter",
FT_UINT32, BASE_DEC, VALS(h248_AuditReturnParameter_vals), 0,
NULL, HFILL }},
{ &hf_h248_observedEventsDescriptor,
{ "observedEventsDescriptor", "h248.observedEventsDescriptor_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_aRPstatisticsDescriptor,
{ "statisticsDescriptor", "h248.statisticsDescriptor",
FT_UINT32, BASE_DEC, NULL, 0,
NULL, HFILL }},
{ &hf_h248_packagesDescriptor,
{ "packagesDescriptor", "h248.packagesDescriptor",
FT_UINT32, BASE_DEC, NULL, 0,
NULL, HFILL }},
{ &hf_h248_emptyDescriptors,
{ "emptyDescriptors", "h248.emptyDescriptors_element",
FT_NONE, BASE_NONE, NULL, 0,
"AuditDescriptor", HFILL }},
{ &hf_h248_auditToken,
{ "auditToken", "h248.auditToken",
FT_BYTES, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_auditPropertyToken,
{ "auditPropertyToken", "h248.auditPropertyToken",
FT_UINT32, BASE_DEC, NULL, 0,
"SEQUENCE_OF_IndAuditParameter", HFILL }},
{ &hf_h248_auditPropertyToken_item,
{ "IndAuditParameter", "h248.IndAuditParameter",
FT_UINT32, BASE_DEC, VALS(h248_IndAuditParameter_vals), 0,
NULL, HFILL }},
{ &hf_h248_indaudmediaDescriptor,
{ "indaudmediaDescriptor", "h248.indaudmediaDescriptor_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_indaudeventsDescriptor,
{ "indaudeventsDescriptor", "h248.indaudeventsDescriptor_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_indaudeventBufferDescriptor,
{ "indaudeventBufferDescriptor", "h248.indaudeventBufferDescriptor_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_indaudsignalsDescriptor,
{ "indaudsignalsDescriptor", "h248.indaudsignalsDescriptor",
FT_UINT32, BASE_DEC, VALS(h248_IndAudSignalsDescriptor_vals), 0,
NULL, HFILL }},
{ &hf_h248_indauddigitMapDescriptor,
{ "indauddigitMapDescriptor", "h248.indauddigitMapDescriptor_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_indaudstatisticsDescriptor,
{ "indaudstatisticsDescriptor", "h248.indaudstatisticsDescriptor_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_indaudpackagesDescriptor,
{ "indaudpackagesDescriptor", "h248.indaudpackagesDescriptor_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_indAudTerminationStateDescriptor,
{ "termStateDescr", "h248.termStateDescr_element",
FT_NONE, BASE_NONE, NULL, 0,
"IndAudTerminationStateDescriptor", HFILL }},
{ &hf_h248_indAudMediaDescriptorStreams,
{ "streams", "h248.streams",
FT_UINT32, BASE_DEC, VALS(h248_IndAudMediaDescriptorStreams_vals), 0,
"IndAudMediaDescriptorStreams", HFILL }},
{ &hf_h248_oneStream,
{ "oneStream", "h248.oneStream_element",
FT_NONE, BASE_NONE, NULL, 0,
"IndAudStreamParms", HFILL }},
{ &hf_h248_multiStream,
{ "multiStream", "h248.multiStream",
FT_UINT32, BASE_DEC, NULL, 0,
"SEQUENCE_OF_IndAudStreamDescriptor", HFILL }},
{ &hf_h248_multiStream_item,
{ "IndAudStreamDescriptor", "h248.IndAudStreamDescriptor_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_indAudStreamParms,
{ "streamParms", "h248.streamParms_element",
FT_NONE, BASE_NONE, NULL, 0,
"IndAudStreamParms", HFILL }},
{ &hf_h248_iASPLocalControlDescriptor,
{ "localControlDescriptor", "h248.localControlDescriptor_element",
FT_NONE, BASE_NONE, NULL, 0,
"IndAudLocalControlDescriptor", HFILL }},
{ &hf_h248_iASPLocalDescriptor,
{ "localDescriptor", "h248.localDescriptor_element",
FT_NONE, BASE_NONE, NULL, 0,
"IndAudLocalRemoteDescriptor", HFILL }},
{ &hf_h248_iASPRemoteDescriptor,
{ "remoteDescriptor", "h248.remoteDescriptor_element",
FT_NONE, BASE_NONE, NULL, 0,
"IndAudLocalRemoteDescriptor", HFILL }},
{ &hf_h248_statisticsDescriptor,
{ "statisticsDescriptor", "h248.statisticsDescriptor_element",
FT_NONE, BASE_NONE, NULL, 0,
"IndAudStatisticsDescriptor", HFILL }},
{ &hf_h248_iALCDStreamMode,
{ "streamMode", "h248.streamMode_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_iALCDReserveValue,
{ "reserveValue", "h248.reserveValue_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_iALCDReserveGroup,
{ "reserveGroup", "h248.reserveGroup_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_indAudPropertyParms,
{ "propertyParms", "h248.propertyParms",
FT_UINT32, BASE_DEC, NULL, 0,
"SEQUENCE_OF_IndAudPropertyParm", HFILL }},
{ &hf_h248_indAudPropertyParms_item,
{ "IndAudPropertyParm", "h248.IndAudPropertyParm_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_streamModeSel,
{ "streamModeSel", "h248.streamModeSel",
FT_UINT32, BASE_DEC, VALS(h248_StreamMode_vals), 0,
"StreamMode", HFILL }},
{ &hf_h248_name,
{ "name", "h248.name",
FT_BYTES, BASE_NONE, NULL, 0,
"PkgdName", HFILL }},
{ &hf_h248_propertyParms,
{ "propertyParms", "h248.propertyParms_element",
FT_NONE, BASE_NONE, NULL, 0,
"PropertyParm", HFILL }},
{ &hf_h248_propGroupID,
{ "propGroupID", "h248.propGroupID",
FT_UINT32, BASE_DEC, NULL, 0,
"INTEGER_0_65535", HFILL }},
{ &hf_h248_iAPropertyGroup,
{ "propGrps", "h248.propGrps",
FT_UINT32, BASE_DEC, NULL, 0,
"IndAudPropertyGroup", HFILL }},
{ &hf_h248_IndAudPropertyGroup_item,
{ "IndAudPropertyParm", "h248.IndAudPropertyParm_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_eventBufferControl,
{ "eventBufferControl", "h248.eventBufferControl_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_iATSDServiceState,
{ "serviceState", "h248.serviceState_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_serviceStateSel,
{ "serviceStateSel", "h248.serviceStateSel",
FT_UINT32, BASE_DEC, VALS(h248_ServiceState_vals), 0,
"ServiceState", HFILL }},
{ &hf_h248_requestID,
{ "requestID", "h248.requestID",
FT_UINT32, BASE_DEC, NULL, 0,
NULL, HFILL }},
{ &hf_h248_iAEDPkgdName,
{ "pkgdName", "h248.pkgdName",
FT_BYTES, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_iAEBDEventName,
{ "eventName", "h248.eventName",
FT_BYTES, BASE_NONE, NULL, 0,
"PkgdName", HFILL }},
{ &hf_h248_indAudSignal,
{ "signal", "h248.signal_element",
FT_NONE, BASE_NONE, NULL, 0,
"IndAudSignal", HFILL }},
{ &hf_h248_indAudSeqSigList,
{ "seqSigList", "h248.seqSigList_element",
FT_NONE, BASE_NONE, NULL, 0,
"IndAudSeqSigList", HFILL }},
{ &hf_h248_id,
{ "id", "h248.id",
FT_UINT32, BASE_DEC, NULL, 0,
"INTEGER_0_65535", HFILL }},
{ &hf_h248_iASignalList,
{ "signalList", "h248.signalList_element",
FT_NONE, BASE_NONE, NULL, 0,
"IndAudSignal", HFILL }},
{ &hf_h248_iASignalName,
{ "signalName", "h248.signalName",
FT_BYTES, BASE_NONE, NULL, 0,
"PkgdName", HFILL }},
{ &hf_h248_signalRequestID,
{ "signalRequestID", "h248.signalRequestID",
FT_UINT32, BASE_DEC, NULL, 0,
"RequestID", HFILL }},
{ &hf_h248_digitMapName,
{ "digitMapName", "h248.digitMapName",
FT_BYTES, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_iAStatName,
{ "statName", "h248.statName",
FT_BYTES, BASE_NONE, NULL, 0,
"PkgdName", HFILL }},
{ &hf_h248_packageName,
{ "packageName", "h248.packageName",
FT_BYTES, BASE_NONE, NULL, 0,
"Name", HFILL }},
{ &hf_h248_packageVersion,
{ "packageVersion", "h248.packageVersion",
FT_UINT32, BASE_DEC, NULL, 0,
"INTEGER_0_99", HFILL }},
{ &hf_h248_requestId,
{ "requestId", "h248.requestId",
FT_UINT32, BASE_DEC, NULL, 0,
NULL, HFILL }},
{ &hf_h248_observedEventLst,
{ "observedEventLst", "h248.observedEventLst",
FT_UINT32, BASE_DEC, NULL, 0,
"SEQUENCE_OF_ObservedEvent", HFILL }},
{ &hf_h248_observedEventLst_item,
{ "ObservedEvent", "h248.ObservedEvent_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_eventName,
{ "eventName", "h248.eventName",
FT_BYTES, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_eventParList,
{ "eventParList", "h248.eventParList",
FT_UINT32, BASE_DEC, NULL, 0,
"SEQUENCE_OF_EventParameter", HFILL }},
{ &hf_h248_eventParList_item,
{ "EventParameter", "h248.EventParameter_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_timeNotation,
{ "timeNotation", "h248.timeNotation_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_eventParameterName,
{ "eventParameterName", "h248.eventParameterName",
FT_BYTES, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_eventParamValue,
{ "eventParamValue", "h248.eventParamValue",
FT_UINT32, BASE_DEC, NULL, 0,
"EventParamValues", HFILL }},
{ &hf_h248_eventPar_extraInfo,
{ "extraInfo", "h248.extraInfo",
FT_UINT32, BASE_DEC, VALS(h248_EventPar_extraInfo_vals), 0,
"EventPar_extraInfo", HFILL }},
{ &hf_h248_relation,
{ "relation", "h248.relation",
FT_UINT32, BASE_DEC, VALS(h248_Relation_vals), 0,
NULL, HFILL }},
{ &hf_h248_range,
{ "range", "h248.range",
FT_BOOLEAN, BASE_NONE, NULL, 0,
"BOOLEAN", HFILL }},
{ &hf_h248_sublist,
{ "sublist", "h248.sublist",
FT_BOOLEAN, BASE_NONE, NULL, 0,
"BOOLEAN", HFILL }},
{ &hf_h248_EventParamValues_item,
{ "EventParamValue", "h248.EventParamValue",
FT_BYTES, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_serviceChangeParms,
{ "serviceChangeParms", "h248.serviceChangeParms_element",
FT_NONE, BASE_NONE, NULL, 0,
"ServiceChangeParm", HFILL }},
{ &hf_h248_serviceChangeResult,
{ "serviceChangeResult", "h248.serviceChangeResult",
FT_UINT32, BASE_DEC, VALS(h248_ServiceChangeResult_vals), 0,
NULL, HFILL }},
{ &hf_h248_serviceChangeResParms,
{ "serviceChangeResParms", "h248.serviceChangeResParms_element",
FT_NONE, BASE_NONE, NULL, 0,
"ServiceChangeResParm", HFILL }},
{ &hf_h248_wildcard,
{ "wildcard", "h248.wildcard",
FT_UINT32, BASE_DEC, NULL, 0,
"SEQUENCE_OF_WildcardField", HFILL }},
{ &hf_h248_wildcard_item,
{ "WildcardField", "h248.WildcardField",
FT_BYTES, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_terminationId,
{ "id", "h248.terminationId",
FT_BYTES, BASE_NONE, NULL, 0,
"T_terminationId", HFILL }},
{ &hf_h248_TerminationIDList_item,
{ "TerminationID", "h248.TerminationID_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_termStateDescr,
{ "termStateDescr", "h248.termStateDescr_element",
FT_NONE, BASE_NONE, NULL, 0,
"TerminationStateDescriptor", HFILL }},
{ &hf_h248_streams,
{ "streams", "h248.streams",
FT_UINT32, BASE_DEC, VALS(h248_T_streams_vals), 0,
NULL, HFILL }},
{ &hf_h248_mediaDescriptorOneStream,
{ "oneStream", "h248.oneStream_element",
FT_NONE, BASE_NONE, NULL, 0,
"StreamParms", HFILL }},
{ &hf_h248_mediaDescriptorMultiStream,
{ "multiStream", "h248.multiStream",
FT_UINT32, BASE_DEC, NULL, 0,
"SEQUENCE_OF_StreamDescriptor", HFILL }},
{ &hf_h248_mediaDescriptorMultiStream_item,
{ "StreamDescriptor", "h248.StreamDescriptor_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_streamParms,
{ "streamParms", "h248.streamParms_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_localControlDescriptor,
{ "localControlDescriptor", "h248.localControlDescriptor_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_localDescriptor,
{ "localDescriptor", "h248.localDescriptor_element",
FT_NONE, BASE_NONE, NULL, 0,
"LocalRemoteDescriptor", HFILL }},
{ &hf_h248_remoteDescriptor,
{ "remoteDescriptor", "h248.remoteDescriptor_element",
FT_NONE, BASE_NONE, NULL, 0,
"LocalRemoteDescriptor", HFILL }},
{ &hf_h248_sPstatisticsDescriptor,
{ "statisticsDescriptor", "h248.statisticsDescriptor",
FT_UINT32, BASE_DEC, NULL, 0,
NULL, HFILL }},
{ &hf_h248_streamMode,
{ "streamMode", "h248.streamMode",
FT_UINT32, BASE_DEC, VALS(h248_StreamMode_vals), 0,
NULL, HFILL }},
{ &hf_h248_reserveValue,
{ "reserveValue", "h248.reserveValue",
FT_BOOLEAN, BASE_NONE, NULL, 0,
"BOOLEAN", HFILL }},
{ &hf_h248_reserveGroup,
{ "reserveGroup", "h248.reserveGroup",
FT_BOOLEAN, BASE_NONE, NULL, 0,
"BOOLEAN", HFILL }},
{ &hf_h248_lCDpropertyParms,
{ "propertyParms", "h248.propertyParms",
FT_UINT32, BASE_DEC, NULL, 0,
"SEQUENCE_OF_PropertyParm", HFILL }},
{ &hf_h248_lCDpropertyParms_item,
{ "PropertyParm", "h248.PropertyParm_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_propertyName,
{ "propertyName", "h248.propertyName",
FT_BYTES, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_propertyParamValue,
{ "value", "h248.propertyParamValue",
FT_UINT32, BASE_DEC, NULL, 0,
"SEQUENCE_OF_PropertyID", HFILL }},
{ &hf_h248_propertyParamValue_item,
{ "PropertyID", "h248.PropertyID",
FT_BYTES, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_propParm_extraInfo,
{ "extraInfo", "h248.extraInfo",
FT_UINT32, BASE_DEC, VALS(h248_PropParm_extraInfo_vals), 0,
"PropParm_extraInfo", HFILL }},
{ &hf_h248_propGrps,
{ "propGrps", "h248.propGrps",
FT_UINT32, BASE_DEC, NULL, 0,
"SEQUENCE_OF_PropertyGroup", HFILL }},
{ &hf_h248_propGrps_item,
{ "PropertyGroup", "h248.PropertyGroup",
FT_UINT32, BASE_DEC, NULL, 0,
NULL, HFILL }},
{ &hf_h248_PropertyGroup_item,
{ "PropertyParm", "h248.PropertyParm_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_tSDpropertyParms,
{ "propertyParms", "h248.propertyParms",
FT_UINT32, BASE_DEC, NULL, 0,
"SEQUENCE_OF_PropertyParm", HFILL }},
{ &hf_h248_tSDpropertyParms_item,
{ "PropertyParm", "h248.PropertyParm_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_tSEventBufferControl,
{ "eventBufferControl", "h248.eventBufferControl",
FT_UINT32, BASE_DEC, VALS(h248_EventBufferControl_vals), 0,
NULL, HFILL }},
{ &hf_h248_serviceState,
{ "serviceState", "h248.serviceState",
FT_UINT32, BASE_DEC, VALS(h248_ServiceState_vals), 0,
NULL, HFILL }},
{ &hf_h248_muxType,
{ "muxType", "h248.muxType",
FT_UINT32, BASE_DEC, VALS(h248_MuxType_vals), 0,
NULL, HFILL }},
{ &hf_h248_termList,
{ "termList", "h248.termList",
FT_UINT32, BASE_DEC, NULL, 0,
"SEQUENCE_OF_TerminationID", HFILL }},
{ &hf_h248_termList_item,
{ "TerminationID", "h248.TerminationID_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_nonStandardData,
{ "nonStandardData", "h248.nonStandardData_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_eventList,
{ "eventList", "h248.eventList",
FT_UINT32, BASE_DEC, NULL, 0,
"SEQUENCE_OF_RequestedEvent", HFILL }},
{ &hf_h248_eventList_item,
{ "RequestedEvent", "h248.RequestedEvent_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_eventAction,
{ "eventAction", "h248.eventAction_element",
FT_NONE, BASE_NONE, NULL, 0,
"RequestedActions", HFILL }},
{ &hf_h248_evParList,
{ "evParList", "h248.evParList",
FT_UINT32, BASE_DEC, NULL, 0,
"SEQUENCE_OF_EventParameter", HFILL }},
{ &hf_h248_evParList_item,
{ "EventParameter", "h248.EventParameter_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_secondEvent,
{ "secondEvent", "h248.secondEvent_element",
FT_NONE, BASE_NONE, NULL, 0,
"SecondEventsDescriptor", HFILL }},
{ &hf_h248_notifyImmediate,
{ "notifyImmediate", "h248.notifyImmediate_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_notifyRegulated,
{ "notifyRegulated", "h248.notifyRegulated_element",
FT_NONE, BASE_NONE, NULL, 0,
"RegulatedEmbeddedDescriptor", HFILL }},
{ &hf_h248_neverNotify,
{ "neverNotify", "h248.neverNotify_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_keepActive,
{ "keepActive", "h248.keepActive",
FT_BOOLEAN, BASE_NONE, NULL, 0,
"BOOLEAN", HFILL }},
{ &hf_h248_eventDM,
{ "eventDM", "h248.eventDM",
FT_UINT32, BASE_DEC, VALS(h248_EventDM_vals), 0,
NULL, HFILL }},
{ &hf_h248_notifyBehaviour,
{ "notifyBehaviour", "h248.notifyBehaviour",
FT_UINT32, BASE_DEC, VALS(h248_NotifyBehaviour_vals), 0,
NULL, HFILL }},
{ &hf_h248_resetEventsDescriptor,
{ "resetEventsDescriptor", "h248.resetEventsDescriptor_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_digitMapValue,
{ "digitMapValue", "h248.digitMapValue_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_secondaryEventList,
{ "eventList", "h248.eventList",
FT_UINT32, BASE_DEC, NULL, 0,
"SEQUENCE_OF_SecondRequestedEvent", HFILL }},
{ &hf_h248_secondaryEventList_item,
{ "SecondRequestedEvent", "h248.SecondRequestedEvent_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_pkgdName,
{ "pkgdName", "h248.pkgdName",
FT_BYTES, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_secondaryEventAction,
{ "eventAction", "h248.eventAction_element",
FT_NONE, BASE_NONE, NULL, 0,
"SecondRequestedActions", HFILL }},
{ &hf_h248_EventBufferDescriptor_item,
{ "EventSpec", "h248.EventSpec_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_SignalsDescriptor_item,
{ "SignalRequest", "h248.SignalRequest",
FT_UINT32, BASE_DEC, VALS(h248_SignalRequest_vals), 0,
NULL, HFILL }},
{ &hf_h248_signal,
{ "signal", "h248.signal_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_seqSigList,
{ "seqSigList", "h248.seqSigList_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_signalList,
{ "signalList", "h248.signalList",
FT_UINT32, BASE_DEC, NULL, 0,
"SEQUENCE_OF_Signal", HFILL }},
{ &hf_h248_signalList_item,
{ "Signal", "h248.Signal_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_signalName,
{ "signalName", "h248.signalName",
FT_BYTES, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_sigType,
{ "sigType", "h248.sigType",
FT_UINT32, BASE_DEC, VALS(h248_SignalType_vals), 0,
"SignalType", HFILL }},
{ &hf_h248_duration,
{ "duration", "h248.duration",
FT_UINT32, BASE_DEC, NULL, 0,
"INTEGER_0_65535", HFILL }},
{ &hf_h248_notifyCompletion,
{ "notifyCompletion", "h248.notifyCompletion",
FT_BYTES, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_sigParList,
{ "sigParList", "h248.sigParList",
FT_UINT32, BASE_DEC, NULL, 0,
"SEQUENCE_OF_SigParameter", HFILL }},
{ &hf_h248_sigParList_item,
{ "SigParameter", "h248.SigParameter_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_direction,
{ "direction", "h248.direction",
FT_UINT32, BASE_DEC, VALS(h248_SignalDirection_vals), 0,
"SignalDirection", HFILL }},
{ &hf_h248_intersigDelay,
{ "intersigDelay", "h248.intersigDelay",
FT_UINT32, BASE_DEC, NULL, 0,
"INTEGER_0_65535", HFILL }},
{ &hf_h248_sigParameterName,
{ "sigParameterName", "h248.sigParameterName",
FT_BYTES, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_value,
{ "value", "h248.value",
FT_UINT32, BASE_DEC, NULL, 0,
"SigParamValues", HFILL }},
{ &hf_h248_extraInfo,
{ "extraInfo", "h248.extraInfo",
FT_UINT32, BASE_DEC, VALS(h248_T_extraInfo_vals), 0,
NULL, HFILL }},
{ &hf_h248_SigParamValues_item,
{ "SigParamValue", "h248.SigParamValue",
FT_BYTES, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_mtl,
{ "mtl", "h248.mtl",
FT_UINT32, BASE_DEC, NULL, 0,
"SEQUENCE_OF_ModemType", HFILL }},
{ &hf_h248_mtl_item,
{ "ModemType", "h248.ModemType",
FT_UINT32, BASE_DEC, VALS(h248_ModemType_vals), 0,
NULL, HFILL }},
{ &hf_h248_mpl,
{ "mpl", "h248.mpl",
FT_UINT32, BASE_DEC, NULL, 0,
"SEQUENCE_OF_PropertyParm", HFILL }},
{ &hf_h248_mpl_item,
{ "PropertyParm", "h248.PropertyParm_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_startTimer,
{ "startTimer", "h248.startTimer",
FT_UINT32, BASE_DEC, NULL, 0,
"INTEGER_0_99", HFILL }},
{ &hf_h248_shortTimer,
{ "shortTimer", "h248.shortTimer",
FT_UINT32, BASE_DEC, NULL, 0,
"INTEGER_0_99", HFILL }},
{ &hf_h248_longTimer,
{ "longTimer", "h248.longTimer",
FT_UINT32, BASE_DEC, NULL, 0,
"INTEGER_0_99", HFILL }},
{ &hf_h248_digitMapBody,
{ "digitMapBody", "h248.digitMapBody",
FT_STRING, BASE_NONE, NULL, 0,
"IA5String", HFILL }},
{ &hf_h248_durationTimer,
{ "durationTimer", "h248.durationTimer",
FT_UINT32, BASE_DEC, NULL, 0,
"INTEGER_0_99", HFILL }},
{ &hf_h248_serviceChangeMethod,
{ "serviceChangeMethod", "h248.serviceChangeMethod",
FT_UINT32, BASE_DEC, VALS(h248_ServiceChangeMethod_vals), 0,
NULL, HFILL }},
{ &hf_h248_serviceChangeAddress,
{ "serviceChangeAddress", "h248.serviceChangeAddress",
FT_UINT32, BASE_DEC, VALS(h248_ServiceChangeAddress_vals), 0,
NULL, HFILL }},
{ &hf_h248_serviceChangeVersion,
{ "serviceChangeVersion", "h248.serviceChangeVersion",
FT_UINT32, BASE_DEC, NULL, 0,
"INTEGER_0_99", HFILL }},
{ &hf_h248_serviceChangeProfile,
{ "serviceChangeProfile", "h248.serviceChangeProfile_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_serviceChangeReason,
{ "serviceChangeReason", "h248.serviceChangeReason",
FT_UINT32, BASE_DEC, NULL, 0,
"SCreasonValue", HFILL }},
{ &hf_h248_serviceChangeDelay,
{ "serviceChangeDelay", "h248.serviceChangeDelay",
FT_UINT32, BASE_DEC, NULL, 0,
"INTEGER_0_4294967295", HFILL }},
{ &hf_h248_serviceChangeMgcId,
{ "serviceChangeMgcId", "h248.serviceChangeMgcId",
FT_UINT32, BASE_DEC, VALS(h248_MId_vals), 0,
"MId", HFILL }},
{ &hf_h248_timeStamp,
{ "timeStamp", "h248.timeStamp_element",
FT_NONE, BASE_NONE, NULL, 0,
"TimeNotation", HFILL }},
{ &hf_h248_serviceChangeInfo,
{ "serviceChangeInfo", "h248.serviceChangeInfo_element",
FT_NONE, BASE_NONE, NULL, 0,
"AuditDescriptor", HFILL }},
{ &hf_h248_serviceChangeIncompleteFlag,
{ "serviceChangeIncompleteFlag", "h248.serviceChangeIncompleteFlag_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_SCreasonValue_item,
{ "SCreasonValueOctetStr", "h248.SCreasonValueOctetStr",
FT_BYTES, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_timestamp,
{ "timestamp", "h248.timestamp_element",
FT_NONE, BASE_NONE, NULL, 0,
"TimeNotation", HFILL }},
{ &hf_h248_profileName,
{ "profileName", "h248.profileName",
FT_STRING, BASE_NONE, NULL, 0,
"IA5String_SIZE_1_67", HFILL }},
{ &hf_h248_PackagesDescriptor_item,
{ "PackagesItem", "h248.PackagesItem_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_StatisticsDescriptor_item,
{ "StatisticsParameter", "h248.StatisticsParameter_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_statName,
{ "statName", "h248.statName",
FT_BYTES, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_statValue,
{ "statValue", "h248.statValue",
FT_UINT32, BASE_DEC, NULL, 0,
NULL, HFILL }},
{ &hf_h248_nonStandardIdentifier,
{ "nonStandardIdentifier", "h248.nonStandardIdentifier",
FT_UINT32, BASE_DEC, VALS(h248_NonStandardIdentifier_vals), 0,
NULL, HFILL }},
{ &hf_h248_data,
{ "data", "h248.data",
FT_BYTES, BASE_NONE, NULL, 0,
"OCTET_STRING", HFILL }},
{ &hf_h248_object,
{ "object", "h248.object",
FT_OID, BASE_NONE, NULL, 0,
"OBJECT_IDENTIFIER", HFILL }},
{ &hf_h248_h221NonStandard,
{ "h221NonStandard", "h248.h221NonStandard_element",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
{ &hf_h248_experimental,
{ "experimental", "h248.experimental",
FT_STRING, BASE_NONE, NULL, 0,
"IA5String_SIZE_8", HFILL }},
{ &hf_h248_t35CountryCode1,
{ "t35CountryCode1", "h248.t35CountryCode1",
FT_UINT32, BASE_DEC, NULL, 0,
"INTEGER_0_255", HFILL }},
{ &hf_h248_t35CountryCode2,
{ "t35CountryCode2", "h248.t35CountryCode2",
FT_UINT32, BASE_DEC, NULL, 0,
"INTEGER_0_255", HFILL }},
{ &hf_h248_t35Extension,
{ "t35Extension", "h248.t35Extension",
FT_UINT32, BASE_DEC, NULL, 0,
"INTEGER_0_255", HFILL }},
{ &hf_h248_manufacturerCode,
{ "manufacturerCode", "h248.manufacturerCode",
FT_UINT32, BASE_DEC, NULL, 0,
"INTEGER_0_65535", HFILL }},
{ &hf_h248_date,
{ "date", "h248.date",
FT_STRING, BASE_NONE, NULL, 0,
"IA5String_SIZE_8", HFILL }},
{ &hf_h248_time,
{ "time", "h248.time",
FT_STRING, BASE_NONE, NULL, 0,
"IA5String_SIZE_8", HFILL }},
{ &hf_h248_Value_item,
{ "Value item", "h248.Value_item",
FT_BYTES, BASE_NONE, NULL, 0,
"OCTET_STRING", HFILL }},
{ &hf_h248_audit_result,
{ "auditResult", "h248.auditResult",
FT_UINT32, BASE_DEC, VALS(h248_AuditResultV1_vals), 0,
"AuditResultV1", HFILL }},
{ &hf_h248_contectAuditResult,
{ "contectAuditResult", "h248.contectAuditResult_element",
FT_NONE, BASE_NONE, NULL, 0,
"TerminationID", HFILL }},
{ &hf_h248_eventParamterName,
{ "eventParamterName", "h248.eventParamterName",
FT_BYTES, BASE_NONE, NULL, 0,
"EventParameterName", HFILL }},
{ &hf_h248_event_param_value,
{ "value", "h248.event_param_value",
FT_BYTES, BASE_NONE, NULL, 0,
"EventParamValueV1", HFILL }},
{ &hf_h248_sig_param_value,
{ "value", "h248.sig_param_value",
FT_BYTES, BASE_NONE, NULL, 0,
"SigParamValueV1", HFILL }},
{ &hf_h248_T_auditToken_muxToken,
{ "muxToken", "h248.T.auditToken.muxToken",
FT_BOOLEAN, 8, NULL, 0x80,
NULL, HFILL }},
{ &hf_h248_T_auditToken_modemToken,
{ "modemToken", "h248.T.auditToken.modemToken",
FT_BOOLEAN, 8, NULL, 0x40,
NULL, HFILL }},
{ &hf_h248_T_auditToken_mediaToken,
{ "mediaToken", "h248.T.auditToken.mediaToken",
FT_BOOLEAN, 8, NULL, 0x20,
NULL, HFILL }},
{ &hf_h248_T_auditToken_eventsToken,
{ "eventsToken", "h248.T.auditToken.eventsToken",
FT_BOOLEAN, 8, NULL, 0x10,
NULL, HFILL }},
{ &hf_h248_T_auditToken_signalsToken,
{ "signalsToken", "h248.T.auditToken.signalsToken",
FT_BOOLEAN, 8, NULL, 0x08,
NULL, HFILL }},
{ &hf_h248_T_auditToken_digitMapToken,
{ "digitMapToken", "h248.T.auditToken.digitMapToken",
FT_BOOLEAN, 8, NULL, 0x04,
NULL, HFILL }},
{ &hf_h248_T_auditToken_statsToken,
{ "statsToken", "h248.T.auditToken.statsToken",
FT_BOOLEAN, 8, NULL, 0x02,
NULL, HFILL }},
{ &hf_h248_T_auditToken_observedEventsToken,
{ "observedEventsToken", "h248.T.auditToken.observedEventsToken",
FT_BOOLEAN, 8, NULL, 0x01,
NULL, HFILL }},
{ &hf_h248_T_auditToken_packagesToken,
{ "packagesToken", "h248.T.auditToken.packagesToken",
FT_BOOLEAN, 8, NULL, 0x80,
NULL, HFILL }},
{ &hf_h248_T_auditToken_eventBufferToken,
{ "eventBufferToken", "h248.T.auditToken.eventBufferToken",
FT_BOOLEAN, 8, NULL, 0x40,
NULL, HFILL }},
{ &hf_h248_NotifyCompletion_onTimeOut,
{ "onTimeOut", "h248.NotifyCompletion.onTimeOut",
FT_BOOLEAN, 8, NULL, 0x80,
NULL, HFILL }},
{ &hf_h248_NotifyCompletion_onInterruptByEvent,
{ "onInterruptByEvent", "h248.NotifyCompletion.onInterruptByEvent",
FT_BOOLEAN, 8, NULL, 0x40,
NULL, HFILL }},
{ &hf_h248_NotifyCompletion_onInterruptByNewSignalDescr,
{ "onInterruptByNewSignalDescr", "h248.NotifyCompletion.onInterruptByNewSignalDescr",
FT_BOOLEAN, 8, NULL, 0x20,
NULL, HFILL }},
{ &hf_h248_NotifyCompletion_otherReason,
{ "otherReason", "h248.NotifyCompletion.otherReason",
FT_BOOLEAN, 8, NULL, 0x10,
NULL, HFILL }},
{ &hf_h248_NotifyCompletion_onIteration,
{ "onIteration", "h248.NotifyCompletion.onIteration",
FT_BOOLEAN, 8, NULL, 0x08,
NULL, HFILL }},
/*--- End of included file: packet-h248-hfarr.c ---*/
#line 2318 "./asn1/h248/packet-h248-template.c"
GCP_HF_ARR_ELEMS("h248",h248_arrel)
};
/* List of subtrees */
static gint *ett[] = {
&ett_h248,
&ett_mtpaddress,
&ett_packagename,
&ett_codec,
&ett_wildcard,
&ett_h248_no_pkg,
&ett_h248_no_sig,
&ett_h248_no_evt,
GCP_ETT_ARR_ELEMS(h248_arrel),
/*--- Included file: packet-h248-ettarr.c ---*/
#line 1 "./asn1/h248/packet-h248-ettarr.c"
&ett_h248_MegacoMessage,
&ett_h248_AuthenticationHeader,
&ett_h248_Message,
&ett_h248_T_messageBody,
&ett_h248_SEQUENCE_OF_Transaction,
&ett_h248_MId,
&ett_h248_DomainName,
&ett_h248_IP4Address,
&ett_h248_IP6Address,
&ett_h248_Transaction,
&ett_h248_TransactionRequest,
&ett_h248_SEQUENCE_OF_ActionRequest,
&ett_h248_TransactionPending,
&ett_h248_TransactionReply,
&ett_h248_T_transactionResult,
&ett_h248_SEQUENCE_OF_ActionReply,
&ett_h248_SegmentReply,
&ett_h248_TransactionResponseAck,
&ett_h248_TransactionAck,
&ett_h248_ErrorDescriptor,
&ett_h248_ActionRequest,
&ett_h248_SEQUENCE_OF_CommandRequest,
&ett_h248_ActionReply,
&ett_h248_SEQUENCE_OF_CommandReply,
&ett_h248_ContextRequest,
&ett_h248_T_topologyReq,
&ett_h248_SEQUENCE_OF_PropertyParm,
&ett_h248_SEQUENCE_OF_ContextIDinList,
&ett_h248_ContextAttrAuditRequest,
&ett_h248_SEQUENCE_OF_IndAudPropertyParm,
&ett_h248_SelectLogic,
&ett_h248_CommandRequest,
&ett_h248_Command,
&ett_h248_CommandReply,
&ett_h248_TopologyRequest,
&ett_h248_AmmRequest,
&ett_h248_SEQUENCE_OF_AmmDescriptor,
&ett_h248_AmmDescriptor,
&ett_h248_AmmsReply,
&ett_h248_SubtractRequest,
&ett_h248_AuditRequest,
&ett_h248_AuditReply,
&ett_h248_AuditResult,
&ett_h248_TermListAuditResult,
&ett_h248_TerminationAudit,
&ett_h248_AuditReturnParameter,
&ett_h248_AuditDescriptor,
&ett_h248_T_auditToken,
&ett_h248_SEQUENCE_OF_IndAuditParameter,
&ett_h248_IndAuditParameter,
&ett_h248_IndAudMediaDescriptor,
&ett_h248_IndAudMediaDescriptorStreams,
&ett_h248_SEQUENCE_OF_IndAudStreamDescriptor,
&ett_h248_IndAudStreamDescriptor,
&ett_h248_IndAudStreamParms,
&ett_h248_IndAudLocalControlDescriptor,
&ett_h248_IndAudPropertyParm,
&ett_h248_IndAudLocalRemoteDescriptor,
&ett_h248_IndAudPropertyGroup,
&ett_h248_IndAudTerminationStateDescriptor,
&ett_h248_IndAudEventsDescriptor,
&ett_h248_IndAudEventBufferDescriptor,
&ett_h248_IndAudSignalsDescriptor,
&ett_h248_IndAudSeqSigList,
&ett_h248_IndAudSignal,
&ett_h248_IndAudDigitMapDescriptor,
&ett_h248_IndAudStatisticsDescriptor,
&ett_h248_IndAudPackagesDescriptor,
&ett_h248_NotifyRequest,
&ett_h248_NotifyReply,
&ett_h248_ObservedEventsDescriptor,
&ett_h248_SEQUENCE_OF_ObservedEvent,
&ett_h248_ObservedEvent,
&ett_h248_SEQUENCE_OF_EventParameter,
&ett_h248_EventParameter,
&ett_h248_EventPar_extraInfo,
&ett_h248_EventParamValues,
&ett_h248_ServiceChangeRequest,
&ett_h248_ServiceChangeReply,
&ett_h248_ServiceChangeResult,
&ett_h248_TerminationID,
&ett_h248_SEQUENCE_OF_WildcardField,
&ett_h248_TerminationIDList,
&ett_h248_MediaDescriptor,
&ett_h248_T_streams,
&ett_h248_SEQUENCE_OF_StreamDescriptor,
&ett_h248_StreamDescriptor,
&ett_h248_StreamParms,
&ett_h248_LocalControlDescriptor,
&ett_h248_PropertyParm,
&ett_h248_SEQUENCE_OF_PropertyID,
&ett_h248_PropParm_extraInfo,
&ett_h248_LocalRemoteDescriptor,
&ett_h248_SEQUENCE_OF_PropertyGroup,
&ett_h248_PropertyGroup,
&ett_h248_TerminationStateDescriptor,
&ett_h248_MuxDescriptor,
&ett_h248_SEQUENCE_OF_TerminationID,
&ett_h248_EventsDescriptor,
&ett_h248_SEQUENCE_OF_RequestedEvent,
&ett_h248_RequestedEvent,
&ett_h248_RegulatedEmbeddedDescriptor,
&ett_h248_NotifyBehaviour,
&ett_h248_RequestedActions,
&ett_h248_EventDM,
&ett_h248_SecondEventsDescriptor,
&ett_h248_SEQUENCE_OF_SecondRequestedEvent,
&ett_h248_SecondRequestedEvent,
&ett_h248_SecondRequestedActions,
&ett_h248_EventBufferDescriptor,
&ett_h248_EventSpec,
&ett_h248_SignalsDescriptor,
&ett_h248_SignalRequest,
&ett_h248_SeqSigList,
&ett_h248_SEQUENCE_OF_Signal,
&ett_h248_Signal,
&ett_h248_SEQUENCE_OF_SigParameter,
&ett_h248_NotifyCompletion,
&ett_h248_SigParameter,
&ett_h248_T_extraInfo,
&ett_h248_SigParamValues,
&ett_h248_ModemDescriptor,
&ett_h248_SEQUENCE_OF_ModemType,
&ett_h248_DigitMapDescriptor,
&ett_h248_DigitMapValue,
&ett_h248_ServiceChangeParm,
&ett_h248_SCreasonValue,
&ett_h248_ServiceChangeAddress,
&ett_h248_ServiceChangeResParm,
&ett_h248_ServiceChangeProfile,
&ett_h248_PackagesDescriptor,
&ett_h248_PackagesItem,
&ett_h248_StatisticsDescriptor,
&ett_h248_StatisticsParameter,
&ett_h248_NonStandardData,
&ett_h248_NonStandardIdentifier,
&ett_h248_H221NonStandard,
&ett_h248_TimeNotation,
&ett_h248_Value,
&ett_h248_AuditReplyV1,
&ett_h248_AuditResultV1,
&ett_h248_EventParameterV1,
&ett_h248_SigParameterV1,
/*--- End of included file: packet-h248-ettarr.c ---*/
#line 2336 "./asn1/h248/packet-h248-template.c"
};
static ei_register_info ei[] = {
{ &ei_h248_errored_command, { "h248.errored_command", PI_RESPONSE_CODE, PI_WARN, "Errored Command", EXPFILL }},
{ &ei_h248_transactionId64, { "h248.transactionId.error", PI_MALFORMED, PI_WARN, "Transaction ID invalid", EXPFILL }},
{ &ei_h248_context_id64, { "h248.contextId.error", PI_MALFORMED, PI_WARN, "Context ID invalid", EXPFILL }},
{ &ei_h248_octet_string_expected, { "h248.octet_string_expected", PI_PROTOCOL, PI_WARN, "H.248 BER Error: OctetString expected", EXPFILL }},
};
expert_module_t* expert_h248;
module_t *h248_module;
/* Register protocol */
proto_h248 = proto_register_protocol(PNAME, PSNAME, PFNAME);
h248_handle = register_dissector("h248", dissect_h248, proto_h248);
h248_tpkt_handle = register_dissector("h248.tpkt", dissect_h248_tpkt, proto_h248);
/* Register fields and subtrees */
proto_register_field_array(proto_h248, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
expert_h248 = expert_register_protocol(proto_h248);
expert_register_field_array(expert_h248, ei, array_length(ei));
subdissector_table = register_dissector_table("h248.magic_num", "H248 Magic Num", proto_h248, FT_UINT32, BASE_HEX);
h248_module = prefs_register_protocol(proto_h248, NULL);
prefs_register_bool_preference(h248_module, "ctx_info",
"Track Context",
"Maintain relationships between transactions and contexts and display an extra tree showing context data",
&keep_persistent_data);
prefs_register_bool_preference(h248_module, "desegment",
"Desegment H.248 over TCP",
"Desegment H.248 messages that span more TCP segments",
&h248_desegment);
gcp_msgs = wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope());
gcp_trxs = wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope());
gcp_ctxs_by_trx = wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope());
gcp_ctxs = wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope());
h248_tap = register_tap("h248");
}
/*--- proto_reg_handoff_h248 -------------------------------------------*/
void proto_reg_handoff_h248(void) {
dissector_add_uint("mtp3.service_indicator", MTP_SI_GCP, h248_handle);
h248_term_handle = find_dissector_add_dependency("h248term", proto_h248);
dissector_add_uint_with_preference("tcp.port", H248_PORT, h248_tpkt_handle);
dissector_add_uint_with_preference("udp.port", H248_PORT, h248_handle);
ss7pc_address_type = address_type_get_by_name("AT_SS7PC");
exported_pdu_tap = find_tap_id(EXPORT_PDU_TAP_NAME_LAYER_7);
}