diff options
Diffstat (limited to 'epan/dissectors/asn1/t124')
-rw-r--r-- | epan/dissectors/asn1/t124/CMakeLists.txt | 36 | ||||
-rw-r--r-- | epan/dissectors/asn1/t124/GCC-PROTOCOL.asn | 1179 | ||||
-rw-r--r-- | epan/dissectors/asn1/t124/packet-t124-template.c | 208 | ||||
-rw-r--r-- | epan/dissectors/asn1/t124/packet-t124-template.h | 29 | ||||
-rw-r--r-- | epan/dissectors/asn1/t124/t124.cnf | 241 |
5 files changed, 1693 insertions, 0 deletions
diff --git a/epan/dissectors/asn1/t124/CMakeLists.txt b/epan/dissectors/asn1/t124/CMakeLists.txt new file mode 100644 index 00000000..1e461b6c --- /dev/null +++ b/epan/dissectors/asn1/t124/CMakeLists.txt @@ -0,0 +1,36 @@ +# CMakeLists.txt +# +# Wireshark - Network traffic analyzer +# By Gerald Combs <gerald@wireshark.org> +# Copyright 1998 Gerald Combs +# +# SPDX-License-Identifier: GPL-2.0-or-later +# + +set( PROTOCOL_NAME t124 ) + +set( PROTO_OPT ) + +set( EXT_ASN_FILE_LIST_LATE + ../t125/MCS-PROTOCOL.asn +) + +set( ASN_FILE_LIST + GCC-PROTOCOL.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 ) + +ASN2WRS() diff --git a/epan/dissectors/asn1/t124/GCC-PROTOCOL.asn b/epan/dissectors/asn1/t124/GCC-PROTOCOL.asn new file mode 100644 index 00000000..0dfe881c --- /dev/null +++ b/epan/dissectors/asn1/t124/GCC-PROTOCOL.asn @@ -0,0 +1,1179 @@ +-- Module GCC-PROTOCOL (T.124:01/2007) +-- See also ITU-T T.124 (01/2007) +-- See also the index of all ASN.1 assignments needed in this document + +GCC-PROTOCOL {itu-t(0) recommendation(0) t(20) t124(124) version(0) 2 asn1Modules(2) gcc-protocol(1)} +DEFINITIONS AUTOMATIC TAGS ::= +BEGIN + +-- Export all symbols +-- ============================================================================= +-- Part 1: Elements of which messages are composed +-- ============================================================================= +ChannelID ::= INTEGER(1..65535) + +StaticChannelID ::= INTEGER(1..1000) + +-- Those assigned by specifications +DynamicChannelID ::= INTEGER(1001..65535) + +-- Those created and deleted by MCS +UserID ::= DynamicChannelID + +TokenID ::= INTEGER(1..65535) + +StaticTokenID ::= INTEGER(1..16383) + +-- Those assigned by specifications +DynamicTokenID ::= INTEGER(16384..65535) + +-- Those assigned by the registry +Time ::= INTEGER(-2147483648..2147483647) + +-- Time in seconds +Handle ::= INTEGER(0..4294967295) + +-- 32-bit value +H221NonStandardIdentifier ::= OCTET STRING(SIZE (4..255)) + +-- First four octets shall be country code and +-- Manufacturer code, assigned as specified in +-- Annex A/H.221 for NS-cap and NS-comm +Key ::= CHOICE -- Identifier of a standard or non-standard object + { + object OBJECT IDENTIFIER, + h221NonStandard H221NonStandardIdentifier +} + +NonStandardParameter ::= SEQUENCE {key Key, + data OCTET STRING +} + +TextString ::= BMPString(SIZE (0..255)) + +-- Basic Multilingual Plane of ISO/IEC 10646-1 (Unicode) +--simpleTextFirstCharacter UniversalString ::= +-- {0, 0, 0, 0} + +--simpleTextLastCharacter UniversalString ::= {0, 0, 0, 255} + +SimpleTextString ::= + BMPString(SIZE (0..255)) +-- (FROM (simpleTextFirstCharacter..simpleTextLastCharacter)) + +SimpleNumericString ::= NumericString(SIZE (1..255))(FROM ("0123456789")) + +DiallingString ::= NumericString(SIZE (1..16))(FROM ("0123456789")) + +SubAddressString ::= NumericString(SIZE (1..40))(FROM ("0123456789")) + +ExtraDiallingString ::= TextString(SIZE (1..255))(FROM ("0123456789#*,")) + +UserData ::= SET OF SEQUENCE {key Key, + value OCTET STRING OPTIONAL} + +Password ::= SEQUENCE { + numeric SimpleNumericString, + text SimpleTextString OPTIONAL, + ..., + unicodeText TextString OPTIONAL +} + +PasswordSelector ::= CHOICE { + numeric SimpleNumericString, + text SimpleTextString, + ..., + unicodeText TextString +} + +ChallengeResponseItem ::= CHOICE { + passwordString PasswordSelector, + responseData UserData, + ... +} + +ChallengeResponseAlgorithm ::= CHOICE { + passwordInTheClear NULL, + nonStandardAlgorithm NonStandardParameter, + ... +} + +ChallengeItem ::= SEQUENCE { + responseAlgorithm ChallengeResponseAlgorithm, + challengeData UserData, + ... +} + +ChallengeRequest ::= SEQUENCE { + challengeTag INTEGER, + challengeSet SET OF ChallengeItem, + -- Set of algorithms offered for response + ... +} + +ChallengeResponse ::= SEQUENCE { + challengeTag INTEGER, + responseAlgorithm ChallengeResponseAlgorithm, + -- Specific algorithm selected from the set of + -- items presented in the ChallengeRequest + responseItem ChallengeResponseItem, + ... +} + +PasswordChallengeRequestResponse ::= CHOICE { + passwordInTheClear PasswordSelector, + challengeRequestResponse + SEQUENCE {challengeRequest ChallengeRequest OPTIONAL, + challengeResponse ChallengeResponse OPTIONAL, + ...}, + ... +} + +ConferenceName ::= SEQUENCE { + numeric SimpleNumericString, + text SimpleTextString OPTIONAL, + ..., + unicodeText TextString OPTIONAL +} + +ConferenceNameSelector ::= CHOICE { + numeric SimpleNumericString, + text SimpleTextString, + ..., + unicodeText TextString +} + +ConferenceNameModifier ::= SimpleNumericString + +Privilege ::= ENUMERATED { + terminate(0), ejectUser(1), add(2), lockUnlock(3), transfer(4), ... + } + +TerminationMethod ::= ENUMERATED {automatic(0), manual(1), ... + } + +ConferencePriorityScheme ::= CHOICE { + nonStandardScheme NonStandardParameter, + ... +} + +ConferencePriority ::= SEQUENCE { + priority INTEGER(0..65535), + scheme ConferencePriorityScheme, + ... +} + +NodeCategory ::= CHOICE { + conventional NULL, + counted NULL, + anonymous NULL, + nonStandardCategory NonStandardParameter, + ... +} + +ConferenceMode ::= CHOICE { + conventional-only NULL, + counted-only NULL, + anonymous-only NULL, + conventional-control NULL, + unrestricted-mode NULL, + non-standard-mode NonStandardParameter, + ... +} + +NetworkAddress ::= + SEQUENCE (SIZE (1..64)) OF + CHOICE -- Listed in order of use + {aggregatedChannel + SEQUENCE {transferModes + SEQUENCE-- One or more-- {speech BOOLEAN, + voice-band BOOLEAN, + digital-56k BOOLEAN, + digital-64k BOOLEAN, + digital-128k BOOLEAN, + digital-192k BOOLEAN, + digital-256k BOOLEAN, + digital-320k BOOLEAN, + digital-384k BOOLEAN, + digital-512k BOOLEAN, + digital-768k BOOLEAN, + digital-1152k BOOLEAN, + digital-1472k BOOLEAN, + digital-1536k BOOLEAN, + digital-1920k BOOLEAN, + packet-mode BOOLEAN, + frame-mode BOOLEAN, + atm BOOLEAN, + ...}, + internationalNumber DiallingString, + subAddress SubAddressString OPTIONAL, + extraDialling ExtraDiallingString OPTIONAL, + highLayerCompatibility + SEQUENCE {telephony3kHz BOOLEAN, + telephony7kHz BOOLEAN, + videotelephony BOOLEAN, + videoconference BOOLEAN, + audiographic BOOLEAN, + audiovisual BOOLEAN, + multimedia BOOLEAN, + ...} OPTIONAL, + ...}, + transportConnection + SEQUENCE {nsapAddress OCTET STRING(SIZE (1..20)), + transportSelector OCTET STRING OPTIONAL}, + nonStandard NonStandardParameter, + ...} + +MediaList ::= SEQUENCE {audio BOOLEAN, + video BOOLEAN, + data BOOLEAN, + ... +} + +ChannelAggregationMethod ::= CHOICE { + h221 NULL, + h244 NULL, + iso-iec-13871 NULL, + -- The actual mode of bonding is dynamically selected according + -- to the procedures described in ISO/IEC 13871. + nonStandard NonStandardParameter, + ... +} + +Profile ::= CHOICE { + simpleProfile + CHOICE {-- Basic transfer modes: + speech NULL, -- Simple telephony-- + telephony-3kHz NULL, -- Rec. G.711-- + telephony-7kHz NULL, -- Rec. G.722-- + voice-band NULL, -- Modems-- + frameRelay NULL, + -- T.120-only data profiles (Rec. T.123): + t123-pstn-basic NULL, + t123-psdn-basic NULL, + t123-b-isdn-basic NULL}, + multimediaProfile + SEQUENCE {profile + CHOICE {h310 NULL, + h320 NULL, + h321 NULL, + h322 NULL, + h323 NULL, + h324 NULL, + h324m NULL, + asvd NULL, + dsvd NULL}, + t120Data BOOLEAN}, + dsmccDownloadProfile NULL, + nonStandard NonStandardParameter, + ... +} + +ExtendedE164NetworkAddress ::= SEQUENCE { + internationalNumber DiallingString, + subAddress SubAddressString OPTIONAL, + extraDialling ExtraDiallingString OPTIONAL, + ... +} + +TransportAddress ::= SEQUENCE { + nsapAddress OCTET STRING(SIZE (1..20)), + transportSelector OCTET STRING OPTIONAL +} + +GSTNConnection ::= SEQUENCE {networkAddress ExtendedE164NetworkAddress, + ... +} + +ISDNConnection ::= SEQUENCE { + circuitTypes + SET OF + CHOICE {digital-64k NULL, + digital-2x64k NULL, + digital-384k NULL, + digital-1536 NULL, + digital-1920k NULL, + multirate-base-64k INTEGER(1..30) -- See Note 1 --}, + networkAddress ExtendedE164NetworkAddress, + highLayerCompatibility + SEQUENCE {-- Those are supported code points for IE HLC of the D + -- protocol (Rec. Q.931). + telephony3kHz BOOLEAN, + telephony7kHz BOOLEAN, + videotelephony BOOLEAN, + videoconference BOOLEAN, + audiographic BOOLEAN, + audiovisual BOOLEAN, + multimedia BOOLEAN, + ...} OPTIONAL, + ... +} + +-- Note 1: digital-2x64k differs from multirate-base-64k +-- with a multiplier value of 2; +-- in the first case +-- the network is requested an 8 kHz integrity with Restricted +-- Differential Time Delay (RDTD); +-- in the second case +-- the network is requested a Time Slot +-- Sequence integrity (see 4.5.5/Q.931) +CSDNConnection ::= SEQUENCE { + circuitTypes SET OF CHOICE {digital-56k NULL, + digital-64k NULL}, + networkAddress ExtendedE164NetworkAddress, + ... +} + +PSDNConnection ::= SEQUENCE { + networkAddress + CHOICE {extendedE164NetworkAddress ExtendedE164NetworkAddress, + transportAddress TransportAddress, + nonStandard NonStandardParameter}, + ... +} + +ATMConnection ::= SEQUENCE { + networkAddress + CHOICE {extendedE164 ExtendedE164NetworkAddress, + nsapAddress TransportAddress, + -- this case is reserved for NSAPs only: the + -- optional transport selector shall never be used + nonStandard NonStandardParameter}, + maxTransferRate INTEGER(0..MAX) OPTIONAL, + -- in cells per seconds + ... +} + +NetworkConnection ::= CHOICE { + gstnConnection GSTNConnection, + isdnConnection ISDNConnection, + csdnConnection CSDNConnection, + psdnConnection PSDNConnection, + atmConnection ATMConnection, + extendedE164NetworkAddress ExtendedE164NetworkAddress, + -- Note: LAN connections and leased + transportAddress TransportAddress, + -- lines (Rec. G.703/G.704) may be + nonStandard NonStandardParameter, + -- covered by one of these + ... +} + +NetworkAddressV2 ::= + SET OF + SEQUENCE {networkConnection + CHOICE {singleConnection NetworkConnection, + aggregatedConnections + SEQUENCE {connectionList + SET (SIZE (1..30)) OF + CHOICE {isdnConnection ISDNConnection, + csdnConnection CSDNConnection, + ...}, + aggregationMethods + SET OF ChannelAggregationMethod OPTIONAL, + ...}}, + profiles SET OF Profile OPTIONAL, + mediaConcerned MediaList OPTIONAL, + ...} + +NodeType ::= ENUMERATED {terminal(0), multiportTerminal(1), mcu(2), ... + } + +NodeProperties ::= SEQUENCE { + managementDevice BOOLEAN, + -- Is the node a device such as a reservation system + peripheralDevice BOOLEAN, + -- Is the node a peripheral to a primary node + ... +} + +AsymmetryIndicator ::= CHOICE { + callingNode NULL, + calledNode NULL, + unknown INTEGER(0..4294967295) + -- Uniformly distributed 32-bit random number +} + +AlternativeNodeID ::= CHOICE {h243NodeID OCTET STRING(SIZE (2)), + ... +} + +ConferenceDescriptor ::= SEQUENCE { + conferenceName ConferenceName, + conferenceNameModifier ConferenceNameModifier OPTIONAL, + conferenceDescription TextString OPTIONAL, + lockedConference BOOLEAN, + passwordInTheClearRequired BOOLEAN, + networkAddress NetworkAddress OPTIONAL, + ..., + defaultConferenceFlag BOOLEAN, + conferenceMode ConferenceMode +} + +NodeRecord ::= SEQUENCE { + superiorNode UserID OPTIONAL, + -- Not present only for the Top GCC Provider + nodeType NodeType, + nodeProperties NodeProperties, + nodeName TextString OPTIONAL, + participantsList SEQUENCE OF TextString OPTIONAL, + siteInformation TextString OPTIONAL, + networkAddress NetworkAddress OPTIONAL, + alternativeNodeID AlternativeNodeID OPTIONAL, + userData UserData OPTIONAL, + ..., + nodeCategory NodeCategory OPTIONAL, + networkAddressV2 NetworkAddressV2 OPTIONAL +} + +SessionKey ::= SEQUENCE +{ + applicationProtocolKey Key, + sessionID ChannelID OPTIONAL +} + +ChannelType ::= ENUMERATED { + static(0), dynamicMulticast(1), dynamicPrivate(2), dynamicUserId(3) +} + +ApplicationRecord ::= SEQUENCE { + applicationActive BOOLEAN, + -- Active/Inactive flag + conductingOperationCapable BOOLEAN, + -- Maximum one per node per session + startupChannel ChannelType OPTIONAL, + applicationUserID UserID OPTIONAL, + -- User ID assigned to the Application Protocol Entity + nonCollapsingCapabilities + SET OF + SEQUENCE {capabilityID CapabilityID, + applicationData OCTET STRING OPTIONAL} OPTIONAL, + ... +} + +CapabilityID ::= CHOICE { + standard INTEGER(0..65535), + -- Assigned by Application Protocol specifications + nonStandard Key +} + +CapabilityClass ::= CHOICE { + logical NULL, + unsignedMin INTEGER(0..MAX), -- Capability value + unsignedMax INTEGER(0..MAX), -- Capability value + ... +} + +EntityID ::= INTEGER(0..65535) + +ApplicationInvokeSpecifier ::= SEQUENCE { + sessionKey SessionKey, + expectedCapabilitySet + SET OF + SEQUENCE {capabilityID CapabilityID, + capabilityClass CapabilityClass, + ...} OPTIONAL, + startupChannel ChannelType OPTIONAL, + mandatoryFlag BOOLEAN, + -- TRUE indicates required Application Protocol Entity + ... +} + +RegistryKey ::= SEQUENCE { + sessionKey SessionKey, + resourceID OCTET STRING(SIZE (0..64)) +} + +RegistryItem ::= CHOICE { + channelID DynamicChannelID, + tokenID DynamicTokenID, + parameter OCTET STRING(SIZE (0..64)), + vacant NULL, + ... +} + +RegistryEntryOwner ::= CHOICE { + owned + SEQUENCE {nodeID UserID, -- Node ID of the owning node-- + entityID EntityID -- Entity ID of the owning-- }, -- Appliction Protocol Entity + notOwned NULL -- There is no current owner +} + +RegistryModificationRights ::= ENUMERATED {owner(0), session(1), public(2)} + +-- ============================================================================ +-- Part 2: PDU Messages +-- ============================================================================ +UserIDIndication ::= SEQUENCE {tag INTEGER, + ... +} + +ConferenceCreateRequest ::= + SEQUENCE { -- MCS-Connect-Provider request user data + conferenceName ConferenceName, + convenerPassword Password OPTIONAL, + password Password OPTIONAL, + lockedConference BOOLEAN, + listedConference BOOLEAN, + conductibleConference BOOLEAN, + terminationMethod TerminationMethod, + conductorPrivileges SET OF Privilege OPTIONAL, + conductedPrivileges SET OF Privilege OPTIONAL, + nonConductedPrivileges SET OF Privilege OPTIONAL, + conferenceDescription TextString OPTIONAL, + callerIdentifier TextString OPTIONAL, + userData UserData OPTIONAL, + ..., + conferencePriority ConferencePriority OPTIONAL, + conferenceMode ConferenceMode OPTIONAL +} + +ConferenceCreateResponse ::= + SEQUENCE { -- MCS-Connect-Provider response user data + nodeID UserID, -- Node ID of the sending node + tag INTEGER, + result + ENUMERATED {success(0), userRejected(1), resourcesNotAvailable(2), + rejectedForSymmetryBreaking(3), + lockedConferenceNotSupported(4), ... + }, + userData UserData OPTIONAL, + ... +} + +ConferenceQueryRequest ::= SEQUENCE { -- MCS-Connect-Provider request user data + nodeType NodeType, + asymmetryIndicator AsymmetryIndicator OPTIONAL, + userData UserData OPTIONAL, + ... +} + +ConferenceQueryResponse ::= + SEQUENCE { -- MCS-Connect-Provider response user data + nodeType NodeType, + asymmetryIndicator AsymmetryIndicator OPTIONAL, + conferenceList SET OF ConferenceDescriptor, + result ENUMERATED {success(0), userRejected(1), ... + }, + userData UserData OPTIONAL, + ..., + waitForInvitationFlag BOOLEAN OPTIONAL, + noUnlistedConferenceFlag BOOLEAN OPTIONAL +} + +ConferenceJoinRequest ::= + SEQUENCE { -- MCS-Connect-Provider request user data as well as + -- MCS-Send-Data on Node ID Channel of Top GCC sent + -- by the receiver of the MCS-Connect-Provider + conferenceName ConferenceNameSelector OPTIONAL, + -- Required when part of MCS-Connect-Provider + conferenceNameModifier ConferenceNameModifier OPTIONAL, + tag INTEGER OPTIONAL, + -- Filled in when sent on Node ID Channel of Top GCC + password PasswordChallengeRequestResponse OPTIONAL, + convenerPassword PasswordSelector OPTIONAL, + callerIdentifier TextString OPTIONAL, + userData UserData OPTIONAL, + ..., + nodeCategory NodeCategory OPTIONAL +} + +ConferenceJoinResponse ::= + SEQUENCE { -- MCS-Connect-Provider response user data as well as + -- MCS-Send-Data on Node ID Channel of + -- the receiver of the MCS-Connect-Provider + nodeID UserID OPTIONAL, + -- Node ID of directly connected node only + topNodeID UserID, + -- Node ID of Top GCC Provider + tag INTEGER, + conferenceNameAlias ConferenceNameSelector OPTIONAL, + passwordInTheClearRequired BOOLEAN, + lockedConference BOOLEAN, + listedConference BOOLEAN, + conductibleConference BOOLEAN, + terminationMethod TerminationMethod, + conductorPrivileges SET OF Privilege OPTIONAL, + -- No privilege shall be listed more than once + conductedPrivileges SET OF Privilege OPTIONAL, + -- No privilege shall be listed more than once + nonConductedPrivileges SET OF Privilege OPTIONAL, + -- No privilege shall be listed more than once + conferenceDescription TextString OPTIONAL, + password PasswordChallengeRequestResponse OPTIONAL, + result + ENUMERATED {success(0), userRejected(1), invalidConference(2), + invalidPassword(3), invalidConvenerPassword(4), + challengeResponseRequired(5), invalidChallengeResponse(6), + ... + }, + userData UserData OPTIONAL, + ..., + nodeCategory NodeCategory OPTIONAL, + conferenceMode ConferenceMode OPTIONAL +} + +ConferenceInviteRequest ::= + SEQUENCE { -- MCS-Connect-Provider request user data + conferenceName ConferenceName, + nodeID UserID, -- Node ID of the sending node + topNodeID UserID, -- Node ID of Top GCC Provider + tag INTEGER, + passwordInTheClearRequired BOOLEAN, + lockedConference BOOLEAN, + listedConference BOOLEAN, + conductibleConference BOOLEAN, + terminationMethod TerminationMethod, + conductorPrivileges SET OF Privilege OPTIONAL, + -- No privilege shall be listed more than once + conductedPrivileges SET OF Privilege OPTIONAL, + -- No privilege shall be listed more than once + nonConductedPrivileges SET OF Privilege OPTIONAL, + -- No privilege shall be listed more than once + conferenceDescription TextString OPTIONAL, + callerIdentifier TextString OPTIONAL, + userData UserData OPTIONAL, + ..., + conferencePriority ConferencePriority OPTIONAL, + nodeCategory NodeCategory OPTIONAL, + conferenceMode ConferenceMode OPTIONAL +} + +ConferenceInviteResponse ::= + SEQUENCE { -- MCS-Connect-Provider response user data + result ENUMERATED {success(0), userRejected(1), ... + }, + userData UserData OPTIONAL, + ... +} + +ConferenceAddRequest ::= + SEQUENCE { -- MCS-Send-Data on Node ID Channel of Top GCC or + -- Node ID Channel of Adding MCU if specified + networkAddress NetworkAddress, + requestingNode UserID, + tag INTEGER, + addingMCU UserID OPTIONAL, + userData UserData OPTIONAL, + ..., + nodeCategory NodeCategory OPTIONAL, + networkAddressV2 NetworkAddressV2 +} + +ConferenceAddResponse ::= + SEQUENCE { -- MCS-Send-Data on Node ID Channel of requester + tag INTEGER, + result + ENUMERATED {success(0), invalidRequester(1), invalidNetworkType(2), + invalidNetworkAddress(3), addedNodeBusy(4), networkBusy(5), + noPortsAvailable(6), connectionUnsuccessful(7), ... + }, + userData UserData OPTIONAL, + ... +} + +ConferenceLockRequest ::= + SEQUENCE { -- MCS-Send-Data on Node ID Channel of Top GCC + -- No parameters + ... +} + +ConferenceLockResponse ::= + SEQUENCE { -- MCS-Send-Data on Node ID Channel of requester + result ENUMERATED {success(0), invalidRequester(1), alreadyLocked(2), ... + }, + ... +} + +ConferenceLockIndication ::= + SEQUENCE { -- MCS-Uniform-Send-Data on GCC-Broadcast-Channel + -- or MCS-Send-Data on Node ID Channel + -- No parameters + ... +} + +ConferenceUnlockRequest ::= + SEQUENCE { -- MCS-Send-Data on Node ID Channel of Top GCC + -- No parameters + ... +} + +ConferenceUnlockResponse ::= + SEQUENCE { -- MCS-Send-Data on Node ID Channel of requester + result ENUMERATED {success(0), invalidRequester(1), alreadyUnlocked(2), ... + }, + ... +} + +ConferenceUnlockIndication ::= + SEQUENCE { -- MCS-Uniform-Send-Data on GCC-Broadcast-Channel + -- or MCS-Send-Data on Node ID Channel + -- No parameters + ... +} + +ConferenceTerminateRequest ::= + SEQUENCE { -- MCS-Send-Data on Node ID Channel of Top GCC + reason ENUMERATED {userInitiated(0), timedConferenceTermination(1), ... + }, + ... +} + +ConferenceTerminateResponse ::= + SEQUENCE { -- MCS-Send-Data on Node ID Channel of requester + result ENUMERATED {success(0), invalidRequester(1), ... + }, + ... +} + +ConferenceTerminateIndication ::= + SEQUENCE { -- MCS-Uniform-Send-Data on GCC-Broadcast-Channel + reason ENUMERATED {userInitiated(0), timedConferenceTermination(1), ... + }, + ... +} + +ConferenceEjectUserRequest ::= + SEQUENCE { -- MCS-Send-Data on Node ID Channel of Top GCC + nodeToEject UserID, -- Node ID of the node to eject + reason ENUMERATED {userInitiated(0), ... + }, + ... +} + +ConferenceEjectUserResponse ::= + SEQUENCE { -- MCS-Send-Data on Node ID Channel of requester + nodeToEject UserID, -- Node ID of the node to eject + result + ENUMERATED {success(0), invalidRequester(1), invalidNode(2), ... + }, + ... +} + +ConferenceEjectUserIndication ::= + SEQUENCE { -- MCS-Uniform-Send-Data on GCC-Broadcast-Channel + nodeToEject UserID, -- Node ID of the node to eject + reason + ENUMERATED {userInitiated(0), higherNodeDisconnected(1), + higherNodeEjected(2), ... + }, + ... +} + +ConferenceTransferRequest ::= + SEQUENCE { -- MCS-Send-Data on Node ID Channel of Top GCC + conferenceName ConferenceNameSelector, + -- Name of conference to transfer to + conferenceNameModifier ConferenceNameModifier OPTIONAL, + networkAddress NetworkAddress OPTIONAL, + transferringNodes SET (SIZE (1..65536)) OF UserID OPTIONAL, + password PasswordSelector OPTIONAL, + ..., + networkAddressV2 NetworkAddressV2 OPTIONAL +} + +ConferenceTransferResponse ::= + SEQUENCE { -- MCS-Send-Data on Node ID Channel of requester + conferenceName ConferenceNameSelector, + -- Name of conference to transfer to + conferenceNameModifier ConferenceNameModifier OPTIONAL, + transferringNodes SET (SIZE (1..65536)) OF UserID OPTIONAL, + result ENUMERATED {success(0), invalidRequester(1), ... + }, + ... +} + +ConferenceTransferIndication ::= + SEQUENCE { -- MCS-Uniform-Send-Data on GCC-Broadcast-Channel + conferenceName ConferenceNameSelector, + -- Name of conference to transfer to + conferenceNameModifier ConferenceNameModifier OPTIONAL, + networkAddress NetworkAddress OPTIONAL, + transferringNodes SET (SIZE (1..65536)) OF UserID OPTIONAL, + -- List of Node IDs, + -- not present if destined for all nodes + password PasswordSelector OPTIONAL, + ..., + networkAddressV2 NetworkAddressV2 OPTIONAL +} + +RosterUpdateIndication ::= SEQUENCE { -- MCS-Send-Data on Node ID Channel or + -- MCS-Uniform-Send-Data on GCC-Broadcast-Channel + fullRefresh BOOLEAN, + -- Conference Roster and all + -- ApplicationProtocol Sessions refreshed + nodeInformation + SEQUENCE {nodeRecordList + CHOICE {noChange NULL, + refresh + SET (SIZE (1..65536)) OF + SEQUENCE + -- One for each node in the conference; + -- no node shall be listed more than once + {nodeID UserID, -- Node ID of the node-- + nodeRecord NodeRecord}, + update + SET (SIZE (1..65536)) OF + SEQUENCE + -- One for each node changing its node record; + -- no node shall be listed more than once + {nodeID UserID, -- Node ID of the node-- + nodeUpdate + CHOICE {addRecord NodeRecord, + replaceRecord NodeRecord, + removeRecord NULL, + ...}}, + ...}, + rosterInstanceNumber INTEGER(0..65535), + nodesAdded BOOLEAN, + -- Nodes have been added since last instance + nodesRemoved BOOLEAN, + -- Nodes have been removed since last instance + ...}, + applicationInformation + SET (SIZE (0..65535)) OF + SEQUENCE + -- One for each Application Protocol Session; + -- all Application Protocol Sessions if full refresh; + -- no Application Protocol shall be + -- listed more than once + { + sessionKey SessionKey, + applicationRecordList CHOICE + { + noChange NULL, + refresh SET (SIZE (0..65535)) OF + SEQUENCE + -- One for each node with the + -- Application Protocol Session enrolled; + -- no node shall be listed more than once + {nodeID UserID, + -- Node ID of node + entityID EntityID, + -- ID for this Application Protocol Entity at this node + applicationRecord ApplicationRecord}, + update + SET (SIZE (1..65536)) OF + SEQUENCE + -- One for each node modifying its Application Record; + -- no node shall be listed more than once + {nodeID UserID, + -- Node ID of node + entityID EntityID, + -- ID for this Application Protocol Entity at this node + applicationUpdate + CHOICE {addRecord ApplicationRecord, + replaceRecord ApplicationRecord, + removeRecord NULL, + ...}}, + ...}, + applicationCapabilitiesList + CHOICE {noChange NULL, + refresh + SET OF + SEQUENCE {capabilityID CapabilityID, + capabilityClass CapabilityClass, + numberOfEntities INTEGER(1..65536), + -- Number of Application Protocol Entities + -- which issued the capability + ...}, + ...}, + rosterInstanceNumber INTEGER(0..65535), + peerEntitiesAdded BOOLEAN, + -- Peer Entities have been added since last instance + peerEntitiesRemoved BOOLEAN, + -- Peer Entities have been removed since last instance + ...}, + ... +} + +ApplicationInvokeIndication ::= + SEQUENCE { -- MCS-Send-Data or MCS-Uniform-Send-Data + -- on GCC-Broadcast-Channel or Node ID Channel + applicationProtocolEntiyList + SET (SIZE (1..65536)) OF ApplicationInvokeSpecifier, + destinationNodes SET (SIZE (1..65536)) OF UserID OPTIONAL, + -- List of Node IDs, + -- not present if destined for all nodes + ... +} + +RegistryRegisterChannelRequest ::= + SEQUENCE { -- MCS-Send-Data on Node ID Channel of Top GCC + entityID EntityID, + key RegistryKey, + channelID DynamicChannelID, + ... +} + +RegistryAssignTokenRequest ::= + SEQUENCE { -- MCS-Send-Data on Node ID Channel of Top GCC + entityID EntityID, + key RegistryKey, + ... +} + +RegistrySetParameterRequest ::= + SEQUENCE { -- MCS-Send-Data on Node ID Channel of Top GCC + entityID EntityID, + key RegistryKey, + parameter OCTET STRING(SIZE (0..64)), + modificationRights RegistryModificationRights OPTIONAL, + ... +} + +RegistryRetrieveEntryRequest ::= + SEQUENCE { -- MCS-Send-Data on Node ID Channel of Top GCC + entityID EntityID, + key RegistryKey, + ... +} + +RegistryDeleteEntryRequest ::= + SEQUENCE { -- MCS-Send-Data on Node ID Channel of Top GCC + entityID EntityID, + key RegistryKey, + ... +} + +RegistryMonitorEntryRequest ::= + SEQUENCE { -- MCS-Send-Data on Node ID Channel of Top GCC + entityID EntityID, + key RegistryKey, + ... +} + +RegistryMonitorEntryIndication ::= + SEQUENCE { -- MCS-Uniform-Send-Data on GCC-Broadcast-Channel + key RegistryKey, + item RegistryItem, + -- Contents: channel, token, parameter, or empty + owner RegistryEntryOwner, + modificationRights RegistryModificationRights OPTIONAL, + ... +} + +RegistryAllocateHandleRequest ::= + SEQUENCE { -- MCS-Send-Data on Node ID Channel of Top GCC + entityID EntityID, + numberOfHandles INTEGER(1..1024), + ... +} + +RegistryAllocateHandleResponse ::= + SEQUENCE { -- MCS-Send-Data on Node ID Channel of requester + entityID EntityID, + numberOfHandles INTEGER(1..1024), + firstHandle Handle, + result ENUMERATED {successful(0), noHandlesAvailable(1), ... + }, + ... +} + +RegistryResponse ::= + SEQUENCE { -- MCS-Send-Data on Node ID Channel of requester + entityID EntityID, + -- Entity ID of the requesting Application Protocol Entity + primitiveType + ENUMERATED {registerChannel(0), assignToken(1), setParameter(2), + retrieveEntry(3), deleteEntry(4), monitorEntry(5), ... + }, + key RegistryKey, + -- Database index + item RegistryItem, + -- Contents: channel, token, parameter, or vacant + owner RegistryEntryOwner, + modificationRights RegistryModificationRights OPTIONAL, + result + ENUMERATED {successful(0), belongsToOther(1), tooManyEntries(2), + inconsistentType(3), entryNotFound(4), entryAlreadyExists(5), + invalidRequester(6), ... + }, + ... +} + +ConductorAssignIndication ::= + SEQUENCE { -- MCS-Uniform-Send-Data on GCC-Broadcast-Channel + conductingNode UserID, + ... +} + +ConductorReleaseIndication ::= + SEQUENCE { -- MCS-Uniform-Send-Data on GCC-Broadcast-Channel + -- No parameters + ... +} + +ConductorPermissionAskIndication ::= + SEQUENCE { -- MCS-Uniform-Send-Data on GCC-Broadcast-Channel + grantFlag BOOLEAN, + -- TRUE to request permission grant, FALSE to release + ... +} + +ConductorPermissionGrantIndication ::= + SEQUENCE { -- MCS-Uniform-Send-Data on GCC-Broadcast-Channel + permissionList SEQUENCE (SIZE (0..65535)) OF UserID, + -- Node ID of nodes granted permission + waitingList SEQUENCE (SIZE (1..65536)) OF UserID OPTIONAL, + -- Node ID of nodes waiting form permission + ... +} + +ConferenceTimeRemainingIndication ::= + SEQUENCE { -- MCS-Send-Data on GCC-Broadcast-Channel + timeRemaining Time, + nodeID UserID OPTIONAL, + ... +} + +ConferenceTimeInquireIndication ::= + SEQUENCE { -- MCS-Send-Data on GCC-Convener-Channel + nodeSpecificTimeFlag BOOLEAN, + -- FALSE for conference-wide, TRUE for node-specific + ... +} + +ConferenceTimeExtendIndication ::= + SEQUENCE { -- MCS-Send-Data on GCC-Convener-Channel + timeToExtend Time, + nodeSpecificTimeFlag BOOLEAN, + -- FALSE for conference-wide, TRUE for node-specific + ... +} + +ConferenceAssistanceIndication ::= + SEQUENCE { -- MCS-Uniform-Send-Data on GCC-Broadcast-Channel + userData UserData OPTIONAL, + ... +} + +TextMessageIndication ::= SEQUENCE { -- MCS-Send-Data or MCS-Uniform-Send-Data + message TextString, + -- on GCC-Broadcast-Channel or Node ID Channel + ... +} + +RosterRefreshRequest ::= SEQUENCE { + nodeID UserID, + nodeCategory NodeCategory, + fullRefresh BOOLEAN, + sendConferenceRoster BOOLEAN OPTIONAL, + applicationList + SEQUENCE {applicationKeyList + SET OF + SEQUENCE {applicationProtocolKey Key, + nonStandardParameter + NonStandardParameter OPTIONAL, + ...}, + nonStandardParameter NonStandardParameter OPTIONAL, + ...} OPTIONAL, + sessionList + SEQUENCE {sessionKeyList + SET OF + SEQUENCE {sessionKey SessionKey, + nonStandardParameter NonStandardParameter OPTIONAL, + ...}, + nonStandardParameter NonStandardParameter OPTIONAL, + ...} OPTIONAL, + nonStandardParameter NonStandardParameter OPTIONAL, + ... +} + +FunctionNotSupportedResponse ::= SEQUENCE {request RequestPDU +} + +NonStandardPDU ::= SEQUENCE {data NonStandardParameter, + ... +} + +-- ========================================================================== +-- Part 3: Messages sent as MCS-Connect-Provider user data +-- ========================================================================== +ConnectData ::= SEQUENCE { + t124Identifier Key, + -- This shall be set to the value {itu-t recommendation t 124 version(0) 1} + connectPDU OCTET STRING +} + +ConnectGCCPDU ::= CHOICE { + conferenceCreateRequest ConferenceCreateRequest, + conferenceCreateResponse ConferenceCreateResponse, + conferenceQueryRequest ConferenceQueryRequest, + conferenceQueryResponse ConferenceQueryResponse, + conferenceJoinRequest ConferenceJoinRequest, + conferenceJoinResponse ConferenceJoinResponse, + conferenceInviteRequest ConferenceInviteRequest, + conferenceInviteResponse ConferenceInviteResponse, + ... +} + +-- ============================================================================ +-- Part 4: Messages sent using MCS-Send-Data or MCS-Uniform-Send-Data +-- ============================================================================ +GCCPDU ::= CHOICE { + request RequestPDU, + response ResponsePDU, + indication IndicationPDU +} + +RequestPDU ::= CHOICE { + conferenceJoinRequest ConferenceJoinRequest, + conferenceAddRequest ConferenceAddRequest, + conferenceLockRequest ConferenceLockRequest, + conferenceUnlockRequest ConferenceUnlockRequest, + conferenceTerminateRequest ConferenceTerminateRequest, + conferenceEjectUserRequest ConferenceEjectUserRequest, + conferenceTransferRequest ConferenceTransferRequest, + registryRegisterChannelRequest RegistryRegisterChannelRequest, + registryAssignTokenRequest RegistryAssignTokenRequest, + registrySetParameterRequest RegistrySetParameterRequest, + registryRetrieveEntryRequest RegistryRetrieveEntryRequest, + registryDeleteEntryRequest RegistryDeleteEntryRequest, + registryMonitorEntryRequest RegistryMonitorEntryRequest, + registryAllocateHandleRequest RegistryAllocateHandleRequest, + nonStandardRequest NonStandardPDU, + ... +} + +ResponsePDU ::= CHOICE { + conferenceJoinResponse ConferenceJoinResponse, + conferenceAddResponse ConferenceAddResponse, + conferenceLockResponse ConferenceLockResponse, + conferenceUnlockResponse ConferenceUnlockResponse, + conferenceTerminateResponse ConferenceTerminateResponse, + conferenceEjectUserResponse ConferenceEjectUserResponse, + conferenceTransferResponse ConferenceTransferResponse, + registryResponse RegistryResponse, + registryAllocateHandleResponse RegistryAllocateHandleResponse, + functionNotSupportedResponse FunctionNotSupportedResponse, + nonStandardResponse NonStandardPDU, + ... +} + +IndicationPDU ::= CHOICE { + userIDIndication UserIDIndication, + conferenceLockIndication ConferenceLockIndication, + conferenceUnlockIndication ConferenceUnlockIndication, + conferenceTerminateIndication ConferenceTerminateIndication, + conferenceEjectUserIndication ConferenceEjectUserIndication, + conferenceTransferIndication ConferenceTransferIndication, + rosterUpdateIndication RosterUpdateIndication, + applicationInvokeIndication ApplicationInvokeIndication, + registryMonitorEntryIndication RegistryMonitorEntryIndication, + conductorAssignIndication ConductorAssignIndication, + conductorReleaseIndication ConductorReleaseIndication, + conductorPermissionAskIndication ConductorPermissionAskIndication, + conductorPermissionGrantIndication ConductorPermissionGrantIndication, + conferenceTimeRemainingIndication ConferenceTimeRemainingIndication, + conferenceTimeInquireIndication ConferenceTimeInquireIndication, + conferenceTimeExtendIndication ConferenceTimeExtendIndication, + conferenceAssistanceIndication ConferenceAssistanceIndication, + textMessageIndication TextMessageIndication, + nonStandardIndication NonStandardPDU, + ... +} + +END + +-- Generated by Asnp, the ASN.1 pretty-printer of France Telecom R&D diff --git a/epan/dissectors/asn1/t124/packet-t124-template.c b/epan/dissectors/asn1/t124/packet-t124-template.c new file mode 100644 index 00000000..fa29e3a8 --- /dev/null +++ b/epan/dissectors/asn1/t124/packet-t124-template.c @@ -0,0 +1,208 @@ +/* packet-t124.c + * Routines for t124 packet dissection + * Copyright 2010, Graeme Lunt + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1998 Gerald Combs + * + * SPDX-License-Identifier: GPL-2.0-or-later + * + */ + +#include "config.h" + +#include <epan/packet.h> +#include <epan/exceptions.h> +#include <epan/conversation.h> + +#include <epan/asn1.h> +#include "packet-per.h" +#include "packet-ber.h" +#include "packet-t124.h" + +#ifdef _MSC_VER +/* disable: "warning C4146: unary minus operator applied to unsigned type, result still unsigned" */ +#pragma warning(disable:4146) +#endif + +#define PNAME "GENERIC-CONFERENCE-CONTROL T.124" +#define PSNAME "T.124" +#define PFNAME "t124" + +void proto_register_t124(void); +void proto_reg_handoff_t124(void); + +/* Initialize the protocol and registered fields */ +static int proto_t124 = -1; +static proto_tree *top_tree = NULL; + +#include "packet-t124-hf.c" + +/* Initialize the subtree pointers */ +static int ett_t124 = -1; +static int ett_t124_connectGCCPDU = -1; + +static int hf_t124_ConnectData = -1; +static int hf_t124_connectGCCPDU = -1; +static int hf_t124_DomainMCSPDU_PDU = -1; + +static guint32 channelId = -1; + +static dissector_table_t t124_ns_dissector_table=NULL; +static dissector_table_t t124_sd_dissector_table=NULL; + +#include "packet-t124-ett.c" + +#include "packet-t124-fn.c" + +static const per_sequence_t t124Heur_sequence[] = { + { &hf_t124_t124Identifier , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_Key }, + { NULL, 0, 0, NULL } +}; + +void +register_t124_ns_dissector(const char *nsKey, dissector_t dissector, int proto) +{ + dissector_handle_t dissector_handle; + + dissector_handle=create_dissector_handle(dissector, proto); + dissector_add_string("t124.ns", nsKey, dissector_handle); +} + +void register_t124_sd_dissector(packet_info *pinfo _U_, guint32 channelId_param, dissector_t dissector, int proto) +{ + /* XXX: we should keep the sub-dissectors list per conversation + as the same channels may be used. + While we are just using RDP over T.124, then we can get away with it. + */ + + dissector_handle_t dissector_handle; + + dissector_handle=create_dissector_handle(dissector, proto); + dissector_add_uint("t124.sd", channelId_param, dissector_handle); + +} + +guint32 t124_get_last_channelId(void) +{ + return channelId; +} + +void t124_set_top_tree(proto_tree *tree) +{ + top_tree = tree; +} + +int dissect_DomainMCSPDU_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + int offset = 0; + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + + offset = dissect_t124_DomainMCSPDU(tvb, offset, &asn1_ctx, tree, hf_t124_DomainMCSPDU_PDU); + offset += 7; offset >>= 3; + return offset; +} + +static int +dissect_t124(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void *data _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + asn1_ctx_t asn1_ctx; + + top_tree = parent_tree; + + col_set_str(pinfo->cinfo, COL_PROTOCOL, "T.124"); + col_clear(pinfo->cinfo, COL_INFO); + + item = proto_tree_add_item(parent_tree, proto_t124, tvb, 0, tvb_captured_length(tvb), ENC_NA); + tree = proto_item_add_subtree(item, ett_t124); + + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + dissect_t124_ConnectData(tvb, 0, &asn1_ctx, tree, hf_t124_ConnectData); + + return tvb_captured_length(tvb); +} + +static gboolean +dissect_t124_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void *data _U_) +{ + asn1_ctx_t asn1_ctx; + volatile gboolean failed = FALSE; + + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + + /* + * We must catch all the "ran past the end of the packet" exceptions + * here and, if we catch one, just return FALSE. It's too painful + * to have a version of dissect_per_sequence() that checks all + * references to the tvbuff before making them and returning "no" + * if they would fail. + * + * We (ab)use hf_t124_connectGCCPDU here just to give a valid entry... + */ + TRY { + (void) dissect_per_sequence(tvb, 0, &asn1_ctx, NULL, hf_t124_connectGCCPDU, -1, t124Heur_sequence); + } CATCH_BOUNDS_ERRORS { + failed = TRUE; + } ENDTRY; + + if (!failed && ((asn1_ctx.external.direct_reference != NULL) && + (strcmp(asn1_ctx.external.direct_reference, "0.0.20.124.0.1") == 0))) { + dissect_t124(tvb, pinfo, parent_tree, data); + + return TRUE; + } + + return FALSE; +} + +/*--- proto_register_t124 -------------------------------------------*/ +void proto_register_t124(void) { + + /* List of fields */ + static hf_register_info hf[] = { + { &hf_t124_ConnectData, + { "ConnectData", "t124.ConnectData", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_connectGCCPDU, + { "connectGCCPDU", "t124.connectGCCPDU", + FT_UINT32, BASE_DEC, VALS(t124_ConnectGCCPDU_vals), 0, + NULL, HFILL }}, + { &hf_t124_DomainMCSPDU_PDU, + { "DomainMCSPDU", "t124.DomainMCSPDU", + FT_UINT32, BASE_DEC, VALS(t124_DomainMCSPDU_vals), 0, + NULL, HFILL }}, +#include "packet-t124-hfarr.c" + }; + + /* List of subtrees */ + static gint *ett[] = { + &ett_t124, + &ett_t124_connectGCCPDU, +#include "packet-t124-ettarr.c" + }; + + /* Register protocol */ + proto_t124 = proto_register_protocol(PNAME, PSNAME, PFNAME); + /* Register fields and subtrees */ + proto_register_field_array(proto_t124, hf, array_length(hf)); + proto_register_subtree_array(ett, array_length(ett)); + + t124_ns_dissector_table = register_dissector_table("t124.ns", "T.124 H.221 Non Standard Dissectors", proto_t124, FT_STRING, STRING_CASE_SENSITIVE); + t124_sd_dissector_table = register_dissector_table("t124.sd", "T.124 H.221 Send Data Dissectors", proto_t124, FT_UINT32, BASE_HEX); + + register_dissector("t124", dissect_t124, proto_t124); + +} + +void +proto_reg_handoff_t124(void) { + + register_ber_oid_dissector("0.0.20.124.0.1", dissect_t124, proto_t124, "Generic Conference Control"); + + heur_dissector_add("t125", dissect_t124_heur, "T.124 over T.125", "t124_t125", proto_t124, HEURISTIC_ENABLE); + +} diff --git a/epan/dissectors/asn1/t124/packet-t124-template.h b/epan/dissectors/asn1/t124/packet-t124-template.h new file mode 100644 index 00000000..9869ca1d --- /dev/null +++ b/epan/dissectors/asn1/t124/packet-t124-template.h @@ -0,0 +1,29 @@ +/* packet-t124.h + * Routines for t124 packet dissection + * Copyright 2010, Graeme Lunt + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1998 Gerald Combs + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef PACKET_T124_H +#define PACKET_T124_H + +#include <epan/packet_info.h> +#include "packet-per.h" + +extern int dissect_DomainMCSPDU_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_); +extern guint32 t124_get_last_channelId(void); +extern void t124_set_top_tree(proto_tree *tree); + +extern void register_t124_ns_dissector(const char *nsKey, dissector_t dissector, int proto); +extern void register_t124_sd_dissector(packet_info *pinfo, guint32 channelId, dissector_t dissector, int proto); + +#include "packet-t124-exp.h" + +#endif /* PACKET_T124_H */ + + diff --git a/epan/dissectors/asn1/t124/t124.cnf b/epan/dissectors/asn1/t124/t124.cnf new file mode 100644 index 00000000..f3281d6b --- /dev/null +++ b/epan/dissectors/asn1/t124/t124.cnf @@ -0,0 +1,241 @@ +# T.124/GCC-PROTOCOL.cnf +# Copyright 2011 Graeme Lunt +#---------------------------------------------------------------------------------------- +#.EXPORTS +#---------------------------------------------------------------------------------------- +ConnectData +ConnectGCCPDU +#.END + +#.OMIT_ASSIGNMENT +GCCPDU +ConnectMCSPDU +IndicationPDU +ResponsePDU +Connect-Initial +Connect-Additional +Connect-Result +UserIDIndication +ConferenceAddResponse +ConferenceLockResponse +ConferenceLockIndication +ConferenceUnlockResponse +ConferenceUnlockIndication +ConferenceTerminateResponse +ConferenceTerminateIndication +ConferenceEjectUserResponse +ConferenceEjectUserIndication +ConferenceTransferResponse +ConferenceTransferIndication +RosterUpdateIndication +ApplicationInvokeIndication +RegistryMonitorEntryIndication +RegistryAllocateHandleResponse +RegistryResponse +ConductorAssignIndication +ConductorReleaseIndication +ConductorPermissionAskIndication +ConductorPermissionGrantIndication +ConferenceTimeRemainingIndication +ConferenceTimeInquireIndication +ConferenceTimeExtendIndication +ConferenceAssistanceIndication +TextMessageIndication +FunctionNotSupportedResponse +Connect-Response +Time +Handle +NodeRecord +ApplicationRecord +ApplicationInvokeSpecifier +RegistryItem +RegistryEntryOwner +RequestPDU +DomainParameters +DynamicTokenID +NodeProperties +AlternativeNodeID +ChannelType +CapabilityID +CapabilityClass +ConferenceAddRequest +ConferenceLockRequest +ConferenceUnlockRequest +ConferenceTerminateRequest +ConferenceEjectUserRequest +ConferenceTransferRequest +RegistryRegisterChannelRequest +RegistryAssignTokenRequest +RegistrySetParameterRequest +RegistryRetrieveEntryRequest +RegistryDeleteEntryRequest +RegistryMonitorEntryRequest +RegistryAllocateHandleRequest +NonStandardPDU +NetworkAddressV2 +EntityID +RegistryKey +RegistryModificationRights +MediaList +ChannelAggregationMethod +Profile +NetworkConnection +SessionKey +ChannelID +GSTNConnection +ISDNConnection +CSDNConnection +PSDNConnection +ATMConnection +ExtendedE164NetworkAddress +TransportAddress + +#---------------------------------------------------------------------------------------- + +#.PDU +#---------------------------------------------------------------------------------------- + + +#.TF_RENAME +ISDNConnection/circuitTypes ISDNCircuitTypes +ISDNConnection/circuitTypes/_item ISDNCircuitTypes_item +ISDNConnection/highLayerCompatibility ISDNHighLayerCompatibility +PSDNConnection/networkAddress PSDNNetworkAddress +ConferenceTerminateRequest/reason TerminateRequestReason +ConferenceTerminateIndication/reason TerminateIndicationReason +ConferenceEjectUserRequest/reason EjectUserRequestReason +RosterUpdateIndication/nodeInformation/nodeRecordList/refresh NodeRefresh +RosterUpdateIndication/applicationInformation/_item/applicationRecordList/refresh ApplicationRefresh +RosterUpdateIndication/applicationInformation/_item/applicationRecordList/update ApplicationUpdate +RosterUpdateIndication/applicationInformation/_item/applicationRecordList/update/_item ApplicationUpdateItem +ConferenceQueryResponse/result QueryResponseResult +ConferenceJoinResponse/result JoinResponseResult +ConferenceInviteResponse/result InviteResponseResult +ConferenceAddResponse/result AddResponseResult +ConferenceLockResponse/result LockResponseResult +ConferenceUnlockResponse/result UnlockResponseResult +ConferenceTerminateResponse/result TerminateResponseResult +ConferenceEjectUserResponse/result EjectUserResponseResult +ConferenceTransferResponse/result TransferResponseResult +RegistryAllocateHandleResponse/result AllocateHandleResponseResult + +#.FN_BODY ConnectData/connectPDU VAL_PTR = &next_tvb + tvbuff_t *next_tvb = NULL; + proto_tree *next_tree = NULL; + int old_offset = 0; + + old_offset = offset; + %(DEFAULT_BODY)s + if(next_tvb) { + /* "2a -> ConnectData::connectPDU length = 42 bytes */ + /* This length MUST be ignored by the client." */ + + /* Not sure why - but lets ignore the length. */ + /* We assume the OCTET STRING is all of the remaining bytes */ + + if(tvb_reported_length(next_tvb) == 42) { + /* this is perhaps a naive ... */ + next_tvb = tvb_new_subset_remaining(tvb, (old_offset>>3)+1); + } + + next_tree = proto_item_add_subtree(actx->created_item, ett_t124_connectGCCPDU); + + dissect_t124_ConnectGCCPDU(next_tvb, 0, actx, next_tree, hf_t124_connectGCCPDU); + + } +#.END + +#.FN_BODY UserData/_item/value VAL_PTR = &next_tvb + tvbuff_t *next_tvb = NULL; + tvbuff_t *t124NSIdentifier = (tvbuff_t*)actx->private_data; + guint8 *ns = NULL; + +%(DEFAULT_BODY)s + + if(next_tvb && t124NSIdentifier) { + + ns = tvb_get_string_enc(actx->pinfo->pool, t124NSIdentifier, 0, tvb_reported_length(t124NSIdentifier), ENC_ASCII|ENC_NA); + if(ns != NULL) { + dissector_try_string_new(t124_ns_dissector_table, ns, next_tvb, actx->pinfo, top_tree, FALSE, NULL); + } + } + +#.END + +#.FN_BODY SendDataRequest/userData VAL_PTR = &next_tvb + tvbuff_t *next_tvb = NULL; + +%(DEFAULT_BODY)s + + if(next_tvb) { + + dissector_try_uint_new(t124_sd_dissector_table, channelId, next_tvb, actx->pinfo, top_tree, FALSE, NULL); + + } + +#.END + +#.FN_BODY SendDataIndication/userData VAL_PTR = &next_tvb + tvbuff_t *next_tvb = NULL; + +%(DEFAULT_BODY)s + + if(next_tvb) { + + dissector_try_uint(t124_sd_dissector_table, channelId, next_tvb, actx->pinfo, top_tree); + + } + +#.END + + +#.FN_BODY DomainMCSPDU VAL_PTR = &domainmcs_value + gint domainmcs_value; + +%(DEFAULT_BODY)s + switch(domainmcs_value) { + case 25: /* sendDataRequest */ + case 26: /* sendDataIndication */ + case 27: /* uniformSendDataRequest */ + case 28: /* uniformSendDataIndication */ + /* Do nothing */ + break; + default: + col_prepend_fstr(%(ACTX)s->pinfo->cinfo, COL_INFO, "%%s ", val_to_str(domainmcs_value, t124_DomainMCSPDU_vals, "Unknown")); + break; + } + +#.END + +#.FN_PARS Key/object + FN_VARIANT = _str VAL_PTR = &actx->external.direct_reference + +#.FN_PARS H221NonStandardIdentifier + VAL_PTR = (tvbuff_t**)&actx->private_data + +#.FN_BODY H221NonStandardIdentifier + + %(DEFAULT_BODY)s + + +#.FN_BODY ChannelId VAL_PTR = &channelId + + %(DEFAULT_BODY)s + + if(hf_index == hf_t124_channelId_03) + col_append_fstr(%(ACTX)s->pinfo->cinfo, COL_INFO, "%%d", channelId); + + +#.OMIT_ASSIGNMENT +StaticChannelID +TokenID +StaticTokenID +RosterRefreshRequest +#.END +#.VIRTUAL_ASSGN +#---------------------------------------------------------------------------------------- + +#.END + +#---------------------------------------------------------------------------------------- +# vim:set ts=4 sts=2 sw=2: |