diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 20:34:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 20:34:10 +0000 |
commit | e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc (patch) | |
tree | 68cb5ef9081156392f1dd62a00c6ccc1451b93df /epan/dissectors/asn1/h225 | |
parent | Initial commit. (diff) | |
download | wireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.tar.xz wireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.zip |
Adding upstream version 4.2.2.upstream/4.2.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | epan/dissectors/asn1/h225/CMakeLists.txt | 44 | ||||
-rw-r--r-- | epan/dissectors/asn1/h225/H323-MESSAGES.asn | 2221 | ||||
-rw-r--r-- | epan/dissectors/asn1/h225/h225.cnf | 961 | ||||
-rw-r--r-- | epan/dissectors/asn1/h225/packet-h225-template.c | 1146 | ||||
-rw-r--r-- | epan/dissectors/asn1/h225/packet-h225-template.h | 83 |
5 files changed, 4455 insertions, 0 deletions
diff --git a/epan/dissectors/asn1/h225/CMakeLists.txt b/epan/dissectors/asn1/h225/CMakeLists.txt new file mode 100644 index 00000000..f1028240 --- /dev/null +++ b/epan/dissectors/asn1/h225/CMakeLists.txt @@ -0,0 +1,44 @@ +# CMakeLists.txt +# +# Wireshark - Network traffic analyzer +# By Gerald Combs <gerald@wireshark.org> +# Copyright 1998 Gerald Combs +# +# SPDX-License-Identifier: GPL-2.0-or-later +# + +set( PROTOCOL_NAME h225 ) + +set( PROTO_OPT ) + +set( EXPORT_FILES + ${PROTOCOL_NAME}-exp.cnf +) + +set( EXT_ASN_FILE_LIST +) + +set( ASN_FILE_LIST + H323-MESSAGES.asn +) + +set( EXTRA_DIST + ${ASN_FILE_LIST} + packet-${PROTOCOL_NAME}-template.c + packet-${PROTOCOL_NAME}-template.h + ${PROTOCOL_NAME}.cnf +) + +set( SRC_FILES + ${EXTRA_DIST} + ${EXT_ASN_FILE_LIST} +) + +set( A2W_FLAGS ) + +set( EXTRA_CNF + "${CMAKE_CURRENT_BINARY_DIR}/../h235/h235-exp.cnf" + "${CMAKE_CURRENT_BINARY_DIR}/../h245/h245-exp.cnf" +) + +ASN2WRS() diff --git a/epan/dissectors/asn1/h225/H323-MESSAGES.asn b/epan/dissectors/asn1/h225/H323-MESSAGES.asn new file mode 100644 index 00000000..0beb98d4 --- /dev/null +++ b/epan/dissectors/asn1/h225/H323-MESSAGES.asn @@ -0,0 +1,2221 @@ +-- H323-MESSAGES.asn +-- +-- Taken from ITU ASN.1 database +-- http://www.itu.int/ITU-T/formal-language/itu-t/h/h225-0/2009/H323-MESSAGES.asn +-- + +-- Module H323-MESSAGES (H.225.0:12/2009) +H323-MESSAGES {itu-t(0) recommendation(0) h(8) h225-0(2250) version(0) + 7 h323-messages(0)} DEFINITIONS AUTOMATIC TAGS ::= +BEGIN + +IMPORTS + SIGNED{}, ENCRYPTED{}, HASHED{}, ChallengeString, TimeStamp, RandomVal, + Password, EncodedPwdCertToken, ClearToken, CryptoToken, + AuthenticationMechanism + FROM H235-SECURITY-MESSAGES + DataProtocolCapability, T38FaxProfile, QOSCapability + FROM MULTIMEDIA-SYSTEM-CONTROL {itu-t(0) recommendation(0) h(8) h245(245) + version(0) 15 multimedia-system-control(0)}; + +H323-UserInformation ::= + SEQUENCE -- root for all H.225.0 call signalling messages + { + h323-uu-pdu H323-UU-PDU, + user-data + SEQUENCE {protocol-discriminator INTEGER(0..255), + user-information OCTET STRING(SIZE (1..131)), + ...} OPTIONAL, + ... +} + +H323-UU-PDU ::= SEQUENCE { + h323-message-body + CHOICE {setup Setup-UUIE, + callProceeding CallProceeding-UUIE, + connect Connect-UUIE, + alerting Alerting-UUIE, + information Information-UUIE, + releaseComplete ReleaseComplete-UUIE, + facility Facility-UUIE, + ..., + progress Progress-UUIE, + empty NULL, -- used when a Facility message is sent,-- + -- but the Facility-UUIE is not to be invoked + -- (possible when transporting supplementary + -- services messages in versions prior to + -- H.225.0 version 4) + status Status-UUIE, + statusInquiry StatusInquiry-UUIE, + setupAcknowledge SetupAcknowledge-UUIE, + notify Notify-UUIE}, + nonStandardData NonStandardParameter OPTIONAL, + ..., + h4501SupplementaryService SEQUENCE OF OCTET STRING OPTIONAL, + -- each sequence of octet string is defined as one + -- H4501SupplementaryService APDU as defined in + -- Table 3/H.450.1 + h245Tunnelling BOOLEAN, + -- if TRUE, tunnelling of H.245 messages is enabled + h245Control SEQUENCE OF OCTET STRING OPTIONAL, + nonStandardControl SEQUENCE OF NonStandardParameter OPTIONAL, + callLinkage CallLinkage OPTIONAL, + tunnelledSignallingMessage + SEQUENCE {tunnelledProtocolID TunnelledProtocol, -- tunnelled signalling-- + -- protocol ID + messageContent SEQUENCE OF OCTET STRING, -- sequence of entire -- + -- message(s) + tunnellingRequired NULL OPTIONAL, + nonStandardData NonStandardParameter OPTIONAL, + ...} OPTIONAL, + provisionalRespToH245Tunnelling NULL OPTIONAL, + stimulusControl StimulusControl OPTIONAL, + genericData SEQUENCE OF GenericData OPTIONAL +} + +StimulusControl ::= SEQUENCE { + nonStandard NonStandardParameter OPTIONAL, + isText NULL OPTIONAL, + h248Message OCTET STRING OPTIONAL, + ... +} + +Alerting-UUIE ::= SEQUENCE { + protocolIdentifier ProtocolIdentifier, + destinationInfo EndpointType, + h245Address TransportAddress OPTIONAL, + ..., + callIdentifier CallIdentifier, + h245SecurityMode H245Security OPTIONAL, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + fastStart SEQUENCE OF OCTET STRING OPTIONAL, + multipleCalls BOOLEAN, + maintainConnection BOOLEAN, + alertingAddress SEQUENCE OF AliasAddress OPTIONAL, + presentationIndicator PresentationIndicator OPTIONAL, + screeningIndicator ScreeningIndicator OPTIONAL, + fastConnectRefused NULL OPTIONAL, + serviceControl SEQUENCE OF ServiceControlSession OPTIONAL, + capacity CallCapacity OPTIONAL, + featureSet FeatureSet OPTIONAL, + displayName SEQUENCE OF DisplayName OPTIONAL +} + +CallProceeding-UUIE ::= SEQUENCE { + protocolIdentifier ProtocolIdentifier, + destinationInfo EndpointType, + h245Address TransportAddress OPTIONAL, + ..., + callIdentifier CallIdentifier, + h245SecurityMode H245Security OPTIONAL, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + fastStart SEQUENCE OF OCTET STRING OPTIONAL, + multipleCalls BOOLEAN, + maintainConnection BOOLEAN, + fastConnectRefused NULL OPTIONAL, + featureSet FeatureSet OPTIONAL +} + +Connect-UUIE ::= SEQUENCE { + protocolIdentifier ProtocolIdentifier, + h245Address TransportAddress OPTIONAL, + destinationInfo EndpointType, + conferenceID ConferenceIdentifier, + ..., + callIdentifier CallIdentifier, + h245SecurityMode H245Security OPTIONAL, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + fastStart SEQUENCE OF OCTET STRING OPTIONAL, + multipleCalls BOOLEAN, + maintainConnection BOOLEAN, + language SEQUENCE OF IA5String(SIZE (1..32)) OPTIONAL, -- RFC 1766 language tag + connectedAddress SEQUENCE OF AliasAddress OPTIONAL, + presentationIndicator PresentationIndicator OPTIONAL, + screeningIndicator ScreeningIndicator OPTIONAL, + fastConnectRefused NULL OPTIONAL, + serviceControl SEQUENCE OF ServiceControlSession OPTIONAL, + capacity CallCapacity OPTIONAL, + featureSet FeatureSet OPTIONAL, + displayName SEQUENCE OF DisplayName OPTIONAL +} + +Information-UUIE ::= SEQUENCE { + protocolIdentifier ProtocolIdentifier, + ..., + callIdentifier CallIdentifier, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + fastStart SEQUENCE OF OCTET STRING OPTIONAL, + fastConnectRefused NULL OPTIONAL, + circuitInfo CircuitInfo OPTIONAL +} + +ReleaseComplete-UUIE ::= SEQUENCE { + protocolIdentifier ProtocolIdentifier, + reason ReleaseCompleteReason OPTIONAL, + ..., + callIdentifier CallIdentifier, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + busyAddress SEQUENCE OF AliasAddress OPTIONAL, + presentationIndicator PresentationIndicator OPTIONAL, + screeningIndicator ScreeningIndicator OPTIONAL, + capacity CallCapacity OPTIONAL, + serviceControl SEQUENCE OF ServiceControlSession OPTIONAL, + featureSet FeatureSet OPTIONAL, + destinationInfo EndpointType OPTIONAL, + displayName SEQUENCE OF DisplayName OPTIONAL +} + +ReleaseCompleteReason ::= CHOICE { + noBandwidth NULL, -- bandwidth taken away or ARQ denied + gatekeeperResources NULL, -- exhausted + unreachableDestination NULL, -- no transport path to the destination + destinationRejection NULL, -- rejected at destination + invalidRevision NULL, + noPermission NULL, -- called party's gatekeeper rejects + unreachableGatekeeper NULL, -- terminal cannot reach gatekeeper + + -- for ARQ + gatewayResources NULL, + badFormatAddress NULL, + adaptiveBusy NULL, -- call is dropping due to LAN crowding + inConf NULL, -- called party busy + undefinedReason NULL, + ..., + facilityCallDeflection NULL, -- call was deflected using a Facility + + -- message + securityDenied NULL, -- incompatible security settings + calledPartyNotRegistered NULL, -- used by gatekeeper when endpoint has + + -- preGrantedARQ to bypass ARQ/ACF + callerNotRegistered NULL, -- used by gatekeeper when endpoint has + + -- preGrantedARQ to bypass ARQ/ACF + newConnectionNeeded NULL, -- indicates that the Setup was not + + -- accepted on this connection, but that + -- the Setup may be accepted on + -- a new connection + nonStandardReason NonStandardParameter, + replaceWithConferenceInvite ConferenceIdentifier, -- call dropped due to + + -- subsequent invitation + -- to a conference + -- (see 8.4.3.8/H.323) + genericDataReason NULL, + neededFeatureNotSupported NULL, + tunnelledSignallingRejected NULL, + invalidCID NULL, + securityError SecurityErrors, + hopCountExceeded NULL +} + +Setup-UUIE ::= SEQUENCE { + protocolIdentifier ProtocolIdentifier, + h245Address TransportAddress OPTIONAL, + sourceAddress SEQUENCE OF AliasAddress OPTIONAL, + sourceInfo EndpointType, + destinationAddress SEQUENCE OF AliasAddress OPTIONAL, + destCallSignalAddress TransportAddress OPTIONAL, + destExtraCallInfo SEQUENCE OF AliasAddress OPTIONAL, + destExtraCRV SEQUENCE OF CallReferenceValue OPTIONAL, + activeMC BOOLEAN, + conferenceID ConferenceIdentifier, + conferenceGoal + CHOICE {create NULL, + join NULL, + invite NULL, + ..., + capability-negotiation NULL, + callIndependentSupplementaryService NULL}, + callServices QseriesOptions OPTIONAL, + callType CallType, + ..., + sourceCallSignalAddress TransportAddress OPTIONAL, + remoteExtensionAddress AliasAddress OPTIONAL, + callIdentifier CallIdentifier, + h245SecurityCapability SEQUENCE OF H245Security OPTIONAL, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + fastStart SEQUENCE OF OCTET STRING OPTIONAL, + mediaWaitForConnect BOOLEAN, + canOverlapSend BOOLEAN, + endpointIdentifier EndpointIdentifier OPTIONAL, + multipleCalls BOOLEAN, + maintainConnection BOOLEAN, + connectionParameters + SEQUENCE-- additional gateway parameters-- {connectionType + ScnConnectionType, + numberOfScnConnections + INTEGER(0..65535), + connectionAggregation + ScnConnectionAggregation, + ...} OPTIONAL, + language SEQUENCE OF IA5String(SIZE (1..32)) OPTIONAL, + -- RFC 1766 language tag + presentationIndicator PresentationIndicator OPTIONAL, + screeningIndicator ScreeningIndicator OPTIONAL, + serviceControl SEQUENCE OF ServiceControlSession OPTIONAL, + symmetricOperationRequired NULL OPTIONAL, + capacity CallCapacity OPTIONAL, + circuitInfo CircuitInfo OPTIONAL, + desiredProtocols SEQUENCE OF SupportedProtocols OPTIONAL, + neededFeatures SEQUENCE OF FeatureDescriptor OPTIONAL, + desiredFeatures SEQUENCE OF FeatureDescriptor OPTIONAL, + supportedFeatures SEQUENCE OF FeatureDescriptor OPTIONAL, + parallelH245Control SEQUENCE OF OCTET STRING OPTIONAL, + additionalSourceAddresses SEQUENCE OF ExtendedAliasAddress OPTIONAL, + hopCount INTEGER(1..31) OPTIONAL, + displayName SEQUENCE OF DisplayName OPTIONAL +} + +ScnConnectionType ::= CHOICE { + unknown NULL, -- should be selected when connection type is unknown + bChannel NULL, -- each individual connection on the SCN is 64 kbit/s. + + -- Note that where SCN delivers 56 kbit/s usable data, + -- the actual bandwidth allocated on SCN is still + -- 64 kbit/s. + hybrid2x64 NULL, -- each connection is a 128 kbit/s hybrid call + hybrid384 NULL, -- each connection is an H0 (384 kbit/s) hybrid call + hybrid1536 NULL, -- each connection is an H11 (1536 kbit/s) hybrid call + hybrid1920 NULL, -- each connection is an H12 (1920 kbit/s) hybrid call + multirate NULL, -- bandwidth supplied by SCN using multirate. + + -- In this case, the information transfer rate octet + -- in the bearer capability shall be set to multirate + -- and the rate multiplier octet shall denote the + -- number of B channels. + ... +} + +ScnConnectionAggregation ::= CHOICE { + auto NULL, -- aggregation mechanism is unknown + none NULL, -- call produced using a single SCN connection + h221 NULL, -- use H.221 framing to aggregate the connections + bonded-mode1 NULL, -- use ISO/IEC 13871 bonding mode 1. + + -- Use bonded-mode1 to signal a bonded call if the + -- precise bonding mode to be used is unknown. + bonded-mode2 NULL, -- use ISO/IEC 13871 bonding mode 2 + bonded-mode3 NULL, -- use ISO/IEC 13871 bonding mode 3 + ... +} + +PresentationIndicator ::= CHOICE { + presentationAllowed NULL, + presentationRestricted NULL, + addressNotAvailable NULL, + ... +} + +ScreeningIndicator ::= ENUMERATED { + userProvidedNotScreened(0), + -- number was provided by a remote user + -- and has not been screened by a gatekeeper + userProvidedVerifiedAndPassed(1), + -- number was provided by user + -- equipment (or by a remote network), and has + -- been screened by a gatekeeper + userProvidedVerifiedAndFailed(2), + -- number was provided by user + -- equipment (or by a remote network), and the + -- gatekeeper has determined that the + -- information is incorrect + networkProvided(3), + -- number was provided by a gatekeeper + ... + } + +Facility-UUIE ::= SEQUENCE { + protocolIdentifier ProtocolIdentifier, + alternativeAddress TransportAddress OPTIONAL, + alternativeAliasAddress SEQUENCE OF AliasAddress OPTIONAL, + conferenceID ConferenceIdentifier OPTIONAL, + reason FacilityReason, + ..., + callIdentifier CallIdentifier, + destExtraCallInfo SEQUENCE OF AliasAddress OPTIONAL, + remoteExtensionAddress AliasAddress OPTIONAL, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + conferences SEQUENCE OF ConferenceList OPTIONAL, + h245Address TransportAddress OPTIONAL, + fastStart SEQUENCE OF OCTET STRING OPTIONAL, + multipleCalls BOOLEAN, + maintainConnection BOOLEAN, + fastConnectRefused NULL OPTIONAL, + serviceControl SEQUENCE OF ServiceControlSession OPTIONAL, + circuitInfo CircuitInfo OPTIONAL, + featureSet FeatureSet OPTIONAL, + destinationInfo EndpointType OPTIONAL, + h245SecurityMode H245Security OPTIONAL +} + +ConferenceList ::= SEQUENCE { + conferenceID ConferenceIdentifier OPTIONAL, + conferenceAlias AliasAddress OPTIONAL, + nonStandardData NonStandardParameter OPTIONAL, + ... +} + +FacilityReason ::= CHOICE { + routeCallToGatekeeper NULL, -- call must use gatekeeper model + + -- gatekeeper is alternativeAddress + callForwarded NULL, + routeCallToMC NULL, + undefinedReason NULL, + ..., + conferenceListChoice NULL, + startH245 NULL, -- recipient should connect to h245Address + noH245 NULL, -- endpoint does not support H.245 + newTokens NULL, + featureSetUpdate NULL, + forwardedElements NULL, + transportedInformation NULL +} + +Progress-UUIE ::= SEQUENCE { + protocolIdentifier ProtocolIdentifier, + destinationInfo EndpointType, + h245Address TransportAddress OPTIONAL, + callIdentifier CallIdentifier, + h245SecurityMode H245Security OPTIONAL, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + fastStart SEQUENCE OF OCTET STRING OPTIONAL, + ..., + multipleCalls BOOLEAN, + maintainConnection BOOLEAN, + fastConnectRefused NULL OPTIONAL +} + +TransportAddress ::= CHOICE { + ipAddress + SEQUENCE {ip OCTET STRING(SIZE (4)), + port INTEGER(0..65535)}, + ipSourceRoute + SEQUENCE {ip OCTET STRING(SIZE (4)), + port INTEGER(0..65535), + route SEQUENCE OF OCTET STRING(SIZE (4)), + routing CHOICE {strict NULL, + loose NULL, + ...}, + ...}, + ipxAddress + SEQUENCE {node OCTET STRING(SIZE (6)), + netnum OCTET STRING(SIZE (4)), + port OCTET STRING(SIZE (2))}, + ip6Address + SEQUENCE {ip OCTET STRING(SIZE (16)), + port INTEGER(0..65535), + ...}, + netBios OCTET STRING(SIZE (16)), + nsap OCTET STRING(SIZE (1..20)), + nonStandardAddress NonStandardParameter, + ... +} + +Status-UUIE ::= SEQUENCE { + protocolIdentifier ProtocolIdentifier, + callIdentifier CallIdentifier, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + ... +} + +StatusInquiry-UUIE ::= SEQUENCE { + protocolIdentifier ProtocolIdentifier, + callIdentifier CallIdentifier, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + ... +} + +SetupAcknowledge-UUIE ::= SEQUENCE { + protocolIdentifier ProtocolIdentifier, + callIdentifier CallIdentifier, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + ... +} + +Notify-UUIE ::= SEQUENCE { + protocolIdentifier ProtocolIdentifier, + callIdentifier CallIdentifier, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + ..., + connectedAddress SEQUENCE OF AliasAddress OPTIONAL, + presentationIndicator PresentationIndicator OPTIONAL, + screeningIndicator ScreeningIndicator OPTIONAL, + destinationInfo EndpointType OPTIONAL, + displayName SEQUENCE OF DisplayName OPTIONAL +} + +-- Beginning of common message elements section +EndpointType ::= SEQUENCE { + nonStandardData NonStandardParameter OPTIONAL, + vendor VendorIdentifier OPTIONAL, + gatekeeper GatekeeperInfo OPTIONAL, + gateway GatewayInfo OPTIONAL, + mcu McuInfo OPTIONAL, -- mc must be set as well + terminal TerminalInfo OPTIONAL, + mc BOOLEAN, -- shall not be set by itself + undefinedNode BOOLEAN, + ..., + set BIT STRING(SIZE (32)) OPTIONAL, + -- shall not be used with mc, gatekeeper + -- code points for the various SET devices + -- are defined in the respective SET Annexes + supportedTunnelledProtocols SEQUENCE OF TunnelledProtocol OPTIONAL + -- list of supported tunnelled protocols +} + +GatewayInfo ::= SEQUENCE { + protocol SEQUENCE OF SupportedProtocols OPTIONAL, + nonStandardData NonStandardParameter OPTIONAL, + ... +} + +SupportedProtocols ::= CHOICE { + nonStandardData NonStandardParameter, + h310 H310Caps, + h320 H320Caps, + h321 H321Caps, + h322 H322Caps, + h323 H323Caps, + h324 H324Caps, + voice VoiceCaps, + t120-only T120OnlyCaps, + ..., + nonStandardProtocol NonStandardProtocol, + t38FaxAnnexbOnly T38FaxAnnexbOnlyCaps, + sip SIPCaps +} + +H310Caps ::= SEQUENCE { + nonStandardData NonStandardParameter OPTIONAL, + ..., + dataRatesSupported SEQUENCE OF DataRate OPTIONAL, + supportedPrefixes SEQUENCE OF SupportedPrefix +} + +H320Caps ::= SEQUENCE { + nonStandardData NonStandardParameter OPTIONAL, + ..., + dataRatesSupported SEQUENCE OF DataRate OPTIONAL, + supportedPrefixes SEQUENCE OF SupportedPrefix +} + +H321Caps ::= SEQUENCE { + nonStandardData NonStandardParameter OPTIONAL, + ..., + dataRatesSupported SEQUENCE OF DataRate OPTIONAL, + supportedPrefixes SEQUENCE OF SupportedPrefix +} + +H322Caps ::= SEQUENCE { + nonStandardData NonStandardParameter OPTIONAL, + ..., + dataRatesSupported SEQUENCE OF DataRate OPTIONAL, + supportedPrefixes SEQUENCE OF SupportedPrefix +} + +H323Caps ::= SEQUENCE { + nonStandardData NonStandardParameter OPTIONAL, + ..., + dataRatesSupported SEQUENCE OF DataRate OPTIONAL, + supportedPrefixes SEQUENCE OF SupportedPrefix +} + +H324Caps ::= SEQUENCE { + nonStandardData NonStandardParameter OPTIONAL, + ..., + dataRatesSupported SEQUENCE OF DataRate OPTIONAL, + supportedPrefixes SEQUENCE OF SupportedPrefix +} + +VoiceCaps ::= SEQUENCE { + nonStandardData NonStandardParameter OPTIONAL, + ..., + dataRatesSupported SEQUENCE OF DataRate OPTIONAL, + supportedPrefixes SEQUENCE OF SupportedPrefix +} + +T120OnlyCaps ::= SEQUENCE { + nonStandardData NonStandardParameter OPTIONAL, + ..., + dataRatesSupported SEQUENCE OF DataRate OPTIONAL, + supportedPrefixes SEQUENCE OF SupportedPrefix +} + +NonStandardProtocol ::= SEQUENCE { + nonStandardData NonStandardParameter OPTIONAL, + dataRatesSupported SEQUENCE OF DataRate OPTIONAL, + supportedPrefixes SEQUENCE OF SupportedPrefix, + ... +} + +T38FaxAnnexbOnlyCaps ::= SEQUENCE { + nonStandardData NonStandardParameter OPTIONAL, + dataRatesSupported SEQUENCE OF DataRate OPTIONAL, + supportedPrefixes SEQUENCE OF SupportedPrefix, + t38FaxProtocol DataProtocolCapability, + t38FaxProfile T38FaxProfile, + ... +} + +SIPCaps ::= SEQUENCE { + nonStandardData NonStandardParameter OPTIONAL, + dataRatesSupported SEQUENCE OF DataRate OPTIONAL, + supportedPrefixes SEQUENCE OF SupportedPrefix OPTIONAL, + ... +} + +McuInfo ::= SEQUENCE { + nonStandardData NonStandardParameter OPTIONAL, + ..., + protocol SEQUENCE OF SupportedProtocols OPTIONAL +} + +TerminalInfo ::= SEQUENCE {nonStandardData NonStandardParameter OPTIONAL, + ... +} + +GatekeeperInfo ::= SEQUENCE { + nonStandardData NonStandardParameter OPTIONAL, + ... +} + +VendorIdentifier ::= SEQUENCE { + vendor H221NonStandard, + productId OCTET STRING(SIZE (1..256)) OPTIONAL, -- per vendor + versionId OCTET STRING(SIZE (1..256)) OPTIONAL, -- per product + ..., + enterpriseNumber OBJECT IDENTIFIER OPTIONAL +} + +H221NonStandard ::= SEQUENCE { + t35CountryCode INTEGER(0..255), + t35Extension INTEGER(0..255), + manufacturerCode INTEGER(0..65535), + ... +} + +TunnelledProtocol ::= SEQUENCE { + id + CHOICE {tunnelledProtocolObjectID OBJECT IDENTIFIER, + tunnelledProtocolAlternateID TunnelledProtocolAlternateIdentifier, + ...}, + subIdentifier IA5String(SIZE (1..64)) OPTIONAL, + ... +} + +TunnelledProtocolAlternateIdentifier ::= SEQUENCE { + protocolType IA5String(SIZE (1..64)), + protocolVariant IA5String(SIZE (1..64)) OPTIONAL, + ... +} + +NonStandardParameter ::= SEQUENCE { + nonStandardIdentifier NonStandardIdentifier, + data OCTET STRING +} + +NonStandardIdentifier ::= CHOICE { + object OBJECT IDENTIFIER, + h221NonStandard H221NonStandard, + ... +} + +AliasAddress ::= CHOICE { + dialledDigits IA5String(SIZE (1..128))(FROM ("0123456789#*,")), + h323-ID BMPString(SIZE (1..256)), -- Basic ISO/IEC 10646 (Unicode) + ..., + url-ID IA5String(SIZE (1..512)), -- URL style address + transportID TransportAddress, + email-ID IA5String(SIZE (1..512)), -- rfc822-compliant email address + partyNumber PartyNumber, + mobileUIM MobileUIM, + isupNumber IsupNumber +} + +AddressPattern ::= CHOICE { + wildcard AliasAddress, + range SEQUENCE {startOfRange PartyNumber, + endOfRange PartyNumber}, + ... +} + +PartyNumber ::= CHOICE { + e164Number PublicPartyNumber, + -- the numbering plan is according to + -- ITUT Recs E.163 and E.164. + dataPartyNumber NumberDigits, + -- not used, value reserved. + telexPartyNumber NumberDigits, + -- not used, value reserved. + privateNumber PrivatePartyNumber, + -- the numbering plan is according to + -- ISO/IEC 11571. + nationalStandardPartyNumber NumberDigits, + -- not used, value reserved. + ... +} + +PublicPartyNumber ::= SEQUENCE { + publicTypeOfNumber PublicTypeOfNumber, + publicNumberDigits NumberDigits +} + +PrivatePartyNumber ::= SEQUENCE { + privateTypeOfNumber PrivateTypeOfNumber, + privateNumberDigits NumberDigits +} + +NumberDigits ::= IA5String(SIZE (1..128))(FROM ("0123456789#*,")) + +DisplayName ::= SEQUENCE { + language IA5String OPTIONAL, -- RFC4646 language tag + name BMPString(SIZE (1..80)) +} + +PublicTypeOfNumber ::= CHOICE { + unknown NULL, + -- if used number digits carry prefix + -- indicating type + -- of number according to national + -- recommendations. + internationalNumber NULL, + nationalNumber NULL, + networkSpecificNumber NULL, + -- not used, value reserved + subscriberNumber NULL, + abbreviatedNumber NULL, + -- valid only for called party number at + -- the outgoing access, network + -- substitutes + -- appropriate number. + ... +} + +PrivateTypeOfNumber ::= CHOICE { + unknown NULL, + level2RegionalNumber NULL, + level1RegionalNumber NULL, + pISNSpecificNumber NULL, + localNumber NULL, + abbreviatedNumber NULL, + ... +} + +MobileUIM ::= CHOICE { + ansi-41-uim ANSI-41-UIM, -- Americas standards Wireless Networks + gsm-uim GSM-UIM, -- European standards Wireless Networks + ... +} + +TBCD-STRING ::= IA5String(FROM ("0123456789#*abc")) + +ANSI-41-UIM ::= SEQUENCE { + imsi TBCD-STRING(SIZE (3..16)) OPTIONAL, + min TBCD-STRING(SIZE (3..16)) OPTIONAL, + mdn TBCD-STRING(SIZE (3..16)) OPTIONAL, + msisdn TBCD-STRING(SIZE (3..16)) OPTIONAL, + esn TBCD-STRING(SIZE (16)) OPTIONAL, + mscid TBCD-STRING(SIZE (3..16)) OPTIONAL, + system-id + CHOICE {sid TBCD-STRING(SIZE (1..4)), + mid TBCD-STRING(SIZE (1..4)), + ...}, + systemMyTypeCode OCTET STRING(SIZE (1)) OPTIONAL, + systemAccessType OCTET STRING(SIZE (1)) OPTIONAL, + qualificationInformationCode OCTET STRING(SIZE (1)) OPTIONAL, + sesn TBCD-STRING(SIZE (16)) OPTIONAL, + soc TBCD-STRING(SIZE (3..16)) OPTIONAL, + ... + -- IMSI refers to International Mobile Station Identification + -- MIN refers to Mobile Identification Number + -- MDN refers to Mobile Directory Number + -- MSISDN refers to Mobile Station ISDN number + -- ESN Refers to Electronic Serial Number + -- MSCID refers to Mobile Switching Center number + Market ID or System ID + -- SID refers to System Identification and MID refers to Market + -- Identification + -- SystemMyTypeCode refers to vendor identification number + -- SystemAccessType refers to the system access type like power down + -- registration or call + -- origination or Short Message response etc. + -- Qualification Information Code refers to the validity + -- SESN Refers to SIM Electronic Serial Number for Security purposes of + -- User Identification + -- SOC refers to System Operator Code +} + +GSM-UIM ::= SEQUENCE { + imsi TBCD-STRING(SIZE (3..16)) OPTIONAL, + tmsi OCTET STRING(SIZE (1..4)) OPTIONAL, + msisdn TBCD-STRING(SIZE (3..16)) OPTIONAL, + imei TBCD-STRING(SIZE (15..16)) OPTIONAL, + hplmn TBCD-STRING(SIZE (1..4)) OPTIONAL, + vplmn TBCD-STRING(SIZE (1..4)) OPTIONAL, + -- IMSI refers to International Mobile Station Identification + -- MSISDN refers to Mobile Station ISDN number + -- IMEI Refers to International Mobile Equipment Identification + -- VPLMN or HPLMN refers to Visiting or Home Public Land Mobile Network + -- number + ... +} + +IsupNumber ::= CHOICE { + e164Number IsupPublicPartyNumber, + -- the numbering plan is according to + -- ITUT Recs E.163 and E.164. + dataPartyNumber IsupDigits, -- not used, value reserved. + telexPartyNumber IsupDigits, -- not used, value reserved. + privateNumber IsupPrivatePartyNumber, + -- the numbering plan is according to + -- ISO/IEC 11571. + nationalStandardPartyNumber IsupDigits, -- not used, value reserved. + ... +} + +IsupPublicPartyNumber ::= SEQUENCE { + natureOfAddress NatureOfAddress, + address IsupDigits, + ... +} + +IsupPrivatePartyNumber ::= SEQUENCE { + privateTypeOfNumber PrivateTypeOfNumber, + address IsupDigits, + ... +} + +NatureOfAddress ::= CHOICE { + unknown NULL, + subscriberNumber NULL, + nationalNumber NULL, + internationalNumber NULL, + networkSpecificNumber NULL, + routingNumberNationalFormat NULL, + routingNumberNetworkSpecificFormat NULL, + routingNumberWithCalledDirectoryNumber NULL, + ... +} + +IsupDigits ::= IA5String(SIZE (1..128))(FROM ("0123456789ABCDE")) + +ExtendedAliasAddress ::= SEQUENCE { + address AliasAddress, + presentationIndicator PresentationIndicator OPTIONAL, + screeningIndicator ScreeningIndicator OPTIONAL, + ... +} + +Endpoint ::= SEQUENCE { + nonStandardData NonStandardParameter OPTIONAL, + aliasAddress SEQUENCE OF AliasAddress OPTIONAL, + callSignalAddress SEQUENCE OF TransportAddress OPTIONAL, + rasAddress SEQUENCE OF TransportAddress OPTIONAL, + endpointType EndpointType OPTIONAL, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + priority INTEGER(0..127) OPTIONAL, + remoteExtensionAddress SEQUENCE OF AliasAddress OPTIONAL, + destExtraCallInfo SEQUENCE OF AliasAddress OPTIONAL, + ..., + alternateTransportAddresses AlternateTransportAddresses OPTIONAL, + circuitInfo CircuitInfo OPTIONAL, + featureSet FeatureSet OPTIONAL +} + +AlternateTransportAddresses ::= SEQUENCE { + annexE SEQUENCE OF TransportAddress OPTIONAL, + ..., + sctp SEQUENCE OF TransportAddress OPTIONAL +} + +UseSpecifiedTransport ::= CHOICE {tcp NULL, + annexE NULL, + ..., + sctp NULL +} + +AlternateGK ::= SEQUENCE { + rasAddress TransportAddress, + gatekeeperIdentifier GatekeeperIdentifier OPTIONAL, + needToRegister BOOLEAN, + priority INTEGER(0..127), + ... +} + +AltGKInfo ::= SEQUENCE { + alternateGatekeeper SEQUENCE OF AlternateGK, + altGKisPermanent BOOLEAN, + ... +} + +SecurityServiceMode ::= CHOICE { + nonStandard NonStandardParameter, + none NULL, + default NULL, + ... -- can be extended with other specific modes +} + +SecurityCapabilities ::= SEQUENCE { + nonStandard NonStandardParameter OPTIONAL, + encryption SecurityServiceMode, + authenticaton SecurityServiceMode, + integrity SecurityServiceMode, + ... +} + +SecurityErrors ::= CHOICE { + securityWrongSyncTime NULL, -- either time server + + -- problem or network delay + securityReplay NULL, -- replay attack encountered + securityWrongGeneralID NULL, -- wrong general ID + securityWrongSendersID NULL, -- wrong senders ID + securityIntegrityFailed NULL, -- integrity check failed + securityWrongOID NULL, -- wrong token OIDs or crypto alg + + -- OIDs + securityDHmismatch NULL, -- mismatch of DH parameters + securityCertificateExpired NULL, -- certificate has expired + securityCertificateDateInvalid NULL, -- certificate is not yet valid + securityCertificateRevoked NULL, -- certificate was found revoked + securityCertificateNotReadable NULL, -- decoding error + securityCertificateSignatureInvalid NULL, -- wrong signature in the + + -- certificate + securityCertificateMissing NULL, -- no certificate available + securityCertificateIncomplete NULL, -- missing expected certificate + + -- extensions + securityUnsupportedCertificateAlgOID NULL, -- crypto algs not understood + securityUnknownCA NULL, -- CA/root certificate could not + + -- be found + ... +} + +SecurityErrors2 ::= CHOICE { + securityWrongSyncTime NULL, -- either time server problem or network + + -- delay + securityReplay NULL, -- replay attack encountered + securityWrongGeneralID NULL, -- wrong general ID + securityWrongSendersID NULL, -- wrong senders ID + securityIntegrityFailed NULL, -- integrity check failed + securityWrongOID NULL, -- wrong token OIDs or crypto alg OIDs + ... +} + +H245Security ::= CHOICE { + nonStandard NonStandardParameter, + noSecurity NULL, + tls SecurityCapabilities, + ipsec SecurityCapabilities, + ... +} + +QseriesOptions ::= SEQUENCE { + q932Full BOOLEAN, -- if true, indicates full support for Q.932 + q951Full BOOLEAN, -- if true, indicates full support for Q.951 + q952Full BOOLEAN, -- if true, indicates full support for Q.952 + q953Full BOOLEAN, -- if true, indicates full support for Q.953 + q955Full BOOLEAN, -- if true, indicates full support for Q.955 + q956Full BOOLEAN, -- if true, indicates full support for Q.956 + q957Full BOOLEAN, -- if true, indicates full support for Q.957 + q954Info Q954Details, + ... +} + +Q954Details ::= SEQUENCE { + conferenceCalling BOOLEAN, + threePartyService BOOLEAN, + ... +} + +GloballyUniqueID ::= OCTET STRING(SIZE (16)) + +ConferenceIdentifier ::= GloballyUniqueID + +RequestSeqNum ::= INTEGER(1..65535) + +GatekeeperIdentifier ::= BMPString(SIZE (1..128)) + +BandWidth ::= INTEGER(0..4294967295) -- in 100s of bits + + +CallReferenceValue ::= INTEGER(0..65535) + +EndpointIdentifier ::= BMPString(SIZE (1..128)) + +ProtocolIdentifier ::= OBJECT IDENTIFIER + +TimeToLive ::= INTEGER(1..4294967295) -- in seconds + + +H248PackagesDescriptor ::= OCTET STRING -- This octet string contains ASN.1 + +-- PER encoded H.248 +-- PackagesDescriptor +H248SignalsDescriptor ::= OCTET STRING -- This octet string contains + +-- ASN.1 PER encoded H.248 +-- SignalsDescriptor. +FeatureDescriptor ::= + GenericData + +CallIdentifier ::= SEQUENCE {guid GloballyUniqueID, + ... +} + +EncryptIntAlg ::= + CHOICE { -- core encryption algorithms for RAS message integrity + nonStandard NonStandardParameter, + isoAlgorithm OBJECT IDENTIFIER, -- defined in ISO/IEC 9979 + ... +} + +NonIsoIntegrityMechanism ::= + CHOICE { -- HMAC mechanism used, no truncation, tagging may be necessary! + hMAC-MD5 NULL, + hMAC-iso10118-2-s EncryptIntAlg, -- according to ISO/IEC 10118-2 using + + -- EncryptIntAlg as core block + -- encryption algorithm (short MAC) + hMAC-iso10118-2-l EncryptIntAlg, -- according to ISO/IEC 10118-2 using + + -- EncryptIntAlg as core block + -- encryption algorithm (long MAC) + hMAC-iso10118-3 OBJECT IDENTIFIER, -- according to ISO/IEC 10118-3 using + + -- OID as hash function (OID is + -- SHA-1, + -- RIPE-MD160, + -- RIPE-MD128) + ... +} + +IntegrityMechanism ::= CHOICE { -- for RAS message integrity + nonStandard NonStandardParameter, + digSig NULL, -- indicates to apply a digital signature + iso9797 OBJECT IDENTIFIER, -- according to ISO/IEC 9797 using OID as + + -- core encryption algorithm (X-CBC MAC) + nonIsoIM NonIsoIntegrityMechanism, + ... +} + +ICV ::= SEQUENCE { + algorithmOID OBJECT IDENTIFIER, -- the algorithm used to compute the + + -- signature + icv BIT STRING-- the computed cryptographic -- + -- integrity check value or signature +} + +FastStartToken ::= + ClearToken + (WITH COMPONENTS { + ..., + timeStamp PRESENT, + dhkey PRESENT, + generalID PRESENT + + -- set to "alias" --}) + +EncodedFastStartToken ::= TYPE-IDENTIFIER.&Type(FastStartToken) + +CryptoH323Token ::= CHOICE { + cryptoEPPwdHash + SEQUENCE {alias AliasAddress, -- alias of entity generating hash-- + timeStamp TimeStamp, -- timestamp used in hash-- + token + HASHED{EncodedPwdCertToken-- generalID set to -- + -- "alias" -- }}, + cryptoGKPwdHash + SEQUENCE {gatekeeperId GatekeeperIdentifier, -- GatekeeperID of GK generating -- + -- hash + timeStamp TimeStamp, -- timestamp used in hash-- + token + HASHED{EncodedPwdCertToken-- generalID set to -- + -- Gatekeeperid -- }}, + cryptoEPPwdEncr + ENCRYPTED{EncodedPwdCertToken-- generalID set to -- + -- Gatekeeperid -- }, + cryptoGKPwdEncr + ENCRYPTED{EncodedPwdCertToken-- generalID set to -- + -- Gatekeeperid -- }, + cryptoEPCert + SIGNED{EncodedPwdCertToken-- generalID set to -- + -- Gatekeeperid -- }, + cryptoGKCert SIGNED{EncodedPwdCertToken-- generalID set to alias -- }, + cryptoFastStart SIGNED{EncodedFastStartToken}, + nestedcryptoToken CryptoToken, + ... +} + +DataRate ::= SEQUENCE { + nonStandardData NonStandardParameter OPTIONAL, + channelRate BandWidth, + channelMultiplier INTEGER(1..256) OPTIONAL, + ... +} + +CallLinkage ::= SEQUENCE { + globalCallId GloballyUniqueID OPTIONAL, + threadId GloballyUniqueID OPTIONAL, + ... +} + +SupportedPrefix ::= SEQUENCE { + nonStandardData NonStandardParameter OPTIONAL, + prefix AliasAddress, + ... +} + +CapacityReportingCapability ::= SEQUENCE {canReportCallCapacity BOOLEAN, + ... +} + +CapacityReportingSpecification ::= SEQUENCE { + when SEQUENCE {callStart NULL OPTIONAL, + callEnd NULL OPTIONAL, + ...}, + ... +} + +CallCapacity ::= SEQUENCE { + maximumCallCapacity CallCapacityInfo OPTIONAL, + currentCallCapacity CallCapacityInfo OPTIONAL, + ... +} + +CallCapacityInfo ::= SEQUENCE { + voiceGwCallsAvailable SEQUENCE OF CallsAvailable OPTIONAL, + h310GwCallsAvailable SEQUENCE OF CallsAvailable OPTIONAL, + h320GwCallsAvailable SEQUENCE OF CallsAvailable OPTIONAL, + h321GwCallsAvailable SEQUENCE OF CallsAvailable OPTIONAL, + h322GwCallsAvailable SEQUENCE OF CallsAvailable OPTIONAL, + h323GwCallsAvailable SEQUENCE OF CallsAvailable OPTIONAL, + h324GwCallsAvailable SEQUENCE OF CallsAvailable OPTIONAL, + t120OnlyGwCallsAvailable SEQUENCE OF CallsAvailable OPTIONAL, + t38FaxAnnexbOnlyGwCallsAvailable SEQUENCE OF CallsAvailable OPTIONAL, + terminalCallsAvailable SEQUENCE OF CallsAvailable OPTIONAL, + mcuCallsAvailable SEQUENCE OF CallsAvailable OPTIONAL, + ..., + sipGwCallsAvailable SEQUENCE OF CallsAvailable OPTIONAL +} + +CallsAvailable ::= SEQUENCE { + calls INTEGER(0..4294967295), + group IA5String(SIZE (1..128)) OPTIONAL, + ..., + carrier CarrierInfo OPTIONAL +} + +CircuitInfo ::= SEQUENCE { + sourceCircuitID CircuitIdentifier OPTIONAL, + destinationCircuitID CircuitIdentifier OPTIONAL, + genericData SEQUENCE OF GenericData OPTIONAL, + ... +} + +CircuitIdentifier ::= SEQUENCE { + cic CicInfo OPTIONAL, + group GroupID OPTIONAL, + ..., + carrier CarrierInfo OPTIONAL +} + +CicInfo ::= SEQUENCE { + cic SEQUENCE OF OCTET STRING(SIZE (2..4)), + pointCode OCTET STRING(SIZE (2..5)), + ... +} + +GroupID ::= SEQUENCE { + member SEQUENCE OF INTEGER(0..65535) OPTIONAL, + group IA5String(SIZE (1..128)), + ... +} + +CarrierInfo ::= SEQUENCE { + carrierIdentificationCode OCTET STRING(SIZE (3..4)) OPTIONAL, + carrierName IA5String(SIZE (1..128)) OPTIONAL, + ... +} + +ServiceControlDescriptor ::= CHOICE { + url IA5String(SIZE (0..512)), -- indicates a URL- + + -- referenced + -- protocol/resource + signal H248SignalsDescriptor, + nonStandard NonStandardParameter, + callCreditServiceControl CallCreditServiceControl, + ... +} + +ServiceControlSession ::= SEQUENCE { + sessionId INTEGER(0..255), + contents ServiceControlDescriptor OPTIONAL, + reason CHOICE {open NULL, + refresh NULL, + close NULL, + ...}, + ... +} + +RasUsageInfoTypes ::= SEQUENCE { + nonStandardUsageTypes SEQUENCE OF NonStandardParameter, + startTime NULL OPTIONAL, + endTime NULL OPTIONAL, + terminationCause NULL OPTIONAL, + ... +} + +RasUsageSpecification ::= SEQUENCE { + when + SEQUENCE {start NULL OPTIONAL, + end NULL OPTIONAL, + inIrr NULL OPTIONAL, + ...}, + callStartingPoint + SEQUENCE {alerting NULL OPTIONAL, + connect NULL OPTIONAL, + ...} OPTIONAL, + required RasUsageInfoTypes, + ... +} + +RasUsageInformation ::= SEQUENCE { + nonStandardUsageFields SEQUENCE OF NonStandardParameter, + alertingTime TimeStamp OPTIONAL, + connectTime TimeStamp OPTIONAL, + endTime TimeStamp OPTIONAL, + ... +} + +CallTerminationCause ::= CHOICE { + releaseCompleteReason ReleaseCompleteReason, + releaseCompleteCauseIE OCTET STRING(SIZE (2..32)), + ... +} + +BandwidthDetails ::= SEQUENCE { + sender BOOLEAN, -- TRUE=sender, FALSE=receiver + multicast BOOLEAN, -- TRUE if stream is multicast + bandwidth BandWidth, -- Bandwidth used for stream + rtcpAddresses TransportChannelInfo, -- RTCP addresses for media stream + ... +} + +CallCreditCapability ::= SEQUENCE { + canDisplayAmountString BOOLEAN OPTIONAL, + canEnforceDurationLimit BOOLEAN OPTIONAL, + ... +} + +CallCreditServiceControl ::= SEQUENCE { + amountString BMPString(SIZE (1..512)) OPTIONAL, -- (Unicode) + billingMode CHOICE {credit NULL, + debit NULL, + ...} OPTIONAL, + callDurationLimit INTEGER(1..4294967295) OPTIONAL, -- in seconds + enforceCallDurationLimit BOOLEAN OPTIONAL, + callStartingPoint CHOICE {alerting NULL, + connect NULL, + ...} OPTIONAL, + ... +} + +GenericData ::= SEQUENCE { + id GenericIdentifier, + parameters SEQUENCE (SIZE (1..512)) OF EnumeratedParameter OPTIONAL, + ... +} + +GenericIdentifier ::= CHOICE { + standard INTEGER(0..16383, ...), + oid OBJECT IDENTIFIER, + nonStandard GloballyUniqueID, + ... +} + +EnumeratedParameter ::= SEQUENCE { + id GenericIdentifier, + content Content OPTIONAL, + ... +} + +Content ::= CHOICE { + raw OCTET STRING, + text IA5String, + unicode BMPString, + bool BOOLEAN, + number8 INTEGER(0..255), + number16 INTEGER(0..65535), + number32 INTEGER(0..4294967295), + id GenericIdentifier, + alias AliasAddress, + transport TransportAddress, + compound SEQUENCE (SIZE (1..512)) OF EnumeratedParameter, + nested SEQUENCE (SIZE (1..16)) OF GenericData, + ... +} + +FeatureSet ::= SEQUENCE { + replacementFeatureSet BOOLEAN, + neededFeatures SEQUENCE OF FeatureDescriptor OPTIONAL, + desiredFeatures SEQUENCE OF FeatureDescriptor OPTIONAL, + supportedFeatures SEQUENCE OF FeatureDescriptor OPTIONAL, + ... +} + +TransportChannelInfo ::= SEQUENCE { + sendAddress TransportAddress OPTIONAL, + recvAddress TransportAddress OPTIONAL, + ... +} + +RTPSession ::= SEQUENCE { + rtpAddress TransportChannelInfo, + rtcpAddress TransportChannelInfo, + cname PrintableString, + ssrc INTEGER(1..4294967295), + sessionId INTEGER(1..255), + associatedSessionIds SEQUENCE OF INTEGER(1..255), + ..., + multicast NULL OPTIONAL, + bandwidth BandWidth OPTIONAL +} + +RehomingModel ::= CHOICE {gatekeeperBased NULL, + endpointBased NULL +} + +RasMessage ::= CHOICE { + gatekeeperRequest GatekeeperRequest, + gatekeeperConfirm GatekeeperConfirm, + gatekeeperReject GatekeeperReject, + registrationRequest RegistrationRequest, + registrationConfirm RegistrationConfirm, + registrationReject RegistrationReject, + unregistrationRequest UnregistrationRequest, + unregistrationConfirm UnregistrationConfirm, + unregistrationReject UnregistrationReject, + admissionRequest AdmissionRequest, + admissionConfirm AdmissionConfirm, + admissionReject AdmissionReject, + bandwidthRequest BandwidthRequest, + bandwidthConfirm BandwidthConfirm, + bandwidthReject BandwidthReject, + disengageRequest DisengageRequest, + disengageConfirm DisengageConfirm, + disengageReject DisengageReject, + locationRequest LocationRequest, + locationConfirm LocationConfirm, + locationReject LocationReject, + infoRequest InfoRequest, + infoRequestResponse InfoRequestResponse, + nonStandardMessage NonStandardMessage, + unknownMessageResponse UnknownMessageResponse, + ..., + requestInProgress RequestInProgress, + resourcesAvailableIndicate ResourcesAvailableIndicate, + resourcesAvailableConfirm ResourcesAvailableConfirm, + infoRequestAck InfoRequestAck, + infoRequestNak InfoRequestNak, + serviceControlIndication ServiceControlIndication, + serviceControlResponse ServiceControlResponse, + admissionConfirmSequence SEQUENCE OF AdmissionConfirm +} + +GatekeeperRequest ::= SEQUENCE --(GRQ) + { + requestSeqNum RequestSeqNum, + protocolIdentifier ProtocolIdentifier, + nonStandardData NonStandardParameter OPTIONAL, + rasAddress TransportAddress, + endpointType EndpointType, + gatekeeperIdentifier GatekeeperIdentifier OPTIONAL, + callServices QseriesOptions OPTIONAL, + endpointAlias SEQUENCE OF AliasAddress OPTIONAL, + ..., + alternateEndpoints SEQUENCE OF Endpoint OPTIONAL, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + authenticationCapability SEQUENCE OF AuthenticationMechanism OPTIONAL, + algorithmOIDs SEQUENCE OF OBJECT IDENTIFIER OPTIONAL, + integrity SEQUENCE OF IntegrityMechanism OPTIONAL, + integrityCheckValue ICV OPTIONAL, + supportsAltGK NULL OPTIONAL, + featureSet FeatureSet OPTIONAL, + genericData SEQUENCE OF GenericData OPTIONAL, + supportsAssignedGK BOOLEAN, + assignedGatekeeper AlternateGK OPTIONAL +} + +GatekeeperConfirm ::= SEQUENCE --(GCF) + { + requestSeqNum RequestSeqNum, + protocolIdentifier ProtocolIdentifier, + nonStandardData NonStandardParameter OPTIONAL, + gatekeeperIdentifier GatekeeperIdentifier OPTIONAL, + rasAddress TransportAddress, + ..., + alternateGatekeeper SEQUENCE OF AlternateGK OPTIONAL, + authenticationMode AuthenticationMechanism OPTIONAL, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + algorithmOID OBJECT IDENTIFIER OPTIONAL, + integrity SEQUENCE OF IntegrityMechanism OPTIONAL, + integrityCheckValue ICV OPTIONAL, + featureSet FeatureSet OPTIONAL, + genericData SEQUENCE OF GenericData OPTIONAL, + assignedGatekeeper AlternateGK OPTIONAL, + rehomingModel RehomingModel OPTIONAL +} + +GatekeeperReject ::= SEQUENCE --(GRJ) + { + requestSeqNum RequestSeqNum, + protocolIdentifier ProtocolIdentifier, + nonStandardData NonStandardParameter OPTIONAL, + gatekeeperIdentifier GatekeeperIdentifier OPTIONAL, + rejectReason GatekeeperRejectReason, + ..., + altGKInfo AltGKInfo OPTIONAL, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + integrityCheckValue ICV OPTIONAL, + featureSet FeatureSet OPTIONAL, + genericData SEQUENCE OF GenericData OPTIONAL +} + +GatekeeperRejectReason ::= CHOICE { + resourceUnavailable NULL, + terminalExcluded NULL, -- permission failure, not a resource + + -- failure + invalidRevision NULL, + undefinedReason NULL, + ..., + securityDenial NULL, + genericDataReason NULL, + neededFeatureNotSupported NULL, + securityError SecurityErrors +} + +RegistrationRequest ::= SEQUENCE --(RRQ) + { + requestSeqNum RequestSeqNum, + protocolIdentifier ProtocolIdentifier, + nonStandardData NonStandardParameter OPTIONAL, + discoveryComplete BOOLEAN, + callSignalAddress SEQUENCE OF TransportAddress, + rasAddress SEQUENCE OF TransportAddress, + terminalType EndpointType, + terminalAlias SEQUENCE OF AliasAddress OPTIONAL, + gatekeeperIdentifier GatekeeperIdentifier OPTIONAL, + endpointVendor VendorIdentifier, + ..., + alternateEndpoints SEQUENCE OF Endpoint OPTIONAL, + timeToLive TimeToLive OPTIONAL, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + integrityCheckValue ICV OPTIONAL, + keepAlive BOOLEAN, + endpointIdentifier EndpointIdentifier OPTIONAL, + willSupplyUUIEs BOOLEAN, + maintainConnection BOOLEAN, + alternateTransportAddresses AlternateTransportAddresses OPTIONAL, + additiveRegistration NULL OPTIONAL, + terminalAliasPattern SEQUENCE OF AddressPattern OPTIONAL, + supportsAltGK NULL OPTIONAL, + usageReportingCapability RasUsageInfoTypes OPTIONAL, + multipleCalls BOOLEAN OPTIONAL, + supportedH248Packages SEQUENCE OF H248PackagesDescriptor OPTIONAL, + callCreditCapability CallCreditCapability OPTIONAL, + capacityReportingCapability CapacityReportingCapability OPTIONAL, + capacity CallCapacity OPTIONAL, + featureSet FeatureSet OPTIONAL, + genericData SEQUENCE OF GenericData OPTIONAL, + restart NULL OPTIONAL, + supportsACFSequences NULL OPTIONAL, + supportsAssignedGK BOOLEAN, + assignedGatekeeper AlternateGK OPTIONAL, + transportQOS TransportQOS OPTIONAL, + language SEQUENCE OF IA5String(SIZE (1..32)) OPTIONAL +} + +RegistrationConfirm ::= SEQUENCE --(RCF) + { + requestSeqNum RequestSeqNum, + protocolIdentifier ProtocolIdentifier, + nonStandardData NonStandardParameter OPTIONAL, + callSignalAddress SEQUENCE OF TransportAddress, + terminalAlias SEQUENCE OF AliasAddress OPTIONAL, + gatekeeperIdentifier GatekeeperIdentifier OPTIONAL, + endpointIdentifier EndpointIdentifier, + ..., + alternateGatekeeper SEQUENCE OF AlternateGK OPTIONAL, + timeToLive TimeToLive OPTIONAL, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + integrityCheckValue ICV OPTIONAL, + willRespondToIRR BOOLEAN, + preGrantedARQ + SEQUENCE {makeCall BOOLEAN, + useGKCallSignalAddressToMakeCall BOOLEAN, + answerCall BOOLEAN, + useGKCallSignalAddressToAnswer BOOLEAN, + ..., + irrFrequencyInCall INTEGER(1..65535) OPTIONAL, -- in seconds; -- + -- not present + -- if GK does + -- not want IRRs + totalBandwidthRestriction BandWidth OPTIONAL, -- total limit -- + -- for all + -- concurrent + -- calls + alternateTransportAddresses + AlternateTransportAddresses OPTIONAL, + useSpecifiedTransport UseSpecifiedTransport OPTIONAL + } OPTIONAL, + maintainConnection BOOLEAN, + serviceControl SEQUENCE OF ServiceControlSession OPTIONAL, + supportsAdditiveRegistration NULL OPTIONAL, + terminalAliasPattern SEQUENCE OF AddressPattern OPTIONAL, + supportedPrefixes SEQUENCE OF SupportedPrefix OPTIONAL, + usageSpec SEQUENCE OF RasUsageSpecification OPTIONAL, + featureServerAlias AliasAddress OPTIONAL, + capacityReportingSpec CapacityReportingSpecification OPTIONAL, + featureSet FeatureSet OPTIONAL, + genericData SEQUENCE OF GenericData OPTIONAL, + assignedGatekeeper AlternateGK OPTIONAL, + rehomingModel RehomingModel OPTIONAL, + transportQOS TransportQOS OPTIONAL +} + +RegistrationReject ::= SEQUENCE --(RRJ) + { + requestSeqNum RequestSeqNum, + protocolIdentifier ProtocolIdentifier, + nonStandardData NonStandardParameter OPTIONAL, + rejectReason RegistrationRejectReason, + gatekeeperIdentifier GatekeeperIdentifier OPTIONAL, + ..., + altGKInfo AltGKInfo OPTIONAL, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + integrityCheckValue ICV OPTIONAL, + featureSet FeatureSet OPTIONAL, + genericData SEQUENCE OF GenericData OPTIONAL, + assignedGatekeeper AlternateGK OPTIONAL +} + +RegistrationRejectReason ::= CHOICE { + discoveryRequired NULL, + invalidRevision NULL, + invalidCallSignalAddress NULL, + invalidRASAddress NULL, -- supplied address is invalid + duplicateAlias SEQUENCE OF AliasAddress, + -- alias registered to another + -- endpoint + invalidTerminalType NULL, + undefinedReason NULL, + transportNotSupported NULL, -- one or more of the transports + ..., + transportQOSNotSupported NULL, -- endpoint QoS not supported + resourceUnavailable NULL, -- gatekeeper resources exhausted + invalidAlias NULL, -- alias not consistent with + + -- gatekeeper rules + securityDenial NULL, + fullRegistrationRequired NULL, -- registration permission has + + -- expired + additiveRegistrationNotSupported NULL, + invalidTerminalAliases + SEQUENCE {terminalAlias SEQUENCE OF AliasAddress OPTIONAL, + terminalAliasPattern SEQUENCE OF AddressPattern OPTIONAL, + supportedPrefixes SEQUENCE OF SupportedPrefix OPTIONAL, + ...}, + genericDataReason NULL, + neededFeatureNotSupported NULL, + securityError SecurityErrors, + registerWithAssignedGK NULL +} + +UnregistrationRequest ::= SEQUENCE --(URQ) + { + requestSeqNum RequestSeqNum, + callSignalAddress SEQUENCE OF TransportAddress, + endpointAlias SEQUENCE OF AliasAddress OPTIONAL, + nonStandardData NonStandardParameter OPTIONAL, + endpointIdentifier EndpointIdentifier OPTIONAL, + ..., + alternateEndpoints SEQUENCE OF Endpoint OPTIONAL, + gatekeeperIdentifier GatekeeperIdentifier OPTIONAL, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + integrityCheckValue ICV OPTIONAL, + reason UnregRequestReason OPTIONAL, + endpointAliasPattern SEQUENCE OF AddressPattern OPTIONAL, + supportedPrefixes SEQUENCE OF SupportedPrefix OPTIONAL, + alternateGatekeeper SEQUENCE OF AlternateGK OPTIONAL, + genericData SEQUENCE OF GenericData OPTIONAL, + assignedGatekeeper AlternateGK OPTIONAL +} + +UnregRequestReason ::= CHOICE { + reregistrationRequired NULL, + ttlExpired NULL, + securityDenial NULL, + undefinedReason NULL, + ..., + maintenance NULL, + securityError SecurityErrors2, + registerWithAssignedGK NULL +} + +UnregistrationConfirm ::= SEQUENCE --(UCF) + { + requestSeqNum RequestSeqNum, + nonStandardData NonStandardParameter OPTIONAL, + ..., + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + integrityCheckValue ICV OPTIONAL, + genericData SEQUENCE OF GenericData OPTIONAL, + assignedGatekeeper AlternateGK OPTIONAL +} + +UnregistrationReject ::= SEQUENCE --(URJ) + { + requestSeqNum RequestSeqNum, + rejectReason UnregRejectReason, + nonStandardData NonStandardParameter OPTIONAL, + ..., + altGKInfo AltGKInfo OPTIONAL, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + integrityCheckValue ICV OPTIONAL, + genericData SEQUENCE OF GenericData OPTIONAL +} + +UnregRejectReason ::= CHOICE { + notCurrentlyRegistered NULL, + callInProgress NULL, + undefinedReason NULL, + ..., + permissionDenied NULL, -- requesting user not allowed to + + -- unregister specified user + securityDenial NULL, + securityError SecurityErrors2 +} + +AdmissionRequest ::= SEQUENCE --(ARQ) + { + requestSeqNum RequestSeqNum, + callType CallType, + callModel CallModel OPTIONAL, + endpointIdentifier EndpointIdentifier, + destinationInfo SEQUENCE OF AliasAddress OPTIONAL, + destCallSignalAddress TransportAddress OPTIONAL, + destExtraCallInfo SEQUENCE OF AliasAddress OPTIONAL, + srcInfo SEQUENCE OF AliasAddress, + srcCallSignalAddress TransportAddress OPTIONAL, + bandWidth BandWidth, + callReferenceValue CallReferenceValue, + nonStandardData NonStandardParameter OPTIONAL, + callServices QseriesOptions OPTIONAL, + conferenceID ConferenceIdentifier, + activeMC BOOLEAN, + answerCall BOOLEAN, -- answering a call + ..., + canMapAlias BOOLEAN, -- can handle alias address + callIdentifier CallIdentifier, + srcAlternatives SEQUENCE OF Endpoint OPTIONAL, + destAlternatives SEQUENCE OF Endpoint OPTIONAL, + gatekeeperIdentifier GatekeeperIdentifier OPTIONAL, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + integrityCheckValue ICV OPTIONAL, + transportQOS TransportQOS OPTIONAL, + willSupplyUUIEs BOOLEAN, + callLinkage CallLinkage OPTIONAL, + gatewayDataRate DataRate OPTIONAL, + capacity CallCapacity OPTIONAL, + circuitInfo CircuitInfo OPTIONAL, + desiredProtocols SEQUENCE OF SupportedProtocols OPTIONAL, + desiredTunnelledProtocol TunnelledProtocol OPTIONAL, + featureSet FeatureSet OPTIONAL, + genericData SEQUENCE OF GenericData OPTIONAL, + canMapSrcAlias BOOLEAN +} + +CallType ::= CHOICE { + pointToPoint NULL, -- Point-to-point + oneToN NULL, -- no interaction (FFS) + nToOne NULL, -- no interaction (FFS) + nToN NULL, -- interactive (multipoint) + ... +} + +CallModel ::= CHOICE {direct NULL, + gatekeeperRouted NULL, + ... +} + +TransportQOS ::= CHOICE { + endpointControlled NULL, + gatekeeperControlled NULL, + noControl NULL, + ..., + qOSCapabilities SEQUENCE SIZE (1..256) OF QOSCapability +} + +AdmissionConfirm ::= SEQUENCE --(ACF) + { + requestSeqNum RequestSeqNum, + bandWidth BandWidth, + callModel CallModel, + destCallSignalAddress TransportAddress, + irrFrequency INTEGER(1..65535) OPTIONAL, + nonStandardData NonStandardParameter OPTIONAL, + ..., + destinationInfo SEQUENCE OF AliasAddress OPTIONAL, + destExtraCallInfo SEQUENCE OF AliasAddress OPTIONAL, + destinationType EndpointType OPTIONAL, + remoteExtensionAddress SEQUENCE OF AliasAddress OPTIONAL, + alternateEndpoints SEQUENCE OF Endpoint OPTIONAL, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + integrityCheckValue ICV OPTIONAL, + transportQOS TransportQOS OPTIONAL, + willRespondToIRR BOOLEAN, + uuiesRequested UUIEsRequested, + language SEQUENCE OF IA5String(SIZE (1..32)) OPTIONAL, + alternateTransportAddresses AlternateTransportAddresses OPTIONAL, + useSpecifiedTransport UseSpecifiedTransport OPTIONAL, + circuitInfo CircuitInfo OPTIONAL, + usageSpec SEQUENCE OF RasUsageSpecification OPTIONAL, + supportedProtocols SEQUENCE OF SupportedProtocols OPTIONAL, + serviceControl SEQUENCE OF ServiceControlSession OPTIONAL, + multipleCalls BOOLEAN OPTIONAL, + featureSet FeatureSet OPTIONAL, + genericData SEQUENCE OF GenericData OPTIONAL, + modifiedSrcInfo SEQUENCE OF AliasAddress OPTIONAL, + assignedGatekeeper AlternateGK OPTIONAL +} + +UUIEsRequested ::= SEQUENCE { + setup BOOLEAN, + callProceeding BOOLEAN, + connect BOOLEAN, + alerting BOOLEAN, + information BOOLEAN, + releaseComplete BOOLEAN, + facility BOOLEAN, + progress BOOLEAN, + empty BOOLEAN, + ..., + status BOOLEAN, + statusInquiry BOOLEAN, + setupAcknowledge BOOLEAN, + notify BOOLEAN +} + +AdmissionReject ::= SEQUENCE --(ARJ) + { + requestSeqNum RequestSeqNum, + rejectReason AdmissionRejectReason, + nonStandardData NonStandardParameter OPTIONAL, + ..., + altGKInfo AltGKInfo OPTIONAL, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + callSignalAddress SEQUENCE OF TransportAddress OPTIONAL, + integrityCheckValue ICV OPTIONAL, + serviceControl SEQUENCE OF ServiceControlSession OPTIONAL, + featureSet FeatureSet OPTIONAL, + genericData SEQUENCE OF GenericData OPTIONAL, + assignedGatekeeper AlternateGK OPTIONAL +} + +AdmissionRejectReason ::= CHOICE { + calledPartyNotRegistered NULL, -- cannot translate address + invalidPermission NULL, -- permission has expired + requestDenied NULL, + undefinedReason NULL, + callerNotRegistered NULL, + routeCallToGatekeeper NULL, + invalidEndpointIdentifier NULL, + resourceUnavailable NULL, + ..., + securityDenial NULL, + qosControlNotSupported NULL, + incompleteAddress NULL, + aliasesInconsistent NULL, -- multiple aliases in request + + -- identify distinct people + routeCallToSCN SEQUENCE OF PartyNumber, + exceedsCallCapacity NULL, -- destination does not have the + + -- capacity for this call + collectDestination NULL, + collectPIN NULL, + genericDataReason NULL, + neededFeatureNotSupported NULL, + securityError SecurityErrors2, + securityDHmismatch NULL, -- mismatch of DH parameters + noRouteToDestination NULL, -- destination unreachable + unallocatedNumber NULL, -- destination number unassigned + registerWithAssignedGK NULL +} + +BandwidthRequest ::= SEQUENCE --(BRQ) + { + requestSeqNum RequestSeqNum, + endpointIdentifier EndpointIdentifier, + conferenceID ConferenceIdentifier, + callReferenceValue CallReferenceValue, + callType CallType OPTIONAL, + bandWidth BandWidth, + nonStandardData NonStandardParameter OPTIONAL, + ..., + callIdentifier CallIdentifier, + gatekeeperIdentifier GatekeeperIdentifier OPTIONAL, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + integrityCheckValue ICV OPTIONAL, + answeredCall BOOLEAN, + callLinkage CallLinkage OPTIONAL, + capacity CallCapacity OPTIONAL, + usageInformation RasUsageInformation OPTIONAL, + bandwidthDetails SEQUENCE OF BandwidthDetails OPTIONAL, + genericData SEQUENCE OF GenericData OPTIONAL, + transportQOS TransportQOS OPTIONAL +} + +BandwidthConfirm ::= SEQUENCE --(BCF) + { + requestSeqNum RequestSeqNum, + bandWidth BandWidth, + nonStandardData NonStandardParameter OPTIONAL, + ..., + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + integrityCheckValue ICV OPTIONAL, + capacity CallCapacity OPTIONAL, + genericData SEQUENCE OF GenericData OPTIONAL, + transportQOS TransportQOS OPTIONAL +} + +BandwidthReject ::= SEQUENCE --(BRJ) + { + requestSeqNum RequestSeqNum, + rejectReason BandRejectReason, + allowedBandWidth BandWidth, + nonStandardData NonStandardParameter OPTIONAL, + ..., + altGKInfo AltGKInfo OPTIONAL, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + integrityCheckValue ICV OPTIONAL, + genericData SEQUENCE OF GenericData OPTIONAL +} + +BandRejectReason ::= CHOICE { + notBound NULL, -- discovery permission has aged + invalidConferenceID NULL, -- possible revision + invalidPermission NULL, -- true permission violation + insufficientResources NULL, + invalidRevision NULL, + undefinedReason NULL, + ..., + securityDenial NULL, + securityError SecurityErrors2 +} + +LocationRequest ::= SEQUENCE --(LRQ) + { + requestSeqNum RequestSeqNum, + endpointIdentifier EndpointIdentifier OPTIONAL, + destinationInfo SEQUENCE OF AliasAddress, + nonStandardData NonStandardParameter OPTIONAL, + replyAddress TransportAddress, + ..., + sourceInfo SEQUENCE OF AliasAddress OPTIONAL, + canMapAlias BOOLEAN, -- can handle alias address + gatekeeperIdentifier GatekeeperIdentifier OPTIONAL, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + integrityCheckValue ICV OPTIONAL, + desiredProtocols SEQUENCE OF SupportedProtocols OPTIONAL, + desiredTunnelledProtocol TunnelledProtocol OPTIONAL, + featureSet FeatureSet OPTIONAL, + genericData SEQUENCE OF GenericData OPTIONAL, + hopCount INTEGER(1..255) OPTIONAL, + circuitInfo CircuitInfo OPTIONAL, + callIdentifier CallIdentifier OPTIONAL, + bandWidth BandWidth OPTIONAL, + sourceEndpointInfo SEQUENCE OF AliasAddress OPTIONAL, + canMapSrcAlias BOOLEAN, + language SEQUENCE OF IA5String(SIZE (1..32)) OPTIONAL +} + +LocationConfirm ::= SEQUENCE --(LCF) + { + requestSeqNum RequestSeqNum, + callSignalAddress TransportAddress, + rasAddress TransportAddress, + nonStandardData NonStandardParameter OPTIONAL, + ..., + destinationInfo SEQUENCE OF AliasAddress OPTIONAL, + destExtraCallInfo SEQUENCE OF AliasAddress OPTIONAL, + destinationType EndpointType OPTIONAL, + remoteExtensionAddress SEQUENCE OF AliasAddress OPTIONAL, + alternateEndpoints SEQUENCE OF Endpoint OPTIONAL, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + integrityCheckValue ICV OPTIONAL, + alternateTransportAddresses AlternateTransportAddresses OPTIONAL, + supportedProtocols SEQUENCE OF SupportedProtocols OPTIONAL, + multipleCalls BOOLEAN OPTIONAL, + featureSet FeatureSet OPTIONAL, + genericData SEQUENCE OF GenericData OPTIONAL, + circuitInfo CircuitInfo OPTIONAL, + serviceControl SEQUENCE OF ServiceControlSession OPTIONAL, + modifiedSrcInfo SEQUENCE OF AliasAddress OPTIONAL, + bandWidth BandWidth OPTIONAL +} + +LocationReject ::= SEQUENCE --(LRJ) + { + requestSeqNum RequestSeqNum, + rejectReason LocationRejectReason, + nonStandardData NonStandardParameter OPTIONAL, + ..., + altGKInfo AltGKInfo OPTIONAL, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + integrityCheckValue ICV OPTIONAL, + featureSet FeatureSet OPTIONAL, + genericData SEQUENCE OF GenericData OPTIONAL, + serviceControl SEQUENCE OF ServiceControlSession OPTIONAL +} + +LocationRejectReason ::= CHOICE { + notRegistered NULL, + invalidPermission NULL, -- exclusion by administrator or feature + requestDenied NULL, + undefinedReason NULL, + ..., + securityDenial NULL, + aliasesInconsistent NULL, -- multiple aliases in request + + -- identify distinct people + routeCalltoSCN SEQUENCE OF PartyNumber, + resourceUnavailable NULL, + genericDataReason NULL, + neededFeatureNotSupported NULL, + hopCountExceeded NULL, + incompleteAddress NULL, + securityError SecurityErrors2, + securityDHmismatch NULL, -- mismatch of DH parameters + noRouteToDestination NULL, -- destination unreachable + unallocatedNumber NULL -- destination number unassigned +} + +DisengageRequest ::= SEQUENCE --(DRQ) + { + requestSeqNum RequestSeqNum, + endpointIdentifier EndpointIdentifier, + conferenceID ConferenceIdentifier, + callReferenceValue CallReferenceValue, + disengageReason DisengageReason, + nonStandardData NonStandardParameter OPTIONAL, + ..., + callIdentifier CallIdentifier, + gatekeeperIdentifier GatekeeperIdentifier OPTIONAL, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + integrityCheckValue ICV OPTIONAL, + answeredCall BOOLEAN, + callLinkage CallLinkage OPTIONAL, + capacity CallCapacity OPTIONAL, + circuitInfo CircuitInfo OPTIONAL, + usageInformation RasUsageInformation OPTIONAL, + terminationCause CallTerminationCause OPTIONAL, + serviceControl SEQUENCE OF ServiceControlSession OPTIONAL, + genericData SEQUENCE OF GenericData OPTIONAL +} + +DisengageReason ::= CHOICE { + forcedDrop NULL, -- gatekeeper is forcing the drop + normalDrop NULL, -- associated with normal drop + undefinedReason NULL, + ... +} + +DisengageConfirm ::= SEQUENCE --(DCF) + { + requestSeqNum RequestSeqNum, + nonStandardData NonStandardParameter OPTIONAL, + ..., + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + integrityCheckValue ICV OPTIONAL, + capacity CallCapacity OPTIONAL, + circuitInfo CircuitInfo OPTIONAL, + usageInformation RasUsageInformation OPTIONAL, + genericData SEQUENCE OF GenericData OPTIONAL, + assignedGatekeeper AlternateGK OPTIONAL +} + +DisengageReject ::= SEQUENCE --(DRJ) + { + requestSeqNum RequestSeqNum, + rejectReason DisengageRejectReason, + nonStandardData NonStandardParameter OPTIONAL, + ..., + altGKInfo AltGKInfo OPTIONAL, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + integrityCheckValue ICV OPTIONAL, + genericData SEQUENCE OF GenericData OPTIONAL +} + +DisengageRejectReason ::= CHOICE { + notRegistered NULL, -- not registered with gatekeeper + requestToDropOther NULL, -- cannot request drop for others + ..., + securityDenial NULL, + securityError SecurityErrors2 +} + +InfoRequest ::= SEQUENCE --(IRQ) + { + requestSeqNum RequestSeqNum, + callReferenceValue CallReferenceValue, + nonStandardData NonStandardParameter OPTIONAL, + replyAddress TransportAddress OPTIONAL, + ..., + callIdentifier CallIdentifier, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + integrityCheckValue ICV OPTIONAL, + uuiesRequested UUIEsRequested OPTIONAL, + callLinkage CallLinkage OPTIONAL, + usageInfoRequested RasUsageInfoTypes OPTIONAL, + segmentedResponseSupported NULL OPTIONAL, + nextSegmentRequested INTEGER(0..65535) OPTIONAL, + capacityInfoRequested NULL OPTIONAL, + genericData SEQUENCE OF GenericData OPTIONAL, + assignedGatekeeper AlternateGK OPTIONAL +} + +InfoRequestResponse ::= SEQUENCE --(IRR) + { + nonStandardData NonStandardParameter OPTIONAL, + requestSeqNum RequestSeqNum, + endpointType EndpointType, + endpointIdentifier EndpointIdentifier, + rasAddress TransportAddress, + callSignalAddress SEQUENCE OF TransportAddress, + endpointAlias SEQUENCE OF AliasAddress OPTIONAL, + perCallInfo + SEQUENCE OF + SEQUENCE {nonStandardData NonStandardParameter OPTIONAL, + callReferenceValue CallReferenceValue, + conferenceID ConferenceIdentifier, + originator BOOLEAN OPTIONAL, + audio SEQUENCE OF RTPSession OPTIONAL, + video SEQUENCE OF RTPSession OPTIONAL, + data SEQUENCE OF TransportChannelInfo OPTIONAL, + h245 TransportChannelInfo, + callSignalling TransportChannelInfo, + callType CallType, + bandWidth BandWidth, + callModel CallModel, + ..., + callIdentifier CallIdentifier, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + substituteConfIDs SEQUENCE OF ConferenceIdentifier, + pdu + SEQUENCE OF + SEQUENCE {h323pdu H323-UU-PDU, + sent BOOLEAN -- TRUE is sent, FALSE is received + } OPTIONAL, + callLinkage CallLinkage OPTIONAL, + usageInformation RasUsageInformation OPTIONAL, + circuitInfo CircuitInfo OPTIONAL} OPTIONAL, + ..., + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + integrityCheckValue ICV OPTIONAL, + needResponse BOOLEAN, + capacity CallCapacity OPTIONAL, + irrStatus InfoRequestResponseStatus OPTIONAL, + unsolicited BOOLEAN, + genericData SEQUENCE OF GenericData OPTIONAL +} + +InfoRequestResponseStatus ::= CHOICE { + complete NULL, + incomplete NULL, + segment INTEGER(0..65535), + invalidCall NULL, + ... +} + +InfoRequestAck ::= SEQUENCE --(IACK) + { + requestSeqNum RequestSeqNum, + nonStandardData NonStandardParameter OPTIONAL, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + integrityCheckValue ICV OPTIONAL, + ... +} + +InfoRequestNak ::= SEQUENCE --(INAK) + { + requestSeqNum RequestSeqNum, + nonStandardData NonStandardParameter OPTIONAL, + nakReason InfoRequestNakReason, + altGKInfo AltGKInfo OPTIONAL, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + integrityCheckValue ICV OPTIONAL, + ... +} + +InfoRequestNakReason ::= CHOICE { + notRegistered NULL, -- not registered with gatekeeper + securityDenial NULL, + undefinedReason NULL, + ..., + securityError SecurityErrors2 +} + +NonStandardMessage ::= SEQUENCE { + requestSeqNum RequestSeqNum, + nonStandardData NonStandardParameter, + ..., + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + integrityCheckValue ICV OPTIONAL, + featureSet FeatureSet OPTIONAL, + genericData SEQUENCE OF GenericData OPTIONAL +} + +UnknownMessageResponse ::= SEQUENCE -- (XRS) + { + requestSeqNum RequestSeqNum, + ..., + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + integrityCheckValue ICV OPTIONAL, + messageNotUnderstood OCTET STRING +} + +RequestInProgress ::= SEQUENCE -- (RIP) + { + requestSeqNum RequestSeqNum, + nonStandardData NonStandardParameter OPTIONAL, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + integrityCheckValue ICV OPTIONAL, + delay INTEGER(1..65535), + ... +} + +ResourcesAvailableIndicate ::= SEQUENCE --(RAI) + { + requestSeqNum RequestSeqNum, + protocolIdentifier ProtocolIdentifier, + nonStandardData NonStandardParameter OPTIONAL, + endpointIdentifier EndpointIdentifier, + protocols SEQUENCE OF SupportedProtocols, + almostOutOfResources BOOLEAN, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + integrityCheckValue ICV OPTIONAL, + ..., + capacity CallCapacity OPTIONAL, + genericData SEQUENCE OF GenericData OPTIONAL +} + +ResourcesAvailableConfirm ::= SEQUENCE --(RAC) + { + requestSeqNum RequestSeqNum, + protocolIdentifier ProtocolIdentifier, + nonStandardData NonStandardParameter OPTIONAL, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + integrityCheckValue ICV OPTIONAL, + ..., + genericData SEQUENCE OF GenericData OPTIONAL +} + +ServiceControlIndication ::= SEQUENCE --(SCI) + { + requestSeqNum RequestSeqNum, + nonStandardData NonStandardParameter OPTIONAL, + serviceControl SEQUENCE OF ServiceControlSession, + endpointIdentifier EndpointIdentifier OPTIONAL, + callSpecific + SEQUENCE {callIdentifier CallIdentifier, + conferenceID ConferenceIdentifier, + answeredCall BOOLEAN, + ...} OPTIONAL, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + integrityCheckValue ICV OPTIONAL, + featureSet FeatureSet OPTIONAL, + genericData SEQUENCE OF GenericData OPTIONAL, + ... +} + +ServiceControlResponse ::= SEQUENCE --(SCR) + { + requestSeqNum RequestSeqNum, + result + CHOICE {started NULL, + failed NULL, + stopped NULL, + notAvailable NULL, + neededFeatureNotSupported NULL, + ...} OPTIONAL, + nonStandardData NonStandardParameter OPTIONAL, + tokens SEQUENCE OF ClearToken OPTIONAL, + cryptoTokens SEQUENCE OF CryptoH323Token OPTIONAL, + integrityCheckValue ICV OPTIONAL, + featureSet FeatureSet OPTIONAL, + genericData SEQUENCE OF GenericData OPTIONAL, + ... +} + +END -- of ASN.1 + +-- Generated by Asnp, the ASN.1 pretty-printer of France Telecom R&D + diff --git a/epan/dissectors/asn1/h225/h225.cnf b/epan/dissectors/asn1/h225/h225.cnf new file mode 100644 index 00000000..28a22f83 --- /dev/null +++ b/epan/dissectors/asn1/h225/h225.cnf @@ -0,0 +1,961 @@ +# h225.cnf +# H.225 conformation file +# Copyright 2004 Anders Broman + +#.IMPORT ../h235/h235-exp.cnf + + + + + + +#.IMPORT ../h245/h245-exp.cnf + +#---------------------------------------------------------------------------------------- +#.EXPORTS ONLY_VALS WS_DLL NO_PROT_PREFIX +H323-UU-PDU/h323-message-body +FacilityReason +GatekeeperRejectReason +UnregRequestReason +UnregRejectReason +BandRejectReason +DisengageReason +DisengageRejectReason +InfoRequestNakReason +AdmissionRejectReason +LocationRejectReason +RegistrationRejectReason + +#.MODULE_EXPORTS +RasMessage EXTERN WS_DLL +NonStandardParameter +PublicTypeOfNumber +PrivateTypeOfNumber +AliasAddress NO_PROT_PREFIX +PartyNumber +PresentationIndicator +ScreeningIndicator +CallIdentifier +ConferenceIdentifier +CircuitIdentifier +GenericIdentifier +GenericData +BandWidth +TimeToLive +TransportAddress +AlternateTransportAddresses +TransportChannelInfo +CallReferenceValue +GloballyUniqueID +TunnelledProtocol +IntegrityMechanism +ICV +CryptoH323Token +TransportQOS +FeatureSet +CircuitInfo +EndpointType +SupportedProtocols +GatekeeperIdentifier +ServiceControlSession +ReleaseCompleteReason EXTERN WS_DLL +ExtendedAliasAddress_PDU +#.END + +#.PDU +H323-UserInformation +RasMessage +ExtendedAliasAddress +#.END + +#---------------------------------------------------------------------------------------- + +#.OMIT_ASSIGNMENT +EncodedFastStartToken +FastStartToken +#.END + +#.VIRTUAL_ASSGN +FastStart Setup-UUIE/fastStart +#.SET_TYPE +Setup-UUIE/fastStart FastStart +CallProceeding-UUIE/fastStart FastStart +Connect-UUIE/fastStart FastStart +Alerting-UUIE/fastStart FastStart +Information-UUIE/fastStart FastStart +Facility-UUIE/fastStart FastStart +Progress-UUIE/fastStart FastStart + +#.VIRTUAL_ASSGN +H245Control H323-UU-PDU/h245Control +ParallelH245Control Setup-UUIE/parallelH245Control +DialedDigits AliasAddress/dialledDigits + +#.VIRTUAL_ASSGN +DestinationInfo AdmissionRequest/destinationInfo +#.SET_TYPE +AdmissionRequest/destinationInfo DestinationInfo +AdmissionConfirm/destinationInfo DestinationInfo +LocationRequest/destinationInfo DestinationInfo +LocationConfirm/destinationInfo DestinationInfo + +#.VIRTUAL_ASSGN +H245TransportAddress TransportAddress +#.SET_TYPE +Setup-UUIE/h245Address H245TransportAddress +CallProceeding-UUIE/h245Address H245TransportAddress +Connect-UUIE/h245Address H245TransportAddress +Alerting-UUIE/h245Address H245TransportAddress +Facility-UUIE/h245Address H245TransportAddress +Progress-UUIE/h245Address H245TransportAddress +#.FIELD_RENAME +H245TransportAddress/ipAddress h245IpAddress +H245TransportAddress/ipAddress/ip h245Ip +H245TransportAddress/ipAddress/port h245IpPort +H245TransportAddress/ipSourceRoute h245IpSourceRoute +H245TransportAddress/ipSourceRoute/route h245Route +H245TransportAddress/ipSourceRoute/routing h245Routing +H245TransportAddress/ipxAddress h245IpxAddress +H245TransportAddress/ipxAddress/port h245IpxPort +H245TransportAddress/ip6Address h245Ip6Address +H245TransportAddress/ip6Address/ip h245Ip6 +H245TransportAddress/ip6Address/port h245Ip6port +DisplayName/language displayName_language +Endpoint/remoteExtensionAddress/_item ep_remoteExtensionAddress_item +AdmissionConfirm/remoteExtensionAddress/_item ac_remoteExtensionAddress_item + +#.FIELD_ATTR +H245TransportAddress/ipAddress/ip ABBREV=h245Ip +H245TransportAddress/ipAddress/port ABBREV=h245IpPort +H245TransportAddress/ip6Address/ip ABBREV=h245Ip6 +H245TransportAddress/ip6Address/port ABBREV=h245Ip6port +H245TransportAddress/ipxAddress/port ABBREV=h245IpxPort +TransportAddress/ipSourceRoute/ip ABBREV=src_route_ipV4 +TransportAddress/ipSourceRoute/port ABBREV=ipV4_src_port +TransportAddress/ipAddress/ip ABBREV=ipV4 +TransportAddress/ipAddress/port ABBREV=ipV4_port +TransportAddress/ip6Address/ip ABBREV=ipV6 +TransportAddress/ip6Address/port ABBREV=ipV6_port +TransportAddress/ipxAddress/port ABBREV=ipx_port +DisplayName/language ABBREV=displayName_language +ExtendedAliasAddress/address ABBREV=extAliasAddress +Endpoint/remoteExtensionAddress/_item ABBREV=remoteExtensionAddress.item +AdmissionConfirm/remoteExtensionAddress/_item ABBREV=ac_remoteExtensionAddress_item + +#.VIRTUAL_ASSGN +Language Setup-UUIE/language +#.SET_TYPE +Connect-UUIE/language Language +Setup-UUIE/language Language +RegistrationRequest/language Language +AdmissionConfirm/language Language +LocationRequest/language Language + +#---------------------------------------------------------------------------------------- +#.TYPE_RENAME +CallCreditServiceControl/callStartingPoint CallCreditServiceControl_callStartingPoint +TunnelledProtocol/id TunnelledProtocol_id +ServiceControlSession/reason ServiceControlSession_reason +RasUsageSpecification/callStartingPoint RasUsageSpecificationcallStartingPoint +CapacityReportingSpecification/when CapacityReportingSpecification_when +RasUsageSpecification/when RasUsageSpecification_when +TransportAddress/ipAddress/ip IpV4 +#---------------------------------------------------------------------------------------- +#.FIELD_RENAME +RasUsageSpecification/callStartingPoint/alerting alerting_flg +CallCreditServiceControl/callStartingPoint/alerting alerting_flg +UseSpecifiedTransport/annexE annexE_flg + +UUIEsRequested/callProceeding callProceeding_flg + +CicInfo/cic cic_2_4 +UUIEsRequested/connect connect_bool +NonStandardIdentifier/object nsiOID +NonStandardParameter/data nsp_data +H323-UU-PDU/h323-message-body/empty empty_flg +RasUsageInfoTypes/endTime endTime_flg +UUIEsRequested/facility facility_bool +CallsAvailable/group group_IA5String +GroupID/group group_IA5String + +Setup-UUIE/hopCount hopCount_1_31 +UUIEsRequested/information information_bool +TransportAddress/ip6Address/ip ipV6 +TransportAddress/ipAddress/ip ipV4 +TransportAddress/ipSourceRoute/ip src_route_ipV4 +RTPSession/multicast multicast_flg + +UUIEsRequested/notify notify_bool +TransportAddress/ipxAddress/port ipx_port +TransportAddress/ipAddress/port ipV4_port +TransportAddress/ipSourceRoute/port ipV4_src_port +TransportAddress/ip6Address/port ipV6_port +UUIEsRequested/progress progress_bool + +Facility-UUIE/reason facilityReason +UnregistrationRequest/reason unregRequestReason +ReleaseComplete-UUIE/reason releaseCompleteReason +BandwidthReject/rejectReason bandRejectReason +UnregistrationReject/rejectReason unregRejectReason +RegistrationReject/rejectReason registrationRejectReason +LocationReject/rejectReason locationRejectReason +DisengageReject/rejectReason disengageRejectReason +GatekeeperReject/rejectReason gatekeeperRejectReason + +UUIEsRequested/releaseComplete releaseComplete_bool +UseSpecifiedTransport/sctp sctp_flg +ServiceControlSession/sessionId sessionId_0_255 +UUIEsRequested/setup setup_bool +UUIEsRequested/setupAcknowledge setupAcknowledge_bool +Setup-UUIE/sourceInfo setup-UUIE_sourceInfo + +UUIEsRequested/status status_bool +UUIEsRequested/statusInquiry statusInquiry_bool +RasUsageInfoTypes/terminationCause terminationCause_flg +CapacityReportingSpecification/when capacityReportingSpecification_when +UUIEsRequested/alerting alerting_bool + +LocationConfirm/callSignalAddress locationConfirm_callSignalAddress + +RasUsageSpecification/callStartingPoint/connect connect_flg +CallCreditServiceControl/callStartingPoint/connect connect_flg + +Alerting-UUIE/destinationInfo uUIE_destinationInfo +CallProceeding-UUIE/destinationInfo uUIE_destinationInfo +Connect-UUIE/destinationInfo uUIE_destinationInfo +Facility-UUIE/destinationInfo uUIE_destinationInfo +Progress-UUIE/destinationInfo uUIE_destinationInfo + +TunnelledProtocol/id tunnelledProtocol_id +SecurityCapabilities/integrity securityCapabilities_integrity + +GenericIdentifier/nonStandard genericIdentifier_nonStandard +AlternateGK/rasAddress alternateGK_rasAddress +GatekeeperRequest/rasAddress gatekeeperRequest_rasAddress +GatekeeperConfirm/rasAddress gatekeeperConfirm_rasAddress +LocationConfirm/rasAddress locationConfirm_rasAddress +InfoRequestResponse/rasAddress infoRequestResponse_rasAddress + + +Setup-UUIE/remoteExtensionAddress uUIE_remoteExtensionAddress +Facility-UUIE/remoteExtensionAddress uUIE_remoteExtensionAddress + +VendorIdentifier/vendor vendorIdentifier_vendor + +RasUsageSpecification/callStartingPoint ras_callStartingPoint + +ReleaseCompleteReason/securityError rLC_securityError +GatekeeperRejectReason/securityError gkRej_securityError +RegistrationRejectReason/securityError reg_securityError + +CallIdentifier/guid guid + +ExtendedAliasAddress/address extAliasAddress + +IsupNumber/e164Number isupE164Number +IsupNumber/dataPartyNumber isupDataPartyNumber +IsupNumber/telexPartyNumber isupTelexPartyNumber +IsupNumber/privateNumber isupPrivateNumber +IsupNumber/nationalStandardPartyNumber isupNationalStandardPartyNumber + +#---------------------------------------------------------------------------------------- +#.FN_BODY H323-UU-PDU/h323-message-body VAL_PTR = &message_body_val + gint32 message_body_val; + h225_packet_info* h225_pi; + + contains_faststart = FALSE; + call_id_guid = NULL; +%(DEFAULT_BODY)s + col_append_fstr(actx->pinfo->cinfo, COL_INFO, "CS: %%s ", + val_to_str(message_body_val, T_h323_message_body_vals, "<unknown>")); + + h225_pi = (h225_packet_info*)p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_h225, 0); + if (h225_pi != NULL) { + if (h225_pi->msg_type == H225_CS) { + /* Don't override msg_tag value from IRR */ + h225_pi->msg_tag = message_body_val; + } + + if (call_id_guid) { + h225_pi->guid = *call_id_guid; + } + } + + if (contains_faststart == TRUE ) + { + col_append_str(actx->pinfo->cinfo, COL_INFO, "OpenLogicalChannel " ); + } + + col_set_fence(actx->pinfo->cinfo,COL_INFO); + +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY FastStart/_item VAL_PTR = &value_tvb + tvbuff_t *value_tvb = NULL; + char codec_str[50]; + h225_packet_info* h225_pi; + codec_str[0] = '\0'; + +%(DEFAULT_BODY)s + if (value_tvb && tvb_reported_length(value_tvb)) { + dissect_h245_FastStart_OLC(value_tvb, actx->pinfo, tree, codec_str); + } + + /* Add to packet info */ + h225_pi = (h225_packet_info*)p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_h225, 0); + if (h225_pi != NULL) { + char temp[50]; + snprintf(temp, 50, "%%s %%s", h225_pi->frame_label, codec_str); + (void) g_strlcpy(h225_pi->frame_label, temp, 50); + h225_pi->is_faststart = TRUE; + } + contains_faststart = TRUE; +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY RasMessage VAL_PTR = &rasmessage_value + gint32 rasmessage_value; + h225_packet_info* h225_pi; + + call_id_guid = NULL; +%(DEFAULT_BODY)s + col_add_fstr(actx->pinfo->cinfo, COL_INFO, "RAS: %%s ", + val_to_str(rasmessage_value, h225_RasMessage_vals, "<unknown>")); + + h225_pi = (h225_packet_info*)p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_h225, 0); + if (h225_pi != NULL) { + h225_pi->msg_tag = rasmessage_value; + if (call_id_guid) { + h225_pi->guid = *call_id_guid; + } + } +#.END +#---------------------------------------------------------------------------------------- +#.FN_HDR DestinationInfo/_item + h225_packet_info* h225_pi; + + h225_pi = (h225_packet_info*)p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_h225, 0); + if (h225_pi != NULL) { + h225_pi->is_destinationInfo = TRUE; + } +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY DialedDigits VAL_PTR = &value_tvb + tvbuff_t *value_tvb = NULL; + guint len = 0; + h225_packet_info* h225_pi; + +%(DEFAULT_BODY)s + h225_pi = (h225_packet_info*)p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_h225, 0); + if (h225_pi && h225_pi->is_destinationInfo == TRUE) { + if (value_tvb) { + len = tvb_reported_length(value_tvb); + /* XXX - should this be allocated as an ephemeral string? */ + if (len > sizeof h225_pi->dialedDigits - 1) + len = sizeof h225_pi->dialedDigits - 1; + tvb_memcpy(value_tvb, (guint8*)h225_pi->dialedDigits, 0, len); + } + h225_pi->dialedDigits[len] = '\0'; + h225_pi->is_destinationInfo = FALSE; + } +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY H245TransportAddress/ipAddress/ip VAL_PTR = &value_tvb + tvbuff_t *value_tvb; + + ipv4_address = 0; +%(DEFAULT_BODY)s + if (value_tvb) + ipv4_address = tvb_get_ipv4(value_tvb, 0); +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY H245TransportAddress/ip6Address/ip VAL_PTR = &value_tvb + tvbuff_t *value_tvb; + + ipv6_address = ipv6_address_zeros; +%(DEFAULT_BODY)s + if (value_tvb) + tvb_get_ipv6(value_tvb, 0, &ipv6_address); +#.END +#---------------------------------------------------------------------------------------- +#.FN_PARS H245TransportAddress/ipAddress/port VAL_PTR = &ip_port +#---------------------------------------------------------------------------------------- +#.FN_PARS H245TransportAddress/ip6Address/port VAL_PTR = &ip_port +#---------------------------------------------------------------------------------------- +#.FN_BODY ParallelH245Control/_item VAL_PTR = &h245_tvb + tvbuff_t *h245_tvb = NULL; + +%(DEFAULT_BODY)s + next_tvb_add_handle(h245_list, h245_tvb, (h225_h245_in_tree)?tree:NULL, h245dg_handle); +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY H245Control/_item VAL_PTR = &h245_tvb + tvbuff_t *h245_tvb = NULL; + +%(DEFAULT_BODY)s + next_tvb_add_handle(h245_list, h245_tvb, (h225_h245_in_tree)?tree:NULL, h245dg_handle); +#.END +#---------------------------------------------------------------------------------------- +#.FN_HDR H323-UU-PDU/h323-message-body/empty + h225_packet_info* h225_pi; +#.END +#---------------------------------------------------------------------------------------- +#.FN_FTR H323-UU-PDU/h323-message-body/empty + h225_pi = (h225_packet_info*)p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_h225, 0); + if (h225_pi != NULL) { + h225_pi->cs_type = H225_EMPTY; + } +#.END +#---------------------------------------------------------------------------------------- +#.FN_HDR Status-UUIE + h225_packet_info* h225_pi; +#.END +#---------------------------------------------------------------------------------------- +#.FN_FTR Status-UUIE + /* Add to packet info */ + h225_pi = (h225_packet_info*)p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_h225, 0); + if (h225_pi != NULL) { + h225_pi->cs_type = H225_STATUS; + snprintf(h225_pi->frame_label, 50, "%s", val_to_str(h225_pi->cs_type, T_h323_message_body_vals, "<unknown>")); + } +#.END +#---------------------------------------------------------------------------------------- +#.FN_HDR Information-UUIE + h225_packet_info* h225_pi; +#.END +#---------------------------------------------------------------------------------------- +#.FN_FTR Information-UUIE + /* Add to packet info */ + h225_pi = (h225_packet_info*)p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_h225, 0); + if (h225_pi != NULL) { + h225_pi->cs_type = H225_INFORMATION; + snprintf(h225_pi->frame_label, 50, "%s", val_to_str(h225_pi->cs_type, T_h323_message_body_vals, "<unknown>")); + } +#.END +#---------------------------------------------------------------------------------------- +#.FN_HDR Progress-UUIE + h225_packet_info* h225_pi; +#.END +#---------------------------------------------------------------------------------------- +#.FN_FTR Progress-UUIE + /* Add to packet info */ + h225_pi = (h225_packet_info*)p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_h225, 0); + if (h225_pi != NULL) { + h225_pi->cs_type = H225_PROGRESS; + if (contains_faststart) { + char temp[50]; + snprintf(temp, 50, "%s OLC (%s)", val_to_str(h225_pi->cs_type, T_h323_message_body_vals, "<unknown>"), h225_pi->frame_label); + (void) g_strlcpy(h225_pi->frame_label, temp, 50); + } else + snprintf(h225_pi->frame_label, 50, "%s", val_to_str(h225_pi->cs_type, T_h323_message_body_vals, "<unknown>")); + } +#.END +#---------------------------------------------------------------------------------------- +#.FN_HDR SetupAcknowledge-UUIE + h225_packet_info* h225_pi; +#.END +#---------------------------------------------------------------------------------------- +#.FN_FTR SetupAcknowledge-UUIE + /* Add to packet info */ + h225_pi = (h225_packet_info*)p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_h225, 0); + if (h225_pi != NULL) { + h225_pi->cs_type = H225_SETUP_ACK; + snprintf(h225_pi->frame_label, 50, "%s", val_to_str(h225_pi->cs_type, T_h323_message_body_vals, "<unknown>")); + } +#.END +#---------------------------------------------------------------------------------------- +#.FN_HDR Facility-UUIE + h225_packet_info* h225_pi; +#.END +#---------------------------------------------------------------------------------------- +#.FN_FTR Facility-UUIE + /* Add to packet info */ + h225_pi = (h225_packet_info*)p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_h225, 0); + if (h225_pi != NULL) { + h225_pi->cs_type = H225_FACILITY; + snprintf(h225_pi->frame_label, 50, "%s", val_to_str(h225_pi->cs_type, T_h323_message_body_vals, "<unknown>")); + } +#.END +#---------------------------------------------------------------------------------------- +#.FN_HDR H323-UU-PDU/h245Tunnelling + h225_packet_info* h225_pi; + h225_pi = (h225_packet_info*)p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_h225, 0); + if (h225_pi != NULL) { +#.END +#---------------------------------------------------------------------------------------- +#.FN_PARS H323-UU-PDU/h245Tunnelling VAL_PTR = &(h225_pi->is_h245Tunneling) +#---------------------------------------------------------------------------------------- +#.FN_FTR H323-UU-PDU/h245Tunnelling + } +#.END +#---------------------------------------------------------------------------------------- +#.FN_HDR Setup-UUIE + h225_packet_info* h225_pi; + contains_faststart = FALSE; +#.END +#---------------------------------------------------------------------------------------- +#.FN_FTR Setup-UUIE + /* Add to packet info */ + h225_pi = (h225_packet_info*)p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_h225, 0); + if (h225_pi != NULL) { + h225_pi->cs_type = H225_SETUP; + if (contains_faststart) { + char temp[50]; + snprintf(temp, 50, "%s OLC (%s)", val_to_str(h225_pi->cs_type, T_h323_message_body_vals, "<unknown>"), h225_pi->frame_label); + (void) g_strlcpy(h225_pi->frame_label, temp, 50); + } else + snprintf(h225_pi->frame_label, 50, "%s", val_to_str(h225_pi->cs_type, T_h323_message_body_vals, "<unknown>")); + } +#.END +#---------------------------------------------------------------------------------------- +#.FN_HDR CallProceeding-UUIE + h225_packet_info* h225_pi; +#.END +#---------------------------------------------------------------------------------------- +#.FN_FTR CallProceeding-UUIE + /* Add to packet info */ + h225_pi = (h225_packet_info*)p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_h225, 0); + if (h225_pi != NULL) { + h225_pi->cs_type = H225_CALL_PROCEDING; + if (contains_faststart) { + char temp[50]; + snprintf(temp, 50, "%s OLC (%s)", val_to_str(h225_pi->cs_type, T_h323_message_body_vals, "<unknown>"), h225_pi->frame_label); + (void) g_strlcpy(h225_pi->frame_label, temp, 50); + } else + snprintf(h225_pi->frame_label, 50, "%s", val_to_str(h225_pi->cs_type, T_h323_message_body_vals, "<unknown>")); + } +#.END +#---------------------------------------------------------------------------------------- +#.FN_HDR Alerting-UUIE + h225_packet_info* h225_pi; +#.END +#---------------------------------------------------------------------------------------- +#.FN_FTR Alerting-UUIE + /* Add to packet info */ + h225_pi = (h225_packet_info*)p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_h225, 0); + if (h225_pi != NULL) { + h225_pi->cs_type = H225_ALERTING; + if (contains_faststart) { + char temp[50]; + snprintf(temp, 50, "%s OLC (%s)", val_to_str(h225_pi->cs_type, T_h323_message_body_vals, "<unknown>"), h225_pi->frame_label); + (void) g_strlcpy(h225_pi->frame_label, temp, 50); + } else + snprintf(h225_pi->frame_label, 50, "%s", val_to_str(h225_pi->cs_type, T_h323_message_body_vals, "<unknown>")); + } +#.END +#---------------------------------------------------------------------------------------- +#.FN_HDR ReleaseComplete-UUIE + h225_packet_info* h225_pi; +#.END +#---------------------------------------------------------------------------------------- +#.FN_FTR ReleaseComplete-UUIE + /* Add to packet info */ + h225_pi = (h225_packet_info*)p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_h225, 0); + if (h225_pi != NULL) { + h225_pi->cs_type = H225_RELEASE_COMPLET; + snprintf(h225_pi->frame_label, 50, "%s", val_to_str(h225_pi->cs_type, T_h323_message_body_vals, "<unknown>")); + } +#.END +#---------------------------------------------------------------------------------------- +#.FN_HDR Connect-UUIE + h225_packet_info* h225_pi; +#.END +#---------------------------------------------------------------------------------------- +#.FN_FTR Connect-UUIE + /* Add to packet info */ + h225_pi = (h225_packet_info*)p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_h225, 0); + if (h225_pi != NULL) { + h225_pi->cs_type = H225_CONNECT; + if (contains_faststart) { + char temp[50]; + snprintf(temp, 50, "%s OLC (%s)", val_to_str(h225_pi->cs_type, T_h323_message_body_vals, "<unknown>"), h225_pi->frame_label); + (void) g_strlcpy(h225_pi->frame_label, temp, 50); + } else + snprintf(h225_pi->frame_label, 50, "%s", val_to_str(h225_pi->cs_type, T_h323_message_body_vals, "<unknown>")); + } +#.END +#---------------------------------------------------------------------------------------- +#.FN_HDR H245TransportAddress + h225_packet_info* h225_pi; + ipv4_address=0; + ipv6_address = ipv6_address_zeros; + ip_port=0; + +#.END +#---------------------------------------------------------------------------------------- +#.FN_FTR H245TransportAddress + /* we need this info for TAPing */ + h225_pi = (h225_packet_info*)p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_h225, 0); + + if (h225_pi) { + h225_pi->is_h245 = TRUE; + h225_pi->h245_address = ipv4_address; + h225_pi->h245_port = ip_port; + } + if ( !actx->pinfo->fd->visited && h245_handle && ip_port!=0 ) { + address src_addr; + conversation_t *conv=NULL; + + if (ipv4_address!=0) { + set_address(&src_addr, AT_IPv4, 4, &ipv4_address); + } else if (memcmp(ipv6_address.bytes, ipv6_address_zeros.bytes, sizeof(ipv6_address.bytes))!=0) { + set_address(&src_addr, AT_IPv6, 16, ipv6_address.bytes); + } else { + return offset; + } + + conv=find_conversation(actx->pinfo->num, &src_addr, &src_addr, CONVERSATION_TCP, ip_port, ip_port, NO_ADDR_B|NO_PORT_B); + if(!conv){ + conv=conversation_new(actx->pinfo->num, &src_addr, &src_addr, CONVERSATION_TCP, ip_port, ip_port, NO_ADDR2|NO_PORT2); + conversation_set_dissector(conv, h245_handle); + } + } +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY FacilityReason VAL_PTR = &value + gint32 value; + h225_packet_info* h225_pi; + h225_pi = (h225_packet_info*)p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_h225, 0); + +%(DEFAULT_BODY)s + if (h225_pi != NULL) { + h225_pi->reason = value; + } +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY GatekeeperRejectReason VAL_PTR = &value + gint32 value; + h225_packet_info* h225_pi; + h225_pi = (h225_packet_info*)p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_h225, 0); + +%(DEFAULT_BODY)s + if (h225_pi != NULL) { + h225_pi->reason = value; + } +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY UnregRequestReason VAL_PTR = &value + gint32 value; + h225_packet_info* h225_pi; + h225_pi = (h225_packet_info*)p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_h225, 0); + +%(DEFAULT_BODY)s + if (h225_pi != NULL) { + h225_pi->reason = value; + } +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY UnregRejectReason VAL_PTR = &value + gint32 value; + h225_packet_info* h225_pi; + h225_pi = (h225_packet_info*)p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_h225, 0); + +%(DEFAULT_BODY)s + if (h225_pi != NULL) { + h225_pi->reason = value; + } +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY BandRejectReason VAL_PTR = &value + gint32 value; + h225_packet_info* h225_pi; + h225_pi = (h225_packet_info*)p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_h225, 0); + +%(DEFAULT_BODY)s + if (h225_pi != NULL) { + h225_pi->reason = value; + } +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY DisengageReason VAL_PTR = &value + gint32 value; + h225_packet_info* h225_pi; + h225_pi = (h225_packet_info*)p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_h225, 0); + +%(DEFAULT_BODY)s + if (h225_pi != NULL) { + h225_pi->reason = value; + } +#---------------------------------------------------------------------------------------- +#.FN_BODY DisengageRejectReason VAL_PTR = &value + gint32 value; + h225_packet_info* h225_pi; + h225_pi = (h225_packet_info*)p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_h225, 0); + +%(DEFAULT_BODY)s + if (h225_pi != NULL) { + h225_pi->reason = value; + } +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY AdmissionRejectReason VAL_PTR = &value + gint32 value; + h225_packet_info* h225_pi; + h225_pi = (h225_packet_info*)p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_h225, 0); + +%(DEFAULT_BODY)s + if (h225_pi != NULL) { + h225_pi->reason = value; + } +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY LocationRejectReason VAL_PTR = &value + gint32 value; + h225_packet_info* h225_pi; + h225_pi = (h225_packet_info*)p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_h225, 0); + +%(DEFAULT_BODY)s + if (h225_pi != NULL) { + h225_pi->reason = value; + } +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY RegistrationRejectReason VAL_PTR = &value + gint32 value; + h225_packet_info* h225_pi; + h225_pi = (h225_packet_info*)p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_h225, 0); + +%(DEFAULT_BODY)s + if (h225_pi != NULL) { + h225_pi->reason = value; + } +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY InfoRequestNakReason VAL_PTR = &value + gint32 value; + h225_packet_info* h225_pi; + h225_pi = (h225_packet_info*)p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_h225, 0); + +%(DEFAULT_BODY)s + if (h225_pi != NULL) { + h225_pi->reason = value; + } +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY ReleaseCompleteReason VAL_PTR = &value + gint32 value; + h225_packet_info* h225_pi; + h225_pi = (h225_packet_info*)p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_h225, 0); + +%(DEFAULT_BODY)s + if (h225_pi != NULL) { + h225_pi->reason = value; + } +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY CallIdentifier/guid + tvbuff_t *guid_tvb = NULL; + + actx->value_ptr = &guid_tvb; +%(DEFAULT_BODY)s + if (guid_tvb) + tvb_get_ntohguid(guid_tvb, 0, call_id_guid = wmem_new(actx->pinfo->pool, e_guid_t)); + actx->value_ptr = NULL; +#.END +#---------------------------------------------------------------------------------------- +#.FN_PARS GloballyUniqueID VAL_PTR = (tvbuff_t **)actx->value_ptr +#---------------------------------------------------------------------------------------- +#.FN_HDR RequestSeqNum + h225_packet_info* h225_pi; + h225_pi = (h225_packet_info*)p_get_proto_data(actx->pinfo->pool, actx->pinfo, proto_h225, 0); + if (h225_pi != NULL) { +#.END +#---------------------------------------------------------------------------------------- +#.FN_PARS RequestSeqNum VAL_PTR = &(h225_pi->requestSeqNum) +#---------------------------------------------------------------------------------------- +#.FN_FTR RequestSeqNum + } +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY H323-UU-PDU/h4501SupplementaryService/_item VAL_PTR = &h4501_tvb + tvbuff_t *h4501_tvb = NULL; + +%(DEFAULT_BODY)s + if (h4501_tvb && tvb_reported_length(h4501_tvb)) { + call_dissector(h4501_handle, h4501_tvb, actx->pinfo, tree); + } +#.END +#---------------------------------------------------------------------------------------- + +#--- TunnelledProtocol ------------------------------------------------------------------ + +#.FN_HDR TunnelledProtocol + tpOID = ""; +#.FN_FTR TunnelledProtocol + tp_handle = dissector_get_string_handle(tp_dissector_table, tpOID); +#.FN_PARS TunnelledProtocol/id/tunnelledProtocolObjectID + FN_VARIANT = _str VAL_PTR = &tpOID +#.END + +#.FN_HDR H323-UU-PDU/tunnelledSignallingMessage + tp_handle = NULL; +#.FN_BODY H323-UU-PDU/tunnelledSignallingMessage/messageContent/_item VAL_PTR = &next_tvb + tvbuff_t *next_tvb = NULL; + +%(DEFAULT_BODY)s + next_tvb_add_handle(tp_list, next_tvb, (h225_tp_in_tree)?tree:NULL, tp_handle); +#.END + +#--- NonStandardParameter --------------------------------------------------------------- + +#.FN_PARS +NonStandardIdentifier/object FN_VARIANT = _str VAL_PTR = &nsiOID +#.END + +#.FN_BODY NonStandardIdentifier VAL_PTR = &value + gint32 value; + + nsiOID = ""; + h221NonStandard = 0; + +%(DEFAULT_BODY)s + switch (value) { + case 0 : /* object */ + nsp_handle = dissector_get_string_handle(nsp_object_dissector_table, nsiOID); + break; + case 1 : /* h221NonStandard */ + nsp_handle = dissector_get_uint_handle(nsp_h221_dissector_table, h221NonStandard); + break; + default : + nsp_handle = NULL; + } +#.END + +#.FN_HDR H221NonStandard + t35CountryCode = 0; + t35Extension = 0; + manufacturerCode = 0; +#.FN_FTR H221NonStandard + h221NonStandard = ((t35CountryCode * 256) + t35Extension) * 65536 + manufacturerCode; + proto_tree_add_uint(tree, hf_h221Manufacturer, tvb, (offset>>3)-4, 4, h221NonStandard); +#.FN_PARS +H221NonStandard/t35CountryCode VAL_PTR = &t35CountryCode +H221NonStandard/t35Extension VAL_PTR = &t35Extension +H221NonStandard/manufacturerCode VAL_PTR = &manufacturerCode +#.END + +#.FN_HDR NonStandardParameter + nsp_handle = NULL; +#.FN_BODY NonStandardParameter/data VAL_PTR = &next_tvb + tvbuff_t *next_tvb = NULL; + +%(DEFAULT_BODY)s + if (next_tvb && tvb_reported_length(next_tvb)) { + call_dissector((nsp_handle)?nsp_handle:data_handle, next_tvb, actx->pinfo, tree); + } +#.END + +#=== Generic Extensible Framework ======================================================= + +#.FN_HDR GenericData + void *priv_data = actx->private_data; + gef_ctx_t *gefx; + + /* check if not inherited from FeatureDescriptor */ + gefx = gef_ctx_get(actx->private_data); + if (!gefx) { + gefx = gef_ctx_alloc(actx->pinfo->pool, NULL, "GenericData"); + actx->private_data = gefx; + } +#.FN_FTR + actx->private_data = priv_data; +#.END + +#.FN_HDR EnumeratedParameter + gef_ctx_t *parent_gefx; + + parent_gefx = gef_ctx_get(actx->private_data); + actx->private_data = gef_ctx_alloc(actx->pinfo->pool, parent_gefx, NULL); +#.FN_FTR + actx->private_data = parent_gefx; +#.END + +#---------------------------------------------------------------------------------------- +#.FN_HDR FeatureDescriptor + void *priv_data = actx->private_data; + actx->private_data = gef_ctx_alloc(actx->pinfo->pool, NULL, "FeatureDescriptor"); +#.FN_FTR + actx->private_data = priv_data; +#.END +#---------------------------------------------------------------------------------------- + +#.FN_HDR GenericIdentifier + gef_ctx_t *gefx; + proto_item* ti; +#.FN_FTR + gef_ctx_update_key(actx->pinfo->pool, gef_ctx_get(actx->private_data)); + gefx = gef_ctx_get(actx->private_data); + if (gefx) { + ti = proto_tree_add_string(tree, hf_h225_debug_dissector_try_string, tvb, offset>>3, 0, gefx->key); + proto_item_set_hidden(ti); + dissector_try_string_new(gef_name_dissector_table, gefx->key, tvb_new_subset_length_caplen(tvb, offset>>3, 0, 0), actx->pinfo, tree, FALSE, actx); + } + actx->private_data = gefx; /* subdissector could overwrite it */ +#.END + +#.FN_BODY GenericIdentifier/standard VAL_PTR = &value_int + guint32 value_int = (guint32)-1; + gef_ctx_t *gefx; + +%(DEFAULT_BODY)s + gefx = gef_ctx_get(actx->private_data); + if (gefx) gefx->id = wmem_strdup_printf(actx->pinfo->pool, "%%u", value_int); +#.END + +#.FN_BODY GenericIdentifier/oid FN_VARIANT = _str VAL_PTR = &oid_str + const gchar *oid_str = NULL; + gef_ctx_t *gefx; + +%(DEFAULT_BODY)s + gefx = gef_ctx_get(actx->private_data); + if (gefx) gefx->id = oid_str; +#.END + +#---------------------------------------------------------------------------------------- +#.FN_BODY Content/raw VAL_PTR = &value_tvb + tvbuff_t *value_tvb; + gef_ctx_t *gefx; + proto_item* ti; + +%(DEFAULT_BODY)s + gefx = gef_ctx_get(actx->private_data); + if (gefx) { + ti = proto_tree_add_string(tree, hf_h225_debug_dissector_try_string, tvb, offset>>3, 0, gefx->key); + proto_item_set_hidden(ti); + dissector_try_string(gef_content_dissector_table, gefx->key, value_tvb, actx->pinfo, %(TREE)s, actx); + } +#.END + +#=== end of GEF ========================================================================= + +# TBCD-STRING is additionally constrained +# parameter stack is used for passing this constraint + +#.FN_HDR TBCD-STRING + int min_len, max_len; + gboolean has_extension; + + get_size_constraint_from_stack(actx, "TBCD_STRING", &min_len, &max_len, &has_extension); +#.FN_PARS TBCD-STRING +MIN_VAL = min_len +MAX_VAL = max_len +EXT = has_extension +#.END + + +#.TYPE_ATTR +H221NonStandard/t35CountryCode TYPE = FT_UINT32 DISPLAY = BASE_DEC STRINGS = VALS(T35CountryCode_vals) +TransportAddress/ipAddress/ip TYPE = FT_IPv4 DISPLAY = BASE_NONE STRINGS = NULL +TransportAddress/ip6Address/ip TYPE = FT_IPv6 DISPLAY = BASE_NONE STRINGS = NULL +H245TransportAddress/ipAddress/ip TYPE = FT_IPv4 DISPLAY = BASE_NONE STRINGS = NULL +H245TransportAddress/ip6Address/ip TYPE = FT_IPv6 DISPLAY = BASE_NONE STRINGS = NULL +VendorIdentifier/productId TYPE = FT_STRING DISPLAY = BASE_NONE STRINGS = NULL +VendorIdentifier/versionId TYPE = FT_STRING DISPLAY = BASE_NONE STRINGS = NULL +H323-UserInformation/user-data/protocol-discriminator TYPE = FT_UINT32 DISPLAY = BASE_DEC|BASE_EXT_STRING STRINGS = &q931_protocol_discriminator_vals_ext +H323-UU-PDU/tunnelledSignallingMessage/messageContent/_item TYPE = FT_UINT32 DISPLAY = BASE_DEC +NonStandardParameter/data TYPE = FT_UINT32 DISPLAY = BASE_DEC +FastStart/_item TYPE = FT_UINT32 DISPLAY = BASE_DEC +ParallelH245Control/_item TYPE = FT_UINT32 DISPLAY = BASE_DEC +H245Control/_item TYPE = FT_UINT32 DISPLAY = BASE_DEC +GloballyUniqueID TYPE = FT_GUID DISPLAY = BASE_NONE +H323-UU-PDU/h4501SupplementaryService/_item TYPE = FT_UINT32 DISPLAY = BASE_DEC +#.END diff --git a/epan/dissectors/asn1/h225/packet-h225-template.c b/epan/dissectors/asn1/h225/packet-h225-template.c new file mode 100644 index 00000000..ab85ddbf --- /dev/null +++ b/epan/dissectors/asn1/h225/packet-h225-template.c @@ -0,0 +1,1146 @@ +/* packet-h225.c + * Routines for h225 packet dissection + * Copyright 2005, Anders Broman <anders.broman@ericsson.com> + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1998 Gerald Combs + * + * SPDX-License-Identifier: GPL-2.0-or-later + * + * To quote the author of the previous H323/H225/H245 dissector: + * "This is a complete replacement of the previous limitied dissector + * that Ronnie was crazy enough to write by hand. It was a lot of time + * to hack it by hand, but it is incomplete and buggy and it is good when + * it will go away." + * Ronnie did a great job and all the VoIP users had made good use of it! + * Credit to Tomas Kukosa for developing the asn2wrs compiler. + * + */ + +#include "config.h" + +#include <epan/packet.h> +#include <epan/conversation.h> +#include <epan/proto_data.h> + +#include <epan/prefs.h> +#include <epan/oids.h> +#include <epan/next_tvb.h> +#include <epan/asn1.h> +#include <epan/t35.h> +#include <epan/tap.h> +#include <epan/stat_tap_ui.h> +#include <epan/rtd_table.h> +#include "packet-frame.h" +#include "packet-tpkt.h" +#include "packet-per.h" +#include "packet-h225.h" +#include "packet-h235.h" +#include "packet-h245.h" +#include "packet-h323.h" +#include "packet-q931.h" +#include "packet-tls.h" + +#define PNAME "H323-MESSAGES" +#define PSNAME "H.225.0" +#define PFNAME "h225" + +#define UDP_PORT_RAS_RANGE "1718-1719" +#define TCP_PORT_CS 1720 +#define TLS_PORT_CS 1300 + +void proto_register_h225(void); +static h225_packet_info* create_h225_packet_info(packet_info *pinfo); +static void ras_call_matching(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, h225_packet_info *pi); + +/* Item of ras request list*/ +typedef struct _h225ras_call_t { + guint32 requestSeqNum; + e_guid_t guid; + guint32 req_num; /* frame number request seen */ + guint32 rsp_num; /* frame number response seen */ + nstime_t req_time; /* arrival time of request */ + gboolean responded; /* true, if request has been responded */ + struct _h225ras_call_t *next_call; /* pointer to next ras request with same SequenceNumber and conversation handle */ +} h225ras_call_t; + + +/* Item of ras-request key list*/ +typedef struct _h225ras_call_info_key { + guint reqSeqNum; + conversation_t *conversation; +} h225ras_call_info_key; + +/* Global Memory Chunks for lists and Global hash tables*/ + +static wmem_map_t *ras_calls[7] = {NULL, NULL, NULL, NULL, NULL, NULL, NULL}; + +/* functions, needed using ras-request and halfcall matching*/ +static h225ras_call_t * find_h225ras_call(h225ras_call_info_key *h225ras_call_key ,int category); +static h225ras_call_t * new_h225ras_call(h225ras_call_info_key *h225ras_call_key, packet_info *pinfo, e_guid_t *guid, int category); +static h225ras_call_t * append_h225ras_call(h225ras_call_t *prev_call, packet_info *pinfo, e_guid_t *guid, int category); + + +static dissector_handle_t h225ras_handle; +static dissector_handle_t data_handle; +/* Subdissector tables */ +static dissector_table_t nsp_object_dissector_table; +static dissector_table_t nsp_h221_dissector_table; +static dissector_table_t tp_dissector_table; +static dissector_table_t gef_name_dissector_table; +static dissector_table_t gef_content_dissector_table; + + +static dissector_handle_t h245_handle=NULL; +static dissector_handle_t h245dg_handle=NULL; +static dissector_handle_t h4501_handle=NULL; + +static dissector_handle_t nsp_handle; +static dissector_handle_t tp_handle; + +static next_tvb_list_t *h245_list; +static next_tvb_list_t *tp_list; + +/* Initialize the protocol and registered fields */ +static int h225_tap = -1; +static int proto_h225 = -1; + +static int hf_h221Manufacturer = -1; +static int hf_h225_ras_req_frame = -1; +static int hf_h225_ras_rsp_frame = -1; +static int hf_h225_ras_dup = -1; +static int hf_h225_ras_deltatime = -1; +static int hf_h225_debug_dissector_try_string = -1; + +#include "packet-h225-hf.c" + +/* Initialize the subtree pointers */ +static gint ett_h225 = -1; +#include "packet-h225-ett.c" + +/* Preferences */ +static guint h225_tls_port = TLS_PORT_CS; +static gboolean h225_reassembly = TRUE; +static gboolean h225_h245_in_tree = TRUE; +static gboolean h225_tp_in_tree = TRUE; + +/* Global variables */ +static guint32 ipv4_address; +static ws_in6_addr ipv6_address; +static ws_in6_addr ipv6_address_zeros = {{0}}; +static guint32 ip_port; +static gboolean contains_faststart = FALSE; +static e_guid_t *call_id_guid; + +/* NonStandardParameter */ +static const char *nsiOID; +static guint32 h221NonStandard; +static guint32 t35CountryCode; +static guint32 t35Extension; +static guint32 manufacturerCode; + +/* TunnelledProtocol */ +static const char *tpOID; + +static const value_string ras_message_category[] = { + { 0, "Gatekeeper "}, + { 1, "Registration "}, + { 2, "UnRegistration"}, + { 3, "Admission "}, + { 4, "Bandwidth "}, + { 5, "Disengage "}, + { 6, "Location "}, + { 0, NULL } +}; + +typedef enum _ras_type { + RAS_REQUEST, + RAS_CONFIRM, + RAS_REJECT, + RAS_OTHER +}ras_type; + +typedef enum _ras_category { + RAS_GATEKEEPER, + RAS_REGISTRATION, + RAS_UNREGISTRATION, + RAS_ADMISSION, + RAS_BANDWIDTH, + RAS_DISENGAGE, + RAS_LOCATION, + RAS_OTHERS +}ras_category; + +#define NUM_RAS_STATS 7 + +static tap_packet_status +h225rassrt_packet(void *phs, packet_info *pinfo _U_, epan_dissect_t *edt _U_, const void *phi, tap_flags_t flags _U_) +{ + rtd_data_t* rtd_data = (rtd_data_t*)phs; + rtd_stat_table* rs = &rtd_data->stat_table; + const h225_packet_info *pi=(const h225_packet_info *)phi; + + ras_type rasmsg_type = RAS_OTHER; + ras_category rascategory = RAS_OTHERS; + + if (pi->msg_type != H225_RAS || pi->msg_tag == -1) { + /* No RAS Message or uninitialized msg_tag -> return */ + return TAP_PACKET_DONT_REDRAW; + } + + if (pi->msg_tag < 21) { + /* */ + rascategory = (ras_category)(pi->msg_tag / 3); + rasmsg_type = (ras_type)(pi->msg_tag % 3); + } + else { + /* No SRT yet (ToDo) */ + return TAP_PACKET_DONT_REDRAW; + } + + switch(rasmsg_type) { + + case RAS_REQUEST: + if(pi->is_duplicate){ + rs->time_stats[rascategory].req_dup_num++; + } + else { + rs->time_stats[rascategory].open_req_num++; + } + break; + + case RAS_CONFIRM: + /* no break - delay stats are identical for Confirm and Reject */ + case RAS_REJECT: + if(pi->is_duplicate){ + /* Duplicate is ignored */ + rs->time_stats[rascategory].rsp_dup_num++; + } + else if (!pi->request_available) { + /* no request was seen, ignore response */ + rs->time_stats[rascategory].disc_rsp_num++; + } + else { + rs->time_stats[rascategory].open_req_num--; + time_stat_update(&(rs->time_stats[rascategory].rtd[0]),&(pi->delta_time), pinfo); + } + break; + + default: + return TAP_PACKET_DONT_REDRAW; + } + return TAP_PACKET_REDRAW; +} + +#include "packet-h225-fn.c" + +/* Forward declaration we need below */ +void proto_reg_handoff_h225(void); + +/* + * Functions needed for Ras-Hash-Table + */ + +/* compare 2 keys */ +static gint h225ras_call_equal(gconstpointer k1, gconstpointer k2) +{ + const h225ras_call_info_key* key1 = (const h225ras_call_info_key*) k1; + const h225ras_call_info_key* key2 = (const h225ras_call_info_key*) k2; + + return (key1->reqSeqNum == key2->reqSeqNum && + key1->conversation == key2->conversation); +} + +/* calculate a hash key */ +static guint h225ras_call_hash(gconstpointer k) +{ + const h225ras_call_info_key* key = (const h225ras_call_info_key*) k; + + return key->reqSeqNum + GPOINTER_TO_UINT(key->conversation); +} + + +h225ras_call_t * find_h225ras_call(h225ras_call_info_key *h225ras_call_key ,int category) +{ + h225ras_call_t *h225ras_call = (h225ras_call_t *)wmem_map_lookup(ras_calls[category], h225ras_call_key); + + return h225ras_call; +} + +h225ras_call_t * new_h225ras_call(h225ras_call_info_key *h225ras_call_key, packet_info *pinfo, e_guid_t *guid, int category) +{ + h225ras_call_info_key *new_h225ras_call_key; + h225ras_call_t *h225ras_call = NULL; + + + /* Prepare the value data. + "req_num" and "rsp_num" are frame numbers; + frame numbers are 1-origin, so we use 0 + to mean "we don't yet know in which frame + the reply for this call appears". */ + new_h225ras_call_key = wmem_new(wmem_file_scope(), h225ras_call_info_key); + new_h225ras_call_key->reqSeqNum = h225ras_call_key->reqSeqNum; + new_h225ras_call_key->conversation = h225ras_call_key->conversation; + h225ras_call = wmem_new(wmem_file_scope(), h225ras_call_t); + h225ras_call->req_num = pinfo->num; + h225ras_call->rsp_num = 0; + h225ras_call->requestSeqNum = h225ras_call_key->reqSeqNum; + h225ras_call->responded = FALSE; + h225ras_call->next_call = NULL; + h225ras_call->req_time=pinfo->abs_ts; + h225ras_call->guid=*guid; + /* store it */ + wmem_map_insert(ras_calls[category], new_h225ras_call_key, h225ras_call); + + return h225ras_call; +} + +h225ras_call_t * append_h225ras_call(h225ras_call_t *prev_call, packet_info *pinfo, e_guid_t *guid, int category _U_) +{ + h225ras_call_t *h225ras_call = NULL; + + /* Prepare the value data. + "req_num" and "rsp_num" are frame numbers; + frame numbers are 1-origin, so we use 0 + to mean "we don't yet know in which frame + the reply for this call appears". */ + h225ras_call = wmem_new(wmem_file_scope(), h225ras_call_t); + h225ras_call->req_num = pinfo->num; + h225ras_call->rsp_num = 0; + h225ras_call->requestSeqNum = prev_call->requestSeqNum; + h225ras_call->responded = FALSE; + h225ras_call->next_call = NULL; + h225ras_call->req_time=pinfo->abs_ts; + h225ras_call->guid=*guid; + + prev_call->next_call = h225ras_call; + return h225ras_call; +} + +static void +h225_frame_end(void) +{ + /* next_tvb pointers are allocated in packet scope, clear it. */ + h245_list = NULL; + tp_list = NULL; +} + +static int +dissect_h225_H323UserInformation(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) +{ + proto_item *it; + proto_tree *tr; + int offset = 0; + h225_packet_info* h225_pi; + + /* Init struct for collecting h225_packet_info */ + h225_pi = create_h225_packet_info(pinfo); + h225_pi->msg_type = H225_CS; + p_add_proto_data(pinfo->pool, pinfo, proto_h225, 0, h225_pi); + + register_frame_end_routine(pinfo, h225_frame_end); + h245_list = next_tvb_list_new(pinfo->pool); + tp_list = next_tvb_list_new(pinfo->pool); + + col_set_str(pinfo->cinfo, COL_PROTOCOL, PSNAME); + col_clear(pinfo->cinfo, COL_INFO); + + it=proto_tree_add_protocol_format(tree, proto_h225, tvb, 0, -1, PSNAME" CS"); + tr=proto_item_add_subtree(it, ett_h225); + + offset = dissect_H323_UserInformation_PDU(tvb, pinfo, tr, NULL); + + if (h245_list->count){ + col_append_str(pinfo->cinfo, COL_PROTOCOL, "/"); + col_set_fence(pinfo->cinfo, COL_PROTOCOL); + } + + next_tvb_call(h245_list, pinfo, tree, h245dg_handle, data_handle); + next_tvb_call(tp_list, pinfo, tree, NULL, data_handle); + + tap_queue_packet(h225_tap, pinfo, h225_pi); + + return offset; +} +static int +dissect_h225_h225_RasMessage(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_){ + proto_item *it; + proto_tree *tr; + guint32 offset=0; + h225_packet_info* h225_pi; + + /* Init struct for collecting h225_packet_info */ + h225_pi = create_h225_packet_info(pinfo); + h225_pi->msg_type = H225_RAS; + p_add_proto_data(pinfo->pool, pinfo, proto_h225, 0, h225_pi); + + register_frame_end_routine(pinfo, h225_frame_end); + h245_list = next_tvb_list_new(pinfo->pool); + tp_list = next_tvb_list_new(pinfo->pool); + + col_set_str(pinfo->cinfo, COL_PROTOCOL, PSNAME); + + it=proto_tree_add_protocol_format(tree, proto_h225, tvb, offset, -1, PSNAME" RAS"); + tr=proto_item_add_subtree(it, ett_h225); + + offset = dissect_RasMessage_PDU(tvb, pinfo, tr, NULL); + + ras_call_matching(tvb, pinfo, tr, h225_pi); + + next_tvb_call(h245_list, pinfo, tree, h245dg_handle, data_handle); + next_tvb_call(tp_list, pinfo, tree, NULL, data_handle); + + tap_queue_packet(h225_tap, pinfo, h225_pi); + + return offset; +} + + +/* The following values represent the size of their valuestring arrays */ + +#define RAS_MSG_TYPES (sizeof(h225_RasMessage_vals) / sizeof(value_string)) +#define CS_MSG_TYPES (sizeof(T_h323_message_body_vals) / sizeof(value_string)) + +#define GRJ_REASONS (sizeof(GatekeeperRejectReason_vals) / sizeof(value_string)) +#define RRJ_REASONS (sizeof(RegistrationRejectReason_vals) / sizeof(value_string)) +#define URQ_REASONS (sizeof(UnregRequestReason_vals) / sizeof(value_string)) +#define URJ_REASONS (sizeof(UnregRejectReason_vals) / sizeof(value_string)) +#define ARJ_REASONS (sizeof(AdmissionRejectReason_vals) / sizeof(value_string)) +#define BRJ_REASONS (sizeof(BandRejectReason_vals) / sizeof(value_string)) +#define DRQ_REASONS (sizeof(DisengageReason_vals) / sizeof(value_string)) +#define DRJ_REASONS (sizeof(DisengageRejectReason_vals) / sizeof(value_string)) +#define LRJ_REASONS (sizeof(LocationRejectReason_vals) / sizeof(value_string)) +#define IRQNAK_REASONS (sizeof(InfoRequestNakReason_vals) / sizeof(value_string)) +#define REL_CMP_REASONS (sizeof(h225_ReleaseCompleteReason_vals) / sizeof(value_string)) +#define FACILITY_REASONS (sizeof(FacilityReason_vals) / sizeof(value_string)) + +/* TAP STAT INFO */ +typedef enum +{ + MESSAGE_TYPE_COLUMN = 0, + COUNT_COLUMN +} h225_stat_columns; + +typedef struct _h225_table_item { + guint count; /* Message count */ + guint table_idx; /* stat_table index */ +} h225_table_item_t; + +static stat_tap_table_item h225_stat_fields[] = {{TABLE_ITEM_STRING, TAP_ALIGN_LEFT, "Message Type or Reason", "%-25s"}, {TABLE_ITEM_UINT, TAP_ALIGN_RIGHT, "Count", "%d"}}; + +static guint ras_msg_idx[RAS_MSG_TYPES]; +static guint cs_msg_idx[CS_MSG_TYPES]; + +static guint grj_reason_idx[GRJ_REASONS]; +static guint rrj_reason_idx[RRJ_REASONS]; +static guint urq_reason_idx[URQ_REASONS]; +static guint urj_reason_idx[URJ_REASONS]; +static guint arj_reason_idx[ARJ_REASONS]; +static guint brj_reason_idx[BRJ_REASONS]; +static guint drq_reason_idx[DRQ_REASONS]; +static guint drj_reason_idx[DRJ_REASONS]; +static guint lrj_reason_idx[LRJ_REASONS]; +static guint irqnak_reason_idx[IRQNAK_REASONS]; +static guint rel_cmp_reason_idx[REL_CMP_REASONS]; +static guint facility_reason_idx[FACILITY_REASONS]; + +static guint other_idx; + +static void h225_stat_init(stat_tap_table_ui* new_stat) +{ + const char *table_name = "H.225 Messages and Message Reasons"; + int num_fields = sizeof(h225_stat_fields)/sizeof(stat_tap_table_item); + stat_tap_table *table; + int row_idx = 0, msg_idx; + stat_tap_table_item_type items[sizeof(h225_stat_fields)/sizeof(stat_tap_table_item)]; + + table = stat_tap_find_table(new_stat, table_name); + if (table) { + if (new_stat->stat_tap_reset_table_cb) { + new_stat->stat_tap_reset_table_cb(table); + } + return; + } + + memset(items, 0x0, sizeof(items)); + table = stat_tap_init_table(table_name, num_fields, 0, NULL); + stat_tap_add_table(new_stat, table); + + items[MESSAGE_TYPE_COLUMN].type = TABLE_ITEM_STRING; + items[COUNT_COLUMN].type = TABLE_ITEM_UINT; + items[COUNT_COLUMN].value.uint_value = 0; + + /* Add a row for each value type */ + + msg_idx = 0; + do + { + items[MESSAGE_TYPE_COLUMN].value.string_value = + h225_RasMessage_vals[msg_idx].strptr + ? h225_RasMessage_vals[msg_idx].strptr + : "Unknown RAS message"; + ras_msg_idx[msg_idx] = row_idx; + + stat_tap_init_table_row(table, row_idx, num_fields, items); + row_idx++; + msg_idx++; + } while (h225_RasMessage_vals[msg_idx].strptr); + + msg_idx = 0; + do + { + items[MESSAGE_TYPE_COLUMN].value.string_value = + T_h323_message_body_vals[msg_idx].strptr + ? T_h323_message_body_vals[msg_idx].strptr + : "Unknown CS message"; + cs_msg_idx[msg_idx] = row_idx; + + stat_tap_init_table_row(table, row_idx, num_fields, items); + row_idx++; + msg_idx++; + } while (T_h323_message_body_vals[msg_idx].strptr); + + msg_idx = 0; + do + { + items[MESSAGE_TYPE_COLUMN].value.string_value = + GatekeeperRejectReason_vals[msg_idx].strptr + ? GatekeeperRejectReason_vals[msg_idx].strptr + : "Unknown gatekeeper reject reason"; + grj_reason_idx[msg_idx] = row_idx; + + stat_tap_init_table_row(table, row_idx, num_fields, items); + row_idx++; + msg_idx++; + } while (GatekeeperRejectReason_vals[msg_idx].strptr); + + msg_idx = 0; + do + { + items[MESSAGE_TYPE_COLUMN].value.string_value = + RegistrationRejectReason_vals[msg_idx].strptr + ? RegistrationRejectReason_vals[msg_idx].strptr + : "Unknown registration reject reason"; + rrj_reason_idx[msg_idx] = row_idx; + + stat_tap_init_table_row(table, row_idx, num_fields, items); + row_idx++; + msg_idx++; + } while (RegistrationRejectReason_vals[msg_idx].strptr); + + msg_idx = 0; + do + { + items[MESSAGE_TYPE_COLUMN].value.string_value = + UnregRequestReason_vals[msg_idx].strptr + ? UnregRequestReason_vals[msg_idx].strptr + : "Unknown unregistration request reason"; + urq_reason_idx[msg_idx] = row_idx; + + stat_tap_init_table_row(table, row_idx, num_fields, items); + row_idx++; + msg_idx++; + } while (UnregRequestReason_vals[msg_idx].strptr); + + msg_idx = 0; + do + { + items[MESSAGE_TYPE_COLUMN].value.string_value = + UnregRejectReason_vals[msg_idx].strptr + ? UnregRejectReason_vals[msg_idx].strptr + : "Unknown unregistration reject reason"; + urj_reason_idx[msg_idx] = row_idx; + + stat_tap_init_table_row(table, row_idx, num_fields, items); + row_idx++; + msg_idx++; + } while (UnregRejectReason_vals[msg_idx].strptr); + + msg_idx = 0; + do + { + items[MESSAGE_TYPE_COLUMN].value.string_value = + AdmissionRejectReason_vals[msg_idx].strptr + ? AdmissionRejectReason_vals[msg_idx].strptr + : "Unknown admission reject reason"; + arj_reason_idx[msg_idx] = row_idx; + + stat_tap_init_table_row(table, row_idx, num_fields, items); + row_idx++; + msg_idx++; + } while (AdmissionRejectReason_vals[msg_idx].strptr); + + msg_idx = 0; + do + { + items[MESSAGE_TYPE_COLUMN].value.string_value = + BandRejectReason_vals[msg_idx].strptr + ? BandRejectReason_vals[msg_idx].strptr + : "Unknown band reject reason"; + brj_reason_idx[msg_idx] = row_idx; + + stat_tap_init_table_row(table, row_idx, num_fields, items); + row_idx++; + msg_idx++; + } while (BandRejectReason_vals[msg_idx].strptr); + + msg_idx = 0; + do + { + items[MESSAGE_TYPE_COLUMN].value.string_value = + DisengageReason_vals[msg_idx].strptr + ? DisengageReason_vals[msg_idx].strptr + : "Unknown disengage reason"; + drq_reason_idx[msg_idx] = row_idx; + + stat_tap_init_table_row(table, row_idx, num_fields, items); + row_idx++; + msg_idx++; + } while (DisengageReason_vals[msg_idx].strptr); + + msg_idx = 0; + do + { + items[MESSAGE_TYPE_COLUMN].value.string_value = + DisengageRejectReason_vals[msg_idx].strptr + ? DisengageRejectReason_vals[msg_idx].strptr + : "Unknown disengage reject reason"; + drj_reason_idx[msg_idx] = row_idx; + + stat_tap_init_table_row(table, row_idx, num_fields, items); + row_idx++; + msg_idx++; + } while (DisengageRejectReason_vals[msg_idx].strptr); + + msg_idx = 0; + do + { + items[MESSAGE_TYPE_COLUMN].value.string_value = + LocationRejectReason_vals[msg_idx].strptr + ? LocationRejectReason_vals[msg_idx].strptr + : "Unknown location reject reason"; + lrj_reason_idx[msg_idx] = row_idx; + + stat_tap_init_table_row(table, row_idx, num_fields, items); + row_idx++; + msg_idx++; + } while (LocationRejectReason_vals[msg_idx].strptr); + + msg_idx = 0; + do + { + items[MESSAGE_TYPE_COLUMN].value.string_value = + InfoRequestNakReason_vals[msg_idx].strptr + ? InfoRequestNakReason_vals[msg_idx].strptr + : "Unknown info request nak reason"; + irqnak_reason_idx[msg_idx] = row_idx; + + stat_tap_init_table_row(table, row_idx, num_fields, items); + row_idx++; + msg_idx++; + } while (InfoRequestNakReason_vals[msg_idx].strptr); + + msg_idx = 0; + do + { + items[MESSAGE_TYPE_COLUMN].value.string_value = + h225_ReleaseCompleteReason_vals[msg_idx].strptr + ? h225_ReleaseCompleteReason_vals[msg_idx].strptr + : "Unknown release complete reason"; + rel_cmp_reason_idx[msg_idx] = row_idx; + + stat_tap_init_table_row(table, row_idx, num_fields, items); + row_idx++; + msg_idx++; + } while (h225_ReleaseCompleteReason_vals[msg_idx].strptr); + + msg_idx = 0; + do + { + items[MESSAGE_TYPE_COLUMN].value.string_value = + FacilityReason_vals[msg_idx].strptr + ? FacilityReason_vals[msg_idx].strptr + : "Unknown facility reason"; + facility_reason_idx[msg_idx] = row_idx; + + stat_tap_init_table_row(table, row_idx, num_fields, items); + row_idx++; + msg_idx++; + } while (FacilityReason_vals[msg_idx].strptr); + + + items[MESSAGE_TYPE_COLUMN].value.string_value = "Unknown H.225 message"; + stat_tap_init_table_row(table, row_idx, num_fields, items); + other_idx = row_idx; +} + +static tap_packet_status +h225_stat_packet(void *tapdata, packet_info *pinfo _U_, epan_dissect_t *edt _U_, const void *hpi_ptr, tap_flags_t flags _U_) +{ + stat_data_t* stat_data = (stat_data_t*)tapdata; + const h225_packet_info *hpi = (const h225_packet_info *)hpi_ptr; + int tag_idx = -1; + int reason_idx = -1; + + if(hpi->msg_tag < 0) { /* uninitialized */ + return TAP_PACKET_DONT_REDRAW; + } + + switch (hpi->msg_type) { + + case H225_RAS: + tag_idx = ras_msg_idx[MIN(hpi->msg_tag, (int)RAS_MSG_TYPES-1)]; + + /* Look for reason tag */ + if(hpi->reason < 0) { /* uninitialized */ + break; + } + + switch(hpi->msg_tag) { + + case 2: /* GRJ */ + reason_idx = grj_reason_idx[MIN(hpi->reason, (int)GRJ_REASONS-1)]; + break; + case 5: /* RRJ */ + reason_idx = rrj_reason_idx[MIN(hpi->reason, (int)RRJ_REASONS-1)]; + break; + case 6: /* URQ */ + reason_idx = urq_reason_idx[MIN(hpi->reason, (int)URQ_REASONS-1)]; + break; + case 8: /* URJ */ + reason_idx = urj_reason_idx[MIN(hpi->reason, (int)URJ_REASONS-1)]; + break; + case 11: /* ARJ */ + reason_idx = arj_reason_idx[MIN(hpi->reason, (int)ARJ_REASONS-1)]; + break; + case 14: /* BRJ */ + reason_idx = brj_reason_idx[MIN(hpi->reason, (int)BRJ_REASONS-1)]; + break; + case 15: /* DRQ */ + reason_idx = drq_reason_idx[MIN(hpi->reason, (int)DRQ_REASONS-1)]; + break; + case 17: /* DRJ */ + reason_idx = drj_reason_idx[MIN(hpi->reason, (int)DRJ_REASONS-1)]; + break; + case 20: /* LRJ */ + reason_idx = lrj_reason_idx[MIN(hpi->reason, (int)LRJ_REASONS-1)]; + break; + case 29: /* IRQ Nak */ + reason_idx = irqnak_reason_idx[MIN(hpi->reason, (int)IRQNAK_REASONS-1)]; + break; + default: + /* do nothing */ + break; + } + + break; + + case H225_CS: + tag_idx = cs_msg_idx[MIN(hpi->msg_tag, (int)CS_MSG_TYPES-1)]; + + /* Look for reason tag */ + if(hpi->reason < 0) { /* uninitialized */ + break; + } + + switch(hpi->msg_tag) { + + case 5: /* ReleaseComplete */ + reason_idx = rel_cmp_reason_idx[MIN(hpi->reason, (int)REL_CMP_REASONS-1)]; + break; + case 6: /* Facility */ + reason_idx = facility_reason_idx[MIN(hpi->reason, (int)FACILITY_REASONS-1)]; + break; + default: + /* do nothing */ + break; + } + + break; + + case H225_OTHERS: + default: + tag_idx = other_idx; + } + + if (tag_idx >= 0) { + stat_tap_table*table = g_array_index(stat_data->stat_tap_data->tables, stat_tap_table*, 0); + stat_tap_table_item_type* msg_data = stat_tap_get_field_data(table, tag_idx, COUNT_COLUMN);; + msg_data->value.uint_value++; + stat_tap_set_field_data(table, tag_idx, COUNT_COLUMN, msg_data); + + if (reason_idx >= 0) { + msg_data = stat_tap_get_field_data(table, reason_idx, COUNT_COLUMN);; + msg_data->value.uint_value++; + stat_tap_set_field_data(table, reason_idx, COUNT_COLUMN, msg_data); + } + + return TAP_PACKET_REDRAW; + } + return TAP_PACKET_DONT_REDRAW; +} + +static void +h225_stat_reset(stat_tap_table* table) +{ + guint element; + stat_tap_table_item_type* item_data; + + for (element = 0; element < table->num_elements; element++) + { + item_data = stat_tap_get_field_data(table, element, COUNT_COLUMN); + item_data->value.uint_value = 0; + stat_tap_set_field_data(table, element, COUNT_COLUMN, item_data); + } +} + +/*--- proto_register_h225 -------------------------------------------*/ +void proto_register_h225(void) { + + /* List of fields */ + static hf_register_info hf[] = { + { &hf_h221Manufacturer, + { "H.225 Manufacturer", "h225.Manufacturer", FT_UINT32, BASE_HEX, + VALS(H221ManufacturerCode_vals), 0, "h225.H.221 Manufacturer", HFILL }}, + + { &hf_h225_ras_req_frame, + { "RAS Request Frame", "h225.ras.reqframe", FT_FRAMENUM, BASE_NONE, + NULL, 0, NULL, HFILL }}, + + { &hf_h225_ras_rsp_frame, + { "RAS Response Frame", "h225.ras.rspframe", FT_FRAMENUM, BASE_NONE, + NULL, 0, NULL, HFILL }}, + + { &hf_h225_ras_dup, + { "Duplicate RAS Message", "h225.ras.dup", FT_UINT32, BASE_DEC, + NULL, 0, NULL, HFILL }}, + + { &hf_h225_ras_deltatime, + { "RAS Service Response Time", "h225.ras.timedelta", FT_RELATIVE_TIME, BASE_NONE, + NULL, 0, "Timedelta between RAS-Request and RAS-Response", HFILL }}, + + { &hf_h225_debug_dissector_try_string, + { "*** DEBUG dissector_try_string", "h225.debug.dissector_try_string", FT_STRING, BASE_NONE, + NULL, 0, NULL, HFILL }}, + +#include "packet-h225-hfarr.c" + }; + + /* List of subtrees */ + static gint *ett[] = { + &ett_h225, +#include "packet-h225-ettarr.c" + }; + + static tap_param h225_stat_params[] = { + { PARAM_FILTER, "filter", "Filter", NULL, TRUE } + }; + + static stat_tap_table_ui h225_stat_table = { + REGISTER_STAT_GROUP_TELEPHONY, + "H.225", + PFNAME, + "h225,counter", + h225_stat_init, + h225_stat_packet, + h225_stat_reset, + NULL, + NULL, + sizeof(h225_stat_fields)/sizeof(stat_tap_table_item), h225_stat_fields, + sizeof(h225_stat_params)/sizeof(tap_param), h225_stat_params, + NULL, + 0 + }; + + module_t *h225_module; + int i, proto_h225_ras; + + /* Register protocol */ + proto_h225 = proto_register_protocol(PNAME, PSNAME, PFNAME); + + /* Create a "fake" protocol to get proper display strings for SRT dialogs */ + proto_h225_ras = proto_register_protocol("H.225 RAS", "H.225 RAS", "h225_ras"); + + /* Register fields and subtrees */ + proto_register_field_array(proto_h225, hf, array_length(hf)); + proto_register_subtree_array(ett, array_length(ett)); + + h225_module = prefs_register_protocol(proto_h225, proto_reg_handoff_h225); + prefs_register_uint_preference(h225_module, "tls.port", + "H.225 TLS Port", + "H.225 Server TLS Port", + 10, &h225_tls_port); + prefs_register_bool_preference(h225_module, "reassembly", + "Reassemble H.225 messages spanning multiple TCP segments", + "Whether the H.225 dissector should reassemble messages spanning multiple TCP segments." + " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.", + &h225_reassembly); + prefs_register_bool_preference(h225_module, "h245_in_tree", + "Display tunnelled H.245 inside H.225.0 tree", + "ON - display tunnelled H.245 inside H.225.0 tree, OFF - display tunnelled H.245 in root tree after H.225.0", + &h225_h245_in_tree); + prefs_register_bool_preference(h225_module, "tp_in_tree", + "Display tunnelled protocols inside H.225.0 tree", + "ON - display tunnelled protocols inside H.225.0 tree, OFF - display tunnelled protocols in root tree after H.225.0", + &h225_tp_in_tree); + + register_dissector(PFNAME, dissect_h225_H323UserInformation, proto_h225); + register_dissector("h323ui",dissect_h225_H323UserInformation, proto_h225); + h225ras_handle = register_dissector("h225.ras", dissect_h225_h225_RasMessage, proto_h225); + + nsp_object_dissector_table = register_dissector_table("h225.nsp.object", "H.225 NonStandardParameter Object", proto_h225, FT_STRING, STRING_CASE_SENSITIVE); + nsp_h221_dissector_table = register_dissector_table("h225.nsp.h221", "H.225 NonStandardParameter h221", proto_h225, FT_UINT32, BASE_HEX); + tp_dissector_table = register_dissector_table("h225.tp", "H.225 Tunnelled Protocol", proto_h225, FT_STRING, STRING_CASE_SENSITIVE); + gef_name_dissector_table = register_dissector_table("h225.gef.name", "H.225 Generic Extensible Framework Name", proto_h225, FT_STRING, STRING_CASE_SENSITIVE); + gef_content_dissector_table = register_dissector_table("h225.gef.content", "H.225 Generic Extensible Framework Content", proto_h225, FT_STRING, STRING_CASE_SENSITIVE); + + for(i=0;i<7;i++) { + ras_calls[i] = wmem_map_new_autoreset(wmem_epan_scope(), wmem_file_scope(), h225ras_call_hash, h225ras_call_equal); + } + + h225_tap = register_tap(PFNAME); + + register_rtd_table(proto_h225_ras, PFNAME, NUM_RAS_STATS, 1, ras_message_category, h225rassrt_packet, NULL); + + register_stat_tap_table_ui(&h225_stat_table); + + oid_add_from_string("Version 1","0.0.8.2250.0.1"); + oid_add_from_string("Version 2","0.0.8.2250.0.2"); + oid_add_from_string("Version 3","0.0.8.2250.0.3"); + oid_add_from_string("Version 4","0.0.8.2250.0.4"); + oid_add_from_string("Version 5","0.0.8.2250.0.5"); + oid_add_from_string("Version 6","0.0.8.2250.0.6"); +} + + +/*--- proto_reg_handoff_h225 ---------------------------------------*/ +void +proto_reg_handoff_h225(void) +{ + static gboolean h225_prefs_initialized = FALSE; + static dissector_handle_t q931_tpkt_handle; + static guint saved_h225_tls_port; + + if (!h225_prefs_initialized) { + dissector_add_uint_range_with_preference("udp.port", UDP_PORT_RAS_RANGE, h225ras_handle); + + h245_handle = find_dissector("h245"); + h245dg_handle = find_dissector("h245dg"); + h4501_handle = find_dissector_add_dependency("h4501", proto_h225); + data_handle = find_dissector("data"); + h225_prefs_initialized = TRUE; + q931_tpkt_handle = find_dissector("q931.tpkt"); + } else { + ssl_dissector_delete(saved_h225_tls_port, q931_tpkt_handle); + } + + saved_h225_tls_port = h225_tls_port; + ssl_dissector_add(saved_h225_tls_port, q931_tpkt_handle); +} + +static h225_packet_info* create_h225_packet_info(packet_info *pinfo) +{ + h225_packet_info* pi = wmem_new0(pinfo->pool, h225_packet_info); + + pi->msg_type = H225_OTHERS; + pi->cs_type = H225_OTHER; + pi->msg_tag = -1; + pi->reason = -1; + + return pi; +} + +/* + The following function contains the routines for RAS request/response matching. + A RAS response matches with a request, if both messages have the same + RequestSequenceNumber, belong to the same IP conversation and belong to the same + RAS "category" (e.g. Admission, Registration). + + We use hashtables to access the lists of RAS calls (request/response pairs). + We have one hashtable for each RAS category. The hashkeys consist of the + non-unique 16-bit RequestSequenceNumber and values representing the conversation. + + In big capture files, we might get different requests with identical keys. + These requests aren't necessarily duplicates. They might be valid new requests. + At the moment we just use the timedelta between the last valid and the new request + to decide if the new request is a duplicate or not. There might be better ways. + Two thresholds are defined below. + + However the decision is made, another problem arises. We can't just add those + requests to our hashtables. Instead we create lists of RAS calls with identical keys. + The hashtables for RAS calls contain now pointers to the first RAS call in a list of + RAS calls with identical keys. + These lists aren't expected to contain more than 3 items and are usually single item + lists. So we don't need an expensive but intelligent way to access these lists + (e.g. hashtables). Just walk through such a list. +*/ + +#define THRESHOLD_REPEATED_RESPONDED_CALL 300 +#define THRESHOLD_REPEATED_NOT_RESPONDED_CALL 1800 + +static void ras_call_matching(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, h225_packet_info *pi) +{ + proto_item *hidden_item; + conversation_t* conversation = NULL; + h225ras_call_info_key h225ras_call_key; + h225ras_call_t *h225ras_call = NULL; + nstime_t delta; + guint msg_category; + + if(pi->msg_type == H225_RAS && pi->msg_tag < 21) { + /* make RAS request/response matching only for tags from 0 to 20 for now */ + + msg_category = pi->msg_tag / 3; + if(pi->msg_tag % 3 == 0) { /* Request Message */ + conversation = find_or_create_conversation(pinfo); + + /* prepare the key data */ + h225ras_call_key.reqSeqNum = pi->requestSeqNum; + h225ras_call_key.conversation = conversation; + + /* look up the request */ + h225ras_call = find_h225ras_call(&h225ras_call_key ,msg_category); + + if (h225ras_call != NULL) { + /* We've seen requests with this reqSeqNum, with the same + source and destination, before - do we have + *this* request already? */ + /* Walk through list of ras requests with identical keys */ + do { + if (pinfo->num == h225ras_call->req_num) { + /* We have seen this request before -> do nothing */ + break; + } + + /* if end of list is reached, exit loop and decide if request is duplicate or not. */ + if (h225ras_call->next_call == NULL) { + if ( (pinfo->num > h225ras_call->rsp_num && h225ras_call->rsp_num != 0 + && pinfo->abs_ts.secs > (h225ras_call->req_time.secs + THRESHOLD_REPEATED_RESPONDED_CALL) ) + ||(pinfo->num > h225ras_call->req_num && h225ras_call->rsp_num == 0 + && pinfo->abs_ts.secs > (h225ras_call->req_time.secs + THRESHOLD_REPEATED_NOT_RESPONDED_CALL) ) ) + { + /* if last request has been responded + and this request appears after last response (has bigger frame number) + and last request occurred more than 300 seconds ago, + or if last request hasn't been responded + and this request appears after last request (has bigger frame number) + and last request occurred more than 1800 seconds ago, + we decide that we have a new request */ + /* Append new ras call to list */ + h225ras_call = append_h225ras_call(h225ras_call, pinfo, &pi->guid, msg_category); + } else { + /* No, so it's a duplicate request. + Mark it as such. */ + pi->is_duplicate = TRUE; + hidden_item = proto_tree_add_uint(tree, hf_h225_ras_dup, tvb, 0,0, pi->requestSeqNum); + proto_item_set_hidden(hidden_item); + } + break; + } + h225ras_call = h225ras_call->next_call; + } while (h225ras_call != NULL ); + } + else { + h225ras_call = new_h225ras_call(&h225ras_call_key, pinfo, &pi->guid, msg_category); + } + + /* add link to response frame, if available */ + if(h225ras_call && h225ras_call->rsp_num != 0){ + proto_item *ti = + proto_tree_add_uint_format(tree, hf_h225_ras_rsp_frame, tvb, 0, 0, h225ras_call->rsp_num, + "The response to this request is in frame %u", + h225ras_call->rsp_num); + proto_item_set_generated(ti); + } + + /* end of request message handling*/ + } + else { /* Confirm or Reject Message */ + conversation = find_conversation_pinfo(pinfo, 0); + if (conversation != NULL) { + /* look only for matching request, if + matching conversation is available. */ + h225ras_call_key.reqSeqNum = pi->requestSeqNum; + h225ras_call_key.conversation = conversation; + h225ras_call = find_h225ras_call(&h225ras_call_key ,msg_category); + if(h225ras_call) { + /* find matching ras_call in list of ras calls with identical keys */ + do { + if (pinfo->num == h225ras_call->rsp_num) { + /* We have seen this response before -> stop now with matching ras call */ + break; + } + + /* Break when list end is reached */ + if(h225ras_call->next_call == NULL) { + break; + } + h225ras_call = h225ras_call->next_call; + } while (h225ras_call != NULL) ; + + if (!h225ras_call) { + return; + } + + /* if this is an ACF, ARJ or DCF, DRJ, give guid to tap and make it filterable */ + if (msg_category == 3 || msg_category == 5) { + pi->guid = h225ras_call->guid; + hidden_item = proto_tree_add_guid(tree, hf_h225_guid, tvb, 0, GUID_LEN, &pi->guid); + proto_item_set_hidden(hidden_item); + } + + if (h225ras_call->rsp_num == 0) { + /* We have not yet seen a response to that call, so + this must be the first response; remember its + frame number. */ + h225ras_call->rsp_num = pinfo->num; + } + else { + /* We have seen a response to this call - but was it + *this* response? */ + if (h225ras_call->rsp_num != pinfo->num) { + /* No, so it's a duplicate response. + Mark it as such. */ + pi->is_duplicate = TRUE; + hidden_item = proto_tree_add_uint(tree, hf_h225_ras_dup, tvb, 0,0, pi->requestSeqNum); + proto_item_set_hidden(hidden_item); + } + } + + if(h225ras_call->req_num != 0){ + proto_item *ti; + h225ras_call->responded = TRUE; + pi->request_available = TRUE; + + /* Indicate the frame to which this is a reply. */ + ti = proto_tree_add_uint_format(tree, hf_h225_ras_req_frame, tvb, 0, 0, h225ras_call->req_num, + "This is a response to a request in frame %u", h225ras_call->req_num); + proto_item_set_generated(ti); + + /* Calculate RAS Service Response Time */ + nstime_delta(&delta, &pinfo->abs_ts, &h225ras_call->req_time); + pi->delta_time = delta; /* give it to tap */ + + /* display Ras Service Response Time and make it filterable */ + ti = proto_tree_add_time(tree, hf_h225_ras_deltatime, tvb, 0, 0, &(pi->delta_time)); + proto_item_set_generated(ti); + } + } + } + } + } +} + +/* + * Editor modelines - https://www.wireshark.org/tools/modelines.html + * + * Local Variables: + * c-basic-offset: 2 + * tab-width: 8 + * indent-tabs-mode: nil + * End: + * + * vi: set shiftwidth=2 tabstop=8 expandtab: + * :indentSize=2:tabSize=8:noTabs=true: + */ diff --git a/epan/dissectors/asn1/h225/packet-h225-template.h b/epan/dissectors/asn1/h225/packet-h225-template.h new file mode 100644 index 00000000..6a5501d6 --- /dev/null +++ b/epan/dissectors/asn1/h225/packet-h225-template.h @@ -0,0 +1,83 @@ +/* packet-h225.h + * Routines for h225 packet dissection + * Copyright 2005, Anders Broman <anders.broman@ericsson.com> + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1998 Gerald Combs + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef PACKET_H225_H +#define PACKET_H225_H + +typedef enum _h225_msg_type { + H225_RAS, + H225_CS, + H225_OTHERS +} h225_msg_type; + +typedef enum _h225_cs_type { + H225_SETUP, + H225_CALL_PROCEDING, + H225_CONNECT, + H225_ALERTING, + H225_INFORMATION, + H225_RELEASE_COMPLET, + H225_FACILITY, + H225_PROGRESS, + H225_EMPTY, + H225_STATUS, + H225_STATUS_INQUIRY, + H225_SETUP_ACK, + H225_NOTIFY, + H225_OTHER +} h225_cs_type; + +typedef struct _h225_packet_info { + h225_msg_type msg_type; /* ras or cs message */ + h225_cs_type cs_type; /* cs message type */ + gint msg_tag; /* message tag*/ + gint reason; /* reason tag, if available */ + guint requestSeqNum; /* request sequence number of ras-message, if available */ + e_guid_t guid; /* globally unique call id */ + gboolean is_duplicate; /* true, if this is a repeated message */ + gboolean request_available; /* true, if response matches to a request */ + nstime_t delta_time; /* this is the RAS response time delay */ + /* added for h225 conversations analysis */ + gboolean is_faststart; /* true, if faststart field is included */ + gboolean is_h245; + gboolean is_h245Tunneling; + guint32 h245_address; + guint16 h245_port; + gchar dialedDigits[129]; /* Dialed Digits in the LRQ and LCF used for voip analysis */ + gboolean is_destinationInfo; + gchar frame_label[50]; /* the Frame label used by graph_analysis, what is a abreviation of cinfo */ +} h225_packet_info; + +/* + * the following allows TAP code access to the messages + * without having to duplicate it. With MSVC and a + * libwireshark.dll, we need a special declaration. + */ + +#include <epan/asn1.h> +#include "packet-per.h" + +#include "packet-h225-exp.h" + +#endif /* PACKET_H225_H */ + +/* + * Editor modelines - https://www.wireshark.org/tools/modelines.html + * + * Local Variables: + * c-basic-offset: 2 + * tab-width: 8 + * indent-tabs-mode: nil + * End: + * + * vi: set shiftwidth=2 tabstop=8 expandtab: + * :indentSize=2:tabSize=8:noTabs=true: + */ |