From e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 10 Apr 2024 22:34:10 +0200 Subject: Adding upstream version 4.2.2. Signed-off-by: Daniel Baumann --- epan/dissectors/asn1/h245/CMakeLists.txt | 42 + .../asn1/h245/MULTIMEDIA-SYSTEM-CONTROL.asn | 3410 ++++++++++++++++++++ epan/dissectors/asn1/h245/h245.cnf | 1425 ++++++++ epan/dissectors/asn1/h245/packet-h245-template.c | 598 ++++ epan/dissectors/asn1/h245/packet-h245-template.h | 119 + 5 files changed, 5594 insertions(+) create mode 100644 epan/dissectors/asn1/h245/CMakeLists.txt create mode 100644 epan/dissectors/asn1/h245/MULTIMEDIA-SYSTEM-CONTROL.asn create mode 100644 epan/dissectors/asn1/h245/h245.cnf create mode 100644 epan/dissectors/asn1/h245/packet-h245-template.c create mode 100644 epan/dissectors/asn1/h245/packet-h245-template.h (limited to 'epan/dissectors/asn1/h245') diff --git a/epan/dissectors/asn1/h245/CMakeLists.txt b/epan/dissectors/asn1/h245/CMakeLists.txt new file mode 100644 index 00000000..ba97d92b --- /dev/null +++ b/epan/dissectors/asn1/h245/CMakeLists.txt @@ -0,0 +1,42 @@ +# CMakeLists.txt +# +# Wireshark - Network traffic analyzer +# By Gerald Combs +# Copyright 1998 Gerald Combs +# +# SPDX-License-Identifier: GPL-2.0-or-later +# + +set( PROTOCOL_NAME h245 ) + +set( PROTO_OPT ) + +set( EXPORT_FILES + ${PROTOCOL_NAME}-exp.cnf +) + +set( EXT_ASN_FILE_LIST +) + +set( ASN_FILE_LIST + MULTIMEDIA-SYSTEM-CONTROL.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 +) + +ASN2WRS() diff --git a/epan/dissectors/asn1/h245/MULTIMEDIA-SYSTEM-CONTROL.asn b/epan/dissectors/asn1/h245/MULTIMEDIA-SYSTEM-CONTROL.asn new file mode 100644 index 00000000..3324b082 --- /dev/null +++ b/epan/dissectors/asn1/h245/MULTIMEDIA-SYSTEM-CONTROL.asn @@ -0,0 +1,3410 @@ +-- MULTIMEDIA-SYSTEM-CONTROL.asn +-- +-- Taken from ITU ASN.1 database +-- http://www.itu.int/ITU-T/formal-language/itu-t/h/h245/2009v15/MULTIMEDIA-SYSTEM-CONTROL.asn +-- + +-- Module MULTIMEDIA-SYSTEM-CONTROL (H.245:12/2009) +MULTIMEDIA-SYSTEM-CONTROL {itu-t(0) recommendation(0) h(8) h245(245) + version(0) 15 multimedia-system-control(0)} DEFINITIONS AUTOMATIC TAGS ::= +BEGIN + +-- Export all symbols +-- ======================================================================= +-- Top level Messages +-- ======================================================================= +MultimediaSystemControlMessage ::= CHOICE { + request RequestMessage, + response ResponseMessage, + command CommandMessage, + indication IndicationMessage, + ... +} + +-- A RequestMessage results in action and requires an immediate response +RequestMessage ::= CHOICE { + nonStandard NonStandardMessage, + masterSlaveDetermination MasterSlaveDetermination, + terminalCapabilitySet TerminalCapabilitySet, + openLogicalChannel OpenLogicalChannel, + closeLogicalChannel CloseLogicalChannel, + requestChannelClose RequestChannelClose, + multiplexEntrySend MultiplexEntrySend, + requestMultiplexEntry RequestMultiplexEntry, + requestMode RequestMode, + roundTripDelayRequest RoundTripDelayRequest, + maintenanceLoopRequest MaintenanceLoopRequest, + ..., + communicationModeRequest CommunicationModeRequest, + conferenceRequest ConferenceRequest, + multilinkRequest MultilinkRequest, + logicalChannelRateRequest LogicalChannelRateRequest, + genericRequest GenericMessage +} + +-- A ResponseMessage is the response to a RequestMessage +ResponseMessage ::= CHOICE { + nonStandard NonStandardMessage, + masterSlaveDeterminationAck MasterSlaveDeterminationAck, + masterSlaveDeterminationReject MasterSlaveDeterminationReject, + terminalCapabilitySetAck TerminalCapabilitySetAck, + terminalCapabilitySetReject TerminalCapabilitySetReject, + openLogicalChannelAck OpenLogicalChannelAck, + openLogicalChannelReject OpenLogicalChannelReject, + closeLogicalChannelAck CloseLogicalChannelAck, + requestChannelCloseAck RequestChannelCloseAck, + requestChannelCloseReject RequestChannelCloseReject, + multiplexEntrySendAck MultiplexEntrySendAck, + multiplexEntrySendReject MultiplexEntrySendReject, + requestMultiplexEntryAck RequestMultiplexEntryAck, + requestMultiplexEntryReject RequestMultiplexEntryReject, + requestModeAck RequestModeAck, + requestModeReject RequestModeReject, + roundTripDelayResponse RoundTripDelayResponse, + maintenanceLoopAck MaintenanceLoopAck, + maintenanceLoopReject MaintenanceLoopReject, + ..., + communicationModeResponse CommunicationModeResponse, + conferenceResponse ConferenceResponse, + multilinkResponse MultilinkResponse, + logicalChannelRateAcknowledge LogicalChannelRateAcknowledge, + logicalChannelRateReject LogicalChannelRateReject, + genericResponse GenericMessage +} + +-- A CommandMessage requires action, but no explicit response +CommandMessage ::= CHOICE { + nonStandard NonStandardMessage, + maintenanceLoopOffCommand MaintenanceLoopOffCommand, + sendTerminalCapabilitySet SendTerminalCapabilitySet, + encryptionCommand EncryptionCommand, + flowControlCommand FlowControlCommand, + endSessionCommand EndSessionCommand, + miscellaneousCommand MiscellaneousCommand, + ..., + communicationModeCommand CommunicationModeCommand, + conferenceCommand ConferenceCommand, + h223MultiplexReconfiguration H223MultiplexReconfiguration, + newATMVCCommand NewATMVCCommand, + mobileMultilinkReconfigurationCommand MobileMultilinkReconfigurationCommand, + genericCommand GenericMessage +} + +-- An IndicationMessage is information that does not require action or response +IndicationMessage ::= CHOICE { + nonStandard NonStandardMessage, + functionNotUnderstood FunctionNotUnderstood, + masterSlaveDeterminationRelease MasterSlaveDeterminationRelease, + terminalCapabilitySetRelease TerminalCapabilitySetRelease, + openLogicalChannelConfirm OpenLogicalChannelConfirm, + requestChannelCloseRelease RequestChannelCloseRelease, + multiplexEntrySendRelease MultiplexEntrySendRelease, + requestMultiplexEntryRelease RequestMultiplexEntryRelease, + requestModeRelease RequestModeRelease, + miscellaneousIndication MiscellaneousIndication, + jitterIndication JitterIndication, + h223SkewIndication H223SkewIndication, + newATMVCIndication NewATMVCIndication, + userInput UserInputIndication, + ..., + h2250MaximumSkewIndication H2250MaximumSkewIndication, + mcLocationIndication MCLocationIndication, + conferenceIndication ConferenceIndication, + vendorIdentification VendorIdentification, + functionNotSupported FunctionNotSupported, + multilinkIndication MultilinkIndication, + logicalChannelRateRelease LogicalChannelRateRelease, + flowControlIndication FlowControlIndication, + mobileMultilinkReconfigurationIndication + MobileMultilinkReconfigurationIndication, + genericIndication GenericMessage +} + +-- SequenceNumber is defined here as it is used in a number of Messages +SequenceNumber ::= INTEGER(0..255) + +-- ============================================================================= +-- Generic Message definitions +-- ============================================================================= +GenericMessage ::= SEQUENCE { + messageIdentifier CapabilityIdentifier, + subMessageIdentifier INTEGER(0..127) OPTIONAL, + messageContent SEQUENCE OF GenericParameter OPTIONAL, + ... +} + +GenericInformation ::= GenericMessage + +-- ============================================================================= +-- Non-standard Message definitions +-- ============================================================================= +NonStandardMessage ::= SEQUENCE {nonStandardData NonStandardParameter, + ... +} + +NonStandardParameter ::= SEQUENCE { + nonStandardIdentifier NonStandardIdentifier, + data OCTET STRING +} + +NonStandardIdentifier ::= CHOICE { + object OBJECT IDENTIFIER, + h221NonStandard + SEQUENCE {t35CountryCode INTEGER(0..255), -- country, per -- + -- Annex A/T.35 + t35Extension INTEGER(0..255), + -- assigned nationally unless + -- t35CountryCode is binary + -- 1111 1111, in which case it shall + -- contain the country code + -- according to Annex B/T.35 + manufacturerCode INTEGER(0..65535) -- assigned nationally + } +} + +-- ============================================================================= +-- Master-slave determination definitions +-- ============================================================================= +MasterSlaveDetermination ::= SEQUENCE { + terminalType INTEGER(0..255), + statusDeterminationNumber INTEGER(0..16777215), + ... +} + +MasterSlaveDeterminationAck ::= SEQUENCE { + decision CHOICE {master NULL, + slave NULL}, + ... +} + +MasterSlaveDeterminationReject ::= SEQUENCE { + cause CHOICE {identicalNumbers NULL, + ...}, + ... +} + +MasterSlaveDeterminationRelease ::= SEQUENCE {... +} + +-- ============================================================================= +-- Capability exchange definitions +-- ============================================================================= +TerminalCapabilitySet ::= SEQUENCE { + sequenceNumber SequenceNumber, + protocolIdentifier OBJECT IDENTIFIER, + -- shall be set to the value + -- {itu-t (0) recommendation (0) h (8) 245 + -- version (0) 15} + multiplexCapability MultiplexCapability OPTIONAL, + capabilityTable SET SIZE (1..256) OF CapabilityTableEntry OPTIONAL, + capabilityDescriptors SET SIZE (1..256) OF CapabilityDescriptor OPTIONAL, + ..., + genericInformation SEQUENCE OF GenericInformation OPTIONAL + -- generic information associated + -- with the message +} + +CapabilityTableEntry ::= SEQUENCE { + capabilityTableEntryNumber CapabilityTableEntryNumber, + capability Capability OPTIONAL +} + +CapabilityDescriptor ::= SEQUENCE { + capabilityDescriptorNumber CapabilityDescriptorNumber, + simultaneousCapabilities + SET SIZE (1..256) OF AlternativeCapabilitySet OPTIONAL +} + +AlternativeCapabilitySet ::= + SEQUENCE SIZE (1..256) OF CapabilityTableEntryNumber + +CapabilityTableEntryNumber ::= INTEGER(1..65535) + +CapabilityDescriptorNumber ::= INTEGER(0..255) + +TerminalCapabilitySetAck ::= SEQUENCE { + sequenceNumber SequenceNumber, + ..., + genericInformation SEQUENCE OF GenericInformation OPTIONAL + -- generic information associated + -- with the message +} + +TerminalCapabilitySetReject ::= SEQUENCE { + sequenceNumber SequenceNumber, + cause + CHOICE {unspecified NULL, + undefinedTableEntryUsed NULL, + descriptorCapacityExceeded NULL, + tableEntryCapacityExceeded + CHOICE {highestEntryNumberProcessed CapabilityTableEntryNumber, + noneProcessed NULL}, + ...}, + ..., + genericInformation SEQUENCE OF GenericInformation OPTIONAL + -- generic information associated + -- with the message +} + +TerminalCapabilitySetRelease ::= SEQUENCE { + ..., + genericInformation SEQUENCE OF GenericInformation OPTIONAL + -- generic information associated + -- with the message +} + +-- ============================================================================= +-- Capability exchange definitions: top level capability description +-- ============================================================================= +Capability ::= CHOICE { + nonStandard NonStandardParameter, + receiveVideoCapability VideoCapability, + transmitVideoCapability VideoCapability, + receiveAndTransmitVideoCapability VideoCapability, + receiveAudioCapability AudioCapability, + transmitAudioCapability AudioCapability, + receiveAndTransmitAudioCapability AudioCapability, + receiveDataApplicationCapability DataApplicationCapability, + transmitDataApplicationCapability DataApplicationCapability, + receiveAndTransmitDataApplicationCapability DataApplicationCapability, + h233EncryptionTransmitCapability BOOLEAN, + h233EncryptionReceiveCapability + SEQUENCE {h233IVResponseTime INTEGER(0..255), -- units milliseconds -- + ...}, + ..., + conferenceCapability ConferenceCapability, + h235SecurityCapability H235SecurityCapability, + maxPendingReplacementFor INTEGER(0..255), + receiveUserInputCapability UserInputCapability, + transmitUserInputCapability UserInputCapability, + receiveAndTransmitUserInputCapability UserInputCapability, + genericControlCapability GenericCapability, + receiveMultiplexedStreamCapability MultiplexedStreamCapability, + transmitMultiplexedStreamCapability MultiplexedStreamCapability, + receiveAndTransmitMultiplexedStreamCapability MultiplexedStreamCapability, + receiveRTPAudioTelephonyEventCapability AudioTelephonyEventCapability, + receiveRTPAudioToneCapability AudioToneCapability, + depFecCapability DepFECCapability, -- Deprecated, do not use + multiplePayloadStreamCapability + MultiplePayloadStreamCapability, + fecCapability FECCapability, + redundancyEncodingCap RedundancyEncodingCapability, + oneOfCapabilities AlternativeCapabilitySet +} + +H235SecurityCapability ::= SEQUENCE { + encryptionAuthenticationAndIntegrity EncryptionAuthenticationAndIntegrity, + mediaCapability CapabilityTableEntryNumber, + -- NOTE - The mediaCapability shall refer to Capability Table Entries + -- that do contain, directly or indirectly, one or more transmit, + -- receive, or receiveAndTransmit AudioCapability, VideoCapability, + -- DataApplicationCapability, or similar capabilities indicated by a + -- NonStandardParameter or GenericCapability only + ... +} + +-- ============================================================================= +-- Capability exchange definitions: Multiplex capabilities +-- ============================================================================= +MultiplexCapability ::= CHOICE { + nonStandard NonStandardParameter, + h222Capability H222Capability, + h223Capability H223Capability, + v76Capability V76Capability, + ..., + h2250Capability H2250Capability, + genericMultiplexCapability GenericCapability +} + +H222Capability ::= SEQUENCE { + numberOfVCs INTEGER(1..256), + vcCapability SET OF VCCapability, + ... +} + +VCCapability ::= SEQUENCE { + aal1 + SEQUENCE {nullClockRecovery BOOLEAN, + srtsClockRecovery BOOLEAN, + adaptiveClockRecovery BOOLEAN, + nullErrorCorrection BOOLEAN, + longInterleaver BOOLEAN, + shortInterleaver BOOLEAN, + errorCorrectionOnly BOOLEAN, + structuredDataTransfer BOOLEAN, + partiallyFilledCells BOOLEAN, + ...} OPTIONAL, + aal5 + SEQUENCE {forwardMaximumSDUSize INTEGER(0..65535), -- units octets-- + backwardMaximumSDUSize INTEGER(0..65535), -- units octets-- + ...} OPTIONAL, + transportStream BOOLEAN, + programStream BOOLEAN, + availableBitRates + SEQUENCE {type + CHOICE {singleBitRate INTEGER(1..65535), -- units 64 kbit/s-- + rangeOfBitRates + SEQUENCE {lowerBitRate INTEGER(1..65535), -- units 64 kbit/s-- + higherBitRate INTEGER(1..65535) -- units 64 kbit/s + }}, + ...}, + ..., + aal1ViaGateway + SEQUENCE {gatewayAddress SET SIZE (1..256) OF Q2931Address, + nullClockRecovery BOOLEAN, + srtsClockRecovery BOOLEAN, + adaptiveClockRecovery BOOLEAN, + nullErrorCorrection BOOLEAN, + longInterleaver BOOLEAN, + shortInterleaver BOOLEAN, + errorCorrectionOnly BOOLEAN, + structuredDataTransfer BOOLEAN, + partiallyFilledCells BOOLEAN, + ...} OPTIONAL +} + +H223Capability ::= SEQUENCE { + transportWithI-frames BOOLEAN, -- I-frame transport + + -- of H.245 + videoWithAL1 BOOLEAN, + videoWithAL2 BOOLEAN, + videoWithAL3 BOOLEAN, + audioWithAL1 BOOLEAN, + audioWithAL2 BOOLEAN, + audioWithAL3 BOOLEAN, + dataWithAL1 BOOLEAN, + dataWithAL2 BOOLEAN, + dataWithAL3 BOOLEAN, + maximumAl2SDUSize INTEGER(0..65535), -- units octets + maximumAl3SDUSize INTEGER(0..65535), -- units octets + maximumDelayJitter INTEGER(0..1023), -- units milliseconds + h223MultiplexTableCapability + CHOICE {basic NULL, + enhanced + SEQUENCE {maximumNestingDepth INTEGER(1..15), + maximumElementListSize INTEGER(2..255), + maximumSubElementListSize INTEGER(2..255), + ...}}, + ..., + maxMUXPDUSizeCapability BOOLEAN, + nsrpSupport BOOLEAN, + mobileOperationTransmitCapability + SEQUENCE {modeChangeCapability BOOLEAN, + h223AnnexA BOOLEAN, + h223AnnexADoubleFlag BOOLEAN, + h223AnnexB BOOLEAN, + h223AnnexBwithHeader BOOLEAN, + ...} OPTIONAL, + h223AnnexCCapability H223AnnexCCapability OPTIONAL, + bitRate INTEGER(1..19200) OPTIONAL, -- units of + + -- 100 bit/s + mobileMultilinkFrameCapability + SEQUENCE {maximumSampleSize INTEGER(1..255), -- units octets-- + maximumPayloadLength INTEGER(1..65025), -- units octets-- + ...} OPTIONAL +} + +H223AnnexCCapability ::= SEQUENCE { + videoWithAL1M BOOLEAN, + videoWithAL2M BOOLEAN, + videoWithAL3M BOOLEAN, + audioWithAL1M BOOLEAN, + audioWithAL2M BOOLEAN, + audioWithAL3M BOOLEAN, + dataWithAL1M BOOLEAN, + dataWithAL2M BOOLEAN, + dataWithAL3M BOOLEAN, + alpduInterleaving BOOLEAN, + maximumAL1MPDUSize INTEGER(0..65535), -- units octets + maximumAL2MSDUSize INTEGER(0..65535), -- units octets + maximumAL3MSDUSize INTEGER(0..65535), -- units octets + ..., + rsCodeCapability BOOLEAN OPTIONAL +} + +V76Capability ::= SEQUENCE { + suspendResumeCapabilitywAddress BOOLEAN, + suspendResumeCapabilitywoAddress BOOLEAN, + rejCapability BOOLEAN, + sREJCapability BOOLEAN, + mREJCapability BOOLEAN, + crc8bitCapability BOOLEAN, + crc16bitCapability BOOLEAN, + crc32bitCapability BOOLEAN, + uihCapability BOOLEAN, + numOfDLCS INTEGER(2..8191), + twoOctetAddressFieldCapability BOOLEAN, + loopBackTestCapability BOOLEAN, + n401Capability INTEGER(1..4095), + maxWindowSizeCapability INTEGER(1..127), + v75Capability V75Capability, + ... +} + +V75Capability ::= SEQUENCE {audioHeader BOOLEAN, + ... +} + +H2250Capability ::= SEQUENCE { + maximumAudioDelayJitter INTEGER(0..1023), -- units in + + -- milliseconds + receiveMultipointCapability MultipointCapability, + transmitMultipointCapability MultipointCapability, + receiveAndTransmitMultipointCapability MultipointCapability, + mcCapability + SEQUENCE {centralizedConferenceMC BOOLEAN, + decentralizedConferenceMC BOOLEAN, + ...}, + rtcpVideoControlCapability BOOLEAN, -- FIR and NACK + mediaPacketizationCapability MediaPacketizationCapability, + ..., + transportCapability TransportCapability OPTIONAL, + redundancyEncodingCapability + SEQUENCE SIZE (1..256) OF RedundancyEncodingCapability OPTIONAL, + logicalChannelSwitchingCapability BOOLEAN, + t120DynamicPortCapability BOOLEAN +} + +MediaPacketizationCapability ::= SEQUENCE { + h261aVideoPacketization BOOLEAN, + ..., + rtpPayloadType SEQUENCE SIZE (1..256) OF RTPPayloadType OPTIONAL +} + +RSVPParameters ::= SEQUENCE { + qosMode QOSMode OPTIONAL, + tokenRate INTEGER(1..4294967295) OPTIONAL, + -- rate in bytes/s + bucketSize INTEGER(1..4294967295) OPTIONAL, + -- size in bytes + peakRate INTEGER(1..4294967295) OPTIONAL, + -- peak bandwidth bytes/s + minPoliced INTEGER(1..4294967295) OPTIONAL, + -- + maxPktSize INTEGER(1..4294967295) OPTIONAL, + -- size in bytes + ... +} + +QOSMode ::= CHOICE {guaranteedQOS NULL, + controlledLoad NULL, + ... +} + +ATMParameters ::= SEQUENCE { + maxNTUSize INTEGER(0..65535), -- units in octets + atmUBR BOOLEAN, -- unspecified bit rate + atmrtVBR BOOLEAN, -- real time variable + + -- bit rate + atmnrtVBR BOOLEAN, -- non real time + + -- variable bit rate + atmABR BOOLEAN, -- available bit rate + atmCBR BOOLEAN, -- constant bit rate + ... +} + +ServicePriorityValue ::= SEQUENCE { + nonStandardParameter NonStandardParameter OPTIONAL, + ..., + value INTEGER(0..255) +} + +ServicePriority ::= SEQUENCE { + nonStandardData NonStandardParameter OPTIONAL, + servicePrioritySignalled BOOLEAN, + servicePriorityValue ServicePriorityValue OPTIONAL, + ..., + serviceClass INTEGER(0..4095) OPTIONAL, + serviceSubclass INTEGER(0..255) OPTIONAL +} + +AuthorizationParameters ::= SEQUENCE { + nonStandardData NonStandardParameter OPTIONAL, + ... +} + +QOSType ::= CHOICE {desired NULL, + required NULL, + ... +} + +QOSClass ::= CHOICE { + class0 NULL, + class1 NULL, + class2 NULL, + class3 NULL, + class4 NULL, + class5 NULL, + ... +} + +QOSDescriptor ::= SEQUENCE { + nonStandardData NonStandardParameter OPTIONAL, + qosType QOSType, + qosClass QOSClass, + ... +} + +GenericTransportParameters ::= SEQUENCE { + nonStandardData NonStandardParameter OPTIONAL, + averageRate INTEGER(1..4294967295) OPTIONAL, + -- average bandwidth bytes/s + burst INTEGER(1..4294967295) OPTIONAL, + -- size in bytes + peakRate INTEGER(1..4294967295) OPTIONAL, + -- peak bandwidth bytes/s + maxPktSize INTEGER(1..4294967295) OPTIONAL, + -- size in bytes + ... +} + +QOSCapability ::= SEQUENCE { + nonStandardData NonStandardParameter OPTIONAL, + rsvpParameters RSVPParameters OPTIONAL, + atmParameters ATMParameters OPTIONAL, + ..., + localQoS BOOLEAN OPTIONAL, + genericTransportParameters GenericTransportParameters OPTIONAL, + servicePriority ServicePriority OPTIONAL, + authorizationParameter AuthorizationParameters OPTIONAL, + qosDescriptor QOSDescriptor OPTIONAL, + dscpValue INTEGER(0..63) OPTIONAL +} + +MediaTransportType ::= CHOICE { + ip-UDP NULL, + ip-TCP NULL, + atm-AAL5-UNIDIR NULL, -- virtual circuits used as unidirectional + atm-AAL5-BIDIR NULL, -- virtual circuits used as bidirectional + ..., + atm-AAL5-compressed SEQUENCE {variable-delta BOOLEAN, + ...} +} + +MediaChannelCapability ::= SEQUENCE { + mediaTransport MediaTransportType OPTIONAL, + ... +} + +TransportCapability ::= SEQUENCE { + nonStandard NonStandardParameter OPTIONAL, + qOSCapabilities SEQUENCE SIZE (1..256) OF QOSCapability OPTIONAL, + mediaChannelCapabilities + SEQUENCE SIZE (1..256) OF MediaChannelCapability OPTIONAL, + ... +} + +RedundancyEncodingCapability ::= SEQUENCE { + redundancyEncodingMethod RedundancyEncodingMethod, + primaryEncoding CapabilityTableEntryNumber, + secondaryEncoding + SEQUENCE SIZE (1..256) OF CapabilityTableEntryNumber OPTIONAL, + -- must be Audio, Video, or Data capabilities, not derived + -- capabilities; redundancy order is inferred from number of + -- secondary encodings + ... +} + +RedundancyEncodingMethod ::= CHOICE { + nonStandard NonStandardParameter, + rtpAudioRedundancyEncoding NULL, + ..., + rtpH263VideoRedundancyEncoding RTPH263VideoRedundancyEncoding +} + +RTPH263VideoRedundancyEncoding ::= SEQUENCE { + numberOfThreads INTEGER(1..16), + framesBetweenSyncPoints INTEGER(1..256), + frameToThreadMapping + CHOICE {roundrobin NULL, + custom + SEQUENCE SIZE (1..256) OF RTPH263VideoRedundancyFrameMapping, + -- empty SEQUENCE for capability negotiation + -- meaningful contents only OpenLogicalChannel + ...}, + containedThreads SEQUENCE SIZE (1..256) OF INTEGER(0..15) OPTIONAL, + -- only used for opening of logical channels + ... +} + +RTPH263VideoRedundancyFrameMapping ::= SEQUENCE { + threadNumber INTEGER(0..15), + frameSequence SEQUENCE SIZE (1..256) OF INTEGER(0..255), + ... +} + +MultipointCapability ::= SEQUENCE { + multicastCapability BOOLEAN, + multiUniCastConference BOOLEAN, + mediaDistributionCapability SEQUENCE OF MediaDistributionCapability, + ... +} + +MediaDistributionCapability ::= SEQUENCE { + centralizedControl BOOLEAN, + distributedControl BOOLEAN, -- for further study in + + -- ITU-T Rec. H.323 + centralizedAudio BOOLEAN, + distributedAudio BOOLEAN, + centralizedVideo BOOLEAN, + distributedVideo BOOLEAN, + centralizedData SEQUENCE OF DataApplicationCapability OPTIONAL, + distributedData SEQUENCE OF DataApplicationCapability OPTIONAL, + -- for further study in + -- ITU-T Rec. H.323 + ... +} + +-- ============================================================================= +-- Capability exchange definitions: Video capabilities +-- ============================================================================= +VideoCapability ::= CHOICE { + nonStandard NonStandardParameter, + h261VideoCapability H261VideoCapability, + h262VideoCapability H262VideoCapability, + h263VideoCapability H263VideoCapability, + is11172VideoCapability IS11172VideoCapability, + ..., + genericVideoCapability GenericCapability, + extendedVideoCapability ExtendedVideoCapability +} + +ExtendedVideoCapability ::= SEQUENCE { + videoCapability SEQUENCE OF VideoCapability, + videoCapabilityExtension SEQUENCE OF GenericCapability OPTIONAL, + ... +} + +H261VideoCapability ::= SEQUENCE { + qcifMPI INTEGER(1..4) OPTIONAL, -- units 1/29.97 Hz + cifMPI INTEGER(1..4) OPTIONAL, -- units 1/29.97 Hz + temporalSpatialTradeOffCapability BOOLEAN, + maxBitRate INTEGER(1..19200), -- units of + + -- 100 bit/s + stillImageTransmission BOOLEAN, -- Annex D/H.261 + ..., + videoBadMBsCap BOOLEAN +} + +H262VideoCapability ::= SEQUENCE { + profileAndLevel-SPatML BOOLEAN, + profileAndLevel-MPatLL BOOLEAN, + profileAndLevel-MPatML BOOLEAN, + profileAndLevel-MPatH-14 BOOLEAN, + profileAndLevel-MPatHL BOOLEAN, + profileAndLevel-SNRatLL BOOLEAN, + profileAndLevel-SNRatML BOOLEAN, + profileAndLevel-SpatialatH-14 BOOLEAN, + profileAndLevel-HPatML BOOLEAN, + profileAndLevel-HPatH-14 BOOLEAN, + profileAndLevel-HPatHL BOOLEAN, + videoBitRate INTEGER(0..1073741823) OPTIONAL, -- units 400 bit/s + vbvBufferSize INTEGER(0..262143) OPTIONAL, -- units 16 384 bits + samplesPerLine INTEGER(0..16383) OPTIONAL, -- units samples/line + linesPerFrame INTEGER(0..16383) OPTIONAL, -- units lines/frame + framesPerSecond INTEGER(0..15) OPTIONAL, -- frame_rate_code + luminanceSampleRate INTEGER(0..4294967295) OPTIONAL, -- units samples/s + ..., + videoBadMBsCap BOOLEAN +} + +H263VideoCapability ::= SEQUENCE { + sqcifMPI INTEGER(1..32) OPTIONAL, -- units 1/29.97 Hz + qcifMPI INTEGER(1..32) OPTIONAL, -- units 1/29.97 Hz + cifMPI INTEGER(1..32) OPTIONAL, -- units 1/29.97 Hz + cif4MPI INTEGER(1..32) OPTIONAL, -- units 1/29.97 Hz + cif16MPI INTEGER(1..32) OPTIONAL, -- units 1/29.97 Hz + maxBitRate INTEGER(1..192400), -- units 100 bit/s + unrestrictedVector BOOLEAN, + arithmeticCoding BOOLEAN, + advancedPrediction BOOLEAN, + pbFrames BOOLEAN, + temporalSpatialTradeOffCapability BOOLEAN, + hrd-B INTEGER(0..524287) OPTIONAL, -- units 128 bits + bppMaxKb INTEGER(0..65535) OPTIONAL, -- units 1024 bits + ..., + slowSqcifMPI INTEGER(1..3600) OPTIONAL, -- units seconds/frame + slowQcifMPI INTEGER(1..3600) OPTIONAL, -- units seconds/frame + slowCifMPI INTEGER(1..3600) OPTIONAL, -- units seconds/frame + slowCif4MPI INTEGER(1..3600) OPTIONAL, -- units seconds/frame + slowCif16MPI INTEGER(1..3600) OPTIONAL, -- units seconds/frame + errorCompensation BOOLEAN, + enhancementLayerInfo EnhancementLayerInfo OPTIONAL, + h263Options H263Options OPTIONAL +} + +EnhancementLayerInfo ::= SEQUENCE { + baseBitRateConstrained BOOLEAN, + snrEnhancement SET SIZE (1..14) OF EnhancementOptions OPTIONAL, + spatialEnhancement SET SIZE (1..14) OF EnhancementOptions OPTIONAL, + bPictureEnhancement SET SIZE (1..14) OF BEnhancementParameters OPTIONAL, + ... +} + +BEnhancementParameters ::= SEQUENCE { + enhancementOptions EnhancementOptions, + numberOfBPictures INTEGER(1..64), + ... +} + +EnhancementOptions ::= SEQUENCE { + sqcifMPI INTEGER(1..32) OPTIONAL, -- units 1/29.97 Hz + qcifMPI INTEGER(1..32) OPTIONAL, -- units 1/29.97 Hz + cifMPI INTEGER(1..32) OPTIONAL, -- units 1/29.97 Hz + cif4MPI INTEGER(1..32) OPTIONAL, -- units 1/29.97 Hz + cif16MPI INTEGER(1..32) OPTIONAL, -- units 1/29.97 Hz + maxBitRate INTEGER(1..192400), -- units 100 bit/s + unrestrictedVector BOOLEAN, + arithmeticCoding BOOLEAN, + temporalSpatialTradeOffCapability BOOLEAN, + slowSqcifMPI INTEGER(1..3600) OPTIONAL, -- units seconds/frame + slowQcifMPI INTEGER(1..3600) OPTIONAL, -- units seconds/frame + slowCifMPI INTEGER(1..3600) OPTIONAL, -- units seconds/frame + slowCif4MPI INTEGER(1..3600) OPTIONAL, -- units seconds/frame + slowCif16MPI INTEGER(1..3600) OPTIONAL, -- units seconds/frame + errorCompensation BOOLEAN, + h263Options H263Options OPTIONAL, + ... +} + +H263Options ::= SEQUENCE { + advancedIntraCodingMode BOOLEAN, + deblockingFilterMode BOOLEAN, + improvedPBFramesMode BOOLEAN, + unlimitedMotionVectors BOOLEAN, + fullPictureFreeze BOOLEAN, + partialPictureFreezeAndRelease BOOLEAN, + resizingPartPicFreezeAndRelease BOOLEAN, + fullPictureSnapshot BOOLEAN, + partialPictureSnapshot BOOLEAN, + videoSegmentTagging BOOLEAN, + progressiveRefinement BOOLEAN, + dynamicPictureResizingByFour BOOLEAN, + dynamicPictureResizingSixteenthPel BOOLEAN, + dynamicWarpingHalfPel BOOLEAN, + dynamicWarpingSixteenthPel BOOLEAN, + independentSegmentDecoding BOOLEAN, + slicesInOrder-NonRect BOOLEAN, + slicesInOrder-Rect BOOLEAN, + slicesNoOrder-NonRect BOOLEAN, + slicesNoOrder-Rect BOOLEAN, + alternateInterVLCMode BOOLEAN, + modifiedQuantizationMode BOOLEAN, + reducedResolutionUpdate BOOLEAN, + transparencyParameters TransparencyParameters OPTIONAL, + separateVideoBackChannel BOOLEAN, + refPictureSelection RefPictureSelection OPTIONAL, + customPictureClockFrequency + SET SIZE (1..16) OF CustomPictureClockFrequency OPTIONAL, + customPictureFormat + SET SIZE (1..16) OF CustomPictureFormat OPTIONAL, + modeCombos + SET SIZE (1..16) OF H263VideoModeCombos OPTIONAL, + ..., + videoBadMBsCap BOOLEAN, + h263Version3Options H263Version3Options +} + +TransparencyParameters ::= SEQUENCE { + presentationOrder INTEGER(1..256), + offset-x INTEGER(-262144..262143), -- 1/8 pixels + offset-y INTEGER(-262144..262143), -- 1/8 pixels + scale-x INTEGER(1..255), + scale-y INTEGER(1..255), + ... +} + +RefPictureSelection ::= SEQUENCE { + additionalPictureMemory + SEQUENCE {sqcifAdditionalPictureMemory INTEGER(1..256) OPTIONAL, -- units frame-- + qcifAdditionalPictureMemory INTEGER(1..256) OPTIONAL, -- units frame-- + cifAdditionalPictureMemory INTEGER(1..256) OPTIONAL, -- units frame-- + cif4AdditionalPictureMemory INTEGER(1..256) OPTIONAL, -- units frame-- + cif16AdditionalPictureMemory INTEGER(1..256) OPTIONAL, -- units frame-- + bigCpfAdditionalPictureMemory INTEGER(1..256) OPTIONAL, -- units frame-- + ...} OPTIONAL, + videoMux BOOLEAN, + videoBackChannelSend + CHOICE {none NULL, + ackMessageOnly NULL, + nackMessageOnly NULL, + ackOrNackMessageOnly NULL, + ackAndNackMessage NULL, + ...}, + ..., + enhancedReferencePicSelect + SEQUENCE {subPictureRemovalParameters + SEQUENCE {mpuHorizMBs INTEGER(1..128), + mpuVertMBs INTEGER(1..72), + mpuTotalNumber INTEGER(1..65536), + ...} OPTIONAL, + ...} +} + +CustomPictureClockFrequency ::= SEQUENCE { + clockConversionCode INTEGER(1000..1001), + clockDivisor INTEGER(1..127), + sqcifMPI INTEGER(1..2048) OPTIONAL, + qcifMPI INTEGER(1..2048) OPTIONAL, + cifMPI INTEGER(1..2048) OPTIONAL, + cif4MPI INTEGER(1..2048) OPTIONAL, + cif16MPI INTEGER(1..2048) OPTIONAL, + ... +} + +CustomPictureFormat ::= SEQUENCE { + maxCustomPictureWidth INTEGER(1..2048), -- units 4 pixels + maxCustomPictureHeight INTEGER(1..2048), -- units 4 pixels + minCustomPictureWidth INTEGER(1..2048), -- units 4 pixels + minCustomPictureHeight INTEGER(1..2048), -- units 4 pixels + mPI + SEQUENCE {standardMPI INTEGER(1..31) OPTIONAL, + customPCF + SET SIZE (1..16) OF + SEQUENCE {clockConversionCode INTEGER(1000..1001), + clockDivisor INTEGER(1..127), + customMPI INTEGER(1..2048), + ...} OPTIONAL, + ...}, + pixelAspectInformation + CHOICE {anyPixelAspectRatio BOOLEAN, + pixelAspectCode SET SIZE (1..14) OF INTEGER(1..14), + extendedPAR + SET SIZE (1..256) OF + SEQUENCE {width INTEGER(1..255), + height INTEGER(1..255), + ...}, + ...}, + ... +} + +H263VideoModeCombos ::= SEQUENCE { + h263VideoUncoupledModes H263ModeComboFlags, + h263VideoCoupledModes SET SIZE (1..16) OF H263ModeComboFlags, + ... +} + +H263ModeComboFlags ::= SEQUENCE { + unrestrictedVector BOOLEAN, + arithmeticCoding BOOLEAN, + advancedPrediction BOOLEAN, + pbFrames BOOLEAN, + advancedIntraCodingMode BOOLEAN, + deblockingFilterMode BOOLEAN, + unlimitedMotionVectors BOOLEAN, + slicesInOrder-NonRect BOOLEAN, + slicesInOrder-Rect BOOLEAN, + slicesNoOrder-NonRect BOOLEAN, + slicesNoOrder-Rect BOOLEAN, + improvedPBFramesMode BOOLEAN, + referencePicSelect BOOLEAN, + dynamicPictureResizingByFour BOOLEAN, + dynamicPictureResizingSixteenthPel BOOLEAN, + dynamicWarpingHalfPel BOOLEAN, + dynamicWarpingSixteenthPel BOOLEAN, + reducedResolutionUpdate BOOLEAN, + independentSegmentDecoding BOOLEAN, + alternateInterVLCMode BOOLEAN, + modifiedQuantizationMode BOOLEAN, + ..., + enhancedReferencePicSelect BOOLEAN, + h263Version3Options H263Version3Options +} + +H263Version3Options ::= SEQUENCE { + dataPartitionedSlices BOOLEAN, + fixedPointIDCT0 BOOLEAN, + interlacedFields BOOLEAN, + currentPictureHeaderRepetition BOOLEAN, + previousPictureHeaderRepetition BOOLEAN, + nextPictureHeaderRepetition BOOLEAN, + pictureNumber BOOLEAN, + spareReferencePictures BOOLEAN, + ... +} + +IS11172VideoCapability ::= SEQUENCE { + constrainedBitstream BOOLEAN, + videoBitRate INTEGER(0..1073741823) OPTIONAL, -- units 400 bit/s + vbvBufferSize INTEGER(0..262143) OPTIONAL, -- units 16 384 bits + samplesPerLine INTEGER(0..16383) OPTIONAL, -- units samples/line + linesPerFrame INTEGER(0..16383) OPTIONAL, -- units lines/frame + pictureRate INTEGER(0..15) OPTIONAL, + luminanceSampleRate INTEGER(0..4294967295) OPTIONAL, -- units samples/s + ..., + videoBadMBsCap BOOLEAN +} + +-- ============================================================================= +-- Capability exchange definitions: Audio capabilities +-- ============================================================================= +-- For an H.222 multiplex, the integers indicate the size of the STD buffer +-- in units of 256 octets +-- For an H.223 multiplex, the integers indicate the maximum number of audio +-- frames per AL-SDU +-- For an H.225.0 multiplex, the integers indicate the maximum number of audio +-- frames per packet +AudioCapability ::= CHOICE { + nonStandard NonStandardParameter, + g711Alaw64k INTEGER(1..256), + g711Alaw56k INTEGER(1..256), + g711Ulaw64k INTEGER(1..256), + g711Ulaw56k INTEGER(1..256), + g722-64k INTEGER(1..256), + g722-56k INTEGER(1..256), + g722-48k INTEGER(1..256), + g7231 + SEQUENCE {maxAl-sduAudioFrames INTEGER(1..256), + silenceSuppression BOOLEAN}, + g728 INTEGER(1..256), + g729 INTEGER(1..256), + g729AnnexA INTEGER(1..256), + is11172AudioCapability IS11172AudioCapability, + is13818AudioCapability IS13818AudioCapability, + ..., + g729wAnnexB INTEGER(1..256), + g729AnnexAwAnnexB INTEGER(1..256), + g7231AnnexCCapability G7231AnnexCCapability, + gsmFullRate GSMAudioCapability, + gsmHalfRate GSMAudioCapability, + gsmEnhancedFullRate GSMAudioCapability, + genericAudioCapability GenericCapability, + g729Extensions G729Extensions, + vbd VBDCapability, + audioTelephonyEvent NoPTAudioTelephonyEventCapability, + audioTone NoPTAudioToneCapability +} + +G729Extensions ::= SEQUENCE { + audioUnit INTEGER(1..256) OPTIONAL, + annexA BOOLEAN, + annexB BOOLEAN, + annexD BOOLEAN, + annexE BOOLEAN, + annexF BOOLEAN, + annexG BOOLEAN, + annexH BOOLEAN, + ... +} + +G7231AnnexCCapability ::= SEQUENCE { + maxAl-sduAudioFrames INTEGER(1..256), + silenceSuppression BOOLEAN, + g723AnnexCAudioMode + SEQUENCE {highRateMode0 INTEGER(27..78), -- units octets-- + highRateMode1 INTEGER(27..78), -- units octets-- + lowRateMode0 INTEGER(23..66), -- units octets-- + lowRateMode1 INTEGER(23..66), -- units octets-- + sidMode0 INTEGER(6..17), -- units octets-- + sidMode1 INTEGER(6..17), -- units octets-- + ...} OPTIONAL, + ... +} + +IS11172AudioCapability ::= SEQUENCE { + audioLayer1 BOOLEAN, + audioLayer2 BOOLEAN, + audioLayer3 BOOLEAN, + audioSampling32k BOOLEAN, + audioSampling44k1 BOOLEAN, + audioSampling48k BOOLEAN, + singleChannel BOOLEAN, + twoChannels BOOLEAN, + bitRate INTEGER(1..448), -- units kbit/s + ... +} + +IS13818AudioCapability ::= SEQUENCE { + audioLayer1 BOOLEAN, + audioLayer2 BOOLEAN, + audioLayer3 BOOLEAN, + audioSampling16k BOOLEAN, + audioSampling22k05 BOOLEAN, + audioSampling24k BOOLEAN, + audioSampling32k BOOLEAN, + audioSampling44k1 BOOLEAN, + audioSampling48k BOOLEAN, + singleChannel BOOLEAN, + twoChannels BOOLEAN, + threeChannels2-1 BOOLEAN, + threeChannels3-0 BOOLEAN, + fourChannels2-0-2-0 BOOLEAN, + fourChannels2-2 BOOLEAN, + fourChannels3-1 BOOLEAN, + fiveChannels3-0-2-0 BOOLEAN, + fiveChannels3-2 BOOLEAN, + lowFrequencyEnhancement BOOLEAN, + multilingual BOOLEAN, + bitRate INTEGER(1..1130), -- units kbit/s + ... +} + +GSMAudioCapability ::= SEQUENCE { + audioUnitSize INTEGER(1..256), + comfortNoise BOOLEAN, + scrambled BOOLEAN, + ... +} + +VBDCapability ::= SEQUENCE {type AudioCapability, -- shall not be "vbd" + ... +} + +-- ============================================================================= +-- Capability exchange definitions: Data capabilities +-- ============================================================================= +DataApplicationCapability ::= SEQUENCE { + application + CHOICE {nonStandard NonStandardParameter, + t120 DataProtocolCapability, + dsm-cc DataProtocolCapability, + userData DataProtocolCapability, + t84 + SEQUENCE {t84Protocol DataProtocolCapability, + t84Profile T84Profile}, + t434 DataProtocolCapability, + h224 DataProtocolCapability, + nlpid + SEQUENCE {nlpidProtocol DataProtocolCapability, + nlpidData OCTET STRING}, + dsvdControl NULL, + h222DataPartitioning DataProtocolCapability, + ..., + t30fax DataProtocolCapability, + t140 DataProtocolCapability, + t38fax + SEQUENCE {t38FaxProtocol DataProtocolCapability, + t38FaxProfile T38FaxProfile}, + genericDataCapability GenericCapability}, + maxBitRate INTEGER(0..4294967295), -- units 100 bit/s + ... +} + +DataProtocolCapability ::= CHOICE { + nonStandard NonStandardParameter, + v14buffered NULL, + v42lapm NULL, -- may negotiate to V.42 bis + hdlcFrameTunnelling NULL, + h310SeparateVCStack NULL, + h310SingleVCStack NULL, + transparent NULL, + ..., + segmentationAndReassembly NULL, + hdlcFrameTunnelingwSAR NULL, + v120 NULL, -- as in H.230 + separateLANStack NULL, + v76wCompression + CHOICE {transmitCompression CompressionType, + receiveCompression CompressionType, + transmitAndReceiveCompression CompressionType, + ...}, + tcp NULL, + udp NULL +} + +CompressionType ::= CHOICE {v42bis V42bis, + ... +} + +V42bis ::= SEQUENCE { + numberOfCodewords INTEGER(1..65536), + maximumStringLength INTEGER(1..256), + ... +} + +T84Profile ::= CHOICE { + t84Unrestricted NULL, + t84Restricted + SEQUENCE {qcif BOOLEAN, + cif BOOLEAN, + ccir601Seq BOOLEAN, + ccir601Prog BOOLEAN, + hdtvSeq BOOLEAN, + hdtvProg BOOLEAN, + g3FacsMH200x100 BOOLEAN, + g3FacsMH200x200 BOOLEAN, + g4FacsMMR200x100 BOOLEAN, + g4FacsMMR200x200 BOOLEAN, + jbig200x200Seq BOOLEAN, + jbig200x200Prog BOOLEAN, + jbig300x300Seq BOOLEAN, + jbig300x300Prog BOOLEAN, + digPhotoLow BOOLEAN, + digPhotoMedSeq BOOLEAN, + digPhotoMedProg BOOLEAN, + digPhotoHighSeq BOOLEAN, + digPhotoHighProg BOOLEAN, + ...} +} + +T38FaxProfile ::= SEQUENCE { + fillBitRemoval BOOLEAN, + transcodingJBIG BOOLEAN, + transcodingMMR BOOLEAN, + ..., + version INTEGER(0..255), + -- Version 0, the default, refers to + -- T.38 (2005) + t38FaxRateManagement T38FaxRateManagement, + -- The default Data Rate Management is + -- determined by the choice of + -- DataProtocolCapability + t38FaxUdpOptions T38FaxUdpOptions OPTIONAL, + -- For UDP, t38UDPRedundancy is the default + t38FaxTcpOptions T38FaxTcpOptions OPTIONAL +} + +T38FaxRateManagement ::= CHOICE { + localTCF NULL, + transferredTCF NULL, + ... +} + +T38FaxUdpOptions ::= SEQUENCE { + t38FaxMaxBuffer INTEGER OPTIONAL, + t38FaxMaxDatagram INTEGER OPTIONAL, + t38FaxUdpEC + CHOICE {t38UDPFEC NULL, + t38UDPRedundancy NULL, + ...} +} + +T38FaxTcpOptions ::= SEQUENCE {t38TCPBidirectionalMode BOOLEAN, + ... +} + +-- ============================================================================= +-- Encryption Capability Definitions +-- ============================================================================= +EncryptionAuthenticationAndIntegrity ::= SEQUENCE { + encryptionCapability EncryptionCapability OPTIONAL, + authenticationCapability AuthenticationCapability OPTIONAL, + integrityCapability IntegrityCapability OPTIONAL, + ..., + genericH235SecurityCapability GenericCapability OPTIONAL +} + +EncryptionCapability ::= SEQUENCE SIZE (1..256) OF MediaEncryptionAlgorithm + +MediaEncryptionAlgorithm ::= CHOICE { + nonStandard NonStandardParameter, + algorithm OBJECT IDENTIFIER, -- many defined + + -- in ISO/IEC 9979 + ... +} + +AuthenticationCapability ::= SEQUENCE { + nonStandard NonStandardParameter OPTIONAL, + ..., + antiSpamAlgorithm OBJECT IDENTIFIER OPTIONAL +} + +IntegrityCapability ::= SEQUENCE { + nonStandard NonStandardParameter OPTIONAL, + ... +} + +-- ============================================================================= +-- Capability Exchange Definitions: UserInput +-- ============================================================================= +UserInputCapability ::= CHOICE { + nonStandard SEQUENCE SIZE (1..16) OF NonStandardParameter, + basicString NULL, -- alphanumeric + iA5String NULL, -- alphanumeric + generalString NULL, -- alphanumeric + dtmf NULL, -- supports dtmf using signal + + -- and signalUpdate + hookflash NULL, -- supports hookflash using signal + ..., + extendedAlphanumeric NULL, + encryptedBasicString NULL, -- encrypted Basic string in + + -- encryptedAlphanumeric + encryptedIA5String NULL, -- encrypted IA5 string in + + -- encryptedSignalType + encryptedGeneralString NULL, -- encrypted general string in + + -- extendedAlphanumeric.encryptedalphanumeric + secureDTMF NULL, -- secure DTMF using encryptedSignalType + genericUserInputCapability GenericCapability +} + +-- ============================================================================= +-- Capability Exchange Definitions: Conference +-- ============================================================================= +ConferenceCapability ::= SEQUENCE { + nonStandardData + SEQUENCE OF NonStandardParameter OPTIONAL, + chairControlCapability BOOLEAN, + ..., + videoIndicateMixingCapability BOOLEAN, + multipointVisualizationCapability BOOLEAN OPTIONAL -- same as H.230 MVC +} + +-- ============================================================================= +-- Capability Exchange Definitions: Generic Capability +-- ============================================================================= +GenericCapability ::= SEQUENCE { + capabilityIdentifier CapabilityIdentifier, + maxBitRate INTEGER(0..4294967295) OPTIONAL, + -- Units 100 bit/s + collapsing SEQUENCE OF GenericParameter OPTIONAL, + nonCollapsing SEQUENCE OF GenericParameter OPTIONAL, + nonCollapsingRaw OCTET STRING OPTIONAL, + -- Typically contains ASN.1 + -- PER encoded data describing capability + transport DataProtocolCapability OPTIONAL, + ... +} + +CapabilityIdentifier ::= CHOICE { + standard OBJECT IDENTIFIER, + -- e.g., { itu-t (0) recommendation (0) h (8) 267 + -- version (0) 2 subIdentifier (0)} + h221NonStandard NonStandardParameter, + uuid OCTET STRING(SIZE (16)), + domainBased IA5String(SIZE (1..64)), + ... +} + +-- NOTE - The ranges of parameter values have been selected to ensure that the +-- GenericParameter preamble, standard part of ParameterIdentifier and the +-- encoding of that choice, and the preamble of ParameterValue to fit into +-- 2 octets. +GenericParameter ::= SEQUENCE { + parameterIdentifier ParameterIdentifier, + parameterValue ParameterValue, + supersedes SEQUENCE OF ParameterIdentifier OPTIONAL, + ... +} + +ParameterIdentifier ::= CHOICE { + standard INTEGER(0..127), -- Assigned by + + -- Capability + -- specifications + h221NonStandard NonStandardParameter, -- N.B. + + -- NonStandardIdentifier + -- is not sufficient in + -- this case + uuid OCTET STRING(SIZE (16)), -- For non- + + -- standard + domainBased IA5String(SIZE (1..64)), + ... +} + +ParameterValue ::= CHOICE { + logical NULL, -- Only acceptable if + + -- all entities + -- include this option + booleanArray INTEGER(0..255), -- array of 8 logical + + -- types + unsignedMin INTEGER(0..65535), -- Look for min + + -- common value + unsignedMax INTEGER(0..65535), -- Look for max + + -- common value + unsigned32Min INTEGER(0..4294967295), -- Look for min + + -- common value + unsigned32Max INTEGER(0..4294967295), -- Look for max + + -- common value + octetString OCTET STRING, -- non-collapsing + + -- octet string + genericParameter SEQUENCE OF GenericParameter, + ... +} + +-- ============================================================================= +-- Capability Exchange Definitions: Multiplexed Stream Capability +-- ============================================================================= +MultiplexedStreamCapability ::= SEQUENCE { + multiplexFormat MultiplexFormat, + controlOnMuxStream BOOLEAN, + capabilityOnMuxStream SET SIZE (1..256) OF AlternativeCapabilitySet OPTIONAL, + ... +} + +MultiplexFormat ::= CHOICE { + nonStandard NonStandardParameter, + h222Capability H222Capability, + h223Capability H223Capability, + ... +} + +-- ============================================================================= +-- Capability Exchange Definitions: AudioTelephonyEventCapability and AudioToneCapability +--============================================================================== +AudioTelephonyEventCapability ::= SEQUENCE { + dynamicRTPPayloadType INTEGER(96..127), + audioTelephoneEvent GeneralString, -- As per + + -- in RFC 4733 + ... +} + +AudioToneCapability ::= SEQUENCE {dynamicRTPPayloadType INTEGER(96..127), + ... +} + +-- The following definitions are as above but without a Payload Type field. +NoPTAudioTelephonyEventCapability ::= SEQUENCE { + audioTelephoneEvent GeneralString, -- As per + + -- in RFC 4733 + ... +} + +NoPTAudioToneCapability ::= SEQUENCE {... +} + +-- ============================================================================= +-- Capability Exchange Definitions: MultiplePayloadStreamCapability +-- ============================================================================= +MultiplePayloadStreamCapability ::= SEQUENCE { + capabilities SET SIZE (1..256) OF AlternativeCapabilitySet, + ... +} + +-- ============================================================================= +-- Capability Exchange Definitions: FECCapability +-- ============================================================================= +DepFECCapability ::= CHOICE -- Deprecated, do not use + { + rfc2733 + SEQUENCE {redundancyEncoding BOOLEAN, + separateStream + SEQUENCE {separatePort BOOLEAN, + samePort BOOLEAN, + ...}, + ...}, + ... +} + +FECCapability ::= SEQUENCE { + protectedCapability CapabilityTableEntryNumber, + fecScheme + -- identifies encoding scheme -- OBJECT IDENTIFIER OPTIONAL, + rfc2733Format + CHOICE {rfc2733rfc2198 -- RFC 2198 -- MaxRedundancy, + rfc2733sameport -- separate packet, same port -- MaxRedundancy, + rfc2733diffport -- separate packet and port -- MaxRedundancy + } OPTIONAL, + ... +} + +MaxRedundancy ::= INTEGER(1..MAX) + +-- ============================================================================= +-- Logical channel signalling definitions +-- ============================================================================= +-- "Forward" is used to refer to transmission in the direction from the terminal +-- making the original request for a logical channel to the other terminal, and +-- "reverse" is used to refer to the opposite direction of transmission, in the +-- case of a bidirectional channel request. +OpenLogicalChannel ::= SEQUENCE { + forwardLogicalChannelNumber LogicalChannelNumber, + forwardLogicalChannelParameters + SEQUENCE {portNumber INTEGER(0..65535) OPTIONAL, + dataType DataType, + multiplexParameters + CHOICE {h222LogicalChannelParameters + H222LogicalChannelParameters, + h223LogicalChannelParameters + H223LogicalChannelParameters, + v76LogicalChannelParameters + V76LogicalChannelParameters, + ..., + h2250LogicalChannelParameters + H2250LogicalChannelParameters, + none NULL}, -- for use with Separate Stack when-- + -- multiplexParameters are not + -- required or appropriate + ..., + forwardLogicalChannelDependency LogicalChannelNumber OPTIONAL, + -- also used to refer to the primary + -- logical channel when using video + -- redundancy coding + replacementFor LogicalChannelNumber OPTIONAL + }, + -- Used to specify the reverse channel for bidirectional open request + reverseLogicalChannelParameters + SEQUENCE {dataType DataType, + multiplexParameters + CHOICE {-- H.222 parameters are never present in reverse direction + h223LogicalChannelParameters + H223LogicalChannelParameters, + v76LogicalChannelParameters + V76LogicalChannelParameters, + ..., + h2250LogicalChannelParameters + H2250LogicalChannelParameters} OPTIONAL, -- Not present for H.222-- + ..., + reverseLogicalChannelDependency LogicalChannelNumber OPTIONAL, + -- also used to refer to the primary logical channel when using + -- video redundancy coding + replacementFor LogicalChannelNumber OPTIONAL + } OPTIONAL, -- Not present for unidirectional channel request + ..., + separateStack NetworkAccessParameters OPTIONAL, + -- for Open responder to establish the stack + encryptionSync EncryptionSync OPTIONAL, + genericInformation SEQUENCE OF GenericInformation OPTIONAL +} + +-- generic information associated +-- with the message +LogicalChannelNumber ::= INTEGER(1..65535) + +NetworkAccessParameters ::= SEQUENCE { + distribution + CHOICE {unicast NULL, + multicast NULL, -- for further study in T.120-- + ...} OPTIONAL, + networkAddress + CHOICE {q2931Address Q2931Address, + e164Address IA5String(SIZE (1..128))(FROM ("0123456789#*,")), + localAreaAddress TransportAddress, + ...}, + associateConference BOOLEAN, + externalReference OCTET STRING(SIZE (1..255)) OPTIONAL, + ..., + t120SetupProcedure + CHOICE {originateCall NULL, + waitForCall NULL, + issueQuery NULL, + ...} OPTIONAL +} + +Q2931Address ::= SEQUENCE { + address + CHOICE {internationalNumber NumericString(SIZE (1..16)), + nsapAddress OCTET STRING(SIZE (1..20)), + ...}, + subaddress OCTET STRING(SIZE (1..20)) OPTIONAL, + ... +} + +V75Parameters ::= SEQUENCE {audioHeaderPresent BOOLEAN, + ... +} + +DataType ::= CHOICE { + nonStandard NonStandardParameter, + nullData NULL, + videoData VideoCapability, + audioData AudioCapability, + data DataApplicationCapability, + encryptionData EncryptionMode, + ..., + h235Control NonStandardParameter, + h235Media H235Media, + multiplexedStream MultiplexedStreamParameter, + redundancyEncoding RedundancyEncoding, + multiplePayloadStream MultiplePayloadStream, + depFec DepFECData, -- Deprecated, do not use + fec FECData +} + +H235Media ::= SEQUENCE { + encryptionAuthenticationAndIntegrity EncryptionAuthenticationAndIntegrity, + mediaType + CHOICE {nonStandard NonStandardParameter, + videoData VideoCapability, + audioData AudioCapability, + data DataApplicationCapability, + ..., + redundancyEncoding RedundancyEncoding, + multiplePayloadStream MultiplePayloadStream, + depFec DepFECData, -- Deprecated, do not use-- + fec FECData}, + ... +} + +MultiplexedStreamParameter ::= SEQUENCE { + multiplexFormat MultiplexFormat, + controlOnMuxStream BOOLEAN, + ... +} + +H222LogicalChannelParameters ::= SEQUENCE { + resourceID INTEGER(0..65535), + subChannelID INTEGER(0..8191), + pcr-pid INTEGER(0..8191) OPTIONAL, + programDescriptors OCTET STRING OPTIONAL, + streamDescriptors OCTET STRING OPTIONAL, + ... +} + +H223LogicalChannelParameters ::= SEQUENCE { + adaptationLayerType + CHOICE {nonStandard NonStandardParameter, + al1Framed NULL, + al1NotFramed NULL, + al2WithoutSequenceNumbers NULL, + al2WithSequenceNumbers NULL, + al3 + SEQUENCE {controlFieldOctets INTEGER(0..2), + sendBufferSize + -- units octets -- INTEGER(0..16777215)}, + ..., + al1M H223AL1MParameters, + al2M H223AL2MParameters, + al3M H223AL3MParameters}, + segmentableFlag BOOLEAN, + ... +} + +H223AL1MParameters ::= SEQUENCE { + transferMode CHOICE {framed NULL, + unframed NULL, + ...}, + headerFEC CHOICE {sebch16-7 NULL, + golay24-12 NULL, + ...}, + crcLength + CHOICE {crc4bit NULL, + crc12bit NULL, + crc20bit NULL, + crc28bit NULL, + ..., + crc8bit NULL, + crc16bit NULL, + crc32bit NULL, + crcNotUsed NULL}, + rcpcCodeRate INTEGER(8..32), + arqType + CHOICE {noArq NULL, + typeIArq H223AnnexCArqParameters, + typeIIArq H223AnnexCArqParameters, + ...}, + alpduInterleaving BOOLEAN, + alsduSplitting BOOLEAN, + ..., + rsCodeCorrection INTEGER(0..127) OPTIONAL +} + +H223AL2MParameters ::= SEQUENCE { + headerFEC CHOICE {sebch16-5 NULL, + golay24-12 NULL, + ...}, + alpduInterleaving BOOLEAN, + ... +} + +H223AL3MParameters ::= SEQUENCE { + headerFormat CHOICE {sebch16-7 NULL, + golay24-12 NULL, + ...}, + crcLength + CHOICE {crc4bit NULL, + crc12bit NULL, + crc20bit NULL, + crc28bit NULL, + ..., + crc8bit NULL, + crc16bit NULL, + crc32bit NULL, + crcNotUsed NULL}, + rcpcCodeRate INTEGER(8..32), + arqType + CHOICE {noArq NULL, + typeIArq H223AnnexCArqParameters, + typeIIArq H223AnnexCArqParameters, + ...}, + alpduInterleaving BOOLEAN, + ..., + rsCodeCorrection INTEGER(0..127) OPTIONAL +} + +H223AnnexCArqParameters ::= SEQUENCE { + numberOfRetransmissions + CHOICE {finite INTEGER(0..16), + infinite NULL, + ...}, + sendBufferSize INTEGER(0..16777215), -- units octets + ... +} + +V76LogicalChannelParameters ::= SEQUENCE { + hdlcParameters V76HDLCParameters, + suspendResume + CHOICE {noSuspendResume NULL, + suspendResumewAddress NULL, + suspendResumewoAddress NULL, + ...}, + uIH BOOLEAN, + mode + CHOICE {eRM + SEQUENCE {windowSize INTEGER(1..127), + recovery + CHOICE {rej NULL, + sREJ NULL, + mSREJ NULL, + ...}, + ...}, + uNERM NULL, + ...}, + v75Parameters V75Parameters, + ... +} + +V76HDLCParameters ::= SEQUENCE { + crcLength CRCLength, + n401 INTEGER(1..4095), + loopbackTestProcedure BOOLEAN, + ... +} + +CRCLength ::= CHOICE {crc8bit NULL, + crc16bit NULL, + crc32bit NULL, + ... +} + +H2250LogicalChannelParameters ::= SEQUENCE { + nonStandard SEQUENCE OF NonStandardParameter OPTIONAL, + sessionID INTEGER(0..255), + associatedSessionID INTEGER(1..255) OPTIONAL, + mediaChannel TransportAddress OPTIONAL, + mediaGuaranteedDelivery BOOLEAN OPTIONAL, + mediaControlChannel TransportAddress OPTIONAL, -- reverse + + -- RTCP channel + mediaControlGuaranteedDelivery BOOLEAN OPTIONAL, + silenceSuppression BOOLEAN OPTIONAL, + destination TerminalLabel OPTIONAL, + dynamicRTPPayloadType INTEGER(96..127) OPTIONAL, + mediaPacketization + CHOICE {h261aVideoPacketization NULL, + ..., + rtpPayloadType RTPPayloadType} OPTIONAL, + ..., + transportCapability TransportCapability OPTIONAL, + redundancyEncoding RedundancyEncoding OPTIONAL, + source TerminalLabel OPTIONAL +} + +RTPPayloadType ::= SEQUENCE { + payloadDescriptor + CHOICE {nonStandardIdentifier NonStandardParameter, + rfc-number INTEGER(1..32768, ...), + oid OBJECT IDENTIFIER, + ...}, + payloadType INTEGER(0..127) OPTIONAL, + ... +} + +RedundancyEncoding ::= SEQUENCE { + redundancyEncodingMethod RedundancyEncodingMethod, + secondaryEncoding DataType OPTIONAL, -- depends on method + ..., + -- The sequence below may be used in place of the above secondaryEncoding field + rtpRedundancyEncoding + SEQUENCE {primary RedundancyEncodingElement OPTIONAL, + -- Present when redundancyEncoding + -- is selected as the dataType + -- in an OpenLogicalChannel or + -- as part of a MultiplePayloadSteam + secondary SEQUENCE OF RedundancyEncodingElement OPTIONAL, + ...} OPTIONAL +} + +RedundancyEncodingElement ::= SEQUENCE { + dataType DataType, + payloadType INTEGER(0..127) OPTIONAL, + ... +} + +MultiplePayloadStream ::= SEQUENCE { + elements SEQUENCE OF MultiplePayloadStreamElement, + ... +} + +MultiplePayloadStreamElement ::= SEQUENCE { + dataType DataType, + payloadType INTEGER(0..127) OPTIONAL, + ... +} + +DepFECData ::= CHOICE -- Deprecated, do not use + { + rfc2733 + SEQUENCE {mode + CHOICE {redundancyEncoding NULL, + separateStream + CHOICE {differentPort + SEQUENCE {protectedSessionID + INTEGER(1..255), + protectedPayloadType + INTEGER(0..127) OPTIONAL, + ...}, + samePort + SEQUENCE {protectedPayloadType + INTEGER(0..127), + ...}, + ...}, + ...}, + ...} +} + +FECData ::= CHOICE { + rfc2733 + SEQUENCE {protectedPayloadType INTEGER(0..127), + fecScheme OBJECT IDENTIFIER OPTIONAL, + pktMode + CHOICE {rfc2198coding NULL, + rfc2733sameport SEQUENCE {...}, + rfc2733diffport + SEQUENCE {protectedChannel LogicalChannelNumber, + ...}, + ...}, + ...}, + ... +} + +TransportAddress ::= CHOICE { + unicastAddress UnicastAddress, + multicastAddress MulticastAddress, + ... +} + +UnicastAddress ::= CHOICE { + iPAddress + SEQUENCE {network OCTET STRING(SIZE (4)), + tsapIdentifier INTEGER(0..65535), + ...}, + iPXAddress + SEQUENCE {node OCTET STRING(SIZE (6)), + netnum OCTET STRING(SIZE (4)), + tsapIdentifier OCTET STRING(SIZE (2)), + ...}, + iP6Address + SEQUENCE {network OCTET STRING(SIZE (16)), + tsapIdentifier INTEGER(0..65535), + ...}, + netBios OCTET STRING(SIZE (16)), + iPSourceRouteAddress + SEQUENCE {routing CHOICE {strict NULL, + loose NULL}, + network OCTET STRING(SIZE (4)), + tsapIdentifier INTEGER(0..65535), + route SEQUENCE OF OCTET STRING(SIZE (4)), + ...}, + ..., + nsap OCTET STRING(SIZE (1..20)), + nonStandardAddress NonStandardParameter +} + +MulticastAddress ::= CHOICE { + iPAddress + SEQUENCE {network OCTET STRING(SIZE (4)), + tsapIdentifier INTEGER(0..65535), + ...}, + iP6Address + SEQUENCE {network OCTET STRING(SIZE (16)), + tsapIdentifier INTEGER(0..65535), + ...}, + ..., + nsap OCTET STRING(SIZE (1..20)), + nonStandardAddress NonStandardParameter +} + +EncryptionSync ::= + SEQUENCE + -- used to supply new key and synchronization point + { + nonStandard NonStandardParameter OPTIONAL, + synchFlag INTEGER(0..255), -- may need to be larger + + -- for H.324, etc. + -- shall be the Dynamic + -- Payload# for H.323 + h235Key OCTET STRING(SIZE (1..65535)), -- H.235.0 + + -- encoded value + escrowentry SEQUENCE SIZE (1..256) OF EscrowData OPTIONAL, + ..., + genericParameter GenericParameter OPTIONAL +} + +EscrowData ::= SEQUENCE { + escrowID OBJECT IDENTIFIER, + escrowValue BIT STRING(SIZE (1..65535)), + ... +} + +OpenLogicalChannelAck ::= SEQUENCE { + forwardLogicalChannelNumber LogicalChannelNumber, + reverseLogicalChannelParameters + SEQUENCE {reverseLogicalChannelNumber LogicalChannelNumber, + portNumber INTEGER(0..65535) OPTIONAL, + multiplexParameters + CHOICE {h222LogicalChannelParameters + H222LogicalChannelParameters, + -- H.223 parameters are never present in reverse direction + ..., + h2250LogicalChannelParameters + H2250LogicalChannelParameters} OPTIONAL, -- not present for H.223-- + ..., + replacementFor LogicalChannelNumber OPTIONAL + } OPTIONAL, -- not present for unidirectional channel + + -- request + ..., + separateStack NetworkAccessParameters OPTIONAL, + -- for Open requester to establish + -- the stack + forwardMultiplexAckParameters + CHOICE {-- H.222 parameters are never present in the Ack + -- H.223 parameters are never present in the Ack + -- V.76 parameters are never present in the Ack + h2250LogicalChannelAckParameters H2250LogicalChannelAckParameters, + ...} OPTIONAL, + encryptionSync EncryptionSync OPTIONAL, -- used only by Master + genericInformation SEQUENCE OF GenericInformation OPTIONAL +} + +-- generic information associated +-- with the message +OpenLogicalChannelReject ::= SEQUENCE { + forwardLogicalChannelNumber LogicalChannelNumber, + cause + CHOICE {unspecified NULL, + unsuitableReverseParameters NULL, + dataTypeNotSupported NULL, + dataTypeNotAvailable NULL, + unknownDataType NULL, + dataTypeALCombinationNotSupported NULL, + ..., + multicastChannelNotAllowed NULL, + insufficientBandwidth NULL, + separateStackEstablishmentFailed NULL, + invalidSessionID NULL, + masterSlaveConflict NULL, + waitForCommunicationMode NULL, + invalidDependentChannel NULL, + replacementForRejected NULL, + securityDenied NULL, + qoSControlNotSupported NULL}, -- added for callee to indicate + + -- that requested QoS support cannot be + -- supported. + ..., + genericInformation SEQUENCE OF GenericInformation OPTIONAL +} + +-- generic information associated +-- with the message +OpenLogicalChannelConfirm ::= SEQUENCE { + forwardLogicalChannelNumber LogicalChannelNumber, + ..., + genericInformation SEQUENCE OF GenericInformation OPTIONAL +} + +-- generic information associated +-- with the message +H2250LogicalChannelAckParameters ::= SEQUENCE { + nonStandard SEQUENCE OF NonStandardParameter OPTIONAL, + sessionID INTEGER(1..255) OPTIONAL, + mediaChannel TransportAddress OPTIONAL, + mediaControlChannel TransportAddress OPTIONAL, -- forward RTCP + + -- channel + dynamicRTPPayloadType INTEGER(96..127) OPTIONAL, -- used only by + + -- the master or + -- MC + ..., + flowControlToZero BOOLEAN, + portNumber INTEGER(0..65535) OPTIONAL +} + +CloseLogicalChannel ::= SEQUENCE { + forwardLogicalChannelNumber LogicalChannelNumber, + source CHOICE {user NULL, + lcse NULL}, + ..., + reason + CHOICE {unknown NULL, + reopen NULL, + reservationFailure NULL, + ..., + networkErrorCode INTEGER(0..255)} +} -- Indicates the error + +-- code received from network +CloseLogicalChannelAck ::= SEQUENCE { + forwardLogicalChannelNumber LogicalChannelNumber, + ... +} + +RequestChannelClose ::= SEQUENCE { + forwardLogicalChannelNumber LogicalChannelNumber, + ..., + qosCapability QOSCapability OPTIONAL, + reason + CHOICE {unknown NULL, + normal NULL, + reopen NULL, + reservationFailure NULL, + ..., + networkErrorCode INTEGER(0..255)} +} -- Indicates the error + +-- code received from network +RequestChannelCloseAck ::= SEQUENCE { + forwardLogicalChannelNumber LogicalChannelNumber, + ... +} + +RequestChannelCloseReject ::= SEQUENCE { + forwardLogicalChannelNumber LogicalChannelNumber, + cause CHOICE {unspecified NULL, + ...}, + ... +} + +RequestChannelCloseRelease ::= SEQUENCE { + forwardLogicalChannelNumber LogicalChannelNumber, + ... +} + +-- ============================================================================= +-- H.223 multiplex table definitions +-- ============================================================================= +MultiplexEntrySend ::= SEQUENCE { + sequenceNumber SequenceNumber, + multiplexEntryDescriptors SET SIZE (1..15) OF MultiplexEntryDescriptor, + ... +} + +MultiplexEntryDescriptor ::= SEQUENCE { + multiplexTableEntryNumber MultiplexTableEntryNumber, + elementList + SEQUENCE SIZE (1..256) OF MultiplexElement OPTIONAL +} + +MultiplexElement ::= SEQUENCE { + type + CHOICE {logicalChannelNumber INTEGER(0..65535), + subElementList SEQUENCE SIZE (2..255) OF MultiplexElement + }, + repeatCount + CHOICE {finite -- repeats of type -- INTEGER(1..65535), + untilClosingFlag -- used for last element -- NULL} +} + +MultiplexTableEntryNumber ::= INTEGER(1..15) + +MultiplexEntrySendAck ::= SEQUENCE { + sequenceNumber SequenceNumber, + multiplexTableEntryNumber SET SIZE (1..15) OF MultiplexTableEntryNumber, + ... +} + +MultiplexEntrySendReject ::= SEQUENCE { + sequenceNumber SequenceNumber, + rejectionDescriptions + SET SIZE (1..15) OF MultiplexEntryRejectionDescriptions, + ... +} + +MultiplexEntryRejectionDescriptions ::= SEQUENCE { + multiplexTableEntryNumber MultiplexTableEntryNumber, + cause + CHOICE {unspecifiedCause NULL, + descriptorTooComplex NULL, + ...}, + ... +} + +MultiplexEntrySendRelease ::= SEQUENCE { + multiplexTableEntryNumber SET SIZE (1..15) OF MultiplexTableEntryNumber, + ... +} + +RequestMultiplexEntry ::= SEQUENCE { + entryNumbers SET SIZE (1..15) OF MultiplexTableEntryNumber, + ... +} + +RequestMultiplexEntryAck ::= SEQUENCE { + entryNumbers SET SIZE (1..15) OF MultiplexTableEntryNumber, + ... +} + +RequestMultiplexEntryReject ::= SEQUENCE { + entryNumbers SET SIZE (1..15) OF MultiplexTableEntryNumber, + rejectionDescriptions + SET SIZE (1..15) OF RequestMultiplexEntryRejectionDescriptions, + ... +} + +RequestMultiplexEntryRejectionDescriptions ::= SEQUENCE { + multiplexTableEntryNumber MultiplexTableEntryNumber, + cause CHOICE {unspecifiedCause NULL, + ...}, + ... +} + +RequestMultiplexEntryRelease ::= SEQUENCE { + entryNumbers SET SIZE (1..15) OF MultiplexTableEntryNumber, + ... +} + +-- ============================================================================= +-- Request mode definitions +-- ============================================================================= +-- RequestMode is a list, in order or preference, of modes that a terminal would +-- like to have transmitted to it. +RequestMode ::= SEQUENCE { + sequenceNumber SequenceNumber, + requestedModes SEQUENCE SIZE (1..256) OF ModeDescription, + ... +} + +RequestModeAck ::= SEQUENCE { + sequenceNumber SequenceNumber, + response + CHOICE {willTransmitMostPreferredMode NULL, + willTransmitLessPreferredMode NULL, + ...}, + ... +} + +RequestModeReject ::= SEQUENCE { + sequenceNumber SequenceNumber, + cause + CHOICE {modeUnavailable NULL, + multipointConstraint NULL, + requestDenied NULL, + ...}, + ... +} + +RequestModeRelease ::= SEQUENCE {... +} + +-- ============================================================================= +-- Request mode definitions: Mode description +-- ============================================================================= +ModeDescription ::= SET SIZE (1..256) OF ModeElement + +ModeElementType ::= CHOICE { + nonStandard NonStandardParameter, + videoMode VideoMode, + audioMode AudioMode, + dataMode DataMode, + encryptionMode EncryptionMode, + ..., + h235Mode H235Mode, + multiplexedStreamMode MultiplexedStreamParameter, + redundancyEncodingDTMode RedundancyEncodingDTMode, + multiplePayloadStreamMode MultiplePayloadStreamMode, + depFecMode DepFECMode, -- deprecated, do not use + fecMode FECMode +} + +ModeElement ::= SEQUENCE { + type ModeElementType, + h223ModeParameters H223ModeParameters OPTIONAL, + ..., + v76ModeParameters V76ModeParameters OPTIONAL, + h2250ModeParameters H2250ModeParameters OPTIONAL, + genericModeParameters GenericCapability OPTIONAL, + multiplexedStreamModeParameters MultiplexedStreamModeParameters OPTIONAL, + logicalChannelNumber LogicalChannelNumber OPTIONAL +} + +H235Mode ::= SEQUENCE { + encryptionAuthenticationAndIntegrity EncryptionAuthenticationAndIntegrity, + mediaMode + CHOICE {nonStandard NonStandardParameter, + videoMode VideoMode, + audioMode AudioMode, + dataMode DataMode, + ...}, + ... +} + +MultiplexedStreamModeParameters ::= SEQUENCE { + logicalChannelNumber LogicalChannelNumber, + ... +} + +RedundancyEncodingDTMode ::= SEQUENCE { + redundancyEncodingMethod RedundancyEncodingMethod, + primary RedundancyEncodingDTModeElement, + secondary SEQUENCE OF RedundancyEncodingDTModeElement, + ... +} + +RedundancyEncodingDTModeElement ::= SEQUENCE { + type + CHOICE {nonStandard NonStandardParameter, + videoMode VideoMode, + audioMode AudioMode, + dataMode DataMode, + encryptionMode EncryptionMode, + h235Mode H235Mode, + ..., + fecMode FECMode}, + ... +} + +MultiplePayloadStreamMode ::= SEQUENCE { + elements SEQUENCE OF MultiplePayloadStreamElementMode, + ... +} + +MultiplePayloadStreamElementMode ::= SEQUENCE {type ModeElementType, + ... +} + +DepFECMode ::= CHOICE -- deprecated, do not use + { + rfc2733Mode + SEQUENCE {mode + CHOICE {redundancyEncoding NULL, + separateStream + CHOICE {differentPort + SEQUENCE {protectedSessionID + INTEGER(1..255), + protectedPayloadType + INTEGER(0..127) OPTIONAL, + ...}, + samePort + SEQUENCE {protectedType ModeElementType, + ...}, + ...}, + ...}, + ...}, + ... +} + +FECMode ::= SEQUENCE { + protectedElement ModeElementType, + fecScheme -- identifies encoding scheme -- OBJECT IDENTIFIER OPTIONAL, + rfc2733Format + CHOICE {rfc2733rfc2198 -- RFC 2198 redundancy -- MaxRedundancy, + rfc2733sameport -- separate packet, same port -- MaxRedundancy, + rfc2733diffport -- separate packet and port -- MaxRedundancy + } OPTIONAL, + ... +} + +H223ModeParameters ::= SEQUENCE { + adaptationLayerType + CHOICE {nonStandard NonStandardParameter, + al1Framed NULL, + al1NotFramed NULL, + al2WithoutSequenceNumbers NULL, + al2WithSequenceNumbers NULL, + al3 + SEQUENCE {controlFieldOctets INTEGER(0..2), + sendBufferSize + -- units octets -- INTEGER(0..16777215)}, + ..., + al1M H223AL1MParameters, + al2M H223AL2MParameters, + al3M H223AL3MParameters}, + segmentableFlag BOOLEAN, + ... +} + +V76ModeParameters ::= CHOICE { + suspendResumewAddress NULL, + suspendResumewoAddress NULL, + ... +} + +H2250ModeParameters ::= SEQUENCE { + redundancyEncodingMode RedundancyEncodingMode OPTIONAL, + ... +} + +RedundancyEncodingMode ::= SEQUENCE { + redundancyEncodingMethod RedundancyEncodingMethod, + secondaryEncoding + CHOICE {nonStandard NonStandardParameter, + audioData AudioMode, + ...} OPTIONAL, + ... +} + +-- ============================================================================= +-- Request mode definitions: Video modes +-- ============================================================================= +VideoMode ::= CHOICE { + nonStandard NonStandardParameter, + h261VideoMode H261VideoMode, + h262VideoMode H262VideoMode, + h263VideoMode H263VideoMode, + is11172VideoMode IS11172VideoMode, + ..., + genericVideoMode GenericCapability +} + +H261VideoMode ::= SEQUENCE { + resolution CHOICE {qcif NULL, + cif NULL}, + bitRate INTEGER(1..19200), -- units 100 bit/s + stillImageTransmission BOOLEAN, + ... +} + +H262VideoMode ::= SEQUENCE { + profileAndLevel + CHOICE {profileAndLevel-SPatML NULL, + profileAndLevel-MPatLL NULL, + profileAndLevel-MPatML NULL, + profileAndLevel-MPatH-14 NULL, + profileAndLevel-MPatHL NULL, + profileAndLevel-SNRatLL NULL, + profileAndLevel-SNRatML NULL, + profileAndLevel-SpatialatH-14 NULL, + profileAndLevel-HPatML NULL, + profileAndLevel-HPatH-14 NULL, + profileAndLevel-HPatHL NULL, + ...}, + videoBitRate INTEGER(0..1073741823) OPTIONAL, -- units 400 bit/s + vbvBufferSize INTEGER(0..262143) OPTIONAL, -- units 16 384 bits + samplesPerLine INTEGER(0..16383) OPTIONAL, -- units samples/line + linesPerFrame INTEGER(0..16383) OPTIONAL, -- units lines/frame + framesPerSecond INTEGER(0..15) OPTIONAL, -- frame_rate_code + luminanceSampleRate INTEGER(0..4294967295) OPTIONAL, -- units samples/s + ... +} + +H263VideoMode ::= SEQUENCE { + resolution + CHOICE {sqcif NULL, + qcif NULL, + cif NULL, + cif4 NULL, + cif16 NULL, + ..., + custom NULL}, + bitRate INTEGER(1..19200), -- units 100 bit/s + unrestrictedVector BOOLEAN, + arithmeticCoding BOOLEAN, + advancedPrediction BOOLEAN, + pbFrames BOOLEAN, + ..., + errorCompensation BOOLEAN, + enhancementLayerInfo EnhancementLayerInfo OPTIONAL, + h263Options H263Options OPTIONAL +} + +IS11172VideoMode ::= SEQUENCE { + constrainedBitstream BOOLEAN, + videoBitRate INTEGER(0..1073741823) OPTIONAL, -- units + + -- 400 bit/s + vbvBufferSize INTEGER(0..262143) OPTIONAL, -- units + + -- 16 384 bits + samplesPerLine INTEGER(0..16383) OPTIONAL, -- units + + -- samples/line + linesPerFrame INTEGER(0..16383) OPTIONAL, -- units + + -- lines/frame + pictureRate INTEGER(0..15) OPTIONAL, + luminanceSampleRate INTEGER(0..4294967295) OPTIONAL, -- units + + -- samples/s + ... +} + +-- ============================================================================= +-- Request mode definitions: Audio modes +-- ============================================================================= +AudioMode ::= CHOICE { + nonStandard NonStandardParameter, + g711Alaw64k NULL, + g711Alaw56k NULL, + g711Ulaw64k NULL, + g711Ulaw56k NULL, + g722-64k NULL, + g722-56k NULL, + g722-48k NULL, + g728 NULL, + g729 NULL, + g729AnnexA NULL, + g7231 + CHOICE {noSilenceSuppressionLowRate NULL, + noSilenceSuppressionHighRate NULL, + silenceSuppressionLowRate NULL, + silenceSuppressionHighRate NULL}, + is11172AudioMode IS11172AudioMode, + is13818AudioMode IS13818AudioMode, + ..., + g729wAnnexB INTEGER(1..256), + g729AnnexAwAnnexB INTEGER(1..256), + g7231AnnexCMode G7231AnnexCMode, + gsmFullRate GSMAudioCapability, + gsmHalfRate GSMAudioCapability, + gsmEnhancedFullRate GSMAudioCapability, + genericAudioMode GenericCapability, + g729Extensions G729Extensions, + vbd VBDMode +} + +IS11172AudioMode ::= SEQUENCE { + audioLayer + CHOICE {audioLayer1 NULL, + audioLayer2 NULL, + audioLayer3 NULL}, + audioSampling + CHOICE {audioSampling32k NULL, + audioSampling44k1 NULL, + audioSampling48k NULL}, + multichannelType + CHOICE {singleChannel NULL, + twoChannelStereo NULL, + twoChannelDual NULL}, + bitRate INTEGER(1..448), -- units kbit/s + ... +} + +IS13818AudioMode ::= SEQUENCE { + audioLayer + CHOICE {audioLayer1 NULL, + audioLayer2 NULL, + audioLayer3 NULL}, + audioSampling + CHOICE {audioSampling16k NULL, + audioSampling22k05 NULL, + audioSampling24k NULL, + audioSampling32k NULL, + audioSampling44k1 NULL, + audioSampling48k NULL}, + multichannelType + CHOICE {singleChannel NULL, + twoChannelStereo NULL, + twoChannelDual NULL, + threeChannels2-1 NULL, + threeChannels3-0 NULL, + fourChannels2-0-2-0 NULL, + fourChannels2-2 NULL, + fourChannels3-1 NULL, + fiveChannels3-0-2-0 NULL, + fiveChannels3-2 NULL}, + lowFrequencyEnhancement BOOLEAN, + multilingual BOOLEAN, + bitRate INTEGER(1..1130), -- units kbit/s + ... +} + +G7231AnnexCMode ::= SEQUENCE { + maxAl-sduAudioFrames INTEGER(1..256), + silenceSuppression BOOLEAN, + g723AnnexCAudioMode + SEQUENCE {highRateMode0 INTEGER(27..78), -- units octets-- + highRateMode1 INTEGER(27..78), -- units octets-- + lowRateMode0 INTEGER(23..66), -- units octets-- + lowRateMode1 INTEGER(23..66), -- units octets-- + sidMode0 INTEGER(6..17), -- units octets-- + sidMode1 INTEGER(6..17), -- units octets-- + ...}, + ... +} + +VBDMode ::= SEQUENCE {type AudioMode, -- shall not be "vbd" + ... +} + +-- ============================================================================= +-- Request mode definitions: Data modes +-- ============================================================================= +DataMode ::= SEQUENCE { + application + CHOICE {nonStandard NonStandardParameter, + t120 DataProtocolCapability, + dsm-cc DataProtocolCapability, + userData DataProtocolCapability, + t84 DataProtocolCapability, + t434 DataProtocolCapability, + h224 DataProtocolCapability, + nlpid + SEQUENCE {nlpidProtocol DataProtocolCapability, + nlpidData OCTET STRING}, + dsvdControl NULL, + h222DataPartitioning DataProtocolCapability, + ..., + t30fax DataProtocolCapability, + t140 DataProtocolCapability, + t38fax + SEQUENCE {t38FaxProtocol DataProtocolCapability, + t38FaxProfile T38FaxProfile}, + genericDataMode GenericCapability}, + bitRate INTEGER(0..4294967295), -- units 100 bit/s + ... +} + +-- ============================================================================= +-- Request mode definitions: Encryption modes +-- ============================================================================= +EncryptionMode ::= CHOICE { + nonStandard NonStandardParameter, + h233Encryption NULL, + ... +} + +-- ============================================================================= +-- Round Trip Delay definitions +-- ============================================================================= +RoundTripDelayRequest ::= SEQUENCE {sequenceNumber SequenceNumber, + ... +} + +RoundTripDelayResponse ::= SEQUENCE {sequenceNumber SequenceNumber, + ... +} + +-- ============================================================================= +-- Maintenance Loop definitions +-- ============================================================================= +MaintenanceLoopRequest ::= SEQUENCE { + type + CHOICE {systemLoop NULL, + mediaLoop LogicalChannelNumber, + logicalChannelLoop LogicalChannelNumber, + ...}, + ... +} + +MaintenanceLoopAck ::= SEQUENCE { + type + CHOICE {systemLoop NULL, + mediaLoop LogicalChannelNumber, + logicalChannelLoop LogicalChannelNumber, + ...}, + ... +} + +MaintenanceLoopReject ::= SEQUENCE { + type + CHOICE {systemLoop NULL, + mediaLoop LogicalChannelNumber, + logicalChannelLoop LogicalChannelNumber, + ...}, + cause CHOICE {canNotPerformLoop NULL, + ...}, + ... +} + +MaintenanceLoopOffCommand ::= SEQUENCE {... +} + +-- ============================================================================= +-- Communication Mode definitions +-- ============================================================================= +CommunicationModeCommand ::= SEQUENCE { + communicationModeTable SET SIZE (1..256) OF CommunicationModeTableEntry, + ... +} + +CommunicationModeRequest ::= SEQUENCE {... +} + +CommunicationModeResponse ::= CHOICE { + communicationModeTable SET SIZE (1..256) OF CommunicationModeTableEntry, + ... +} + +CommunicationModeTableEntry ::= SEQUENCE { + nonStandard SEQUENCE OF NonStandardParameter OPTIONAL, + sessionID INTEGER(1..255), + associatedSessionID INTEGER(1..255) OPTIONAL, + terminalLabel TerminalLabel OPTIONAL, -- if not present, + + -- it refers to + -- all + -- participants in + -- the conference + sessionDescription BMPString(SIZE (1..128)), + -- Basic ISO/IEC 10646 (Unicode) + dataType + CHOICE {videoData VideoCapability, + audioData AudioCapability, + data DataApplicationCapability, + ...}, + mediaChannel TransportAddress OPTIONAL, + mediaGuaranteedDelivery BOOLEAN OPTIONAL, + mediaControlChannel TransportAddress OPTIONAL, + -- reverse RTCP channel + mediaControlGuaranteedDelivery BOOLEAN OPTIONAL, + ..., + redundancyEncoding RedundancyEncoding OPTIONAL, + sessionDependency INTEGER(1..255) OPTIONAL, + destination TerminalLabel OPTIONAL +} + +-- ============================================================================= +-- Conference Request definitions +-- ============================================================================= +ConferenceRequest ::= CHOICE { + terminalListRequest NULL, -- same as H.230 TCU (term->MC) + makeMeChair NULL, -- same as H.230 CCA (term->MC) + cancelMakeMeChair NULL, -- same as H.230 CIS (term->MC) + dropTerminal TerminalLabel, -- same as H.230 CCD(term->MC) + requestTerminalID TerminalLabel, -- same as TCP (term->MC) + enterH243Password NULL, -- same as H.230 TCS1(MC->term) + enterH243TerminalID NULL, -- same as H.230 TCS2/TCI + + -- (MC->term) + enterH243ConferenceID NULL, -- same as H.230 TCS3 (MC->term) + ..., + enterExtensionAddress NULL, -- same as H.230 TCS4 (GW->term) + requestChairTokenOwner NULL, -- same as H.230 TCA (term->MC) + requestTerminalCertificate + SEQUENCE {terminalLabel TerminalLabel OPTIONAL, + certSelectionCriteria CertSelectionCriteria OPTIONAL, + sRandom INTEGER(1..4294967295) OPTIONAL, + -- this is the requester's challenge + ...}, + broadcastMyLogicalChannel LogicalChannelNumber, -- similar to H.230 MCV + makeTerminalBroadcaster TerminalLabel, -- similar to H.230 VCB + sendThisSource TerminalLabel, -- similar to H.230 VCS + requestAllTerminalIDs NULL, + remoteMCRequest RemoteMCRequest +} + +CertSelectionCriteria ::= SEQUENCE SIZE (1..16) OF Criteria + +Criteria ::= SEQUENCE { + field OBJECT IDENTIFIER, -- may include + + -- certificate type + value OCTET STRING(SIZE (1..65535)), + ... +} + +TerminalLabel ::= SEQUENCE { + mcuNumber McuNumber, + terminalNumber TerminalNumber, + ... +} + +McuNumber ::= INTEGER(0..192) + +TerminalNumber ::= INTEGER(0..192) + +-- ============================================================================= +-- Conference Response definitions +-- ============================================================================= +ConferenceResponse ::= CHOICE { + mCTerminalIDResponse + SEQUENCE-- response to TCP -- + -- (same as TIP) + {-- sent by MC only--terminalLabel TerminalLabel, + terminalID TerminalID, + ...}, + terminalIDResponse + SEQUENCE-- response to TCS2 or TCI-- {-- same as IIS--terminalLabel + TerminalLabel, -- (term->MC)-- + terminalID + TerminalID, + ...}, + conferenceIDResponse + SEQUENCE-- response to TCS3-- {-- same as IIS--terminalLabel TerminalLabel, -- (term->MC)-- + conferenceID ConferenceID, + ...}, + passwordResponse + SEQUENCE-- response to TCS1-- {-- same as IIS--terminalLabel TerminalLabel, -- (term->MC)-- + password Password, + ...}, + terminalListResponse SET SIZE (1..256) OF TerminalLabel, + videoCommandReject NULL, -- same as H.230 VCR + terminalDropReject NULL, -- same as H.230 CIR + makeMeChairResponse + CHOICE-- same as H.230 CCR-- {grantedChairToken NULL, -- same as H.230 CIT-- + deniedChairToken NULL, -- same as H.230 CCR-- + ...}, + ..., + extensionAddressResponse + SEQUENCE-- response to TCS4-- {extensionAddress TerminalID, -- same as IIS (term->GW)-- + ...}, + chairTokenOwnerResponse + SEQUENCE-- response to TCA (same as TIR) -- + -- sent by MC only + {terminalLabel TerminalLabel, + terminalID TerminalID, + ...}, + terminalCertificateResponse + SEQUENCE {terminalLabel TerminalLabel OPTIONAL, + certificateResponse OCTET STRING(SIZE (1..65535)) OPTIONAL, + ...}, + broadcastMyLogicalChannelResponse + CHOICE {grantedBroadcastMyLogicalChannel NULL, -- similar to H.230 MVA-- + deniedBroadcastMyLogicalChannel NULL, -- similar to H.230 MVR-- + ...}, + makeTerminalBroadcasterResponse + CHOICE {grantedMakeTerminalBroadcaster NULL, + deniedMakeTerminalBroadcaster NULL, + ...}, + sendThisSourceResponse + CHOICE {grantedSendThisSource NULL, + deniedSendThisSource NULL, + ...}, + requestAllTerminalIDsResponse RequestAllTerminalIDsResponse, + remoteMCResponse RemoteMCResponse +} + +TerminalID ::= OCTET STRING(SIZE (1..128)) -- as per H.230 + + +ConferenceID ::= OCTET STRING(SIZE (1..32)) + +Password ::= OCTET STRING(SIZE (1..32)) + +RequestAllTerminalIDsResponse ::= SEQUENCE { + terminalInformation SEQUENCE OF TerminalInformation, + ... +} + +TerminalInformation ::= SEQUENCE { + terminalLabel TerminalLabel, + terminalID TerminalID, + ... +} + +-- ============================================================================= +-- Remote MC Request definitions +-- ============================================================================= +RemoteMCRequest ::= CHOICE { + masterActivate NULL, + slaveActivate NULL, + deActivate NULL, + ... +} + +RemoteMCResponse ::= CHOICE { + accept NULL, + reject CHOICE {unspecified NULL, + functionNotSupported NULL, + ...}, + ... +} + +-- ============================================================================= +-- Multilink definitions +-- ============================================================================= +MultilinkRequest ::= CHOICE { + nonStandard NonStandardMessage, + callInformation + SEQUENCE {maxNumberOfAdditionalConnections INTEGER(1..65535), + ...}, + addConnection + SEQUENCE {sequenceNumber SequenceNumber, -- Unique ID of request-- + dialingInformation DialingInformation, + ...}, + removeConnection + SEQUENCE {connectionIdentifier ConnectionIdentifier, + ...}, + maximumHeaderInterval + SEQUENCE {requestType + CHOICE {currentIntervalInformation NULL, + requestedInterval INTEGER(0..65535), -- Max Header -- + -- Interval, + -- milliseconds + ...}, + ...}, + ... +} + +MultilinkResponse ::= CHOICE { + nonStandard NonStandardMessage, + callInformation + SEQUENCE {dialingInformation DialingInformation, + callAssociationNumber INTEGER(0..4294967295), + ...}, + addConnection + SEQUENCE {sequenceNumber SequenceNumber, -- Equal to value in request-- + responseCode + CHOICE {accepted NULL, + rejected + CHOICE {connectionsNotAvailable NULL, -- due to any technical reason-- + userRejected NULL, + ...}, + ...}, + ...}, + removeConnection + SEQUENCE {connectionIdentifier ConnectionIdentifier, + ...}, + maximumHeaderInterval + SEQUENCE {currentInterval INTEGER(0..65535), -- Max Header -- + -- Interval, + -- milliseconds + ...}, + ... +} + +MultilinkIndication ::= CHOICE { + nonStandard NonStandardMessage, + crcDesired SEQUENCE {...}, + excessiveError SEQUENCE {connectionIdentifier ConnectionIdentifier, + ...}, + ... +} + +DialingInformation ::= CHOICE { + nonStandard NonStandardMessage, + differential SET SIZE (1..65535) OF DialingInformationNumber, + -- list of numbers for all additional + -- channels; only least significant digits + -- different from initial channel's number + infoNotAvailable INTEGER(1..65535), -- maximum No. of + + -- additional channels + ... +} + +DialingInformationNumber ::= SEQUENCE { + networkAddress NumericString(SIZE (0..40)), + subAddress IA5String(SIZE (1..40)) OPTIONAL, + networkType SET SIZE (1..255) OF DialingInformationNetworkType, + ... +} + +DialingInformationNetworkType ::= CHOICE { + nonStandard NonStandardMessage, + n-isdn NULL, + gstn NULL, + ..., + mobile NULL +} + +ConnectionIdentifier ::= SEQUENCE { + channelTag INTEGER(0..4294967295), -- from H.226 + sequenceNumber INTEGER(0..4294967295), -- from H.226 + ... +} + +-- ============================================================================= +-- Logical channel bit-rate change definitions +-- ============================================================================= +MaximumBitRate ::= INTEGER(0..4294967295) -- units of 100 bit/s + + +LogicalChannelRateRequest ::= SEQUENCE { + sequenceNumber SequenceNumber, + logicalChannelNumber LogicalChannelNumber, + maximumBitRate MaximumBitRate, + ... +} + +LogicalChannelRateAcknowledge ::= SEQUENCE { + sequenceNumber SequenceNumber, + logicalChannelNumber LogicalChannelNumber, + maximumBitRate MaximumBitRate, + ... +} + +LogicalChannelRateReject ::= SEQUENCE { + sequenceNumber SequenceNumber, + logicalChannelNumber LogicalChannelNumber, + rejectReason LogicalChannelRateRejectReason, + currentMaximumBitRate MaximumBitRate OPTIONAL, + ... +} + +LogicalChannelRateRejectReason ::= CHOICE { + undefinedReason NULL, + insufficientResources NULL, + ... +} + +LogicalChannelRateRelease ::= SEQUENCE {... +} + +-- ============================================================================= +-- Command Message definitions +-- ============================================================================= +-- ============================================================================= +-- Command Message: Send Terminal Capability Set +-- ============================================================================= +SendTerminalCapabilitySet ::= CHOICE { + specificRequest + SEQUENCE {multiplexCapability BOOLEAN, + capabilityTableEntryNumbers + SET SIZE (1..65535) OF CapabilityTableEntryNumber OPTIONAL, + capabilityDescriptorNumbers + SET SIZE (1..256) OF CapabilityDescriptorNumber OPTIONAL, + ...}, + genericRequest NULL, + ... +} + +-- ============================================================================= +-- Command Message: Encryption +-- ============================================================================= +EncryptionCommand ::= CHOICE { + encryptionSE OCTET STRING, -- per H.233, but no + + -- error protection + encryptionIVRequest NULL, -- requests new IV + encryptionAlgorithmID + SEQUENCE {h233AlgorithmIdentifier SequenceNumber, + associatedAlgorithm NonStandardParameter}, + ... +} + +-- ============================================================================= +-- Command Message: Flow Control +-- ============================================================================= +FlowControlCommand ::= SEQUENCE { + scope + CHOICE {logicalChannelNumber LogicalChannelNumber, + resourceID INTEGER(0..65535), + wholeMultiplex NULL}, + restriction + CHOICE {maximumBitRate INTEGER(0..16777215), -- units 100 bit/s -- + noRestriction NULL}, + ... +} + +-- ============================================================================= +-- Command Message: Change or End Session +-- ============================================================================= +EndSessionCommand ::= CHOICE { + nonStandard NonStandardParameter, + disconnect NULL, + gstnOptions + CHOICE {telephonyMode NULL, + v8bis NULL, + v34DSVD NULL, + v34DuplexFAX NULL, + v34H324 NULL, + ...}, + ..., + isdnOptions + CHOICE {telephonyMode NULL, + v140 NULL, + terminalOnHold NULL, + ...}, + genericInformation SEQUENCE OF GenericInformation +} + +-- generic information associated +-- with the message +-- ============================================================================= +-- Command Message: Conference Commands +-- ============================================================================= +ConferenceCommand ::= CHOICE { + broadcastMyLogicalChannel LogicalChannelNumber, -- similar to H.230 MCV + cancelBroadcastMyLogicalChannel LogicalChannelNumber, -- similar to + + -- H.230 Cancel-MCV + makeTerminalBroadcaster TerminalLabel, -- same as H.230 VCB + cancelMakeTerminalBroadcaster NULL, -- same as H.230 + + -- Cancel-VCB + sendThisSource TerminalLabel, -- same as H.230 VCS + cancelSendThisSource NULL, -- same as H.230 + + -- cancel VCS + dropConference NULL, -- same as H.230 CCK + ..., + substituteConferenceIDCommand SubstituteConferenceIDCommand +} + +SubstituteConferenceIDCommand ::= SEQUENCE { + conferenceIdentifier OCTET STRING(SIZE (16)), + ... +} + +-- ============================================================================= +-- Command Message: Miscellaneous H.230-like commands +-- ============================================================================= +EncryptionUpdateDirection ::= CHOICE { + masterToSlave NULL, + slaveToMaster NULL, + ... +} + +MiscellaneousCommand ::= SEQUENCE { + logicalChannelNumber LogicalChannelNumber, + type + CHOICE {equaliseDelay NULL, -- same as H.230 ACE-- + zeroDelay NULL, -- same as H.230 ACZ-- + multipointModeCommand NULL, + cancelMultipointModeCommand NULL, + videoFreezePicture NULL, + videoFastUpdatePicture NULL, + videoFastUpdateGOB + SEQUENCE {firstGOB INTEGER(0..17), + numberOfGOBs INTEGER(1..18)}, + videoTemporalSpatialTradeOff INTEGER(0..31), -- commands a trade-off value-- + videoSendSyncEveryGOB NULL, + videoSendSyncEveryGOBCancel NULL, + ..., + videoFastUpdateMB + SEQUENCE {firstGOB INTEGER(0..255) OPTIONAL, + firstMB INTEGER(1..8192) OPTIONAL, + numberOfMBs INTEGER(1..8192), + ...}, + maxH223MUXPDUsize INTEGER(1..65535), -- units octets-- + encryptionUpdate EncryptionSync, + encryptionUpdateRequest EncryptionUpdateRequest, + switchReceiveMediaOff NULL, + switchReceiveMediaOn NULL, + progressiveRefinementStart + SEQUENCE {repeatCount + CHOICE {doOneProgression NULL, + doContinuousProgressions NULL, + doOneIndependentProgression NULL, + doContinuousIndependentProgressions NULL, + ...}, + ...}, + progressiveRefinementAbortOne NULL, + progressiveRefinementAbortContinuous NULL, + videoBadMBs + SEQUENCE {firstMB INTEGER(1..9216), + numberOfMBs INTEGER(1..9216), + temporalReference INTEGER(0..1023), + ...}, + lostPicture SEQUENCE OF PictureReference, + lostPartialPicture + SEQUENCE {pictureReference PictureReference, + firstMB INTEGER(1..9216), + numberOfMBs INTEGER(1..9216), + ...}, + recoveryReferencePicture SEQUENCE OF PictureReference, + encryptionUpdateCommand + SEQUENCE-- for ack'ed key update in H.235V3-- {encryptionSync + + EncryptionSync, + multiplePayloadStream + + MultiplePayloadStream + OPTIONAL, + ...}, + encryptionUpdateAck + SEQUENCE {synchFlag INTEGER(0..255), + ...}}, + ..., + direction EncryptionUpdateDirection OPTIONAL +} + +KeyProtectionMethod ::= + SEQUENCE -- specify how the new + + -- key is to be protected + { + secureChannel BOOLEAN, + sharedSecret BOOLEAN, + certProtectedKey BOOLEAN, + ... +} + +EncryptionUpdateRequest ::= SEQUENCE { + keyProtectionMethod KeyProtectionMethod OPTIONAL, + ..., + synchFlag INTEGER(0..255) OPTIONAL +} + +PictureReference ::= CHOICE { + pictureNumber INTEGER(0..1023), + longTermPictureIndex INTEGER(0..255), + ... +} + +-- ============================================================================= +-- Command Message: H.223 Multiplex Reconfiguration +-- ============================================================================= +H223MultiplexReconfiguration ::= CHOICE { + h223ModeChange + CHOICE {toLevel0 NULL, + toLevel1 NULL, + toLevel2 NULL, + toLevel2withOptionalHeader NULL, + ...}, + h223AnnexADoubleFlag CHOICE {start NULL, + stop NULL, + ...}, + ... +} + +-- ============================================================================= +-- Command Message: New ATM virtual channel command +-- ============================================================================= +NewATMVCCommand ::= SEQUENCE { + resourceID INTEGER(0..65535), + bitRate INTEGER(1..65535), -- units 64 kbit/s + bitRateLockedToPCRClock BOOLEAN, + bitRateLockedToNetworkClock BOOLEAN, + aal + CHOICE {aal1 + SEQUENCE {clockRecovery + CHOICE {nullClockRecovery NULL, + srtsClockRecovery NULL, + adaptiveClockRecovery NULL, + ...}, + errorCorrection + CHOICE {nullErrorCorrection NULL, + longInterleaver NULL, + shortInterleaver NULL, + errorCorrectionOnly NULL, + ...}, + structuredDataTransfer BOOLEAN, + partiallyFilledCells BOOLEAN, + ...}, + aal5 + SEQUENCE {forwardMaximumSDUSize INTEGER(0..65535), -- units octets-- + backwardMaximumSDUSize INTEGER(0..65535), -- units octets-- + ...}, + ...}, + multiplex + CHOICE {noMultiplex NULL, + transportStream NULL, + programStream NULL, + ...}, + reverseParameters + SEQUENCE {bitRate INTEGER(1..65535), -- units 64 kbit/s-- + bitRateLockedToPCRClock BOOLEAN, + bitRateLockedToNetworkClock BOOLEAN, + multiplex + CHOICE {noMultiplex NULL, + transportStream NULL, + programStream NULL, + ...}, + ...}, + ... +} + +-- ============================================================================= +-- Command Message: Mobile Multilink Reconfiguration command +-- ============================================================================= +MobileMultilinkReconfigurationCommand ::= SEQUENCE { + sampleSize INTEGER(1..255), + samplesPerFrame INTEGER(1..255), + status CHOICE {synchronized NULL, + reconfiguration NULL, + ...}, + ... +} + +-- ============================================================================= +-- Indication Message definitions +-- ============================================================================= +-- ============================================================================= +-- Indication Message: Function not understood +-- ============================================================================= +-- This is used to return a request, response or command that is not understood +FunctionNotUnderstood ::= CHOICE { + request RequestMessage, + response ResponseMessage, + command CommandMessage +} + +-- ============================================================================= +-- Indication Message: Function not Supported +-- ============================================================================= +-- This is used to return a complete request, response or command that is not +-- recognized +FunctionNotSupported ::= SEQUENCE { + cause + CHOICE {syntaxError NULL, + semanticError NULL, + unknownFunction NULL, + ...}, + returnedFunction OCTET STRING OPTIONAL, + ... +} + +-- ============================================================================= +-- Indication Message: Conference +-- ============================================================================= +ConferenceIndication ::= CHOICE { + sbeNumber INTEGER(0..9), -- same as H.230 SBE Number + terminalNumberAssign TerminalLabel, -- same as H.230 TIA + terminalJoinedConference TerminalLabel, -- same as H.230 TIN + terminalLeftConference TerminalLabel, -- same as H.230 TID + seenByAtLeastOneOther NULL, -- same as H.230 MIV + cancelSeenByAtLeastOneOther NULL, -- same as H.230 cancel MIV + seenByAll NULL, -- like H.230 MIV + cancelSeenByAll NULL, -- like H.230 MIV + terminalYouAreSeeing TerminalLabel, -- same as H.230 VIN + requestForFloor NULL, -- same as H.230 TIF + ..., + withdrawChairToken NULL, -- same as H.230 CCR MC-> chair + floorRequested TerminalLabel, -- same as H.230 TIF MC-> chair + terminalYouAreSeeingInSubPictureNumber + TerminalYouAreSeeingInSubPictureNumber, + videoIndicateCompose VideoIndicateCompose, + masterMCU NULL, -- same as H.230 MIM + cancelMasterMCU -- same as H.230 cancel MIM -- NULL +} + +TerminalYouAreSeeingInSubPictureNumber ::= SEQUENCE { + terminalNumber TerminalNumber, + subPictureNumber INTEGER(0..255), + ..., + mcuNumber McuNumber +} + +VideoIndicateCompose ::= SEQUENCE {compositionNumber INTEGER(0..255), + ... +} + +-- ============================================================================= +-- Indication Message: Miscellaneous H.230-like indication +-- ============================================================================= +MiscellaneousIndication ::= SEQUENCE { + logicalChannelNumber LogicalChannelNumber, + type + CHOICE {logicalChannelActive NULL, -- same as H.230 AIA and VIA-- + logicalChannelInactive NULL, -- same as H.230 AIM and VIS-- + multipointConference NULL, + cancelMultipointConference NULL, + multipointZeroComm NULL, -- same as H.230 MIZ-- + cancelMultipointZeroComm NULL, -- same as H.230 cancel MIZ-- + multipointSecondaryStatus NULL, -- same as H.230 MIS-- + cancelMultipointSecondaryStatus NULL, -- same as H.230 cancel MIS-- + videoIndicateReadyToActivate NULL, -- same as H.230 VIR-- + videoTemporalSpatialTradeOff INTEGER(0..31), -- indicates current -- + -- trade-off + ..., + videoNotDecodedMBs + SEQUENCE {firstMB INTEGER(1..8192), + numberOfMBs INTEGER(1..8192), + temporalReference INTEGER(0..255), + ...}, + transportCapability TransportCapability}, + ... +} + +-- ============================================================================= +-- Indication Message: Jitter Indication +-- ============================================================================= +JitterIndication ::= SEQUENCE { + scope + CHOICE {logicalChannelNumber LogicalChannelNumber, + resourceID INTEGER(0..65535), + wholeMultiplex NULL}, + estimatedReceivedJitterMantissa INTEGER(0..3), + estimatedReceivedJitterExponent INTEGER(0..7), + skippedFrameCount INTEGER(0..15) OPTIONAL, + additionalDecoderBuffer INTEGER(0..262143) OPTIONAL, + -- 262143 is 2^18 - 1 + ... +} + +-- ============================================================================= +-- Indication Message: H.223 logical channel skew +-- ============================================================================= +H223SkewIndication ::= SEQUENCE { + logicalChannelNumber1 LogicalChannelNumber, + logicalChannelNumber2 LogicalChannelNumber, + skew INTEGER(0..4095), -- units milliseconds + ... +} + +-- ============================================================================= +-- Indication Message: H.225.0 maximum logical channel skew +-- ============================================================================= +H2250MaximumSkewIndication ::= SEQUENCE { + logicalChannelNumber1 LogicalChannelNumber, + logicalChannelNumber2 LogicalChannelNumber, + maximumSkew INTEGER(0..4095), -- units milliseconds + ... +} + +-- ============================================================================= +-- Indication Message: MC Location Indication +-- ============================================================================= +MCLocationIndication ::= SEQUENCE { + signalAddress TransportAddress, -- this is the + + -- H.323 Call Signalling + -- address of the entity + -- which contains the MC + ... +} + +-- ============================================================================= +-- Indication Message: Vendor Identification +-- ============================================================================= +VendorIdentification ::= SEQUENCE { + vendor NonStandardIdentifier, + productNumber OCTET STRING(SIZE (1..256)) OPTIONAL, + -- per vendor + versionNumber OCTET STRING(SIZE (1..256)) OPTIONAL, + -- per productNumber + ... +} + +-- ============================================================================= +-- Indication Message: New ATM virtual channel indication +-- ============================================================================= +NewATMVCIndication ::= SEQUENCE { + resourceID INTEGER(0..65535), + bitRate INTEGER(1..65535), -- units 64 kbit/s + bitRateLockedToPCRClock BOOLEAN, + bitRateLockedToNetworkClock BOOLEAN, + aal + CHOICE {aal1 + SEQUENCE {clockRecovery + CHOICE {nullClockRecovery NULL, + srtsClockRecovery NULL, + adaptiveClockRecovery NULL, + ...}, + errorCorrection + CHOICE {nullErrorCorrection NULL, + longInterleaver NULL, + shortInterleaver NULL, + errorCorrectionOnly NULL, + ...}, + structuredDataTransfer BOOLEAN, + partiallyFilledCells BOOLEAN, + ...}, + aal5 + SEQUENCE {forwardMaximumSDUSize INTEGER(0..65535), -- units octets-- + backwardMaximumSDUSize INTEGER(0..65535), -- units octets-- + ...}, + ...}, + multiplex + CHOICE {noMultiplex NULL, + transportStream NULL, + programStream NULL, + ...}, + ..., + reverseParameters + SEQUENCE {bitRate INTEGER(1..65535), -- units 64 kbit/s-- + bitRateLockedToPCRClock BOOLEAN, + bitRateLockedToNetworkClock BOOLEAN, + multiplex + CHOICE {noMultiplex NULL, + transportStream NULL, + programStream NULL, + ...}, + ...} +} + +-- ============================================================================= +-- Indication Message: User input +-- ============================================================================= +IV8 ::= OCTET STRING(SIZE (8)) + +-- initial value for +-- 64-bit block ciphers +IV16 ::= OCTET STRING(SIZE (16)) + +-- initial value for +-- 128-bit block ciphers +Params ::= SEQUENCE { + iv8 IV8 OPTIONAL, -- 8-octet initialization vector + iv16 IV16 OPTIONAL, -- 16-octet initialization vector + iv OCTET STRING OPTIONAL, -- arbitrary length + + -- initialization vector + ... +} + +UserInputIndication ::= CHOICE { + nonStandard NonStandardParameter, + alphanumeric GeneralString, + ..., + userInputSupportIndication + CHOICE {nonStandard NonStandardParameter, + basicString NULL, -- indicates unsecured basic string-- + iA5String NULL, -- indicates unsecured IA5 string-- + generalString NULL, -- indicates unsecured general string-- + ..., + encryptedBasicString NULL, -- indicates encrypted Basic string-- + encryptedIA5String NULL, -- indicates encrypted IA5 string-- + encryptedGeneralString NULL -- indicates encrypted general string + }, + signal + SEQUENCE {signalType + IA5String(SIZE (1) ^ FROM ("0123456789#*ABCD!")), + -- holds dummy "!" if encryptedSignalType + -- is being used + duration INTEGER(1..65535) OPTIONAL, + -- milliseconds + rtp + SEQUENCE {timestamp INTEGER(0..4294967295) OPTIONAL, + expirationTime INTEGER(0..4294967295) OPTIONAL, + logicalChannelNumber LogicalChannelNumber, + ...} OPTIONAL, + ..., + rtpPayloadIndication NULL OPTIONAL, + paramS Params OPTIONAL, -- any "runtime" parameters-- + encryptedSignalType OCTET STRING(SIZE (1)) OPTIONAL, + -- encrypted signalType + algorithmOID OBJECT IDENTIFIER OPTIONAL}, + signalUpdate + SEQUENCE {duration INTEGER(1..65535), -- milliseconds-- + rtp + SEQUENCE {logicalChannelNumber LogicalChannelNumber, + ...} OPTIONAL, + ...}, + extendedAlphanumeric + SEQUENCE {alphanumeric GeneralString, -- holds empty string if-- + -- encryptedAlphanumeric is + -- being used + rtpPayloadIndication NULL OPTIONAL, + ..., + encryptedAlphanumeric + SEQUENCE {algorithmOID OBJECT IDENTIFIER, + paramS Params OPTIONAL, -- any "runtime" parameters-- + encrypted OCTET STRING, -- general string encrypted-- + ...} OPTIONAL}, + encryptedAlphanumeric + SEQUENCE {algorithmOID OBJECT IDENTIFIER, + paramS Params OPTIONAL, -- any "runtime" parameters-- + encrypted OCTET STRING, -- basic string encrypted-- + ...}, + genericInformation SEQUENCE OF GenericInformation +} + +-- generic information associated +-- with the message +-- ============================================================================= +-- Indication Message: Flow Control +-- ============================================================================= +FlowControlIndication ::= SEQUENCE { + scope + CHOICE {logicalChannelNumber LogicalChannelNumber, + resourceID INTEGER(0..65535), + wholeMultiplex NULL}, + restriction + CHOICE {maximumBitRate INTEGER(0..16777215), -- units 100 bit/s-- + noRestriction NULL}, + ... +} + +-- ============================================================================= +-- Indication Message: Mobile Multilink Reconfiguration indication +-- ============================================================================= +MobileMultilinkReconfigurationIndication ::= SEQUENCE { + sampleSize INTEGER(1..255), + samplesPerFrame INTEGER(1..255), + ... +} + +END + +-- Generated by Asnp, the ASN.1 pretty-printer of France Telecom R&D + diff --git a/epan/dissectors/asn1/h245/h245.cnf b/epan/dissectors/asn1/h245/h245.cnf new file mode 100644 index 00000000..1610861d --- /dev/null +++ b/epan/dissectors/asn1/h245/h245.cnf @@ -0,0 +1,1425 @@ +# H.245 conformation file +# Copyright 2005 Anders Broman anders.broman[at]ericsson.com +#---------------------------------------------------------------------------------------- + +#.OPT +PER +ALIGNED +#.END + +#.MODULE_EXPORTS +T38FaxProfile +DataProtocolCapability NO_PROT_PREFIX +OpenLogicalChannel +QOSCapability +H223Capability EXTERN WS_DLL +H223LogicalChannelParameters +TransportAddress +UnicastAddress +MulticastAddress +Capability +#.END + +#.PDU +OpenLogicalChannel + +#.MAKE_ENUM +RequestMessage TYPE_PREFIX +ResponseMessage TYPE_PREFIX +CommandMessage TYPE_PREFIX +IndicationMessage TYPE_PREFIX + +AudioCapability TYPE_PREFIX +#.END + +#---------------------------------------------------------------------------------------- + +#.VIRTUAL_ASSGN +G723AnnexCAudioMode G7231AnnexCCapability/g723AnnexCAudioMode G7231AnnexCMode/g723AnnexCAudioMode +Application DataApplicationCapability/application +Nlpid Application/nlpid DataMode/application/nlpid +Al3 H223LogicalChannelParameters/adaptationLayerType/al3 H223ModeParameters/adaptationLayerType/al3 +ArqType H223AL1MParameters/arqType H223AL3MParameters/arqType +Restriction FlowControlCommand/restriction FlowControlIndication/restriction +Scope FlowControlCommand/scope FlowControlIndication/scope JitterIndication/scope +EncryptedAlphanumeric UserInputIndication/extendedAlphanumeric/encryptedAlphanumeric UserInputIndication/encryptedAlphanumeric + +DepSeparateStream DepFECData/rfc2733/mode/separateStream DepFECMode/rfc2733Mode/mode/separateStream + +Rfc2733Format FECCapability/rfc2733Format FECMode/rfc2733Format + +#---------------------------------------------------------------------------------------- +#.FN_BODY MultiplexEntryDescriptor + /*MultiplexEntryDescriptor*/ + h223_me = NULL; + h223_mc = 0; +%(DEFAULT_BODY)s + if(h223_set_mc_handle) + (*h223_set_mc_handle)(%(ACTX)s->pinfo, h223_mc, h223_me); + /* stuff */ +#.END +#---------------------------------------------------------------------------------------- +#.FN_PARS MultiplexTableEntryNumber + VAL_PTR = &value +#.FN_BODY MultiplexTableEntryNumber + guint32 value; +%(DEFAULT_BODY)s + h223_mc = value & 0xf; +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY MultiplexEntryDescriptor/elementList + /* create a h223_mux_element to hold onto the head of the list, since + * h223_me will track the tail */ + h223_mux_element dummy_me; + memset (&dummy_me, 0, sizeof (h223_mux_element)); + h223_me = &dummy_me; +%(DEFAULT_BODY)s + /* set h223_me to the head of the list for MEDescriptor to pick up */ + h223_me = dummy_me.next; +#.END +#---------------------------------------------------------------------------------------- +#.FN_HDR MultiplexElement + /*MultiplexElement*/ + h223_mux_element* me = wmem_new(wmem_file_scope(), h223_mux_element); + h223_me->next = me; + h223_me = me; + h223_me->next = NULL; +#.END +#---------------------------------------------------------------------------------------- +#.FN_PARS MultiplexElement/type/logicalChannelNumber + VAL_PTR = &value +#.FN_BODY MultiplexElement/type/logicalChannelNumber + /*MultiplexElement/type/logicalChannelNumber*/ + guint32 value; +%(DEFAULT_BODY)s + h223_me->sublist = NULL; + h223_me->vc = value & 0xffff; +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY MultiplexElement/type/subElementList + h223_mux_element dummy_me, *parent_me = h223_me; + memset (&dummy_me, 0, sizeof (h223_mux_element)); + h223_me = &dummy_me; +%(DEFAULT_BODY)s + parent_me->sublist = dummy_me.next; + h223_me = parent_me; + h223_me->vc = 0; +#.END +#---------------------------------------------------------------------------------------- +#.FN_FTR MultiplexElement/repeatCount/untilClosingFlag + h223_me->repeat_count = 0; +#.END +#---------------------------------------------------------------------------------------- +#.FN_PARS MultiplexElement/repeatCount/finite + VAL_PTR = &value +#.FN_BODY MultiplexElement/repeatCount/finite + guint32 value; +%(DEFAULT_BODY)s + h223_me->repeat_count = value & 0xffff; +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY LogicalChannelNumber VAL_PTR = &value + guint32 value; +%(DEFAULT_BODY)s + h245_lc_temp = value & 0xfff; +#.END + +#=== OpenLogicalChannel ================================================================= +#.FN_BODY OpenLogicalChannel + gint32 temp; + + upcoming_olc = (!actx->pinfo->fd->visited) ? wmem_new0(wmem_file_scope(), olc_info_t) : NULL; + + h223_fw_lc_num = 0; + h223_lc_params_temp = NULL; + +%(DEFAULT_BODY)s + + if(h223_fw_lc_num != 0 && h223_fw_lc_params) { + h223_pending_olc *pending = wmem_new(wmem_file_scope(), h223_pending_olc); + pending->fw_channel_params = h223_fw_lc_params; + pending->rev_channel_params = h223_rev_lc_params; + temp = h223_fw_lc_num; + if (%(ACTX)s->pinfo->p2p_dir > -1) + wmem_map_insert(h223_pending_olc_reqs[%(ACTX)s->pinfo->p2p_dir], GINT_TO_POINTER(temp), pending); + } + + if (upcoming_olc) { + if (fast_start) { + h245_setup_channels(actx->pinfo, &upcoming_olc->rev_lc); + } else { + wmem_map_insert(h245_pending_olc_reqs, + wmem_strdup(wmem_file_scope(), gen_olc_key(upcoming_olc->fwd_lc_num, &%(ACTX)s->pinfo->dst, &%(ACTX)s->pinfo->src, actx->pinfo->pool)), + upcoming_olc); + } + } + upcoming_olc = NULL; + + if (h245_pi != NULL) + h245_pi->msg_type = H245_OpenLogChn; +#.END +#---------------------------------------------------------------------------------------- +#.FN_FTR OpenLogicalChannel/forwardLogicalChannelNumber + if (upcoming_olc) upcoming_olc->fwd_lc_num = h245_lc_temp; + h223_fw_lc_num = h245_lc_temp; +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY OpenLogicalChannel/forwardLogicalChannelParameters + + upcoming_channel = (upcoming_olc) ? &upcoming_olc->fwd_lc : NULL; + + h245_lc_dissector = NULL; +%(DEFAULT_BODY)s + if(h223_lc_params_temp && h245_lc_dissector) + h223_lc_params_temp->subdissector = h245_lc_dissector; + else if(h223_lc_params_temp) + h223_lc_params_temp->subdissector = data_handle; + + if (upcoming_channel && codec_type) { + (void) g_strlcpy(upcoming_channel->data_type_str, codec_type, sizeof(upcoming_channel->data_type_str)); + } + upcoming_channel = NULL; +#.END +#---------------------------------------------------------------------------------------- +#.FN_HDR OpenLogicalChannel/forwardLogicalChannelParameters/multiplexParameters/h223LogicalChannelParameters + h223_fw_lc_params = wmem_new(wmem_file_scope(), h223_lc_params); + h223_fw_lc_params->al_type = al_nonStandard; + h223_fw_lc_params->al_params = NULL; + h223_fw_lc_params->segmentable = 0; + h223_fw_lc_params->subdissector = NULL; + h223_lc_params_temp = h223_fw_lc_params; +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY OpenLogicalChannel/reverseLogicalChannelParameters + + upcoming_channel = (upcoming_olc) ? &upcoming_olc->rev_lc : NULL; + +%(DEFAULT_BODY)s + + if (upcoming_channel && codec_type) { + (void) g_strlcpy(upcoming_channel->data_type_str, codec_type, sizeof(upcoming_channel->data_type_str)); + } + upcoming_channel = NULL; +#.END +#---------------------------------------------------------------------------------------- +#.FN_HDR OpenLogicalChannel/reverseLogicalChannelParameters/multiplexParameters/h223LogicalChannelParameters + h223_rev_lc_params = wmem_new(wmem_file_scope(), h223_lc_params); + h223_rev_lc_params->al_type = al_nonStandard; + h223_rev_lc_params->al_params = NULL; + h223_rev_lc_params->segmentable = 0; + h223_rev_lc_params->subdissector = NULL; + h223_lc_params_temp = h223_rev_lc_params; +#.END +#======================================================================================== + + +#=== OpenLogicalChannelAck ============================================================== +#.FN_BODY OpenLogicalChannelAck + guint32 temp; + int p2p_dir; + h223_pending_olc *pend; + const gchar *olc_key; + olc_info_t *olc_req; + + upcoming_olc = (!actx->pinfo->fd->visited) ? wmem_new0(actx->pinfo->pool, olc_info_t) : NULL; + + h223_fw_lc_num = 0; + h223_rev_lc_num = 0; + +%(DEFAULT_BODY)s + + temp = h223_fw_lc_num; + p2p_dir = %(ACTX)s->pinfo->p2p_dir; + + if(%(ACTX)s->pinfo->p2p_dir == P2P_DIR_SENT) + %(ACTX)s->pinfo->p2p_dir = P2P_DIR_RECV; + else + %(ACTX)s->pinfo->p2p_dir = P2P_DIR_SENT; + pend = (h223_pending_olc *)wmem_map_lookup( h223_pending_olc_reqs[%(ACTX)s->pinfo->p2p_dir], GINT_TO_POINTER(temp) ); + if (pend) { + DISSECTOR_ASSERT( ( h223_rev_lc_num && pend->rev_channel_params) + || (!h223_rev_lc_num && !pend->rev_channel_params) ); + if(h223_add_lc_handle) { + (*h223_add_lc_handle)( %(ACTX)s->pinfo, h223_fw_lc_num, pend->fw_channel_params); + if(h223_rev_lc_num) + (*h223_add_lc_handle)( %(ACTX)s->pinfo, h223_rev_lc_num, pend->rev_channel_params); + } + } else { + /* we missed the OpenLogicalChannel packet */ + } + %(ACTX)s->pinfo->p2p_dir = p2p_dir; + + if (upcoming_olc) { + olc_key = gen_olc_key(upcoming_olc->fwd_lc_num, &%(ACTX)s->pinfo->src, &%(ACTX)s->pinfo->dst, actx->pinfo->pool); + olc_req = (olc_info_t *)wmem_map_lookup(h245_pending_olc_reqs, olc_key); + if (olc_req) { + update_unicast_addr(&olc_req->fwd_lc.media_addr, &upcoming_olc->fwd_lc.media_addr); + update_unicast_addr(&olc_req->fwd_lc.media_control_addr, &upcoming_olc->fwd_lc.media_control_addr); + update_unicast_addr(&olc_req->rev_lc.media_addr, &upcoming_olc->rev_lc.media_addr); + update_unicast_addr(&olc_req->rev_lc.media_control_addr, &upcoming_olc->rev_lc.media_control_addr); + h245_setup_channels(actx->pinfo, &olc_req->fwd_lc); + h245_setup_channels(actx->pinfo, &olc_req->rev_lc); + wmem_map_remove(h245_pending_olc_reqs, olc_key); + } else { + h245_setup_channels(actx->pinfo, &upcoming_olc->fwd_lc); + } + } + upcoming_olc = NULL; + + if (h245_pi != NULL) + h245_pi->msg_type = H245_OpenLogChnAck; +#.END +#---------------------------------------------------------------------------------------- +#.FN_FTR OpenLogicalChannelAck/forwardLogicalChannelNumber + if (upcoming_olc) upcoming_olc->fwd_lc_num = h245_lc_temp; + h223_fw_lc_num = h245_lc_temp; +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY OpenLogicalChannelAck/forwardMultiplexAckParameters + + upcoming_channel = (upcoming_olc) ? &upcoming_olc->fwd_lc : NULL; + +%(DEFAULT_BODY)s + + upcoming_channel = NULL; +#.END +#---------------------------------------------------------------------------------------- +#.FN_FTR OpenLogicalChannelAck/reverseLogicalChannelParameters/reverseLogicalChannelNumber + h223_rev_lc_num = h245_lc_temp; +#.END +#======================================================================================== + +#---------------------------------------------------------------------------------------- +#.FN_HDR H223LogicalChannelParameters/adaptationLayerType/al1Framed + if(h223_lc_params_temp) + h223_lc_params_temp->al_type = al1Framed; +#.END +#---------------------------------------------------------------------------------------- +#.FN_HDR H223LogicalChannelParameters/adaptationLayerType/al1NotFramed + if(h223_lc_params_temp) + h223_lc_params_temp->al_type = al1NotFramed; +#.END +#---------------------------------------------------------------------------------------- +#.FN_HDR H223LogicalChannelParameters/adaptationLayerType/al2WithoutSequenceNumbers + if(h223_lc_params_temp) + h223_lc_params_temp->al_type = al2WithoutSequenceNumbers; +#.END +#---------------------------------------------------------------------------------------- +#.FN_HDR H223LogicalChannelParameters/adaptationLayerType/al2WithSequenceNumbers + if(h223_lc_params_temp) + h223_lc_params_temp->al_type = al2WithSequenceNumbers; +#.END +#---------------------------------------------------------------------------------------- +#.FN_HDR H223LogicalChannelParameters/adaptationLayerType/al3 + if(h223_lc_params_temp) { + h223_lc_params_temp->al_type = al3; + h223_lc_params_temp->al_params = wmem_new(wmem_file_scope(), h223_al3_params); + } +#.END +#---------------------------------------------------------------------------------------- +#.FN_PARS Al3/controlFieldOctets + VAL_PTR = &value +#.FN_BODY Al3/controlFieldOctets + guint32 value; +%(DEFAULT_BODY)s + if(h223_lc_params_temp && h223_lc_params_temp->al_params) + ((h223_al3_params*)h223_lc_params_temp->al_params)->control_field_octets = value & 3 ; +#.END +#---------------------------------------------------------------------------------------- +#.FN_PARS Al3/sendBufferSize + VAL_PTR = &value +#.FN_BODY Al3/sendBufferSize + guint32 value; +%(DEFAULT_BODY)s + if(h223_lc_params_temp && h223_lc_params_temp->al_params) + ((h223_al3_params*)h223_lc_params_temp->al_params)->send_buffer_size = value & 0xfffff; +#.END +#---------------------------------------------------------------------------------------- +#.FN_HDR H223LogicalChannelParameters/adaptationLayerType/al1M + if(h223_lc_params_temp) + h223_lc_params_temp->al_type = al1M; +#.END +#---------------------------------------------------------------------------------------- +#.FN_HDR H223LogicalChannelParameters/adaptationLayerType/al2M + if(h223_lc_params_temp) + h223_lc_params_temp->al_type = al2M; +#.END +#---------------------------------------------------------------------------------------- +#.FN_HDR H223LogicalChannelParameters/adaptationLayerType/al3M + if(h223_lc_params_temp) + h223_lc_params_temp->al_type = al3M; +#.END +#---------------------------------------------------------------------------------------- +#.FN_PARS H223LogicalChannelParameters/segmentableFlag + VAL_PTR = &value +#.FN_BODY H223LogicalChannelParameters/segmentableFlag + gboolean value; +%(DEFAULT_BODY)s + if(h223_lc_params_temp) + h223_lc_params_temp->segmentable = value; +#.END +#---------------------------------------------------------------------------------------- +#.FN_FTR H263VideoCapability + h245_lc_dissector = h263_handle; +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY RequestMessage VAL_PTR = &value + gint32 value; + +%(DEFAULT_BODY)s + print_info_column(%(ACTX)s->pinfo->cinfo, &value, h245_RequestMessage_vals, h245_RequestMessage_short_vals); + + if (( codec_type != NULL ) && ( value == RequestMessage_openLogicalChannel) ){ + col_append_fstr(%(ACTX)s->pinfo->cinfo, COL_INFO, "(%%s) ", codec_type ); + } + + col_set_fence(%(ACTX)s->pinfo->cinfo,COL_INFO); + + /* Add to packet info */ + if (h245_pi == NULL) + return offset; + + if (strlen(h245_pi->frame_label) == 0) + { + snprintf(h245_pi->frame_label, 50, "%%s", val_to_str(value, h245_RequestMessage_short_vals, "UKN")); + + /* if it is OLC or RM*/ + if ((codec_type != NULL) && (( value == RequestMessage_openLogicalChannel) || ( value == RequestMessage_requestMode))) + { + (void) g_strlcat(h245_pi->frame_label, " (", 50); + (void) g_strlcat(h245_pi->frame_label, codec_type, 50); + (void) g_strlcat(h245_pi->frame_label, ")", 50); + } + } + (void) g_strlcat(h245_pi->comment, val_to_str(value, h245_RequestMessage_vals, ""), 50); +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY ResponseMessage VAL_PTR = &value + gint32 value; + +%(DEFAULT_BODY)s + print_info_column(%(ACTX)s->pinfo->cinfo, &value, h245_ResponseMessage_vals, h245_ResponseMessage_short_vals); + col_set_fence(%(ACTX)s->pinfo->cinfo,COL_INFO); + + if (h245_pi != NULL){ + /* Add to packet info */ + if ( strlen(h245_pi->frame_label) == 0 ){ + snprintf(h245_pi->frame_label, 50, "%%s", val_to_str(value, h245_ResponseMessage_short_vals, "UKN")); + } + (void) g_strlcat(h245_pi->comment, val_to_str(value, h245_ResponseMessage_vals, ""), 50); + } + +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY IndicationMessage VAL_PTR = &value + gint32 value; + +%(DEFAULT_BODY)s + print_info_column(%(ACTX)s->pinfo->cinfo, &value, h245_IndicationMessage_vals, h245_IndicationMessage_short_vals); + col_set_fence(%(ACTX)s->pinfo->cinfo,COL_INFO); + + /* Add to packet info */ + if (h245_pi !=NULL){ + if ( strlen(h245_pi->frame_label) == 0 ){ + snprintf(h245_pi->frame_label, 50, "%%s", val_to_str(value, h245_IndicationMessage_short_vals, "UKN")); + } + (void) g_strlcat(h245_pi->comment, val_to_str(value, h245_IndicationMessage_vals, ""), 50); + + } + +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY CommandMessage VAL_PTR = &value + gint32 value; + +%(DEFAULT_BODY)s + print_info_column(%(ACTX)s->pinfo->cinfo, &value, h245_CommandMessage_vals, h245_CommandMessage_short_vals); + col_set_fence(%(ACTX)s->pinfo->cinfo,COL_INFO); + + /* Add to packet info */ + if (h245_pi != NULL){ + if ( strlen(h245_pi->frame_label) == 0 ){ + snprintf(h245_pi->frame_label, 50, "%%s", val_to_str(value, h245_CommandMessage_short_vals, "UKN")); + } + (void) g_strlcat(h245_pi->comment, val_to_str(value, h245_CommandMessage_vals, ""), 50); + } + +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY AudioCapability VAL_PTR = &value + gint32 value; + +%(DEFAULT_BODY)s + codec_type = val_to_str(value, h245_AudioCapability_short_vals, ""); +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY VideoCapability VAL_PTR = &value + gint32 value; + +%(DEFAULT_BODY)s + codec_type = val_to_str(value, h245_VideoCapability_vals, ""); + +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY Application VAL_PTR = &value + gint32 value; + +%(DEFAULT_BODY)s + codec_type = val_to_str(value, h245_Application_vals, ""); +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY AudioMode VAL_PTR = &value + gint32 value; + +%(DEFAULT_BODY)s + codec_type = val_to_str(value, h245_AudioMode_vals, ""); +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY VideoMode VAL_PTR = &value + gint32 value; + +%(DEFAULT_BODY)s + codec_type = val_to_str(value, h245_VideoMode_vals, ""); +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY DataMode/application VAL_PTR = &value + gint32 value; + +%(DEFAULT_BODY)s + codec_type = val_to_str(value, h245_DataModeApplication_vals, ""); +#.END +#---------------------------------------------------------------------------------------- +#.FN_FTR MasterSlaveDeterminationAck + + if (h245_pi != NULL) + h245_pi->msg_type = H245_MastSlvDetAck; +#.END +#---------------------------------------------------------------------------------------- +#.FN_FTR MasterSlaveDeterminationReject + + if (h245_pi != NULL) + h245_pi->msg_type = H245_MastSlvDetRjc; +#.END +#---------------------------------------------------------------------------------------- +#.FN_FTR OpenLogicalChannelReject + + if (h245_pi != NULL) + h245_pi->msg_type = H245_OpenLogChnRjc; +#.END +#---------------------------------------------------------------------------------------- +#.FN_FTR CloseLogicalChannel + + if (h245_pi != NULL) + h245_pi->msg_type = H245_CloseLogChn; +#.END +#---------------------------------------------------------------------------------------- +#.FN_FTR CloseLogicalChannelAck + + if (h245_pi != NULL) + h245_pi->msg_type = H245_CloseLogChnAck; +#.END +#---------------------------------------------------------------------------------------- +#.FN_FTR OpenLogicalChannelConfirm + + if (h245_pi != NULL) + h245_pi->msg_type = H245_OpenLogChnCnf; +#.END +#---------------------------------------------------------------------------------------- +#.FN_FTR TerminalCapabilitySetAck + + if (h245_pi != NULL) + h245_pi->msg_type = H245_TermCapSetAck; +#.END +#---------------------------------------------------------------------------------------- +#.FN_FTR MasterSlaveDetermination + + if (h245_pi != NULL) + h245_pi->msg_type = H245_MastSlvDet; +#.END +#---------------------------------------------------------------------------------------- +#.FN_FTR TerminalCapabilitySetReject + + if (h245_pi != NULL) + h245_pi->msg_type = H245_TermCapSetRjc; +#.END +#---------------------------------------------------------------------------------------- +#.FN_FTR MasterSlaveDeterminationRelease + + if (h245_pi != NULL) + h245_pi->msg_type = H245_MastSlvDetRls; +#.END +#---------------------------------------------------------------------------------------- +#.FN_FTR TerminalCapabilitySet + + if (h245_pi != NULL) + h245_pi->msg_type = H245_TermCapSet; +#.END +#---------------------------------------------------------------------------------------- +#.FN_FTR TerminalCapabilitySetRelease + + if (h245_pi != NULL) + h245_pi->msg_type = H245_TermCapSetRls; +#.END +#---------------------------------------------------------------------------------------- + +#=== Generic Extensible Framework ======================================================= + +#.FN_HDR GenericMessage + void *priv_data = actx->private_data; + gef_ctx_t *gefx; + + /* check if not inherited from GenericInformation */ + gefx = gef_ctx_get(actx->private_data); + if (!gefx) { + gefx = gef_ctx_alloc(actx->pinfo->pool, NULL, "GenericMessage"); + actx->private_data = gefx; + } +#.FN_FTR + actx->private_data = priv_data; +#.END + +#.FN_BODY GenericMessage/subMessageIdentifier VAL_PTR = &subMessageIdentifier + guint32 subMessageIdentifier; + gef_ctx_t *gefx; + + gefx = gef_ctx_get(actx->private_data); + if (gefx) { + /* If this is a standard generic message use hf_h245_subMessageIdentifier_standard to get + * the value translated and make it fileterable. + */ + if (strcmp("GenericMessage/0.0.8.239.2", gefx->key) == 0) { + hf_index = hf_h245_subMessageIdentifier_standard; + } + } + +%(DEFAULT_BODY)s + if (gefx) { + gefx->subid = wmem_strdup_printf(actx->pinfo->pool, "%%u", subMessageIdentifier); + gef_ctx_update_key(actx->pinfo->pool, gef_ctx_get(actx->private_data)); + } + if (hf_index == hf_h245_subMessageIdentifier_standard) + { + col_append_str(actx->pinfo->cinfo, COL_INFO, val_to_str(subMessageIdentifier, h245_h239subMessageIdentifier_vals, "") ); + snprintf(h245_pi->frame_label, 50, "%%s", val_to_str(subMessageIdentifier, h245_h239subMessageIdentifier_vals, "")); + } +#.END + +#.FN_HDR GenericMessage/messageContent/_item + 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 GenericInformation + void *priv_data = actx->private_data; + actx->private_data = gef_ctx_alloc(actx->pinfo->pool, NULL, "GenericInformation"); +#.FN_FTR + actx->private_data = priv_data; +#.END + +#--- GenericCapability ------------------------------------------------------------------ +#.FN_HDR GenericCapability + void *priv_data = actx->private_data; + actx->private_data = gef_ctx_alloc(actx->pinfo->pool, NULL, "GenericCapability"); +#.FN_FTR + actx->private_data = priv_data; +#.END + +#.FN_HDR GenericCapability/collapsing/_item + gef_ctx_t *parent_gefx; + + parent_gefx = gef_ctx_get(actx->private_data); + actx->private_data = gef_ctx_alloc(actx->pinfo->pool, parent_gefx, "collapsing"); +#.FN_FTR + actx->private_data = parent_gefx; +#.END + +#.FN_HDR GenericCapability/nonCollapsing/_item + gef_ctx_t *parent_gefx; + + parent_gefx = gef_ctx_get(actx->private_data); + actx->private_data = gef_ctx_alloc(actx->pinfo->pool, parent_gefx, "nonCollapsing"); +#.FN_FTR + actx->private_data = parent_gefx; +#.END + +#.FN_BODY GenericCapability/nonCollapsingRaw VAL_PTR = &value_tvb + tvbuff_t *value_tvb; + gef_ctx_t *parent_gefx; + gef_ctx_t *gefx; + proto_item* ti; + + parent_gefx = gef_ctx_get(actx->private_data); + actx->private_data = gef_ctx_alloc(actx->pinfo->pool, parent_gefx, "nonCollapsingRaw"); +%(DEFAULT_BODY)s + gefx = gef_ctx_get(actx->private_data); + if (gefx) { + ti = proto_tree_add_string(tree, hf_h245_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)s->pinfo, %(TREE)s, %(ACTX)s); + } + actx->private_data = parent_gefx; +#.END + +#--- EncryptionSync --------------------------------------------------------------------- +#.FN_HDR EncryptionSync + void *priv_data = actx->private_data; + actx->private_data = gef_ctx_alloc(actx->pinfo->pool, NULL, "EncryptionSync"); +#.FN_FTR + actx->private_data = priv_data; +#.END +#---------------------------------------------------------------------------------------- + +#.FN_HDR CapabilityIdentifier + 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_h245_debug_dissector_try_string, tvb, offset>>3, 0, gefx->key); + proto_item_set_hidden(ti); + dissector_try_string(gef_name_dissector_table, gefx->key, tvb_new_subset_length_caplen(tvb, offset>>3, 0, 0), actx->pinfo, tree, actx); + } + actx->private_data = gefx; /* subdissector could overwrite it */ +#.END + +#.FN_BODY CapabilityIdentifier/standard FN_VARIANT = _str VAL_PTR = &standard_oid_str + const gchar *standard_oid_str = NULL; + gef_ctx_t *gefx; + +%(DEFAULT_BODY)s + gefx = gef_ctx_get(actx->private_data); + if (gefx) gefx->id = standard_oid_str; + + if(strcmp(standard_oid_str,"0.0.8.235.0.3.76") == 0) { /* MIKEY */ + if (upcoming_channel) + upcoming_channel->srtp_flag = TRUE; + } + + if(!h245_lc_dissector && strcmp(standard_oid_str,"0.0.8.245.1.1.1") == 0) + h245_lc_dissector = amr_handle; +#.END +#---------------------------------------------------------------------------------------- +#.FN_HDR ParameterIdentifier + 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_h245_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 ParameterIdentifier/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, "%%d", value_int); +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY ParameterValue/booleanArray VAL_PTR = &value + guint32 value; + guint8 *buf; + tvbuff_t *value_tvb; + gef_ctx_t *gefx; + proto_item* ti; + +%(DEFAULT_BODY)s + gefx = gef_ctx_get(actx->private_data); + if (gefx) { + buf = wmem_new(actx->pinfo->pool, guint8); + buf[0] = value; + value_tvb = tvb_new_child_real_data(tvb, buf, sizeof(guint8), sizeof(guint8)); + ti = proto_tree_add_string(tree, hf_h245_debug_dissector_try_string, tvb, offset>>3, 0, gefx->key); + proto_item_set_hidden(ti); + add_new_data_source(%(ACTX)s->pinfo, value_tvb, "booleanArray"); + dissector_try_string_new(gef_content_dissector_table, gefx->key, value_tvb, %(ACTX)s->pinfo, %(TREE)s, FALSE, %(ACTX)s); + } +#.END +#.FN_BODY ParameterValue/unsignedMin VAL_PTR = &value + guint32 value; + guint8 *buf; + tvbuff_t *value_tvb; + gef_ctx_t *gefx; + proto_item* ti; + +%(DEFAULT_BODY)s + gefx = gef_ctx_get(actx->private_data); + if (gefx) { + buf = (guint8 *)wmem_new(actx->pinfo->pool, guint16); + phton16(buf, value); + value_tvb = tvb_new_child_real_data(tvb, buf, sizeof(guint16), sizeof(guint16)); + ti = proto_tree_add_string(tree, hf_h245_debug_dissector_try_string, tvb, offset>>3, 0, gefx->key); + proto_item_set_hidden(ti); + add_new_data_source(%(ACTX)s->pinfo, value_tvb, "unsignedMin"); + dissector_try_string(gef_content_dissector_table, gefx->key, value_tvb, %(ACTX)s->pinfo, %(TREE)s, %(ACTX)s); + } +#.END +#.FN_BODY ParameterValue/unsignedMax VAL_PTR = &value + guint32 value; + guint8 *buf; + tvbuff_t *value_tvb; + gef_ctx_t *gefx; + proto_item* ti; + +%(DEFAULT_BODY)s + gefx = gef_ctx_get(actx->private_data); + if (gefx) { + buf = (guint8 *)wmem_new(actx->pinfo->pool, guint16); + phton16(buf, value); + value_tvb = tvb_new_child_real_data(tvb, buf, sizeof(guint16), sizeof(guint16)); + ti = proto_tree_add_string(tree, hf_h245_debug_dissector_try_string, tvb, offset>>3, 0, gefx->key); + proto_item_set_hidden(ti); + add_new_data_source(%(ACTX)s->pinfo, value_tvb, "unsignedMax"); + dissector_try_string(gef_content_dissector_table, gefx->key, value_tvb, %(ACTX)s->pinfo, %(TREE)s, %(ACTX)s); + } +#.END +#.FN_BODY ParameterValue/unsigned32Min VAL_PTR = &value + guint32 value; + guint8 *buf; + tvbuff_t *value_tvb; + gef_ctx_t *gefx; + proto_item* ti; + +%(DEFAULT_BODY)s + gefx = gef_ctx_get(actx->private_data); + if (gefx) { + buf = (guint8 *)wmem_new(actx->pinfo->pool, guint32); + phton32(buf, value); + value_tvb = tvb_new_child_real_data(tvb, buf, sizeof(guint32), sizeof(guint32)); + ti = proto_tree_add_string(tree, hf_h245_debug_dissector_try_string, tvb, offset>>3, 0, gefx->key); + proto_item_set_hidden(ti); + add_new_data_source(%(ACTX)s->pinfo, value_tvb, "unsigned32Min"); + dissector_try_string(gef_content_dissector_table, gefx->key, value_tvb, %(ACTX)s->pinfo, %(TREE)s, %(ACTX)s); + } +#.END +#.FN_BODY ParameterValue/unsigned32Max VAL_PTR = &value + guint32 value; + guint8 *buf; + tvbuff_t *value_tvb; + gef_ctx_t *gefx; + proto_item* ti; + +%(DEFAULT_BODY)s + gefx = gef_ctx_get(actx->private_data); + if (gefx) { + buf = (guint8 *)wmem_new(actx->pinfo->pool, guint32); + phton32(buf, value); + value_tvb = tvb_new_child_real_data(tvb, buf, sizeof(guint32), sizeof(guint32)); + ti = proto_tree_add_string(tree, hf_h245_debug_dissector_try_string, tvb, offset>>3, 0, gefx->key); + proto_item_set_hidden(ti); + add_new_data_source(%(ACTX)s->pinfo, value_tvb, "unsigned32Max"); + dissector_try_string(gef_content_dissector_table, gefx->key, value_tvb, %(ACTX)s->pinfo, %(TREE)s, %(ACTX)s); + } +#.END +#.FN_BODY ParameterValue/octetString 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_h245_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)s->pinfo, %(TREE)s, %(ACTX)s); + } +#.END + +#=== end of GEF ========================================================================= + +#---------------------------------------------------------------------------------------- +#.FN_BODY UnicastAddress/iPAddress/network VAL_PTR = &value_tvb + tvbuff_t *value_tvb; + +%(DEFAULT_BODY)s + + if (upcoming_channel && upcoming_channel->upcoming_addr) { + tvb_memcpy(value_tvb, upcoming_channel->upcoming_addr->addr_buf, 0, 4); + set_address(&upcoming_channel->upcoming_addr->addr, AT_IPv4, 4, upcoming_channel->upcoming_addr->addr_buf); + } +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY UnicastAddress/iPAddress/tsapIdentifier VAL_PTR = &tsapIdentifier + guint32 tsapIdentifier; + +%(DEFAULT_BODY)s + + if (upcoming_channel && upcoming_channel->upcoming_addr) { + upcoming_channel->upcoming_addr->port = tsapIdentifier; + } +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY UnicastAddress/iP6Address/network VAL_PTR = &value_tvb + tvbuff_t *value_tvb; + +%(DEFAULT_BODY)s + + if (upcoming_channel && upcoming_channel->upcoming_addr) { + tvb_memcpy(value_tvb, upcoming_channel->upcoming_addr->addr_buf, 0, 16); + set_address(&upcoming_channel->upcoming_addr->addr, AT_IPv6, 16, upcoming_channel->upcoming_addr->addr_buf); + } +#.END +#---------------------------------------------------------------------------------------- +#.FN_BODY UnicastAddress/iP6Address/tsapIdentifier VAL_PTR = &tsapIdentifier + guint32 tsapIdentifier; + +%(DEFAULT_BODY)s + + if (upcoming_channel && upcoming_channel->upcoming_addr) { + upcoming_channel->upcoming_addr->port = tsapIdentifier; + } +#.END +#---------------------------------------------------------------------------------------- +#.FN_HDR H2250LogicalChannelAckParameters/mediaChannel + if (upcoming_channel) + upcoming_channel->upcoming_addr = &upcoming_channel->media_addr; +#.END +#.FN_FTR H2250LogicalChannelAckParameters/mediaChannel + if (upcoming_channel) + upcoming_channel->upcoming_addr = NULL; +#.END +#---------------------------------------------------------------------------------------- +#.FN_HDR H2250LogicalChannelParameters/mediaChannel + if (upcoming_channel) + upcoming_channel->upcoming_addr = &upcoming_channel->media_addr; +#.END +#.FN_FTR H2250LogicalChannelParameters/mediaChannel + if (upcoming_channel) + upcoming_channel->upcoming_addr = NULL; +#.END +#---------------------------------------------------------------------------------------- +#.FN_HDR H2250LogicalChannelAckParameters/mediaControlChannel + if (upcoming_channel) + upcoming_channel->upcoming_addr = &upcoming_channel->media_control_addr; +#.END +#.FN_FTR H2250LogicalChannelAckParameters/mediaControlChannel + if (upcoming_channel) + upcoming_channel->upcoming_addr = NULL; +#.END +#---------------------------------------------------------------------------------------- +#.FN_HDR H2250LogicalChannelParameters/mediaControlChannel + if (upcoming_channel) + upcoming_channel->upcoming_addr = &upcoming_channel->media_control_addr; +#.END +#.FN_FTR H2250LogicalChannelParameters/mediaControlChannel + if (upcoming_channel) + upcoming_channel->upcoming_addr = NULL; +#.END + +#--- RTPPayloadType --------------------------------------------------------------------- +#.FN_HDR RTPPayloadType + rfc_number = 0; +#.END + +#.FN_PARS RTPPayloadType/payloadDescriptor/rfc-number + VAL_PTR = &rfc_number +#.END + +#.FN_BODY RTPPayloadType/payloadType VAL_PTR = &pt + unsigned int pt; + +%(DEFAULT_BODY)s + + if ((rfc_number == 2198) && upcoming_channel) { + upcoming_channel->rfc2198 = pt; + } +#.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 NonStandardIdentifier/h221NonStandard + t35CountryCode = 0; + t35Extension = 0; + manufacturerCode = 0; +#.FN_FTR NonStandardIdentifier/h221NonStandard + h221NonStandard = ((t35CountryCode * 256) + t35Extension) * 65536 + manufacturerCode; + proto_tree_add_uint(tree, hf_h245Manufacturer, tvb, (offset>>3)-4, 4, h221NonStandard); +#.FN_PARS +NonStandardIdentifier/h221NonStandard/t35CountryCode VAL_PTR = &t35CountryCode +NonStandardIdentifier/h221NonStandard/t35Extension VAL_PTR = &t35Extension +NonStandardIdentifier/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)s->pinfo, tree); + } +#.END + +#.FN_BODY FunctionNotSupported/returnedFunction VAL_PTR = &next_tvb + tvbuff_t *next_tvb = NULL; + proto_item *item; + proto_tree *subtree; + h245_packet_info *saved_h245_pi; + +%(DEFAULT_BODY)s + + if (next_tvb && tvb_reported_length(next_tvb)) { + saved_h245_pi = h245_pi; + h245_pi = NULL; + subtree = proto_tree_add_subtree(tree, next_tvb, 0, -1, ett_h245_returnedFunction, &item, "The returned function"); + proto_item_set_generated(item); + dissect_h245_MultimediaSystemControlMessage(next_tvb, 0, actx, subtree, hf_h245_pdu_type); + h245_pi = saved_h245_pi; + } + +#.FN_BODY DataType VAL_PTR = &choice_index +gint choice_index; + +%(DEFAULT_BODY)s + +if (upcoming_channel){ + if (choice_index==2){ + upcoming_channel->is_video=TRUE; + }else{ + upcoming_channel->is_video=FALSE; + } +} + +#---------------------------------------------------------------------------------------- +#.TYPE_RENAME + +NewATMVCCommand/aal Cmd_aal +NewATMVCCommand/aal/aal1 Cmd_aal1 +NewATMVCCommand/aal/aal5 Cmd_aal5 +NewATMVCCommand/aal/aal1/clockRecovery Cmd_clockRecovery +NewATMVCCommand/aal/aal1/errorCorrection Cmd_errorCorrection +NewATMVCCommand/multiplex Cmd_multiplex +NewATMVCCommand/reverseParameters Cmd_reverseParameters +NewATMVCCommand/reverseParameters/multiplex CmdR_multiplex + +NewATMVCIndication/aal Ind_aal +NewATMVCIndication/aal/aal1 Ind_aal1 +NewATMVCIndication/aal/aal5 Ind_aal5 +NewATMVCIndication/aal/aal1/clockRecovery Ind_clockRecovery +NewATMVCIndication/aal/aal1/errorCorrection Ind_errorCorrection +NewATMVCIndication/multiplex Ind_multiplex +NewATMVCIndication/reverseParameters Ind_reverseParameters +NewATMVCIndication/reverseParameters/multiplex IndR_multiplex + +MultilinkRequest/callInformation CallInformationReq +MultilinkRequest/addConnection AddConnectionReq +MultilinkRequest/removeConnection RemoveConnectionReq +MultilinkRequest/maximumHeaderInterval MaximumHeaderIntervalReq + +MultilinkResponse/callInformation CallInformationResp +MultilinkResponse/addConnection AddConnectionResp +MultilinkResponse/removeConnection RemoveConnectionResp +MultilinkResponse/maximumHeaderInterval MaximumHeaderIntervalResp + +MasterSlaveDeterminationReject/cause MasterSlaveDeterminationRejectCause +TerminalCapabilitySetReject/cause TerminalCapabilitySetRejectCause +OpenLogicalChannelReject/cause OpenLogicalChannelRejectCause +RequestChannelCloseReject/cause RequestChannelCloseRejectCause +MultiplexEntryRejectionDescriptions/cause MultiplexEntryRejectionDescriptionsCause +RequestMultiplexEntryRejectionDescriptions/cause RequestMultiplexEntryRejectionDescriptionsCause +RequestModeReject/cause RequestModeRejectCause +MaintenanceLoopReject/cause MaintenanceLoopRejectCause +FunctionNotSupported/cause FunctionNotSupportedCause + +AudioMode/g7231 Mode_g7231 + +DataMode/application DataModeApplication +DataMode/application/t38fax T38faxApp + +DepFECData/rfc2733 RFC2733Data + +IS13818AudioMode/audioLayer IS13818AudioLayer +IS13818AudioMode/audioSampling IS13818AudioSampling +IS13818AudioMode/multichannelType IS13818MultichannelType + +H223ModeParameters/adaptationLayerType AdaptationLayerType + +H223AL1MParameters/headerFEC AL1HeaderFEC +H223AL1MParameters/crcLength AL1CrcLength +H223AL2MParameters/headerFEC AL2HeaderFEC +H223AL3MParameters/crcLength AL3CrcLength + +H261VideoMode/resolution H261Resolution +H263VideoMode/resolution H263Resolution + +UnicastAddress/iPAddress/network Ipv4_network +MulticastAddress/iPAddress MIPAddress +MulticastAddress/iP6Address MIP6Address + +NonStandardIdentifier/h221NonStandard H221NonStandardID +OpenLogicalChannel/forwardLogicalChannelNumber OLC_fw_lcn +OpenLogicalChannelAck/forwardLogicalChannelNumber OLC_ack_fw_lcn +OpenLogicalChannel/forwardLogicalChannelParameters/multiplexParameters OLC_forw_multiplexParameters +OpenLogicalChannel/reverseLogicalChannelParameters/multiplexParameters OLC_rev_multiplexParameters +OpenLogicalChannel/reverseLogicalChannelParameters OLC_reverseLogicalChannelParameters +OpenLogicalChannel/forwardLogicalChannelParameters/multiplexParameters/h223LogicalChannelParameters OLC_fw_h223_params +OpenLogicalChannel/reverseLogicalChannelParameters/multiplexParameters/h223LogicalChannelParameters OLC_rev_h223_params +OpenLogicalChannelAck/reverseLogicalChannelParameters OLC_ack_reverseLogicalChannelParameters +CloseLogicalChannel/reason Clc_reason +VCCapability/availableBitRates/type Avb_type +MultiplexElement/type Me_type +RedundancyEncodingDTModeElement/type Re_type +MaintenanceLoopRequest/type Mlr_type +MaintenanceLoopAck/type Mla_type +MaintenanceLoopReject/type Mlrej_type +MiscellaneousCommand/type Mc_type +MiscellaneousIndication/type Mi_type +V76LogicalChannelParameters/mode V76LCP_mode +DepFECData/rfc2733/mode FECdata_mode +DepFECMode/rfc2733Mode/mode FEC_mode +IS11172AudioMode/multichannelType IS11172_multichannelType +MultiplexElement/repeatCount/finite ME_finiteRepeatCount +MultiplexElement/repeatCount ME_repeatCount +DepFECCapability/rfc2733 FECC_rfc2733 +RequestModeAck/response Req_mode_ack_response +UserInputIndication/signalUpdate/rtp Si_rtp +UnicastAddress/iPAddress/tsapIdentifier TsapIdentifier +H2250LogicalChannelAckParameters/mediaChannel Ack_mediaChannel +H2250LogicalChannelAckParameters/mediaControlChannel Ack_mediaControlChannel +CommunicationModeTableEntry/mediaChannel Cm_mediaChannel +#---------------------------------------------------------------------------------------- +#.FIELD_RENAME +#---------------------------------------------------------------------------------------- + +NewATMVCCommand/aal cmd_aal +NewATMVCCommand/aal/aal1 cmd_aal1 +NewATMVCCommand/aal/aal5 cmd_aal5 +NewATMVCCommand/aal/aal1/clockRecovery cmd_clockRecovery +NewATMVCCommand/aal/aal1/errorCorrection cmd_errorCorrection +NewATMVCCommand/multiplex cmd_multiplex +NewATMVCCommand/reverseParameters cmd_reverseParameters +NewATMVCCommand/reverseParameters/multiplex cmdr_multiplex + +NewATMVCIndication/aal ind_aal +NewATMVCIndication/aal/aal1 ind_aal1 +NewATMVCIndication/aal/aal5 ind_aal5 +NewATMVCIndication/aal/aal1/clockRecovery ind_clockRecovery +NewATMVCIndication/aal/aal1/errorCorrection ind_errorCorrection +NewATMVCIndication/multiplex ind_multiplex +NewATMVCIndication/reverseParameters ind_reverseParameters +NewATMVCIndication/reverseParameters/multiplex indr_multiplex + +MultilinkRequest/callInformation callInformationReq +MultilinkRequest/addConnection addConnectionReq +MultilinkRequest/removeConnection removeConnectionReq +MultilinkRequest/maximumHeaderInterval maximumHeaderIntervalReq + +MultilinkResponse/callInformation callInformationResp +MultilinkResponse/addConnection addConnectionResp +MultilinkResponse/removeConnection removeConnectionResp +MultilinkResponse/maximumHeaderInterval maximumHeaderIntervalResp + +MultiplexElement/type/logicalChannelNumber logicalChannelNum +ConnectionIdentifier/sequenceNumber sequenceNum + +RequestMessage/nonStandard nonStandardMsg +ResponseMessage/nonStandard nonStandardMsg +CommandMessage/nonStandard nonStandardMsg +IndicationMessage/nonStandard nonStandardMsg +MultilinkRequest/nonStandard nonStandardMsg +MultilinkResponse/nonStandard nonStandardMsg +MultilinkIndication/nonStandard nonStandardMsg +DialingInformation/nonStandard nonStandardMsg +DialingInformationNetworkType/nonStandard nonStandardMsg + +UserInputCapability/nonStandard ui_nonStandard +H2250LogicalChannelParameters/nonStandard nonStandardParams +H2250LogicalChannelAckParameters/nonStandard nonStandardParams +CommunicationModeTableEntry/nonStandard nonStandardParams +ConferenceCapability/nonStandardData nonStandardParams + +UnicastAddress/iPXAddress/tsapIdentifier ipx_tsapIdentifier + +NonStandardParameter/data nsd_data +NonStandardIdentifier/h221NonStandard h221NonStandardID + +AudioMode/g711Alaw64k g711Alaw64k_mode +AudioMode/g711Alaw56k g711Alaw56k_mode +AudioMode/g711Ulaw64k g711Ulaw64k_mode +AudioMode/g711Ulaw56k g711Ulaw56k_mode +AudioMode/g722-64k g722_64k_mode +AudioMode/g722-56k g722_56k_mode +AudioMode/g722-48k g722_48k_mode +AudioMode/g728 g728_mode +AudioMode/g729 g729_mode +AudioMode/g729AnnexA g729AnnexA_mode +AudioMode/g7231 g7231_mode +AudioMode/vbd vbd_mode + +IS11172AudioMode/audioLayer/audioLayer1 audioLayer1Mode +IS11172AudioMode/audioLayer/audioLayer2 audioLayer2Mode +IS11172AudioMode/audioLayer/audioLayer3 audioLayer3Mode +IS11172AudioMode/audioSampling/audioSampling32k audioSampling32kMode +IS11172AudioMode/audioSampling/audioSampling44k1 audioSampling44k1Mode +IS11172AudioMode/audioSampling/audioSampling48k audioSampling48kMode +IS11172AudioMode/multichannelType/singleChannel singleChannelMode + +IS13818AudioMode/audioLayer audioLayerMode +IS13818AudioMode/audioLayer/audioLayer1 audioLayer1Mode +IS13818AudioMode/audioLayer/audioLayer2 audioLayer2Mode +IS13818AudioMode/audioLayer/audioLayer3 audioLayer3Mode +IS13818AudioMode/audioSampling audioSamplingMode +IS13818AudioMode/audioSampling/audioSampling16k audioSampling16kMode +IS13818AudioMode/audioSampling/audioSampling22k05 audioSampling22k05Mode +IS13818AudioMode/audioSampling/audioSampling24k audioSampling24kMode +IS13818AudioMode/audioSampling/audioSampling32k audioSampling32kMode +IS13818AudioMode/audioSampling/audioSampling44k1 audioSampling44k1Mode +IS13818AudioMode/audioSampling/audioSampling48k audioSampling48kMode +IS13818AudioMode/multichannelType/singleChannel singleChannelMode +IS13818AudioMode/multichannelType/threeChannels2-1 threeChannels2_1Mode +IS13818AudioMode/multichannelType/threeChannels3-0 threeChannels3_0Mode +IS13818AudioMode/multichannelType/fourChannels2-0-2-0 fourChannels2_0_2_0Mode +IS13818AudioMode/multichannelType/fourChannels2-2 fourChannels2_2Mode +IS13818AudioMode/multichannelType/fourChannels3-1 fourChannels3_1Mode +IS13818AudioMode/multichannelType/fiveChannels3-0-2-0 fiveChannels3_0_2_0Mode +IS13818AudioMode/multichannelType/fiveChannels3-2 fiveChannels3_2Mode + +H262VideoMode/profileAndLevel/profileAndLevel-SPatML profileAndLevel_SPatMLMode +H262VideoMode/profileAndLevel/profileAndLevel-MPatLL profileAndLevel_MPatLLMode +H262VideoMode/profileAndLevel/profileAndLevel-MPatML profileAndLevel_MPatMLMode +H262VideoMode/profileAndLevel/profileAndLevel-MPatH-14 profileAndLevel_MPatH-14Mode +H262VideoMode/profileAndLevel/profileAndLevel-MPatHL profileAndLevel_MPatHLMode +H262VideoMode/profileAndLevel/profileAndLevel-SNRatLL profileAndLevel_SNRatLLMode +H262VideoMode/profileAndLevel/profileAndLevel-SNRatML profileAndLevel_SNRatMLMode +H262VideoMode/profileAndLevel/profileAndLevel-SpatialatH-14 profileAndLevel_SpatialatH-14Mode +H262VideoMode/profileAndLevel/profileAndLevel-HPatML profileAndLevel_HPatMLMode +H262VideoMode/profileAndLevel/profileAndLevel-HPatH-14 profileAndLevel_HPatH-14Mode +H262VideoMode/profileAndLevel/profileAndLevel-HPatHL profileAndLevel_HPatHLMode + +RedundancyEncodingMode/secondaryEncoding/audioData audioMode +RedundancyEncodingMode/secondaryEncoding secondaryEncodingMode +RedundancyEncodingCapability/secondaryEncoding secondaryEncodingCapability + +UnicastAddress/iPAddress/network ip4_network +UnicastAddress/iP6Address/network ip6_network +MulticastAddress/iP6Address/network mip6_network +MulticastAddress/iPAddress mIPAddress +MulticastAddress/iP6Address mIP6Address +MulticastAddress/iPAddress/network mip4_network + +RTPPayloadType/payloadType rtpPayloadType +RTPPayloadType/payloadDescriptor/nonStandardIdentifier nonStandard +MediaPacketizationCapability/rtpPayloadType rtpPayloadTypes +T84Profile/t84Restricted/cif cif_bool +T84Profile/t84Restricted/qcif qcif_bool +H223ModeParameters/adaptationLayerType adaptationLayer +H261VideoMode/resolution h261_resolution +H263VideoMode/resolution h263_resolution +H263VideoMode/resolution/custom custom_res +CommunicationModeTableEntry/dataType entryDataType +VCCapability/transportStream transportStream_bool +MultiplePayloadStreamMode/elements mpsmElements +RedundancyEncodingDTMode/secondary secondaryDTM +MultiplexEntrySendReject/rejectionDescriptions sendRejectionDescriptions + +MultiplexEntrySendAck/multiplexTableEntryNumber multiplexTableEntryNumbers +MultiplexEntrySendRelease/multiplexTableEntryNumber multiplexTableEntryNumbers +CapabilityIdentifier/standard standardOid +MiscellaneousIndication/type/videoNotDecodedMBs/temporalReference temporalReference_0_255 +CloseLogicalChannel/source cLC_source +DepFECCapability/rfc2733/separateStream separateStreamBool +DepFECCapability/rfc2733/separateStream/samePort samePortBool +VCCapability/aal1/srtsClockRecovery srtsClockRecovery_bool +VCCapability/aal1ViaGateway/srtsClockRecovery srtsClockRecoveryflag +DataMode/application/t84 t84DataProtocolCapability +DataMode/application/t38fax t38faxDataProtocolCapability +H2250LogicalChannelParameters/sessionID sessionID_0_255 +H223Capability/mobileOperationTransmitCapability/h223AnnexADoubleFlag h223AnnexADoubleFlagFlag +SendTerminalCapabilitySet/genericRequest genericRequestFlag +H2250LogicalChannelParameters/mediaPacketization/h261aVideoPacketization h261aVideoPacketizationFlag +RemoteMCResponse/reject/functionNotSupported functionNotSupportedFlag +NewATMVCCommand/aal/aal1/errorCorrection/longInterleaver longInterleaverFlag +NewATMVCIndication/aal/aal1/errorCorrection/longInterleaver longInterleaverFlag +MiscellaneousCommand/type/videoFastUpdateMB/firstGOB firstGOB_0_255 +H263VideoCapability/sqcifMPI sqcifMPI_1_32 +EnhancementOptions/sqcifMPI sqcifMPI_1_32 +NewATMVCCommand/aal/aal1/errorCorrection/shortInterleaver shortInterleaverFlag +NewATMVCIndication/aal/aal1/errorCorrection/shortInterleaver shortInterleaverFlag +NewATMVCCommand/multiplex/programStream programStreamFlag +NewATMVCCommand/reverseParameters/multiplex/programStream programStreamFlag +NewATMVCIndication/multiplex/programStream programStreamFlag +NewATMVCIndication/reverseParameters/multiplex/programStream programStreamFlag +H263ModeComboFlags/enhancedReferencePicSelect enhancedReferencePicSelectBool +NewATMVCCommand/aal/aal1/errorCorrection/errorCorrectionOnly errorCorrectionOnlyFlag +NewATMVCIndication/aal/aal1/errorCorrection/errorCorrectionOnly errorCorrectionOnlyFlag +UserInputCapability/extendedAlphanumeric extendedAlphanumericFlag +MultiplexElement/repeatCount/finite me_repeatCount_finite +MiscellaneousCommand/type/videoFastUpdateMB/firstMB firstMB_1_8192 +MiscellaneousIndication/type/videoNotDecodedMBs/firstMB firstMB_1_8192 +H261VideoCapability/cifMPI cifMPI_1_4 +CustomPictureClockFrequency/cifMPI cifMPI2_1_2048 +H263VideoCapability/cif16MPI cif16MPI_1_32 +EnhancementOptions/cif16MPI cif16MPI_1_32 +H263VideoCapability/cif4MPI cif4MPI_1_32 +EnhancementOptions/cif4MPI cif4MPI_1_32 +H263Version3Options/pictureNumber pictureNumberBoolean +MiscellaneousCommand/type/videoBadMBs/numberOfMBs numberOfMBs1_1_9216 +MiscellaneousCommand/type/lostPartialPicture/numberOfMBs numberOfMBs1_1_9216 +DataApplicationCapability/maxBitRate maxBitRate2_0_4294967295 +GenericCapability/maxBitRate maxBitRate2_0_4294967295 +H261VideoCapability/maxBitRate maxBitRate_1_19200 +IS13818AudioCapability/bitRate bitRate2_1_1130 +IS13818AudioMode/bitRate bitRate2_1_1130 +IS11172AudioCapability/bitRate bitRate_1_448 +IS11172AudioMode/bitRate bitRate_1_448 +DataMode/bitRate bitRate_0_4294967295 +H223Capability/bitRate bitRate_1_19200 +H261VideoMode/bitRate bitRate_1_19200 +H263VideoMode/bitRate bitRate_1_19200 +DialingInformationNumber/networkAddress din_networkAddress +NewATMVCCommand/aal/aal1/clockRecovery/adaptiveClockRecovery adaptiveClockRecoveryFlag +NewATMVCIndication/aal/aal1/clockRecovery/adaptiveClockRecovery adaptiveClockRecoveryFlag +NewATMVCCommand/aal/aal1/clockRecovery/nullClockRecovery nullClockRecoveryflag +NewATMVCIndication/aal/aal1/clockRecovery/nullClockRecovery nullClockRecoveryflag +NewATMVCCommand/aal/aal1/errorCorrection/nullErrorCorrection nullErrorCorrectionFlag +NewATMVCIndication/aal/aal1/errorCorrection/nullErrorCorrection nullErrorCorrectionFlag +H223AL2MParameters/headerFEC aL2HeaderFEC +H223AL1MParameters/headerFEC aL1HeaderFEC +H223AL1MParameters/crcLength crcLength2 +H223AL3MParameters/crcLength crlength2 +SendTerminalCapabilitySet/specificRequest/multiplexCapability multiplexCapabilityBool +DepFECCapability/rfc2733/redundancyEncoding redundancyEncodingBool +DepFECData/rfc2733/mode/redundancyEncoding redundancyEncodingFlag +DepFECMode/rfc2733Mode/mode/redundancyEncoding redundancyEncodingFlag +ParameterValue/genericParameter genericParameters + +H261VideoCapability/qcifMPI qcifMPI_1_4 +CustomPictureClockFrequency/qcifMPI qcifMPI_1_2048 +DataMode/application datamodeapplication +MasterSlaveDeterminationReject/cause msd_rej_cause + +OpenLogicalChannelReject/cause olc_rej_cause +RequestMultiplexEntryRejectionDescriptions/cause req_mux_rej_cause +RequestModeReject/cause req_rej_cause +MultiplexEntryRejectionDescriptions/cause mux_rej_cause +RequestChannelCloseReject/cause req_chan_clos_rej_cause +TerminalCapabilitySetReject/cause tcs_rej_cause +MaintenanceLoopReject/cause maintloop_rej_cause +FunctionNotSupported/cause fns_cause +Restriction/maximumBitRate res_maximumBitRate +RedundancyEncodingDTMode/primary prmary_dtmode +RedundancyEncoding/rtpRedundancyEncoding/primary primary +DepFECData/rfc2733 dep_rfc2733 +DepFECMode/rfc2733Mode/mode fec_mode +DepFECData/rfc2733/mode fec_data_mode +FECData/rfc2733/pktMode/rfc2733sameport mode_rfc2733sameport +FECData/rfc2733/pktMode/rfc2733diffport mode_rfc2733diffport +V76LogicalChannelParameters/mode v76_mode +OpenLogicalChannelAck/reverseLogicalChannelParameters/multiplexParameters olc_ack_multiplexParameters +OpenLogicalChannel/forwardLogicalChannelNumber olc_fw_lcn +OpenLogicalChannelAck/forwardLogicalChannelNumber olc_ack_fw_lcn +OpenLogicalChannel/forwardLogicalChannelParameters/multiplexParameters olc_forw_multiplexParameters +OpenLogicalChannel/reverseLogicalChannelParameters/multiplexParameters olc_rev_multiplexParameter +IS11172AudioMode/multichannelType is11172multichannelType +IS13818AudioMode/multichannelType is13818MultichannelType +CloseLogicalChannel/reason clc_reason +MultiplexElement/repeatCount me_repeatCount +DepFECCapability/rfc2733 fecc_rfc2733 +RequestModeAck/response req_mode_ack_response +UserInputIndication/signalUpdate/rtp si_rtp +VCCapability/availableBitRates/type avb_type +MultiplexElement/type me_type +RedundancyEncodingDTModeElement/type re_type +MaintenanceLoopRequest/type mlr_type +MaintenanceLoopAck/type mla_type +MaintenanceLoopReject/type mlrej_type +MiscellaneousCommand/type mc_type +MiscellaneousIndication/type mi_type +VBDMode/type vbd_type +VBDCapability/type vbd_cap_type +OpenLogicalChannelAck/reverseLogicalChannelParameters olc_ack_reverseLogicalChannelParameters +H2250LogicalChannelAckParameters/mediaChannel ack_mediaChannel +H2250LogicalChannelAckParameters/mediaControlChannel ack_mediaControlChannel +UnicastAddress/iP6Address/tsapIdentifier ipv6_tsapIdentifier +UnicastAddress/iPSourceRouteAddress/tsapIdentifier iPSrcRoute_tsapIdentifier +MulticastAddress/iPAddress/tsapIdentifier multicast_tsapIdentifier +MulticastAddress/iP6Address/tsapIdentifier multicast_IPv6_tsapIdentifier +CommunicationModeTableEntry/mediaChannel cm_mediaChannel +CommunicationModeTableEntry/mediaControlChannel cm_mediaControlChannel +Criteria/value criteriaValue + +OpenLogicalChannel/reverseLogicalChannelParameters/multiplexParameters/h223LogicalChannelParameters olc_rev_h223_params +OpenLogicalChannel/forwardLogicalChannelParameters/multiplexParameters/h223LogicalChannelParameters olc_fw_h223_params + +H223LogicalChannelParameters/adaptationLayerType/al1Framed h223_al_type_al1Framed +H223LogicalChannelParameters/adaptationLayerType/al1NotFramed h223_al_type_al1NotFramed +H223LogicalChannelParameters/adaptationLayerType/al2WithoutSequenceNumbers h223_al_type_al2WithoutSequenceNumbers +H223LogicalChannelParameters/adaptationLayerType/al2WithSequenceNumbers h223_al_type_al2WithSequenceNumbers +H223LogicalChannelParameters/adaptationLayerType/al3 h223_al_type_al3 +Al3/sendBufferSize al3_sendBufferSize +H223LogicalChannelParameters/adaptationLayerType/al1M h223_al_type_al1M +H223LogicalChannelParameters/adaptationLayerType/al2M h223_al_type_al2M +H223LogicalChannelParameters/adaptationLayerType/al3M h223_al_type_al3M +H223LogicalChannelParameters/segmentableFlag h223_lc_segmentableFlag + +#---------------------------------------------------------------------------------------- +#.TYPE_ATTR +UnicastAddress/iPAddress/network TYPE = FT_IPv4 DISPLAY = BASE_NONE STRINGS = NULL +UnicastAddress/iP6Address/network TYPE = FT_IPv6 DISPLAY = BASE_NONE STRINGS = NULL +MulticastAddress/iPAddress/network TYPE = FT_IPv4 DISPLAY = BASE_NONE STRINGS = NULL +MulticastAddress/iP6Address/network TYPE = FT_IPv6 DISPLAY = BASE_NONE STRINGS = NULL +RTPPayloadType/payloadDescriptor/rfc-number TYPE = FT_UINT32 DISPLAY = BASE_DEC STRINGS = VALS(h245_RFC_number_vals) +NonStandardIdentifier/h221NonStandard/t35CountryCode TYPE = FT_UINT32 DISPLAY = BASE_DEC STRINGS = VALS(T35CountryCode_vals) +VendorIdentification/productNumber TYPE = FT_STRING DISPLAY = BASE_NONE STRINGS = NULL +VendorIdentification/versionNumber TYPE = FT_STRING DISPLAY = BASE_NONE STRINGS = NULL +ParameterValue/octetString TYPE = FT_UINT32 DISPLAY = BASE_DEC + +#---------------------------------------------------------------------------------------- +#.FIELD_ATTR +AlternativeCapabilitySet/_item NAME = "alternativeCapability" +CapabilityIdentifier/standard ABBREV=standardOid +UnicastAddress/iPXAddress/tsapIdentifier ABBREV=ipx.tsapIdentifier +UnicastAddress/iP6Address/tsapIdentifier ABBREV=ipv6.tsapIdentifier +UnicastAddress/iPSourceRouteAddress/tsapIdentifier ABBREV=iPSrcRoute.tsapIdentifier +MulticastAddress/iPAddress/tsapIdentifier ABBREV=multicast.tsapIdentifier +MulticastAddress/iP6Address/tsapIdentifier ABBREV=multicast_IPv6.tsapIdentifier +UnicastAddress/iPAddress/network ABBREV=ip4_network +UnicastAddress/iP6Address/network ABBREV=ip6_network +MulticastAddress/iP6Address/network ABBREV=mip6_network +MulticastAddress/iPAddress ABBREV=mIPAddress +MulticastAddress/iP6Address ABBREV=mIP6Address +MulticastAddress/iPAddress/network ABBREV=mip4_network +Criteria/value ABBREV=criteriaValue +DialingInformationNumber/networkAddress ABBREV=din_networkAddress +SendTerminalCapabilitySet/specificRequest/multiplexCapability ABBREV=multiplexCapabilityBool +H263Version3Options/pictureNumber ABBREV=pictureNumberBoolean +H223Capability/mobileOperationTransmitCapability/h223AnnexADoubleFlag ABBREV=h223AnnexADoubleFlagFlag + +#---------------------------------------------------------------------------------------- +# vim:set ts=4 sts=2 sw=2: diff --git a/epan/dissectors/asn1/h245/packet-h245-template.c b/epan/dissectors/asn1/h245/packet-h245-template.c new file mode 100644 index 00000000..7950ca14 --- /dev/null +++ b/epan/dissectors/asn1/h245/packet-h245-template.c @@ -0,0 +1,598 @@ +/* packet-h245_asn1.c + * Routines for h245 packet dissection + * Copyright 2004, Anders Broman + * + * Wireshark - Network traffic analyzer + * By Gerald Combs + * Copyright 1998 Gerald Combs + * + * SPDX-License-Identifier: GPL-2.0-or-later + * + * To quote the author of the previous 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "packet-tpkt.h" +#include "packet-per.h" +#include "packet-h323.h" +#include "packet-h245.h" +#include "packet-rtp.h" +#include "packet-rtcp.h" +#include "packet-t38.h" + +#define PNAME "MULTIMEDIA-SYSTEM-CONTROL" +#define PSNAME "H.245" +#define PFNAME "h245" + +void proto_register_h245(void); +void proto_reg_handoff_h245(void); + +static dissector_handle_t rtcp_handle=NULL; +static dissector_table_t nsp_object_dissector_table; +static dissector_table_t nsp_h221_dissector_table; +static dissector_table_t gef_name_dissector_table; +static dissector_table_t gef_content_dissector_table; +static dissector_handle_t h245_handle; +static dissector_handle_t nsp_handle; +static dissector_handle_t data_handle; +static dissector_handle_t MultimediaSystemControlMessage_handle; +static dissector_handle_t h263_handle = NULL; +static dissector_handle_t amr_handle = NULL; + +static void init_h245_packet_info(h245_packet_info *pi); +static int hf_h245_pdu_type = -1; +static int hf_h245Manufacturer = -1; +static int hf_h245_subMessageIdentifier_standard = -1; +static int h245_tap = -1; +static int h245dg_tap = -1; +static int hf_h245_debug_dissector_try_string = -1; + +h245_packet_info *h245_pi=NULL; + +static gboolean h245_reassembly = TRUE; +static gboolean h245_shorttypes = FALSE; +static gboolean info_col_fmt_prepend = FALSE; + +#include "packet-h245-val.h" + +static const value_string h245_RequestMessage_short_vals[] = { + { RequestMessage_nonStandard , "NSM" }, + { RequestMessage_masterSlaveDetermination , "MSD" }, + { RequestMessage_terminalCapabilitySet , "TCS" }, + { RequestMessage_openLogicalChannel , "OLC" }, + { RequestMessage_closeLogicalChannel , "CLC" }, + { RequestMessage_requestChannelClose , "RCC" }, + { RequestMessage_multiplexEntrySend , "MES" }, + { RequestMessage_requestMultiplexEntry , "RME" }, + { RequestMessage_requestMode , "RM" }, + { RequestMessage_roundTripDelayRequest , "RTDR" }, + { RequestMessage_maintenanceLoopRequest , "MLR" }, + { RequestMessage_communicationModeRequest , "CMR" }, + { RequestMessage_conferenceRequest , "CR" }, + { RequestMessage_multilinkRequest , "MR" }, + { RequestMessage_logicalChannelRateRequest, "LCRR" }, + { RequestMessage_genericRequest , "GR" }, + { 0, NULL } +}; +static const value_string h245_ResponseMessage_short_vals[] = { + { ResponseMessage_nonStandard , "NSM" }, + { ResponseMessage_masterSlaveDeterminationAck , "MSDAck" }, + { ResponseMessage_masterSlaveDeterminationReject, "MSDReject" }, + { ResponseMessage_terminalCapabilitySetAck , "TCSAck" }, + { ResponseMessage_terminalCapabilitySetReject , "TCSReject" }, + { ResponseMessage_openLogicalChannelAck , "OLCAck" }, + { ResponseMessage_openLogicalChannelReject , "OLCReject" }, + { ResponseMessage_closeLogicalChannelAck , "CLCAck" }, + { ResponseMessage_requestChannelCloseAck , "RCCAck" }, + { ResponseMessage_requestChannelCloseReject , "RCCReject" }, + { ResponseMessage_multiplexEntrySendAck , "MESAck" }, + { ResponseMessage_multiplexEntrySendReject , "MESReject" }, + { ResponseMessage_requestMultiplexEntryAck , "RMEAck" }, + { ResponseMessage_requestMultiplexEntryReject , "RMEReject" }, + { ResponseMessage_requestModeAck , "RMAck" }, + { ResponseMessage_requestModeReject , "RMReject" }, + { ResponseMessage_roundTripDelayResponse , "RTDResponse" }, + { ResponseMessage_maintenanceLoopAck , "MLAck" }, + { ResponseMessage_maintenanceLoopReject , "MLReject" }, + { ResponseMessage_communicationModeResponse , "CMResponse" }, + { ResponseMessage_conferenceResponse , "CResponse" }, + { ResponseMessage_multilinkResponse , "MResponse" }, + { ResponseMessage_logicalChannelRateAcknowledge , "LCRAck" }, + { ResponseMessage_logicalChannelRateReject , "LCRReject" }, + { ResponseMessage_genericResponse , "GR" }, + { 0, NULL } +}; +static const value_string h245_IndicationMessage_short_vals[] = { + { IndicationMessage_nonStandard , "NSM" }, + { IndicationMessage_functionNotUnderstood , "FNU" }, + { IndicationMessage_masterSlaveDeterminationRelease , "MSDRelease" }, + { IndicationMessage_terminalCapabilitySetRelease , "TCSRelease" }, + { IndicationMessage_openLogicalChannelConfirm , "OLCConfirm" }, + { IndicationMessage_requestChannelCloseRelease , "RCCRelease" }, + { IndicationMessage_multiplexEntrySendRelease , "MESRelease" }, + { IndicationMessage_requestMultiplexEntryRelease , "RMERelease" }, + { IndicationMessage_requestModeRelease , "RMRelease" }, + { IndicationMessage_miscellaneousIndication , "MI" }, + { IndicationMessage_jitterIndication , "JI" }, + { IndicationMessage_h223SkewIndication , "H223SI" }, + { IndicationMessage_newATMVCIndication , "NATMVCI" }, + { IndicationMessage_userInput , "UII" }, + { IndicationMessage_h2250MaximumSkewIndication , "H2250MSI" }, + { IndicationMessage_mcLocationIndication , "MCLI" }, + { IndicationMessage_conferenceIndication , "CI" }, + { IndicationMessage_vendorIdentification , "VI" }, + { IndicationMessage_functionNotSupported , "FNS" }, + { IndicationMessage_multilinkIndication , "MultilinkIndication" }, + { IndicationMessage_logicalChannelRateRelease , "LCRRelease" }, + { IndicationMessage_flowControlIndication , "FCIndication" }, + { IndicationMessage_mobileMultilinkReconfigurationIndication, "MMRI" }, + { IndicationMessage_genericIndication , "GI" }, + { 0, NULL } +}; +static const value_string h245_CommandMessage_short_vals[] = { + { CommandMessage_nonStandard , "NSM" }, + { CommandMessage_maintenanceLoopOffCommand , "MLOC" }, + { CommandMessage_sendTerminalCapabilitySet , "STCS" }, + { CommandMessage_encryptionCommand , "EC" }, + { CommandMessage_flowControlCommand , "FCC" }, + { CommandMessage_endSessionCommand , "ESC" }, + { CommandMessage_miscellaneousCommand , "MC" }, + { CommandMessage_communicationModeCommand , "CMC" }, + { CommandMessage_conferenceCommand , "CC" }, + { CommandMessage_h223MultiplexReconfiguration , "H223MR" }, + { CommandMessage_newATMVCCommand , "NATMVCC" }, + { CommandMessage_mobileMultilinkReconfigurationCommand, "MMRC" }, + { CommandMessage_genericCommand , "GC" }, + { 0, NULL } +}; + +static const value_string h245_AudioCapability_short_vals[] = { + { AudioCapability_nonStandard , "nonStd" }, + { AudioCapability_g711Alaw64k , "g711A" }, + { AudioCapability_g711Alaw56k , "g711A56k" }, + { AudioCapability_g711Ulaw64k , "g711U" }, + { AudioCapability_g711Ulaw56k , "g711U56k" }, + { AudioCapability_g722_64k , "g722-64k" }, + { AudioCapability_g722_56k , "g722-56k" }, + { AudioCapability_g722_48k , "g722-48k" }, + { AudioCapability_g7231 , "g7231" }, + { AudioCapability_g728 , "g728" }, + { AudioCapability_g729 , "g729" }, + { AudioCapability_g729AnnexA , "g729A" }, + { AudioCapability_is11172AudioCapability, "is11172" }, + { AudioCapability_is13818AudioCapability, "is13818" }, + { AudioCapability_g729wAnnexB , "g729B" }, + { AudioCapability_g729AnnexAwAnnexB , "g729AB" }, + { AudioCapability_g7231AnnexCCapability , "g7231C" }, + { AudioCapability_gsmFullRate , "gsmFR" }, + { AudioCapability_gsmHalfRate , "gsmHR" }, + { AudioCapability_gsmEnhancedFullRate , "gsmEFR" }, + { AudioCapability_genericAudioCapability, "generic" }, + { AudioCapability_g729Extensions , "g729Ext" }, + { AudioCapability_vbd , "vbd" }, + { AudioCapability_audioTelephonyEvent , "audioTelEvent" }, + { AudioCapability_audioTone , "audioTone" }, + { 0, NULL } +}; + +/* To put the codec type only in COL_INFO when + an OLC is read */ +const char* codec_type = NULL; +static guint32 rfc_number; + +typedef struct _unicast_addr_t { + address addr; + guint8 addr_buf[16]; + guint32 port; +} unicast_addr_t; + +typedef struct _channel_info_t { + gchar data_type_str[32]; + unicast_addr_t *upcoming_addr; + unicast_addr_t media_addr; + unicast_addr_t media_control_addr; + unsigned int rfc2198; + gboolean srtp_flag; + gboolean is_video; +} channel_info_t; + +typedef struct _olc_info_t { + guint16 fwd_lc_num; + channel_info_t fwd_lc; + channel_info_t rev_lc; +} olc_info_t; + +static wmem_map_t* h245_pending_olc_reqs = NULL; +static gboolean fast_start = FALSE; +static olc_info_t *upcoming_olc = NULL; +static channel_info_t *upcoming_channel = NULL; + +/* NonStandardParameter */ +static const char *nsiOID; +static guint32 h221NonStandard; +static guint32 t35CountryCode; +static guint32 t35Extension; +static guint32 manufacturerCode; + +static const value_string h245_RFC_number_vals[] = { + { 2190, "RFC 2190 - H.263 Video Streams" }, + { 2198, "RFC 2198 - RTP Payload for Redundant Audio Data" }, + { 2429, "RFC 2429 - 1998 Version of ITU-T Rec. H.263 Video (H.263+)" }, + { 3016, "RFC 3016 - RTP Payload Format for MPEG-4 Audio/Visual Streams" }, + { 3267, "RFC 3267 - Adaptive Multi-Rate (AMR) and Adaptive Multi-Rate Wideband (AMR-WB)" }, + { 3984, "RFC 3984 - RTP Payload Format for H.264 Video" }, + { 0, NULL } +}; + +/* Table 7/H.239 subMessageIdentifier values */ +static const value_string h245_h239subMessageIdentifier_vals[] = { + { 1, "flowControlReleaseRequest" }, + { 2, "flowControlReleaseResponse" }, + { 3, "presentationTokenRequest" }, + { 4, "presentationTokenResponse" }, + { 5, "presentationTokenRelease" }, + { 6, "presentationTokenIndicateOwner" }, + { 0, NULL } +}; + + +/* h223 multiplex codes */ +static h223_set_mc_handle_t h223_set_mc_handle = NULL; +h223_mux_element *h223_me=NULL; +guint8 h223_mc=0; +void h245_set_h223_set_mc_handle( h223_set_mc_handle_t handle ) +{ + h223_set_mc_handle = handle; +} + +/* h223 logical channels */ +typedef struct { + h223_lc_params *fw_channel_params; + h223_lc_params *rev_channel_params; +} h223_pending_olc; + +static wmem_map_t* h223_pending_olc_reqs[] = { NULL, NULL }; +static dissector_handle_t h245_lc_dissector; +static guint16 h245_lc_temp; +static guint16 h223_fw_lc_num; +static guint16 h223_rev_lc_num; +static h223_lc_params *h223_lc_params_temp; +static h223_lc_params *h223_fw_lc_params; +static h223_lc_params *h223_rev_lc_params; +static h223_add_lc_handle_t h223_add_lc_handle = NULL; + +static void h223_lc_init( void ) +{ + h223_lc_params_temp = NULL; + h245_lc_dissector = NULL; + h223_fw_lc_num = 0; +} + +void h245_set_h223_add_lc_handle( h223_add_lc_handle_t handle ) +{ + h223_add_lc_handle = handle; +} + +static const gchar *gen_olc_key(guint16 lc_num, address *dst_addr, address *src_addr, wmem_allocator_t *scope) +{ + return wmem_strdup_printf(scope, "%s/%s/%u", + address_to_str(scope, dst_addr), + address_to_str(scope, src_addr), + lc_num); +} + +static void update_unicast_addr(unicast_addr_t *req_addr, unicast_addr_t *ack_addr) +{ + if (ack_addr->addr.type!=AT_NONE && ack_addr->port!=0) { + memcpy(req_addr->addr_buf, ack_addr->addr_buf, sizeof(req_addr->addr_buf)); + set_address(&req_addr->addr, ack_addr->addr.type, ack_addr->addr.len, req_addr->addr_buf); + req_addr->port = ack_addr->port; + } +} + +static void h245_setup_channels(packet_info *pinfo, channel_info_t *upcoming_channel_lcl) +{ + rtp_dyn_payload_t *rtp_dyn_payload = NULL; + struct srtp_info *dummy_srtp_info = NULL; + + if (!upcoming_channel_lcl) return; + + /* T.38 */ + if (!strcmp(upcoming_channel_lcl->data_type_str, "t38fax")) { + if (upcoming_channel_lcl->media_addr.addr.type!=AT_NONE && upcoming_channel_lcl->media_addr.port!=0) { + t38_add_address(pinfo, &upcoming_channel_lcl->media_addr.addr, + upcoming_channel_lcl->media_addr.port, 0, + "H245", pinfo->num); + } + return; + } + + /* (S)RTP, (S)RTCP */ + if (upcoming_channel_lcl->rfc2198 > 0) { + rtp_dyn_payload = rtp_dyn_payload_new(); + rtp_dyn_payload_insert(rtp_dyn_payload, upcoming_channel_lcl->rfc2198, "red", 8000, 1); + } + + if (upcoming_channel_lcl->srtp_flag) { + dummy_srtp_info = wmem_new0(wmem_file_scope(), struct srtp_info); + } + + /* DEBUG ws_warning("h245_setup_channels media_addr.addr.type %u port %u",upcoming_channel_lcl->media_addr.addr.type, upcoming_channel_lcl->media_addr.port ); + */ + if (upcoming_channel_lcl->media_addr.addr.type!=AT_NONE && upcoming_channel_lcl->media_addr.port!=0) { + srtp_add_address(pinfo, PT_UDP, &upcoming_channel_lcl->media_addr.addr, + upcoming_channel_lcl->media_addr.port, 0, + "H245", pinfo->num, upcoming_channel_lcl->is_video , rtp_dyn_payload, dummy_srtp_info, NULL); + } + if (upcoming_channel_lcl->media_control_addr.addr.type!=AT_NONE && upcoming_channel_lcl->media_control_addr.port!=0 && rtcp_handle) { + srtcp_add_address(pinfo, &upcoming_channel_lcl->media_control_addr.addr, + upcoming_channel_lcl->media_control_addr.port, 0, + "H245", pinfo->num, dummy_srtp_info); + } +} + +/* Prints formated information column of h245 messages. Note that global variables + * "h245_shorttypes" and "info_col_fmt_prepend" are used to decide formating preferences */ +static void print_info_column(column_info *cinfo, const gint32 *value, + const value_string *msg_vals, const value_string *short_msg_vals) +{ + const value_string *vals; + + if (h245_shorttypes == FALSE || short_msg_vals == NULL) { + vals = msg_vals; + } else { + vals = short_msg_vals; + } + + if (info_col_fmt_prepend == FALSE) { + col_append_fstr(cinfo, COL_INFO, "%s ", val_to_str_const(*value, vals, "")); + } else { + col_prepend_fstr(cinfo, COL_INFO, "%s ", val_to_str_const(*value, vals, "")); + } +} + +/* Initialize the protocol and registered fields */ +static int proto_h245 = -1; +#include "packet-h245-hf.c" + +/* Initialize the subtree pointers */ +static int ett_h245 = -1; +static int ett_h245_returnedFunction = -1; +#include "packet-h245-ett.c" + +/* Forward declarations */ +static int dissect_h245_MultimediaSystemControlMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_); +static void reset_h245_pi(void *dummy _U_) +{ + h245_pi = NULL; /* Make sure we don't leave pinfo->pool memory lying around */ +} + +#include "packet-h245-fn.c" + +static int +dissect_h245(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* data _U_) +{ + /* + * MultimediaSystemControlMessage_handle is the handle for + * dissect_h245_h245, so we don't want to do any h245_pi or tap stuff here. + */ + dissect_tpkt_encap(tvb, pinfo, parent_tree, h245_reassembly, MultimediaSystemControlMessage_handle); + return tvb_captured_length(tvb); +} + + +static int +dissect_h245_h245(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* data _U_) +{ + proto_item *it; + proto_tree *tr; + guint32 offset=0; + asn1_ctx_t asn1_ctx; + + fast_start = FALSE; + /* Clean up from any previous packet dissection */ + upcoming_olc = NULL; + upcoming_channel = NULL; + codec_type = NULL; + + col_set_str(pinfo->cinfo, COL_PROTOCOL, PSNAME); + + it=proto_tree_add_protocol_format(parent_tree, proto_h245, tvb, 0, -1, PSNAME); + tr=proto_item_add_subtree(it, ett_h245); + + /* assume that whilst there is more tvb data, there are more h245 commands */ + while ( tvb_reported_length_remaining( tvb, offset>>3 )>0 ){ + CLEANUP_PUSH(reset_h245_pi, NULL); + h245_pi=wmem_new(pinfo->pool, h245_packet_info); + init_h245_packet_info(h245_pi); + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + offset = dissect_h245_MultimediaSystemControlMessage(tvb, offset, &asn1_ctx, tr, hf_h245_pdu_type); + tap_queue_packet(h245dg_tap, pinfo, h245_pi); + offset = (offset+0x07) & 0xfffffff8; + CLEANUP_CALL_AND_POP; + } + return tvb_captured_length(tvb); +} + +void +dissect_h245_FastStart_OLC(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, char *codec_str) { + + fast_start = TRUE; + /* Clean up from any previous packet dissection */ + upcoming_olc = NULL; + upcoming_channel = NULL; + codec_type = NULL; + + dissect_OpenLogicalChannel_PDU(tvb, pinfo, tree, NULL); + + if (h245_pi != NULL) + h245_pi->msg_type = H245_OpenLogChn; + + if (codec_str && codec_type){ + (void) g_strlcpy(codec_str, codec_type, 50); + } + +} + +/*--- proto_register_h245 -------------------------------------------*/ +void proto_register_h245(void) { + + /* List of fields */ + static hf_register_info hf[] = { + { &hf_h245_pdu_type, + { "PDU Type", "h245.pdu_type", FT_UINT32, BASE_DEC, + VALS(h245_MultimediaSystemControlMessage_vals), 0, "Type of H.245 PDU", HFILL }}, + { &hf_h245Manufacturer, + { "H.245 Manufacturer", "h245.Manufacturer", FT_UINT32, BASE_HEX, + VALS(H221ManufacturerCode_vals), 0, "h245.H.221 Manufacturer", HFILL }}, + { &hf_h245_subMessageIdentifier_standard, + { "subMessageIdentifier", "h245.subMessageIdentifier.standard", + FT_UINT32, BASE_DEC, VALS(h245_h239subMessageIdentifier_vals), 0, + NULL, HFILL }}, + { &hf_h245_debug_dissector_try_string, + { "*** DEBUG dissector_try_string", "h245.debug.dissector_try_string", FT_STRING, BASE_NONE, + NULL, 0, NULL, HFILL }}, + +#include "packet-h245-hfarr.c" + }; + + /* List of subtrees */ + static gint *ett[] = { + &ett_h245, + &ett_h245_returnedFunction, +#include "packet-h245-ettarr.c" + }; + module_t *h245_module; + + /* Register protocol */ + proto_h245 = proto_register_protocol(PNAME, PSNAME, PFNAME); + h223_pending_olc_reqs[P2P_DIR_SENT] = wmem_map_new_autoreset(wmem_epan_scope(), wmem_file_scope(), g_direct_hash, g_direct_equal ); + h223_pending_olc_reqs[P2P_DIR_RECV] = wmem_map_new_autoreset(wmem_epan_scope(), wmem_file_scope(), g_direct_hash, g_direct_equal ); + h245_pending_olc_reqs = wmem_map_new_autoreset(wmem_epan_scope(), wmem_file_scope(), wmem_str_hash, g_str_equal); + + register_init_routine(h223_lc_init); + /* Register fields and subtrees */ + proto_register_field_array(proto_h245, hf, array_length(hf)); + proto_register_subtree_array(ett, array_length(ett)); + + /* From Ronnie Sahlbergs original H245 dissector */ + + h245_module = prefs_register_protocol(proto_h245, NULL); + prefs_register_bool_preference(h245_module, "reassembly", + "Reassemble H.245 messages spanning multiple TCP segments", + "Whether the H.245 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.", + &h245_reassembly); + prefs_register_bool_preference(h245_module, "shorttypes", + "Show short message types", + "Whether the dissector should show short names or the long names from the standard", + &h245_shorttypes); + prefs_register_bool_preference(h245_module, "prepand", + "Show h245 info in reversed order", + "Whether the dissector should print items of h245 Info column in reversed order", + &info_col_fmt_prepend); + MultimediaSystemControlMessage_handle = register_dissector("h245dg", dissect_h245_h245, proto_h245); + h245_handle = register_dissector("h245", dissect_h245, proto_h245); + + nsp_object_dissector_table = register_dissector_table("h245.nsp.object", "H.245 NonStandardParameter (object)", proto_h245, FT_STRING, STRING_CASE_SENSITIVE); + nsp_h221_dissector_table = register_dissector_table("h245.nsp.h221", "H.245 NonStandardParameter (h221)", proto_h245, FT_UINT32, BASE_HEX); + gef_name_dissector_table = register_dissector_table("h245.gef.name", "H.245 Generic Extensible Framework Name", proto_h245, FT_STRING, STRING_CASE_SENSITIVE); + gef_content_dissector_table = register_dissector_table("h245.gef.content", "H.245 Generic Extensible Framework Content", proto_h245, FT_STRING, STRING_CASE_SENSITIVE); + + h245_tap = register_tap("h245"); + h245dg_tap = register_tap("h245dg"); + + oid_add_from_string("h239ControlCapability","0.0.8.239.1.1"); + oid_add_from_string("h239ExtendedVideoCapability","0.0.8.239.1.2"); + oid_add_from_string("generic-message","0.0.8.239.2"); + oid_add_from_string("h245 version 3","0.0.8.245.0.3"); + oid_add_from_string("h245 version 4","0.0.8.245.0.4"); + oid_add_from_string("h245 version 5","0.0.8.245.0.5"); + oid_add_from_string("h245 version 6","0.0.8.245.0.6"); + oid_add_from_string("h245 version 7","0.0.8.245.0.7"); + oid_add_from_string("h245 version 8","0.0.8.245.0.8"); + oid_add_from_string("h245 version 9","0.0.8.245.0.9"); + oid_add_from_string("h245 version 10","0.0.8.245.0.10"); + oid_add_from_string("h245 version 11","0.0.8.245.0.11"); + oid_add_from_string("h245 version 12","0.0.8.245.0.12"); + oid_add_from_string("h245 version 13","0.0.8.245.0.13"); + /* This capability is defined in Annex E. */ + oid_add_from_string("ISO/IEC 14496-2 MPEG-4 video","0.0.8.245.1.0.0"); + /* This capability is defined in Annex H. */ + oid_add_from_string("ISO/IEC 14496-3 MPEG-4 audio","0.0.8.245.1.1.0"); + /* This capability is defined in Annex I. */ + oid_add_from_string("AMR","0.0.8.245.1.1.1"); + /* This capability is defined in Annex J. */ + oid_add_from_string("acelp","0.0.8.245.1.1.2"); + /* This capability is defined in Annex K. */ + oid_add_from_string("us1","0.0.8.245.1.1.3"); + /* This capability is defined in Annex L. */ + oid_add_from_string("is127evrc","0.0.8.245.1.1.4"); + /* This capability is defined in Annex M. */ + oid_add_from_string("ISO/IEC 13818-7","0.0.8.245.1.1.5"); + /* This capability is defined in Annex N. */ + oid_add_from_string("rfc3389","0.0.8.245.1.1.6"); + /* This capability is defined in Annex O. */ + oid_add_from_string("L-16","0.0.8.245.1.1.7"); + /* This capability is defined in Annex P. */ + oid_add_from_string("bounded-audio-stream","0.0.8.245.1.1.8"); + /* This capability is defined in Annex R. */ + oid_add_from_string("AMR-NB","0.0.8.245.1.1.9"); + /* This capability is defined in Annex R. */ + oid_add_from_string("AMR-WB","0.0.8.245.1.1.10"); + /* This capability is defined in Annex S. */ + oid_add_from_string("ilbc","0.0.8.245.1.1.11"); + + oid_add_from_string("ISO/IEC 14496-1","0.0.8.245.1.2.0"); + oid_add_from_string("Nx64","0.0.8.245.1.2.1"); + oid_add_from_string("logical-channel-bit-ratemanagement","0.0.8.245.1.3.0"); + + oid_add_from_string("h264 generic-capabilities","0.0.8.241.0.0.1"); + oid_add_from_string("iPpacketization_h241AnnexA(single NAL unit mode)","0.0.8.241.0.0.0.0"); + oid_add_from_string("iPpacketization_RFC3984NonInterleaved","0.0.8.241.0.0.0.1"); + oid_add_from_string("iPpacketization_RFC3984Interleaved","0.0.8.241.0.0.0.2"); +} + + +/*--- proto_reg_handoff_h245 ---------------------------------------*/ +void proto_reg_handoff_h245(void) { + rtcp_handle = find_dissector("rtcp"); + data_handle = find_dissector("data"); + h263_handle = find_dissector("h263data"); + amr_handle = find_dissector("amr_if2_nb"); + + + dissector_add_for_decode_as_with_preference("tcp.port", h245_handle); + dissector_add_for_decode_as_with_preference("udp.port", MultimediaSystemControlMessage_handle); +} + +static void init_h245_packet_info(h245_packet_info *pi) +{ + if(pi == NULL) { + return; + } + + pi->msg_type = H245_OTHER; + pi->frame_label[0] = '\0'; + snprintf(pi->comment, sizeof(pi->comment), "H245 "); +} + diff --git a/epan/dissectors/asn1/h245/packet-h245-template.h b/epan/dissectors/asn1/h245/packet-h245-template.h new file mode 100644 index 00000000..9edd1159 --- /dev/null +++ b/epan/dissectors/asn1/h245/packet-h245-template.h @@ -0,0 +1,119 @@ +/* packet-h245.h + * Routines for h245 packet dissection + * Copyright 2005, Anders Broman + * + * Wireshark - Network traffic analyzer + * By Gerald Combs + * Copyright 1998 Gerald Combs + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef PACKET_H245_H +#define PACKET_H245_H + +#include "ws_symbol_export.h" + +typedef enum _h245_msg_type { + H245_TermCapSet, + H245_TermCapSetAck, + H245_TermCapSetRjc, + H245_TermCapSetRls, + H245_OpenLogChn, + H245_OpenLogChnCnf, + H245_OpenLogChnAck, + H245_OpenLogChnRjc, + H245_CloseLogChn, + H245_CloseLogChnAck, + H245_MastSlvDet, + H245_MastSlvDetAck, + H245_MastSlvDetRjc, + H245_MastSlvDetRls, + H245_OTHER +} h245_msg_type; + +typedef struct _h245_packet_info { + h245_msg_type msg_type; /* type of message */ + gchar frame_label[50]; /* the Frame label used by graph_analysis, what is a abreviation of cinfo */ + gchar comment[50]; /* the Frame Comment used by graph_analysis, what is a message desc */ +} h245_packet_info; + +/* + * h223 LC info + */ + +typedef enum { + al_nonStandard, + al1Framed, + al1NotFramed, + al2WithoutSequenceNumbers, + al2WithSequenceNumbers, + al3, + /*...*/ + /* al?M: unimplemented annex C adaptation layers */ + al1M, + al2M, + al3M +} h223_al_type; + +typedef struct { + guint8 control_field_octets; + guint32 send_buffer_size; +} h223_al3_params; + +typedef struct { + h223_al_type al_type; + gpointer al_params; + gboolean segmentable; + dissector_handle_t subdissector; +} h223_lc_params; + +typedef enum { + H245_nonStandardDataType, + H245_nullData, + H245_videoData, + H245_audioData, + H245_data, + H245_encryptionData, + /*...,*/ + H245_h235Control, + H245_h235Media, + H245_multiplexedStream, + H245_redundancyEncoding, + H245_multiplePayloadStream, + H245_fec +} h245_lc_data_type_enum; + +typedef struct { + h245_lc_data_type_enum data_type; + gpointer params; +} h245_lc_data_type; + +/* + * h223 MUX info + */ + +typedef struct _h223_mux_element h223_mux_element; +struct _h223_mux_element { + h223_mux_element* sublist; /* if NULL, use vc instead */ + guint16 vc; + guint16 repeat_count; /* 0 == untilClosingFlag */ + h223_mux_element* next; +}; + +#include +#include "packet-per.h" + +typedef void (*h223_set_mc_handle_t) ( packet_info* pinfo, guint8 mc, h223_mux_element* me); +WS_DLL_PUBLIC void h245_set_h223_set_mc_handle( h223_set_mc_handle_t handle ); + +typedef void (*h223_add_lc_handle_t) ( packet_info* pinfo, guint16 lc, h223_lc_params* params); +WS_DLL_PUBLIC void h245_set_h223_add_lc_handle( h223_add_lc_handle_t handle ); + +#include "packet-h245-exp.h" +void dissect_h245_FastStart_OLC(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, char *codec_str); + + +#endif /* PACKET_H245_H */ + + -- cgit v1.2.3