diff options
-rw-r--r-- | asn1/Makefile.am | 1 | ||||
-rw-r--r-- | asn1/t124/GCC-PROTOCOL.asn | 1180 | ||||
-rw-r--r-- | asn1/t124/Makefile | 651 | ||||
-rw-r--r-- | asn1/t124/Makefile.am | 26 | ||||
-rw-r--r-- | asn1/t124/Makefile.common | 51 | ||||
-rw-r--r-- | asn1/t124/Makefile.in | 651 | ||||
-rw-r--r-- | asn1/t124/Makefile.nmake | 29 | ||||
-rw-r--r-- | asn1/t124/packet-t124-template.c | 204 | ||||
-rw-r--r-- | asn1/t124/packet-t124-template.h | 43 | ||||
-rw-r--r-- | asn1/t124/t124.cnf | 162 | ||||
-rw-r--r-- | asn1/t125/packet-t125-template.c | 61 | ||||
-rw-r--r-- | asn1/t125/t125.cnf | 41 | ||||
-rw-r--r-- | epan/CMakeLists.txt | 2 | ||||
-rw-r--r-- | epan/dissectors/Makefile.common | 4 | ||||
-rw-r--r-- | epan/dissectors/packet-rdp.c | 2848 | ||||
-rw-r--r-- | epan/dissectors/packet-rdp.h | 40 | ||||
-rw-r--r-- | epan/dissectors/packet-ses.c | 11 | ||||
-rw-r--r-- | epan/dissectors/packet-t124.c | 7926 | ||||
-rw-r--r-- | epan/dissectors/packet-t124.h | 59 | ||||
-rw-r--r-- | epan/dissectors/packet-t125.c | 159 | ||||
-rw-r--r-- | epan/dissectors/packet-tpkt.c | 20 |
21 files changed, 14100 insertions, 69 deletions
diff --git a/asn1/Makefile.am b/asn1/Makefile.am index 9339e69b02..3ccd941730 100644 --- a/asn1/Makefile.am +++ b/asn1/Makefile.am @@ -102,6 +102,7 @@ SUBDIRS = \ snmp \ spnego \ sv \ + t124 \ t125 \ t38 \ tcap \ diff --git a/asn1/t124/GCC-PROTOCOL.asn b/asn1/t124/GCC-PROTOCOL.asn new file mode 100644 index 0000000000..33402ac7a2 --- /dev/null +++ b/asn1/t124/GCC-PROTOCOL.asn @@ -0,0 +1,1180 @@ +-- $Id$ +-- 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/asn1/t124/Makefile b/asn1/t124/Makefile new file mode 100644 index 0000000000..b927288da8 --- /dev/null +++ b/asn1/t124/Makefile @@ -0,0 +1,651 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# asn1/t124/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +# $Id$ +# +# +# Wireshark - Network traffic analyzer +# By Gerald Combs <gerald@wireshark.org> +# Copyright 1998 Gerald Combs +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# To be included into the asn1 Makefiles +# +# $Id$ +# +# +# Wireshark - Network traffic analyzer +# By Gerald Combs <gerald@wireshark.org> +# Copyright 1998 Gerald Combs +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# $Id$ +# +# +# Wireshark - Network traffic analyzer +# By Gerald Combs <gerald@wireshark.org> +# Copyright 1998 Gerald Combs +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# To be included into the asn1 Makefiles +# +# $Id$ +# +# +# Wireshark - Network traffic analyzer +# By Gerald Combs <gerald@wireshark.org> +# Copyright 1998 Gerald Combs +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +srcdir = . +top_srcdir = ../.. + +pkgdatadir = $(datadir)/wireshark +pkglibdir = $(libdir)/wireshark +pkgincludedir = $(includedir)/wireshark +top_builddir = ../.. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = /usr/bin/install -c +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = i686-pc-linux-gnu +host_triplet = i686-pc-linux-gnu +target_triplet = i686-pc-linux-gnu +DIST_COMMON = $(srcdir)/../Makefile.inc $(srcdir)/../Makefile.preinc \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.common \ + $(srcdir)/Makefile.in +subdir = asn1/t124 +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/aclocal-fallback/glib-2.0.m4 \ + $(top_srcdir)/aclocal-fallback/gtk-2.0.m4 \ + $(top_srcdir)/aclocal-fallback/gtk-3.0.m4 \ + $(top_srcdir)/aclocal-fallback/libgcrypt.m4 \ + $(top_srcdir)/aclocal-fallback/libsmi.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /home/graeme/wireshark/missing --run aclocal-1.9 +ADNS_LIBS = +AMDEP_FALSE = # +AMDEP_TRUE = +AMTAR = ${SHELL} /home/graeme/wireshark/missing --run tar +AR = ar +AUTOCONF = ${SHELL} /home/graeme/wireshark/missing --run autoconf +AUTOHEADER = ${SHELL} /home/graeme/wireshark/missing --run autoheader +AUTOMAKE = ${SHELL} /home/graeme/wireshark/missing --run automake-1.9 +AWK = gawk +CC = gcc +CCDEPMODE = depmode=gcc3 +CC_FOR_BUILD = gcc +CFLAGS = -DINET6 -DG_DISABLE_DEPRECATED -DG_DISABLE_SINGLE_INCLUDES -DGSEAL_ENABLE -DGTK_DISABLE_DEPRECATED -DGTK_DISABLE_SINGLE_INCLUDES -D_FORTIFY_SOURCE=2 -D_U_="__attribute__((unused))" -g -O2 -Wall -W -Wextra -Wdeclaration-after-statement -Wendif-labels -Wpointer-arith -Wno-pointer-sign -Warray-bounds -Wcast-align -Wformat-security -Wold-style-definition -I/usr/local/include -pthread -D_REENTRANT -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/directfb -I/usr/include/libpng12 -I/usr/include/pcap +CORESERVICES_FRAMEWORKS = +CPP = gcc -E +CPPFLAGS = -I/usr/local/include -I/usr/include/pcap '-DPLUGIN_DIR="$(plugindir)"' +CXX = g++ +CXXCPP = g++ -E +CXXDEPMODE = depmode=gcc3 +CXXFLAGS = -g -O2 -pthread -D_REENTRANT -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/directfb -I/usr/include/libpng12 +CYGPATH_W = echo +C_ARES_LIBS = -lcares +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DOXYGEN = +DSYMUTIL = +DUMPBIN = +DUMPCAP_GROUP = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +ELINKS = +ENABLE_STATIC = +ENABLE_STATIC_FALSE = +ENABLE_STATIC_TRUE = # +EXEEXT = +FGREP = /bin/grep -F +FOP = +GEOIP_LIBS = -lGeoIP +GETOPT_LO = +GLIB_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include +GLIB_GENMARSHAL = glib-genmarshal +GLIB_LIBS = -pthread -Wl,--export-dynamic -lgthread-2.0 -lgmodule-2.0 -lrt -lglib-2.0 +GLIB_MKENUMS = glib-mkenums +GOBJECT_QUERY = gobject-query +GREP = /bin/grep +GTK_CFLAGS = -pthread -D_REENTRANT -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/directfb -I/usr/include/libpng12 +GTK_LIBS = -pthread -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lrt -lglib-2.0 +HAVE_BLESS = no +HAVE_DOXYGEN = no +HAVE_DOXYGEN_FALSE = +HAVE_DOXYGEN_TRUE = # +HAVE_DPKG_BUILDPACKAGE = yes +HAVE_DUMPCAP_GROUP_FALSE = +HAVE_DUMPCAP_GROUP_TRUE = # +HAVE_ELINKS = no +HAVE_ELINKS_FALSE = +HAVE_ELINKS_TRUE = # +HAVE_FOP = no +HAVE_FOP_FALSE = +HAVE_FOP_TRUE = # +HAVE_HDIUTIL = no +HAVE_HHC = no +HAVE_HHC_FALSE = +HAVE_HHC_TRUE = # +HAVE_LIBLUA_FALSE = # +HAVE_LIBLUA_TRUE = +HAVE_LIBPORTAUDIO_FALSE = # +HAVE_LIBPORTAUDIO_TRUE = +HAVE_LIBPY_FALSE = +HAVE_LIBPY_TRUE = # +HAVE_LYNX = no +HAVE_LYNX_FALSE = +HAVE_LYNX_TRUE = # +HAVE_OSX_PACKAGING = no +HAVE_PKGMK = no +HAVE_PKGPROTO = no +HAVE_PKGTRANS = no +HAVE_PLUGINS_FALSE = # +HAVE_PLUGINS_TRUE = +HAVE_RPM = +HAVE_SVR4_PACKAGING = no +HAVE_WARNINGS_AS_ERRORS_FALSE = # +HAVE_WARNINGS_AS_ERRORS_TRUE = +HAVE_XCODEBUILD = no +HAVE_XMLLINT = yes +HAVE_XMLLINT_FALSE = # +HAVE_XMLLINT_TRUE = +HAVE_XSLTPROC = yes +HAVE_XSLTPROC_FALSE = # +HAVE_XSLTPROC_TRUE = +HHC = +HTML_VIEWER = /usr/bin/xdg-open +INET_ATON_LO = +INET_NTOP_LO = +INET_PTON_LO = +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s +KRB5_CONFIG = /usr/bin/krb5-config +KRB5_LIBS = -Wl,-Bsymbolic-functions -lkrb5 -lk5crypto -lcom_err +LAUNCHSERVICES_FRAMEWORKS = +LD = /usr/bin/ld +LDFLAGS = -Wl,--as-needed -L/usr/local/lib -L/usr/local/lib -L/usr/local/lib -L/usr/local/lib +LDFLAGS_SHAREDLIB = +LEX = /usr/bin/flex +LEXLIB = -lfl +LEX_OUTPUT_ROOT = lex.yy +LIBCAP_LIBS = -lcap +LIBGCRYPT_CFLAGS = +LIBGCRYPT_CONFIG = /usr/bin/libgcrypt-config +LIBGCRYPT_LIBS = -lgcrypt +LIBGNUTLS_CFLAGS = +LIBGNUTLS_LIBS = -lgnutls +LIBOBJS = +LIBS = -lz +LIBSMI_CFLAGS = -I/usr/include +LIBSMI_LDFLAGS = -L/usr/lib -lsmi +LIBSMI_VERSION = 2:27:0 +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIBTOOL_DEPS = ./ltmain.sh +LIPO = +LN_S = ln -s +LTLIBOBJS = +LUA_INCLUDES = -I/usr/include/lua5.1 +LUA_LIBS = -llua5.1 -lm +LYNX = +MAKEINFO = ${SHELL} /home/graeme/wireshark/missing --run makeinfo +NEED_GETOPT_LO_FALSE = +NEED_GETOPT_LO_TRUE = # +NEED_INET_ATON_LO_FALSE = +NEED_INET_ATON_LO_TRUE = # +NEED_INET_NTOP_LO_FALSE = +NEED_INET_NTOP_LO_TRUE = # +NEED_INET_PTON_LO_FALSE = +NEED_INET_PTON_LO_TRUE = # +NEED_STRNCASECMP_LO_FALSE = +NEED_STRNCASECMP_LO_TRUE = # +NEED_STRPTIME_LO_FALSE = +NEED_STRPTIME_LO_TRUE = # +NM = /usr/bin/nm -B +NMEDIT = +NSL_LIBS = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = wireshark +PACKAGE_BUGREPORT = +PACKAGE_NAME = wireshark +PACKAGE_STRING = wireshark 1.7.0 +PACKAGE_TARNAME = wireshark +PACKAGE_URL = +PACKAGE_VERSION = 1.7.0 +PATH_SEPARATOR = : +PCAP_CONFIG = +PCAP_LIBS = -lpcap +PERL = /usr/bin/perl +PKG_CONFIG = /usr/bin/pkg-config +PLUGIN_LIBS = +POD2HTML = /usr/bin/pod2html +POD2MAN = /usr/bin/pod2man +PORTAUDIO_INCLUDES = +PORTAUDIO_LIBS = -lportaudio +PYTHON = /usr/bin/python +PY_CFLAGS = +PY_LIBS = +RANLIB = ranlib +SED = /bin/sed +SETCAP = +SETCAP_INSTALL_FALSE = +SETCAP_INSTALL_TRUE = # +SETUID_INSTALL_FALSE = +SETUID_INSTALL_TRUE = # +SET_MAKE = +SHELL = /bin/bash +SOCKET_LIBS = +SSL_LIBS = +STRIP = strip +STRNCASECMP_LO = +STRPTIME_C = +STRPTIME_LO = +USE_PROFILE_BUILD_FALSE = +USE_PROFILE_BUILD_TRUE = # +VERSION = 1.7.0 +XMLLINT = /usr/bin/xmllint +XSLTPROC = /usr/bin/xsltproc +YACC = bison -y +YACCDUMMY = /usr/bin/bison +YFLAGS = +ac_ct_CC = gcc +ac_ct_CXX = g++ +ac_ct_DUMPBIN = +ac_cv_wireshark_have_rpm = no +ac_ws_python_config = no +am__fastdepCC_FALSE = # +am__fastdepCC_TRUE = +am__fastdepCXX_FALSE = # +am__fastdepCXX_TRUE = +am__include = include +am__leading_dot = . +am__quote = +am__tar = tar --format=ustar -chf - "$$tardir" +am__untar = tar -xf - +bindir = ${exec_prefix}/bin +build = i686-pc-linux-gnu +build_alias = +build_cpu = i686 +build_os = linux-gnu +build_vendor = pc +capinfos_bin = capinfos$(EXEEXT) +capinfos_man = capinfos.1 +datadir = ${datarootdir} +datarootdir = ${prefix}/share +dftest_bin = dftest$(EXEEXT) +dftest_man = dftest.1 +docdir = /home/graeme/wshark/share/doc/wireshark +dumpcap_bin = dumpcap$(EXEEXT) +dumpcap_man = dumpcap.1 +dvidir = ${docdir} +editcap_bin = editcap$(EXEEXT) +editcap_man = editcap.1 +exec_prefix = ${prefix} +host = i686-pc-linux-gnu +host_alias = +host_cpu = i686 +host_os = linux-gnu +host_vendor = pc +htmldir = ${docdir} +idl2wrs_bin = idl2wrs +idl2wrs_man = idl2wrs.1 +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = /home/graeme/wireshark/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +lt_ECHO = echo +mandir = ${datarootdir}/man +mergecap_bin = mergecap$(EXEEXT) +mergecap_man = mergecap.1 +mkdir_p = mkdir -p -- +oldincludedir = /usr/include +pdfdir = ${docdir} +plugindir = ${libdir}/wireshark/plugins/${VERSION} +prefix = /home/graeme/wshark +program_transform_name = s,x,x, +psdir = ${docdir} +pythondir = ${libdir}/wireshark/python/${VERSION} +randpkt_bin = randpkt$(EXEEXT) +randpkt_man = randpkt.1 +rawshark_bin = rawshark$(EXEEXT) +rawshark_man = rawshark.1 +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +sysconfdir = ${prefix}/etc +target = i686-pc-linux-gnu +target_alias = +target_cpu = i686 +target_os = linux-gnu +target_vendor = pc +text2pcap_bin = text2pcap$(EXEEXT) +text2pcap_man = text2pcap.1 +tshark_bin = tshark$(EXEEXT) +tshark_man = tshark.1 +wireshark_SUBDIRS = codecs gtk +wireshark_bin = wireshark$(EXEEXT) +wireshark_man = wireshark.1 +wiresharkfilter_man = wireshark-filter.4 +MAKE_CNF_EXPORT = $(MAKE) generate_export +PROTOCOL_NAME = t124 +DISSECTOR_FILES = packet-$(PROTOCOL_NAME).c \ + packet-$(PROTOCOL_NAME).h + +EXT_ASN_FILE_LIST = +ASN_FILE_LIST = GCC-PROTOCOL.asn MCS-PROTOCOL.asn + +# The packet-$(PROTOCOL_NAME)-template.h and $(PROTOCOL_NAME).asn +# files do not exist for all protocols: Please add/remove as required. +EXTRA_DIST = \ + Makefile.nmake \ + $(ASN_FILE_LIST) \ + packet-$(PROTOCOL_NAME)-template.c \ + packet-$(PROTOCOL_NAME)-template.h \ + $(PROTOCOL_NAME).cnf + +SRC_FILES = \ + $(EXTRA_DIST) \ + $(EXT_ASN_FILE_LIST) + +A2W_FLAGS = +EXTRA_CNF = +CLEANFILES = \ + parsetab.py \ + parsetab.pyc \ + $(DISSECTOR_FILES) \ + *-exp.cnf \ + packet-*-{dis-tab,ettarr,ett,exp,fn,hfarr,hf,table*,val}.[hc] + +MAINTAINERCLEANFILES = \ + Makefile.in + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/../Makefile.preinc $(srcdir)/Makefile.common $(srcdir)/../Makefile.inc $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu asn1/t124/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu asn1/t124/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + $(mkdir_p) $(distdir)/.. + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-libtool + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-exec install-exec-am \ + install-info install-info-am install-man install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +# Don't generate all the dissectors during toplevel make. +all: + +MCS-PROTOCOL.asn: ../t125/MCS-PROTOCOL.asn + cp $< $@ + +all: copy_files + +generate_dissector: $(DISSECTOR_FILES) + +generate_export: $(EXPORT_FILES) + +PROTO_OPT ?= -p $(PROTOCOL_NAME) + +$(DISSECTOR_FILES): $(top_srcdir)/tools/asn2wrs.py $(SRC_FILES) $(EXTRA_CNF) + python $(top_srcdir)/tools/asn2wrs.py \ + $(A2W_FLAGS) \ + $(PROTO_OPT) \ + -c $(srcdir)/$(PROTOCOL_NAME).cnf \ + -s $(srcdir)/packet-$(PROTOCOL_NAME)-template \ + -D $(srcdir) \ + $(EXT_ASN_FILE_LIST) $(ASN_FILE_LIST) $(EXT_ASN_FILE_LIST_LATE) + +$(EXPORT_FILES): $(top_srcdir)/tools/asn2wrs.py $(SRC_FILES) + python $(top_srcdir)/tools/asn2wrs.py \ + -E $(A2W_FLAGS) \ + $(PROTO_OPT) \ + -c $(srcdir)/$(PROTOCOL_NAME).cnf \ + -D $(srcdir) \ + $(EXT_ASN_FILE_LIST) $(ASN_FILE_LIST) $(EXT_ASN_FILE_LIST_LATE) + +copy_files: generate_dissector + cp $(DISSECTOR_FILES) $(top_srcdir)/epan/dissectors/ +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/asn1/t124/Makefile.am b/asn1/t124/Makefile.am new file mode 100644 index 0000000000..462af31e88 --- /dev/null +++ b/asn1/t124/Makefile.am @@ -0,0 +1,26 @@ +# $Id$ +# +# +# Wireshark - Network traffic analyzer +# By Gerald Combs <gerald@wireshark.org> +# Copyright 1998 Gerald Combs +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +include ../Makefile.preinc +include Makefile.common +include ../Makefile.inc + diff --git a/asn1/t124/Makefile.common b/asn1/t124/Makefile.common new file mode 100644 index 0000000000..af4c36ebf9 --- /dev/null +++ b/asn1/t124/Makefile.common @@ -0,0 +1,51 @@ +# $Id$ +# +# +# Wireshark - Network traffic analyzer +# By Gerald Combs <gerald@wireshark.org> +# Copyright 1998 Gerald Combs +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +PROTOCOL_NAME=t124 + +DISSECTOR_FILES=packet-$(PROTOCOL_NAME).c \ + packet-$(PROTOCOL_NAME).h + + +EXT_ASN_FILE_LIST = + +ASN_FILE_LIST = GCC-PROTOCOL.asn MCS-PROTOCOL.asn + +# The packet-$(PROTOCOL_NAME)-template.h and $(PROTOCOL_NAME).asn +# files do not exist for all protocols: Please add/remove as required. +EXTRA_DIST = \ + Makefile.nmake \ + $(ASN_FILE_LIST) \ + packet-$(PROTOCOL_NAME)-template.c \ + packet-$(PROTOCOL_NAME)-template.h \ + $(PROTOCOL_NAME).cnf + +SRC_FILES = \ + $(EXTRA_DIST) \ + $(EXT_ASN_FILE_LIST) + +A2W_FLAGS= + +EXTRA_CNF= + +MCS-PROTOCOL.asn: ../t125/MCS-PROTOCOL.asn + cp $< $@
\ No newline at end of file diff --git a/asn1/t124/Makefile.in b/asn1/t124/Makefile.in new file mode 100644 index 0000000000..a3c4d7178e --- /dev/null +++ b/asn1/t124/Makefile.in @@ -0,0 +1,651 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# $Id$ +# +# +# Wireshark - Network traffic analyzer +# By Gerald Combs <gerald@wireshark.org> +# Copyright 1998 Gerald Combs +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# To be included into the asn1 Makefiles +# +# $Id$ +# +# +# Wireshark - Network traffic analyzer +# By Gerald Combs <gerald@wireshark.org> +# Copyright 1998 Gerald Combs +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# $Id$ +# +# +# Wireshark - Network traffic analyzer +# By Gerald Combs <gerald@wireshark.org> +# Copyright 1998 Gerald Combs +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# To be included into the asn1 Makefiles +# +# $Id$ +# +# +# Wireshark - Network traffic analyzer +# By Gerald Combs <gerald@wireshark.org> +# Copyright 1998 Gerald Combs +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(srcdir)/../Makefile.inc $(srcdir)/../Makefile.preinc \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.common \ + $(srcdir)/Makefile.in +subdir = asn1/t124 +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/aclocal-fallback/glib-2.0.m4 \ + $(top_srcdir)/aclocal-fallback/gtk-2.0.m4 \ + $(top_srcdir)/aclocal-fallback/gtk-3.0.m4 \ + $(top_srcdir)/aclocal-fallback/libgcrypt.m4 \ + $(top_srcdir)/aclocal-fallback/libsmi.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ADNS_LIBS = @ADNS_LIBS@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CC_FOR_BUILD = @CC_FOR_BUILD@ +CFLAGS = @CFLAGS@ +CORESERVICES_FRAMEWORKS = @CORESERVICES_FRAMEWORKS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +C_ARES_LIBS = @C_ARES_LIBS@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +DUMPCAP_GROUP = @DUMPCAP_GROUP@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ELINKS = @ELINKS@ +ENABLE_STATIC = @ENABLE_STATIC@ +ENABLE_STATIC_FALSE = @ENABLE_STATIC_FALSE@ +ENABLE_STATIC_TRUE = @ENABLE_STATIC_TRUE@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FOP = @FOP@ +GEOIP_LIBS = @GEOIP_LIBS@ +GETOPT_LO = @GETOPT_LO@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ +GLIB_LIBS = @GLIB_LIBS@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GOBJECT_QUERY = @GOBJECT_QUERY@ +GREP = @GREP@ +GTK_CFLAGS = @GTK_CFLAGS@ +GTK_LIBS = @GTK_LIBS@ +HAVE_BLESS = @HAVE_BLESS@ +HAVE_DOXYGEN = @HAVE_DOXYGEN@ +HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@ +HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@ +HAVE_DPKG_BUILDPACKAGE = @HAVE_DPKG_BUILDPACKAGE@ +HAVE_DUMPCAP_GROUP_FALSE = @HAVE_DUMPCAP_GROUP_FALSE@ +HAVE_DUMPCAP_GROUP_TRUE = @HAVE_DUMPCAP_GROUP_TRUE@ +HAVE_ELINKS = @HAVE_ELINKS@ +HAVE_ELINKS_FALSE = @HAVE_ELINKS_FALSE@ +HAVE_ELINKS_TRUE = @HAVE_ELINKS_TRUE@ +HAVE_FOP = @HAVE_FOP@ +HAVE_FOP_FALSE = @HAVE_FOP_FALSE@ +HAVE_FOP_TRUE = @HAVE_FOP_TRUE@ +HAVE_HDIUTIL = @HAVE_HDIUTIL@ +HAVE_HHC = @HAVE_HHC@ +HAVE_HHC_FALSE = @HAVE_HHC_FALSE@ +HAVE_HHC_TRUE = @HAVE_HHC_TRUE@ +HAVE_LIBLUA_FALSE = @HAVE_LIBLUA_FALSE@ +HAVE_LIBLUA_TRUE = @HAVE_LIBLUA_TRUE@ +HAVE_LIBPORTAUDIO_FALSE = @HAVE_LIBPORTAUDIO_FALSE@ +HAVE_LIBPORTAUDIO_TRUE = @HAVE_LIBPORTAUDIO_TRUE@ +HAVE_LIBPY_FALSE = @HAVE_LIBPY_FALSE@ +HAVE_LIBPY_TRUE = @HAVE_LIBPY_TRUE@ +HAVE_LYNX = @HAVE_LYNX@ +HAVE_LYNX_FALSE = @HAVE_LYNX_FALSE@ +HAVE_LYNX_TRUE = @HAVE_LYNX_TRUE@ +HAVE_OSX_PACKAGING = @HAVE_OSX_PACKAGING@ +HAVE_PKGMK = @HAVE_PKGMK@ +HAVE_PKGPROTO = @HAVE_PKGPROTO@ +HAVE_PKGTRANS = @HAVE_PKGTRANS@ +HAVE_PLUGINS_FALSE = @HAVE_PLUGINS_FALSE@ +HAVE_PLUGINS_TRUE = @HAVE_PLUGINS_TRUE@ +HAVE_RPM = @HAVE_RPM@ +HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@ +HAVE_WARNINGS_AS_ERRORS_FALSE = @HAVE_WARNINGS_AS_ERRORS_FALSE@ +HAVE_WARNINGS_AS_ERRORS_TRUE = @HAVE_WARNINGS_AS_ERRORS_TRUE@ +HAVE_XCODEBUILD = @HAVE_XCODEBUILD@ +HAVE_XMLLINT = @HAVE_XMLLINT@ +HAVE_XMLLINT_FALSE = @HAVE_XMLLINT_FALSE@ +HAVE_XMLLINT_TRUE = @HAVE_XMLLINT_TRUE@ +HAVE_XSLTPROC = @HAVE_XSLTPROC@ +HAVE_XSLTPROC_FALSE = @HAVE_XSLTPROC_FALSE@ +HAVE_XSLTPROC_TRUE = @HAVE_XSLTPROC_TRUE@ +HHC = @HHC@ +HTML_VIEWER = @HTML_VIEWER@ +INET_ATON_LO = @INET_ATON_LO@ +INET_NTOP_LO = @INET_NTOP_LO@ +INET_PTON_LO = @INET_PTON_LO@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KRB5_CONFIG = @KRB5_CONFIG@ +KRB5_LIBS = @KRB5_LIBS@ +LAUNCHSERVICES_FRAMEWORKS = @LAUNCHSERVICES_FRAMEWORKS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LDFLAGS_SHAREDLIB = @LDFLAGS_SHAREDLIB@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBCAP_LIBS = @LIBCAP_LIBS@ +LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ +LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ +LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ +LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ +LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBSMI_CFLAGS = @LIBSMI_CFLAGS@ +LIBSMI_LDFLAGS = @LIBSMI_LDFLAGS@ +LIBSMI_VERSION = @LIBSMI_VERSION@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_DEPS = @LIBTOOL_DEPS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LUA_INCLUDES = @LUA_INCLUDES@ +LUA_LIBS = @LUA_LIBS@ +LYNX = @LYNX@ +MAKEINFO = @MAKEINFO@ +NEED_GETOPT_LO_FALSE = @NEED_GETOPT_LO_FALSE@ +NEED_GETOPT_LO_TRUE = @NEED_GETOPT_LO_TRUE@ +NEED_INET_ATON_LO_FALSE = @NEED_INET_ATON_LO_FALSE@ +NEED_INET_ATON_LO_TRUE = @NEED_INET_ATON_LO_TRUE@ +NEED_INET_NTOP_LO_FALSE = @NEED_INET_NTOP_LO_FALSE@ +NEED_INET_NTOP_LO_TRUE = @NEED_INET_NTOP_LO_TRUE@ +NEED_INET_PTON_LO_FALSE = @NEED_INET_PTON_LO_FALSE@ +NEED_INET_PTON_LO_TRUE = @NEED_INET_PTON_LO_TRUE@ +NEED_STRNCASECMP_LO_FALSE = @NEED_STRNCASECMP_LO_FALSE@ +NEED_STRNCASECMP_LO_TRUE = @NEED_STRNCASECMP_LO_TRUE@ +NEED_STRPTIME_LO_FALSE = @NEED_STRPTIME_LO_FALSE@ +NEED_STRPTIME_LO_TRUE = @NEED_STRPTIME_LO_TRUE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NSL_LIBS = @NSL_LIBS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCAP_CONFIG = @PCAP_CONFIG@ +PCAP_LIBS = @PCAP_LIBS@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PLUGIN_LIBS = @PLUGIN_LIBS@ +POD2HTML = @POD2HTML@ +POD2MAN = @POD2MAN@ +PORTAUDIO_INCLUDES = @PORTAUDIO_INCLUDES@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PYTHON = @PYTHON@ +PY_CFLAGS = @PY_CFLAGS@ +PY_LIBS = @PY_LIBS@ +RANLIB = @RANLIB@ +SED = @SED@ +SETCAP = @SETCAP@ +SETCAP_INSTALL_FALSE = @SETCAP_INSTALL_FALSE@ +SETCAP_INSTALL_TRUE = @SETCAP_INSTALL_TRUE@ +SETUID_INSTALL_FALSE = @SETUID_INSTALL_FALSE@ +SETUID_INSTALL_TRUE = @SETUID_INSTALL_TRUE@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SOCKET_LIBS = @SOCKET_LIBS@ +SSL_LIBS = @SSL_LIBS@ +STRIP = @STRIP@ +STRNCASECMP_LO = @STRNCASECMP_LO@ +STRPTIME_C = @STRPTIME_C@ +STRPTIME_LO = @STRPTIME_LO@ +USE_PROFILE_BUILD_FALSE = @USE_PROFILE_BUILD_FALSE@ +USE_PROFILE_BUILD_TRUE = @USE_PROFILE_BUILD_TRUE@ +VERSION = @VERSION@ +XMLLINT = @XMLLINT@ +XSLTPROC = @XSLTPROC@ +YACC = @YACC@ +YACCDUMMY = @YACCDUMMY@ +YFLAGS = @YFLAGS@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_cv_wireshark_have_rpm = @ac_cv_wireshark_have_rpm@ +ac_ws_python_config = @ac_ws_python_config@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +capinfos_bin = @capinfos_bin@ +capinfos_man = @capinfos_man@ +datadir = @datadir@ +datarootdir = @datarootdir@ +dftest_bin = @dftest_bin@ +dftest_man = @dftest_man@ +docdir = @docdir@ +dumpcap_bin = @dumpcap_bin@ +dumpcap_man = @dumpcap_man@ +dvidir = @dvidir@ +editcap_bin = @editcap_bin@ +editcap_man = @editcap_man@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +idl2wrs_bin = @idl2wrs_bin@ +idl2wrs_man = @idl2wrs_man@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mergecap_bin = @mergecap_bin@ +mergecap_man = @mergecap_man@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +plugindir = @plugindir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pythondir = @pythondir@ +randpkt_bin = @randpkt_bin@ +randpkt_man = @randpkt_man@ +rawshark_bin = @rawshark_bin@ +rawshark_man = @rawshark_man@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +text2pcap_bin = @text2pcap_bin@ +text2pcap_man = @text2pcap_man@ +tshark_bin = @tshark_bin@ +tshark_man = @tshark_man@ +wireshark_SUBDIRS = @wireshark_SUBDIRS@ +wireshark_bin = @wireshark_bin@ +wireshark_man = @wireshark_man@ +wiresharkfilter_man = @wiresharkfilter_man@ +MAKE_CNF_EXPORT = $(MAKE) generate_export +PROTOCOL_NAME = t124 +DISSECTOR_FILES = packet-$(PROTOCOL_NAME).c \ + packet-$(PROTOCOL_NAME).h + +EXT_ASN_FILE_LIST = +ASN_FILE_LIST = GCC-PROTOCOL.asn MCS-PROTOCOL.asn + +# The packet-$(PROTOCOL_NAME)-template.h and $(PROTOCOL_NAME).asn +# files do not exist for all protocols: Please add/remove as required. +EXTRA_DIST = \ + Makefile.nmake \ + $(ASN_FILE_LIST) \ + packet-$(PROTOCOL_NAME)-template.c \ + packet-$(PROTOCOL_NAME)-template.h \ + $(PROTOCOL_NAME).cnf + +SRC_FILES = \ + $(EXTRA_DIST) \ + $(EXT_ASN_FILE_LIST) + +A2W_FLAGS = +EXTRA_CNF = +CLEANFILES = \ + parsetab.py \ + parsetab.pyc \ + $(DISSECTOR_FILES) \ + *-exp.cnf \ + packet-*-{dis-tab,ettarr,ett,exp,fn,hfarr,hf,table*,val}.[hc] + +MAINTAINERCLEANFILES = \ + Makefile.in + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/../Makefile.preinc $(srcdir)/Makefile.common $(srcdir)/../Makefile.inc $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu asn1/t124/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu asn1/t124/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + $(mkdir_p) $(distdir)/.. + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-libtool + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-exec install-exec-am \ + install-info install-info-am install-man install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +# Don't generate all the dissectors during toplevel make. +all: + +MCS-PROTOCOL.asn: ../t125/MCS-PROTOCOL.asn + cp $< $@ + +all: copy_files + +generate_dissector: $(DISSECTOR_FILES) + +generate_export: $(EXPORT_FILES) + +PROTO_OPT ?= -p $(PROTOCOL_NAME) + +$(DISSECTOR_FILES): $(top_srcdir)/tools/asn2wrs.py $(SRC_FILES) $(EXTRA_CNF) + python $(top_srcdir)/tools/asn2wrs.py \ + $(A2W_FLAGS) \ + $(PROTO_OPT) \ + -c $(srcdir)/$(PROTOCOL_NAME).cnf \ + -s $(srcdir)/packet-$(PROTOCOL_NAME)-template \ + -D $(srcdir) \ + $(EXT_ASN_FILE_LIST) $(ASN_FILE_LIST) $(EXT_ASN_FILE_LIST_LATE) + +$(EXPORT_FILES): $(top_srcdir)/tools/asn2wrs.py $(SRC_FILES) + python $(top_srcdir)/tools/asn2wrs.py \ + -E $(A2W_FLAGS) \ + $(PROTO_OPT) \ + -c $(srcdir)/$(PROTOCOL_NAME).cnf \ + -D $(srcdir) \ + $(EXT_ASN_FILE_LIST) $(ASN_FILE_LIST) $(EXT_ASN_FILE_LIST_LATE) + +copy_files: generate_dissector + cp $(DISSECTOR_FILES) $(top_srcdir)/epan/dissectors/ +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/asn1/t124/Makefile.nmake b/asn1/t124/Makefile.nmake new file mode 100644 index 0000000000..5a32997c60 --- /dev/null +++ b/asn1/t124/Makefile.nmake @@ -0,0 +1,29 @@ +## Use: $(MAKE) /$(MAKEFLAGS) -f makefile.nmake +# +# $Id$ +# +# +# Wireshark - Network traffic analyzer +# By Gerald Combs <gerald@wireshark.org> +# Copyright 1998 Gerald Combs +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +include ../../config.nmake +include ../Makefile.preinc.nmake +include Makefile.common +include ../Makefile.inc.nmake + diff --git a/asn1/t124/packet-t124-template.c b/asn1/t124/packet-t124-template.c new file mode 100644 index 0000000000..aa1e466a35 --- /dev/null +++ b/asn1/t124/packet-t124-template.c @@ -0,0 +1,204 @@ +/* packet-t124.c + * Routines for t124 packet dissection + * Copyright 2010, Graeme Lunt + * + * $Id$ + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1998 Gerald Combs + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <glib.h> +#include <epan/packet.h> +#include <epan/conversation.h> + +#include <epan/asn1.h> +#include "packet-per.h" +#include "packet-ber.h" +#include "packet-t124.h" + +#define PNAME "GENERIC-CONFERENCE-CONTROL T.124" +#define PSNAME "T.124" +#define PFNAME "t124" + +/* 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 const char *t124Identifier = NULL; /* extensions identifier */ +static tvbuff_t *t124NSIdentifier = NULL; /* extensions non-standard identifier */ +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, 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, 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 _U_, packet_info *pinfo _U_, proto_tree *tree _U_) { + 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 _U_, proto_tree *parent_tree) +{ + 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.125"); + col_clear(pinfo->cinfo, COL_INFO); + + item = proto_tree_add_item(parent_tree, proto_t124, tvb, 0, tvb_length(tvb), FALSE); + 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_length(tvb); +} + +static gboolean +dissect_t124_heur(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *parent_tree) +{ + asn1_ctx_t asn1_ctx; + + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + + t124Identifier = NULL; + + (void) dissect_per_sequence(tvb, 0, &asn1_ctx, NULL, -1, -1, t124Heur_sequence); + + if((t124Identifier != NULL) && + (strcmp(t124Identifier, "0.0.20.124.0.1") == 0)) { + + dissect_t124(tvb, pinfo, parent_tree); + + } + + 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", FT_STRING, BASE_NONE); + t124_sd_dissector_table = register_dissector_table("t124.sd", "T.124 H.221 Send Data Dissectors", FT_UINT32, BASE_NONE); + + new_register_dissector("t124", dissect_t124, proto_t124); +} + +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, proto_t124); + +} diff --git a/asn1/t124/packet-t124-template.h b/asn1/t124/packet-t124-template.h new file mode 100644 index 0000000000..19de4239ae --- /dev/null +++ b/asn1/t124/packet-t124-template.h @@ -0,0 +1,43 @@ +/* packet-t124.h + * Routines for t124 packet dissection + * Copyright 2010, Graeme Lunt + * + * $Id$ + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1998 Gerald Combs + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef PACKET_T124_H +#define PACKET_T124_H + +#include <epan/packet_info.h> +#include <epan/dissectors/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/asn1/t124/t124.cnf b/asn1/t124/t124.cnf new file mode 100644 index 0000000000..d0a992f3d0 --- /dev/null +++ b/asn1/t124/t124.cnf @@ -0,0 +1,162 @@ +# T.124/GCC-PROTOCOL.cnf +# Copyright 2011 Graeme Lunt +# $Id$ +#---------------------------------------------------------------------------------------- +#.EXPORTS +#---------------------------------------------------------------------------------------- +ConnectData +ConnectGCCPDU +#.END + +#.PDU +#---------------------------------------------------------------------------------------- + +#.PDU_NEW +#---------------------------------------------------------------------------------------- + + +#.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_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; + guint8 *ns = NULL; + +%(DEFAULT_BODY)s + + if(next_tvb) { + + ns = tvb_get_string(t124NSIdentifier, 0, tvb_length(t124NSIdentifier)); + if(ns != NULL) { + dissector_try_string(t124_ns_dissector_table, ns, next_tvb, actx->pinfo, top_tree); + g_free(ns); + } + } + +#.END + +#.FN_BODY SendDataRequest/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 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 = &t124Identifier + +#.FN_PARS H221NonStandardIdentifier + VAL_PTR = &t124NSIdentifier + +#.FN_BODY H221NonStandardIdentifier + + %(DEFAULT_BODY)s + +#.FN_PARS ChannelId VAL_PTR = &channelId + +#.FN_BODY 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 +GCCPDU +#.END +#.VIRTUAL_ASSGN +#---------------------------------------------------------------------------------------- + +#.END + +#---------------------------------------------------------------------------------------- +# vim:set ts=4 sts=2 sw=2: diff --git a/asn1/t125/packet-t125-template.c b/asn1/t125/packet-t125-template.c index 7c5c5b86ab..4940c12f4f 100644 --- a/asn1/t125/packet-t125-template.c +++ b/asn1/t125/packet-t125-template.c @@ -33,6 +33,9 @@ #include <epan/asn1.h> #include "packet-ber.h" +#include "packet-per.h" + +#include "packet-t124.h" #define PNAME "MULTIPOINT-COMMUNICATION-SERVICE T.125" #define PSNAME "T.125" @@ -41,12 +44,19 @@ /* Initialize the protocol and registered fields */ static int proto_t125 = -1; +static proto_tree *top_tree = NULL; #include "packet-t125-hf.c" /* Initialize the subtree pointers */ static int ett_t125 = -1; + +static int hf_t125_connectData = -1; +static int hf_t125_heur = -1; + #include "packet-t125-ett.c" +static heur_dissector_list_t t125_heur_subdissector_list; + #include "packet-t125-fn.c" static int @@ -58,6 +68,8 @@ dissect_t125(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *parent_tree) gboolean pc; gint32 tag; + top_tree = parent_tree; + col_set_str(pinfo->cinfo, COL_PROTOCOL, "T.125"); col_clear(pinfo->cinfo, COL_INFO); @@ -68,20 +80,58 @@ dissect_t125(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *parent_tree) if ( (class==BER_CLASS_APP) && (tag>=101) && (tag<=104) ){ dissect_ConnectMCSPDU_PDU(tvb, pinfo, tree); - } else { - col_set_str(pinfo->cinfo, COL_INFO, "T.125 payload"); - proto_tree_add_text(tree, tvb, 0, -1, "T.125 payload"); + } else { + t124_set_top_tree(top_tree); + dissect_DomainMCSPDU_PDU(tvb, pinfo, tree); } return tvb_length(tvb); } +static gboolean +dissect_t125_heur(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *parent_tree) +{ + gint8 class; + gboolean pc; + gint32 tag; + guint32 choice_index = 100; + asn1_ctx_t asn1_ctx; + + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + + /* could be BER */ + get_ber_identifier(tvb, 0, &class, &pc, &tag); + /* or PER */ + dissect_per_constrained_integer(tvb, 0, &asn1_ctx, + NULL, hf_t125_heur, 0, 42, + &choice_index, FALSE); + + /* is this strong enough ? */ + if ( ((class==BER_CLASS_APP) && ((tag>=101) && (tag<=104))) || + (choice_index <=42)) { + + dissect_t125(tvb, pinfo, parent_tree); + + return TRUE; + } + + return FALSE; +} + /*--- proto_register_t125 -------------------------------------------*/ void proto_register_t125(void) { /* List of fields */ static hf_register_info hf[] = { + { &hf_t125_connectData, + { "connectData", "t125.connectData", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t125_heur, + { "heuristic", "t125.heuristic", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, #include "packet-t125-hfarr.c" }; @@ -97,10 +147,15 @@ void proto_register_t125(void) { proto_register_field_array(proto_t125, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + register_heur_dissector_list("t125", &t125_heur_subdissector_list); + new_register_dissector("t125", dissect_t125, proto_t125); } /*--- proto_reg_handoff_t125 ---------------------------------------*/ void proto_reg_handoff_t125(void) { + + heur_dissector_add("cotp", dissect_t125_heur, proto_t125); + heur_dissector_add("cotp_is", dissect_t125_heur, proto_t125); } diff --git a/asn1/t125/t125.cnf b/asn1/t125/t125.cnf index 944f5b286d..a14a58a6a6 100644 --- a/asn1/t125/t125.cnf +++ b/asn1/t125/t125.cnf @@ -12,33 +12,46 @@ #.PDU_NEW #---------------------------------------------------------------------------------------- ConnectMCSPDU -#DomainMCSPDU #.END #.VIRTUAL_ASSGN #---------------------------------------------------------------------------------------- -#.FN_BODY ConnectMCSPDU VAL_PTR = &connectmcs_value - gint connectmcs_value; +#.FN_BODY DomainMCSPDU VAL_PTR = &domainmcs_value + gint domainmcs_value; %(DEFAULT_BODY)s - if( (connectmcs_value!=-1) && t125_ConnectMCSPDU_vals[connectmcs_value].strptr ){ - if (check_col(%(ACTX)s->pinfo->cinfo, COL_INFO)){ - col_add_fstr(%(ACTX)s->pinfo->cinfo, COL_INFO, "MCS: %%s ", t125_ConnectMCSPDU_vals[connectmcs_value].strptr); - } + switch(domainmcs_value) { + case 25: /* sendDataRequest */ + case 26: /* sendDataIndication */ + case 27: /* uniformSendDataRequest */ + case 28: /* uniformSendDataIndication */ + /* Do nothing */ + break; + default: + col_append_sep_fstr(%(ACTX)s->pinfo->cinfo, COL_INFO, " ", "MCS: %%s ", val_to_str(domainmcs_value, t125_DomainMCSPDU_vals, "Unknown")); + break; } #.END -#.FN_BODY DomainMCSPDU VAL_PTR = &domainmcs_value - gint domainmcs_value; +#.FN_BODY Connect-Initial/_untag/userData VAL_PTR = &next_tvb +#.FN_BODY Connect-Initial/_untag/userData + tvbuff_t *next_tvb = NULL; +%(DEFAULT_BODY)s + if(next_tvb) + dissector_try_heuristic(t125_heur_subdissector_list, next_tvb, + actx->pinfo, top_tree); +#.END +#.FN_BODY Connect-Response/_untag/userData VAL_PTR = &next_tvb +#.FN_BODY Connect-Response/_untag/userData + tvbuff_t *next_tvb = NULL; %(DEFAULT_BODY)s - if( (domainmcs_value!=-1) && t125_DomainMCSPDU_vals[domainmcs_value].strptr ){ - if (check_col(%(ACTX)s->pinfo->cinfo, COL_INFO)){ - col_add_fstr(%(ACTX)s->pinfo->cinfo, COL_INFO, "MCS: %%s ", t125_DomainMCSPDU_vals[domainmcs_value].strptr); - } - } + if(next_tvb) + dissector_try_heuristic(t125_heur_subdissector_list, next_tvb, + actx->pinfo, top_tree); #.END + #---------------------------------------------------------------------------------------- # vim:set ts=4 sts=2 sw=2: diff --git a/epan/CMakeLists.txt b/epan/CMakeLists.txt index d88512314c..52bde84f69 100644 --- a/epan/CMakeLists.txt +++ b/epan/CMakeLists.txt @@ -269,6 +269,7 @@ set(DIRTY_ASN1_DISSECTOR_SRC dissectors/packet-rrc.c dissectors/packet-rrlp.c dissectors/packet-snmp.c + dissectors/packet-t124.c dissectors/packet-t125.c dissectors/packet-tcap.c dissectors/packet-tetra.c @@ -889,6 +890,7 @@ set(DISSECTOR_SRC dissectors/packet-radiotap-iter.c dissectors/packet-raw.c dissectors/packet-rdm.c + dissectors/packet-rdp.c dissectors/packet-rdt.c dissectors/packet-redback.c dissectors/packet-redbackli.c diff --git a/epan/dissectors/Makefile.common b/epan/dissectors/Makefile.common index bec86ca595..95683443ad 100644 --- a/epan/dissectors/Makefile.common +++ b/epan/dissectors/Makefile.common @@ -186,6 +186,7 @@ DIRTY_ASN1_DISSECTOR_SRC = \ packet-rrc.c \ packet-rrlp.c \ packet-snmp.c \ + packet-t124.c \ packet-t125.c \ packet-tcap.c \ packet-tetra.c @@ -809,6 +810,7 @@ DISSECTOR_SRC = \ packet-radius_packetcable.c \ packet-raw.c \ packet-rdm.c \ + packet-rdp.c \ packet-rdt.c \ packet-redback.c \ packet-redbackli.c \ @@ -1269,6 +1271,7 @@ DISSECTOR_INCLUDES = \ packet-radius.h \ packet-ranap.h \ packet-raw.h \ + packet-rdp.h \ packet-rdt.h \ packet-rgmp.h \ packet-rlc.h \ @@ -1324,6 +1327,7 @@ DISSECTOR_INCLUDES = \ packet-stat.h \ packet-stat-notify.h \ packet-sv.h \ + packet-t124.h \ packet-t30.h \ packet-t38.h \ packet-tacacs.h \ diff --git a/epan/dissectors/packet-rdp.c b/epan/dissectors/packet-rdp.c new file mode 100644 index 0000000000..72766d611b --- /dev/null +++ b/epan/dissectors/packet-rdp.c @@ -0,0 +1,2848 @@ +/* Packet-rdp.c + * Routines for Remote Desktop Protocol (RDP) packet dissection + * Copyright 2010, Graeme Lunt + * + * $Id$ + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1998 Gerald Combs + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <stdio.h> +#include <glib.h> +#include <epan/packet.h> +#include <epan/prefs.h> +#include <epan/conversation.h> +#include <epan/asn1.h> +#include "packet-tpkt.h" +#include "packet-ssl.h" +#include "packet-rdp.h" +#include "packet-t124.h" + +#define PNAME "Remote Desktop Protocol" +#define PSNAME "RDP" +#define PFNAME "rdp" + +static guint global_rdp_tcp_port = 3389; +static dissector_handle_t tpkt_handle; + +void prefs_register_rdp(void); /* forward declaration for use in preferences registration */ + +/* Initialize the protocol and registered fields */ +static int proto_rdp = -1; + +/* Initialize the subtree pointers */ +static int ett_rdp = -1; +static int ett_rdp_SendData = -1; +static int ett_rdp_ClientData = -1; +static int ett_rdp_clientCoreData = -1; +static int ett_rdp_clientSecurityData = -1; +static int ett_rdp_clientNetworkData = -1; +static int ett_rdp_clientClusterData = -1; +static int ett_rdp_clientUnknownData = -1; +static int ett_rdp_ServerData = -1; +static int ett_rdp_serverCoreData = -1; +static int ett_rdp_serverSecurityData = -1; +static int ett_rdp_serverNetworkData = -1; +static int ett_rdp_serverUnknownData = -1; +static int ett_rdp_channelIdArray = -1; +static int ett_rdp_securityExchangePDU = -1; +static int ett_rdp_clientInfoPDU = -1; +static int ett_rdp_validClientLicenseData = -1; +static int ett_rdp_shareControlHeader = -1; +static int ett_rdp_pduType = -1; +static int ett_rdp_flags = -1; +static int ett_rdp_compressedType = -1; +static int ett_rdp_mapFlags = -1; +static int ett_rdp_options = -1; +static int ett_rdp_channelDefArray = -1; +static int ett_rdp_channelDef = -1; +static int ett_rdp_channelPDUHeader = -1; +static int ett_rdp_channelFlags = -1; +static int ett_rdp_capabilitySet = -1; + +static int ett_rdp_StandardDate = -1; +static int ett_rdp_DaylightDate = -1; +static int ett_rdp_clientTimeZone = -1; + +static int hf_rdp_ClientData = -1; +static int hf_rdp_SendData = -1; +static int hf_rdp_clientCoreData = -1; +static int hf_rdp_clientSecurityData = -1; +static int hf_rdp_clientNetworkData = -1; +static int hf_rdp_clientClusterData = -1; +static int hf_rdp_clientUnknownData = -1; +static int hf_rdp_ServerData = -1; +static int hf_rdp_serverCoreData = -1; +static int hf_rdp_serverSecurityData = -1; +static int hf_rdp_serverNetworkData = -1; +static int hf_rdp_serverUnknownData = -1; +static int hf_rdp_securityExchangePDU = -1; +static int hf_rdp_clientInfoPDU = -1; +static int hf_rdp_validClientLicenseData = -1; +static int hf_rdp_headerType = -1; +static int hf_rdp_headerLength = -1; +static int hf_rdp_versionMajor = -1; +static int hf_rdp_versionMinor = -1; +static int hf_rdp_desktopWidth = -1; +static int hf_rdp_desktopHeight = -1; +static int hf_rdp_colorDepth = -1; +static int hf_rdp_SASSequence = -1; +static int hf_rdp_keyboardLayout = -1; +static int hf_rdp_clientBuild = -1; +static int hf_rdp_clientName = -1; +static int hf_rdp_keyboardType = -1; +static int hf_rdp_keyboardSubType = -1; +static int hf_rdp_keyboardFunctionKey = -1; +static int hf_rdp_imeFileName = -1; +static int hf_rdp_postBeta2ColorDepth = -1; +static int hf_rdp_clientProductId = -1; +static int hf_rdp_serialNumber = -1; +static int hf_rdp_highColorDepth = -1; +static int hf_rdp_supportedColorDepths = -1; +static int hf_rdp_earlyCapabilityFlags = -1; +static int hf_rdp_clientDigProductId = -1; +static int hf_rdp_connectionType = -1; +static int hf_rdp_pad1octet = -1; +static int hf_rdp_serverSelectedProtocol = -1; +static int hf_rdp_encryptionMethods = -1; +static int hf_rdp_extEncryptionMethods = -1; +static int hf_rdp_encryptionMethod = -1; +static int hf_rdp_encryptionLevel = -1; +static int hf_rdp_serverRandomLen = -1; +static int hf_rdp_serverCertLen = -1; +static int hf_rdp_serverRandom = -1; +static int hf_rdp_serverCertificate = -1; +static int hf_rdp_clientRequestedProtocols = -1; +static int hf_rdp_MCSChannelId = -1; +static int hf_rdp_channelCount = -1; +static int hf_rdp_channelIdArray = -1; +static int hf_rdp_Pad = -1; +static int hf_rdp_length = -1; +static int hf_rdp_encryptedClientRandom = -1; +static int hf_rdp_dataSignature = -1; +static int hf_rdp_fipsLength = -1; +static int hf_rdp_fipsVersion = -1; +static int hf_rdp_padlen = -1; +static int hf_rdp_flags = -1; +static int hf_rdp_flagsPkt = -1; +static int hf_rdp_flagsEncrypt = -1; +static int hf_rdp_flagsResetSeqno = -1; +static int hf_rdp_flagsIgnoreSeqno = -1; +static int hf_rdp_flagsLicenseEncrypt = -1; +static int hf_rdp_flagsSecureChecksum = -1; +static int hf_rdp_flagsFlagsHiValid = -1; +static int hf_rdp_flagsHi = -1; +static int hf_rdp_codePage = -1; +static int hf_rdp_optionFlags = -1; +static int hf_rdp_cbDomain = -1; +static int hf_rdp_cbUserName = -1; +static int hf_rdp_cbPassword = -1; +static int hf_rdp_cbAlternateShell = -1; +static int hf_rdp_cbWorkingDir = -1; +static int hf_rdp_cbClientAddress = -1; +static int hf_rdp_cbClientDir = -1; +static int hf_rdp_cbAutoReconnectLen = -1; +static int hf_rdp_domain = -1; +static int hf_rdp_userName = -1; +static int hf_rdp_password = -1; +static int hf_rdp_alternateShell = -1; +static int hf_rdp_workingDir = -1; +static int hf_rdp_clientAddressFamily = -1; +static int hf_rdp_clientAddress = -1; +static int hf_rdp_clientDir = -1; +static int hf_rdp_clientTimeZone = -1; +static int hf_rdp_clientSessionId = -1; +static int hf_rdp_performanceFlags = -1; +static int hf_rdp_autoReconnectCookie = -1; +static int hf_rdp_reserved1 = -1; +static int hf_rdp_reserved2 = -1; +static int hf_rdp_bMsgType = -1; +static int hf_rdp_bVersion = -1; +static int hf_rdp_wMsgSize = -1; +static int hf_rdp_wBlobType = -1; +static int hf_rdp_wBlobLen = -1; +static int hf_rdp_blobData = -1; +static int hf_rdp_shareControlHeader = -1; +static int hf_rdp_totalLength = -1; +static int hf_rdp_pduType = -1; +static int hf_rdp_pduTypeType = -1; +static int hf_rdp_pduTypeVersionLow = -1; +static int hf_rdp_pduTypeVersionHigh = -1; +static int hf_rdp_pduSource = -1; + +static int hf_rdp_shareId = -1; +static int hf_rdp_pad1 = -1; +static int hf_rdp_streamId = -1; +static int hf_rdp_uncompressedLength = -1; +static int hf_rdp_pduType2 = -1; +static int hf_rdp_compressedType = -1; +static int hf_rdp_compressedTypeType = -1; +static int hf_rdp_compressedTypeCompressed = -1; +static int hf_rdp_compressedTypeAtFront = -1; +static int hf_rdp_compressedTypeFlushed = -1; +static int hf_rdp_compressedLength = -1; +static int hf_rdp_wErrorCode = -1; +static int hf_rdp_wStateTransition = -1; +static int hf_rdp_numberEntries = -1; +static int hf_rdp_totalNumberEntries = -1; +static int hf_rdp_mapFlags = -1; +static int hf_rdp_fontMapFirst = -1; +static int hf_rdp_fontMapLast = -1; + +/* Control */ +static int hf_rdp_action = -1; +static int hf_rdp_grantId = -1; +static int hf_rdp_controlId = -1; + +/* Synchronize */ +static int hf_rdp_messageType = -1; +static int hf_rdp_targetUser = -1; + +/* BitmapCache Persistent List */ +static int hf_rdp_numEntriesCache0 = -1; +static int hf_rdp_numEntriesCache1 = -1; +static int hf_rdp_numEntriesCache2 = -1; +static int hf_rdp_numEntriesCache3 = -1; +static int hf_rdp_numEntriesCache4 = -1; +static int hf_rdp_totalEntriesCache0 = -1; +static int hf_rdp_totalEntriesCache1 = -1; +static int hf_rdp_totalEntriesCache2 = -1; +static int hf_rdp_totalEntriesCache3 = -1; +static int hf_rdp_totalEntriesCache4 = -1; +static int hf_rdp_bBitMask = -1; +static int hf_rdp_Pad2 = -1; +static int hf_rdp_Pad3 = -1; + +/* BitmapCache Persistent List Entry */ +static int hf_rdp_Key1 = -1; +static int hf_rdp_Key2 = -1; + +/* FontList */ +#if 0 +static int hf_rdp_numberFonts = -1; +static int hf_rdp_totalNumFonts = -1; +static int hf_rdp_listFlags = -1; +#endif +static int hf_rdp_entrySize = -1; + +/* Confirm Active PDU */ +static int hf_rdp_originatorId = -1; +static int hf_rdp_lengthSourceDescriptor = -1; +static int hf_rdp_lengthCombinedCapabilities = -1; +static int hf_rdp_sourceDescriptor = -1; +static int hf_rdp_numberCapabilities = -1; +static int hf_rdp_pad2Octets = -1; +static int hf_rdp_capabilitySet = -1; +static int hf_rdp_capabilitySetType = -1; +static int hf_rdp_lengthCapability = -1; +static int hf_rdp_capabilityData = -1; +static int hf_rdp_sessionId = -1; + +static int hf_rdp_unknownData = -1; +static int hf_rdp_notYetImplemented = -1; +static int hf_rdp_encrypted = -1; +static int hf_rdp_compressed = -1; + +static int hf_rdp_channelDefArray = -1; +static int hf_rdp_channelDef = -1; +static int hf_rdp_name = -1; +static int hf_rdp_options = -1; +static int hf_rdp_optionsInitialized = -1; +static int hf_rdp_optionsEncryptRDP = -1; +static int hf_rdp_optionsEncryptSC = -1; +static int hf_rdp_optionsEncryptCS = -1; +static int hf_rdp_optionsPriHigh = -1; +static int hf_rdp_optionsPriMed = -1; +static int hf_rdp_optionsPriLow = -1; +static int hf_rdp_optionsCompressRDP = -1; +static int hf_rdp_optionsCompress = -1; +static int hf_rdp_optionsShowProtocol= -1; +static int hf_rdp_optionsRemoteControlPersistent; + +static int hf_rdp_channelPDUHeader = -1; +static int hf_rdp_channelFlags = -1; +static int hf_rdp_channelFlagFirst = -1; +static int hf_rdp_channelFlagLast = -1; +static int hf_rdp_channelFlagShowProtocol = -1; +static int hf_rdp_channelFlagSuspend = -1; +static int hf_rdp_channelFlagResume = -1; +static int hf_rdp_channelPacketCompressed = -1; +static int hf_rdp_channelPacketAtFront = -1; +static int hf_rdp_channelPacketFlushed = -1; +static int hf_rdp_channelPacketCompressionType = -1; +static int hf_rdp_virtualChannelData = -1; + +static int hf_rdp_wYear = -1; +static int hf_rdp_wMonth = -1; +static int hf_rdp_wDayOfWeek = -1; +static int hf_rdp_wDay = -1; +static int hf_rdp_wHour = -1; +static int hf_rdp_wMinute = -1; +static int hf_rdp_wSecond = -1; +static int hf_rdp_wMilliseconds = -1; + +static int hf_rdp_Bias = -1; +static int hf_rdp_StandardName = -1; +static int hf_rdp_StandardDate = -1; +static int hf_rdp_StandardBias = -1; +static int hf_rdp_DaylightName = -1; +static int hf_rdp_DaylightDate = -1; +static int hf_rdp_DaylightBias = -1; + +#define CS_CORE 0xC001 +#define CS_SECURITY 0xC002 +#define CS_NET 0xC003 +#define CS_CLUSTER 0xC004 + +#define SC_CORE 0x0C01 +#define SC_SECURITY 0x0C02 +#define SC_NET 0x0C03 + +#define SEC_EXCHANGE_PKT 0x0001 +#define SEC_ENCRYPT 0x0008 +#define SEC_RESET_SEQNO 0x0010 +#define SEC_IGNORE_SEQNO 0x0020 +#define SEC_INFO_PKT 0x0040 +#define SEC_LICENSE_PKT 0x0080 +#define SEC_LICENSE_ENCRYPT_CS 0x0200 +#define SEC_LICENSE_ENCRYPT_SC 0x0200 +#define SEC_REDIRECTION_PKT 0x0400 +#define SEC_SECURE_CHECKSUM 0x0800 +#define SEC_FLAGSHI_VALID 0x8000 + +#define SEC_PKT_MASK 0x04c1 + +#define ENCRYPTION_METHOD_NONE 0x00000000 +#define ENCRYPTION_METHOD_40BIT 0x00000001 +#define ENCRYPTION_METHOD_128BIT 0x00000002 +#define ENCRYPTION_METHOD_56BIT 0x00000008 +#define ENCRYPTION_METHOD_FIPS 0x00000010 + +#define ENCRYPTION_LEVEL_NONE 0x00000000 +#define ENCRYPTION_LEVEL_LOW 0x00000001 +#define ENCRYPTION_LEVEL_CLIENT_COMPATIBLE 0x00000002 +#define ENCRYPTION_LEVEL_HIGH 0x00000003 +#define ENCRYPTION_LEVEL_FIPS 0x00000004 + +/* sent by server */ +#define LICENSE_REQUEST 0x01 +#define PLATFORM_CHALLENGE 0x02 +#define NEW_LICENSE 0x03 +#define UPGRADE_LICENSE 0x04 +/* sent by client */ +#define LICENSE_INFO 0x12 +#define NEW_LICENSE_REQUEST 0x13 +#define PLATFORM_CHALLENGE_RESPONSE 0x15 +/* sent by either */ +#define ERROR_ALERT 0xff + +#define ERR_INVALID_SERVER_CERTIFICIATE 0x00000001 +#define ERR_NO_LICENSE 0x00000002 +#define ERR_INVALID_MAC 0x00000003 +#define ERR_INVALID_SCOPE 0x00000004 +#define ERR_NO_LICENSE_SERVER 0x00000006 +#define STATUS_VALID_CLIENT 0x00000007 +#define ERR_INVALID_CLIENT 0x00000008 +#define ERR_INVALID_PRODUCTID 0x0000000B +#define ERR_INVALID_MESSAGE_LEN 0x0000000C + +#define ST_TOTAL_ABORT 0x00000001 +#define ST_NO_TRANSITION 0x00000002 +#define ST_RESET_PHASE_TO_START 0x00000003 +#define ST_RESEND_LAST_MESSAGE 0x00000004 + +#define BB_DATA_BLOB 0x0001 +#define BB_RANDOM_BLOB 0x0002 +#define BB_CERTIFICATE_BLOB 0x0003 +#define BB_ERROR_BLOB 0x0004 +#define BB_ENCRYPTED_DATA_BLOB 0x0009 +#define BB_KEY_EXCHG_ALG_BLOB 0x000D +#define BB_SCOPE_BLOB 0x000E +#define BB_CLIENT_USER_NAME_BLOB 0x000F +#define BB_CLIENT_MACHINE_NAME_BLOB 0x0010 + +#define PDUTYPE_TYPE_MASK 0x000F +#define PDUTYPE_VERSIONLOW_MASK 0x00F0 +#define PDUTYPE_VERSIONHIGH_MASK 0xFF00 + +#define PDUTYPE_DEMANDACTIVEPDU 0x1 +#define PDUTYPE_CONFIRMACTIVEPDU 0x3 +#define PDUTYPE_DEACTIVATEALLPDU 0x6 +#define PDUTYPE_DATAPDU 0x7 +#define PDUTYPE_SERVER_REDIR_PKT 0xA + +#define TS_PROTOCOL_VERSION 0x1 + +#define PDUTYPE2_UPDATE 0x02 +#define PDUTYPE2_CONTROL 0x14 +#define PDUTYPE2_POINTER 0x1B +#define PDUTYPE2_INPUT 0x1C +#define PDUTYPE2_SYNCHRONIZE 0x1F +#define PDUTYPE2_REFRESH_RECT 0x21 +#define PDUTYPE2_PLAY_SOUND 0x22 +#define PDUTYPE2_SUPPRESS_OUTPUT 0x23 +#define PDUTYPE2_SHUTDOWN_REQUEST 0x24 +#define PDUTYPE2_SHUTDOWN_DENIED 0x25 +#define PDUTYPE2_SAVE_SESSION_INFO 0x26 +#define PDUTYPE2_FONTLIST 0x27 +#define PDUTYPE2_FONTMAP 0x28 +#define PDUTYPE2_SET_KEYBOARD_INDICATORS 0x29 +#define PDUTYPE2_BITMAPCACHE_PERSISTENT_LIST 0x2B +#define PDUTYPE2_BITMAPCACHE_ERROR_PDU 0x2C +#define PDUTYPE2_SET_KEYBOARD_IME_STATUS 0x2D +#define PDUTYPE2_OFFSCRCACHE_ERROR_PDU 0x2E +#define PDUTYPE2_SET_ERROR_INFO_PDU 0x2F +#define PDUTYPE2_DRAWNINEGRID_ERROR_PDU 0x30 +#define PDUTYPE2_DRAWGDIPLUS_ERROR_PDU 0x31 +#define PDUTYPE2_ARC_STATUS_PDU 0x32 +#define PDUTYPE2_STATUS_INFO_PDU 0x36 +#define PDUTYPE2_MONITOR_LAYOUT_PDU 0x37 + +#define PACKET_COMPRESSED 0x20 +#define PACKET_AT_FRONT 0x40 +#define PACKET_FLUSHED 0x80 + +#define PacketCompressionTypeMask 0x0f +#define PACKET_COMPR_TYPE_8K 0x0 +#define PACKET_COMPR_TYPE_64K 0x1 +#define PACKET_COMPR_TYPE_RDP6 0x2 +#define PACKET_COMPR_TYPE_RDP61 0x3 + + +#define CHANNEL_FLAG_FIRST 0x00000001 +#define CHANNEL_FLAG_LAST 0x00000002 +#define CHANNEL_FLAG_SHOW_PROTOCOL 0x00000010 +#define CHANNEL_FLAG_SUSPEND 0x00000020 +#define CHANNEL_FLAG_RESUME 0x00000040 +#define CHANNEL_PACKET_COMPRESSED 0x00200000 +#define CHANNEL_PACKET_AT_FRONT 0x00400000 +#define CHANNEL_PACKET_FLUSHED 0x00800000 + +#define ChannelCompressionTypeMask 0x000f0000 +#define CHANNEL_COMPR_TYPE_8K 0x00000000 +#define CHANNEL_COMPR_TYPE_64K 0x00010000 +#define CHANNEL_COMPR_TYPE_RDP6 0x00020000 +#define CHANNEL_COMPR_TYPE_RDP61 0x00030000 + +#define MapFlagsMask 0xffff +#define FONTMAP_FIRST 0x0001 +#define FONTMAP_LAST 0x0002 +/* There may well be others */ + +#define CTRLACTION_REQUEST_CONTROL 0x0001 +#define CTRLACTION_GRANTED_CONTROL 0x0002 +#define CTRLACTION_DETACH 0x0003 +#define CTRLACTION_COOPERATE 0x0004 + +#define CAPSTYPE_GENERAL 0x0001 +#define CAPSTYPE_BITMAP 0x0002 +#define CAPSTYPE_ORDER 0x0003 +#define CAPSTYPE_BITMAPCACHE 0x0004 +#define CAPSTYPE_CONTROL 0x0005 +#define CAPSTYPE_ACTIVATION 0x0007 +#define CAPSTYPE_POINTER 0x0008 +#define CAPSTYPE_SHARE 0x0009 +#define CAPSTYPE_COLORCACHE 0x000A +#define CAPSTYPE_SOUND 0x000C +#define CAPSTYPE_INPUT 0x000D +#define CAPSTYPE_FONT 0x000E +#define CAPSTYPE_BRUSH 0x000F +#define CAPSTYPE_GLYPHCACHE 0x0010 +#define CAPSTYPE_OFFSCREENCACHE 0x0011 +#define CAPSTYPE_BITMAPCACHE_HOSTSUPPORT 0x0012 +#define CAPSTYPE_BITMAPCACHE_REV2 0x0013 +#define CAPSTYPE_BITMAPCACHE_VIRTUALCHANNEL 0x0014 +#define CAPSTYPE_DRAWNINEGRIDCACHE 0x0015 +#define CAPSTYPE_DRAWGDIPLUS 0x0016 +#define CAPSTYPE_RAIL 0x0017 +#define CAPSTYPE_WINDOW 0x0018 +#define CAPSTYPE_COMPDESK 0x0019 +#define CAPSTYPE_MULTIFRAGMENTUPDATE 0x001A +#define CAPSTYPE_LARGE_POINTER 0x001B +#define CAPSTYPE_SURFACE_COMMANDS 0x001C +#define CAPSTYPE_BITMAP_CODECS 0x001D + + +#define CHANNEL_OPTION_INITIALIZED 0x80000000 +#define CHANNEL_OPTION_ENCRYPT_RDP 0x40000000 +#define CHANNEL_OPTION_ENCRYPT_SC 0x20000000 +#define CHANNEL_OPTION_ENCRYPT_CS 0x10000000 +#define CHANNEL_OPTION_PRI_HIGH 0x08000000 +#define CHANNEL_OPTION_PRI_MED 0x04000000 +#define CHANNEL_OPTION_PRI_LOW 0x02000000 +#define CHANNEL_OPTION_COMPRESS_RDP 0x00800000 +#define CHANNEL_OPTION_COMPRESS 0x00400000 +#define CHANNEL_OPTION_SHOW_PROTOCOL 0x00200000 +#define CHANNEL_OPTION_REMOTE_CONTROL_PERSISTENT 0x00100000 + +#define MAX_CHANNELS 31 + +typedef struct rdp_conv_info_t { + struct rdp_conv_info_t * next; + guint32 staticChannelId; + guint32 encryptionMethod; + guint32 encryptionLevel; + guint32 licenseAgreed; + guint8 maxChannels; + value_string channels[MAX_CHANNELS+1]; /* we may need to hold more information later */ +} rdp_conv_info_t; + +static rdp_conv_info_t *rdp_conv_info_items; + +#define RDP_FI_NONE 0x00 +#define RDP_FI_OPTIONAL 0x01 +#define RDP_FI_UNICODE 0x02 +#define RDP_FI_NOINCOFFSET 0x04 /* do not increase the offset */ +#define RDP_FI_SUBTREE 0x08 + +typedef struct rdp_field_info_t { + int field; + guint32 fixedLength; + guint32 *variableLength; + int offsetOrTree; + guint32 flags; + struct rdp_field_info_t *subfields; +} rdp_field_info_t; + +#define FI_FIXEDLEN(_hf_, _len_) { _hf_, _len_, NULL, 0, 0, NULL } +#define FI_VALUE(_hf_, _len_, _value_) { _hf_, _len_, &_value_, 0, 0, NULL } +#define FI_VARLEN(_hf, _length_) { _hf_, 0, &_length_, 0, 0, NULL } +#define FI_SUBTREE(_hf_, _len_, _ett_, _sf_) { _hf_, _len_, NULL, _ett_, RDP_FI_SUBTREE, _sf_ } +#define FI_TERMINATOR {-1, 0, NULL, 0, 0, NULL} + +static const value_string rdp_headerType_vals[] = { + { CS_CORE, "clientCoreData" }, + { CS_SECURITY, "clientSecurityData" }, + { CS_NET, "clientNetworkData" }, + { CS_CLUSTER, "clientClusterData" }, + { SC_CORE, "serverCoreData" }, + { SC_SECURITY, "serverSecurityData" }, + { SC_NET, "serverNetworkData" }, + { 0, NULL } +}; + +static const value_string rdp_colorDepth_vals[] = { + { 0xCA00, "4 bits-per-pixel (bpp)"}, + { 0xCA01, "8 bits-per-pixel (bpp)"}, + { 0xCA02, "15-bit 555 RGB mask"}, + { 0xCA03, "16-bit 565 RGB mask"}, + { 0xCA04, "24-bit RGB mask"}, + { 0, NULL } +}; + +static const value_string rdp_highColorDepth_vals[] = { + { 0x0004, "4 bits-per-pixel (bpp)"}, + { 0x0008, "8 bits-per-pixel (bpp)"}, + { 0x000F, "15-bit 555 RGB mask"}, + { 0x0010, "16-bit 565 RGB mask"}, + { 0x0018, "24-bit RGB mask"}, + { 0, NULL } +}; + + +static const value_string rdp_keyboardType_vals[] = { + { 1, "IBM PC/XT or compatible (83-key) keyboard" }, + { 2, "Olivetti \"ICO\" (102-key) keyboard" }, + { 3, "IBM PC/AT (84-key) and similar keyboards" }, + { 4, "IBM enhanced (101-key or 102-key) keyboard" }, + { 5, "Noki 1050 and similar keyboards" }, + { 6, "Nokia 9140 and similar keyboards" }, + { 7, "Japanese keyboard" }, + { 0, NULL } +}; + +static const value_string rdp_connectionType_vals[] = { + { 1, "Modem (56 Kbps)" }, + { 2, "Low-speed broadband (256 Kbps - 2Mbps)" }, + { 3, "Satellite (2 Mbps - 16Mbps with high latency)" }, + { 4, "High-speed broadband (2 Mbps - 10Mbps)" }, + { 5, "WAN (10 Mbps or higher with high latency)" }, + { 6, "LAN (10 Mbps or higher" }, + { 0, NULL}, +}; + +static const value_string rdp_requestedProtocols_vals[] = { + { 0, "Standard RDP Security" }, + { 1, "TLS 1.0" }, + { 2, "Credential Security Support Provider protocol (CredSSP)" }, + { 3, "Credential Security Support Provider protocol (CredSSP)" }, + { 0, NULL}, +}; + +static const value_string rdp_flagsPkt_vals[] = { + {0, "(None)" }, + {SEC_EXCHANGE_PKT, "Security Exchange PDU" }, + {SEC_INFO_PKT, "Client Info PDU" }, + {SEC_LICENSE_PKT, "Licensing PDU" }, + {SEC_REDIRECTION_PKT, "Standard Security Server Redirection PDU"}, + {0, NULL}, +}; + +static const value_string rdp_encryptionMethod_vals[] = { + { ENCRYPTION_METHOD_NONE, "None" }, + { ENCRYPTION_METHOD_40BIT, "40-bit RC4" }, + { ENCRYPTION_METHOD_128BIT, "128-bit RC4" }, + { ENCRYPTION_METHOD_56BIT, "56-bit RC4" }, + { ENCRYPTION_METHOD_FIPS, "FIPS140-1 3DES" }, + { 0, NULL}, +}; + +static const value_string rdp_encryptionLevel_vals[] = { + { ENCRYPTION_LEVEL_NONE, "None" }, + { ENCRYPTION_LEVEL_LOW, "Low" }, + { ENCRYPTION_LEVEL_CLIENT_COMPATIBLE, "Client Compatible" }, + { ENCRYPTION_LEVEL_HIGH, "High" }, + { ENCRYPTION_LEVEL_FIPS, "FIPS140-1" }, + { 0, NULL}, +}; + +static const value_string rdp_bMsgType_vals[] = { + { LICENSE_REQUEST, "License Request" }, + { PLATFORM_CHALLENGE, "Platform Challenge" }, + { NEW_LICENSE, "New License" }, + { UPGRADE_LICENSE, "Upgrade License" }, + { LICENSE_INFO, "License Info" }, + { NEW_LICENSE_REQUEST, "New License Request" }, + { PLATFORM_CHALLENGE_RESPONSE, "Platform Challenge Response" }, + { ERROR_ALERT, "Error Alert" }, + { 0, NULL}, +}; + +static const value_string rdp_wErrorCode_vals[] = { + { ERR_INVALID_SERVER_CERTIFICIATE, "Invalid Server Certificate" }, + { ERR_NO_LICENSE, "No License" }, + { ERR_INVALID_MAC, "Invalid MAC" }, + { ERR_INVALID_SCOPE, "Invalid Scope" }, + { ERR_NO_LICENSE_SERVER, "No License Server" }, + { STATUS_VALID_CLIENT, "Valid Client" }, + { ERR_INVALID_CLIENT, "Invalid Client" }, + { ERR_INVALID_PRODUCTID, "Invalid Product Id" }, + { ERR_INVALID_MESSAGE_LEN, "Invalid Message Length" }, + { 0, NULL}, +}; + +static const value_string rdp_wStateTransition_vals[] = { + { ST_TOTAL_ABORT, "Total Abort" }, + { ST_NO_TRANSITION, "No Transition" }, + { ST_RESET_PHASE_TO_START, "Reset Phase to Start" }, + { ST_RESEND_LAST_MESSAGE, "Resend Last Message" }, + { 0, NULL}, +}; + +static const value_string rdp_wBlobType_vals[] = { + { BB_DATA_BLOB, "Data" }, + { BB_RANDOM_BLOB, "Random" }, + { BB_CERTIFICATE_BLOB, "Certificate" }, + { BB_ERROR_BLOB, "Error" }, + { BB_ENCRYPTED_DATA_BLOB, "Encrypted Data" }, + { BB_KEY_EXCHG_ALG_BLOB, "Key Exchange Algorithm" }, + { BB_SCOPE_BLOB, "Scope" }, + { BB_CLIENT_USER_NAME_BLOB, "Client User Name" }, + { BB_CLIENT_MACHINE_NAME_BLOB, "Client Machine Name" }, + { 0, NULL}, +}; + +static const value_string rdp_pduTypeType_vals[] = { + { PDUTYPE_DEMANDACTIVEPDU, "Demand Active PDU" }, + { PDUTYPE_CONFIRMACTIVEPDU, "Confirm Active PDU" }, + { PDUTYPE_DEACTIVATEALLPDU, "Deactivate All PDU" }, + { PDUTYPE_DATAPDU, "Data PDU" }, + { PDUTYPE_SERVER_REDIR_PKT, "Server Redirection PDU" }, + { 0, NULL}, +}; + +static const value_string rdp_pduType2_vals[] = { + { PDUTYPE2_UPDATE, "Update"}, + { PDUTYPE2_CONTROL, "Control"}, + { PDUTYPE2_POINTER, "Pointer"}, + { PDUTYPE2_INPUT, "Input"}, + { PDUTYPE2_SYNCHRONIZE, "Synchronize"}, + { PDUTYPE2_REFRESH_RECT, "Refresh Rect"}, + { PDUTYPE2_PLAY_SOUND, "Play Sound"}, + { PDUTYPE2_SUPPRESS_OUTPUT, "Suppress Output"}, + { PDUTYPE2_SHUTDOWN_REQUEST, "Shutdown Request" }, + { PDUTYPE2_SHUTDOWN_DENIED, "Shutdown Denied" }, + { PDUTYPE2_SAVE_SESSION_INFO, "Save Session Info" }, + { PDUTYPE2_FONTLIST, "FontList" }, + { PDUTYPE2_FONTMAP, "FontMap" }, + { PDUTYPE2_SET_KEYBOARD_INDICATORS, "Set Keyboard Indicators" }, + { PDUTYPE2_BITMAPCACHE_PERSISTENT_LIST, "BitmapCache Persistent List" }, + { PDUTYPE2_BITMAPCACHE_ERROR_PDU, "BitmapCache Error" }, + { PDUTYPE2_SET_KEYBOARD_IME_STATUS, "Set Keyboard IME Status" }, + { PDUTYPE2_OFFSCRCACHE_ERROR_PDU, "OffScrCache Error" }, + { PDUTYPE2_SET_ERROR_INFO_PDU, "Set Error Info" }, + { PDUTYPE2_DRAWNINEGRID_ERROR_PDU, "DrawNineGrid Error" }, + { PDUTYPE2_DRAWGDIPLUS_ERROR_PDU, "DrawGDIPlus Error" }, + { PDUTYPE2_ARC_STATUS_PDU, "Arc Status" }, + { PDUTYPE2_STATUS_INFO_PDU, "Status Info" }, + { PDUTYPE2_MONITOR_LAYOUT_PDU, "Monitor Layout" }, + { 0, NULL}, +}; + +static const value_string rdp_compressionType_vals[] = { + { PACKET_COMPR_TYPE_8K, "RDP 4.0 bulk compression" }, + { PACKET_COMPR_TYPE_64K, "RDP 5.0 bulk compression" }, + { PACKET_COMPR_TYPE_RDP6, "RDP 6.0 bulk compression" }, + { PACKET_COMPR_TYPE_RDP61, "RDP 6.1 bulk compression" }, + { 0, NULL}, +}; + +static const value_string rdp_channelCompressionType_vals[] = { + { CHANNEL_COMPR_TYPE_8K, "RDP 4.0 bulk compression" }, + { CHANNEL_COMPR_TYPE_64K, "RDP 5.0 bulk compression" }, + { CHANNEL_COMPR_TYPE_RDP6, "RDP 6.0 bulk compression" }, + { CHANNEL_COMPR_TYPE_RDP61, "RDP 6.1 bulk compression" }, + { 0, NULL}, +}; + +static const value_string rdp_action_vals[] = { + { CTRLACTION_REQUEST_CONTROL, "Request control" }, + { CTRLACTION_GRANTED_CONTROL, "Granted control" }, + { CTRLACTION_DETACH, "Detach" }, + { CTRLACTION_COOPERATE, "Cooperate" }, + {0, NULL }, +}; + +static const value_string rdp_capabilityType_vals[] = { + { CAPSTYPE_GENERAL, "General" }, + { CAPSTYPE_BITMAP, "Bitmap" }, + { CAPSTYPE_ORDER, "Order" }, + { CAPSTYPE_BITMAPCACHE, "Bitmap Cache" }, + { CAPSTYPE_CONTROL, "Control" }, + { CAPSTYPE_ACTIVATION, "Activation" }, + { CAPSTYPE_POINTER, "Pointer" }, + { CAPSTYPE_SHARE, "Share" }, + { CAPSTYPE_COLORCACHE, "Color Cache" }, + { CAPSTYPE_SOUND, "Sound" }, + { CAPSTYPE_INPUT, "Input" }, + { CAPSTYPE_FONT, "Font" }, + { CAPSTYPE_BRUSH, "Brush" }, + { CAPSTYPE_GLYPHCACHE, "Glyph Cache" }, + { CAPSTYPE_OFFSCREENCACHE, "Off-screen Cache" }, + { CAPSTYPE_BITMAPCACHE_HOSTSUPPORT, "Bitmap Cache Host Support" }, + { CAPSTYPE_BITMAPCACHE_REV2, "Bitmap Cache Rev 2" }, + { CAPSTYPE_BITMAPCACHE_VIRTUALCHANNEL, "Virtual Channel"}, + { CAPSTYPE_DRAWNINEGRIDCACHE, "Draw Nine Grid Cache" }, + { CAPSTYPE_DRAWGDIPLUS, "Draw GDI Plus" }, + { CAPSTYPE_RAIL, "Rail" }, + { CAPSTYPE_WINDOW, "Window" }, + { CAPSTYPE_COMPDESK, "Comp Desk" }, + { CAPSTYPE_MULTIFRAGMENTUPDATE, "Multi-Fragment Update" }, + { CAPSTYPE_LARGE_POINTER, "Large Pointer" }, + { CAPSTYPE_SURFACE_COMMANDS, "Surface Commands" }, + { CAPSTYPE_BITMAP_CODECS, "Bitmap Codecs" }, + {0, NULL }, +}; + +static const value_string rdp_wDayOfWeek_vals[] = { + { 0, "Sunday" }, + { 1, "Monday" }, + { 2, "Tuesday" }, + { 3, "Wednesday" }, + { 4, "Thursday" }, + { 5, "Friday" }, + { 6, "Saturday" }, + {0, NULL }, +}; + +static const value_string rdp_wDay_vals[] = { + { 1, "First occurrence" }, + { 2, "Second occurrence" }, + { 3, "Third occurrence" }, + { 4, "Fourth occurrence" }, + { 5, "Last occurrence" }, + {0, NULL }, +}; + +static const value_string rdp_wMonth_vals[] = { + { 1, "January" }, + { 2, "February" }, + { 3, "March" }, + { 4, "April" }, + { 5, "May" }, + { 6, "June" }, + { 7, "July" }, + { 8, "August" }, + { 9, "September" }, + { 10, "October" }, + { 11, "November" }, + { 12, "December" }, + {0, NULL }, +}; + + +static int dissect_rdp_fields(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, rdp_field_info_t *fields) +{ + rdp_field_info_t *c; + int base_offset = offset; + guint16 length = 0; + guint16 len = 0; + proto_item *pi = NULL; + proto_tree *next_tree = NULL; + char *string; + + length = tvb_length_remaining(tvb, offset); + + for(c = fields; (c->field != -1) && ((offset - base_offset) < length); c++) { + + if((c->fixedLength == 0) && (c->variableLength)) { + len = *(c->variableLength); + } else { + + len = c->fixedLength; + + if((c->variableLength) && ( c->fixedLength <= 4)) { + + if(c->fixedLength == 1) + *(c->variableLength) = (guint16)tvb_get_guint8(tvb, offset); + else if (c->fixedLength == 2) + *(c->variableLength) = tvb_get_letohs(tvb, offset); + else if (c->fixedLength == 4) + *(c->variableLength) = tvb_get_letohl(tvb, offset); + + *(c->variableLength) += c->offsetOrTree; + } + } + + if(len) { + if(c->field != -1) + pi = proto_tree_add_item(tree, c->field, tvb, offset, len, TRUE); + else + printf("Error!!!!!\n"); + + if(c->flags & RDP_FI_UNICODE) { + string = tvb_get_ephemeral_faked_unicode(tvb, offset, len/2, TRUE); \ + proto_item_append_text(pi, " (%s)", string); \ + } + + if(c->flags & RDP_FI_SUBTREE) { + if(c->offsetOrTree != -1) + next_tree = proto_item_add_subtree(pi, c->offsetOrTree); + else + printf("Tree Error!!\n"); + + if(c->subfields) + dissect_rdp_fields(tvb, offset, pinfo, next_tree, c->subfields); + } + + if(!(c->flags & RDP_FI_NOINCOFFSET)) + offset += len; + } + } + + return offset; +} + +static int dissect_rdp_nyi(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, const char *info) +{ + rdp_field_info_t nyi_fields[] = { + {hf_rdp_notYetImplemented, 2, NULL, 0, 0, NULL }, + FI_TERMINATOR + }; + + nyi_fields[0].fixedLength = tvb_length_remaining(tvb, offset); + offset = dissect_rdp_fields(tvb, offset,pinfo, tree, nyi_fields); + + if((tree != NULL) && (info != NULL)) + proto_item_append_text(tree->last_child, " (%s)", info); + + return offset; +} + +static int dissect_rdp_encrypted(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, const char *info) +{ + rdp_field_info_t enc_fields[] = { + {hf_rdp_encrypted, 2, NULL, 0, 0, NULL }, + FI_TERMINATOR + }; + + enc_fields[0].fixedLength = tvb_length_remaining(tvb, offset); + offset = dissect_rdp_fields(tvb, offset,pinfo, tree, enc_fields); + + if((tree != NULL) && (info != NULL)) + proto_item_append_text(tree->last_child, " (%s)", info); + + col_append_sep_str(pinfo->cinfo, COL_INFO, ", ", "[Encrypted]"); + + return offset; +} + + +static int dissect_rdp_clientNetworkData(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint16 length, rdp_conv_info_t *rdp_info) +{ + proto_tree *next_tree = NULL; + proto_item *pi = NULL; + guint32 channelCount = 0; + guint16 i = 0; + + rdp_field_info_t net_fields[] = { + {hf_rdp_headerType, 2, NULL, 0, 0, NULL }, + {hf_rdp_headerLength, 2, NULL, 0, 0, NULL }, + FI_VALUE(hf_rdp_channelCount, 4, channelCount), + FI_TERMINATOR + }; + rdp_field_info_t option_fields[] = { + {hf_rdp_optionsInitialized, 4, NULL, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_optionsEncryptRDP, 4, NULL, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_optionsEncryptSC, 4, NULL, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_optionsEncryptCS, 4, NULL, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_optionsPriHigh, 4, NULL, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_optionsPriMed, 4, NULL, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_optionsPriLow, 4, NULL, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_optionsCompressRDP, 4, NULL, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_optionsCompress, 4, NULL, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_optionsShowProtocol, 4, NULL, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_optionsRemoteControlPersistent, 4, NULL, 0, 0, NULL }, + FI_TERMINATOR, + }; + rdp_field_info_t channel_fields[] = { + FI_FIXEDLEN(hf_rdp_name, 8), + FI_SUBTREE(hf_rdp_options, 4, ett_rdp_options, option_fields), + FI_TERMINATOR + }; + rdp_field_info_t def_fields[] = { + FI_SUBTREE(hf_rdp_channelDef, 12, ett_rdp_channelDef, channel_fields), + FI_TERMINATOR + }; + + pi = proto_tree_add_item(tree, hf_rdp_clientNetworkData, tvb, offset, length, FALSE); + + next_tree = proto_item_add_subtree(pi, ett_rdp_clientNetworkData); + + offset = dissect_rdp_fields(tvb, offset, pinfo, next_tree, net_fields); + + if(channelCount > 0) { + pi = proto_tree_add_item(next_tree, hf_rdp_channelDefArray, tvb, offset, channelCount * 12, FALSE); + next_tree = proto_item_add_subtree(pi, ett_rdp_channelDefArray); + + if(rdp_info) + rdp_info->maxChannels = channelCount; + + for(i = 0; i < channelCount; i++) { + if(rdp_info) { + rdp_info->channels[i].strptr = tvb_get_string(tvb, offset, 8); + rdp_info->channels[i].value = -1; /* unset */ + } + offset = dissect_rdp_fields(tvb, offset, pinfo, next_tree, def_fields); + } + + rdp_info->channels[i].strptr = NULL; + rdp_info->channels[i].value = -1; + + } + + return offset; +} + +static int +dissect_rdp_basicSecurityHeader(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint32 *flags_ptr) { + + guint32 flags = 0; + + rdp_field_info_t secFlags_fields[] = { + {hf_rdp_flagsPkt, 2, &flags, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_flagsEncrypt, 2, NULL, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_flagsResetSeqno, 2, NULL, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_flagsIgnoreSeqno, 2, NULL, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_flagsLicenseEncrypt,2, NULL, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_flagsSecureChecksum,2, NULL, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_flagsFlagsHiValid, 2, NULL, 0, RDP_FI_NOINCOFFSET, NULL }, + FI_TERMINATOR + }; + + rdp_field_info_t flags_fields[] = { + FI_SUBTREE(hf_rdp_flags, 2, ett_rdp_flags, secFlags_fields), + FI_FIXEDLEN(hf_rdp_flagsHi, 2), + FI_TERMINATOR + }; + + offset = dissect_rdp_fields(tvb, offset, pinfo, tree, flags_fields); + + if(flags_ptr) + *flags_ptr = flags; + + return offset; +} + + +static int +dissect_rdp_securityHeader(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, rdp_conv_info_t *rdp_info, gboolean alwaysBasic, guint32 *flags_ptr) { + + rdp_field_info_t fips_fields[] = { + {hf_rdp_fipsLength, 2, NULL, 0, 0, NULL }, + {hf_rdp_fipsVersion, 1, NULL, 0, 0, NULL }, + {hf_rdp_padlen, 1, NULL, 0, 0, NULL }, + {hf_rdp_dataSignature, 8, NULL, 0, 0, NULL }, + FI_TERMINATOR + }; + rdp_field_info_t enc_fields[] = { + {hf_rdp_dataSignature, 8, NULL, 0, 0, NULL }, + FI_TERMINATOR + }; + rdp_field_info_t *fields = NULL; + + if(rdp_info) { + + if(alwaysBasic || (rdp_info->encryptionLevel != ENCRYPTION_LEVEL_NONE)) + offset = dissect_rdp_basicSecurityHeader(tvb, offset, pinfo, tree, flags_ptr); + + if(rdp_info->encryptionMethod & + (ENCRYPTION_METHOD_40BIT | + ENCRYPTION_METHOD_128BIT | + ENCRYPTION_METHOD_56BIT)) { + fields = enc_fields; + } else if(rdp_info->encryptionMethod == ENCRYPTION_METHOD_FIPS) { + fields = fips_fields; + } + + if(fields) + offset = dissect_rdp_fields(tvb, offset, pinfo, tree, fields); + } + return offset; +} +static int +dissect_rdp_channelPDU(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) { + + guint32 length = 0; + + rdp_field_info_t flag_fields[] = { + {hf_rdp_channelFlagFirst, 4, NULL, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_channelFlagLast, 4, NULL, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_channelFlagShowProtocol, 4, NULL, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_channelFlagSuspend, 4, NULL, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_channelFlagResume, 4, NULL, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_channelPacketCompressed, 4, NULL, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_channelPacketAtFront, 4, NULL, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_channelPacketFlushed, 4, NULL, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_channelPacketCompressionType, 4, NULL, 0, 0, NULL }, + FI_TERMINATOR + }; + + rdp_field_info_t channel_fields[] = { + FI_VALUE(hf_rdp_length, 4, length), + FI_SUBTREE(hf_rdp_channelFlags, 4, ett_rdp_channelFlags, flag_fields), + FI_TERMINATOR + }; + + rdp_field_info_t channelPDU_fields[] = { + FI_SUBTREE(hf_rdp_channelPDUHeader, 8, ett_rdp_channelPDUHeader, channel_fields), + FI_FIXEDLEN(hf_rdp_virtualChannelData, 0), + FI_TERMINATOR + }; + + /* length is the uncompressed length, and the PDU may be compressed */ + channelPDU_fields[1].fixedLength = tvb_length_remaining(tvb, offset) - 8; + + offset = dissect_rdp_fields(tvb, offset, pinfo, tree, channelPDU_fields); + + return offset; +} + +static int +dissect_rdp_shareDataHeader(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) { + guint32 pduType2; + guint32 compressedType; + guint32 action = 0; + + rdp_field_info_t compressed_fields[] = { + {hf_rdp_compressedTypeType, 1, &compressedType, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_compressedTypeCompressed, 1, NULL, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_compressedTypeAtFront, 1, NULL, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_compressedTypeFlushed, 1, NULL, 0, 0, NULL }, + FI_TERMINATOR + }; + rdp_field_info_t share_fields[] = { + {hf_rdp_shareId, 4, NULL, 0, 0, NULL }, + {hf_rdp_pad1, 1, NULL, 0, 0, NULL }, + {hf_rdp_streamId, 1, NULL, 0, 0, NULL }, + {hf_rdp_uncompressedLength, 2, NULL, 0, 0, NULL }, + {hf_rdp_pduType2, 1, &pduType2, 0, 0, NULL }, + FI_SUBTREE(hf_rdp_compressedType, 1, ett_rdp_compressedType, compressed_fields), + {hf_rdp_compressedLength, 2, NULL, 0, 0, NULL }, + FI_TERMINATOR + }; + rdp_field_info_t control_fields[] = { + {hf_rdp_action, 2, &action, 0, 0, NULL }, + {hf_rdp_grantId, 2, NULL, 0, 0, NULL }, + {hf_rdp_controlId, 4, NULL, 0, 0, NULL }, + FI_TERMINATOR + }; + rdp_field_info_t sync_fields[] = { + {hf_rdp_messageType, 2, NULL, 0, 0, NULL }, + {hf_rdp_targetUser, 2, NULL, 0, 0, NULL }, + FI_TERMINATOR + }; + rdp_field_info_t mapflags_fields[] = { + {hf_rdp_fontMapFirst, 2, NULL, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_fontMapLast, 2, NULL, 0, RDP_FI_NOINCOFFSET, NULL }, + FI_TERMINATOR + }; + rdp_field_info_t fontmap_fields[] = { + {hf_rdp_numberEntries, 2, NULL, 0, 0, NULL }, + {hf_rdp_totalNumberEntries, 2, NULL, 0, 0, NULL }, + FI_SUBTREE(hf_rdp_mapFlags, 2, ett_rdp_mapFlags, mapflags_fields), + {hf_rdp_entrySize, 2, NULL, 0, 0, NULL }, + FI_TERMINATOR + }; + rdp_field_info_t persistent_fields[] = { + {hf_rdp_numEntriesCache0, 2, NULL, 0, 0, NULL }, + {hf_rdp_numEntriesCache1, 2, NULL, 0, 0, NULL }, + {hf_rdp_numEntriesCache2, 2, NULL, 0, 0, NULL }, + {hf_rdp_numEntriesCache3, 2, NULL, 0, 0, NULL }, + {hf_rdp_numEntriesCache4, 2, NULL, 0, 0, NULL }, + {hf_rdp_totalEntriesCache0, 2, NULL, 0, 0, NULL }, + {hf_rdp_totalEntriesCache1, 2, NULL, 0, 0, NULL }, + {hf_rdp_totalEntriesCache2, 2, NULL, 0, 0, NULL }, + {hf_rdp_totalEntriesCache3, 2, NULL, 0, 0, NULL }, + {hf_rdp_totalEntriesCache4, 2, NULL, 0, 0, NULL }, + {hf_rdp_bBitMask, 1, NULL, 0, 0, NULL }, + {hf_rdp_Pad2, 1, NULL, 0, 0, NULL }, + {hf_rdp_Pad3, 2, NULL, 0, 0, NULL }, + FI_TERMINATOR + }; + + rdp_field_info_t *fields = NULL; + + offset = dissect_rdp_fields(tvb, offset, pinfo, tree, share_fields); + + if(pduType2 != PDUTYPE2_CONTROL) + col_append_sep_str(pinfo->cinfo, COL_INFO, ", ", val_to_str(pduType2, rdp_pduType2_vals, "Unknown")); + + fields = NULL; + switch(pduType2) { + case PDUTYPE2_UPDATE: + break; + case PDUTYPE2_CONTROL: + fields = control_fields; + break; + case PDUTYPE2_POINTER: + break; + case PDUTYPE2_INPUT: + break; + case PDUTYPE2_SYNCHRONIZE: + fields = sync_fields; + break; + case PDUTYPE2_REFRESH_RECT: + break; + case PDUTYPE2_PLAY_SOUND: + break; + case PDUTYPE2_SUPPRESS_OUTPUT: + break; + case PDUTYPE2_SHUTDOWN_REQUEST: + break; + case PDUTYPE2_SHUTDOWN_DENIED: + break; + case PDUTYPE2_SAVE_SESSION_INFO: + break; + case PDUTYPE2_FONTLIST: + break; + case PDUTYPE2_FONTMAP: + fields = fontmap_fields; + break; + case PDUTYPE2_SET_KEYBOARD_INDICATORS: + break; + case PDUTYPE2_BITMAPCACHE_PERSISTENT_LIST: + fields = persistent_fields; + break; + case PDUTYPE2_BITMAPCACHE_ERROR_PDU: + break; + case PDUTYPE2_SET_KEYBOARD_IME_STATUS: + break; + case PDUTYPE2_OFFSCRCACHE_ERROR_PDU: + break; + case PDUTYPE2_SET_ERROR_INFO_PDU: + break; + case PDUTYPE2_DRAWNINEGRID_ERROR_PDU: + break; + case PDUTYPE2_DRAWGDIPLUS_ERROR_PDU: + break; + case PDUTYPE2_ARC_STATUS_PDU: + break; + case PDUTYPE2_STATUS_INFO_PDU: + break; + case PDUTYPE2_MONITOR_LAYOUT_PDU: + break; + default: + break; + } + + if(fields) { + offset = dissect_rdp_fields(tvb, offset, pinfo, tree, fields); + } + + if(pduType2 == PDUTYPE2_CONTROL) + col_append_sep_str(pinfo->cinfo, COL_INFO, ", ", val_to_str(action, rdp_action_vals, "Unknown")); + + return offset; +} + +static int +dissect_rdp_capabilitySets(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint32 numberCapabilities) { + guint16 i = 0; + guint16 length = 0; + guint32 lengthCapability; + int base_offset = offset; + + rdp_field_info_t cs_fields[] = { + {hf_rdp_capabilitySetType, 2, NULL, 0, 0, NULL }, + {hf_rdp_lengthCapability, 2, &lengthCapability, -4, 0, NULL }, + {hf_rdp_capabilityData, 0, &lengthCapability, 0, 0, NULL }, + FI_TERMINATOR + }; + + rdp_field_info_t set_fields[] = { + FI_SUBTREE(hf_rdp_capabilitySet, 0 , ett_rdp_capabilitySet, cs_fields), + FI_TERMINATOR + }; + + length = tvb_length_remaining(tvb, offset); + + for(i = 0; (i < numberCapabilities) && (offset - base_offset < length); i++) { + offset = dissect_rdp_fields(tvb, offset, pinfo, tree, set_fields); + } + + return offset; +} + +static int +dissect_rdp_demandActivePDU(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) { + + guint16 length = 0; + guint32 lengthSourceDescriptor; + guint32 numberCapabilities; + + rdp_field_info_t fields[] = { + {hf_rdp_shareId, 4, NULL, 0, 0, NULL }, + {hf_rdp_lengthSourceDescriptor, 2, &lengthSourceDescriptor, 0, 0, NULL }, + {hf_rdp_lengthCombinedCapabilities, 2, NULL, 0, 0, NULL }, + {hf_rdp_sourceDescriptor, 0, &lengthSourceDescriptor, 0, 0, NULL }, + {hf_rdp_numberCapabilities, 2, &numberCapabilities, 0, 0, NULL }, + {hf_rdp_pad2Octets, 2, NULL, 0, 0, NULL }, + FI_TERMINATOR + }; + rdp_field_info_t final_fields[] = { + {hf_rdp_sessionId, 4, NULL, 0, 0, NULL }, + FI_TERMINATOR + }; + + length = tvb_length_remaining(tvb, offset); + + offset = dissect_rdp_fields(tvb, offset, pinfo, tree, fields); + + offset = dissect_rdp_capabilitySets(tvb, offset, pinfo, tree, numberCapabilities); + + offset = dissect_rdp_fields(tvb, offset, pinfo, tree, final_fields); + + return offset; +} + +static int +dissect_rdp_confirmActivePDU(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_) { + + guint16 length = 0; + guint32 lengthSourceDescriptor; + guint32 numberCapabilities; + + rdp_field_info_t fields[] = { + {hf_rdp_shareId, 4, NULL, 0, 0, NULL }, + {hf_rdp_originatorId, 2, NULL, 0, 0, NULL }, + {hf_rdp_lengthSourceDescriptor, 2, &lengthSourceDescriptor, 0, 0, NULL }, + {hf_rdp_lengthCombinedCapabilities, 2, NULL, 0, 0, NULL }, + {hf_rdp_sourceDescriptor, 0, &lengthSourceDescriptor, 0, 0, NULL }, + {hf_rdp_numberCapabilities, 2, &numberCapabilities, 0, 0, NULL }, + {hf_rdp_pad2Octets, 2, NULL, 0, 0, NULL }, + FI_TERMINATOR + }; + + length = tvb_length_remaining(tvb, offset); + + offset = dissect_rdp_fields(tvb, offset, pinfo, tree, fields); + + offset = dissect_rdp_capabilitySets(tvb, offset, pinfo, tree, numberCapabilities); + + return offset; +} + + +static proto_tree * +dissect_rdp(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *parent_tree) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + + col_set_str(pinfo->cinfo, COL_PROTOCOL, "RDP"); + col_clear(pinfo->cinfo, COL_INFO); + + item = proto_tree_add_item(parent_tree, proto_rdp, tvb, 0, tvb_length(tvb), FALSE); + tree = proto_item_add_subtree(item, ett_rdp); + + return tree; +} + +void +dissect_rdp_SendData(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) { + proto_tree *next_tree = NULL; + proto_item *pi = NULL; + int offset = 0; + guint32 flags = 0; + guint16 length = 0; + guint32 cbDomain, cbUserName, cbPassword, cbAlternateShell, cbWorkingDir, + cbClientAddress, cbClientDir, cbAutoReconnectLen, wBlobLen, pduType; + guint32 bMsgType; + guint32 encryptedLen = 0; + int base_offset = 0; + conversation_t *conversation; + rdp_conv_info_t *rdp_info = NULL; + + rdp_field_info_t secFlags_fields[] = { + {hf_rdp_flagsPkt, 2, &flags, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_flagsEncrypt, 2, NULL, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_flagsResetSeqno, 2, NULL, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_flagsIgnoreSeqno, 2, NULL, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_flagsLicenseEncrypt,2, NULL, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_flagsSecureChecksum,2, NULL, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_flagsFlagsHiValid, 2, NULL, 0, RDP_FI_NOINCOFFSET, NULL }, + FI_TERMINATOR + }; + + rdp_field_info_t se_fields[] = { + FI_SUBTREE(hf_rdp_flags, 2, ett_rdp_flags, secFlags_fields), + FI_FIXEDLEN(hf_rdp_flagsHi, 2), + {hf_rdp_length, 4, &encryptedLen, 0, 0, NULL }, + {hf_rdp_encryptedClientRandom, 0, &encryptedLen, 0, 0, NULL }, + FI_TERMINATOR + }; + rdp_field_info_t systime_fields [] = { + FI_FIXEDLEN(hf_rdp_wYear, 2), + FI_FIXEDLEN(hf_rdp_wMonth, 2), + FI_FIXEDLEN(hf_rdp_wDayOfWeek, 2), + FI_FIXEDLEN(hf_rdp_wDay, 2), + FI_FIXEDLEN(hf_rdp_wHour, 2), + FI_FIXEDLEN(hf_rdp_wMinute, 2), + FI_FIXEDLEN(hf_rdp_wSecond, 2), + FI_FIXEDLEN(hf_rdp_wMilliseconds, 2), + FI_TERMINATOR, + }; + rdp_field_info_t tz_info_fields [] = { + FI_FIXEDLEN(hf_rdp_Bias, 4), + {hf_rdp_StandardName, 64, NULL, 0, RDP_FI_UNICODE, NULL }, + FI_SUBTREE(hf_rdp_StandardDate, 16, ett_rdp_StandardDate, systime_fields), + FI_FIXEDLEN(hf_rdp_StandardBias, 4), + {hf_rdp_DaylightName, 64, NULL, 0, RDP_FI_UNICODE, NULL }, + FI_SUBTREE(hf_rdp_DaylightDate, 16, ett_rdp_DaylightDate, systime_fields), + FI_FIXEDLEN(hf_rdp_DaylightBias, 4), + FI_TERMINATOR, + }; + + rdp_field_info_t ue_fields[] = { + {hf_rdp_codePage, 4, NULL, 0, 0, NULL }, + {hf_rdp_optionFlags, 4, NULL, 0, 0, NULL }, + {hf_rdp_cbDomain, 2, &cbDomain, 2, 0, NULL }, + {hf_rdp_cbUserName, 2, &cbUserName, 2, 0, NULL }, + {hf_rdp_cbPassword, 2, &cbPassword, 2, 0, NULL }, + {hf_rdp_cbAlternateShell, 2, &cbAlternateShell, 2, 0, NULL }, + {hf_rdp_cbWorkingDir, 2, &cbWorkingDir, 2, 0, NULL }, + {hf_rdp_domain, 0, &cbDomain, 0, RDP_FI_UNICODE, NULL }, + {hf_rdp_userName, 0, &cbUserName, 0, RDP_FI_UNICODE, NULL }, + {hf_rdp_password, 0, &cbPassword, 0, RDP_FI_UNICODE, NULL }, + {hf_rdp_alternateShell, 0, &cbAlternateShell, 0, RDP_FI_UNICODE, NULL }, + {hf_rdp_workingDir, 0, &cbWorkingDir, 0, RDP_FI_UNICODE, NULL }, + {hf_rdp_clientAddressFamily,2, NULL, 0, 0, NULL }, + {hf_rdp_cbClientAddress, 2, &cbClientAddress, 0, 0, NULL }, + {hf_rdp_clientAddress, 0, &cbClientAddress, 0, RDP_FI_UNICODE, NULL }, + {hf_rdp_cbClientDir, 2, &cbClientDir, 0, 0, NULL }, + {hf_rdp_clientDir, 0, &cbClientDir, 0, RDP_FI_UNICODE, NULL }, + FI_SUBTREE(hf_rdp_clientTimeZone, 172, ett_rdp_clientTimeZone, tz_info_fields), + {hf_rdp_clientSessionId, 4, NULL, 0, 0, NULL }, + {hf_rdp_performanceFlags, 4, NULL, 0, 0, NULL }, + {hf_rdp_cbAutoReconnectLen, 2, &cbAutoReconnectLen, 0, 0, NULL }, + {hf_rdp_autoReconnectCookie,0, &cbAutoReconnectLen, 0, 0, NULL }, + {hf_rdp_reserved1, 2, NULL, 0, 0, NULL }, + {hf_rdp_reserved2, 2, NULL, 0, 0, NULL }, + FI_TERMINATOR + }; + rdp_field_info_t msg_fields[] = { + {hf_rdp_bMsgType, 1, &bMsgType, 0, 0, NULL }, + {hf_rdp_bVersion, 1, NULL, 0, 0, NULL }, + {hf_rdp_wMsgSize, 2, NULL, 0, 0, NULL }, + FI_TERMINATOR + }; + rdp_field_info_t error_fields[] = { + {hf_rdp_wErrorCode, 4, NULL, 0, 0, NULL }, + {hf_rdp_wStateTransition, 4, NULL, 0, 0, NULL }, + {hf_rdp_wBlobType, 2, NULL, 0, 0, NULL }, + {hf_rdp_wBlobLen, 2, &wBlobLen, 0, 0, NULL }, + {hf_rdp_blobData, 0, &wBlobLen, 0, 0, NULL }, + FI_TERMINATOR + }; + + rdp_field_info_t pdu_fields[] = { + {hf_rdp_pduTypeType, 2, &pduType, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_pduTypeVersionLow, 2, NULL, 0, RDP_FI_NOINCOFFSET, NULL }, + {hf_rdp_pduTypeVersionHigh, 2, NULL, 0, 0, NULL }, + FI_TERMINATOR + }; + rdp_field_info_t ctrl_fields[] = { + {hf_rdp_totalLength, 2, NULL, 0, 0, NULL }, + {hf_rdp_pduType, 2, NULL, ett_rdp_pduType, RDP_FI_SUBTREE, + pdu_fields }, + {hf_rdp_pduSource, 2, NULL, 0, 0, NULL }, + FI_TERMINATOR + }; +#ifdef RDPELE + rdp_field_info_t license_fields[] = { + {hf_rdp_serverRandom, 2, NULL, 0, 0, NULL }, + {hf_rdp_dwVersion, 4, NULL, 0, 0, NULL }, + {hf_rdp_cbCompanyName, 4, &cbCompanyName, 0, 0, NULL }, + {hf_rdp_pbCompanyName, 0, &cbCompanyName, 0, RDP_FI_UNICODE, NULL }, + {hf_rdp_cbProductId, 4, &cbProductId, 0, 0, NULL }, + {hf_rdp_pbProductId, 0, &cbProductId, 0, RDP_FI_UNICODE, NULL }, + FI_TERMINATOR + }; +#endif + length = tvb_length_remaining(tvb, offset); + tree = dissect_rdp(tvb, pinfo, tree); + + pi = proto_tree_add_item(tree, hf_rdp_SendData, tvb, offset, length, FALSE); + tree = proto_item_add_subtree(pi, ett_rdp_SendData); + + conversation = find_or_create_conversation(pinfo); + rdp_info = conversation_get_proto_data(conversation, proto_rdp); + + if(rdp_info && + ((rdp_info->licenseAgreed == 0) || + (pinfo->fd->num <= rdp_info->licenseAgreed))) { + /* licensing stage hasn't been completed */ + + flags = tvb_get_letohs(tvb, offset); + + switch(flags & SEC_PKT_MASK) { + case SEC_EXCHANGE_PKT: + pi = proto_tree_add_item(tree, hf_rdp_securityExchangePDU, tvb, offset, length, FALSE); \ + next_tree = proto_item_add_subtree(pi, ett_rdp_securityExchangePDU); + + col_append_sep_str(pinfo->cinfo, COL_INFO, " ", "SecurityExchange"); + + offset = dissect_rdp_fields(tvb, offset, pinfo, next_tree, se_fields); + + break; + + case SEC_INFO_PKT: + pi = proto_tree_add_item(tree, hf_rdp_clientInfoPDU, tvb, offset, length, FALSE); + next_tree = proto_item_add_subtree(pi, ett_rdp_clientInfoPDU); + col_append_sep_str(pinfo->cinfo, COL_INFO, " ", "ClientInfo"); + + offset = dissect_rdp_securityHeader(tvb, offset, pinfo, next_tree, rdp_info, TRUE, NULL); + + if(!(flags & SEC_ENCRYPT)) { + + offset = dissect_rdp_fields(tvb, offset, pinfo, next_tree, ue_fields); + } else { + + offset = dissect_rdp_encrypted(tvb, offset, pinfo, next_tree, NULL); + } + break; + case SEC_LICENSE_PKT: + pi = proto_tree_add_item(tree, hf_rdp_validClientLicenseData, tvb, offset, length, FALSE); + next_tree = proto_item_add_subtree(pi, ett_rdp_validClientLicenseData); + + offset = dissect_rdp_securityHeader(tvb, offset, pinfo, next_tree, rdp_info, TRUE, NULL); + if(!(flags & SEC_ENCRYPT)) { + + offset = dissect_rdp_fields(tvb, offset, pinfo, next_tree, msg_fields); + + col_append_sep_str(pinfo->cinfo, COL_INFO, ", ", val_to_str(bMsgType, rdp_bMsgType_vals, "Unknown")); + + switch(bMsgType) { + case LICENSE_REQUEST: + case PLATFORM_CHALLENGE: + case NEW_LICENSE: + case UPGRADE_LICENSE: + case LICENSE_INFO: + case NEW_LICENSE_REQUEST: + case PLATFORM_CHALLENGE_RESPONSE: + /* RDPELE Not supported */ + offset = dissect_rdp_nyi(tvb, offset, pinfo, next_tree, "RDPELE not implemented"); + break; + case ERROR_ALERT: + offset = dissect_rdp_fields(tvb, offset, pinfo, next_tree, error_fields); + rdp_info->licenseAgreed = pinfo->fd->num; + break; + default: + /* Unknown msgType */ + break; + } + } else { + offset = dissect_rdp_encrypted(tvb, offset, pinfo, next_tree, NULL); + + /* XXX: we assume the license is agreed in this exchange */ + rdp_info->licenseAgreed = pinfo->fd->num; + } + break; + case SEC_REDIRECTION_PKT: + /* NotYetImplemented */ + break; + default: + break; + } + } else { + + if(rdp_info && (t124_get_last_channelId() == rdp_info->staticChannelId)) { + + offset = dissect_rdp_securityHeader(tvb, offset, pinfo, tree, rdp_info, FALSE, &flags); + + if(!(flags & SEC_ENCRYPT)) { + pi = proto_tree_add_item(tree, hf_rdp_shareControlHeader, tvb, offset, length, FALSE); + next_tree = proto_item_add_subtree(pi, ett_rdp_shareControlHeader); + + offset = dissect_rdp_fields(tvb, offset, pinfo, next_tree, ctrl_fields); + + pduType &= PDUTYPE_TYPE_MASK; /* mask out just the type */ + + if(pduType != PDUTYPE_DATAPDU) + col_append_sep_str(pinfo->cinfo, COL_INFO, ", ", val_to_str(pduType, rdp_pduTypeType_vals, "Unknown")); + + switch(pduType) { + case PDUTYPE_DEMANDACTIVEPDU: + offset = dissect_rdp_demandActivePDU(tvb, offset, pinfo, next_tree); + break; + case PDUTYPE_CONFIRMACTIVEPDU: + offset = dissect_rdp_confirmActivePDU(tvb, offset, pinfo, next_tree); + break; + case PDUTYPE_DEACTIVATEALLPDU: + break; + case PDUTYPE_DATAPDU: + offset = dissect_rdp_shareDataHeader(tvb, offset, pinfo, next_tree); + break; + case PDUTYPE_SERVER_REDIR_PKT: + break; + default: + break; + } + } else { + + offset = dissect_rdp_encrypted(tvb, offset, pinfo, next_tree, NULL); + } + + /* we may get multiple control headers in a single frame */ + col_set_fence(pinfo->cinfo, COL_INFO); + + offset = base_offset + length; + + } else { + + col_append_sep_str(pinfo->cinfo, COL_INFO, " ", "Virtual Channel PDU"); + + offset = dissect_rdp_securityHeader(tvb, offset, pinfo, tree, rdp_info, FALSE, &flags); + + if(!(flags & SEC_ENCRYPT)) + offset = dissect_rdp_channelPDU(tvb, offset, pinfo, tree); + else + offset = dissect_rdp_encrypted(tvb, offset, pinfo, next_tree, "Channel PDU"); + + } + } +} + +void +dissect_rdp_ClientData(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) { + int offset = 0; + proto_tree *next_tree = NULL; + proto_item *pi = NULL; + guint16 type; + guint16 length; + conversation_t *conversation; + rdp_conv_info_t *rdp_info = NULL; + + rdp_field_info_t header_fields[] = { + {hf_rdp_headerType, 2, NULL, 0, 0, NULL }, + {hf_rdp_headerLength, 2, NULL, 0, 0, NULL }, + FI_TERMINATOR + }; + rdp_field_info_t core_fields[] = { + {hf_rdp_headerType, 2, NULL, 0, 0, NULL }, + {hf_rdp_headerLength, 2, NULL, 0, 0, NULL }, + {hf_rdp_versionMajor, 2, NULL, 0, 0, NULL }, + {hf_rdp_versionMinor, 2, NULL, 0, 0, NULL }, + {hf_rdp_desktopWidth, 2, NULL, 0, 0, NULL }, + {hf_rdp_desktopHeight, 2, NULL, 0, 0, NULL }, + {hf_rdp_colorDepth, 2, NULL, 0, 0, NULL }, + {hf_rdp_SASSequence, 2, NULL, 0, 0, NULL }, + {hf_rdp_keyboardLayout, 4, NULL, 0, 0, NULL }, + {hf_rdp_clientBuild, 4, NULL, 0, 0, NULL }, + {hf_rdp_clientName, 32, NULL, 0, RDP_FI_UNICODE, NULL }, + {hf_rdp_keyboardType, 4, NULL, 0, 0, NULL }, + {hf_rdp_keyboardSubType, 4, NULL, 0, 0, NULL }, + {hf_rdp_keyboardFunctionKey, 4, NULL, 0, 0, NULL }, + {hf_rdp_imeFileName, 64, NULL, 0, 0, NULL }, + {hf_rdp_postBeta2ColorDepth, 2, NULL, 0, 0, NULL }, + {hf_rdp_clientProductId, 2, NULL, 0, 0, NULL }, + {hf_rdp_serialNumber, 4, NULL, 0, 0, NULL }, + {hf_rdp_highColorDepth, 2, NULL, 0, 0, NULL }, + {hf_rdp_supportedColorDepths, 2, NULL, 0, 0, NULL }, + {hf_rdp_earlyCapabilityFlags, 2, NULL, 0, 0, NULL }, + {hf_rdp_clientDigProductId, 64, NULL, 0, RDP_FI_UNICODE, NULL}, + {hf_rdp_connectionType, 1, NULL, 0, 0, NULL }, + {hf_rdp_pad1octet, 1, NULL, 0, 0, NULL }, + {hf_rdp_serverSelectedProtocol, 4, NULL, 0, 0, NULL }, + FI_TERMINATOR + }; + rdp_field_info_t security_fields[] = { + {hf_rdp_headerType, 2, NULL, 0, 0, NULL }, + {hf_rdp_headerLength, 2, NULL, 0, 0, NULL }, + {hf_rdp_encryptionMethods, 4, NULL, 0, 0, NULL }, + {hf_rdp_extEncryptionMethods, 4, NULL, 0, 0, NULL }, + FI_TERMINATOR + }; + rdp_field_info_t cluster_fields[] = { + {hf_rdp_headerType, 2, NULL, 0, 0, NULL }, + {hf_rdp_headerLength, 2, NULL, 0, 0, NULL }, + /* just consume the bytes for now */ + {hf_rdp_serverSelectedProtocol, 4, NULL, 0, 0, NULL }, + {hf_rdp_serverSelectedProtocol, 4, NULL, 0, 0, NULL }, + FI_TERMINATOR + }; + + /* OK - we try and dissect as many of the data blocks as we can + As soon as we find one we don't recognise, we have to give up parsing + the rest of the data block. */ + + tree = dissect_rdp(tvb, pinfo, tree); + length = tvb_length_remaining(tvb, offset); + + conversation = find_or_create_conversation(pinfo); + + rdp_info = conversation_get_proto_data(conversation, proto_rdp); + + if(rdp_info == NULL) { + rdp_info = g_malloc0(sizeof(rdp_conv_info_t)); + rdp_info->staticChannelId = -1; + rdp_info->encryptionMethod = 0; + rdp_info->encryptionLevel = 0; + rdp_info->licenseAgreed = 0; + rdp_info->maxChannels = 0; + + conversation_add_proto_data(conversation, proto_rdp, rdp_info); + + rdp_info->next = rdp_conv_info_items; + rdp_conv_info_items = rdp_info; + } + + col_append_sep_str(pinfo->cinfo, COL_INFO, " ", "ClientData"); + + pi = proto_tree_add_item(tree, hf_rdp_ClientData, tvb, offset, length, FALSE); + tree = proto_item_add_subtree(pi, ett_rdp_ClientData); + + while(tvb_length_remaining(tvb, offset) > 0) { + + type = tvb_get_letohs(tvb, offset); + length = tvb_get_letohs(tvb, offset+2); + + /* printf("offset=%d, type=%x, length=%d, remaining=%d\n", + offset, type, length, tvb_length_remaining(tvb, offset)); */ + + if(length == 0) + return; + + switch(type) { + case CS_CORE: + + if(tvb_length_remaining(tvb, offset) >= length) { + + pi = proto_tree_add_item(tree, hf_rdp_clientCoreData, tvb, offset, length, FALSE); \ + next_tree = proto_item_add_subtree(pi, ett_rdp_clientCoreData); + + offset = dissect_rdp_fields(tvb, offset, pinfo, next_tree, core_fields); + + } else { + /* block not big enough */ + return; + } + break; + case CS_SECURITY: + if(tvb_length_remaining(tvb, offset) >= length) { + + pi = proto_tree_add_item(tree, hf_rdp_clientSecurityData, tvb, offset, length, FALSE); \ + + next_tree = proto_item_add_subtree(pi, ett_rdp_clientSecurityData); + + offset = dissect_rdp_fields(tvb, offset, pinfo, next_tree, security_fields); + + } else { + /* not enough data */ + return; + } + + break; + case CS_NET: + if(tvb_length_remaining(tvb, offset) >= length) { + + offset = dissect_rdp_clientNetworkData(tvb, offset, pinfo, tree, + length, rdp_info); + + } else { + /* not enough data */ + return; + } + + break; + case CS_CLUSTER: + if(tvb_length_remaining(tvb, offset) >= length) { + + pi = proto_tree_add_item(tree, hf_rdp_clientClusterData, tvb, offset, length, FALSE); \ + + next_tree = proto_item_add_subtree(pi, ett_rdp_clientClusterData); + + offset = dissect_rdp_fields(tvb, offset, pinfo, next_tree, cluster_fields); + + } else { + /* not enough data */ + return; + } + break; + default: + if(tvb_length_remaining(tvb, offset) >= length) { + + pi = proto_tree_add_item(tree, hf_rdp_clientUnknownData, tvb, offset, length, FALSE); \ + + next_tree = proto_item_add_subtree(pi, ett_rdp_clientUnknownData); + + offset = dissect_rdp_fields(tvb, offset, pinfo, next_tree, header_fields); + + } else { + return; + } + break; + } + + } + +} + +void +dissect_rdp_ServerData(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) { + int offset = 0; + proto_tree *next_tree = NULL; + proto_tree *old_tree = NULL; + proto_item *pi = NULL; + guint16 type; + guint16 length; + guint32 serverRandomLen = 0; + guint32 serverCertLen = 0; + guint32 encryptionMethod = 0; + guint32 encryptionLevel = 0; + guint32 channelCount = 0; + guint32 channelId = 0; + guint16 i = 0; + conversation_t *conversation; + rdp_conv_info_t *rdp_info = NULL; + + rdp_field_info_t header_fields[] = { + {hf_rdp_headerType, 2, NULL, 0, 0, NULL }, + {hf_rdp_headerLength, 2, NULL, 0, 0, NULL }, + FI_TERMINATOR + }; + rdp_field_info_t sc_fields[] = { + {hf_rdp_headerType, 2, NULL, 0, 0, NULL }, + {hf_rdp_headerLength, 2, NULL, 0, 0, NULL }, + {hf_rdp_versionMajor, 2, NULL, 0, 0, NULL }, + {hf_rdp_versionMinor, 2, NULL, 0, 0, NULL }, + {hf_rdp_clientRequestedProtocols, 4, NULL, 0, 0, NULL }, + FI_TERMINATOR + }; + rdp_field_info_t ss_fields[] = { + {hf_rdp_headerType, 2, NULL, 0, 0, NULL }, + {hf_rdp_headerLength, 2, NULL, 0, 0, NULL }, + {hf_rdp_encryptionMethod, 4, &encryptionMethod, 0, 0, NULL }, + {hf_rdp_encryptionLevel, 4, &encryptionLevel, 0, 0, NULL }, + FI_TERMINATOR + }; + rdp_field_info_t encryption_fields[] = { + {hf_rdp_serverRandomLen, 4, &serverRandomLen, 0, 0, NULL }, + {hf_rdp_serverCertLen, 4, &serverCertLen, 0, 0, NULL }, + {hf_rdp_serverRandom, 0, &serverRandomLen, 0, 0, NULL }, + {hf_rdp_serverCertificate, 0, &serverCertLen, 0, 0, NULL }, + FI_TERMINATOR + }; + rdp_field_info_t sn_fields[] = { + {hf_rdp_headerType, 2, NULL, 0, 0, NULL }, + {hf_rdp_headerLength, 2, NULL, 0, 0, NULL }, + {hf_rdp_MCSChannelId, 2, &channelId, 0, 0, NULL }, + {hf_rdp_channelCount, 2, &channelCount, 0, 0, NULL }, + FI_TERMINATOR + }; + rdp_field_info_t array_fields[] = { + {hf_rdp_channelIdArray, (channelCount * 2), NULL, 0, 0, NULL }, + FI_TERMINATOR + }; + rdp_field_info_t channel_fields[] = { + {hf_rdp_MCSChannelId, 2, &channelId, 0, 0, NULL }, + FI_TERMINATOR + }; + rdp_field_info_t pad_fields[] = { + {hf_rdp_Pad, 2, NULL, 0, 0, NULL }, + FI_TERMINATOR + }; + + /* OK - we try and dissect as many of the data blocks as we can + As soon as we find one we don't recognise, we have to give up parsing + the rest of the data block. */ + + tree = dissect_rdp(tvb, pinfo, tree); + length = tvb_length_remaining(tvb, offset); + + conversation = find_or_create_conversation(pinfo); + + rdp_info = conversation_get_proto_data(conversation, proto_rdp); + + if(rdp_info == NULL) { + rdp_info = g_malloc0(sizeof(rdp_conv_info_t)); + rdp_info->staticChannelId = -1; + rdp_info->encryptionMethod = 0; + rdp_info->encryptionLevel = 0; + rdp_info->licenseAgreed = 0; + rdp_info->maxChannels = 0; + + conversation_add_proto_data(conversation, proto_rdp, rdp_info); + + rdp_info->next = rdp_conv_info_items; + rdp_conv_info_items = rdp_info; + } + + col_append_sep_str(pinfo->cinfo, COL_INFO, " ", "ServerData"); + + pi = proto_tree_add_item(tree, hf_rdp_ServerData, tvb, offset, length, FALSE); + tree = proto_item_add_subtree(pi, ett_rdp_ServerData); + + while(tvb_length_remaining(tvb, offset) > 0) { + + type = tvb_get_letohs(tvb, offset); + length = tvb_get_letohs(tvb, offset+2); + + /* printf("offset=%d, type=%x, length=%d, remaining=%d\n", + offset, type, length, tvb_length_remaining(tvb, offset)); */ + + if(length == 0) + return; + + switch(type) { + case SC_CORE: + + if(tvb_length_remaining(tvb, offset) >= length) { + + pi = proto_tree_add_item(tree, hf_rdp_serverCoreData, tvb, offset, length, FALSE); \ + next_tree = proto_item_add_subtree(pi, ett_rdp_serverCoreData); + + offset = dissect_rdp_fields(tvb, offset, pinfo, next_tree, sc_fields); + + } else { + /* block not big enough */ + return; + } + break; + case SC_SECURITY: + if(tvb_length_remaining(tvb, offset) >= length) { + + pi = proto_tree_add_item(tree, hf_rdp_serverSecurityData, tvb, offset, length, FALSE); \ + + next_tree = proto_item_add_subtree(pi, ett_rdp_serverSecurityData); + + offset = dissect_rdp_fields(tvb, offset, pinfo, next_tree, ss_fields); + + col_append_sep_fstr(pinfo->cinfo, COL_INFO, " ", "Encryption: %s (%s)", + val_to_str(encryptionMethod, rdp_encryptionMethod_vals, "Unknown"), + val_to_str(encryptionLevel, rdp_encryptionLevel_vals, "Unknown")); + + if((encryptionLevel != 0) || (encryptionMethod != 0)) { + + offset = dissect_rdp_fields(tvb, offset, pinfo, next_tree, encryption_fields); + } + + rdp_info->encryptionMethod = encryptionMethod; + rdp_info->encryptionLevel = encryptionLevel; + + } else { + /* not enough data */ + return; + } + + break; + case SC_NET: + if(tvb_length_remaining(tvb, offset) >= length) { + + pi = proto_tree_add_item(tree, hf_rdp_serverNetworkData, tvb, offset, length, FALSE); \ + + next_tree = proto_item_add_subtree(pi, ett_rdp_serverNetworkData); + + offset = dissect_rdp_fields(tvb, offset, pinfo, next_tree, sn_fields); + + rdp_info->staticChannelId = channelId; + register_t124_sd_dissector(pinfo, channelId, dissect_rdp_SendData, proto_rdp); + if(channelCount > 0 ) { + + array_fields[0].fixedLength = channelCount * 2; + dissect_rdp_fields(tvb, offset, pinfo, next_tree, array_fields); + + old_tree = next_tree; + if(next_tree) + next_tree = proto_item_add_subtree(next_tree->last_child, ett_rdp_channelIdArray); + for(i = 0; i < channelCount; i++) { + offset = dissect_rdp_fields(tvb, offset, pinfo, next_tree, channel_fields); + if(rdp_info) { + rdp_info->channels[i].value = channelId; + + /* register SendData on this for now */ + register_t124_sd_dissector(pinfo, channelId, dissect_rdp_SendData, proto_rdp); + } + } + if(channelCount % 2) + offset = dissect_rdp_fields(tvb, offset, pinfo, next_tree, pad_fields); + next_tree = old_tree; + } + + } else { + /* not enough data */ + return; + } + + break; + default: + if(tvb_length_remaining(tvb, offset) >= length) { + + pi = proto_tree_add_item(tree, hf_rdp_serverUnknownData, tvb, offset, length, FALSE); \ + + next_tree = proto_item_add_subtree(pi, ett_rdp_serverUnknownData); + + offset = dissect_rdp_fields(tvb, offset, pinfo, next_tree, header_fields); + + } else { + return; + } + break; + } + + } + +} + + + + +/*--- proto_register_rdp -------------------------------------------*/ +void proto_register_rdp(void) { + + /* List of fields */ + static hf_register_info hf[] = { + { &hf_rdp_ClientData, + { "ClientData", "rdp.clientData", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_SendData, + { "SendData", "rdp.sendData", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_clientCoreData, + { "clientCoreData", "rdp.client.coreData", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_clientSecurityData, + { "clientSecurityData", "rdp.client.securityData", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_clientNetworkData, + { "clientNetworkData", "rdp.client.networkData", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_clientClusterData, + { "clientClusterData", "rdp.client.clusterData", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_clientUnknownData, + { "clientUnknownData", "rdp.unknownData.client", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_ServerData, + { "ServerData", "rdp.serverData", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_serverCoreData, + { "serverCoreData", "rdp.server.coreData", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_serverSecurityData, + { "serverSecurityData", "rdp.server.securityData", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_serverNetworkData, + { "serverNetworkData", "rdp.server.networkData", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_serverUnknownData, + { "serverUnknownData", "rdp.unknownData.server", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_securityExchangePDU, + { "securityExchangePDU", "rdp.securityExchangePDU", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_clientInfoPDU, + { "clientInfoPDU", "rdp.clientInfoPDU", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_validClientLicenseData, + { "validClientLicenseData", "rdp.validClientLicenseData", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_headerType, + { "headerType", "rdp.header.type", + FT_UINT16, BASE_HEX, VALS(rdp_headerType_vals), 0, + NULL, HFILL }}, + { &hf_rdp_headerLength, + { "headerLength", "rdp.header.length", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_versionMajor, + { "versionMajor", "rdp.version.major", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_versionMinor, + { "versionMinor", "rdp.version.minor", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_desktopWidth, + { "desktopWidth", "rdp.desktop.width", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_desktopHeight, + { "desktopHeight", "rdp.desktop.height", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_colorDepth, + { "colorDepth", "rdp.colorDepth", + FT_UINT16, BASE_HEX, VALS(rdp_colorDepth_vals), 0, + NULL, HFILL }}, + { &hf_rdp_SASSequence, + { "SASSequence", "rdp.SASSequence", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_keyboardLayout, + { "keyboardLayout", "rdp.keyboardLayout", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_clientBuild, + { "clientBuild", "rdp.client.build", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_clientName, + { "clientName", "rdp.client.name", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_keyboardType, + { "keyboardType", "rdp.keyboard.type", + FT_UINT32, BASE_DEC, VALS(rdp_keyboardType_vals), 0, + NULL, HFILL }}, + { &hf_rdp_keyboardSubType, + { "keyboardSubType", "rdp.keyboard.subtype", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_keyboardFunctionKey, + { "keyboardFunctionKey", "rdp.keyboard.functionkey", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_imeFileName, + { "imeFileName", "rdp.imeFileName", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_postBeta2ColorDepth, + { "postBeta2ColorDepth", "rdp.postBeta2ColorDepth", + FT_UINT16, BASE_HEX, VALS(rdp_colorDepth_vals), 0, + NULL, HFILL }}, + { &hf_rdp_clientProductId, + { "clientProductId", "rdp.client.productId", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_serialNumber, + { "serialNumber", "rdp.serialNumber", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_highColorDepth, + { "highColorDepth", "rdp.highColorDepth", + FT_UINT16, BASE_HEX, VALS(rdp_highColorDepth_vals), 0, + NULL, HFILL }}, + { &hf_rdp_supportedColorDepths, + { "supportedColorDepths", "rdp.supportedColorDepths", + FT_UINT16, BASE_HEX, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_earlyCapabilityFlags, + { "earlyCapabilityFlags", "rdp.earlyCapabilityFlags", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_clientDigProductId, + { "clientDigProductId", "rdp.client.digProductId", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_connectionType, + { "connectionType", "rdp.connectionType", + FT_UINT8, BASE_DEC, VALS(rdp_connectionType_vals), 0, + NULL, HFILL }}, + { &hf_rdp_pad1octet, + { "pad1octet", "rdp.pad1octet", + FT_UINT8, BASE_HEX, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_serverSelectedProtocol, + { "serverSelectedProtocol", "rdp.serverSelectedProtocol", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_encryptionMethods, + { "encryptionMethods", "rdp.encryptionMethods", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_extEncryptionMethods, + { "extEncryptionMethods", "rdp.extEncryptionMethods", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_encryptionMethod, + { "encryptionMethod", "rdp.encryptionMethod", + FT_UINT32, BASE_HEX, VALS(rdp_encryptionMethod_vals), 0, + NULL, HFILL }}, + { &hf_rdp_encryptionLevel, + { "encryptionLevel", "rdp.encryptionLevel", + FT_UINT32, BASE_HEX, VALS(rdp_encryptionLevel_vals), 0, + NULL, HFILL }}, + { &hf_rdp_serverRandomLen, + { "serverRandomLen", "rdp.serverRandomLen", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_serverCertLen, + { "serverCertLen", "rdp.serverCertLen", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_serverRandom, + { "serverRandom", "rdp.serverRandom", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_serverCertificate, + { "serverCertificate", "rdp.serverCertificate", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_clientRequestedProtocols, + { "clientRequestedProtocols", "rdp.client.requestedProtocols", + FT_UINT32, BASE_HEX, VALS(rdp_requestedProtocols_vals), 0, + NULL, HFILL }}, + { &hf_rdp_MCSChannelId, + { "MCSChannelId", "rdp.MCSChannelId", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_channelCount, + { "channelCount", "rdp.channelCount", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_channelIdArray, + { "channelIdArray", "rdp.channelIdArray", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_Pad, + { "Pad", "rdp.Pad", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_flags, + { "flags", "rdp.flags", + FT_UINT16, BASE_HEX, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_channelFlags, + { "channelFlags", "rdp.channelFlags", + FT_UINT32, BASE_HEX, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_flagsPkt, + { "flagsPkt", "rdp.flags.pkt", + FT_UINT16, BASE_HEX, VALS(rdp_flagsPkt_vals), SEC_PKT_MASK, + NULL, HFILL }}, + { &hf_rdp_flagsEncrypt, + { "flagsEncrypt", "rdp.flags.encrypt", + FT_UINT16, BASE_HEX, NULL, SEC_ENCRYPT, + NULL, HFILL }}, + { &hf_rdp_flagsResetSeqno, + { "flagsResetSeqno", "rdp.flags.resetseqno", + FT_UINT16, BASE_HEX, NULL, SEC_RESET_SEQNO, + NULL, HFILL }}, + { &hf_rdp_flagsIgnoreSeqno, + { "flagsIgnoreSeqno", "rdp.flags.ignoreseqno", + FT_UINT16, BASE_HEX, NULL, SEC_IGNORE_SEQNO, + NULL, HFILL }}, + { &hf_rdp_flagsLicenseEncrypt, + { "flagsLicenseEncrypt", "rdp.flags.licenseencrypt", + FT_UINT16, BASE_HEX, NULL, SEC_LICENSE_ENCRYPT_CS, + NULL, HFILL }}, + { &hf_rdp_flagsSecureChecksum, + { "flagsSecureChecksum", "rdp.flags.securechecksum", + FT_UINT16, BASE_HEX, NULL, SEC_SECURE_CHECKSUM, + NULL, HFILL }}, + { &hf_rdp_flagsFlagsHiValid, + { "flagsHiValid", "rdp.flags.flagshivalid", + FT_UINT16, BASE_HEX, NULL, SEC_FLAGSHI_VALID, + NULL, HFILL }}, + { &hf_rdp_flagsHi, + { "flagsHi", "rdp.flagsHi", + FT_UINT16, BASE_HEX, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_length, + { "length", "rdp.length", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_encryptedClientRandom, + { "encryptedClientRandom", "rdp.encryptedClientRandom", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_dataSignature, + { "dataSignature", "rdp.dataSignature", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_fipsLength, + { "fipsLength", "rdp.fipsLength", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_fipsVersion, + { "fipsVersion", "rdp.fipsVersion", + FT_UINT8, BASE_HEX, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_padlen, + { "padlen", "rdp.padlen", + FT_UINT8, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_codePage, + { "codePage", "rdp.codePage", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_optionFlags, + { "optionFlags", "rdp.optionFlags", + FT_UINT32, BASE_HEX, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_cbDomain, + { "cbDomain", "rdp.domain.length", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_cbUserName, + { "cbUserName", "rdp.userName.length", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_cbPassword, + { "cbPassword", "rdp.password.length", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_cbAlternateShell, + { "cbAlternateShell", "rdp.alternateShell.length", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_cbWorkingDir, + { "cbWorkingDir", "rdp.workingDir.length", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_cbClientAddress, + { "cbClientAddress", "rdp.client.address.length", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_cbClientDir, + { "cbClientDir", "rdp.client.dir.length", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_cbAutoReconnectLen, + { "cbAutoReconnectLen", "rdp.autoReconnectCookie.length", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_domain, + { "domain", "rdp.domain", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_userName, + { "userName", "rdp.userName", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_password, + { "password", "rdp.password", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_alternateShell, + { "alternateShell", "rdp.alternateShell", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_workingDir, + { "workingDir", "rdp.workingDir", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_clientAddressFamily, + { "clientAddressFamily", "rdp.client.addressFamily", + FT_UINT16, BASE_HEX, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_clientAddress, + { "clientAddress", "rdp.client.address", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_clientDir, + { "clientDir", "rdp.client.dir", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_clientTimeZone, + { "clientTimeZone", "rdp.client.timeZone", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_clientSessionId, + { "clientSessionId", "rdp.client.sessionId", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_performanceFlags, + { "performanceFlags", "rdp.performanceFlags", + FT_UINT32, BASE_HEX, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_autoReconnectCookie, + { "autoReconnectCookie", "rdp.autoReconnectCookie", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_reserved1, + { "reserved1", "rdp.reserved1", + FT_UINT16, BASE_HEX, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_reserved2, + { "reserved2", "rdp.reserved2", + FT_UINT16, BASE_HEX, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_bMsgType, + { "bMsgType", "rdp.bMsgType", + FT_UINT8, BASE_HEX, VALS(rdp_bMsgType_vals), 0, + NULL, HFILL }}, + { &hf_rdp_bVersion, + { "bVersion", "rdp.bVersion", + FT_UINT8, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_wMsgSize, + { "wMsgSize", "rdp.wMsgSize", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_wBlobType, + { "wBlobType", "rdp.wBlobType", + FT_UINT16, BASE_DEC, VALS(rdp_wBlobType_vals), 0, + NULL, HFILL }}, + { &hf_rdp_wBlobLen, + { "wBlobLen", "rdp.wBlobLen", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_blobData, + { "blobData", "rdp.blobData", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_shareControlHeader, + { "shareControlHeader", "rdp.shareControlHeader", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_channelPDUHeader, + { "channelPDUHeader", "rdp.channelPDUHeader", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_virtualChannelData, + { "virtualChannelData", "rdp.virtualChannelData", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_totalLength, + { "totalLength", "rdp.totalLength", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_pduType, + { "pduType", "rdp.pduType", + FT_UINT16, BASE_HEX, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_pduTypeType, + { "pduTypeType", "rdp.pduType.type", + FT_UINT16, BASE_HEX, VALS(rdp_pduTypeType_vals), PDUTYPE_TYPE_MASK, + NULL, HFILL }}, + { &hf_rdp_pduTypeVersionLow, + { "pduTypeVersionLow", "rdp.pduType.versionLow", + FT_UINT16, BASE_DEC, NULL, PDUTYPE_VERSIONLOW_MASK, + NULL, HFILL }}, + { &hf_rdp_pduTypeVersionHigh, + { "pduTypeVersionHigh", "rdp.pduType.versionHigh", + FT_UINT16, BASE_DEC, NULL, PDUTYPE_VERSIONHIGH_MASK, + NULL, HFILL }}, + { &hf_rdp_pduSource, + { "pduSource", "rdp.pduSource", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_shareId, + { "shareId", "rdp.shareId", + FT_UINT32, BASE_HEX, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_pad1, + { "pad1", "rdp.pad1", + FT_UINT8, BASE_HEX, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_streamId, + { "streamId", "rdp.streamId", + FT_UINT8, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_uncompressedLength, + { "uncompressedLength", "rdp.uncompressedLength", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_pduType2, + { "pduType2", "rdp.pduType2", + FT_UINT8, BASE_DEC, VALS(rdp_pduType2_vals), 0, + NULL, HFILL }}, + { &hf_rdp_compressedType, + { "compressedType", "rdp.compressedType", + FT_UINT8, BASE_HEX, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_compressedTypeType, + { "compressedTypeType", "rdp.compressedType.type", + FT_UINT8, BASE_HEX ,VALS(rdp_compressionType_vals), + PacketCompressionTypeMask, + NULL, HFILL }}, + { &hf_rdp_compressedTypeCompressed, + { "compressedTypeCompressed", "rdp.compressedType.compressed", + FT_UINT8, BASE_HEX, NULL, PACKET_COMPRESSED, + NULL, HFILL }}, + { &hf_rdp_compressedTypeAtFront, + { "compressedTypeAtFront", "rdp.compressedType.atFront", + FT_UINT8, BASE_HEX, NULL, PACKET_AT_FRONT, + NULL, HFILL }}, + { &hf_rdp_compressedTypeFlushed, + { "compressedTypeFlushed", "rdp.compressedType.flushed", + FT_UINT8, BASE_HEX, NULL, PACKET_FLUSHED, + NULL, HFILL }}, + { &hf_rdp_compressedLength, + { "compressedLength", "rdp.compressedLength", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_wErrorCode, + { "errorCode", "rdp.errorCode", + FT_UINT32, BASE_DEC, VALS(rdp_wErrorCode_vals), 0, + NULL, HFILL }}, + { &hf_rdp_wStateTransition, + { "stateTransition", "rdp.stateTransition", + FT_UINT32, BASE_DEC, VALS(rdp_wStateTransition_vals), 0, + NULL, HFILL }}, + { &hf_rdp_numberEntries, + { "numberEntries", "rdp.numberEntries", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_totalNumberEntries, + { "totalNumberEntries", "rdp.totalNumberEntries", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_mapFlags, + { "mapFlags", "rdp.mapFlags", + FT_UINT16, BASE_HEX, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_fontMapFirst, + { "fontMapFirst", "rdp.mapFlags.fontMapFirst", + FT_UINT16, BASE_HEX, NULL, FONTMAP_FIRST, + NULL, HFILL }}, + { &hf_rdp_fontMapLast, + { "fontMapLast", "rdp.mapFlags.fontMapLast", + FT_UINT16, BASE_HEX, NULL, FONTMAP_LAST, + NULL, HFILL }}, + { &hf_rdp_entrySize, + { "entrySize", "rdp.entrySize", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_action, + { "action", "rdp.action", + FT_UINT16, BASE_HEX, VALS(rdp_action_vals), + 0, + NULL, HFILL }}, + { &hf_rdp_grantId, + { "grantId", "rdp.grantId", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_controlId, + { "controlId", "rdp.controlId", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_messageType, + { "messageType", "rdp.messageType", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_targetUser, + { "targetUser", "rdp.targetUser", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_numEntriesCache0, + { "numEntriesCache0", "rdp.numEntriesCache0", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_numEntriesCache1, + { "numEntriesCache1", "rdp.numEntriesCache1", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_numEntriesCache2, + { "numEntriesCache2", "rdp.numEntriesCache2", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_numEntriesCache3, + { "numEntriesCache3", "rdp.numEntriesCache3", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_numEntriesCache4, + { "numEntriesCache4", "rdp.numEntriesCache4", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_totalEntriesCache0, + { "totalEntriesCache0", "rdp.totalEntriesCache0", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_totalEntriesCache1, + { "totalEntriesCache1", "rdp.totalEntriesCache1", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_totalEntriesCache2, + { "totalEntriesCache2", "rdp.totalEntriesCache2", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_totalEntriesCache3, + { "totalEntriesCache3", "rdp.totalEntriesCache3", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_totalEntriesCache4, + { "totalEntriesCache4", "rdp.totalEntriesCache4", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_bBitMask, + { "bBitMask", "rdp.bBitMask", + FT_UINT8, BASE_HEX, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_Pad2, + { "Pad2", "rdp.Pad2", + FT_UINT8, BASE_HEX, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_Pad3, + { "Pad3", "rdp.Pad3", + FT_UINT16, BASE_HEX, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_Key1, + { "Key1", "rdp.Key1", + FT_UINT32, BASE_HEX, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_Key2, + { "Key2", "rdp.Key2", + FT_UINT32, BASE_HEX, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_originatorId, + { "originatorId", "rdp.OriginatorId", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_lengthSourceDescriptor, + { "lengthSourceDescriptor", "rdp.lengthSourceDescriptor", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_lengthCombinedCapabilities, + { "lengthCombinedCapabilities", "rdp.lengthCombinedCapabilities", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_sourceDescriptor, + { "sourceDescriptor", "rdp.sourceDescriptor", + FT_STRING, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_numberCapabilities, + { "numberCapabilities", "rdp.numberCapabilities", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_pad2Octets, + { "pad2Octets", "rdp.pad2Octets", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_capabilitySetType, + { "capabilitySetType", "rdp.capabilitySetType", + FT_UINT16, BASE_HEX, VALS(rdp_capabilityType_vals), 0, + NULL, HFILL }}, + { &hf_rdp_capabilitySet, + { "capabilitySet", "rdp.capabilitySet", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_lengthCapability, + { "lengthCapability", "rdp.lengthCapability", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_capabilityData, + { "capabilityData", "rdp.capabilityData", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_unknownData, + { "unknownData", "rdp.unknownData", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_notYetImplemented, + { "notYetImplemented", "rdp.notYetImplemented", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_encrypted, + { "encryptedData", "rdp.encryptedData", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_compressed, + { "compressedData", "rdp.compressedData", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_sessionId, + { "sessionId", "rdp.sessionId", + FT_UINT32, BASE_HEX, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_channelDefArray, + { "channelDefArray", "rdp.channelDefArray", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_channelDef, + { "channelDef", "rdp.channelDef", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_name, + { "name", "rdp.name", + FT_STRING, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_options, + { "options", "rdp.options", + FT_UINT32, BASE_HEX, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_optionsInitialized, + { "optionsInitialized", "rdp.options.initialized", + FT_UINT32, BASE_HEX, NULL, CHANNEL_OPTION_INITIALIZED, + NULL, HFILL }}, + { &hf_rdp_optionsEncryptRDP, + { "encryptRDP", "rdp.options.encrypt.rdp", + FT_UINT32, BASE_HEX, NULL, CHANNEL_OPTION_ENCRYPT_RDP, + NULL, HFILL }}, + { &hf_rdp_optionsEncryptSC, + { "encryptSC", "rdp.options.encrypt.sc", + FT_UINT32, BASE_HEX, NULL, CHANNEL_OPTION_ENCRYPT_SC, + NULL, HFILL }}, + { &hf_rdp_optionsEncryptCS, + { "encryptCS", "rdp.options.encrypt.cs", + FT_UINT32, BASE_HEX, NULL, CHANNEL_OPTION_ENCRYPT_CS, + NULL, HFILL }}, + { &hf_rdp_optionsPriHigh, + { "priorityHigh", "rdp.options.priority.high", + FT_UINT32, BASE_HEX, NULL, CHANNEL_OPTION_PRI_HIGH, + NULL, HFILL }}, + { &hf_rdp_optionsPriMed, + { "priorityMed", "rdp.options.priority.med", + FT_UINT32, BASE_HEX, NULL, CHANNEL_OPTION_PRI_MED, + NULL, HFILL }}, + { &hf_rdp_optionsPriLow, + { "priorityLow", "rdp.options.priority.low", + FT_UINT32, BASE_HEX, NULL, CHANNEL_OPTION_PRI_LOW, + NULL, HFILL }}, + { &hf_rdp_optionsCompressRDP, + { "compressRDP", "rdp.options.compress.rdp", + FT_UINT32, BASE_HEX, NULL, CHANNEL_OPTION_COMPRESS_RDP, + NULL, HFILL }}, + { &hf_rdp_optionsCompress, + { "compress", "rdp.options.compress", + FT_UINT32, BASE_HEX, NULL, CHANNEL_OPTION_COMPRESS, + NULL, HFILL }}, + { &hf_rdp_optionsShowProtocol, + { "showProtocol", "rdp.options.showprotocol", + FT_UINT32, BASE_HEX, NULL, CHANNEL_OPTION_SHOW_PROTOCOL, + NULL, HFILL }}, + { &hf_rdp_optionsRemoteControlPersistent, + { "remoteControlPersistent", "rdp.options.remotecontrolpersistent", + FT_UINT32, BASE_HEX, NULL, CHANNEL_OPTION_REMOTE_CONTROL_PERSISTENT, + NULL, HFILL }}, + { &hf_rdp_channelFlagFirst, + { "channelFlagFirst", "rdp.channelFlag.first", + FT_UINT32, BASE_HEX, NULL, CHANNEL_FLAG_FIRST, + NULL, HFILL }}, + { &hf_rdp_channelFlagLast, + { "channelFlagLast", "rdp.channelFlag.last", + FT_UINT32, BASE_HEX, NULL, CHANNEL_FLAG_LAST, + NULL, HFILL }}, + { &hf_rdp_channelFlagShowProtocol, + { "channelFlagShowProtocol", "rdp.channelFlag.showProtocol", + FT_UINT32, BASE_HEX, NULL, CHANNEL_FLAG_SHOW_PROTOCOL, + NULL, HFILL }}, + { &hf_rdp_channelFlagSuspend, + { "channelFlagSuspend", "rdp.channelFlag.suspend", + FT_UINT32, BASE_HEX, NULL, CHANNEL_FLAG_SUSPEND, + NULL, HFILL }}, + { &hf_rdp_channelFlagResume, + { "channelFlagResume", "rdp.channelFlag.resume", + FT_UINT32, BASE_HEX, NULL, CHANNEL_FLAG_RESUME, + NULL, HFILL }}, + { &hf_rdp_channelPacketCompressed, + { "channelPacketCompressed", "rdp.channelPacket.compressed", + FT_UINT32, BASE_HEX, NULL, CHANNEL_PACKET_COMPRESSED, + NULL, HFILL }}, + { &hf_rdp_channelPacketAtFront, + { "channelPacketAtFront", "rdp.channelPacket.atFront", + FT_UINT32, BASE_HEX, NULL, CHANNEL_PACKET_AT_FRONT, + NULL, HFILL }}, + { &hf_rdp_channelPacketFlushed, + { "channelPacketFlushed", "rdp.channelPacket.flushed", + FT_UINT32, BASE_HEX, NULL, CHANNEL_PACKET_FLUSHED, + NULL, HFILL }}, + { &hf_rdp_channelPacketCompressionType, + { "channelPacketCompresssionType", "rdp.channelPacket.compressionType", + FT_UINT32, BASE_HEX, VALS(rdp_channelCompressionType_vals), ChannelCompressionTypeMask, + NULL, HFILL }}, + { &hf_rdp_wYear, + { "wYear", "rdp.wYear", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_wMonth, + { "wMonth", "rdp.wMonth", + FT_UINT16, BASE_DEC, VALS(rdp_wMonth_vals), 0, + NULL, HFILL }}, + { &hf_rdp_wDayOfWeek, + { "wDayOfWeek", "rdp.wDayOfWeek", + FT_UINT16, BASE_DEC, VALS(rdp_wDayOfWeek_vals), 0, + NULL, HFILL }}, + { &hf_rdp_wDay, + { "wDay", "rdp.wDay", + FT_UINT16, BASE_DEC, VALS(rdp_wDay_vals), 0, + NULL, HFILL }}, + { &hf_rdp_wHour, + { "wHour", "rdp.wHour", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_wMinute, + { "wMinute", "rdp.wMinute", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_wSecond, + { "wSecond", "rdp.wSecond", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_wMilliseconds, + { "wMilliseconds", "rdp.wMilliseconds", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_Bias, + { "Bias", "rdp.Bias", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_StandardBias, + { "StandardBias", "rdp.Bias.standard", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_DaylightBias, + { "DaylightBias", "rdp.Bias.daylight", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_StandardName, + { "StandardName", "rdp.Name.Standard", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_StandardDate, + { "StandardDate", "rdp.Date.Standard", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_DaylightName, + { "DaylightName", "rdp.Name.Daylight", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_rdp_DaylightDate, + { "DaylightDate", "rdp.Date.Daylight", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + + + }; + + /* List of subtrees */ + static gint *ett[] = { + &ett_rdp, + &ett_rdp_ClientData, + &ett_rdp_ServerData, + &ett_rdp_SendData, + &ett_rdp_capabilitySet, + &ett_rdp_channelDef, + &ett_rdp_channelDefArray, + &ett_rdp_channelFlags, + &ett_rdp_channelIdArray, + &ett_rdp_channelPDUHeader, + &ett_rdp_clientClusterData, + &ett_rdp_clientCoreData, + &ett_rdp_clientInfoPDU, + &ett_rdp_clientNetworkData, + &ett_rdp_clientSecurityData, + &ett_rdp_clientUnknownData, + &ett_rdp_compressedType, + &ett_rdp_flags, + &ett_rdp_mapFlags, + &ett_rdp_options, + &ett_rdp_pduType, + &ett_rdp_securityExchangePDU, + &ett_rdp_serverCoreData, + &ett_rdp_serverNetworkData, + &ett_rdp_serverSecurityData, + &ett_rdp_serverUnknownData, + &ett_rdp_shareControlHeader, + &ett_rdp_validClientLicenseData, + &ett_rdp_StandardDate, + &ett_rdp_DaylightDate, + &ett_rdp_clientTimeZone, + }; + module_t *rdp_module; + + /* Register protocol */ + proto_rdp = proto_register_protocol(PNAME, PSNAME, PFNAME); + /* Register fields and subtrees */ + proto_register_field_array(proto_rdp, hf, array_length(hf)); + proto_register_subtree_array(ett, array_length(ett)); + + /* new_register_dissector("rdp", dissect_rdp, proto_rdp); */ + + /* Register our configuration options for RDP, particularly our port */ + + rdp_module = prefs_register_protocol(proto_rdp, prefs_register_rdp); + + prefs_register_uint_preference(rdp_module, "tcp.port", "RDP TCP Port", + "Set the port for RDP operations (if other" + " than the default of 3389)", + 10, &global_rdp_tcp_port); + +} + +void proto_reg_handoff_rdp(void) +{ + + /* remember the tpkt handler for change in preferences */ + tpkt_handle = find_dissector("tpkt"); + + prefs_register_rdp(); + + register_t124_ns_dissector("Duca", dissect_rdp_ClientData, proto_rdp); + register_t124_ns_dissector("McDn", dissect_rdp_ServerData, proto_rdp); +} + +void prefs_register_rdp(void) { + + static guint tcp_port = 0; + + /* de-register the old port */ + /* port 102 is registered by TPKT - don't undo this! */ + if((tcp_port > 0) && (tcp_port != 102) && tpkt_handle) + dissector_delete_uint("tcp.port", tcp_port, tpkt_handle); + + /* Set our port number for future use */ + tcp_port = global_rdp_tcp_port; + + if((tcp_port > 0) && (tcp_port != 102) && tpkt_handle) + dissector_add_uint("tcp.port", tcp_port, tpkt_handle); +} diff --git a/epan/dissectors/packet-rdp.h b/epan/dissectors/packet-rdp.h new file mode 100644 index 0000000000..4f15f806df --- /dev/null +++ b/epan/dissectors/packet-rdp.h @@ -0,0 +1,40 @@ +/* packet-rdp.h + * Routines for Remote Desktop Protocol (RDP) packet dissection + * + * $Id$ + * + * Copyright (c) 2010 by Graeme Lunt + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1999 Gerald Combs + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +/* Find the end of the next IMF field in the tvb. + * This is not necessarily the first \r\n as there may be continuation lines. + * + * If we have found the last field (terminated by \r\n\r\n) we indicate this in last_field . + */ + +#ifndef _PACKET_RDP_H +#define _PACKET_RDP_H + +void +dissect_rdp_SendData(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_); + +#endif /* _PACKET_RDP_H */ + diff --git a/epan/dissectors/packet-ses.c b/epan/dissectors/packet-ses.c index 4f07705851..09115acf4b 100644 --- a/epan/dissectors/packet-ses.c +++ b/epan/dissectors/packet-ses.c @@ -1206,7 +1206,7 @@ dissect_ses(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) * If so, dissect it as such (GIVE_TOKENS and DATA_TRANSFER have * the same SPDU type value). */ - if (type == SES_PLEASE_TOKENS || type == SES_GIVE_TOKENS) + if ((type == SES_PLEASE_TOKENS) || (type == SES_GIVE_TOKENS)) offset = dissect_spdu(tvb, offset, pinfo, tree, TOKENS_SPDU, FALSE); @@ -1992,6 +1992,15 @@ dissect_ses_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree) if (tvb_length(tvb) < len) return FALSE; /* no */ + /* final check to see if the next SPDU, if present, is also valid */ + if (tvb_length(tvb) > len) { + type = tvb_get_guint8(tvb, offset + len + 1); + /* check SPDU type */ + if (match_strval(type, ses_vals) == NULL) { + return FALSE; /* no, it isn't a session PDU */ + } + } + dissect_ses(tvb, pinfo, parent_tree); return TRUE; } diff --git a/epan/dissectors/packet-t124.c b/epan/dissectors/packet-t124.c new file mode 100644 index 0000000000..765f62b61c --- /dev/null +++ b/epan/dissectors/packet-t124.c @@ -0,0 +1,7926 @@ +/* Do not modify this file. */ +/* It is created automatically by the ASN.1 to Wireshark dissector compiler */ +/* packet-t124.c */ +/* ../../tools/asn2wrs.py -p t124 -c ./t124.cnf -s ./packet-t124-template -D . GCC-PROTOCOL.asn MCS-PROTOCOL.asn */ + +/* Input file: packet-t124-template.c */ + +#line 1 "../../asn1/t124/packet-t124-template.c" +/* packet-t124.c + * Routines for t124 packet dissection + * Copyright 2010, Graeme Lunt + * + * $Id$ + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1998 Gerald Combs + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <glib.h> +#include <epan/packet.h> +#include <epan/conversation.h> + +#include <epan/asn1.h> +#include "packet-per.h" +#include "packet-ber.h" +#include "packet-t124.h" + +#define PNAME "GENERIC-CONFERENCE-CONTROL T.124" +#define PSNAME "T.124" +#define PFNAME "t124" + +/* Initialize the protocol and registered fields */ +static int proto_t124 = -1; +static proto_tree *top_tree = NULL; + + +/*--- Included file: packet-t124-hf.c ---*/ +#line 1 "../../asn1/t124/packet-t124-hf.c" +static int hf_t124_object = -1; /* T_object */ +static int hf_t124_h221NonStandard = -1; /* H221NonStandardIdentifier */ +static int hf_t124_key = -1; /* Key */ +static int hf_t124_data = -1; /* OCTET_STRING */ +static int hf_t124_UserData_item = -1; /* UserData_item */ +static int hf_t124_value = -1; /* T_value */ +static int hf_t124_numeric = -1; /* SimpleNumericString */ +static int hf_t124_text = -1; /* SimpleTextString */ +static int hf_t124_unicodeText = -1; /* TextString */ +static int hf_t124_passwordString = -1; /* PasswordSelector */ +static int hf_t124_responseData = -1; /* UserData */ +static int hf_t124_passwordInTheClear = -1; /* NULL */ +static int hf_t124_nonStandardAlgorithm = -1; /* NonStandardParameter */ +static int hf_t124_responseAlgorithm = -1; /* ChallengeResponseAlgorithm */ +static int hf_t124_challengeData = -1; /* UserData */ +static int hf_t124_challengeTag = -1; /* INTEGER */ +static int hf_t124_challengeSet = -1; /* SET_OF_ChallengeItem */ +static int hf_t124_challengeSet_item = -1; /* ChallengeItem */ +static int hf_t124_responseItem = -1; /* ChallengeResponseItem */ +static int hf_t124_passwordInTheClear_01 = -1; /* PasswordSelector */ +static int hf_t124_challengeRequestResponse = -1; /* T_challengeRequestResponse */ +static int hf_t124_challengeRequest = -1; /* ChallengeRequest */ +static int hf_t124_challengeResponse = -1; /* ChallengeResponse */ +static int hf_t124_nonStandardScheme = -1; /* NonStandardParameter */ +static int hf_t124_priority = -1; /* INTEGER_0_65535 */ +static int hf_t124_scheme = -1; /* ConferencePriorityScheme */ +static int hf_t124_conventional = -1; /* NULL */ +static int hf_t124_counted = -1; /* NULL */ +static int hf_t124_anonymous = -1; /* NULL */ +static int hf_t124_nonStandardCategory = -1; /* NonStandardParameter */ +static int hf_t124_conventional_only = -1; /* NULL */ +static int hf_t124_counted_only = -1; /* NULL */ +static int hf_t124_anonymous_only = -1; /* NULL */ +static int hf_t124_conventional_control = -1; /* NULL */ +static int hf_t124_unrestricted_mode = -1; /* NULL */ +static int hf_t124_non_standard_mode = -1; /* NonStandardParameter */ +static int hf_t124_NetworkAddress_item = -1; /* NetworkAddress_item */ +static int hf_t124_aggregatedChannel = -1; /* T_aggregatedChannel */ +static int hf_t124_transferModes = -1; /* T_transferModes */ +static int hf_t124_speech = -1; /* BOOLEAN */ +static int hf_t124_voice_band = -1; /* BOOLEAN */ +static int hf_t124_digital_56k = -1; /* BOOLEAN */ +static int hf_t124_digital_64k = -1; /* BOOLEAN */ +static int hf_t124_digital_128k = -1; /* BOOLEAN */ +static int hf_t124_digital_192k = -1; /* BOOLEAN */ +static int hf_t124_digital_256k = -1; /* BOOLEAN */ +static int hf_t124_digital_320k = -1; /* BOOLEAN */ +static int hf_t124_digital_384k = -1; /* BOOLEAN */ +static int hf_t124_digital_512k = -1; /* BOOLEAN */ +static int hf_t124_digital_768k = -1; /* BOOLEAN */ +static int hf_t124_digital_1152k = -1; /* BOOLEAN */ +static int hf_t124_digital_1472k = -1; /* BOOLEAN */ +static int hf_t124_digital_1536k = -1; /* BOOLEAN */ +static int hf_t124_digital_1920k = -1; /* BOOLEAN */ +static int hf_t124_packet_mode = -1; /* BOOLEAN */ +static int hf_t124_frame_mode = -1; /* BOOLEAN */ +static int hf_t124_atm = -1; /* BOOLEAN */ +static int hf_t124_internationalNumber = -1; /* DiallingString */ +static int hf_t124_subAddress = -1; /* SubAddressString */ +static int hf_t124_extraDialling = -1; /* ExtraDiallingString */ +static int hf_t124_highLayerCompatibility = -1; /* T_highLayerCompatibility */ +static int hf_t124_telephony3kHz = -1; /* BOOLEAN */ +static int hf_t124_telephony7kHz = -1; /* BOOLEAN */ +static int hf_t124_videotelephony = -1; /* BOOLEAN */ +static int hf_t124_videoconference = -1; /* BOOLEAN */ +static int hf_t124_audiographic = -1; /* BOOLEAN */ +static int hf_t124_audiovisual = -1; /* BOOLEAN */ +static int hf_t124_multimedia = -1; /* BOOLEAN */ +static int hf_t124_transportConnection = -1; /* T_transportConnection */ +static int hf_t124_nsapAddress = -1; /* OCTET_STRING_SIZE_1_20 */ +static int hf_t124_transportSelector = -1; /* OCTET_STRING */ +static int hf_t124_nonStandard = -1; /* NonStandardParameter */ +static int hf_t124_audio = -1; /* BOOLEAN */ +static int hf_t124_video = -1; /* BOOLEAN */ +static int hf_t124_data_01 = -1; /* BOOLEAN */ +static int hf_t124_h221 = -1; /* NULL */ +static int hf_t124_h244 = -1; /* NULL */ +static int hf_t124_iso_iec_13871 = -1; /* NULL */ +static int hf_t124_simpleProfile = -1; /* T_simpleProfile */ +static int hf_t124_speech_01 = -1; /* NULL */ +static int hf_t124_telephony_3kHz = -1; /* NULL */ +static int hf_t124_telephony_7kHz = -1; /* NULL */ +static int hf_t124_voice_band_01 = -1; /* NULL */ +static int hf_t124_frameRelay = -1; /* NULL */ +static int hf_t124_t123_pstn_basic = -1; /* NULL */ +static int hf_t124_t123_psdn_basic = -1; /* NULL */ +static int hf_t124_t123_b_isdn_basic = -1; /* NULL */ +static int hf_t124_multimediaProfile = -1; /* T_multimediaProfile */ +static int hf_t124_profile = -1; /* T_profile */ +static int hf_t124_h310 = -1; /* NULL */ +static int hf_t124_h320 = -1; /* NULL */ +static int hf_t124_h321 = -1; /* NULL */ +static int hf_t124_h322 = -1; /* NULL */ +static int hf_t124_h323 = -1; /* NULL */ +static int hf_t124_h324 = -1; /* NULL */ +static int hf_t124_h324m = -1; /* NULL */ +static int hf_t124_asvd = -1; /* NULL */ +static int hf_t124_dsvd = -1; /* NULL */ +static int hf_t124_t120Data = -1; /* BOOLEAN */ +static int hf_t124_dsmccDownloadProfile = -1; /* NULL */ +static int hf_t124_networkAddress = -1; /* ExtendedE164NetworkAddress */ +static int hf_t124_iSDNCircuitTypes = -1; /* ISDNCircuitTypes */ +static int hf_t124_iSDNCircuitTypes_item = -1; /* ISDNCircuitTypes_item */ +static int hf_t124_digital_64k_01 = -1; /* NULL */ +static int hf_t124_digital_2x64k = -1; /* NULL */ +static int hf_t124_digital_384k_01 = -1; /* NULL */ +static int hf_t124_digital_1536 = -1; /* NULL */ +static int hf_t124_digital_1920k_01 = -1; /* NULL */ +static int hf_t124_multirate_base_64k = -1; /* INTEGER_1_30 */ +static int hf_t124_iSDNHighLayerCompatibility = -1; /* ISDNHighLayerCompatibility */ +static int hf_t124_circuitTypes = -1; /* T_circuitTypes */ +static int hf_t124_circuitTypes_item = -1; /* T_circuitTypes_item */ +static int hf_t124_digital_56k_01 = -1; /* NULL */ +static int hf_t124_pSDNNetworkAddress = -1; /* PSDNNetworkAddress */ +static int hf_t124_extendedE164NetworkAddress = -1; /* ExtendedE164NetworkAddress */ +static int hf_t124_transportAddress = -1; /* TransportAddress */ +static int hf_t124_networkAddress_01 = -1; /* T_networkAddress */ +static int hf_t124_extendedE164 = -1; /* ExtendedE164NetworkAddress */ +static int hf_t124_nsapAddress_01 = -1; /* TransportAddress */ +static int hf_t124_maxTransferRate = -1; /* INTEGER_0_MAX */ +static int hf_t124_gstnConnection = -1; /* GSTNConnection */ +static int hf_t124_isdnConnection = -1; /* ISDNConnection */ +static int hf_t124_csdnConnection = -1; /* CSDNConnection */ +static int hf_t124_psdnConnection = -1; /* PSDNConnection */ +static int hf_t124_atmConnection = -1; /* ATMConnection */ +static int hf_t124_NetworkAddressV2_item = -1; /* NetworkAddressV2_item */ +static int hf_t124_networkConnection = -1; /* T_networkConnection */ +static int hf_t124_singleConnection = -1; /* NetworkConnection */ +static int hf_t124_aggregatedConnections = -1; /* T_aggregatedConnections */ +static int hf_t124_connectionList = -1; /* T_connectionList */ +static int hf_t124_connectionList_item = -1; /* T_connectionList_item */ +static int hf_t124_aggregationMethods = -1; /* SET_OF_ChannelAggregationMethod */ +static int hf_t124_aggregationMethods_item = -1; /* ChannelAggregationMethod */ +static int hf_t124_profiles = -1; /* SET_OF_Profile */ +static int hf_t124_profiles_item = -1; /* Profile */ +static int hf_t124_mediaConcerned = -1; /* MediaList */ +static int hf_t124_managementDevice = -1; /* BOOLEAN */ +static int hf_t124_peripheralDevice = -1; /* BOOLEAN */ +static int hf_t124_callingNode = -1; /* NULL */ +static int hf_t124_calledNode = -1; /* NULL */ +static int hf_t124_unknown = -1; /* INTEGER_0_4294967295 */ +static int hf_t124_h243NodeID = -1; /* OCTET_STRING_SIZE_2 */ +static int hf_t124_conferenceName = -1; /* ConferenceName */ +static int hf_t124_conferenceNameModifier = -1; /* ConferenceNameModifier */ +static int hf_t124_conferenceDescription = -1; /* TextString */ +static int hf_t124_lockedConference = -1; /* BOOLEAN */ +static int hf_t124_passwordInTheClearRequired = -1; /* BOOLEAN */ +static int hf_t124_networkAddress_02 = -1; /* NetworkAddress */ +static int hf_t124_defaultConferenceFlag = -1; /* BOOLEAN */ +static int hf_t124_conferenceMode = -1; /* ConferenceMode */ +static int hf_t124_superiorNode = -1; /* UserID */ +static int hf_t124_nodeType = -1; /* NodeType */ +static int hf_t124_nodeProperties = -1; /* NodeProperties */ +static int hf_t124_nodeName = -1; /* TextString */ +static int hf_t124_participantsList = -1; /* SEQUENCE_OF_TextString */ +static int hf_t124_participantsList_item = -1; /* TextString */ +static int hf_t124_siteInformation = -1; /* TextString */ +static int hf_t124_alternativeNodeID = -1; /* AlternativeNodeID */ +static int hf_t124_userData = -1; /* UserData */ +static int hf_t124_nodeCategory = -1; /* NodeCategory */ +static int hf_t124_networkAddressV2 = -1; /* NetworkAddressV2 */ +static int hf_t124_applicationProtocolKey = -1; /* Key */ +static int hf_t124_sessionID = -1; /* ChannelID */ +static int hf_t124_applicationActive = -1; /* BOOLEAN */ +static int hf_t124_conductingOperationCapable = -1; /* BOOLEAN */ +static int hf_t124_startupChannel = -1; /* ChannelType */ +static int hf_t124_applicationUserID = -1; /* UserID */ +static int hf_t124_nonCollapsingCapabilities = -1; /* T_nonCollapsingCapabilities */ +static int hf_t124_nonCollapsingCapabilities_item = -1; /* T_nonCollapsingCapabilities_item */ +static int hf_t124_capabilityID = -1; /* CapabilityID */ +static int hf_t124_applicationData = -1; /* OCTET_STRING */ +static int hf_t124_standard = -1; /* INTEGER_0_65535 */ +static int hf_t124_nonStandard_01 = -1; /* Key */ +static int hf_t124_logical = -1; /* NULL */ +static int hf_t124_unsignedMin = -1; /* INTEGER_0_MAX */ +static int hf_t124_unsignedMax = -1; /* INTEGER_0_MAX */ +static int hf_t124_sessionKey = -1; /* SessionKey */ +static int hf_t124_expectedCapabilitySet = -1; /* T_expectedCapabilitySet */ +static int hf_t124_expectedCapabilitySet_item = -1; /* T_expectedCapabilitySet_item */ +static int hf_t124_capabilityClass = -1; /* CapabilityClass */ +static int hf_t124_mandatoryFlag = -1; /* BOOLEAN */ +static int hf_t124_resourceID = -1; /* OCTET_STRING_SIZE_0_64 */ +static int hf_t124_channelID = -1; /* DynamicChannelID */ +static int hf_t124_tokenID = -1; /* DynamicTokenID */ +static int hf_t124_parameter = -1; /* OCTET_STRING_SIZE_0_64 */ +static int hf_t124_vacant = -1; /* NULL */ +static int hf_t124_owned = -1; /* T_owned */ +static int hf_t124_nodeID = -1; /* UserID */ +static int hf_t124_entityID = -1; /* EntityID */ +static int hf_t124_notOwned = -1; /* NULL */ +static int hf_t124_tag = -1; /* INTEGER */ +static int hf_t124_convenerPassword = -1; /* Password */ +static int hf_t124_password = -1; /* Password */ +static int hf_t124_listedConference = -1; /* BOOLEAN */ +static int hf_t124_conductibleConference = -1; /* BOOLEAN */ +static int hf_t124_terminationMethod = -1; /* TerminationMethod */ +static int hf_t124_conductorPrivileges = -1; /* SET_OF_Privilege */ +static int hf_t124_conductorPrivileges_item = -1; /* Privilege */ +static int hf_t124_conductedPrivileges = -1; /* SET_OF_Privilege */ +static int hf_t124_conductedPrivileges_item = -1; /* Privilege */ +static int hf_t124_nonConductedPrivileges = -1; /* SET_OF_Privilege */ +static int hf_t124_nonConductedPrivileges_item = -1; /* Privilege */ +static int hf_t124_callerIdentifier = -1; /* TextString */ +static int hf_t124_conferencePriority = -1; /* ConferencePriority */ +static int hf_t124_result = -1; /* T_result */ +static int hf_t124_asymmetryIndicator = -1; /* AsymmetryIndicator */ +static int hf_t124_conferenceList = -1; /* SET_OF_ConferenceDescriptor */ +static int hf_t124_conferenceList_item = -1; /* ConferenceDescriptor */ +static int hf_t124_queryResponseResult = -1; /* QueryResponseResult */ +static int hf_t124_waitForInvitationFlag = -1; /* BOOLEAN */ +static int hf_t124_noUnlistedConferenceFlag = -1; /* BOOLEAN */ +static int hf_t124_conferenceName_01 = -1; /* ConferenceNameSelector */ +static int hf_t124_password_01 = -1; /* PasswordChallengeRequestResponse */ +static int hf_t124_convenerPassword_01 = -1; /* PasswordSelector */ +static int hf_t124_topNodeID = -1; /* UserID */ +static int hf_t124_conferenceNameAlias = -1; /* ConferenceNameSelector */ +static int hf_t124_joinResponseResult = -1; /* JoinResponseResult */ +static int hf_t124_inviteResponseResult = -1; /* InviteResponseResult */ +static int hf_t124_requestingNode = -1; /* UserID */ +static int hf_t124_addingMCU = -1; /* UserID */ +static int hf_t124_addResponseResult = -1; /* AddResponseResult */ +static int hf_t124_lockResponseResult = -1; /* LockResponseResult */ +static int hf_t124_unlockResponseResult = -1; /* UnlockResponseResult */ +static int hf_t124_terminateRequestReason = -1; /* TerminateRequestReason */ +static int hf_t124_terminateResponseResult = -1; /* TerminateResponseResult */ +static int hf_t124_terminateIndicationReason = -1; /* TerminateIndicationReason */ +static int hf_t124_nodeToEject = -1; /* UserID */ +static int hf_t124_ejectUserRequestReason = -1; /* EjectUserRequestReason */ +static int hf_t124_ejectUserResponseResult = -1; /* EjectUserResponseResult */ +static int hf_t124_reason = -1; /* T_reason */ +static int hf_t124_transferringNodes = -1; /* SET_SIZE_1_65536_OF_UserID */ +static int hf_t124_transferringNodes_item = -1; /* UserID */ +static int hf_t124_password_02 = -1; /* PasswordSelector */ +static int hf_t124_transferResponseResult = -1; /* TransferResponseResult */ +static int hf_t124_fullRefresh = -1; /* BOOLEAN */ +static int hf_t124_nodeInformation = -1; /* T_nodeInformation */ +static int hf_t124_nodeRecordList = -1; /* T_nodeRecordList */ +static int hf_t124_noChange = -1; /* NULL */ +static int hf_t124_nodeRefresh = -1; /* NodeRefresh */ +static int hf_t124_nodeRefresh_item = -1; /* T_nodeRefresh_item */ +static int hf_t124_nodeRecord = -1; /* NodeRecord */ +static int hf_t124_update = -1; /* T_update */ +static int hf_t124_update_item = -1; /* T_update_item */ +static int hf_t124_nodeUpdate = -1; /* T_nodeUpdate */ +static int hf_t124_addRecord = -1; /* NodeRecord */ +static int hf_t124_replaceRecord = -1; /* NodeRecord */ +static int hf_t124_removeRecord = -1; /* NULL */ +static int hf_t124_rosterInstanceNumber = -1; /* INTEGER_0_65535 */ +static int hf_t124_nodesAdded = -1; /* BOOLEAN */ +static int hf_t124_nodesRemoved = -1; /* BOOLEAN */ +static int hf_t124_applicationInformation = -1; /* T_applicationInformation */ +static int hf_t124_applicationInformation_item = -1; /* T_applicationInformation_item */ +static int hf_t124_applicationRecordList = -1; /* T_applicationRecordList */ +static int hf_t124_applicationRefresh = -1; /* ApplicationRefresh */ +static int hf_t124_applicationRefresh_item = -1; /* T_applicationRefresh_item */ +static int hf_t124_applicationRecord = -1; /* ApplicationRecord */ +static int hf_t124_applicationUpdate = -1; /* ApplicationUpdate */ +static int hf_t124_applicationUpdateItem = -1; /* ApplicationUpdateItem */ +static int hf_t124_applicationUpdate_01 = -1; /* T_applicationUpdate */ +static int hf_t124_addRecord_01 = -1; /* ApplicationRecord */ +static int hf_t124_replaceRecord_01 = -1; /* ApplicationRecord */ +static int hf_t124_applicationCapabilitiesList = -1; /* T_applicationCapabilitiesList */ +static int hf_t124_refresh = -1; /* T_refresh */ +static int hf_t124_refresh_item = -1; /* T_refresh_item */ +static int hf_t124_numberOfEntities = -1; /* INTEGER_1_65536 */ +static int hf_t124_peerEntitiesAdded = -1; /* BOOLEAN */ +static int hf_t124_peerEntitiesRemoved = -1; /* BOOLEAN */ +static int hf_t124_applicationProtocolEntiyList = -1; /* SET_SIZE_1_65536_OF_ApplicationInvokeSpecifier */ +static int hf_t124_applicationProtocolEntiyList_item = -1; /* ApplicationInvokeSpecifier */ +static int hf_t124_destinationNodes = -1; /* SET_SIZE_1_65536_OF_UserID */ +static int hf_t124_destinationNodes_item = -1; /* UserID */ +static int hf_t124_key_01 = -1; /* RegistryKey */ +static int hf_t124_modificationRights = -1; /* RegistryModificationRights */ +static int hf_t124_item = -1; /* RegistryItem */ +static int hf_t124_owner = -1; /* RegistryEntryOwner */ +static int hf_t124_numberOfHandles = -1; /* INTEGER_1_1024 */ +static int hf_t124_firstHandle = -1; /* Handle */ +static int hf_t124_allocateHandleResponseResult = -1; /* AllocateHandleResponseResult */ +static int hf_t124_primitiveType = -1; /* T_primitiveType */ +static int hf_t124_result_01 = -1; /* T_result_01 */ +static int hf_t124_conductingNode = -1; /* UserID */ +static int hf_t124_grantFlag = -1; /* BOOLEAN */ +static int hf_t124_permissionList = -1; /* SEQUENCE_SIZE_0_65535_OF_UserID */ +static int hf_t124_permissionList_item = -1; /* UserID */ +static int hf_t124_waitingList = -1; /* SEQUENCE_SIZE_1_65536_OF_UserID */ +static int hf_t124_waitingList_item = -1; /* UserID */ +static int hf_t124_timeRemaining = -1; /* Time */ +static int hf_t124_nodeSpecificTimeFlag = -1; /* BOOLEAN */ +static int hf_t124_timeToExtend = -1; /* Time */ +static int hf_t124_message = -1; /* TextString */ +static int hf_t124_request = -1; /* RequestPDU */ +static int hf_t124_data_02 = -1; /* NonStandardParameter */ +static int hf_t124_t124Identifier = -1; /* Key */ +static int hf_t124_connectPDU = -1; /* T_connectPDU */ +static int hf_t124_conferenceCreateRequest = -1; /* ConferenceCreateRequest */ +static int hf_t124_conferenceCreateResponse = -1; /* ConferenceCreateResponse */ +static int hf_t124_conferenceQueryRequest = -1; /* ConferenceQueryRequest */ +static int hf_t124_conferenceQueryResponse = -1; /* ConferenceQueryResponse */ +static int hf_t124_conferenceJoinRequest = -1; /* ConferenceJoinRequest */ +static int hf_t124_conferenceJoinResponse = -1; /* ConferenceJoinResponse */ +static int hf_t124_conferenceInviteRequest = -1; /* ConferenceInviteRequest */ +static int hf_t124_conferenceInviteResponse = -1; /* ConferenceInviteResponse */ +static int hf_t124_conferenceAddRequest = -1; /* ConferenceAddRequest */ +static int hf_t124_conferenceLockRequest = -1; /* ConferenceLockRequest */ +static int hf_t124_conferenceUnlockRequest = -1; /* ConferenceUnlockRequest */ +static int hf_t124_conferenceTerminateRequest = -1; /* ConferenceTerminateRequest */ +static int hf_t124_conferenceEjectUserRequest = -1; /* ConferenceEjectUserRequest */ +static int hf_t124_conferenceTransferRequest = -1; /* ConferenceTransferRequest */ +static int hf_t124_registryRegisterChannelRequest = -1; /* RegistryRegisterChannelRequest */ +static int hf_t124_registryAssignTokenRequest = -1; /* RegistryAssignTokenRequest */ +static int hf_t124_registrySetParameterRequest = -1; /* RegistrySetParameterRequest */ +static int hf_t124_registryRetrieveEntryRequest = -1; /* RegistryRetrieveEntryRequest */ +static int hf_t124_registryDeleteEntryRequest = -1; /* RegistryDeleteEntryRequest */ +static int hf_t124_registryMonitorEntryRequest = -1; /* RegistryMonitorEntryRequest */ +static int hf_t124_registryAllocateHandleRequest = -1; /* RegistryAllocateHandleRequest */ +static int hf_t124_nonStandardRequest = -1; /* NonStandardPDU */ +static int hf_t124_conferenceAddResponse = -1; /* ConferenceAddResponse */ +static int hf_t124_conferenceLockResponse = -1; /* ConferenceLockResponse */ +static int hf_t124_conferenceUnlockResponse = -1; /* ConferenceUnlockResponse */ +static int hf_t124_conferenceTerminateResponse = -1; /* ConferenceTerminateResponse */ +static int hf_t124_conferenceEjectUserResponse = -1; /* ConferenceEjectUserResponse */ +static int hf_t124_conferenceTransferResponse = -1; /* ConferenceTransferResponse */ +static int hf_t124_registryResponse = -1; /* RegistryResponse */ +static int hf_t124_registryAllocateHandleResponse = -1; /* RegistryAllocateHandleResponse */ +static int hf_t124_functionNotSupportedResponse = -1; /* FunctionNotSupportedResponse */ +static int hf_t124_nonStandardResponse = -1; /* NonStandardPDU */ +static int hf_t124_userIDIndication = -1; /* UserIDIndication */ +static int hf_t124_conferenceLockIndication = -1; /* ConferenceLockIndication */ +static int hf_t124_conferenceUnlockIndication = -1; /* ConferenceUnlockIndication */ +static int hf_t124_conferenceTerminateIndication = -1; /* ConferenceTerminateIndication */ +static int hf_t124_conferenceEjectUserIndication = -1; /* ConferenceEjectUserIndication */ +static int hf_t124_conferenceTransferIndication = -1; /* ConferenceTransferIndication */ +static int hf_t124_rosterUpdateIndication = -1; /* RosterUpdateIndication */ +static int hf_t124_applicationInvokeIndication = -1; /* ApplicationInvokeIndication */ +static int hf_t124_registryMonitorEntryIndication = -1; /* RegistryMonitorEntryIndication */ +static int hf_t124_conductorAssignIndication = -1; /* ConductorAssignIndication */ +static int hf_t124_conductorReleaseIndication = -1; /* ConductorReleaseIndication */ +static int hf_t124_conductorPermissionAskIndication = -1; /* ConductorPermissionAskIndication */ +static int hf_t124_conductorPermissionGrantIndication = -1; /* ConductorPermissionGrantIndication */ +static int hf_t124_conferenceTimeRemainingIndication = -1; /* ConferenceTimeRemainingIndication */ +static int hf_t124_conferenceTimeInquireIndication = -1; /* ConferenceTimeInquireIndication */ +static int hf_t124_conferenceTimeExtendIndication = -1; /* ConferenceTimeExtendIndication */ +static int hf_t124_conferenceAssistanceIndication = -1; /* ConferenceAssistanceIndication */ +static int hf_t124_textMessageIndication = -1; /* TextMessageIndication */ +static int hf_t124_nonStandardIndication = -1; /* NonStandardPDU */ +static int hf_t124_maxChannelIds = -1; /* INTEGER_0_MAX */ +static int hf_t124_maxUserIds = -1; /* INTEGER_0_MAX */ +static int hf_t124_maxTokenIds = -1; /* INTEGER_0_MAX */ +static int hf_t124_numPriorities = -1; /* INTEGER_0_MAX */ +static int hf_t124_minThroughput = -1; /* INTEGER_0_MAX */ +static int hf_t124_maxHeight = -1; /* INTEGER_0_MAX */ +static int hf_t124_maxMCSPDUsize = -1; /* INTEGER_0_MAX */ +static int hf_t124_protocolVersion = -1; /* INTEGER_0_MAX */ +static int hf_t124_callingDomainSelector = -1; /* OCTET_STRING */ +static int hf_t124_calledDomainSelector = -1; /* OCTET_STRING */ +static int hf_t124_upwardFlag = -1; /* BOOLEAN */ +static int hf_t124_targetParameters = -1; /* DomainParameters */ +static int hf_t124_minimumParameters = -1; /* DomainParameters */ +static int hf_t124_maximumParameters = -1; /* DomainParameters */ +static int hf_t124_userData_01 = -1; /* OCTET_STRING */ +static int hf_t124_result_02 = -1; /* Result */ +static int hf_t124_calledConnectId = -1; /* INTEGER_0_MAX */ +static int hf_t124_domainParameters = -1; /* DomainParameters */ +static int hf_t124_dataPriority = -1; /* DataPriority */ +static int hf_t124_heightLimit = -1; /* INTEGER_0_MAX */ +static int hf_t124_subHeight = -1; /* INTEGER_0_MAX */ +static int hf_t124_subInterval = -1; /* INTEGER_0_MAX */ +static int hf_t124_static = -1; /* T_static */ +static int hf_t124_channelId = -1; /* StaticChannelId */ +static int hf_t124_userId = -1; /* T_userId */ +static int hf_t124_joined = -1; /* BOOLEAN */ +static int hf_t124_userId_01 = -1; /* UserId */ +static int hf_t124_private = -1; /* T_private */ +static int hf_t124_channelId_01 = -1; /* PrivateChannelId */ +static int hf_t124_manager = -1; /* UserId */ +static int hf_t124_admitted = -1; /* SET_OF_UserId */ +static int hf_t124_admitted_item = -1; /* UserId */ +static int hf_t124_assigned = -1; /* T_assigned */ +static int hf_t124_channelId_02 = -1; /* AssignedChannelId */ +static int hf_t124_mergeChannels = -1; /* SET_OF_ChannelAttributes */ +static int hf_t124_mergeChannels_item = -1; /* ChannelAttributes */ +static int hf_t124_purgeChannelIds = -1; /* SET_OF_ChannelId */ +static int hf_t124_purgeChannelIds_item = -1; /* ChannelId */ +static int hf_t124_detachUserIds = -1; /* SET_OF_UserId */ +static int hf_t124_detachUserIds_item = -1; /* UserId */ +static int hf_t124_grabbed = -1; /* T_grabbed */ +static int hf_t124_tokenId = -1; /* TokenId */ +static int hf_t124_grabber = -1; /* UserId */ +static int hf_t124_inhibited = -1; /* T_inhibited */ +static int hf_t124_inhibitors = -1; /* SET_OF_UserId */ +static int hf_t124_inhibitors_item = -1; /* UserId */ +static int hf_t124_giving = -1; /* T_giving */ +static int hf_t124_recipient = -1; /* UserId */ +static int hf_t124_ungivable = -1; /* T_ungivable */ +static int hf_t124_given = -1; /* T_given */ +static int hf_t124_mergeTokens = -1; /* SET_OF_TokenAttributes */ +static int hf_t124_mergeTokens_item = -1; /* TokenAttributes */ +static int hf_t124_purgeTokenIds = -1; /* SET_OF_TokenId */ +static int hf_t124_purgeTokenIds_item = -1; /* TokenId */ +static int hf_t124_reason_01 = -1; /* Reason */ +static int hf_t124_diagnostic = -1; /* Diagnostic */ +static int hf_t124_initialOctets = -1; /* OCTET_STRING */ +static int hf_t124_initiator = -1; /* UserId */ +static int hf_t124_userIds = -1; /* SET_OF_UserId */ +static int hf_t124_userIds_item = -1; /* UserId */ +static int hf_t124_channelId_03 = -1; /* ChannelId */ +static int hf_t124_requested = -1; /* ChannelId */ +static int hf_t124_channelIds = -1; /* SET_OF_ChannelId */ +static int hf_t124_channelIds_item = -1; /* ChannelId */ +static int hf_t124_segmentation = -1; /* Segmentation */ +static int hf_t124_userData_02 = -1; /* T_userData */ +static int hf_t124_userData_03 = -1; /* T_userData_01 */ +static int hf_t124_tokenStatus = -1; /* TokenStatus */ +static int hf_t124_connect_initial = -1; /* Connect_Initial */ +static int hf_t124_connect_response = -1; /* Connect_Response */ +static int hf_t124_connect_additional = -1; /* Connect_Additional */ +static int hf_t124_connect_result = -1; /* Connect_Result */ +static int hf_t124_plumbDomainIndication = -1; /* PlumbDomainIndication */ +static int hf_t124_erectDomainRequest = -1; /* ErectDomainRequest */ +static int hf_t124_mergeChannelsRequest = -1; /* MergeChannelsRequest */ +static int hf_t124_mergeChannelsConfirm = -1; /* MergeChannelsConfirm */ +static int hf_t124_purgeChannelsIndication = -1; /* PurgeChannelsIndication */ +static int hf_t124_mergeTokensRequest = -1; /* MergeTokensRequest */ +static int hf_t124_mergeTokensConfirm = -1; /* MergeTokensConfirm */ +static int hf_t124_purgeTokensIndication = -1; /* PurgeTokensIndication */ +static int hf_t124_disconnectProviderUltimatum = -1; /* DisconnectProviderUltimatum */ +static int hf_t124_rejectMCSPDUUltimatum = -1; /* RejectMCSPDUUltimatum */ +static int hf_t124_attachUserRequest = -1; /* AttachUserRequest */ +static int hf_t124_attachUserConfirm = -1; /* AttachUserConfirm */ +static int hf_t124_detachUserRequest = -1; /* DetachUserRequest */ +static int hf_t124_detachUserIndication = -1; /* DetachUserIndication */ +static int hf_t124_channelJoinRequest = -1; /* ChannelJoinRequest */ +static int hf_t124_channelJoinConfirm = -1; /* ChannelJoinConfirm */ +static int hf_t124_channelLeaveRequest = -1; /* ChannelLeaveRequest */ +static int hf_t124_channelConveneRequest = -1; /* ChannelConveneRequest */ +static int hf_t124_channelConveneConfirm = -1; /* ChannelConveneConfirm */ +static int hf_t124_channelDisbandRequest = -1; /* ChannelDisbandRequest */ +static int hf_t124_channelDisbandIndication = -1; /* ChannelDisbandIndication */ +static int hf_t124_channelAdmitRequest = -1; /* ChannelAdmitRequest */ +static int hf_t124_channelAdmitIndication = -1; /* ChannelAdmitIndication */ +static int hf_t124_channelExpelRequest = -1; /* ChannelExpelRequest */ +static int hf_t124_channelExpelIndication = -1; /* ChannelExpelIndication */ +static int hf_t124_sendDataRequest = -1; /* SendDataRequest */ +static int hf_t124_sendDataIndication = -1; /* SendDataIndication */ +static int hf_t124_uniformSendDataRequest = -1; /* UniformSendDataRequest */ +static int hf_t124_uniformSendDataIndication = -1; /* UniformSendDataIndication */ +static int hf_t124_tokenGrabRequest = -1; /* TokenGrabRequest */ +static int hf_t124_tokenGrabConfirm = -1; /* TokenGrabConfirm */ +static int hf_t124_tokenInhibitRequest = -1; /* TokenInhibitRequest */ +static int hf_t124_tokenInhibitConfirm = -1; /* TokenInhibitConfirm */ +static int hf_t124_tokenGiveRequest = -1; /* TokenGiveRequest */ +static int hf_t124_tokenGiveIndication = -1; /* TokenGiveIndication */ +static int hf_t124_tokenGiveResponse = -1; /* TokenGiveResponse */ +static int hf_t124_tokenGiveConfirm = -1; /* TokenGiveConfirm */ +static int hf_t124_tokenPleaseRequest = -1; /* TokenPleaseRequest */ +static int hf_t124_tokenPleaseIndication = -1; /* TokenPleaseIndication */ +static int hf_t124_tokenReleaseRequest = -1; /* TokenReleaseRequest */ +static int hf_t124_tokenReleaseConfirm = -1; /* TokenReleaseConfirm */ +static int hf_t124_tokenTestRequest = -1; /* TokenTestRequest */ +static int hf_t124_tokenTestConfirm = -1; /* TokenTestConfirm */ +/* named bits */ +static int hf_t124_Segmentation_begin = -1; +static int hf_t124_Segmentation_end = -1; + +/*--- End of included file: packet-t124-hf.c ---*/ +#line 49 "../../asn1/t124/packet-t124-template.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 const char *t124Identifier = NULL; /* extensions identifier */ +static tvbuff_t *t124NSIdentifier = NULL; /* extensions non-standard identifier */ +static dissector_table_t t124_ns_dissector_table=NULL; +static dissector_table_t t124_sd_dissector_table=NULL; + + +/*--- Included file: packet-t124-ett.c ---*/ +#line 1 "../../asn1/t124/packet-t124-ett.c" +static gint ett_t124_Key = -1; +static gint ett_t124_NonStandardParameter = -1; +static gint ett_t124_UserData = -1; +static gint ett_t124_UserData_item = -1; +static gint ett_t124_Password = -1; +static gint ett_t124_PasswordSelector = -1; +static gint ett_t124_ChallengeResponseItem = -1; +static gint ett_t124_ChallengeResponseAlgorithm = -1; +static gint ett_t124_ChallengeItem = -1; +static gint ett_t124_ChallengeRequest = -1; +static gint ett_t124_SET_OF_ChallengeItem = -1; +static gint ett_t124_ChallengeResponse = -1; +static gint ett_t124_PasswordChallengeRequestResponse = -1; +static gint ett_t124_T_challengeRequestResponse = -1; +static gint ett_t124_ConferenceName = -1; +static gint ett_t124_ConferenceNameSelector = -1; +static gint ett_t124_ConferencePriorityScheme = -1; +static gint ett_t124_ConferencePriority = -1; +static gint ett_t124_NodeCategory = -1; +static gint ett_t124_ConferenceMode = -1; +static gint ett_t124_NetworkAddress = -1; +static gint ett_t124_NetworkAddress_item = -1; +static gint ett_t124_T_aggregatedChannel = -1; +static gint ett_t124_T_transferModes = -1; +static gint ett_t124_T_highLayerCompatibility = -1; +static gint ett_t124_T_transportConnection = -1; +static gint ett_t124_MediaList = -1; +static gint ett_t124_ChannelAggregationMethod = -1; +static gint ett_t124_Profile = -1; +static gint ett_t124_T_simpleProfile = -1; +static gint ett_t124_T_multimediaProfile = -1; +static gint ett_t124_T_profile = -1; +static gint ett_t124_ExtendedE164NetworkAddress = -1; +static gint ett_t124_TransportAddress = -1; +static gint ett_t124_GSTNConnection = -1; +static gint ett_t124_ISDNConnection = -1; +static gint ett_t124_ISDNCircuitTypes = -1; +static gint ett_t124_ISDNCircuitTypes_item = -1; +static gint ett_t124_ISDNHighLayerCompatibility = -1; +static gint ett_t124_CSDNConnection = -1; +static gint ett_t124_T_circuitTypes = -1; +static gint ett_t124_T_circuitTypes_item = -1; +static gint ett_t124_PSDNConnection = -1; +static gint ett_t124_PSDNNetworkAddress = -1; +static gint ett_t124_ATMConnection = -1; +static gint ett_t124_T_networkAddress = -1; +static gint ett_t124_NetworkConnection = -1; +static gint ett_t124_NetworkAddressV2 = -1; +static gint ett_t124_NetworkAddressV2_item = -1; +static gint ett_t124_T_networkConnection = -1; +static gint ett_t124_T_aggregatedConnections = -1; +static gint ett_t124_T_connectionList = -1; +static gint ett_t124_T_connectionList_item = -1; +static gint ett_t124_SET_OF_ChannelAggregationMethod = -1; +static gint ett_t124_SET_OF_Profile = -1; +static gint ett_t124_NodeProperties = -1; +static gint ett_t124_AsymmetryIndicator = -1; +static gint ett_t124_AlternativeNodeID = -1; +static gint ett_t124_ConferenceDescriptor = -1; +static gint ett_t124_NodeRecord = -1; +static gint ett_t124_SEQUENCE_OF_TextString = -1; +static gint ett_t124_SessionKey = -1; +static gint ett_t124_ApplicationRecord = -1; +static gint ett_t124_T_nonCollapsingCapabilities = -1; +static gint ett_t124_T_nonCollapsingCapabilities_item = -1; +static gint ett_t124_CapabilityID = -1; +static gint ett_t124_CapabilityClass = -1; +static gint ett_t124_ApplicationInvokeSpecifier = -1; +static gint ett_t124_T_expectedCapabilitySet = -1; +static gint ett_t124_T_expectedCapabilitySet_item = -1; +static gint ett_t124_RegistryKey = -1; +static gint ett_t124_RegistryItem = -1; +static gint ett_t124_RegistryEntryOwner = -1; +static gint ett_t124_T_owned = -1; +static gint ett_t124_UserIDIndication = -1; +static gint ett_t124_ConferenceCreateRequest = -1; +static gint ett_t124_SET_OF_Privilege = -1; +static gint ett_t124_ConferenceCreateResponse = -1; +static gint ett_t124_ConferenceQueryRequest = -1; +static gint ett_t124_ConferenceQueryResponse = -1; +static gint ett_t124_SET_OF_ConferenceDescriptor = -1; +static gint ett_t124_ConferenceJoinRequest = -1; +static gint ett_t124_ConferenceJoinResponse = -1; +static gint ett_t124_ConferenceInviteRequest = -1; +static gint ett_t124_ConferenceInviteResponse = -1; +static gint ett_t124_ConferenceAddRequest = -1; +static gint ett_t124_ConferenceAddResponse = -1; +static gint ett_t124_ConferenceLockRequest = -1; +static gint ett_t124_ConferenceLockResponse = -1; +static gint ett_t124_ConferenceLockIndication = -1; +static gint ett_t124_ConferenceUnlockRequest = -1; +static gint ett_t124_ConferenceUnlockResponse = -1; +static gint ett_t124_ConferenceUnlockIndication = -1; +static gint ett_t124_ConferenceTerminateRequest = -1; +static gint ett_t124_ConferenceTerminateResponse = -1; +static gint ett_t124_ConferenceTerminateIndication = -1; +static gint ett_t124_ConferenceEjectUserRequest = -1; +static gint ett_t124_ConferenceEjectUserResponse = -1; +static gint ett_t124_ConferenceEjectUserIndication = -1; +static gint ett_t124_ConferenceTransferRequest = -1; +static gint ett_t124_SET_SIZE_1_65536_OF_UserID = -1; +static gint ett_t124_ConferenceTransferResponse = -1; +static gint ett_t124_ConferenceTransferIndication = -1; +static gint ett_t124_RosterUpdateIndication = -1; +static gint ett_t124_T_nodeInformation = -1; +static gint ett_t124_T_nodeRecordList = -1; +static gint ett_t124_NodeRefresh = -1; +static gint ett_t124_T_nodeRefresh_item = -1; +static gint ett_t124_T_update = -1; +static gint ett_t124_T_update_item = -1; +static gint ett_t124_T_nodeUpdate = -1; +static gint ett_t124_T_applicationInformation = -1; +static gint ett_t124_T_applicationInformation_item = -1; +static gint ett_t124_T_applicationRecordList = -1; +static gint ett_t124_ApplicationRefresh = -1; +static gint ett_t124_T_applicationRefresh_item = -1; +static gint ett_t124_ApplicationUpdate = -1; +static gint ett_t124_ApplicationUpdateItem = -1; +static gint ett_t124_T_applicationUpdate = -1; +static gint ett_t124_T_applicationCapabilitiesList = -1; +static gint ett_t124_T_refresh = -1; +static gint ett_t124_T_refresh_item = -1; +static gint ett_t124_ApplicationInvokeIndication = -1; +static gint ett_t124_SET_SIZE_1_65536_OF_ApplicationInvokeSpecifier = -1; +static gint ett_t124_RegistryRegisterChannelRequest = -1; +static gint ett_t124_RegistryAssignTokenRequest = -1; +static gint ett_t124_RegistrySetParameterRequest = -1; +static gint ett_t124_RegistryRetrieveEntryRequest = -1; +static gint ett_t124_RegistryDeleteEntryRequest = -1; +static gint ett_t124_RegistryMonitorEntryRequest = -1; +static gint ett_t124_RegistryMonitorEntryIndication = -1; +static gint ett_t124_RegistryAllocateHandleRequest = -1; +static gint ett_t124_RegistryAllocateHandleResponse = -1; +static gint ett_t124_RegistryResponse = -1; +static gint ett_t124_ConductorAssignIndication = -1; +static gint ett_t124_ConductorReleaseIndication = -1; +static gint ett_t124_ConductorPermissionAskIndication = -1; +static gint ett_t124_ConductorPermissionGrantIndication = -1; +static gint ett_t124_SEQUENCE_SIZE_0_65535_OF_UserID = -1; +static gint ett_t124_SEQUENCE_SIZE_1_65536_OF_UserID = -1; +static gint ett_t124_ConferenceTimeRemainingIndication = -1; +static gint ett_t124_ConferenceTimeInquireIndication = -1; +static gint ett_t124_ConferenceTimeExtendIndication = -1; +static gint ett_t124_ConferenceAssistanceIndication = -1; +static gint ett_t124_TextMessageIndication = -1; +static gint ett_t124_FunctionNotSupportedResponse = -1; +static gint ett_t124_NonStandardPDU = -1; +static gint ett_t124_ConnectData = -1; +static gint ett_t124_ConnectGCCPDU = -1; +static gint ett_t124_RequestPDU = -1; +static gint ett_t124_ResponsePDU = -1; +static gint ett_t124_IndicationPDU = -1; +static gint ett_t124_Segmentation = -1; +static gint ett_t124_DomainParameters = -1; +static gint ett_t124_Connect_Initial = -1; +static gint ett_t124_Connect_Response = -1; +static gint ett_t124_Connect_Additional = -1; +static gint ett_t124_Connect_Result = -1; +static gint ett_t124_PlumbDomainIndication = -1; +static gint ett_t124_ErectDomainRequest = -1; +static gint ett_t124_ChannelAttributes = -1; +static gint ett_t124_T_static = -1; +static gint ett_t124_T_userId = -1; +static gint ett_t124_T_private = -1; +static gint ett_t124_SET_OF_UserId = -1; +static gint ett_t124_T_assigned = -1; +static gint ett_t124_MergeChannelsRequest = -1; +static gint ett_t124_SET_OF_ChannelAttributes = -1; +static gint ett_t124_SET_OF_ChannelId = -1; +static gint ett_t124_MergeChannelsConfirm = -1; +static gint ett_t124_PurgeChannelsIndication = -1; +static gint ett_t124_TokenAttributes = -1; +static gint ett_t124_T_grabbed = -1; +static gint ett_t124_T_inhibited = -1; +static gint ett_t124_T_giving = -1; +static gint ett_t124_T_ungivable = -1; +static gint ett_t124_T_given = -1; +static gint ett_t124_MergeTokensRequest = -1; +static gint ett_t124_SET_OF_TokenAttributes = -1; +static gint ett_t124_SET_OF_TokenId = -1; +static gint ett_t124_MergeTokensConfirm = -1; +static gint ett_t124_PurgeTokensIndication = -1; +static gint ett_t124_DisconnectProviderUltimatum = -1; +static gint ett_t124_RejectMCSPDUUltimatum = -1; +static gint ett_t124_AttachUserRequest = -1; +static gint ett_t124_AttachUserConfirm = -1; +static gint ett_t124_DetachUserRequest = -1; +static gint ett_t124_DetachUserIndication = -1; +static gint ett_t124_ChannelJoinRequest = -1; +static gint ett_t124_ChannelJoinConfirm = -1; +static gint ett_t124_ChannelLeaveRequest = -1; +static gint ett_t124_ChannelConveneRequest = -1; +static gint ett_t124_ChannelConveneConfirm = -1; +static gint ett_t124_ChannelDisbandRequest = -1; +static gint ett_t124_ChannelDisbandIndication = -1; +static gint ett_t124_ChannelAdmitRequest = -1; +static gint ett_t124_ChannelAdmitIndication = -1; +static gint ett_t124_ChannelExpelRequest = -1; +static gint ett_t124_ChannelExpelIndication = -1; +static gint ett_t124_SendDataRequest = -1; +static gint ett_t124_SendDataIndication = -1; +static gint ett_t124_UniformSendDataRequest = -1; +static gint ett_t124_UniformSendDataIndication = -1; +static gint ett_t124_TokenGrabRequest = -1; +static gint ett_t124_TokenGrabConfirm = -1; +static gint ett_t124_TokenInhibitRequest = -1; +static gint ett_t124_TokenInhibitConfirm = -1; +static gint ett_t124_TokenGiveRequest = -1; +static gint ett_t124_TokenGiveIndication = -1; +static gint ett_t124_TokenGiveResponse = -1; +static gint ett_t124_TokenGiveConfirm = -1; +static gint ett_t124_TokenPleaseRequest = -1; +static gint ett_t124_TokenPleaseIndication = -1; +static gint ett_t124_TokenReleaseRequest = -1; +static gint ett_t124_TokenReleaseConfirm = -1; +static gint ett_t124_TokenTestRequest = -1; +static gint ett_t124_TokenTestConfirm = -1; +static gint ett_t124_ConnectMCSPDU = -1; +static gint ett_t124_DomainMCSPDU = -1; + +/*--- End of included file: packet-t124-ett.c ---*/ +#line 66 "../../asn1/t124/packet-t124-template.c" + + +/*--- Included file: packet-t124-fn.c ---*/ +#line 1 "../../asn1/t124/packet-t124-fn.c" + + +static int +dissect_t124_ChannelID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, + 1U, 65535U, NULL, FALSE); + + return offset; +} + + + +static int +dissect_t124_DynamicChannelID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, + 1001U, 65535U, NULL, FALSE); + + return offset; +} + + + +static int +dissect_t124_UserID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_t124_DynamicChannelID(tvb, offset, actx, tree, hf_index); + + return offset; +} + + + +static int +dissect_t124_DynamicTokenID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, + 16384U, 65535U, NULL, FALSE); + + return offset; +} + + + +static int +dissect_t124_Time(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, + -2147483648, 2147483647U, NULL, FALSE); + + return offset; +} + + + +static int +dissect_t124_Handle(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, + 0U, 4294967295U, NULL, FALSE); + + return offset; +} + + + +static int +dissect_t124_H221NonStandardIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 136 "../../asn1/t124/t124.cnf" + + offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, + 4, 255, FALSE, &t124NSIdentifier); + + + + + return offset; +} + + + +static int +dissect_t124_T_object(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_object_identifier_str(tvb, offset, actx, tree, hf_index, &t124Identifier); + + return offset; +} + + +static const value_string t124_Key_vals[] = { + { 0, "object" }, + { 1, "h221NonStandard" }, + { 0, NULL } +}; + +static const per_choice_t Key_choice[] = { + { 0, &hf_t124_object , ASN1_NO_EXTENSIONS , dissect_t124_T_object }, + { 1, &hf_t124_h221NonStandard, ASN1_NO_EXTENSIONS , dissect_t124_H221NonStandardIdentifier }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_Key(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_Key, Key_choice, + NULL); + + return offset; +} + + + +static int +dissect_t124_OCTET_STRING(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, + NO_BOUND, NO_BOUND, FALSE, NULL); + + return offset; +} + + +static const per_sequence_t NonStandardParameter_sequence[] = { + { &hf_t124_key , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_Key }, + { &hf_t124_data , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_OCTET_STRING }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_NonStandardParameter(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_NonStandardParameter, NonStandardParameter_sequence); + + return offset; +} + + + +static int +dissect_t124_TextString(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_BMPString(tvb, offset, actx, tree, hf_index, + 0, 255, FALSE); + + return offset; +} + + + +static int +dissect_t124_SimpleTextString(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_BMPString(tvb, offset, actx, tree, hf_index, + 0, 255, FALSE); + + return offset; +} + + + +static int +dissect_t124_SimpleNumericString(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index, + 1, 255, FALSE, "0123456789", 10, + NULL); + + return offset; +} + + + +static int +dissect_t124_DiallingString(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index, + 1, 16, FALSE, "0123456789", 10, + NULL); + + return offset; +} + + + +static int +dissect_t124_SubAddressString(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index, + 1, 40, FALSE, "0123456789", 10, + NULL); + + return offset; +} + + + +static int +dissect_t124_ExtraDiallingString(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_size_constrained_type(tvb, offset, actx, tree, hf_index, dissect_t124_TextString, + "TextString", 1, 255, FALSE); + + return offset; +} + + + +static int +dissect_t124_T_value(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 68 "../../asn1/t124/t124.cnf" + tvbuff_t *next_tvb = NULL; + guint8 *ns = NULL; + + offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, + NO_BOUND, NO_BOUND, FALSE, &next_tvb); + + + if(next_tvb) { + + ns = tvb_get_string(t124NSIdentifier, 0, tvb_length(t124NSIdentifier)); + if(ns != NULL) { + dissector_try_string(t124_ns_dissector_table, ns, next_tvb, actx->pinfo, top_tree); + g_free(ns); + } + } + + + + return offset; +} + + +static const per_sequence_t UserData_item_sequence[] = { + { &hf_t124_key , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_Key }, + { &hf_t124_value , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_t124_T_value }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_UserData_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_UserData_item, UserData_item_sequence); + + return offset; +} + + +static const per_sequence_t UserData_set_of[1] = { + { &hf_t124_UserData_item , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserData_item }, +}; + +static int +dissect_t124_UserData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_set_of(tvb, offset, actx, tree, hf_index, + ett_t124_UserData, UserData_set_of); + + return offset; +} + + +static const per_sequence_t Password_sequence[] = { + { &hf_t124_numeric , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_SimpleNumericString }, + { &hf_t124_text , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_SimpleTextString }, + { &hf_t124_unicodeText , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_t124_TextString }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_Password(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_Password, Password_sequence); + + return offset; +} + + +static const value_string t124_PasswordSelector_vals[] = { + { 0, "numeric" }, + { 1, "text" }, + { 2, "unicodeText" }, + { 0, NULL } +}; + +static const per_choice_t PasswordSelector_choice[] = { + { 0, &hf_t124_numeric , ASN1_EXTENSION_ROOT , dissect_t124_SimpleNumericString }, + { 1, &hf_t124_text , ASN1_EXTENSION_ROOT , dissect_t124_SimpleTextString }, + { 2, &hf_t124_unicodeText , ASN1_NOT_EXTENSION_ROOT, dissect_t124_TextString }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_PasswordSelector(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_PasswordSelector, PasswordSelector_choice, + NULL); + + return offset; +} + + +static const value_string t124_ChallengeResponseItem_vals[] = { + { 0, "passwordString" }, + { 1, "responseData" }, + { 0, NULL } +}; + +static const per_choice_t ChallengeResponseItem_choice[] = { + { 0, &hf_t124_passwordString , ASN1_EXTENSION_ROOT , dissect_t124_PasswordSelector }, + { 1, &hf_t124_responseData , ASN1_EXTENSION_ROOT , dissect_t124_UserData }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_ChallengeResponseItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_ChallengeResponseItem, ChallengeResponseItem_choice, + NULL); + + return offset; +} + + + +static int +dissect_t124_NULL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_null(tvb, offset, actx, tree, hf_index); + + return offset; +} + + +static const value_string t124_ChallengeResponseAlgorithm_vals[] = { + { 0, "passwordInTheClear" }, + { 1, "nonStandardAlgorithm" }, + { 0, NULL } +}; + +static const per_choice_t ChallengeResponseAlgorithm_choice[] = { + { 0, &hf_t124_passwordInTheClear, ASN1_EXTENSION_ROOT , dissect_t124_NULL }, + { 1, &hf_t124_nonStandardAlgorithm, ASN1_EXTENSION_ROOT , dissect_t124_NonStandardParameter }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_ChallengeResponseAlgorithm(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_ChallengeResponseAlgorithm, ChallengeResponseAlgorithm_choice, + NULL); + + return offset; +} + + +static const per_sequence_t ChallengeItem_sequence[] = { + { &hf_t124_responseAlgorithm, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_ChallengeResponseAlgorithm }, + { &hf_t124_challengeData , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_UserData }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ChallengeItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ChallengeItem, ChallengeItem_sequence); + + return offset; +} + + + +static int +dissect_t124_INTEGER(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_integer(tvb, offset, actx, tree, hf_index, NULL); + + return offset; +} + + +static const per_sequence_t SET_OF_ChallengeItem_set_of[1] = { + { &hf_t124_challengeSet_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_ChallengeItem }, +}; + +static int +dissect_t124_SET_OF_ChallengeItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_set_of(tvb, offset, actx, tree, hf_index, + ett_t124_SET_OF_ChallengeItem, SET_OF_ChallengeItem_set_of); + + return offset; +} + + +static const per_sequence_t ChallengeRequest_sequence[] = { + { &hf_t124_challengeTag , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_INTEGER }, + { &hf_t124_challengeSet , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_SET_OF_ChallengeItem }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ChallengeRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ChallengeRequest, ChallengeRequest_sequence); + + return offset; +} + + +static const per_sequence_t ChallengeResponse_sequence[] = { + { &hf_t124_challengeTag , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_INTEGER }, + { &hf_t124_responseAlgorithm, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_ChallengeResponseAlgorithm }, + { &hf_t124_responseItem , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_ChallengeResponseItem }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ChallengeResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ChallengeResponse, ChallengeResponse_sequence); + + return offset; +} + + +static const per_sequence_t T_challengeRequestResponse_sequence[] = { + { &hf_t124_challengeRequest, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_ChallengeRequest }, + { &hf_t124_challengeResponse, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_ChallengeResponse }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_T_challengeRequestResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_T_challengeRequestResponse, T_challengeRequestResponse_sequence); + + return offset; +} + + +static const value_string t124_PasswordChallengeRequestResponse_vals[] = { + { 0, "passwordInTheClear" }, + { 1, "challengeRequestResponse" }, + { 0, NULL } +}; + +static const per_choice_t PasswordChallengeRequestResponse_choice[] = { + { 0, &hf_t124_passwordInTheClear_01, ASN1_EXTENSION_ROOT , dissect_t124_PasswordSelector }, + { 1, &hf_t124_challengeRequestResponse, ASN1_EXTENSION_ROOT , dissect_t124_T_challengeRequestResponse }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_PasswordChallengeRequestResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_PasswordChallengeRequestResponse, PasswordChallengeRequestResponse_choice, + NULL); + + return offset; +} + + +static const per_sequence_t ConferenceName_sequence[] = { + { &hf_t124_numeric , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_SimpleNumericString }, + { &hf_t124_text , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_SimpleTextString }, + { &hf_t124_unicodeText , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_t124_TextString }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ConferenceName(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConferenceName, ConferenceName_sequence); + + return offset; +} + + +static const value_string t124_ConferenceNameSelector_vals[] = { + { 0, "numeric" }, + { 1, "text" }, + { 2, "unicodeText" }, + { 0, NULL } +}; + +static const per_choice_t ConferenceNameSelector_choice[] = { + { 0, &hf_t124_numeric , ASN1_EXTENSION_ROOT , dissect_t124_SimpleNumericString }, + { 1, &hf_t124_text , ASN1_EXTENSION_ROOT , dissect_t124_SimpleTextString }, + { 2, &hf_t124_unicodeText , ASN1_NOT_EXTENSION_ROOT, dissect_t124_TextString }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_ConferenceNameSelector(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_ConferenceNameSelector, ConferenceNameSelector_choice, + NULL); + + return offset; +} + + + +static int +dissect_t124_ConferenceNameModifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_t124_SimpleNumericString(tvb, offset, actx, tree, hf_index); + + return offset; +} + + +static const value_string t124_Privilege_vals[] = { + { 0, "terminate" }, + { 1, "ejectUser" }, + { 2, "add" }, + { 3, "lockUnlock" }, + { 4, "transfer" }, + { 0, NULL } +}; + + +static int +dissect_t124_Privilege(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, + 5, NULL, TRUE, 0, NULL); + + return offset; +} + + +static const value_string t124_TerminationMethod_vals[] = { + { 0, "automatic" }, + { 1, "manual" }, + { 0, NULL } +}; + + +static int +dissect_t124_TerminationMethod(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, + 2, NULL, TRUE, 0, NULL); + + return offset; +} + + +static const value_string t124_ConferencePriorityScheme_vals[] = { + { 0, "nonStandardScheme" }, + { 0, NULL } +}; + +static const per_choice_t ConferencePriorityScheme_choice[] = { + { 0, &hf_t124_nonStandardScheme, ASN1_EXTENSION_ROOT , dissect_t124_NonStandardParameter }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_ConferencePriorityScheme(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_ConferencePriorityScheme, ConferencePriorityScheme_choice, + NULL); + + return offset; +} + + + +static int +dissect_t124_INTEGER_0_65535(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, + 0U, 65535U, NULL, FALSE); + + return offset; +} + + +static const per_sequence_t ConferencePriority_sequence[] = { + { &hf_t124_priority , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_INTEGER_0_65535 }, + { &hf_t124_scheme , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_ConferencePriorityScheme }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ConferencePriority(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConferencePriority, ConferencePriority_sequence); + + return offset; +} + + +static const value_string t124_NodeCategory_vals[] = { + { 0, "conventional" }, + { 1, "counted" }, + { 2, "anonymous" }, + { 3, "nonStandardCategory" }, + { 0, NULL } +}; + +static const per_choice_t NodeCategory_choice[] = { + { 0, &hf_t124_conventional , ASN1_EXTENSION_ROOT , dissect_t124_NULL }, + { 1, &hf_t124_counted , ASN1_EXTENSION_ROOT , dissect_t124_NULL }, + { 2, &hf_t124_anonymous , ASN1_EXTENSION_ROOT , dissect_t124_NULL }, + { 3, &hf_t124_nonStandardCategory, ASN1_EXTENSION_ROOT , dissect_t124_NonStandardParameter }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_NodeCategory(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_NodeCategory, NodeCategory_choice, + NULL); + + return offset; +} + + +static const value_string t124_ConferenceMode_vals[] = { + { 0, "conventional-only" }, + { 1, "counted-only" }, + { 2, "anonymous-only" }, + { 3, "conventional-control" }, + { 4, "unrestricted-mode" }, + { 5, "non-standard-mode" }, + { 0, NULL } +}; + +static const per_choice_t ConferenceMode_choice[] = { + { 0, &hf_t124_conventional_only, ASN1_EXTENSION_ROOT , dissect_t124_NULL }, + { 1, &hf_t124_counted_only , ASN1_EXTENSION_ROOT , dissect_t124_NULL }, + { 2, &hf_t124_anonymous_only , ASN1_EXTENSION_ROOT , dissect_t124_NULL }, + { 3, &hf_t124_conventional_control, ASN1_EXTENSION_ROOT , dissect_t124_NULL }, + { 4, &hf_t124_unrestricted_mode, ASN1_EXTENSION_ROOT , dissect_t124_NULL }, + { 5, &hf_t124_non_standard_mode, ASN1_EXTENSION_ROOT , dissect_t124_NonStandardParameter }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_ConferenceMode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_ConferenceMode, ConferenceMode_choice, + NULL); + + return offset; +} + + + +static int +dissect_t124_BOOLEAN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_boolean(tvb, offset, actx, tree, hf_index, NULL); + + return offset; +} + + +static const per_sequence_t T_transferModes_sequence[] = { + { &hf_t124_speech , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_voice_band , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_digital_56k , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_digital_64k , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_digital_128k , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_digital_192k , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_digital_256k , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_digital_320k , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_digital_384k , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_digital_512k , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_digital_768k , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_digital_1152k , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_digital_1472k , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_digital_1536k , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_digital_1920k , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_packet_mode , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_frame_mode , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_atm , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_T_transferModes(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_T_transferModes, T_transferModes_sequence); + + return offset; +} + + +static const per_sequence_t T_highLayerCompatibility_sequence[] = { + { &hf_t124_telephony3kHz , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_telephony7kHz , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_videotelephony , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_videoconference, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_audiographic , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_audiovisual , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_multimedia , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_T_highLayerCompatibility(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_T_highLayerCompatibility, T_highLayerCompatibility_sequence); + + return offset; +} + + +static const per_sequence_t T_aggregatedChannel_sequence[] = { + { &hf_t124_transferModes , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_T_transferModes }, + { &hf_t124_internationalNumber, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_DiallingString }, + { &hf_t124_subAddress , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_SubAddressString }, + { &hf_t124_extraDialling , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_ExtraDiallingString }, + { &hf_t124_highLayerCompatibility, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_T_highLayerCompatibility }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_T_aggregatedChannel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_T_aggregatedChannel, T_aggregatedChannel_sequence); + + return offset; +} + + + +static int +dissect_t124_OCTET_STRING_SIZE_1_20(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, + 1, 20, FALSE, NULL); + + return offset; +} + + +static const per_sequence_t T_transportConnection_sequence[] = { + { &hf_t124_nsapAddress , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_OCTET_STRING_SIZE_1_20 }, + { &hf_t124_transportSelector, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_t124_OCTET_STRING }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_T_transportConnection(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_T_transportConnection, T_transportConnection_sequence); + + return offset; +} + + +static const value_string t124_NetworkAddress_item_vals[] = { + { 0, "aggregatedChannel" }, + { 1, "transportConnection" }, + { 2, "nonStandard" }, + { 0, NULL } +}; + +static const per_choice_t NetworkAddress_item_choice[] = { + { 0, &hf_t124_aggregatedChannel, ASN1_EXTENSION_ROOT , dissect_t124_T_aggregatedChannel }, + { 1, &hf_t124_transportConnection, ASN1_EXTENSION_ROOT , dissect_t124_T_transportConnection }, + { 2, &hf_t124_nonStandard , ASN1_EXTENSION_ROOT , dissect_t124_NonStandardParameter }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_NetworkAddress_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_NetworkAddress_item, NetworkAddress_item_choice, + NULL); + + return offset; +} + + +static const per_sequence_t NetworkAddress_sequence_of[1] = { + { &hf_t124_NetworkAddress_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_NetworkAddress_item }, +}; + +static int +dissect_t124_NetworkAddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index, + ett_t124_NetworkAddress, NetworkAddress_sequence_of, + 1, 64, FALSE); + + return offset; +} + + +static const per_sequence_t MediaList_sequence[] = { + { &hf_t124_audio , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_video , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_data_01 , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_MediaList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_MediaList, MediaList_sequence); + + return offset; +} + + +static const value_string t124_ChannelAggregationMethod_vals[] = { + { 0, "h221" }, + { 1, "h244" }, + { 2, "iso-iec-13871" }, + { 3, "nonStandard" }, + { 0, NULL } +}; + +static const per_choice_t ChannelAggregationMethod_choice[] = { + { 0, &hf_t124_h221 , ASN1_EXTENSION_ROOT , dissect_t124_NULL }, + { 1, &hf_t124_h244 , ASN1_EXTENSION_ROOT , dissect_t124_NULL }, + { 2, &hf_t124_iso_iec_13871 , ASN1_EXTENSION_ROOT , dissect_t124_NULL }, + { 3, &hf_t124_nonStandard , ASN1_EXTENSION_ROOT , dissect_t124_NonStandardParameter }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_ChannelAggregationMethod(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_ChannelAggregationMethod, ChannelAggregationMethod_choice, + NULL); + + return offset; +} + + +static const value_string t124_T_simpleProfile_vals[] = { + { 0, "speech" }, + { 1, "telephony-3kHz" }, + { 2, "telephony-7kHz" }, + { 3, "voice-band" }, + { 4, "frameRelay" }, + { 5, "t123-pstn-basic" }, + { 6, "t123-psdn-basic" }, + { 7, "t123-b-isdn-basic" }, + { 0, NULL } +}; + +static const per_choice_t T_simpleProfile_choice[] = { + { 0, &hf_t124_speech_01 , ASN1_NO_EXTENSIONS , dissect_t124_NULL }, + { 1, &hf_t124_telephony_3kHz , ASN1_NO_EXTENSIONS , dissect_t124_NULL }, + { 2, &hf_t124_telephony_7kHz , ASN1_NO_EXTENSIONS , dissect_t124_NULL }, + { 3, &hf_t124_voice_band_01 , ASN1_NO_EXTENSIONS , dissect_t124_NULL }, + { 4, &hf_t124_frameRelay , ASN1_NO_EXTENSIONS , dissect_t124_NULL }, + { 5, &hf_t124_t123_pstn_basic, ASN1_NO_EXTENSIONS , dissect_t124_NULL }, + { 6, &hf_t124_t123_psdn_basic, ASN1_NO_EXTENSIONS , dissect_t124_NULL }, + { 7, &hf_t124_t123_b_isdn_basic, ASN1_NO_EXTENSIONS , dissect_t124_NULL }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_T_simpleProfile(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_T_simpleProfile, T_simpleProfile_choice, + NULL); + + return offset; +} + + +static const value_string t124_T_profile_vals[] = { + { 0, "h310" }, + { 1, "h320" }, + { 2, "h321" }, + { 3, "h322" }, + { 4, "h323" }, + { 5, "h324" }, + { 6, "h324m" }, + { 7, "asvd" }, + { 8, "dsvd" }, + { 0, NULL } +}; + +static const per_choice_t T_profile_choice[] = { + { 0, &hf_t124_h310 , ASN1_NO_EXTENSIONS , dissect_t124_NULL }, + { 1, &hf_t124_h320 , ASN1_NO_EXTENSIONS , dissect_t124_NULL }, + { 2, &hf_t124_h321 , ASN1_NO_EXTENSIONS , dissect_t124_NULL }, + { 3, &hf_t124_h322 , ASN1_NO_EXTENSIONS , dissect_t124_NULL }, + { 4, &hf_t124_h323 , ASN1_NO_EXTENSIONS , dissect_t124_NULL }, + { 5, &hf_t124_h324 , ASN1_NO_EXTENSIONS , dissect_t124_NULL }, + { 6, &hf_t124_h324m , ASN1_NO_EXTENSIONS , dissect_t124_NULL }, + { 7, &hf_t124_asvd , ASN1_NO_EXTENSIONS , dissect_t124_NULL }, + { 8, &hf_t124_dsvd , ASN1_NO_EXTENSIONS , dissect_t124_NULL }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_T_profile(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_T_profile, T_profile_choice, + NULL); + + return offset; +} + + +static const per_sequence_t T_multimediaProfile_sequence[] = { + { &hf_t124_profile , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_T_profile }, + { &hf_t124_t120Data , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_T_multimediaProfile(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_T_multimediaProfile, T_multimediaProfile_sequence); + + return offset; +} + + +static const value_string t124_Profile_vals[] = { + { 0, "simpleProfile" }, + { 1, "multimediaProfile" }, + { 2, "dsmccDownloadProfile" }, + { 3, "nonStandard" }, + { 0, NULL } +}; + +static const per_choice_t Profile_choice[] = { + { 0, &hf_t124_simpleProfile , ASN1_EXTENSION_ROOT , dissect_t124_T_simpleProfile }, + { 1, &hf_t124_multimediaProfile, ASN1_EXTENSION_ROOT , dissect_t124_T_multimediaProfile }, + { 2, &hf_t124_dsmccDownloadProfile, ASN1_EXTENSION_ROOT , dissect_t124_NULL }, + { 3, &hf_t124_nonStandard , ASN1_EXTENSION_ROOT , dissect_t124_NonStandardParameter }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_Profile(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_Profile, Profile_choice, + NULL); + + return offset; +} + + +static const per_sequence_t ExtendedE164NetworkAddress_sequence[] = { + { &hf_t124_internationalNumber, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_DiallingString }, + { &hf_t124_subAddress , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_SubAddressString }, + { &hf_t124_extraDialling , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_ExtraDiallingString }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ExtendedE164NetworkAddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ExtendedE164NetworkAddress, ExtendedE164NetworkAddress_sequence); + + return offset; +} + + +static const per_sequence_t TransportAddress_sequence[] = { + { &hf_t124_nsapAddress , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_OCTET_STRING_SIZE_1_20 }, + { &hf_t124_transportSelector, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_t124_OCTET_STRING }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_TransportAddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_TransportAddress, TransportAddress_sequence); + + return offset; +} + + +static const per_sequence_t GSTNConnection_sequence[] = { + { &hf_t124_networkAddress , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_ExtendedE164NetworkAddress }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_GSTNConnection(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_GSTNConnection, GSTNConnection_sequence); + + return offset; +} + + + +static int +dissect_t124_INTEGER_1_30(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, + 1U, 30U, NULL, FALSE); + + return offset; +} + + +static const value_string t124_ISDNCircuitTypes_item_vals[] = { + { 0, "digital-64k" }, + { 1, "digital-2x64k" }, + { 2, "digital-384k" }, + { 3, "digital-1536" }, + { 4, "digital-1920k" }, + { 5, "multirate-base-64k" }, + { 0, NULL } +}; + +static const per_choice_t ISDNCircuitTypes_item_choice[] = { + { 0, &hf_t124_digital_64k_01 , ASN1_NO_EXTENSIONS , dissect_t124_NULL }, + { 1, &hf_t124_digital_2x64k , ASN1_NO_EXTENSIONS , dissect_t124_NULL }, + { 2, &hf_t124_digital_384k_01, ASN1_NO_EXTENSIONS , dissect_t124_NULL }, + { 3, &hf_t124_digital_1536 , ASN1_NO_EXTENSIONS , dissect_t124_NULL }, + { 4, &hf_t124_digital_1920k_01, ASN1_NO_EXTENSIONS , dissect_t124_NULL }, + { 5, &hf_t124_multirate_base_64k, ASN1_NO_EXTENSIONS , dissect_t124_INTEGER_1_30 }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_ISDNCircuitTypes_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_ISDNCircuitTypes_item, ISDNCircuitTypes_item_choice, + NULL); + + return offset; +} + + +static const per_sequence_t ISDNCircuitTypes_set_of[1] = { + { &hf_t124_iSDNCircuitTypes_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_ISDNCircuitTypes_item }, +}; + +static int +dissect_t124_ISDNCircuitTypes(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_set_of(tvb, offset, actx, tree, hf_index, + ett_t124_ISDNCircuitTypes, ISDNCircuitTypes_set_of); + + return offset; +} + + +static const per_sequence_t ISDNHighLayerCompatibility_sequence[] = { + { &hf_t124_telephony3kHz , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_telephony7kHz , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_videotelephony , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_videoconference, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_audiographic , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_audiovisual , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_multimedia , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ISDNHighLayerCompatibility(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ISDNHighLayerCompatibility, ISDNHighLayerCompatibility_sequence); + + return offset; +} + + +static const per_sequence_t ISDNConnection_sequence[] = { + { &hf_t124_iSDNCircuitTypes, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_ISDNCircuitTypes }, + { &hf_t124_networkAddress , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_ExtendedE164NetworkAddress }, + { &hf_t124_iSDNHighLayerCompatibility, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_ISDNHighLayerCompatibility }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ISDNConnection(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ISDNConnection, ISDNConnection_sequence); + + return offset; +} + + +static const value_string t124_T_circuitTypes_item_vals[] = { + { 0, "digital-56k" }, + { 1, "digital-64k" }, + { 0, NULL } +}; + +static const per_choice_t T_circuitTypes_item_choice[] = { + { 0, &hf_t124_digital_56k_01 , ASN1_NO_EXTENSIONS , dissect_t124_NULL }, + { 1, &hf_t124_digital_64k_01 , ASN1_NO_EXTENSIONS , dissect_t124_NULL }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_T_circuitTypes_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_T_circuitTypes_item, T_circuitTypes_item_choice, + NULL); + + return offset; +} + + +static const per_sequence_t T_circuitTypes_set_of[1] = { + { &hf_t124_circuitTypes_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_T_circuitTypes_item }, +}; + +static int +dissect_t124_T_circuitTypes(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_set_of(tvb, offset, actx, tree, hf_index, + ett_t124_T_circuitTypes, T_circuitTypes_set_of); + + return offset; +} + + +static const per_sequence_t CSDNConnection_sequence[] = { + { &hf_t124_circuitTypes , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_T_circuitTypes }, + { &hf_t124_networkAddress , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_ExtendedE164NetworkAddress }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_CSDNConnection(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_CSDNConnection, CSDNConnection_sequence); + + return offset; +} + + +static const value_string t124_PSDNNetworkAddress_vals[] = { + { 0, "extendedE164NetworkAddress" }, + { 1, "transportAddress" }, + { 2, "nonStandard" }, + { 0, NULL } +}; + +static const per_choice_t PSDNNetworkAddress_choice[] = { + { 0, &hf_t124_extendedE164NetworkAddress, ASN1_NO_EXTENSIONS , dissect_t124_ExtendedE164NetworkAddress }, + { 1, &hf_t124_transportAddress, ASN1_NO_EXTENSIONS , dissect_t124_TransportAddress }, + { 2, &hf_t124_nonStandard , ASN1_NO_EXTENSIONS , dissect_t124_NonStandardParameter }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_PSDNNetworkAddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_PSDNNetworkAddress, PSDNNetworkAddress_choice, + NULL); + + return offset; +} + + +static const per_sequence_t PSDNConnection_sequence[] = { + { &hf_t124_pSDNNetworkAddress, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_PSDNNetworkAddress }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_PSDNConnection(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_PSDNConnection, PSDNConnection_sequence); + + return offset; +} + + +static const value_string t124_T_networkAddress_vals[] = { + { 0, "extendedE164" }, + { 1, "nsapAddress" }, + { 2, "nonStandard" }, + { 0, NULL } +}; + +static const per_choice_t T_networkAddress_choice[] = { + { 0, &hf_t124_extendedE164 , ASN1_NO_EXTENSIONS , dissect_t124_ExtendedE164NetworkAddress }, + { 1, &hf_t124_nsapAddress_01 , ASN1_NO_EXTENSIONS , dissect_t124_TransportAddress }, + { 2, &hf_t124_nonStandard , ASN1_NO_EXTENSIONS , dissect_t124_NonStandardParameter }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_T_networkAddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_T_networkAddress, T_networkAddress_choice, + NULL); + + return offset; +} + + + +static int +dissect_t124_INTEGER_0_MAX(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, + 0U, NO_BOUND, NULL, FALSE); + + return offset; +} + + +static const per_sequence_t ATMConnection_sequence[] = { + { &hf_t124_networkAddress_01, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_T_networkAddress }, + { &hf_t124_maxTransferRate, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_INTEGER_0_MAX }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ATMConnection(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ATMConnection, ATMConnection_sequence); + + return offset; +} + + +static const value_string t124_NetworkConnection_vals[] = { + { 0, "gstnConnection" }, + { 1, "isdnConnection" }, + { 2, "csdnConnection" }, + { 3, "psdnConnection" }, + { 4, "atmConnection" }, + { 5, "extendedE164NetworkAddress" }, + { 6, "transportAddress" }, + { 7, "nonStandard" }, + { 0, NULL } +}; + +static const per_choice_t NetworkConnection_choice[] = { + { 0, &hf_t124_gstnConnection , ASN1_EXTENSION_ROOT , dissect_t124_GSTNConnection }, + { 1, &hf_t124_isdnConnection , ASN1_EXTENSION_ROOT , dissect_t124_ISDNConnection }, + { 2, &hf_t124_csdnConnection , ASN1_EXTENSION_ROOT , dissect_t124_CSDNConnection }, + { 3, &hf_t124_psdnConnection , ASN1_EXTENSION_ROOT , dissect_t124_PSDNConnection }, + { 4, &hf_t124_atmConnection , ASN1_EXTENSION_ROOT , dissect_t124_ATMConnection }, + { 5, &hf_t124_extendedE164NetworkAddress, ASN1_EXTENSION_ROOT , dissect_t124_ExtendedE164NetworkAddress }, + { 6, &hf_t124_transportAddress, ASN1_EXTENSION_ROOT , dissect_t124_TransportAddress }, + { 7, &hf_t124_nonStandard , ASN1_EXTENSION_ROOT , dissect_t124_NonStandardParameter }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_NetworkConnection(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_NetworkConnection, NetworkConnection_choice, + NULL); + + return offset; +} + + +static const value_string t124_T_connectionList_item_vals[] = { + { 0, "isdnConnection" }, + { 1, "csdnConnection" }, + { 0, NULL } +}; + +static const per_choice_t T_connectionList_item_choice[] = { + { 0, &hf_t124_isdnConnection , ASN1_EXTENSION_ROOT , dissect_t124_ISDNConnection }, + { 1, &hf_t124_csdnConnection , ASN1_EXTENSION_ROOT , dissect_t124_CSDNConnection }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_T_connectionList_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_T_connectionList_item, T_connectionList_item_choice, + NULL); + + return offset; +} + + +static const per_sequence_t T_connectionList_set_of[1] = { + { &hf_t124_connectionList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_T_connectionList_item }, +}; + +static int +dissect_t124_T_connectionList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_set_of(tvb, offset, actx, tree, hf_index, + ett_t124_T_connectionList, T_connectionList_set_of, + 1, 30, FALSE); + + return offset; +} + + +static const per_sequence_t SET_OF_ChannelAggregationMethod_set_of[1] = { + { &hf_t124_aggregationMethods_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_ChannelAggregationMethod }, +}; + +static int +dissect_t124_SET_OF_ChannelAggregationMethod(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_set_of(tvb, offset, actx, tree, hf_index, + ett_t124_SET_OF_ChannelAggregationMethod, SET_OF_ChannelAggregationMethod_set_of); + + return offset; +} + + +static const per_sequence_t T_aggregatedConnections_sequence[] = { + { &hf_t124_connectionList , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_T_connectionList }, + { &hf_t124_aggregationMethods, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_SET_OF_ChannelAggregationMethod }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_T_aggregatedConnections(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_T_aggregatedConnections, T_aggregatedConnections_sequence); + + return offset; +} + + +static const value_string t124_T_networkConnection_vals[] = { + { 0, "singleConnection" }, + { 1, "aggregatedConnections" }, + { 0, NULL } +}; + +static const per_choice_t T_networkConnection_choice[] = { + { 0, &hf_t124_singleConnection, ASN1_NO_EXTENSIONS , dissect_t124_NetworkConnection }, + { 1, &hf_t124_aggregatedConnections, ASN1_NO_EXTENSIONS , dissect_t124_T_aggregatedConnections }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_T_networkConnection(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_T_networkConnection, T_networkConnection_choice, + NULL); + + return offset; +} + + +static const per_sequence_t SET_OF_Profile_set_of[1] = { + { &hf_t124_profiles_item , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_Profile }, +}; + +static int +dissect_t124_SET_OF_Profile(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_set_of(tvb, offset, actx, tree, hf_index, + ett_t124_SET_OF_Profile, SET_OF_Profile_set_of); + + return offset; +} + + +static const per_sequence_t NetworkAddressV2_item_sequence[] = { + { &hf_t124_networkConnection, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_T_networkConnection }, + { &hf_t124_profiles , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_SET_OF_Profile }, + { &hf_t124_mediaConcerned , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_MediaList }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_NetworkAddressV2_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_NetworkAddressV2_item, NetworkAddressV2_item_sequence); + + return offset; +} + + +static const per_sequence_t NetworkAddressV2_set_of[1] = { + { &hf_t124_NetworkAddressV2_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_NetworkAddressV2_item }, +}; + +static int +dissect_t124_NetworkAddressV2(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_set_of(tvb, offset, actx, tree, hf_index, + ett_t124_NetworkAddressV2, NetworkAddressV2_set_of); + + return offset; +} + + +static const value_string t124_NodeType_vals[] = { + { 0, "terminal" }, + { 1, "multiportTerminal" }, + { 2, "mcu" }, + { 0, NULL } +}; + + +static int +dissect_t124_NodeType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, + 3, NULL, TRUE, 0, NULL); + + return offset; +} + + +static const per_sequence_t NodeProperties_sequence[] = { + { &hf_t124_managementDevice, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_peripheralDevice, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_NodeProperties(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_NodeProperties, NodeProperties_sequence); + + return offset; +} + + + +static int +dissect_t124_INTEGER_0_4294967295(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, + 0U, 4294967295U, NULL, FALSE); + + return offset; +} + + +static const value_string t124_AsymmetryIndicator_vals[] = { + { 0, "callingNode" }, + { 1, "calledNode" }, + { 2, "unknown" }, + { 0, NULL } +}; + +static const per_choice_t AsymmetryIndicator_choice[] = { + { 0, &hf_t124_callingNode , ASN1_NO_EXTENSIONS , dissect_t124_NULL }, + { 1, &hf_t124_calledNode , ASN1_NO_EXTENSIONS , dissect_t124_NULL }, + { 2, &hf_t124_unknown , ASN1_NO_EXTENSIONS , dissect_t124_INTEGER_0_4294967295 }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_AsymmetryIndicator(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_AsymmetryIndicator, AsymmetryIndicator_choice, + NULL); + + return offset; +} + + + +static int +dissect_t124_OCTET_STRING_SIZE_2(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, + 2, 2, FALSE, NULL); + + return offset; +} + + +static const value_string t124_AlternativeNodeID_vals[] = { + { 0, "h243NodeID" }, + { 0, NULL } +}; + +static const per_choice_t AlternativeNodeID_choice[] = { + { 0, &hf_t124_h243NodeID , ASN1_EXTENSION_ROOT , dissect_t124_OCTET_STRING_SIZE_2 }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_AlternativeNodeID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_AlternativeNodeID, AlternativeNodeID_choice, + NULL); + + return offset; +} + + +static const per_sequence_t ConferenceDescriptor_sequence[] = { + { &hf_t124_conferenceName , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_ConferenceName }, + { &hf_t124_conferenceNameModifier, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_ConferenceNameModifier }, + { &hf_t124_conferenceDescription, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_TextString }, + { &hf_t124_lockedConference, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_passwordInTheClearRequired, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_networkAddress_02, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_NetworkAddress }, + { &hf_t124_defaultConferenceFlag, ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_conferenceMode , ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL, dissect_t124_ConferenceMode }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ConferenceDescriptor(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConferenceDescriptor, ConferenceDescriptor_sequence); + + return offset; +} + + +static const per_sequence_t SEQUENCE_OF_TextString_sequence_of[1] = { + { &hf_t124_participantsList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_TextString }, +}; + +static int +dissect_t124_SEQUENCE_OF_TextString(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index, + ett_t124_SEQUENCE_OF_TextString, SEQUENCE_OF_TextString_sequence_of); + + return offset; +} + + +static const per_sequence_t NodeRecord_sequence[] = { + { &hf_t124_superiorNode , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_UserID }, + { &hf_t124_nodeType , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_NodeType }, + { &hf_t124_nodeProperties , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_NodeProperties }, + { &hf_t124_nodeName , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_TextString }, + { &hf_t124_participantsList, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_SEQUENCE_OF_TextString }, + { &hf_t124_siteInformation, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_TextString }, + { &hf_t124_networkAddress_02, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_NetworkAddress }, + { &hf_t124_alternativeNodeID, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_AlternativeNodeID }, + { &hf_t124_userData , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_UserData }, + { &hf_t124_nodeCategory , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_t124_NodeCategory }, + { &hf_t124_networkAddressV2, ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_t124_NetworkAddressV2 }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_NodeRecord(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_NodeRecord, NodeRecord_sequence); + + return offset; +} + + +static const per_sequence_t SessionKey_sequence[] = { + { &hf_t124_applicationProtocolKey, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_Key }, + { &hf_t124_sessionID , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_t124_ChannelID }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_SessionKey(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_SessionKey, SessionKey_sequence); + + return offset; +} + + +static const value_string t124_ChannelType_vals[] = { + { 0, "static" }, + { 1, "dynamicMulticast" }, + { 2, "dynamicPrivate" }, + { 3, "dynamicUserId" }, + { 0, NULL } +}; + + +static int +dissect_t124_ChannelType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, + 4, NULL, FALSE, 0, NULL); + + return offset; +} + + +static const value_string t124_CapabilityID_vals[] = { + { 0, "standard" }, + { 1, "nonStandard" }, + { 0, NULL } +}; + +static const per_choice_t CapabilityID_choice[] = { + { 0, &hf_t124_standard , ASN1_NO_EXTENSIONS , dissect_t124_INTEGER_0_65535 }, + { 1, &hf_t124_nonStandard_01 , ASN1_NO_EXTENSIONS , dissect_t124_Key }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_CapabilityID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_CapabilityID, CapabilityID_choice, + NULL); + + return offset; +} + + +static const per_sequence_t T_nonCollapsingCapabilities_item_sequence[] = { + { &hf_t124_capabilityID , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_CapabilityID }, + { &hf_t124_applicationData, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_t124_OCTET_STRING }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_T_nonCollapsingCapabilities_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_T_nonCollapsingCapabilities_item, T_nonCollapsingCapabilities_item_sequence); + + return offset; +} + + +static const per_sequence_t T_nonCollapsingCapabilities_set_of[1] = { + { &hf_t124_nonCollapsingCapabilities_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_T_nonCollapsingCapabilities_item }, +}; + +static int +dissect_t124_T_nonCollapsingCapabilities(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_set_of(tvb, offset, actx, tree, hf_index, + ett_t124_T_nonCollapsingCapabilities, T_nonCollapsingCapabilities_set_of); + + return offset; +} + + +static const per_sequence_t ApplicationRecord_sequence[] = { + { &hf_t124_applicationActive, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_conductingOperationCapable, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_startupChannel , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_ChannelType }, + { &hf_t124_applicationUserID, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_UserID }, + { &hf_t124_nonCollapsingCapabilities, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_T_nonCollapsingCapabilities }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ApplicationRecord(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ApplicationRecord, ApplicationRecord_sequence); + + return offset; +} + + +static const value_string t124_CapabilityClass_vals[] = { + { 0, "logical" }, + { 1, "unsignedMin" }, + { 2, "unsignedMax" }, + { 0, NULL } +}; + +static const per_choice_t CapabilityClass_choice[] = { + { 0, &hf_t124_logical , ASN1_EXTENSION_ROOT , dissect_t124_NULL }, + { 1, &hf_t124_unsignedMin , ASN1_EXTENSION_ROOT , dissect_t124_INTEGER_0_MAX }, + { 2, &hf_t124_unsignedMax , ASN1_EXTENSION_ROOT , dissect_t124_INTEGER_0_MAX }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_CapabilityClass(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_CapabilityClass, CapabilityClass_choice, + NULL); + + return offset; +} + + + +static int +dissect_t124_EntityID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, + 0U, 65535U, NULL, FALSE); + + return offset; +} + + +static const per_sequence_t T_expectedCapabilitySet_item_sequence[] = { + { &hf_t124_capabilityID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_CapabilityID }, + { &hf_t124_capabilityClass, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_CapabilityClass }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_T_expectedCapabilitySet_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_T_expectedCapabilitySet_item, T_expectedCapabilitySet_item_sequence); + + return offset; +} + + +static const per_sequence_t T_expectedCapabilitySet_set_of[1] = { + { &hf_t124_expectedCapabilitySet_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_T_expectedCapabilitySet_item }, +}; + +static int +dissect_t124_T_expectedCapabilitySet(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_set_of(tvb, offset, actx, tree, hf_index, + ett_t124_T_expectedCapabilitySet, T_expectedCapabilitySet_set_of); + + return offset; +} + + +static const per_sequence_t ApplicationInvokeSpecifier_sequence[] = { + { &hf_t124_sessionKey , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_SessionKey }, + { &hf_t124_expectedCapabilitySet, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_T_expectedCapabilitySet }, + { &hf_t124_startupChannel , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_ChannelType }, + { &hf_t124_mandatoryFlag , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ApplicationInvokeSpecifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ApplicationInvokeSpecifier, ApplicationInvokeSpecifier_sequence); + + return offset; +} + + + +static int +dissect_t124_OCTET_STRING_SIZE_0_64(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, + 0, 64, FALSE, NULL); + + return offset; +} + + +static const per_sequence_t RegistryKey_sequence[] = { + { &hf_t124_sessionKey , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_SessionKey }, + { &hf_t124_resourceID , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_OCTET_STRING_SIZE_0_64 }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_RegistryKey(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_RegistryKey, RegistryKey_sequence); + + return offset; +} + + +static const value_string t124_RegistryItem_vals[] = { + { 0, "channelID" }, + { 1, "tokenID" }, + { 2, "parameter" }, + { 3, "vacant" }, + { 0, NULL } +}; + +static const per_choice_t RegistryItem_choice[] = { + { 0, &hf_t124_channelID , ASN1_EXTENSION_ROOT , dissect_t124_DynamicChannelID }, + { 1, &hf_t124_tokenID , ASN1_EXTENSION_ROOT , dissect_t124_DynamicTokenID }, + { 2, &hf_t124_parameter , ASN1_EXTENSION_ROOT , dissect_t124_OCTET_STRING_SIZE_0_64 }, + { 3, &hf_t124_vacant , ASN1_EXTENSION_ROOT , dissect_t124_NULL }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_RegistryItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_RegistryItem, RegistryItem_choice, + NULL); + + return offset; +} + + +static const per_sequence_t T_owned_sequence[] = { + { &hf_t124_nodeID , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserID }, + { &hf_t124_entityID , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_EntityID }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_T_owned(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_T_owned, T_owned_sequence); + + return offset; +} + + +static const value_string t124_RegistryEntryOwner_vals[] = { + { 0, "owned" }, + { 1, "notOwned" }, + { 0, NULL } +}; + +static const per_choice_t RegistryEntryOwner_choice[] = { + { 0, &hf_t124_owned , ASN1_NO_EXTENSIONS , dissect_t124_T_owned }, + { 1, &hf_t124_notOwned , ASN1_NO_EXTENSIONS , dissect_t124_NULL }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_RegistryEntryOwner(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_RegistryEntryOwner, RegistryEntryOwner_choice, + NULL); + + return offset; +} + + +static const value_string t124_RegistryModificationRights_vals[] = { + { 0, "owner" }, + { 1, "session" }, + { 2, "public" }, + { 0, NULL } +}; + + +static int +dissect_t124_RegistryModificationRights(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, + 3, NULL, FALSE, 0, NULL); + + return offset; +} + + +static const per_sequence_t UserIDIndication_sequence[] = { + { &hf_t124_tag , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_INTEGER }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_UserIDIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_UserIDIndication, UserIDIndication_sequence); + + return offset; +} + + +static const per_sequence_t SET_OF_Privilege_set_of[1] = { + { &hf_t124_conductorPrivileges_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_Privilege }, +}; + +static int +dissect_t124_SET_OF_Privilege(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_set_of(tvb, offset, actx, tree, hf_index, + ett_t124_SET_OF_Privilege, SET_OF_Privilege_set_of); + + return offset; +} + + +static const per_sequence_t ConferenceCreateRequest_sequence[] = { + { &hf_t124_conferenceName , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_ConferenceName }, + { &hf_t124_convenerPassword, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_Password }, + { &hf_t124_password , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_Password }, + { &hf_t124_lockedConference, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_listedConference, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_conductibleConference, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_terminationMethod, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_TerminationMethod }, + { &hf_t124_conductorPrivileges, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_SET_OF_Privilege }, + { &hf_t124_conductedPrivileges, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_SET_OF_Privilege }, + { &hf_t124_nonConductedPrivileges, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_SET_OF_Privilege }, + { &hf_t124_conferenceDescription, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_TextString }, + { &hf_t124_callerIdentifier, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_TextString }, + { &hf_t124_userData , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_UserData }, + { &hf_t124_conferencePriority, ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_t124_ConferencePriority }, + { &hf_t124_conferenceMode , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_t124_ConferenceMode }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ConferenceCreateRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConferenceCreateRequest, ConferenceCreateRequest_sequence); + + return offset; +} + + +static const value_string t124_T_result_vals[] = { + { 0, "success" }, + { 1, "userRejected" }, + { 2, "resourcesNotAvailable" }, + { 3, "rejectedForSymmetryBreaking" }, + { 4, "lockedConferenceNotSupported" }, + { 0, NULL } +}; + + +static int +dissect_t124_T_result(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, + 5, NULL, TRUE, 0, NULL); + + return offset; +} + + +static const per_sequence_t ConferenceCreateResponse_sequence[] = { + { &hf_t124_nodeID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_UserID }, + { &hf_t124_tag , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_INTEGER }, + { &hf_t124_result , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_T_result }, + { &hf_t124_userData , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_UserData }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ConferenceCreateResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConferenceCreateResponse, ConferenceCreateResponse_sequence); + + return offset; +} + + +static const per_sequence_t ConferenceQueryRequest_sequence[] = { + { &hf_t124_nodeType , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_NodeType }, + { &hf_t124_asymmetryIndicator, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_AsymmetryIndicator }, + { &hf_t124_userData , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_UserData }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ConferenceQueryRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConferenceQueryRequest, ConferenceQueryRequest_sequence); + + return offset; +} + + +static const per_sequence_t SET_OF_ConferenceDescriptor_set_of[1] = { + { &hf_t124_conferenceList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_ConferenceDescriptor }, +}; + +static int +dissect_t124_SET_OF_ConferenceDescriptor(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_set_of(tvb, offset, actx, tree, hf_index, + ett_t124_SET_OF_ConferenceDescriptor, SET_OF_ConferenceDescriptor_set_of); + + return offset; +} + + +static const value_string t124_QueryResponseResult_vals[] = { + { 0, "success" }, + { 1, "userRejected" }, + { 0, NULL } +}; + + +static int +dissect_t124_QueryResponseResult(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, + 2, NULL, TRUE, 0, NULL); + + return offset; +} + + +static const per_sequence_t ConferenceQueryResponse_sequence[] = { + { &hf_t124_nodeType , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_NodeType }, + { &hf_t124_asymmetryIndicator, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_AsymmetryIndicator }, + { &hf_t124_conferenceList , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_SET_OF_ConferenceDescriptor }, + { &hf_t124_queryResponseResult, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_QueryResponseResult }, + { &hf_t124_userData , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_UserData }, + { &hf_t124_waitForInvitationFlag, ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_t124_BOOLEAN }, + { &hf_t124_noUnlistedConferenceFlag, ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_t124_BOOLEAN }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ConferenceQueryResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConferenceQueryResponse, ConferenceQueryResponse_sequence); + + return offset; +} + + +static const per_sequence_t ConferenceJoinRequest_sequence[] = { + { &hf_t124_conferenceName_01, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_ConferenceNameSelector }, + { &hf_t124_conferenceNameModifier, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_ConferenceNameModifier }, + { &hf_t124_tag , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_INTEGER }, + { &hf_t124_password_01 , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_PasswordChallengeRequestResponse }, + { &hf_t124_convenerPassword_01, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_PasswordSelector }, + { &hf_t124_callerIdentifier, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_TextString }, + { &hf_t124_userData , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_UserData }, + { &hf_t124_nodeCategory , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_t124_NodeCategory }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ConferenceJoinRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConferenceJoinRequest, ConferenceJoinRequest_sequence); + + return offset; +} + + +static const value_string t124_JoinResponseResult_vals[] = { + { 0, "success" }, + { 1, "userRejected" }, + { 2, "invalidConference" }, + { 3, "invalidPassword" }, + { 4, "invalidConvenerPassword" }, + { 5, "challengeResponseRequired" }, + { 6, "invalidChallengeResponse" }, + { 0, NULL } +}; + + +static int +dissect_t124_JoinResponseResult(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, + 7, NULL, TRUE, 0, NULL); + + return offset; +} + + +static const per_sequence_t ConferenceJoinResponse_sequence[] = { + { &hf_t124_nodeID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_UserID }, + { &hf_t124_topNodeID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_UserID }, + { &hf_t124_tag , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_INTEGER }, + { &hf_t124_conferenceNameAlias, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_ConferenceNameSelector }, + { &hf_t124_passwordInTheClearRequired, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_lockedConference, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_listedConference, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_conductibleConference, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_terminationMethod, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_TerminationMethod }, + { &hf_t124_conductorPrivileges, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_SET_OF_Privilege }, + { &hf_t124_conductedPrivileges, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_SET_OF_Privilege }, + { &hf_t124_nonConductedPrivileges, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_SET_OF_Privilege }, + { &hf_t124_conferenceDescription, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_TextString }, + { &hf_t124_password_01 , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_PasswordChallengeRequestResponse }, + { &hf_t124_joinResponseResult, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_JoinResponseResult }, + { &hf_t124_userData , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_UserData }, + { &hf_t124_nodeCategory , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_t124_NodeCategory }, + { &hf_t124_conferenceMode , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_t124_ConferenceMode }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ConferenceJoinResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConferenceJoinResponse, ConferenceJoinResponse_sequence); + + return offset; +} + + +static const per_sequence_t ConferenceInviteRequest_sequence[] = { + { &hf_t124_conferenceName , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_ConferenceName }, + { &hf_t124_nodeID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_UserID }, + { &hf_t124_topNodeID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_UserID }, + { &hf_t124_tag , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_INTEGER }, + { &hf_t124_passwordInTheClearRequired, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_lockedConference, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_listedConference, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_conductibleConference, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_terminationMethod, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_TerminationMethod }, + { &hf_t124_conductorPrivileges, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_SET_OF_Privilege }, + { &hf_t124_conductedPrivileges, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_SET_OF_Privilege }, + { &hf_t124_nonConductedPrivileges, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_SET_OF_Privilege }, + { &hf_t124_conferenceDescription, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_TextString }, + { &hf_t124_callerIdentifier, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_TextString }, + { &hf_t124_userData , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_UserData }, + { &hf_t124_conferencePriority, ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_t124_ConferencePriority }, + { &hf_t124_nodeCategory , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_t124_NodeCategory }, + { &hf_t124_conferenceMode , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_t124_ConferenceMode }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ConferenceInviteRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConferenceInviteRequest, ConferenceInviteRequest_sequence); + + return offset; +} + + +static const value_string t124_InviteResponseResult_vals[] = { + { 0, "success" }, + { 1, "userRejected" }, + { 0, NULL } +}; + + +static int +dissect_t124_InviteResponseResult(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, + 2, NULL, TRUE, 0, NULL); + + return offset; +} + + +static const per_sequence_t ConferenceInviteResponse_sequence[] = { + { &hf_t124_inviteResponseResult, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_InviteResponseResult }, + { &hf_t124_userData , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_UserData }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ConferenceInviteResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConferenceInviteResponse, ConferenceInviteResponse_sequence); + + return offset; +} + + +static const per_sequence_t ConferenceAddRequest_sequence[] = { + { &hf_t124_networkAddress_02, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_NetworkAddress }, + { &hf_t124_requestingNode , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_UserID }, + { &hf_t124_tag , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_INTEGER }, + { &hf_t124_addingMCU , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_UserID }, + { &hf_t124_userData , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_UserData }, + { &hf_t124_nodeCategory , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_t124_NodeCategory }, + { &hf_t124_networkAddressV2, ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL, dissect_t124_NetworkAddressV2 }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ConferenceAddRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConferenceAddRequest, ConferenceAddRequest_sequence); + + return offset; +} + + +static const value_string t124_AddResponseResult_vals[] = { + { 0, "success" }, + { 1, "invalidRequester" }, + { 2, "invalidNetworkType" }, + { 3, "invalidNetworkAddress" }, + { 4, "addedNodeBusy" }, + { 5, "networkBusy" }, + { 6, "noPortsAvailable" }, + { 7, "connectionUnsuccessful" }, + { 0, NULL } +}; + + +static int +dissect_t124_AddResponseResult(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, + 8, NULL, TRUE, 0, NULL); + + return offset; +} + + +static const per_sequence_t ConferenceAddResponse_sequence[] = { + { &hf_t124_tag , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_INTEGER }, + { &hf_t124_addResponseResult, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_AddResponseResult }, + { &hf_t124_userData , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_UserData }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ConferenceAddResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConferenceAddResponse, ConferenceAddResponse_sequence); + + return offset; +} + + +static const per_sequence_t ConferenceLockRequest_sequence[] = { + { NULL, ASN1_EXTENSION_ROOT, 0, NULL } +}; + +static int +dissect_t124_ConferenceLockRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConferenceLockRequest, ConferenceLockRequest_sequence); + + return offset; +} + + +static const value_string t124_LockResponseResult_vals[] = { + { 0, "success" }, + { 1, "invalidRequester" }, + { 2, "alreadyLocked" }, + { 0, NULL } +}; + + +static int +dissect_t124_LockResponseResult(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, + 3, NULL, TRUE, 0, NULL); + + return offset; +} + + +static const per_sequence_t ConferenceLockResponse_sequence[] = { + { &hf_t124_lockResponseResult, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_LockResponseResult }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ConferenceLockResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConferenceLockResponse, ConferenceLockResponse_sequence); + + return offset; +} + + +static const per_sequence_t ConferenceLockIndication_sequence[] = { + { NULL, ASN1_EXTENSION_ROOT, 0, NULL } +}; + +static int +dissect_t124_ConferenceLockIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConferenceLockIndication, ConferenceLockIndication_sequence); + + return offset; +} + + +static const per_sequence_t ConferenceUnlockRequest_sequence[] = { + { NULL, ASN1_EXTENSION_ROOT, 0, NULL } +}; + +static int +dissect_t124_ConferenceUnlockRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConferenceUnlockRequest, ConferenceUnlockRequest_sequence); + + return offset; +} + + +static const value_string t124_UnlockResponseResult_vals[] = { + { 0, "success" }, + { 1, "invalidRequester" }, + { 2, "alreadyUnlocked" }, + { 0, NULL } +}; + + +static int +dissect_t124_UnlockResponseResult(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, + 3, NULL, TRUE, 0, NULL); + + return offset; +} + + +static const per_sequence_t ConferenceUnlockResponse_sequence[] = { + { &hf_t124_unlockResponseResult, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_UnlockResponseResult }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ConferenceUnlockResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConferenceUnlockResponse, ConferenceUnlockResponse_sequence); + + return offset; +} + + +static const per_sequence_t ConferenceUnlockIndication_sequence[] = { + { NULL, ASN1_EXTENSION_ROOT, 0, NULL } +}; + +static int +dissect_t124_ConferenceUnlockIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConferenceUnlockIndication, ConferenceUnlockIndication_sequence); + + return offset; +} + + +static const value_string t124_TerminateRequestReason_vals[] = { + { 0, "userInitiated" }, + { 1, "timedConferenceTermination" }, + { 0, NULL } +}; + + +static int +dissect_t124_TerminateRequestReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, + 2, NULL, TRUE, 0, NULL); + + return offset; +} + + +static const per_sequence_t ConferenceTerminateRequest_sequence[] = { + { &hf_t124_terminateRequestReason, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_TerminateRequestReason }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ConferenceTerminateRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConferenceTerminateRequest, ConferenceTerminateRequest_sequence); + + return offset; +} + + +static const value_string t124_TerminateResponseResult_vals[] = { + { 0, "success" }, + { 1, "invalidRequester" }, + { 0, NULL } +}; + + +static int +dissect_t124_TerminateResponseResult(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, + 2, NULL, TRUE, 0, NULL); + + return offset; +} + + +static const per_sequence_t ConferenceTerminateResponse_sequence[] = { + { &hf_t124_terminateResponseResult, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_TerminateResponseResult }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ConferenceTerminateResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConferenceTerminateResponse, ConferenceTerminateResponse_sequence); + + return offset; +} + + +static const value_string t124_TerminateIndicationReason_vals[] = { + { 0, "userInitiated" }, + { 1, "timedConferenceTermination" }, + { 0, NULL } +}; + + +static int +dissect_t124_TerminateIndicationReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, + 2, NULL, TRUE, 0, NULL); + + return offset; +} + + +static const per_sequence_t ConferenceTerminateIndication_sequence[] = { + { &hf_t124_terminateIndicationReason, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_TerminateIndicationReason }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ConferenceTerminateIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConferenceTerminateIndication, ConferenceTerminateIndication_sequence); + + return offset; +} + + +static const value_string t124_EjectUserRequestReason_vals[] = { + { 0, "userInitiated" }, + { 0, NULL } +}; + + +static int +dissect_t124_EjectUserRequestReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, + 1, NULL, TRUE, 0, NULL); + + return offset; +} + + +static const per_sequence_t ConferenceEjectUserRequest_sequence[] = { + { &hf_t124_nodeToEject , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_UserID }, + { &hf_t124_ejectUserRequestReason, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_EjectUserRequestReason }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ConferenceEjectUserRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConferenceEjectUserRequest, ConferenceEjectUserRequest_sequence); + + return offset; +} + + +static const value_string t124_EjectUserResponseResult_vals[] = { + { 0, "success" }, + { 1, "invalidRequester" }, + { 2, "invalidNode" }, + { 0, NULL } +}; + + +static int +dissect_t124_EjectUserResponseResult(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, + 3, NULL, TRUE, 0, NULL); + + return offset; +} + + +static const per_sequence_t ConferenceEjectUserResponse_sequence[] = { + { &hf_t124_nodeToEject , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_UserID }, + { &hf_t124_ejectUserResponseResult, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_EjectUserResponseResult }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ConferenceEjectUserResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConferenceEjectUserResponse, ConferenceEjectUserResponse_sequence); + + return offset; +} + + +static const value_string t124_T_reason_vals[] = { + { 0, "userInitiated" }, + { 1, "higherNodeDisconnected" }, + { 2, "higherNodeEjected" }, + { 0, NULL } +}; + + +static int +dissect_t124_T_reason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, + 3, NULL, TRUE, 0, NULL); + + return offset; +} + + +static const per_sequence_t ConferenceEjectUserIndication_sequence[] = { + { &hf_t124_nodeToEject , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_UserID }, + { &hf_t124_reason , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_T_reason }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ConferenceEjectUserIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConferenceEjectUserIndication, ConferenceEjectUserIndication_sequence); + + return offset; +} + + +static const per_sequence_t SET_SIZE_1_65536_OF_UserID_set_of[1] = { + { &hf_t124_transferringNodes_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserID }, +}; + +static int +dissect_t124_SET_SIZE_1_65536_OF_UserID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_set_of(tvb, offset, actx, tree, hf_index, + ett_t124_SET_SIZE_1_65536_OF_UserID, SET_SIZE_1_65536_OF_UserID_set_of, + 1, 65536, FALSE); + + return offset; +} + + +static const per_sequence_t ConferenceTransferRequest_sequence[] = { + { &hf_t124_conferenceName_01, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_ConferenceNameSelector }, + { &hf_t124_conferenceNameModifier, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_ConferenceNameModifier }, + { &hf_t124_networkAddress_02, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_NetworkAddress }, + { &hf_t124_transferringNodes, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_SET_SIZE_1_65536_OF_UserID }, + { &hf_t124_password_02 , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_PasswordSelector }, + { &hf_t124_networkAddressV2, ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_t124_NetworkAddressV2 }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ConferenceTransferRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConferenceTransferRequest, ConferenceTransferRequest_sequence); + + return offset; +} + + +static const value_string t124_TransferResponseResult_vals[] = { + { 0, "success" }, + { 1, "invalidRequester" }, + { 0, NULL } +}; + + +static int +dissect_t124_TransferResponseResult(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, + 2, NULL, TRUE, 0, NULL); + + return offset; +} + + +static const per_sequence_t ConferenceTransferResponse_sequence[] = { + { &hf_t124_conferenceName_01, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_ConferenceNameSelector }, + { &hf_t124_conferenceNameModifier, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_ConferenceNameModifier }, + { &hf_t124_transferringNodes, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_SET_SIZE_1_65536_OF_UserID }, + { &hf_t124_transferResponseResult, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_TransferResponseResult }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ConferenceTransferResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConferenceTransferResponse, ConferenceTransferResponse_sequence); + + return offset; +} + + +static const per_sequence_t ConferenceTransferIndication_sequence[] = { + { &hf_t124_conferenceName_01, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_ConferenceNameSelector }, + { &hf_t124_conferenceNameModifier, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_ConferenceNameModifier }, + { &hf_t124_networkAddress_02, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_NetworkAddress }, + { &hf_t124_transferringNodes, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_SET_SIZE_1_65536_OF_UserID }, + { &hf_t124_password_02 , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_PasswordSelector }, + { &hf_t124_networkAddressV2, ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_t124_NetworkAddressV2 }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ConferenceTransferIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConferenceTransferIndication, ConferenceTransferIndication_sequence); + + return offset; +} + + +static const per_sequence_t T_nodeRefresh_item_sequence[] = { + { &hf_t124_nodeID , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserID }, + { &hf_t124_nodeRecord , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_NodeRecord }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_T_nodeRefresh_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_T_nodeRefresh_item, T_nodeRefresh_item_sequence); + + return offset; +} + + +static const per_sequence_t NodeRefresh_set_of[1] = { + { &hf_t124_nodeRefresh_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_T_nodeRefresh_item }, +}; + +static int +dissect_t124_NodeRefresh(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_set_of(tvb, offset, actx, tree, hf_index, + ett_t124_NodeRefresh, NodeRefresh_set_of, + 1, 65536, FALSE); + + return offset; +} + + +static const value_string t124_T_nodeUpdate_vals[] = { + { 0, "addRecord" }, + { 1, "replaceRecord" }, + { 2, "removeRecord" }, + { 0, NULL } +}; + +static const per_choice_t T_nodeUpdate_choice[] = { + { 0, &hf_t124_addRecord , ASN1_EXTENSION_ROOT , dissect_t124_NodeRecord }, + { 1, &hf_t124_replaceRecord , ASN1_EXTENSION_ROOT , dissect_t124_NodeRecord }, + { 2, &hf_t124_removeRecord , ASN1_EXTENSION_ROOT , dissect_t124_NULL }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_T_nodeUpdate(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_T_nodeUpdate, T_nodeUpdate_choice, + NULL); + + return offset; +} + + +static const per_sequence_t T_update_item_sequence[] = { + { &hf_t124_nodeID , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserID }, + { &hf_t124_nodeUpdate , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_T_nodeUpdate }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_T_update_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_T_update_item, T_update_item_sequence); + + return offset; +} + + +static const per_sequence_t T_update_set_of[1] = { + { &hf_t124_update_item , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_T_update_item }, +}; + +static int +dissect_t124_T_update(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_set_of(tvb, offset, actx, tree, hf_index, + ett_t124_T_update, T_update_set_of, + 1, 65536, FALSE); + + return offset; +} + + +static const value_string t124_T_nodeRecordList_vals[] = { + { 0, "noChange" }, + { 1, "refresh" }, + { 2, "update" }, + { 0, NULL } +}; + +static const per_choice_t T_nodeRecordList_choice[] = { + { 0, &hf_t124_noChange , ASN1_EXTENSION_ROOT , dissect_t124_NULL }, + { 1, &hf_t124_nodeRefresh , ASN1_EXTENSION_ROOT , dissect_t124_NodeRefresh }, + { 2, &hf_t124_update , ASN1_EXTENSION_ROOT , dissect_t124_T_update }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_T_nodeRecordList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_T_nodeRecordList, T_nodeRecordList_choice, + NULL); + + return offset; +} + + +static const per_sequence_t T_nodeInformation_sequence[] = { + { &hf_t124_nodeRecordList , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_T_nodeRecordList }, + { &hf_t124_rosterInstanceNumber, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_INTEGER_0_65535 }, + { &hf_t124_nodesAdded , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_nodesRemoved , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_T_nodeInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_T_nodeInformation, T_nodeInformation_sequence); + + return offset; +} + + +static const per_sequence_t T_applicationRefresh_item_sequence[] = { + { &hf_t124_nodeID , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserID }, + { &hf_t124_entityID , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_EntityID }, + { &hf_t124_applicationRecord, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_ApplicationRecord }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_T_applicationRefresh_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_T_applicationRefresh_item, T_applicationRefresh_item_sequence); + + return offset; +} + + +static const per_sequence_t ApplicationRefresh_set_of[1] = { + { &hf_t124_applicationRefresh_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_T_applicationRefresh_item }, +}; + +static int +dissect_t124_ApplicationRefresh(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_set_of(tvb, offset, actx, tree, hf_index, + ett_t124_ApplicationRefresh, ApplicationRefresh_set_of, + 0, 65535, FALSE); + + return offset; +} + + +static const value_string t124_T_applicationUpdate_vals[] = { + { 0, "addRecord" }, + { 1, "replaceRecord" }, + { 2, "removeRecord" }, + { 0, NULL } +}; + +static const per_choice_t T_applicationUpdate_choice[] = { + { 0, &hf_t124_addRecord_01 , ASN1_EXTENSION_ROOT , dissect_t124_ApplicationRecord }, + { 1, &hf_t124_replaceRecord_01, ASN1_EXTENSION_ROOT , dissect_t124_ApplicationRecord }, + { 2, &hf_t124_removeRecord , ASN1_EXTENSION_ROOT , dissect_t124_NULL }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_T_applicationUpdate(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_T_applicationUpdate, T_applicationUpdate_choice, + NULL); + + return offset; +} + + +static const per_sequence_t ApplicationUpdateItem_sequence[] = { + { &hf_t124_nodeID , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserID }, + { &hf_t124_entityID , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_EntityID }, + { &hf_t124_applicationUpdate_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_T_applicationUpdate }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ApplicationUpdateItem(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ApplicationUpdateItem, ApplicationUpdateItem_sequence); + + return offset; +} + + +static const per_sequence_t ApplicationUpdate_set_of[1] = { + { &hf_t124_applicationUpdateItem, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_ApplicationUpdateItem }, +}; + +static int +dissect_t124_ApplicationUpdate(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_set_of(tvb, offset, actx, tree, hf_index, + ett_t124_ApplicationUpdate, ApplicationUpdate_set_of, + 1, 65536, FALSE); + + return offset; +} + + +static const value_string t124_T_applicationRecordList_vals[] = { + { 0, "noChange" }, + { 1, "refresh" }, + { 2, "update" }, + { 0, NULL } +}; + +static const per_choice_t T_applicationRecordList_choice[] = { + { 0, &hf_t124_noChange , ASN1_EXTENSION_ROOT , dissect_t124_NULL }, + { 1, &hf_t124_applicationRefresh, ASN1_EXTENSION_ROOT , dissect_t124_ApplicationRefresh }, + { 2, &hf_t124_applicationUpdate, ASN1_EXTENSION_ROOT , dissect_t124_ApplicationUpdate }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_T_applicationRecordList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_T_applicationRecordList, T_applicationRecordList_choice, + NULL); + + return offset; +} + + + +static int +dissect_t124_INTEGER_1_65536(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, + 1U, 65536U, NULL, FALSE); + + return offset; +} + + +static const per_sequence_t T_refresh_item_sequence[] = { + { &hf_t124_capabilityID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_CapabilityID }, + { &hf_t124_capabilityClass, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_CapabilityClass }, + { &hf_t124_numberOfEntities, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_INTEGER_1_65536 }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_T_refresh_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_T_refresh_item, T_refresh_item_sequence); + + return offset; +} + + +static const per_sequence_t T_refresh_set_of[1] = { + { &hf_t124_refresh_item , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_T_refresh_item }, +}; + +static int +dissect_t124_T_refresh(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_set_of(tvb, offset, actx, tree, hf_index, + ett_t124_T_refresh, T_refresh_set_of); + + return offset; +} + + +static const value_string t124_T_applicationCapabilitiesList_vals[] = { + { 0, "noChange" }, + { 1, "refresh" }, + { 0, NULL } +}; + +static const per_choice_t T_applicationCapabilitiesList_choice[] = { + { 0, &hf_t124_noChange , ASN1_EXTENSION_ROOT , dissect_t124_NULL }, + { 1, &hf_t124_refresh , ASN1_EXTENSION_ROOT , dissect_t124_T_refresh }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_T_applicationCapabilitiesList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_T_applicationCapabilitiesList, T_applicationCapabilitiesList_choice, + NULL); + + return offset; +} + + +static const per_sequence_t T_applicationInformation_item_sequence[] = { + { &hf_t124_sessionKey , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_SessionKey }, + { &hf_t124_applicationRecordList, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_T_applicationRecordList }, + { &hf_t124_applicationCapabilitiesList, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_T_applicationCapabilitiesList }, + { &hf_t124_rosterInstanceNumber, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_INTEGER_0_65535 }, + { &hf_t124_peerEntitiesAdded, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_peerEntitiesRemoved, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_T_applicationInformation_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_T_applicationInformation_item, T_applicationInformation_item_sequence); + + return offset; +} + + +static const per_sequence_t T_applicationInformation_set_of[1] = { + { &hf_t124_applicationInformation_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_T_applicationInformation_item }, +}; + +static int +dissect_t124_T_applicationInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_set_of(tvb, offset, actx, tree, hf_index, + ett_t124_T_applicationInformation, T_applicationInformation_set_of, + 0, 65535, FALSE); + + return offset; +} + + +static const per_sequence_t RosterUpdateIndication_sequence[] = { + { &hf_t124_fullRefresh , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_nodeInformation, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_T_nodeInformation }, + { &hf_t124_applicationInformation, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_T_applicationInformation }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_RosterUpdateIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_RosterUpdateIndication, RosterUpdateIndication_sequence); + + return offset; +} + + +static const per_sequence_t SET_SIZE_1_65536_OF_ApplicationInvokeSpecifier_set_of[1] = { + { &hf_t124_applicationProtocolEntiyList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_ApplicationInvokeSpecifier }, +}; + +static int +dissect_t124_SET_SIZE_1_65536_OF_ApplicationInvokeSpecifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_set_of(tvb, offset, actx, tree, hf_index, + ett_t124_SET_SIZE_1_65536_OF_ApplicationInvokeSpecifier, SET_SIZE_1_65536_OF_ApplicationInvokeSpecifier_set_of, + 1, 65536, FALSE); + + return offset; +} + + +static const per_sequence_t ApplicationInvokeIndication_sequence[] = { + { &hf_t124_applicationProtocolEntiyList, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_SET_SIZE_1_65536_OF_ApplicationInvokeSpecifier }, + { &hf_t124_destinationNodes, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_SET_SIZE_1_65536_OF_UserID }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ApplicationInvokeIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ApplicationInvokeIndication, ApplicationInvokeIndication_sequence); + + return offset; +} + + +static const per_sequence_t RegistryRegisterChannelRequest_sequence[] = { + { &hf_t124_entityID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_EntityID }, + { &hf_t124_key_01 , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_RegistryKey }, + { &hf_t124_channelID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_DynamicChannelID }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_RegistryRegisterChannelRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_RegistryRegisterChannelRequest, RegistryRegisterChannelRequest_sequence); + + return offset; +} + + +static const per_sequence_t RegistryAssignTokenRequest_sequence[] = { + { &hf_t124_entityID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_EntityID }, + { &hf_t124_key_01 , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_RegistryKey }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_RegistryAssignTokenRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_RegistryAssignTokenRequest, RegistryAssignTokenRequest_sequence); + + return offset; +} + + +static const per_sequence_t RegistrySetParameterRequest_sequence[] = { + { &hf_t124_entityID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_EntityID }, + { &hf_t124_key_01 , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_RegistryKey }, + { &hf_t124_parameter , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_OCTET_STRING_SIZE_0_64 }, + { &hf_t124_modificationRights, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_RegistryModificationRights }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_RegistrySetParameterRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_RegistrySetParameterRequest, RegistrySetParameterRequest_sequence); + + return offset; +} + + +static const per_sequence_t RegistryRetrieveEntryRequest_sequence[] = { + { &hf_t124_entityID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_EntityID }, + { &hf_t124_key_01 , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_RegistryKey }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_RegistryRetrieveEntryRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_RegistryRetrieveEntryRequest, RegistryRetrieveEntryRequest_sequence); + + return offset; +} + + +static const per_sequence_t RegistryDeleteEntryRequest_sequence[] = { + { &hf_t124_entityID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_EntityID }, + { &hf_t124_key_01 , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_RegistryKey }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_RegistryDeleteEntryRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_RegistryDeleteEntryRequest, RegistryDeleteEntryRequest_sequence); + + return offset; +} + + +static const per_sequence_t RegistryMonitorEntryRequest_sequence[] = { + { &hf_t124_entityID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_EntityID }, + { &hf_t124_key_01 , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_RegistryKey }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_RegistryMonitorEntryRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_RegistryMonitorEntryRequest, RegistryMonitorEntryRequest_sequence); + + return offset; +} + + +static const per_sequence_t RegistryMonitorEntryIndication_sequence[] = { + { &hf_t124_key_01 , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_RegistryKey }, + { &hf_t124_item , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_RegistryItem }, + { &hf_t124_owner , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_RegistryEntryOwner }, + { &hf_t124_modificationRights, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_RegistryModificationRights }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_RegistryMonitorEntryIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_RegistryMonitorEntryIndication, RegistryMonitorEntryIndication_sequence); + + return offset; +} + + + +static int +dissect_t124_INTEGER_1_1024(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, + 1U, 1024U, NULL, FALSE); + + return offset; +} + + +static const per_sequence_t RegistryAllocateHandleRequest_sequence[] = { + { &hf_t124_entityID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_EntityID }, + { &hf_t124_numberOfHandles, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_INTEGER_1_1024 }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_RegistryAllocateHandleRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_RegistryAllocateHandleRequest, RegistryAllocateHandleRequest_sequence); + + return offset; +} + + +static const value_string t124_AllocateHandleResponseResult_vals[] = { + { 0, "successful" }, + { 1, "noHandlesAvailable" }, + { 0, NULL } +}; + + +static int +dissect_t124_AllocateHandleResponseResult(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, + 2, NULL, TRUE, 0, NULL); + + return offset; +} + + +static const per_sequence_t RegistryAllocateHandleResponse_sequence[] = { + { &hf_t124_entityID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_EntityID }, + { &hf_t124_numberOfHandles, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_INTEGER_1_1024 }, + { &hf_t124_firstHandle , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_Handle }, + { &hf_t124_allocateHandleResponseResult, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_AllocateHandleResponseResult }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_RegistryAllocateHandleResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_RegistryAllocateHandleResponse, RegistryAllocateHandleResponse_sequence); + + return offset; +} + + +static const value_string t124_T_primitiveType_vals[] = { + { 0, "registerChannel" }, + { 1, "assignToken" }, + { 2, "setParameter" }, + { 3, "retrieveEntry" }, + { 4, "deleteEntry" }, + { 5, "monitorEntry" }, + { 0, NULL } +}; + + +static int +dissect_t124_T_primitiveType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, + 6, NULL, TRUE, 0, NULL); + + return offset; +} + + +static const value_string t124_T_result_01_vals[] = { + { 0, "successful" }, + { 1, "belongsToOther" }, + { 2, "tooManyEntries" }, + { 3, "inconsistentType" }, + { 4, "entryNotFound" }, + { 5, "entryAlreadyExists" }, + { 6, "invalidRequester" }, + { 0, NULL } +}; + + +static int +dissect_t124_T_result_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, + 7, NULL, TRUE, 0, NULL); + + return offset; +} + + +static const per_sequence_t RegistryResponse_sequence[] = { + { &hf_t124_entityID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_EntityID }, + { &hf_t124_primitiveType , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_T_primitiveType }, + { &hf_t124_key_01 , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_RegistryKey }, + { &hf_t124_item , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_RegistryItem }, + { &hf_t124_owner , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_RegistryEntryOwner }, + { &hf_t124_modificationRights, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_RegistryModificationRights }, + { &hf_t124_result_01 , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_T_result_01 }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_RegistryResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_RegistryResponse, RegistryResponse_sequence); + + return offset; +} + + +static const per_sequence_t ConductorAssignIndication_sequence[] = { + { &hf_t124_conductingNode , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_UserID }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ConductorAssignIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConductorAssignIndication, ConductorAssignIndication_sequence); + + return offset; +} + + +static const per_sequence_t ConductorReleaseIndication_sequence[] = { + { NULL, ASN1_EXTENSION_ROOT, 0, NULL } +}; + +static int +dissect_t124_ConductorReleaseIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConductorReleaseIndication, ConductorReleaseIndication_sequence); + + return offset; +} + + +static const per_sequence_t ConductorPermissionAskIndication_sequence[] = { + { &hf_t124_grantFlag , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ConductorPermissionAskIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConductorPermissionAskIndication, ConductorPermissionAskIndication_sequence); + + return offset; +} + + +static const per_sequence_t SEQUENCE_SIZE_0_65535_OF_UserID_sequence_of[1] = { + { &hf_t124_permissionList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserID }, +}; + +static int +dissect_t124_SEQUENCE_SIZE_0_65535_OF_UserID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index, + ett_t124_SEQUENCE_SIZE_0_65535_OF_UserID, SEQUENCE_SIZE_0_65535_OF_UserID_sequence_of, + 0, 65535, FALSE); + + return offset; +} + + +static const per_sequence_t SEQUENCE_SIZE_1_65536_OF_UserID_sequence_of[1] = { + { &hf_t124_waitingList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserID }, +}; + +static int +dissect_t124_SEQUENCE_SIZE_1_65536_OF_UserID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index, + ett_t124_SEQUENCE_SIZE_1_65536_OF_UserID, SEQUENCE_SIZE_1_65536_OF_UserID_sequence_of, + 1, 65536, FALSE); + + return offset; +} + + +static const per_sequence_t ConductorPermissionGrantIndication_sequence[] = { + { &hf_t124_permissionList , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_SEQUENCE_SIZE_0_65535_OF_UserID }, + { &hf_t124_waitingList , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_SEQUENCE_SIZE_1_65536_OF_UserID }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ConductorPermissionGrantIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConductorPermissionGrantIndication, ConductorPermissionGrantIndication_sequence); + + return offset; +} + + +static const per_sequence_t ConferenceTimeRemainingIndication_sequence[] = { + { &hf_t124_timeRemaining , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_Time }, + { &hf_t124_nodeID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_UserID }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ConferenceTimeRemainingIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConferenceTimeRemainingIndication, ConferenceTimeRemainingIndication_sequence); + + return offset; +} + + +static const per_sequence_t ConferenceTimeInquireIndication_sequence[] = { + { &hf_t124_nodeSpecificTimeFlag, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ConferenceTimeInquireIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConferenceTimeInquireIndication, ConferenceTimeInquireIndication_sequence); + + return offset; +} + + +static const per_sequence_t ConferenceTimeExtendIndication_sequence[] = { + { &hf_t124_timeToExtend , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_Time }, + { &hf_t124_nodeSpecificTimeFlag, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ConferenceTimeExtendIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConferenceTimeExtendIndication, ConferenceTimeExtendIndication_sequence); + + return offset; +} + + +static const per_sequence_t ConferenceAssistanceIndication_sequence[] = { + { &hf_t124_userData , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_t124_UserData }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ConferenceAssistanceIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConferenceAssistanceIndication, ConferenceAssistanceIndication_sequence); + + return offset; +} + + +static const per_sequence_t TextMessageIndication_sequence[] = { + { &hf_t124_message , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_TextString }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_TextMessageIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_TextMessageIndication, TextMessageIndication_sequence); + + return offset; +} + + +static const per_sequence_t NonStandardPDU_sequence[] = { + { &hf_t124_data_02 , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_t124_NonStandardParameter }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_NonStandardPDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_NonStandardPDU, NonStandardPDU_sequence); + + return offset; +} + + +static const value_string t124_RequestPDU_vals[] = { + { 0, "conferenceJoinRequest" }, + { 1, "conferenceAddRequest" }, + { 2, "conferenceLockRequest" }, + { 3, "conferenceUnlockRequest" }, + { 4, "conferenceTerminateRequest" }, + { 5, "conferenceEjectUserRequest" }, + { 6, "conferenceTransferRequest" }, + { 7, "registryRegisterChannelRequest" }, + { 8, "registryAssignTokenRequest" }, + { 9, "registrySetParameterRequest" }, + { 10, "registryRetrieveEntryRequest" }, + { 11, "registryDeleteEntryRequest" }, + { 12, "registryMonitorEntryRequest" }, + { 13, "registryAllocateHandleRequest" }, + { 14, "nonStandardRequest" }, + { 0, NULL } +}; + +static const per_choice_t RequestPDU_choice[] = { + { 0, &hf_t124_conferenceJoinRequest, ASN1_EXTENSION_ROOT , dissect_t124_ConferenceJoinRequest }, + { 1, &hf_t124_conferenceAddRequest, ASN1_EXTENSION_ROOT , dissect_t124_ConferenceAddRequest }, + { 2, &hf_t124_conferenceLockRequest, ASN1_EXTENSION_ROOT , dissect_t124_ConferenceLockRequest }, + { 3, &hf_t124_conferenceUnlockRequest, ASN1_EXTENSION_ROOT , dissect_t124_ConferenceUnlockRequest }, + { 4, &hf_t124_conferenceTerminateRequest, ASN1_EXTENSION_ROOT , dissect_t124_ConferenceTerminateRequest }, + { 5, &hf_t124_conferenceEjectUserRequest, ASN1_EXTENSION_ROOT , dissect_t124_ConferenceEjectUserRequest }, + { 6, &hf_t124_conferenceTransferRequest, ASN1_EXTENSION_ROOT , dissect_t124_ConferenceTransferRequest }, + { 7, &hf_t124_registryRegisterChannelRequest, ASN1_EXTENSION_ROOT , dissect_t124_RegistryRegisterChannelRequest }, + { 8, &hf_t124_registryAssignTokenRequest, ASN1_EXTENSION_ROOT , dissect_t124_RegistryAssignTokenRequest }, + { 9, &hf_t124_registrySetParameterRequest, ASN1_EXTENSION_ROOT , dissect_t124_RegistrySetParameterRequest }, + { 10, &hf_t124_registryRetrieveEntryRequest, ASN1_EXTENSION_ROOT , dissect_t124_RegistryRetrieveEntryRequest }, + { 11, &hf_t124_registryDeleteEntryRequest, ASN1_EXTENSION_ROOT , dissect_t124_RegistryDeleteEntryRequest }, + { 12, &hf_t124_registryMonitorEntryRequest, ASN1_EXTENSION_ROOT , dissect_t124_RegistryMonitorEntryRequest }, + { 13, &hf_t124_registryAllocateHandleRequest, ASN1_EXTENSION_ROOT , dissect_t124_RegistryAllocateHandleRequest }, + { 14, &hf_t124_nonStandardRequest, ASN1_EXTENSION_ROOT , dissect_t124_NonStandardPDU }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_RequestPDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_RequestPDU, RequestPDU_choice, + NULL); + + return offset; +} + + +static const per_sequence_t FunctionNotSupportedResponse_sequence[] = { + { &hf_t124_request , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_RequestPDU }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_FunctionNotSupportedResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_FunctionNotSupportedResponse, FunctionNotSupportedResponse_sequence); + + return offset; +} + + + +static int +dissect_t124_T_connectPDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 42 "../../asn1/t124/t124.cnf" + tvbuff_t *next_tvb = NULL; + proto_tree *next_tree = NULL; + int old_offset = 0; + + old_offset = offset; + offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, + NO_BOUND, NO_BOUND, FALSE, &next_tvb); + + 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_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); + + } + + + return offset; +} + + +static const per_sequence_t ConnectData_sequence[] = { + { &hf_t124_t124Identifier , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_Key }, + { &hf_t124_connectPDU , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_T_connectPDU }, + { NULL, 0, 0, NULL } +}; + +int +dissect_t124_ConnectData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ConnectData, ConnectData_sequence); + + return offset; +} + + +const value_string t124_ConnectGCCPDU_vals[] = { + { 0, "conferenceCreateRequest" }, + { 1, "conferenceCreateResponse" }, + { 2, "conferenceQueryRequest" }, + { 3, "conferenceQueryResponse" }, + { 4, "conferenceJoinRequest" }, + { 5, "conferenceJoinResponse" }, + { 6, "conferenceInviteRequest" }, + { 7, "conferenceInviteResponse" }, + { 0, NULL } +}; + +static const per_choice_t ConnectGCCPDU_choice[] = { + { 0, &hf_t124_conferenceCreateRequest, ASN1_EXTENSION_ROOT , dissect_t124_ConferenceCreateRequest }, + { 1, &hf_t124_conferenceCreateResponse, ASN1_EXTENSION_ROOT , dissect_t124_ConferenceCreateResponse }, + { 2, &hf_t124_conferenceQueryRequest, ASN1_EXTENSION_ROOT , dissect_t124_ConferenceQueryRequest }, + { 3, &hf_t124_conferenceQueryResponse, ASN1_EXTENSION_ROOT , dissect_t124_ConferenceQueryResponse }, + { 4, &hf_t124_conferenceJoinRequest, ASN1_EXTENSION_ROOT , dissect_t124_ConferenceJoinRequest }, + { 5, &hf_t124_conferenceJoinResponse, ASN1_EXTENSION_ROOT , dissect_t124_ConferenceJoinResponse }, + { 6, &hf_t124_conferenceInviteRequest, ASN1_EXTENSION_ROOT , dissect_t124_ConferenceInviteRequest }, + { 7, &hf_t124_conferenceInviteResponse, ASN1_EXTENSION_ROOT , dissect_t124_ConferenceInviteResponse }, + { 0, NULL, 0, NULL } +}; + +int +dissect_t124_ConnectGCCPDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_ConnectGCCPDU, ConnectGCCPDU_choice, + NULL); + + return offset; +} + + +static const value_string t124_ResponsePDU_vals[] = { + { 0, "conferenceJoinResponse" }, + { 1, "conferenceAddResponse" }, + { 2, "conferenceLockResponse" }, + { 3, "conferenceUnlockResponse" }, + { 4, "conferenceTerminateResponse" }, + { 5, "conferenceEjectUserResponse" }, + { 6, "conferenceTransferResponse" }, + { 7, "registryResponse" }, + { 8, "registryAllocateHandleResponse" }, + { 9, "functionNotSupportedResponse" }, + { 10, "nonStandardResponse" }, + { 0, NULL } +}; + +static const per_choice_t ResponsePDU_choice[] = { + { 0, &hf_t124_conferenceJoinResponse, ASN1_EXTENSION_ROOT , dissect_t124_ConferenceJoinResponse }, + { 1, &hf_t124_conferenceAddResponse, ASN1_EXTENSION_ROOT , dissect_t124_ConferenceAddResponse }, + { 2, &hf_t124_conferenceLockResponse, ASN1_EXTENSION_ROOT , dissect_t124_ConferenceLockResponse }, + { 3, &hf_t124_conferenceUnlockResponse, ASN1_EXTENSION_ROOT , dissect_t124_ConferenceUnlockResponse }, + { 4, &hf_t124_conferenceTerminateResponse, ASN1_EXTENSION_ROOT , dissect_t124_ConferenceTerminateResponse }, + { 5, &hf_t124_conferenceEjectUserResponse, ASN1_EXTENSION_ROOT , dissect_t124_ConferenceEjectUserResponse }, + { 6, &hf_t124_conferenceTransferResponse, ASN1_EXTENSION_ROOT , dissect_t124_ConferenceTransferResponse }, + { 7, &hf_t124_registryResponse, ASN1_EXTENSION_ROOT , dissect_t124_RegistryResponse }, + { 8, &hf_t124_registryAllocateHandleResponse, ASN1_EXTENSION_ROOT , dissect_t124_RegistryAllocateHandleResponse }, + { 9, &hf_t124_functionNotSupportedResponse, ASN1_EXTENSION_ROOT , dissect_t124_FunctionNotSupportedResponse }, + { 10, &hf_t124_nonStandardResponse, ASN1_EXTENSION_ROOT , dissect_t124_NonStandardPDU }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_ResponsePDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_ResponsePDU, ResponsePDU_choice, + NULL); + + return offset; +} + + +static const value_string t124_IndicationPDU_vals[] = { + { 0, "userIDIndication" }, + { 1, "conferenceLockIndication" }, + { 2, "conferenceUnlockIndication" }, + { 3, "conferenceTerminateIndication" }, + { 4, "conferenceEjectUserIndication" }, + { 5, "conferenceTransferIndication" }, + { 6, "rosterUpdateIndication" }, + { 7, "applicationInvokeIndication" }, + { 8, "registryMonitorEntryIndication" }, + { 9, "conductorAssignIndication" }, + { 10, "conductorReleaseIndication" }, + { 11, "conductorPermissionAskIndication" }, + { 12, "conductorPermissionGrantIndication" }, + { 13, "conferenceTimeRemainingIndication" }, + { 14, "conferenceTimeInquireIndication" }, + { 15, "conferenceTimeExtendIndication" }, + { 16, "conferenceAssistanceIndication" }, + { 17, "textMessageIndication" }, + { 18, "nonStandardIndication" }, + { 0, NULL } +}; + +static const per_choice_t IndicationPDU_choice[] = { + { 0, &hf_t124_userIDIndication, ASN1_EXTENSION_ROOT , dissect_t124_UserIDIndication }, + { 1, &hf_t124_conferenceLockIndication, ASN1_EXTENSION_ROOT , dissect_t124_ConferenceLockIndication }, + { 2, &hf_t124_conferenceUnlockIndication, ASN1_EXTENSION_ROOT , dissect_t124_ConferenceUnlockIndication }, + { 3, &hf_t124_conferenceTerminateIndication, ASN1_EXTENSION_ROOT , dissect_t124_ConferenceTerminateIndication }, + { 4, &hf_t124_conferenceEjectUserIndication, ASN1_EXTENSION_ROOT , dissect_t124_ConferenceEjectUserIndication }, + { 5, &hf_t124_conferenceTransferIndication, ASN1_EXTENSION_ROOT , dissect_t124_ConferenceTransferIndication }, + { 6, &hf_t124_rosterUpdateIndication, ASN1_EXTENSION_ROOT , dissect_t124_RosterUpdateIndication }, + { 7, &hf_t124_applicationInvokeIndication, ASN1_EXTENSION_ROOT , dissect_t124_ApplicationInvokeIndication }, + { 8, &hf_t124_registryMonitorEntryIndication, ASN1_EXTENSION_ROOT , dissect_t124_RegistryMonitorEntryIndication }, + { 9, &hf_t124_conductorAssignIndication, ASN1_EXTENSION_ROOT , dissect_t124_ConductorAssignIndication }, + { 10, &hf_t124_conductorReleaseIndication, ASN1_EXTENSION_ROOT , dissect_t124_ConductorReleaseIndication }, + { 11, &hf_t124_conductorPermissionAskIndication, ASN1_EXTENSION_ROOT , dissect_t124_ConductorPermissionAskIndication }, + { 12, &hf_t124_conductorPermissionGrantIndication, ASN1_EXTENSION_ROOT , dissect_t124_ConductorPermissionGrantIndication }, + { 13, &hf_t124_conferenceTimeRemainingIndication, ASN1_EXTENSION_ROOT , dissect_t124_ConferenceTimeRemainingIndication }, + { 14, &hf_t124_conferenceTimeInquireIndication, ASN1_EXTENSION_ROOT , dissect_t124_ConferenceTimeInquireIndication }, + { 15, &hf_t124_conferenceTimeExtendIndication, ASN1_EXTENSION_ROOT , dissect_t124_ConferenceTimeExtendIndication }, + { 16, &hf_t124_conferenceAssistanceIndication, ASN1_EXTENSION_ROOT , dissect_t124_ConferenceAssistanceIndication }, + { 17, &hf_t124_textMessageIndication, ASN1_EXTENSION_ROOT , dissect_t124_TextMessageIndication }, + { 18, &hf_t124_nonStandardIndication, ASN1_EXTENSION_ROOT , dissect_t124_NonStandardPDU }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_IndicationPDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_IndicationPDU, IndicationPDU_choice, + NULL); + + return offset; +} + + + +static int +dissect_t124_ChannelId(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 142 "../../asn1/t124/t124.cnf" + + offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, + 0U, 65535U, &channelId, FALSE); + + + if(hf_index == hf_t124_channelId_03) + col_append_fstr(actx->pinfo->cinfo, COL_INFO, "%d", channelId); + + + + + return offset; +} + + + +static int +dissect_t124_StaticChannelId(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_t124_ChannelId(tvb, offset, actx, tree, hf_index); + + return offset; +} + + + +static int +dissect_t124_DynamicChannelId(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_t124_ChannelId(tvb, offset, actx, tree, hf_index); + + return offset; +} + + + +static int +dissect_t124_UserId(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_t124_DynamicChannelId(tvb, offset, actx, tree, hf_index); + + return offset; +} + + + +static int +dissect_t124_PrivateChannelId(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_t124_DynamicChannelId(tvb, offset, actx, tree, hf_index); + + return offset; +} + + + +static int +dissect_t124_AssignedChannelId(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_t124_DynamicChannelId(tvb, offset, actx, tree, hf_index); + + return offset; +} + + + +static int +dissect_t124_TokenId(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, + 1U, 65535U, NULL, FALSE); + + return offset; +} + + +static const value_string t124_TokenStatus_vals[] = { + { 0, "notInUse" }, + { 1, "selfGrabbed" }, + { 2, "otherGrabbed" }, + { 3, "selfInhibited" }, + { 4, "otherInhibited" }, + { 5, "selfRecipient" }, + { 6, "selfGiving" }, + { 7, "otherGiving" }, + { 0, NULL } +}; + + +static int +dissect_t124_TokenStatus(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, + 8, NULL, FALSE, 0, NULL); + + return offset; +} + + +static const value_string t124_DataPriority_vals[] = { + { 0, "top" }, + { 1, "high" }, + { 2, "medium" }, + { 3, "low" }, + { 0, NULL } +}; + + +static int +dissect_t124_DataPriority(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, + 4, NULL, FALSE, 0, NULL); + + return offset; +} + + + +static int +dissect_t124_Segmentation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index, + 2, 2, FALSE, NULL); + + return offset; +} + + +static const per_sequence_t DomainParameters_sequence[] = { + { &hf_t124_maxChannelIds , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_INTEGER_0_MAX }, + { &hf_t124_maxUserIds , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_INTEGER_0_MAX }, + { &hf_t124_maxTokenIds , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_INTEGER_0_MAX }, + { &hf_t124_numPriorities , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_INTEGER_0_MAX }, + { &hf_t124_minThroughput , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_INTEGER_0_MAX }, + { &hf_t124_maxHeight , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_INTEGER_0_MAX }, + { &hf_t124_maxMCSPDUsize , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_INTEGER_0_MAX }, + { &hf_t124_protocolVersion, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_INTEGER_0_MAX }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_DomainParameters(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_DomainParameters, DomainParameters_sequence); + + return offset; +} + + +static const per_sequence_t Connect_Initial_sequence[] = { + { &hf_t124_callingDomainSelector, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_OCTET_STRING }, + { &hf_t124_calledDomainSelector, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_OCTET_STRING }, + { &hf_t124_upwardFlag , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_targetParameters, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_DomainParameters }, + { &hf_t124_minimumParameters, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_DomainParameters }, + { &hf_t124_maximumParameters, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_DomainParameters }, + { &hf_t124_userData_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_OCTET_STRING }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_Connect_Initial(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_Connect_Initial, Connect_Initial_sequence); + + return offset; +} + + +static const value_string t124_Result_vals[] = { + { 0, "rt-successful" }, + { 1, "rt-domain-merging" }, + { 2, "rt-domain-not-hierarchical" }, + { 3, "rt-no-such-channel" }, + { 4, "rt-no-such-domain" }, + { 5, "rt-no-such-user" }, + { 6, "rt-not-admitted" }, + { 7, "rt-other-user-id" }, + { 8, "rt-parameters-unacceptable" }, + { 9, "rt-token-not-available" }, + { 10, "rt-token-not-possessed" }, + { 11, "rt-too-many-channels" }, + { 12, "rt-too-many-tokens" }, + { 13, "rt-too-many-users" }, + { 14, "rt-unspecified-failure" }, + { 15, "rt-user-rejected" }, + { 0, NULL } +}; + + +static int +dissect_t124_Result(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, + 16, NULL, FALSE, 0, NULL); + + return offset; +} + + +static const per_sequence_t Connect_Response_sequence[] = { + { &hf_t124_result_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_Result }, + { &hf_t124_calledConnectId, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_INTEGER_0_MAX }, + { &hf_t124_domainParameters, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_DomainParameters }, + { &hf_t124_userData_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_OCTET_STRING }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_Connect_Response(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_Connect_Response, Connect_Response_sequence); + + return offset; +} + + +static const per_sequence_t Connect_Additional_sequence[] = { + { &hf_t124_calledConnectId, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_INTEGER_0_MAX }, + { &hf_t124_dataPriority , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_DataPriority }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_Connect_Additional(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_Connect_Additional, Connect_Additional_sequence); + + return offset; +} + + +static const per_sequence_t Connect_Result_sequence[] = { + { &hf_t124_result_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_Result }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_Connect_Result(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_Connect_Result, Connect_Result_sequence); + + return offset; +} + + +static const per_sequence_t PlumbDomainIndication_sequence[] = { + { &hf_t124_heightLimit , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_INTEGER_0_MAX }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_PlumbDomainIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_PlumbDomainIndication, PlumbDomainIndication_sequence); + + return offset; +} + + +static const per_sequence_t ErectDomainRequest_sequence[] = { + { &hf_t124_subHeight , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_INTEGER_0_MAX }, + { &hf_t124_subInterval , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_INTEGER_0_MAX }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ErectDomainRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ErectDomainRequest, ErectDomainRequest_sequence); + + return offset; +} + + +static const per_sequence_t T_static_sequence[] = { + { &hf_t124_channelId , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_StaticChannelId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_T_static(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_T_static, T_static_sequence); + + return offset; +} + + +static const per_sequence_t T_userId_sequence[] = { + { &hf_t124_joined , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_userId_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_T_userId(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_T_userId, T_userId_sequence); + + return offset; +} + + +static const per_sequence_t SET_OF_UserId_set_of[1] = { + { &hf_t124_admitted_item , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, +}; + +static int +dissect_t124_SET_OF_UserId(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_set_of(tvb, offset, actx, tree, hf_index, + ett_t124_SET_OF_UserId, SET_OF_UserId_set_of); + + return offset; +} + + +static const per_sequence_t T_private_sequence[] = { + { &hf_t124_joined , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_BOOLEAN }, + { &hf_t124_channelId_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_PrivateChannelId }, + { &hf_t124_manager , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, + { &hf_t124_admitted , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_SET_OF_UserId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_T_private(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_T_private, T_private_sequence); + + return offset; +} + + +static const per_sequence_t T_assigned_sequence[] = { + { &hf_t124_channelId_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_AssignedChannelId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_T_assigned(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_T_assigned, T_assigned_sequence); + + return offset; +} + + +static const value_string t124_ChannelAttributes_vals[] = { + { 0, "static" }, + { 1, "userId" }, + { 2, "private" }, + { 3, "assigned" }, + { 0, NULL } +}; + +static const per_choice_t ChannelAttributes_choice[] = { + { 0, &hf_t124_static , ASN1_NO_EXTENSIONS , dissect_t124_T_static }, + { 1, &hf_t124_userId , ASN1_NO_EXTENSIONS , dissect_t124_T_userId }, + { 2, &hf_t124_private , ASN1_NO_EXTENSIONS , dissect_t124_T_private }, + { 3, &hf_t124_assigned , ASN1_NO_EXTENSIONS , dissect_t124_T_assigned }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_ChannelAttributes(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_ChannelAttributes, ChannelAttributes_choice, + NULL); + + return offset; +} + + +static const per_sequence_t SET_OF_ChannelAttributes_set_of[1] = { + { &hf_t124_mergeChannels_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_ChannelAttributes }, +}; + +static int +dissect_t124_SET_OF_ChannelAttributes(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_set_of(tvb, offset, actx, tree, hf_index, + ett_t124_SET_OF_ChannelAttributes, SET_OF_ChannelAttributes_set_of); + + return offset; +} + + +static const per_sequence_t SET_OF_ChannelId_set_of[1] = { + { &hf_t124_purgeChannelIds_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_ChannelId }, +}; + +static int +dissect_t124_SET_OF_ChannelId(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_set_of(tvb, offset, actx, tree, hf_index, + ett_t124_SET_OF_ChannelId, SET_OF_ChannelId_set_of); + + return offset; +} + + +static const per_sequence_t MergeChannelsRequest_sequence[] = { + { &hf_t124_mergeChannels , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_SET_OF_ChannelAttributes }, + { &hf_t124_purgeChannelIds, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_SET_OF_ChannelId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_MergeChannelsRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_MergeChannelsRequest, MergeChannelsRequest_sequence); + + return offset; +} + + +static const per_sequence_t MergeChannelsConfirm_sequence[] = { + { &hf_t124_mergeChannels , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_SET_OF_ChannelAttributes }, + { &hf_t124_purgeChannelIds, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_SET_OF_ChannelId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_MergeChannelsConfirm(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_MergeChannelsConfirm, MergeChannelsConfirm_sequence); + + return offset; +} + + +static const per_sequence_t PurgeChannelsIndication_sequence[] = { + { &hf_t124_detachUserIds , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_SET_OF_UserId }, + { &hf_t124_purgeChannelIds, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_SET_OF_ChannelId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_PurgeChannelsIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_PurgeChannelsIndication, PurgeChannelsIndication_sequence); + + return offset; +} + + +static const per_sequence_t T_grabbed_sequence[] = { + { &hf_t124_tokenId , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_TokenId }, + { &hf_t124_grabber , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_T_grabbed(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_T_grabbed, T_grabbed_sequence); + + return offset; +} + + +static const per_sequence_t T_inhibited_sequence[] = { + { &hf_t124_tokenId , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_TokenId }, + { &hf_t124_inhibitors , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_SET_OF_UserId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_T_inhibited(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_T_inhibited, T_inhibited_sequence); + + return offset; +} + + +static const per_sequence_t T_giving_sequence[] = { + { &hf_t124_tokenId , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_TokenId }, + { &hf_t124_grabber , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, + { &hf_t124_recipient , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_T_giving(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_T_giving, T_giving_sequence); + + return offset; +} + + +static const per_sequence_t T_ungivable_sequence[] = { + { &hf_t124_tokenId , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_TokenId }, + { &hf_t124_grabber , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_T_ungivable(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_T_ungivable, T_ungivable_sequence); + + return offset; +} + + +static const per_sequence_t T_given_sequence[] = { + { &hf_t124_tokenId , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_TokenId }, + { &hf_t124_recipient , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_T_given(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_T_given, T_given_sequence); + + return offset; +} + + +static const value_string t124_TokenAttributes_vals[] = { + { 0, "grabbed" }, + { 1, "inhibited" }, + { 2, "giving" }, + { 3, "ungivable" }, + { 4, "given" }, + { 0, NULL } +}; + +static const per_choice_t TokenAttributes_choice[] = { + { 0, &hf_t124_grabbed , ASN1_NO_EXTENSIONS , dissect_t124_T_grabbed }, + { 1, &hf_t124_inhibited , ASN1_NO_EXTENSIONS , dissect_t124_T_inhibited }, + { 2, &hf_t124_giving , ASN1_NO_EXTENSIONS , dissect_t124_T_giving }, + { 3, &hf_t124_ungivable , ASN1_NO_EXTENSIONS , dissect_t124_T_ungivable }, + { 4, &hf_t124_given , ASN1_NO_EXTENSIONS , dissect_t124_T_given }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_TokenAttributes(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_TokenAttributes, TokenAttributes_choice, + NULL); + + return offset; +} + + +static const per_sequence_t SET_OF_TokenAttributes_set_of[1] = { + { &hf_t124_mergeTokens_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_TokenAttributes }, +}; + +static int +dissect_t124_SET_OF_TokenAttributes(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_set_of(tvb, offset, actx, tree, hf_index, + ett_t124_SET_OF_TokenAttributes, SET_OF_TokenAttributes_set_of); + + return offset; +} + + +static const per_sequence_t SET_OF_TokenId_set_of[1] = { + { &hf_t124_purgeTokenIds_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_TokenId }, +}; + +static int +dissect_t124_SET_OF_TokenId(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_set_of(tvb, offset, actx, tree, hf_index, + ett_t124_SET_OF_TokenId, SET_OF_TokenId_set_of); + + return offset; +} + + +static const per_sequence_t MergeTokensRequest_sequence[] = { + { &hf_t124_mergeTokens , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_SET_OF_TokenAttributes }, + { &hf_t124_purgeTokenIds , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_SET_OF_TokenId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_MergeTokensRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_MergeTokensRequest, MergeTokensRequest_sequence); + + return offset; +} + + +static const per_sequence_t MergeTokensConfirm_sequence[] = { + { &hf_t124_mergeTokens , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_SET_OF_TokenAttributes }, + { &hf_t124_purgeTokenIds , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_SET_OF_TokenId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_MergeTokensConfirm(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_MergeTokensConfirm, MergeTokensConfirm_sequence); + + return offset; +} + + +static const per_sequence_t PurgeTokensIndication_sequence[] = { + { &hf_t124_purgeTokenIds , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_SET_OF_TokenId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_PurgeTokensIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_PurgeTokensIndication, PurgeTokensIndication_sequence); + + return offset; +} + + +static const value_string t124_Reason_vals[] = { + { 0, "rn-domain-disconnected" }, + { 1, "rn-provider-initiated" }, + { 2, "rn-token-purged" }, + { 3, "rn-user-requested" }, + { 4, "rn-channel-purged" }, + { 0, NULL } +}; + + +static int +dissect_t124_Reason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, + 5, NULL, FALSE, 0, NULL); + + return offset; +} + + +static const per_sequence_t DisconnectProviderUltimatum_sequence[] = { + { &hf_t124_reason_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_Reason }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_DisconnectProviderUltimatum(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_DisconnectProviderUltimatum, DisconnectProviderUltimatum_sequence); + + return offset; +} + + +static const value_string t124_Diagnostic_vals[] = { + { 0, "dc-inconsistent-merge" }, + { 1, "dc-forbidden-PDU-downward" }, + { 2, "dc-forbidden-PDU-upward" }, + { 3, "dc-invalid-BER-encoding" }, + { 4, "dc-invalid-PER-encoding" }, + { 5, "dc-misrouted-user" }, + { 6, "dc-unrequested-confirm" }, + { 7, "dc-wrong-transport-priority" }, + { 8, "dc-channel-id-conflict" }, + { 9, "dc-token-id-conflict" }, + { 10, "dc-not-user-id-channel" }, + { 11, "dc-too-many-channels" }, + { 12, "dc-too-many-tokens" }, + { 13, "dc-too-many-users" }, + { 0, NULL } +}; + + +static int +dissect_t124_Diagnostic(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index, + 14, NULL, FALSE, 0, NULL); + + return offset; +} + + +static const per_sequence_t RejectMCSPDUUltimatum_sequence[] = { + { &hf_t124_diagnostic , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_Diagnostic }, + { &hf_t124_initialOctets , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_OCTET_STRING }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_RejectMCSPDUUltimatum(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_RejectMCSPDUUltimatum, RejectMCSPDUUltimatum_sequence); + + return offset; +} + + +static const per_sequence_t AttachUserRequest_sequence[] = { + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_AttachUserRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_AttachUserRequest, AttachUserRequest_sequence); + + return offset; +} + + +static const per_sequence_t AttachUserConfirm_sequence[] = { + { &hf_t124_result_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_Result }, + { &hf_t124_initiator , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_t124_UserId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_AttachUserConfirm(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_AttachUserConfirm, AttachUserConfirm_sequence); + + return offset; +} + + +static const per_sequence_t DetachUserRequest_sequence[] = { + { &hf_t124_reason_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_Reason }, + { &hf_t124_userIds , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_SET_OF_UserId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_DetachUserRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_DetachUserRequest, DetachUserRequest_sequence); + + return offset; +} + + +static const per_sequence_t DetachUserIndication_sequence[] = { + { &hf_t124_reason_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_Reason }, + { &hf_t124_userIds , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_SET_OF_UserId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_DetachUserIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_DetachUserIndication, DetachUserIndication_sequence); + + return offset; +} + + +static const per_sequence_t ChannelJoinRequest_sequence[] = { + { &hf_t124_initiator , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, + { &hf_t124_channelId_03 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_ChannelId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ChannelJoinRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ChannelJoinRequest, ChannelJoinRequest_sequence); + + return offset; +} + + +static const per_sequence_t ChannelJoinConfirm_sequence[] = { + { &hf_t124_result_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_Result }, + { &hf_t124_initiator , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, + { &hf_t124_requested , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_ChannelId }, + { &hf_t124_channelId_03 , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_t124_ChannelId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ChannelJoinConfirm(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ChannelJoinConfirm, ChannelJoinConfirm_sequence); + + return offset; +} + + +static const per_sequence_t ChannelLeaveRequest_sequence[] = { + { &hf_t124_channelIds , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_SET_OF_ChannelId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ChannelLeaveRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ChannelLeaveRequest, ChannelLeaveRequest_sequence); + + return offset; +} + + +static const per_sequence_t ChannelConveneRequest_sequence[] = { + { &hf_t124_initiator , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ChannelConveneRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ChannelConveneRequest, ChannelConveneRequest_sequence); + + return offset; +} + + +static const per_sequence_t ChannelConveneConfirm_sequence[] = { + { &hf_t124_result_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_Result }, + { &hf_t124_initiator , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, + { &hf_t124_channelId_01 , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_t124_PrivateChannelId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ChannelConveneConfirm(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ChannelConveneConfirm, ChannelConveneConfirm_sequence); + + return offset; +} + + +static const per_sequence_t ChannelDisbandRequest_sequence[] = { + { &hf_t124_initiator , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, + { &hf_t124_channelId_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_PrivateChannelId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ChannelDisbandRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ChannelDisbandRequest, ChannelDisbandRequest_sequence); + + return offset; +} + + +static const per_sequence_t ChannelDisbandIndication_sequence[] = { + { &hf_t124_channelId_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_PrivateChannelId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ChannelDisbandIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ChannelDisbandIndication, ChannelDisbandIndication_sequence); + + return offset; +} + + +static const per_sequence_t ChannelAdmitRequest_sequence[] = { + { &hf_t124_initiator , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, + { &hf_t124_channelId_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_PrivateChannelId }, + { &hf_t124_userIds , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_SET_OF_UserId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ChannelAdmitRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ChannelAdmitRequest, ChannelAdmitRequest_sequence); + + return offset; +} + + +static const per_sequence_t ChannelAdmitIndication_sequence[] = { + { &hf_t124_initiator , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, + { &hf_t124_channelId_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_PrivateChannelId }, + { &hf_t124_userIds , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_SET_OF_UserId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ChannelAdmitIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ChannelAdmitIndication, ChannelAdmitIndication_sequence); + + return offset; +} + + +static const per_sequence_t ChannelExpelRequest_sequence[] = { + { &hf_t124_initiator , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, + { &hf_t124_channelId_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_PrivateChannelId }, + { &hf_t124_userIds , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_SET_OF_UserId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ChannelExpelRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ChannelExpelRequest, ChannelExpelRequest_sequence); + + return offset; +} + + +static const per_sequence_t ChannelExpelIndication_sequence[] = { + { &hf_t124_channelId_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_PrivateChannelId }, + { &hf_t124_userIds , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_SET_OF_UserId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_ChannelExpelIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_ChannelExpelIndication, ChannelExpelIndication_sequence); + + return offset; +} + + + +static int +dissect_t124_T_userData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 85 "../../asn1/t124/t124.cnf" + tvbuff_t *next_tvb = NULL; + + offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, + NO_BOUND, NO_BOUND, FALSE, &next_tvb); + + + if(next_tvb) { + + dissector_try_uint(t124_sd_dissector_table, channelId, next_tvb, actx->pinfo, top_tree); + + } + + + + return offset; +} + + +static const per_sequence_t SendDataRequest_sequence[] = { + { &hf_t124_initiator , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, + { &hf_t124_channelId_03 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_ChannelId }, + { &hf_t124_dataPriority , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_DataPriority }, + { &hf_t124_segmentation , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_Segmentation }, + { &hf_t124_userData_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_T_userData }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_SendDataRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_SendDataRequest, SendDataRequest_sequence); + + return offset; +} + + + +static int +dissect_t124_T_userData_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 98 "../../asn1/t124/t124.cnf" + tvbuff_t *next_tvb = NULL; + + offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index, + NO_BOUND, NO_BOUND, FALSE, &next_tvb); + + + if(next_tvb) { + + dissector_try_uint(t124_sd_dissector_table, channelId, next_tvb, actx->pinfo, top_tree); + + } + + + + return offset; +} + + +static const per_sequence_t SendDataIndication_sequence[] = { + { &hf_t124_initiator , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, + { &hf_t124_channelId_03 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_ChannelId }, + { &hf_t124_dataPriority , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_DataPriority }, + { &hf_t124_segmentation , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_Segmentation }, + { &hf_t124_userData_03 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_T_userData_01 }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_SendDataIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_SendDataIndication, SendDataIndication_sequence); + + return offset; +} + + +static const per_sequence_t UniformSendDataRequest_sequence[] = { + { &hf_t124_initiator , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, + { &hf_t124_channelId_03 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_ChannelId }, + { &hf_t124_dataPriority , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_DataPriority }, + { &hf_t124_segmentation , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_Segmentation }, + { &hf_t124_userData_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_OCTET_STRING }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_UniformSendDataRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_UniformSendDataRequest, UniformSendDataRequest_sequence); + + return offset; +} + + +static const per_sequence_t UniformSendDataIndication_sequence[] = { + { &hf_t124_initiator , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, + { &hf_t124_channelId_03 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_ChannelId }, + { &hf_t124_dataPriority , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_DataPriority }, + { &hf_t124_segmentation , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_Segmentation }, + { &hf_t124_userData_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_OCTET_STRING }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_UniformSendDataIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_UniformSendDataIndication, UniformSendDataIndication_sequence); + + return offset; +} + + +static const per_sequence_t TokenGrabRequest_sequence[] = { + { &hf_t124_initiator , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, + { &hf_t124_tokenId , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_TokenId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_TokenGrabRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_TokenGrabRequest, TokenGrabRequest_sequence); + + return offset; +} + + +static const per_sequence_t TokenGrabConfirm_sequence[] = { + { &hf_t124_result_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_Result }, + { &hf_t124_initiator , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, + { &hf_t124_tokenId , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_TokenId }, + { &hf_t124_tokenStatus , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_TokenStatus }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_TokenGrabConfirm(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_TokenGrabConfirm, TokenGrabConfirm_sequence); + + return offset; +} + + +static const per_sequence_t TokenInhibitRequest_sequence[] = { + { &hf_t124_initiator , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, + { &hf_t124_tokenId , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_TokenId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_TokenInhibitRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_TokenInhibitRequest, TokenInhibitRequest_sequence); + + return offset; +} + + +static const per_sequence_t TokenInhibitConfirm_sequence[] = { + { &hf_t124_result_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_Result }, + { &hf_t124_initiator , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, + { &hf_t124_tokenId , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_TokenId }, + { &hf_t124_tokenStatus , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_TokenStatus }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_TokenInhibitConfirm(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_TokenInhibitConfirm, TokenInhibitConfirm_sequence); + + return offset; +} + + +static const per_sequence_t TokenGiveRequest_sequence[] = { + { &hf_t124_initiator , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, + { &hf_t124_tokenId , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_TokenId }, + { &hf_t124_recipient , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_TokenGiveRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_TokenGiveRequest, TokenGiveRequest_sequence); + + return offset; +} + + +static const per_sequence_t TokenGiveIndication_sequence[] = { + { &hf_t124_initiator , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, + { &hf_t124_tokenId , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_TokenId }, + { &hf_t124_recipient , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_TokenGiveIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_TokenGiveIndication, TokenGiveIndication_sequence); + + return offset; +} + + +static const per_sequence_t TokenGiveResponse_sequence[] = { + { &hf_t124_result_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_Result }, + { &hf_t124_recipient , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, + { &hf_t124_tokenId , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_TokenId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_TokenGiveResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_TokenGiveResponse, TokenGiveResponse_sequence); + + return offset; +} + + +static const per_sequence_t TokenGiveConfirm_sequence[] = { + { &hf_t124_result_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_Result }, + { &hf_t124_initiator , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, + { &hf_t124_tokenId , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_TokenId }, + { &hf_t124_tokenStatus , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_TokenStatus }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_TokenGiveConfirm(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_TokenGiveConfirm, TokenGiveConfirm_sequence); + + return offset; +} + + +static const per_sequence_t TokenPleaseRequest_sequence[] = { + { &hf_t124_initiator , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, + { &hf_t124_tokenId , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_TokenId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_TokenPleaseRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_TokenPleaseRequest, TokenPleaseRequest_sequence); + + return offset; +} + + +static const per_sequence_t TokenPleaseIndication_sequence[] = { + { &hf_t124_initiator , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, + { &hf_t124_tokenId , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_TokenId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_TokenPleaseIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_TokenPleaseIndication, TokenPleaseIndication_sequence); + + return offset; +} + + +static const per_sequence_t TokenReleaseRequest_sequence[] = { + { &hf_t124_initiator , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, + { &hf_t124_tokenId , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_TokenId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_TokenReleaseRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_TokenReleaseRequest, TokenReleaseRequest_sequence); + + return offset; +} + + +static const per_sequence_t TokenReleaseConfirm_sequence[] = { + { &hf_t124_result_02 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_Result }, + { &hf_t124_initiator , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, + { &hf_t124_tokenId , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_TokenId }, + { &hf_t124_tokenStatus , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_TokenStatus }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_TokenReleaseConfirm(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_TokenReleaseConfirm, TokenReleaseConfirm_sequence); + + return offset; +} + + +static const per_sequence_t TokenTestRequest_sequence[] = { + { &hf_t124_initiator , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, + { &hf_t124_tokenId , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_TokenId }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_TokenTestRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_TokenTestRequest, TokenTestRequest_sequence); + + return offset; +} + + +static const per_sequence_t TokenTestConfirm_sequence[] = { + { &hf_t124_initiator , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_UserId }, + { &hf_t124_tokenId , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_TokenId }, + { &hf_t124_tokenStatus , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_t124_TokenStatus }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_t124_TokenTestConfirm(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index, + ett_t124_TokenTestConfirm, TokenTestConfirm_sequence); + + return offset; +} + + +static const value_string t124_ConnectMCSPDU_vals[] = { + { 0, "connect-initial" }, + { 1, "connect-response" }, + { 2, "connect-additional" }, + { 3, "connect-result" }, + { 0, NULL } +}; + +static const per_choice_t ConnectMCSPDU_choice[] = { + { 0, &hf_t124_connect_initial, ASN1_NO_EXTENSIONS , dissect_t124_Connect_Initial }, + { 1, &hf_t124_connect_response, ASN1_NO_EXTENSIONS , dissect_t124_Connect_Response }, + { 2, &hf_t124_connect_additional, ASN1_NO_EXTENSIONS , dissect_t124_Connect_Additional }, + { 3, &hf_t124_connect_result , ASN1_NO_EXTENSIONS , dissect_t124_Connect_Result }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_ConnectMCSPDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_ConnectMCSPDU, ConnectMCSPDU_choice, + NULL); + + return offset; +} + + +static const value_string t124_DomainMCSPDU_vals[] = { + { 0, "plumbDomainIndication" }, + { 1, "erectDomainRequest" }, + { 2, "mergeChannelsRequest" }, + { 3, "mergeChannelsConfirm" }, + { 4, "purgeChannelsIndication" }, + { 5, "mergeTokensRequest" }, + { 6, "mergeTokensConfirm" }, + { 7, "purgeTokensIndication" }, + { 8, "disconnectProviderUltimatum" }, + { 9, "rejectMCSPDUUltimatum" }, + { 10, "attachUserRequest" }, + { 11, "attachUserConfirm" }, + { 12, "detachUserRequest" }, + { 13, "detachUserIndication" }, + { 14, "channelJoinRequest" }, + { 15, "channelJoinConfirm" }, + { 16, "channelLeaveRequest" }, + { 17, "channelConveneRequest" }, + { 18, "channelConveneConfirm" }, + { 19, "channelDisbandRequest" }, + { 20, "channelDisbandIndication" }, + { 21, "channelAdmitRequest" }, + { 22, "channelAdmitIndication" }, + { 23, "channelExpelRequest" }, + { 24, "channelExpelIndication" }, + { 25, "sendDataRequest" }, + { 26, "sendDataIndication" }, + { 27, "uniformSendDataRequest" }, + { 28, "uniformSendDataIndication" }, + { 29, "tokenGrabRequest" }, + { 30, "tokenGrabConfirm" }, + { 31, "tokenInhibitRequest" }, + { 32, "tokenInhibitConfirm" }, + { 33, "tokenGiveRequest" }, + { 34, "tokenGiveIndication" }, + { 35, "tokenGiveResponse" }, + { 36, "tokenGiveConfirm" }, + { 37, "tokenPleaseRequest" }, + { 38, "tokenPleaseIndication" }, + { 39, "tokenReleaseRequest" }, + { 40, "tokenReleaseConfirm" }, + { 41, "tokenTestRequest" }, + { 42, "tokenTestConfirm" }, + { 0, NULL } +}; + +static const per_choice_t DomainMCSPDU_choice[] = { + { 0, &hf_t124_plumbDomainIndication, ASN1_NO_EXTENSIONS , dissect_t124_PlumbDomainIndication }, + { 1, &hf_t124_erectDomainRequest, ASN1_NO_EXTENSIONS , dissect_t124_ErectDomainRequest }, + { 2, &hf_t124_mergeChannelsRequest, ASN1_NO_EXTENSIONS , dissect_t124_MergeChannelsRequest }, + { 3, &hf_t124_mergeChannelsConfirm, ASN1_NO_EXTENSIONS , dissect_t124_MergeChannelsConfirm }, + { 4, &hf_t124_purgeChannelsIndication, ASN1_NO_EXTENSIONS , dissect_t124_PurgeChannelsIndication }, + { 5, &hf_t124_mergeTokensRequest, ASN1_NO_EXTENSIONS , dissect_t124_MergeTokensRequest }, + { 6, &hf_t124_mergeTokensConfirm, ASN1_NO_EXTENSIONS , dissect_t124_MergeTokensConfirm }, + { 7, &hf_t124_purgeTokensIndication, ASN1_NO_EXTENSIONS , dissect_t124_PurgeTokensIndication }, + { 8, &hf_t124_disconnectProviderUltimatum, ASN1_NO_EXTENSIONS , dissect_t124_DisconnectProviderUltimatum }, + { 9, &hf_t124_rejectMCSPDUUltimatum, ASN1_NO_EXTENSIONS , dissect_t124_RejectMCSPDUUltimatum }, + { 10, &hf_t124_attachUserRequest, ASN1_NO_EXTENSIONS , dissect_t124_AttachUserRequest }, + { 11, &hf_t124_attachUserConfirm, ASN1_NO_EXTENSIONS , dissect_t124_AttachUserConfirm }, + { 12, &hf_t124_detachUserRequest, ASN1_NO_EXTENSIONS , dissect_t124_DetachUserRequest }, + { 13, &hf_t124_detachUserIndication, ASN1_NO_EXTENSIONS , dissect_t124_DetachUserIndication }, + { 14, &hf_t124_channelJoinRequest, ASN1_NO_EXTENSIONS , dissect_t124_ChannelJoinRequest }, + { 15, &hf_t124_channelJoinConfirm, ASN1_NO_EXTENSIONS , dissect_t124_ChannelJoinConfirm }, + { 16, &hf_t124_channelLeaveRequest, ASN1_NO_EXTENSIONS , dissect_t124_ChannelLeaveRequest }, + { 17, &hf_t124_channelConveneRequest, ASN1_NO_EXTENSIONS , dissect_t124_ChannelConveneRequest }, + { 18, &hf_t124_channelConveneConfirm, ASN1_NO_EXTENSIONS , dissect_t124_ChannelConveneConfirm }, + { 19, &hf_t124_channelDisbandRequest, ASN1_NO_EXTENSIONS , dissect_t124_ChannelDisbandRequest }, + { 20, &hf_t124_channelDisbandIndication, ASN1_NO_EXTENSIONS , dissect_t124_ChannelDisbandIndication }, + { 21, &hf_t124_channelAdmitRequest, ASN1_NO_EXTENSIONS , dissect_t124_ChannelAdmitRequest }, + { 22, &hf_t124_channelAdmitIndication, ASN1_NO_EXTENSIONS , dissect_t124_ChannelAdmitIndication }, + { 23, &hf_t124_channelExpelRequest, ASN1_NO_EXTENSIONS , dissect_t124_ChannelExpelRequest }, + { 24, &hf_t124_channelExpelIndication, ASN1_NO_EXTENSIONS , dissect_t124_ChannelExpelIndication }, + { 25, &hf_t124_sendDataRequest, ASN1_NO_EXTENSIONS , dissect_t124_SendDataRequest }, + { 26, &hf_t124_sendDataIndication, ASN1_NO_EXTENSIONS , dissect_t124_SendDataIndication }, + { 27, &hf_t124_uniformSendDataRequest, ASN1_NO_EXTENSIONS , dissect_t124_UniformSendDataRequest }, + { 28, &hf_t124_uniformSendDataIndication, ASN1_NO_EXTENSIONS , dissect_t124_UniformSendDataIndication }, + { 29, &hf_t124_tokenGrabRequest, ASN1_NO_EXTENSIONS , dissect_t124_TokenGrabRequest }, + { 30, &hf_t124_tokenGrabConfirm, ASN1_NO_EXTENSIONS , dissect_t124_TokenGrabConfirm }, + { 31, &hf_t124_tokenInhibitRequest, ASN1_NO_EXTENSIONS , dissect_t124_TokenInhibitRequest }, + { 32, &hf_t124_tokenInhibitConfirm, ASN1_NO_EXTENSIONS , dissect_t124_TokenInhibitConfirm }, + { 33, &hf_t124_tokenGiveRequest, ASN1_NO_EXTENSIONS , dissect_t124_TokenGiveRequest }, + { 34, &hf_t124_tokenGiveIndication, ASN1_NO_EXTENSIONS , dissect_t124_TokenGiveIndication }, + { 35, &hf_t124_tokenGiveResponse, ASN1_NO_EXTENSIONS , dissect_t124_TokenGiveResponse }, + { 36, &hf_t124_tokenGiveConfirm, ASN1_NO_EXTENSIONS , dissect_t124_TokenGiveConfirm }, + { 37, &hf_t124_tokenPleaseRequest, ASN1_NO_EXTENSIONS , dissect_t124_TokenPleaseRequest }, + { 38, &hf_t124_tokenPleaseIndication, ASN1_NO_EXTENSIONS , dissect_t124_TokenPleaseIndication }, + { 39, &hf_t124_tokenReleaseRequest, ASN1_NO_EXTENSIONS , dissect_t124_TokenReleaseRequest }, + { 40, &hf_t124_tokenReleaseConfirm, ASN1_NO_EXTENSIONS , dissect_t124_TokenReleaseConfirm }, + { 41, &hf_t124_tokenTestRequest, ASN1_NO_EXTENSIONS , dissect_t124_TokenTestRequest }, + { 42, &hf_t124_tokenTestConfirm, ASN1_NO_EXTENSIONS , dissect_t124_TokenTestConfirm }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_t124_DomainMCSPDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 112 "../../asn1/t124/t124.cnf" + gint domainmcs_value; + + offset = dissect_per_choice(tvb, offset, actx, tree, hf_index, + ett_t124_DomainMCSPDU, DomainMCSPDU_choice, + &domainmcs_value); + + switch(domainmcs_value) { + case 25: /* sendDataRequest */ + case 26: /* sendDataIndication */ + case 27: /* uniformSendDataRequest */ + case 28: /* uniformSendDataIndication */ + /* Do nothing */ + break; + default: + col_prepend_fstr(actx->pinfo->cinfo, COL_INFO, "%s ", val_to_str(domainmcs_value, t124_DomainMCSPDU_vals, "Unknown")); + break; + } + + + + return offset; +} + + +/*--- End of included file: packet-t124-fn.c ---*/ +#line 68 "../../asn1/t124/packet-t124-template.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, 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, 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 _U_, packet_info *pinfo _U_, proto_tree *tree _U_) { + 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 _U_, proto_tree *parent_tree) +{ + 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.125"); + col_clear(pinfo->cinfo, COL_INFO); + + item = proto_tree_add_item(parent_tree, proto_t124, tvb, 0, tvb_length(tvb), FALSE); + 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_length(tvb); +} + +static gboolean +dissect_t124_heur(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *parent_tree) +{ + asn1_ctx_t asn1_ctx; + + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + + t124Identifier = NULL; + + (void) dissect_per_sequence(tvb, 0, &asn1_ctx, NULL, -1, -1, t124Heur_sequence); + + if((t124Identifier != NULL) && + (strcmp(t124Identifier, "0.0.20.124.0.1") == 0)) { + + dissect_t124(tvb, pinfo, parent_tree); + + } + + 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 }}, + +/*--- Included file: packet-t124-hfarr.c ---*/ +#line 1 "../../asn1/t124/packet-t124-hfarr.c" + { &hf_t124_object, + { "object", "t124.object", + FT_OID, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_h221NonStandard, + { "h221NonStandard", "t124.h221NonStandard", + FT_BYTES, BASE_NONE, NULL, 0, + "H221NonStandardIdentifier", HFILL }}, + { &hf_t124_key, + { "key", "t124.key", + FT_UINT32, BASE_DEC, VALS(t124_Key_vals), 0, + NULL, HFILL }}, + { &hf_t124_data, + { "data", "t124.data", + FT_BYTES, BASE_NONE, NULL, 0, + "OCTET_STRING", HFILL }}, + { &hf_t124_UserData_item, + { "UserData item", "t124.UserData_item", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_value, + { "value", "t124.value", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_numeric, + { "numeric", "t124.numeric", + FT_STRING, BASE_NONE, NULL, 0, + "SimpleNumericString", HFILL }}, + { &hf_t124_text, + { "text", "t124.text", + FT_STRING, BASE_NONE, NULL, 0, + "SimpleTextString", HFILL }}, + { &hf_t124_unicodeText, + { "unicodeText", "t124.unicodeText", + FT_STRING, BASE_NONE, NULL, 0, + "TextString", HFILL }}, + { &hf_t124_passwordString, + { "passwordString", "t124.passwordString", + FT_UINT32, BASE_DEC, VALS(t124_PasswordSelector_vals), 0, + "PasswordSelector", HFILL }}, + { &hf_t124_responseData, + { "responseData", "t124.responseData", + FT_UINT32, BASE_DEC, NULL, 0, + "UserData", HFILL }}, + { &hf_t124_passwordInTheClear, + { "passwordInTheClear", "t124.passwordInTheClear", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_nonStandardAlgorithm, + { "nonStandardAlgorithm", "t124.nonStandardAlgorithm", + FT_NONE, BASE_NONE, NULL, 0, + "NonStandardParameter", HFILL }}, + { &hf_t124_responseAlgorithm, + { "responseAlgorithm", "t124.responseAlgorithm", + FT_UINT32, BASE_DEC, VALS(t124_ChallengeResponseAlgorithm_vals), 0, + "ChallengeResponseAlgorithm", HFILL }}, + { &hf_t124_challengeData, + { "challengeData", "t124.challengeData", + FT_UINT32, BASE_DEC, NULL, 0, + "UserData", HFILL }}, + { &hf_t124_challengeTag, + { "challengeTag", "t124.challengeTag", + FT_INT32, BASE_DEC, NULL, 0, + "INTEGER", HFILL }}, + { &hf_t124_challengeSet, + { "challengeSet", "t124.challengeSet", + FT_UINT32, BASE_DEC, NULL, 0, + "SET_OF_ChallengeItem", HFILL }}, + { &hf_t124_challengeSet_item, + { "ChallengeItem", "t124.ChallengeItem", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_responseItem, + { "responseItem", "t124.responseItem", + FT_UINT32, BASE_DEC, VALS(t124_ChallengeResponseItem_vals), 0, + "ChallengeResponseItem", HFILL }}, + { &hf_t124_passwordInTheClear_01, + { "passwordInTheClear", "t124.passwordInTheClear", + FT_UINT32, BASE_DEC, VALS(t124_PasswordSelector_vals), 0, + "PasswordSelector", HFILL }}, + { &hf_t124_challengeRequestResponse, + { "challengeRequestResponse", "t124.challengeRequestResponse", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_challengeRequest, + { "challengeRequest", "t124.challengeRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_challengeResponse, + { "challengeResponse", "t124.challengeResponse", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_nonStandardScheme, + { "nonStandardScheme", "t124.nonStandardScheme", + FT_NONE, BASE_NONE, NULL, 0, + "NonStandardParameter", HFILL }}, + { &hf_t124_priority, + { "priority", "t124.priority", + FT_UINT32, BASE_DEC, NULL, 0, + "INTEGER_0_65535", HFILL }}, + { &hf_t124_scheme, + { "scheme", "t124.scheme", + FT_UINT32, BASE_DEC, VALS(t124_ConferencePriorityScheme_vals), 0, + "ConferencePriorityScheme", HFILL }}, + { &hf_t124_conventional, + { "conventional", "t124.conventional", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_counted, + { "counted", "t124.counted", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_anonymous, + { "anonymous", "t124.anonymous", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_nonStandardCategory, + { "nonStandardCategory", "t124.nonStandardCategory", + FT_NONE, BASE_NONE, NULL, 0, + "NonStandardParameter", HFILL }}, + { &hf_t124_conventional_only, + { "conventional-only", "t124.conventional_only", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_counted_only, + { "counted-only", "t124.counted_only", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_anonymous_only, + { "anonymous-only", "t124.anonymous_only", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_conventional_control, + { "conventional-control", "t124.conventional_control", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_unrestricted_mode, + { "unrestricted-mode", "t124.unrestricted_mode", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_non_standard_mode, + { "non-standard-mode", "t124.non_standard_mode", + FT_NONE, BASE_NONE, NULL, 0, + "NonStandardParameter", HFILL }}, + { &hf_t124_NetworkAddress_item, + { "NetworkAddress item", "t124.NetworkAddress_item", + FT_UINT32, BASE_DEC, VALS(t124_NetworkAddress_item_vals), 0, + NULL, HFILL }}, + { &hf_t124_aggregatedChannel, + { "aggregatedChannel", "t124.aggregatedChannel", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_transferModes, + { "transferModes", "t124.transferModes", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_speech, + { "speech", "t124.speech", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_voice_band, + { "voice-band", "t124.voice_band", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_digital_56k, + { "digital-56k", "t124.digital_56k", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_digital_64k, + { "digital-64k", "t124.digital_64k", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_digital_128k, + { "digital-128k", "t124.digital_128k", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_digital_192k, + { "digital-192k", "t124.digital_192k", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_digital_256k, + { "digital-256k", "t124.digital_256k", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_digital_320k, + { "digital-320k", "t124.digital_320k", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_digital_384k, + { "digital-384k", "t124.digital_384k", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_digital_512k, + { "digital-512k", "t124.digital_512k", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_digital_768k, + { "digital-768k", "t124.digital_768k", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_digital_1152k, + { "digital-1152k", "t124.digital_1152k", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_digital_1472k, + { "digital-1472k", "t124.digital_1472k", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_digital_1536k, + { "digital-1536k", "t124.digital_1536k", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_digital_1920k, + { "digital-1920k", "t124.digital_1920k", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_packet_mode, + { "packet-mode", "t124.packet_mode", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_frame_mode, + { "frame-mode", "t124.frame_mode", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_atm, + { "atm", "t124.atm", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_internationalNumber, + { "internationalNumber", "t124.internationalNumber", + FT_STRING, BASE_NONE, NULL, 0, + "DiallingString", HFILL }}, + { &hf_t124_subAddress, + { "subAddress", "t124.subAddress", + FT_STRING, BASE_NONE, NULL, 0, + "SubAddressString", HFILL }}, + { &hf_t124_extraDialling, + { "extraDialling", "t124.extraDialling", + FT_STRING, BASE_NONE, NULL, 0, + "ExtraDiallingString", HFILL }}, + { &hf_t124_highLayerCompatibility, + { "highLayerCompatibility", "t124.highLayerCompatibility", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_telephony3kHz, + { "telephony3kHz", "t124.telephony3kHz", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_telephony7kHz, + { "telephony7kHz", "t124.telephony7kHz", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_videotelephony, + { "videotelephony", "t124.videotelephony", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_videoconference, + { "videoconference", "t124.videoconference", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_audiographic, + { "audiographic", "t124.audiographic", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_audiovisual, + { "audiovisual", "t124.audiovisual", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_multimedia, + { "multimedia", "t124.multimedia", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_transportConnection, + { "transportConnection", "t124.transportConnection", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_nsapAddress, + { "nsapAddress", "t124.nsapAddress", + FT_BYTES, BASE_NONE, NULL, 0, + "OCTET_STRING_SIZE_1_20", HFILL }}, + { &hf_t124_transportSelector, + { "transportSelector", "t124.transportSelector", + FT_BYTES, BASE_NONE, NULL, 0, + "OCTET_STRING", HFILL }}, + { &hf_t124_nonStandard, + { "nonStandard", "t124.nonStandard", + FT_NONE, BASE_NONE, NULL, 0, + "NonStandardParameter", HFILL }}, + { &hf_t124_audio, + { "audio", "t124.audio", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_video, + { "video", "t124.video", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_data_01, + { "data", "t124.data", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_h221, + { "h221", "t124.h221", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_h244, + { "h244", "t124.h244", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_iso_iec_13871, + { "iso-iec-13871", "t124.iso_iec_13871", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_simpleProfile, + { "simpleProfile", "t124.simpleProfile", + FT_UINT32, BASE_DEC, VALS(t124_T_simpleProfile_vals), 0, + NULL, HFILL }}, + { &hf_t124_speech_01, + { "speech", "t124.speech", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_telephony_3kHz, + { "telephony-3kHz", "t124.telephony_3kHz", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_telephony_7kHz, + { "telephony-7kHz", "t124.telephony_7kHz", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_voice_band_01, + { "voice-band", "t124.voice_band", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_frameRelay, + { "frameRelay", "t124.frameRelay", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_t123_pstn_basic, + { "t123-pstn-basic", "t124.t123_pstn_basic", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_t123_psdn_basic, + { "t123-psdn-basic", "t124.t123_psdn_basic", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_t123_b_isdn_basic, + { "t123-b-isdn-basic", "t124.t123_b_isdn_basic", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_multimediaProfile, + { "multimediaProfile", "t124.multimediaProfile", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_profile, + { "profile", "t124.profile", + FT_UINT32, BASE_DEC, VALS(t124_T_profile_vals), 0, + NULL, HFILL }}, + { &hf_t124_h310, + { "h310", "t124.h310", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_h320, + { "h320", "t124.h320", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_h321, + { "h321", "t124.h321", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_h322, + { "h322", "t124.h322", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_h323, + { "h323", "t124.h323", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_h324, + { "h324", "t124.h324", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_h324m, + { "h324m", "t124.h324m", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_asvd, + { "asvd", "t124.asvd", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_dsvd, + { "dsvd", "t124.dsvd", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_t120Data, + { "t120Data", "t124.t120Data", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_dsmccDownloadProfile, + { "dsmccDownloadProfile", "t124.dsmccDownloadProfile", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_networkAddress, + { "networkAddress", "t124.networkAddress", + FT_NONE, BASE_NONE, NULL, 0, + "ExtendedE164NetworkAddress", HFILL }}, + { &hf_t124_iSDNCircuitTypes, + { "circuitTypes", "t124.circuitTypes", + FT_UINT32, BASE_DEC, NULL, 0, + "ISDNCircuitTypes", HFILL }}, + { &hf_t124_iSDNCircuitTypes_item, + { "circuitTypes item", "t124.circuitTypes_item", + FT_UINT32, BASE_DEC, VALS(t124_ISDNCircuitTypes_item_vals), 0, + "ISDNCircuitTypes_item", HFILL }}, + { &hf_t124_digital_64k_01, + { "digital-64k", "t124.digital_64k", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_digital_2x64k, + { "digital-2x64k", "t124.digital_2x64k", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_digital_384k_01, + { "digital-384k", "t124.digital_384k", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_digital_1536, + { "digital-1536", "t124.digital_1536", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_digital_1920k_01, + { "digital-1920k", "t124.digital_1920k", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_multirate_base_64k, + { "multirate-base-64k", "t124.multirate_base_64k", + FT_UINT32, BASE_DEC, NULL, 0, + "INTEGER_1_30", HFILL }}, + { &hf_t124_iSDNHighLayerCompatibility, + { "highLayerCompatibility", "t124.highLayerCompatibility", + FT_NONE, BASE_NONE, NULL, 0, + "ISDNHighLayerCompatibility", HFILL }}, + { &hf_t124_circuitTypes, + { "circuitTypes", "t124.circuitTypes", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_t124_circuitTypes_item, + { "circuitTypes item", "t124.circuitTypes_item", + FT_UINT32, BASE_DEC, VALS(t124_T_circuitTypes_item_vals), 0, + NULL, HFILL }}, + { &hf_t124_digital_56k_01, + { "digital-56k", "t124.digital_56k", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_pSDNNetworkAddress, + { "networkAddress", "t124.networkAddress", + FT_UINT32, BASE_DEC, VALS(t124_PSDNNetworkAddress_vals), 0, + "PSDNNetworkAddress", HFILL }}, + { &hf_t124_extendedE164NetworkAddress, + { "extendedE164NetworkAddress", "t124.extendedE164NetworkAddress", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_transportAddress, + { "transportAddress", "t124.transportAddress", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_networkAddress_01, + { "networkAddress", "t124.networkAddress", + FT_UINT32, BASE_DEC, VALS(t124_T_networkAddress_vals), 0, + NULL, HFILL }}, + { &hf_t124_extendedE164, + { "extendedE164", "t124.extendedE164", + FT_NONE, BASE_NONE, NULL, 0, + "ExtendedE164NetworkAddress", HFILL }}, + { &hf_t124_nsapAddress_01, + { "nsapAddress", "t124.nsapAddress", + FT_NONE, BASE_NONE, NULL, 0, + "TransportAddress", HFILL }}, + { &hf_t124_maxTransferRate, + { "maxTransferRate", "t124.maxTransferRate", + FT_UINT32, BASE_DEC, NULL, 0, + "INTEGER_0_MAX", HFILL }}, + { &hf_t124_gstnConnection, + { "gstnConnection", "t124.gstnConnection", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_isdnConnection, + { "isdnConnection", "t124.isdnConnection", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_csdnConnection, + { "csdnConnection", "t124.csdnConnection", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_psdnConnection, + { "psdnConnection", "t124.psdnConnection", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_atmConnection, + { "atmConnection", "t124.atmConnection", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_NetworkAddressV2_item, + { "NetworkAddressV2 item", "t124.NetworkAddressV2_item", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_networkConnection, + { "networkConnection", "t124.networkConnection", + FT_UINT32, BASE_DEC, VALS(t124_T_networkConnection_vals), 0, + NULL, HFILL }}, + { &hf_t124_singleConnection, + { "singleConnection", "t124.singleConnection", + FT_UINT32, BASE_DEC, VALS(t124_NetworkConnection_vals), 0, + "NetworkConnection", HFILL }}, + { &hf_t124_aggregatedConnections, + { "aggregatedConnections", "t124.aggregatedConnections", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_connectionList, + { "connectionList", "t124.connectionList", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_t124_connectionList_item, + { "connectionList item", "t124.connectionList_item", + FT_UINT32, BASE_DEC, VALS(t124_T_connectionList_item_vals), 0, + "T_connectionList_item", HFILL }}, + { &hf_t124_aggregationMethods, + { "aggregationMethods", "t124.aggregationMethods", + FT_UINT32, BASE_DEC, NULL, 0, + "SET_OF_ChannelAggregationMethod", HFILL }}, + { &hf_t124_aggregationMethods_item, + { "ChannelAggregationMethod", "t124.ChannelAggregationMethod", + FT_UINT32, BASE_DEC, VALS(t124_ChannelAggregationMethod_vals), 0, + NULL, HFILL }}, + { &hf_t124_profiles, + { "profiles", "t124.profiles", + FT_UINT32, BASE_DEC, NULL, 0, + "SET_OF_Profile", HFILL }}, + { &hf_t124_profiles_item, + { "Profile", "t124.Profile", + FT_UINT32, BASE_DEC, VALS(t124_Profile_vals), 0, + NULL, HFILL }}, + { &hf_t124_mediaConcerned, + { "mediaConcerned", "t124.mediaConcerned", + FT_NONE, BASE_NONE, NULL, 0, + "MediaList", HFILL }}, + { &hf_t124_managementDevice, + { "managementDevice", "t124.managementDevice", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_peripheralDevice, + { "peripheralDevice", "t124.peripheralDevice", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_callingNode, + { "callingNode", "t124.callingNode", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_calledNode, + { "calledNode", "t124.calledNode", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_unknown, + { "unknown", "t124.unknown", + FT_UINT32, BASE_DEC, NULL, 0, + "INTEGER_0_4294967295", HFILL }}, + { &hf_t124_h243NodeID, + { "h243NodeID", "t124.h243NodeID", + FT_BYTES, BASE_NONE, NULL, 0, + "OCTET_STRING_SIZE_2", HFILL }}, + { &hf_t124_conferenceName, + { "conferenceName", "t124.conferenceName", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_conferenceNameModifier, + { "conferenceNameModifier", "t124.conferenceNameModifier", + FT_STRING, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_conferenceDescription, + { "conferenceDescription", "t124.conferenceDescription", + FT_STRING, BASE_NONE, NULL, 0, + "TextString", HFILL }}, + { &hf_t124_lockedConference, + { "lockedConference", "t124.lockedConference", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_passwordInTheClearRequired, + { "passwordInTheClearRequired", "t124.passwordInTheClearRequired", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_networkAddress_02, + { "networkAddress", "t124.networkAddress", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_t124_defaultConferenceFlag, + { "defaultConferenceFlag", "t124.defaultConferenceFlag", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_conferenceMode, + { "conferenceMode", "t124.conferenceMode", + FT_UINT32, BASE_DEC, VALS(t124_ConferenceMode_vals), 0, + NULL, HFILL }}, + { &hf_t124_superiorNode, + { "superiorNode", "t124.superiorNode", + FT_UINT32, BASE_DEC, NULL, 0, + "UserID", HFILL }}, + { &hf_t124_nodeType, + { "nodeType", "t124.nodeType", + FT_UINT32, BASE_DEC, VALS(t124_NodeType_vals), 0, + NULL, HFILL }}, + { &hf_t124_nodeProperties, + { "nodeProperties", "t124.nodeProperties", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_nodeName, + { "nodeName", "t124.nodeName", + FT_STRING, BASE_NONE, NULL, 0, + "TextString", HFILL }}, + { &hf_t124_participantsList, + { "participantsList", "t124.participantsList", + FT_UINT32, BASE_DEC, NULL, 0, + "SEQUENCE_OF_TextString", HFILL }}, + { &hf_t124_participantsList_item, + { "TextString", "t124.TextString", + FT_STRING, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_siteInformation, + { "siteInformation", "t124.siteInformation", + FT_STRING, BASE_NONE, NULL, 0, + "TextString", HFILL }}, + { &hf_t124_alternativeNodeID, + { "alternativeNodeID", "t124.alternativeNodeID", + FT_UINT32, BASE_DEC, VALS(t124_AlternativeNodeID_vals), 0, + NULL, HFILL }}, + { &hf_t124_userData, + { "userData", "t124.userData", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_t124_nodeCategory, + { "nodeCategory", "t124.nodeCategory", + FT_UINT32, BASE_DEC, VALS(t124_NodeCategory_vals), 0, + NULL, HFILL }}, + { &hf_t124_networkAddressV2, + { "networkAddressV2", "t124.networkAddressV2", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_t124_applicationProtocolKey, + { "applicationProtocolKey", "t124.applicationProtocolKey", + FT_UINT32, BASE_DEC, VALS(t124_Key_vals), 0, + "Key", HFILL }}, + { &hf_t124_sessionID, + { "sessionID", "t124.sessionID", + FT_UINT32, BASE_DEC, NULL, 0, + "ChannelID", HFILL }}, + { &hf_t124_applicationActive, + { "applicationActive", "t124.applicationActive", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_conductingOperationCapable, + { "conductingOperationCapable", "t124.conductingOperationCapable", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_startupChannel, + { "startupChannel", "t124.startupChannel", + FT_UINT32, BASE_DEC, VALS(t124_ChannelType_vals), 0, + "ChannelType", HFILL }}, + { &hf_t124_applicationUserID, + { "applicationUserID", "t124.applicationUserID", + FT_UINT32, BASE_DEC, NULL, 0, + "UserID", HFILL }}, + { &hf_t124_nonCollapsingCapabilities, + { "nonCollapsingCapabilities", "t124.nonCollapsingCapabilities", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_t124_nonCollapsingCapabilities_item, + { "nonCollapsingCapabilities item", "t124.nonCollapsingCapabilities_item", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_capabilityID, + { "capabilityID", "t124.capabilityID", + FT_UINT32, BASE_DEC, VALS(t124_CapabilityID_vals), 0, + NULL, HFILL }}, + { &hf_t124_applicationData, + { "applicationData", "t124.applicationData", + FT_BYTES, BASE_NONE, NULL, 0, + "OCTET_STRING", HFILL }}, + { &hf_t124_standard, + { "standard", "t124.standard", + FT_UINT32, BASE_DEC, NULL, 0, + "INTEGER_0_65535", HFILL }}, + { &hf_t124_nonStandard_01, + { "nonStandard", "t124.nonStandard", + FT_UINT32, BASE_DEC, VALS(t124_Key_vals), 0, + "Key", HFILL }}, + { &hf_t124_logical, + { "logical", "t124.logical", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_unsignedMin, + { "unsignedMin", "t124.unsignedMin", + FT_UINT32, BASE_DEC, NULL, 0, + "INTEGER_0_MAX", HFILL }}, + { &hf_t124_unsignedMax, + { "unsignedMax", "t124.unsignedMax", + FT_UINT32, BASE_DEC, NULL, 0, + "INTEGER_0_MAX", HFILL }}, + { &hf_t124_sessionKey, + { "sessionKey", "t124.sessionKey", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_expectedCapabilitySet, + { "expectedCapabilitySet", "t124.expectedCapabilitySet", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_t124_expectedCapabilitySet_item, + { "expectedCapabilitySet item", "t124.expectedCapabilitySet_item", + FT_NONE, BASE_NONE, NULL, 0, + "T_expectedCapabilitySet_item", HFILL }}, + { &hf_t124_capabilityClass, + { "capabilityClass", "t124.capabilityClass", + FT_UINT32, BASE_DEC, VALS(t124_CapabilityClass_vals), 0, + NULL, HFILL }}, + { &hf_t124_mandatoryFlag, + { "mandatoryFlag", "t124.mandatoryFlag", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_resourceID, + { "resourceID", "t124.resourceID", + FT_BYTES, BASE_NONE, NULL, 0, + "OCTET_STRING_SIZE_0_64", HFILL }}, + { &hf_t124_channelID, + { "channelID", "t124.channelID", + FT_UINT32, BASE_DEC, NULL, 0, + "DynamicChannelID", HFILL }}, + { &hf_t124_tokenID, + { "tokenID", "t124.tokenID", + FT_UINT32, BASE_DEC, NULL, 0, + "DynamicTokenID", HFILL }}, + { &hf_t124_parameter, + { "parameter", "t124.parameter", + FT_BYTES, BASE_NONE, NULL, 0, + "OCTET_STRING_SIZE_0_64", HFILL }}, + { &hf_t124_vacant, + { "vacant", "t124.vacant", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_owned, + { "owned", "t124.owned", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_nodeID, + { "nodeID", "t124.nodeID", + FT_UINT32, BASE_DEC, NULL, 0, + "UserID", HFILL }}, + { &hf_t124_entityID, + { "entityID", "t124.entityID", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_t124_notOwned, + { "notOwned", "t124.notOwned", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_tag, + { "tag", "t124.tag", + FT_INT32, BASE_DEC, NULL, 0, + "INTEGER", HFILL }}, + { &hf_t124_convenerPassword, + { "convenerPassword", "t124.convenerPassword", + FT_NONE, BASE_NONE, NULL, 0, + "Password", HFILL }}, + { &hf_t124_password, + { "password", "t124.password", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_listedConference, + { "listedConference", "t124.listedConference", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_conductibleConference, + { "conductibleConference", "t124.conductibleConference", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_terminationMethod, + { "terminationMethod", "t124.terminationMethod", + FT_UINT32, BASE_DEC, VALS(t124_TerminationMethod_vals), 0, + NULL, HFILL }}, + { &hf_t124_conductorPrivileges, + { "conductorPrivileges", "t124.conductorPrivileges", + FT_UINT32, BASE_DEC, NULL, 0, + "SET_OF_Privilege", HFILL }}, + { &hf_t124_conductorPrivileges_item, + { "Privilege", "t124.Privilege", + FT_UINT32, BASE_DEC, VALS(t124_Privilege_vals), 0, + NULL, HFILL }}, + { &hf_t124_conductedPrivileges, + { "conductedPrivileges", "t124.conductedPrivileges", + FT_UINT32, BASE_DEC, NULL, 0, + "SET_OF_Privilege", HFILL }}, + { &hf_t124_conductedPrivileges_item, + { "Privilege", "t124.Privilege", + FT_UINT32, BASE_DEC, VALS(t124_Privilege_vals), 0, + NULL, HFILL }}, + { &hf_t124_nonConductedPrivileges, + { "nonConductedPrivileges", "t124.nonConductedPrivileges", + FT_UINT32, BASE_DEC, NULL, 0, + "SET_OF_Privilege", HFILL }}, + { &hf_t124_nonConductedPrivileges_item, + { "Privilege", "t124.Privilege", + FT_UINT32, BASE_DEC, VALS(t124_Privilege_vals), 0, + NULL, HFILL }}, + { &hf_t124_callerIdentifier, + { "callerIdentifier", "t124.callerIdentifier", + FT_STRING, BASE_NONE, NULL, 0, + "TextString", HFILL }}, + { &hf_t124_conferencePriority, + { "conferencePriority", "t124.conferencePriority", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_result, + { "result", "t124.result", + FT_UINT32, BASE_DEC, VALS(t124_T_result_vals), 0, + NULL, HFILL }}, + { &hf_t124_asymmetryIndicator, + { "asymmetryIndicator", "t124.asymmetryIndicator", + FT_UINT32, BASE_DEC, VALS(t124_AsymmetryIndicator_vals), 0, + NULL, HFILL }}, + { &hf_t124_conferenceList, + { "conferenceList", "t124.conferenceList", + FT_UINT32, BASE_DEC, NULL, 0, + "SET_OF_ConferenceDescriptor", HFILL }}, + { &hf_t124_conferenceList_item, + { "ConferenceDescriptor", "t124.ConferenceDescriptor", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_queryResponseResult, + { "result", "t124.result", + FT_UINT32, BASE_DEC, VALS(t124_QueryResponseResult_vals), 0, + "QueryResponseResult", HFILL }}, + { &hf_t124_waitForInvitationFlag, + { "waitForInvitationFlag", "t124.waitForInvitationFlag", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_noUnlistedConferenceFlag, + { "noUnlistedConferenceFlag", "t124.noUnlistedConferenceFlag", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_conferenceName_01, + { "conferenceName", "t124.conferenceName", + FT_UINT32, BASE_DEC, VALS(t124_ConferenceNameSelector_vals), 0, + "ConferenceNameSelector", HFILL }}, + { &hf_t124_password_01, + { "password", "t124.password", + FT_UINT32, BASE_DEC, VALS(t124_PasswordChallengeRequestResponse_vals), 0, + "PasswordChallengeRequestResponse", HFILL }}, + { &hf_t124_convenerPassword_01, + { "convenerPassword", "t124.convenerPassword", + FT_UINT32, BASE_DEC, VALS(t124_PasswordSelector_vals), 0, + "PasswordSelector", HFILL }}, + { &hf_t124_topNodeID, + { "topNodeID", "t124.topNodeID", + FT_UINT32, BASE_DEC, NULL, 0, + "UserID", HFILL }}, + { &hf_t124_conferenceNameAlias, + { "conferenceNameAlias", "t124.conferenceNameAlias", + FT_UINT32, BASE_DEC, VALS(t124_ConferenceNameSelector_vals), 0, + "ConferenceNameSelector", HFILL }}, + { &hf_t124_joinResponseResult, + { "result", "t124.result", + FT_UINT32, BASE_DEC, VALS(t124_JoinResponseResult_vals), 0, + "JoinResponseResult", HFILL }}, + { &hf_t124_inviteResponseResult, + { "result", "t124.result", + FT_UINT32, BASE_DEC, VALS(t124_InviteResponseResult_vals), 0, + "InviteResponseResult", HFILL }}, + { &hf_t124_requestingNode, + { "requestingNode", "t124.requestingNode", + FT_UINT32, BASE_DEC, NULL, 0, + "UserID", HFILL }}, + { &hf_t124_addingMCU, + { "addingMCU", "t124.addingMCU", + FT_UINT32, BASE_DEC, NULL, 0, + "UserID", HFILL }}, + { &hf_t124_addResponseResult, + { "result", "t124.result", + FT_UINT32, BASE_DEC, VALS(t124_AddResponseResult_vals), 0, + "AddResponseResult", HFILL }}, + { &hf_t124_lockResponseResult, + { "result", "t124.result", + FT_UINT32, BASE_DEC, VALS(t124_LockResponseResult_vals), 0, + "LockResponseResult", HFILL }}, + { &hf_t124_unlockResponseResult, + { "result", "t124.result", + FT_UINT32, BASE_DEC, VALS(t124_UnlockResponseResult_vals), 0, + "UnlockResponseResult", HFILL }}, + { &hf_t124_terminateRequestReason, + { "reason", "t124.reason", + FT_UINT32, BASE_DEC, VALS(t124_TerminateRequestReason_vals), 0, + "TerminateRequestReason", HFILL }}, + { &hf_t124_terminateResponseResult, + { "result", "t124.result", + FT_UINT32, BASE_DEC, VALS(t124_TerminateResponseResult_vals), 0, + "TerminateResponseResult", HFILL }}, + { &hf_t124_terminateIndicationReason, + { "reason", "t124.reason", + FT_UINT32, BASE_DEC, VALS(t124_TerminateIndicationReason_vals), 0, + "TerminateIndicationReason", HFILL }}, + { &hf_t124_nodeToEject, + { "nodeToEject", "t124.nodeToEject", + FT_UINT32, BASE_DEC, NULL, 0, + "UserID", HFILL }}, + { &hf_t124_ejectUserRequestReason, + { "reason", "t124.reason", + FT_UINT32, BASE_DEC, VALS(t124_EjectUserRequestReason_vals), 0, + "EjectUserRequestReason", HFILL }}, + { &hf_t124_ejectUserResponseResult, + { "result", "t124.result", + FT_UINT32, BASE_DEC, VALS(t124_EjectUserResponseResult_vals), 0, + "EjectUserResponseResult", HFILL }}, + { &hf_t124_reason, + { "reason", "t124.reason", + FT_UINT32, BASE_DEC, VALS(t124_T_reason_vals), 0, + NULL, HFILL }}, + { &hf_t124_transferringNodes, + { "transferringNodes", "t124.transferringNodes", + FT_UINT32, BASE_DEC, NULL, 0, + "SET_SIZE_1_65536_OF_UserID", HFILL }}, + { &hf_t124_transferringNodes_item, + { "UserID", "t124.UserID", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_t124_password_02, + { "password", "t124.password", + FT_UINT32, BASE_DEC, VALS(t124_PasswordSelector_vals), 0, + "PasswordSelector", HFILL }}, + { &hf_t124_transferResponseResult, + { "result", "t124.result", + FT_UINT32, BASE_DEC, VALS(t124_TransferResponseResult_vals), 0, + "TransferResponseResult", HFILL }}, + { &hf_t124_fullRefresh, + { "fullRefresh", "t124.fullRefresh", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_nodeInformation, + { "nodeInformation", "t124.nodeInformation", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_nodeRecordList, + { "nodeRecordList", "t124.nodeRecordList", + FT_UINT32, BASE_DEC, VALS(t124_T_nodeRecordList_vals), 0, + NULL, HFILL }}, + { &hf_t124_noChange, + { "noChange", "t124.noChange", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_nodeRefresh, + { "refresh", "t124.refresh", + FT_UINT32, BASE_DEC, NULL, 0, + "NodeRefresh", HFILL }}, + { &hf_t124_nodeRefresh_item, + { "refresh item", "t124.refresh_item", + FT_NONE, BASE_NONE, NULL, 0, + "T_nodeRefresh_item", HFILL }}, + { &hf_t124_nodeRecord, + { "nodeRecord", "t124.nodeRecord", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_update, + { "update", "t124.update", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_t124_update_item, + { "update item", "t124.update_item", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_nodeUpdate, + { "nodeUpdate", "t124.nodeUpdate", + FT_UINT32, BASE_DEC, VALS(t124_T_nodeUpdate_vals), 0, + NULL, HFILL }}, + { &hf_t124_addRecord, + { "addRecord", "t124.addRecord", + FT_NONE, BASE_NONE, NULL, 0, + "NodeRecord", HFILL }}, + { &hf_t124_replaceRecord, + { "replaceRecord", "t124.replaceRecord", + FT_NONE, BASE_NONE, NULL, 0, + "NodeRecord", HFILL }}, + { &hf_t124_removeRecord, + { "removeRecord", "t124.removeRecord", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_rosterInstanceNumber, + { "rosterInstanceNumber", "t124.rosterInstanceNumber", + FT_UINT32, BASE_DEC, NULL, 0, + "INTEGER_0_65535", HFILL }}, + { &hf_t124_nodesAdded, + { "nodesAdded", "t124.nodesAdded", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_nodesRemoved, + { "nodesRemoved", "t124.nodesRemoved", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_applicationInformation, + { "applicationInformation", "t124.applicationInformation", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_t124_applicationInformation_item, + { "applicationInformation item", "t124.applicationInformation_item", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_applicationRecordList, + { "applicationRecordList", "t124.applicationRecordList", + FT_UINT32, BASE_DEC, VALS(t124_T_applicationRecordList_vals), 0, + NULL, HFILL }}, + { &hf_t124_applicationRefresh, + { "refresh", "t124.refresh", + FT_UINT32, BASE_DEC, NULL, 0, + "ApplicationRefresh", HFILL }}, + { &hf_t124_applicationRefresh_item, + { "refresh item", "t124.refresh_item", + FT_NONE, BASE_NONE, NULL, 0, + "T_applicationRefresh_item", HFILL }}, + { &hf_t124_applicationRecord, + { "applicationRecord", "t124.applicationRecord", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_applicationUpdate, + { "update", "t124.update", + FT_UINT32, BASE_DEC, NULL, 0, + "ApplicationUpdate", HFILL }}, + { &hf_t124_applicationUpdateItem, + { "update item", "t124.update_item", + FT_NONE, BASE_NONE, NULL, 0, + "ApplicationUpdateItem", HFILL }}, + { &hf_t124_applicationUpdate_01, + { "applicationUpdate", "t124.applicationUpdate", + FT_UINT32, BASE_DEC, VALS(t124_T_applicationUpdate_vals), 0, + NULL, HFILL }}, + { &hf_t124_addRecord_01, + { "addRecord", "t124.addRecord", + FT_NONE, BASE_NONE, NULL, 0, + "ApplicationRecord", HFILL }}, + { &hf_t124_replaceRecord_01, + { "replaceRecord", "t124.replaceRecord", + FT_NONE, BASE_NONE, NULL, 0, + "ApplicationRecord", HFILL }}, + { &hf_t124_applicationCapabilitiesList, + { "applicationCapabilitiesList", "t124.applicationCapabilitiesList", + FT_UINT32, BASE_DEC, VALS(t124_T_applicationCapabilitiesList_vals), 0, + NULL, HFILL }}, + { &hf_t124_refresh, + { "refresh", "t124.refresh", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_t124_refresh_item, + { "refresh item", "t124.refresh_item", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_numberOfEntities, + { "numberOfEntities", "t124.numberOfEntities", + FT_UINT32, BASE_DEC, NULL, 0, + "INTEGER_1_65536", HFILL }}, + { &hf_t124_peerEntitiesAdded, + { "peerEntitiesAdded", "t124.peerEntitiesAdded", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_peerEntitiesRemoved, + { "peerEntitiesRemoved", "t124.peerEntitiesRemoved", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_applicationProtocolEntiyList, + { "applicationProtocolEntiyList", "t124.applicationProtocolEntiyList", + FT_UINT32, BASE_DEC, NULL, 0, + "SET_SIZE_1_65536_OF_ApplicationInvokeSpecifier", HFILL }}, + { &hf_t124_applicationProtocolEntiyList_item, + { "ApplicationInvokeSpecifier", "t124.ApplicationInvokeSpecifier", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_destinationNodes, + { "destinationNodes", "t124.destinationNodes", + FT_UINT32, BASE_DEC, NULL, 0, + "SET_SIZE_1_65536_OF_UserID", HFILL }}, + { &hf_t124_destinationNodes_item, + { "UserID", "t124.UserID", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_t124_key_01, + { "key", "t124.key", + FT_NONE, BASE_NONE, NULL, 0, + "RegistryKey", HFILL }}, + { &hf_t124_modificationRights, + { "modificationRights", "t124.modificationRights", + FT_UINT32, BASE_DEC, VALS(t124_RegistryModificationRights_vals), 0, + "RegistryModificationRights", HFILL }}, + { &hf_t124_item, + { "item", "t124.item", + FT_UINT32, BASE_DEC, VALS(t124_RegistryItem_vals), 0, + "RegistryItem", HFILL }}, + { &hf_t124_owner, + { "owner", "t124.owner", + FT_UINT32, BASE_DEC, VALS(t124_RegistryEntryOwner_vals), 0, + "RegistryEntryOwner", HFILL }}, + { &hf_t124_numberOfHandles, + { "numberOfHandles", "t124.numberOfHandles", + FT_UINT32, BASE_DEC, NULL, 0, + "INTEGER_1_1024", HFILL }}, + { &hf_t124_firstHandle, + { "firstHandle", "t124.firstHandle", + FT_UINT32, BASE_DEC, NULL, 0, + "Handle", HFILL }}, + { &hf_t124_allocateHandleResponseResult, + { "result", "t124.result", + FT_UINT32, BASE_DEC, VALS(t124_AllocateHandleResponseResult_vals), 0, + "AllocateHandleResponseResult", HFILL }}, + { &hf_t124_primitiveType, + { "primitiveType", "t124.primitiveType", + FT_UINT32, BASE_DEC, VALS(t124_T_primitiveType_vals), 0, + NULL, HFILL }}, + { &hf_t124_result_01, + { "result", "t124.result", + FT_UINT32, BASE_DEC, VALS(t124_T_result_01_vals), 0, + "T_result_01", HFILL }}, + { &hf_t124_conductingNode, + { "conductingNode", "t124.conductingNode", + FT_UINT32, BASE_DEC, NULL, 0, + "UserID", HFILL }}, + { &hf_t124_grantFlag, + { "grantFlag", "t124.grantFlag", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_permissionList, + { "permissionList", "t124.permissionList", + FT_UINT32, BASE_DEC, NULL, 0, + "SEQUENCE_SIZE_0_65535_OF_UserID", HFILL }}, + { &hf_t124_permissionList_item, + { "UserID", "t124.UserID", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_t124_waitingList, + { "waitingList", "t124.waitingList", + FT_UINT32, BASE_DEC, NULL, 0, + "SEQUENCE_SIZE_1_65536_OF_UserID", HFILL }}, + { &hf_t124_waitingList_item, + { "UserID", "t124.UserID", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_t124_timeRemaining, + { "timeRemaining", "t124.timeRemaining", + FT_INT32, BASE_DEC, NULL, 0, + "Time", HFILL }}, + { &hf_t124_nodeSpecificTimeFlag, + { "nodeSpecificTimeFlag", "t124.nodeSpecificTimeFlag", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_timeToExtend, + { "timeToExtend", "t124.timeToExtend", + FT_INT32, BASE_DEC, NULL, 0, + "Time", HFILL }}, + { &hf_t124_message, + { "message", "t124.message", + FT_STRING, BASE_NONE, NULL, 0, + "TextString", HFILL }}, + { &hf_t124_request, + { "request", "t124.request", + FT_UINT32, BASE_DEC, VALS(t124_RequestPDU_vals), 0, + "RequestPDU", HFILL }}, + { &hf_t124_data_02, + { "data", "t124.data", + FT_NONE, BASE_NONE, NULL, 0, + "NonStandardParameter", HFILL }}, + { &hf_t124_t124Identifier, + { "t124Identifier", "t124.t124Identifier", + FT_UINT32, BASE_DEC, VALS(t124_Key_vals), 0, + "Key", HFILL }}, + { &hf_t124_connectPDU, + { "connectPDU", "t124.connectPDU", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_conferenceCreateRequest, + { "conferenceCreateRequest", "t124.conferenceCreateRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_conferenceCreateResponse, + { "conferenceCreateResponse", "t124.conferenceCreateResponse", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_conferenceQueryRequest, + { "conferenceQueryRequest", "t124.conferenceQueryRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_conferenceQueryResponse, + { "conferenceQueryResponse", "t124.conferenceQueryResponse", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_conferenceJoinRequest, + { "conferenceJoinRequest", "t124.conferenceJoinRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_conferenceJoinResponse, + { "conferenceJoinResponse", "t124.conferenceJoinResponse", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_conferenceInviteRequest, + { "conferenceInviteRequest", "t124.conferenceInviteRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_conferenceInviteResponse, + { "conferenceInviteResponse", "t124.conferenceInviteResponse", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_conferenceAddRequest, + { "conferenceAddRequest", "t124.conferenceAddRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_conferenceLockRequest, + { "conferenceLockRequest", "t124.conferenceLockRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_conferenceUnlockRequest, + { "conferenceUnlockRequest", "t124.conferenceUnlockRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_conferenceTerminateRequest, + { "conferenceTerminateRequest", "t124.conferenceTerminateRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_conferenceEjectUserRequest, + { "conferenceEjectUserRequest", "t124.conferenceEjectUserRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_conferenceTransferRequest, + { "conferenceTransferRequest", "t124.conferenceTransferRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_registryRegisterChannelRequest, + { "registryRegisterChannelRequest", "t124.registryRegisterChannelRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_registryAssignTokenRequest, + { "registryAssignTokenRequest", "t124.registryAssignTokenRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_registrySetParameterRequest, + { "registrySetParameterRequest", "t124.registrySetParameterRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_registryRetrieveEntryRequest, + { "registryRetrieveEntryRequest", "t124.registryRetrieveEntryRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_registryDeleteEntryRequest, + { "registryDeleteEntryRequest", "t124.registryDeleteEntryRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_registryMonitorEntryRequest, + { "registryMonitorEntryRequest", "t124.registryMonitorEntryRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_registryAllocateHandleRequest, + { "registryAllocateHandleRequest", "t124.registryAllocateHandleRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_nonStandardRequest, + { "nonStandardRequest", "t124.nonStandardRequest", + FT_NONE, BASE_NONE, NULL, 0, + "NonStandardPDU", HFILL }}, + { &hf_t124_conferenceAddResponse, + { "conferenceAddResponse", "t124.conferenceAddResponse", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_conferenceLockResponse, + { "conferenceLockResponse", "t124.conferenceLockResponse", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_conferenceUnlockResponse, + { "conferenceUnlockResponse", "t124.conferenceUnlockResponse", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_conferenceTerminateResponse, + { "conferenceTerminateResponse", "t124.conferenceTerminateResponse", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_conferenceEjectUserResponse, + { "conferenceEjectUserResponse", "t124.conferenceEjectUserResponse", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_conferenceTransferResponse, + { "conferenceTransferResponse", "t124.conferenceTransferResponse", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_registryResponse, + { "registryResponse", "t124.registryResponse", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_registryAllocateHandleResponse, + { "registryAllocateHandleResponse", "t124.registryAllocateHandleResponse", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_functionNotSupportedResponse, + { "functionNotSupportedResponse", "t124.functionNotSupportedResponse", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_nonStandardResponse, + { "nonStandardResponse", "t124.nonStandardResponse", + FT_NONE, BASE_NONE, NULL, 0, + "NonStandardPDU", HFILL }}, + { &hf_t124_userIDIndication, + { "userIDIndication", "t124.userIDIndication", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_conferenceLockIndication, + { "conferenceLockIndication", "t124.conferenceLockIndication", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_conferenceUnlockIndication, + { "conferenceUnlockIndication", "t124.conferenceUnlockIndication", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_conferenceTerminateIndication, + { "conferenceTerminateIndication", "t124.conferenceTerminateIndication", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_conferenceEjectUserIndication, + { "conferenceEjectUserIndication", "t124.conferenceEjectUserIndication", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_conferenceTransferIndication, + { "conferenceTransferIndication", "t124.conferenceTransferIndication", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_rosterUpdateIndication, + { "rosterUpdateIndication", "t124.rosterUpdateIndication", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_applicationInvokeIndication, + { "applicationInvokeIndication", "t124.applicationInvokeIndication", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_registryMonitorEntryIndication, + { "registryMonitorEntryIndication", "t124.registryMonitorEntryIndication", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_conductorAssignIndication, + { "conductorAssignIndication", "t124.conductorAssignIndication", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_conductorReleaseIndication, + { "conductorReleaseIndication", "t124.conductorReleaseIndication", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_conductorPermissionAskIndication, + { "conductorPermissionAskIndication", "t124.conductorPermissionAskIndication", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_conductorPermissionGrantIndication, + { "conductorPermissionGrantIndication", "t124.conductorPermissionGrantIndication", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_conferenceTimeRemainingIndication, + { "conferenceTimeRemainingIndication", "t124.conferenceTimeRemainingIndication", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_conferenceTimeInquireIndication, + { "conferenceTimeInquireIndication", "t124.conferenceTimeInquireIndication", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_conferenceTimeExtendIndication, + { "conferenceTimeExtendIndication", "t124.conferenceTimeExtendIndication", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_conferenceAssistanceIndication, + { "conferenceAssistanceIndication", "t124.conferenceAssistanceIndication", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_textMessageIndication, + { "textMessageIndication", "t124.textMessageIndication", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_nonStandardIndication, + { "nonStandardIndication", "t124.nonStandardIndication", + FT_NONE, BASE_NONE, NULL, 0, + "NonStandardPDU", HFILL }}, + { &hf_t124_maxChannelIds, + { "maxChannelIds", "t124.maxChannelIds", + FT_UINT32, BASE_DEC, NULL, 0, + "INTEGER_0_MAX", HFILL }}, + { &hf_t124_maxUserIds, + { "maxUserIds", "t124.maxUserIds", + FT_UINT32, BASE_DEC, NULL, 0, + "INTEGER_0_MAX", HFILL }}, + { &hf_t124_maxTokenIds, + { "maxTokenIds", "t124.maxTokenIds", + FT_UINT32, BASE_DEC, NULL, 0, + "INTEGER_0_MAX", HFILL }}, + { &hf_t124_numPriorities, + { "numPriorities", "t124.numPriorities", + FT_UINT32, BASE_DEC, NULL, 0, + "INTEGER_0_MAX", HFILL }}, + { &hf_t124_minThroughput, + { "minThroughput", "t124.minThroughput", + FT_UINT32, BASE_DEC, NULL, 0, + "INTEGER_0_MAX", HFILL }}, + { &hf_t124_maxHeight, + { "maxHeight", "t124.maxHeight", + FT_UINT32, BASE_DEC, NULL, 0, + "INTEGER_0_MAX", HFILL }}, + { &hf_t124_maxMCSPDUsize, + { "maxMCSPDUsize", "t124.maxMCSPDUsize", + FT_UINT32, BASE_DEC, NULL, 0, + "INTEGER_0_MAX", HFILL }}, + { &hf_t124_protocolVersion, + { "protocolVersion", "t124.protocolVersion", + FT_UINT32, BASE_DEC, NULL, 0, + "INTEGER_0_MAX", HFILL }}, + { &hf_t124_callingDomainSelector, + { "callingDomainSelector", "t124.callingDomainSelector", + FT_BYTES, BASE_NONE, NULL, 0, + "OCTET_STRING", HFILL }}, + { &hf_t124_calledDomainSelector, + { "calledDomainSelector", "t124.calledDomainSelector", + FT_BYTES, BASE_NONE, NULL, 0, + "OCTET_STRING", HFILL }}, + { &hf_t124_upwardFlag, + { "upwardFlag", "t124.upwardFlag", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_targetParameters, + { "targetParameters", "t124.targetParameters", + FT_NONE, BASE_NONE, NULL, 0, + "DomainParameters", HFILL }}, + { &hf_t124_minimumParameters, + { "minimumParameters", "t124.minimumParameters", + FT_NONE, BASE_NONE, NULL, 0, + "DomainParameters", HFILL }}, + { &hf_t124_maximumParameters, + { "maximumParameters", "t124.maximumParameters", + FT_NONE, BASE_NONE, NULL, 0, + "DomainParameters", HFILL }}, + { &hf_t124_userData_01, + { "userData", "t124.userData", + FT_BYTES, BASE_NONE, NULL, 0, + "OCTET_STRING", HFILL }}, + { &hf_t124_result_02, + { "result", "t124.result", + FT_UINT32, BASE_DEC, VALS(t124_Result_vals), 0, + NULL, HFILL }}, + { &hf_t124_calledConnectId, + { "calledConnectId", "t124.calledConnectId", + FT_UINT32, BASE_DEC, NULL, 0, + "INTEGER_0_MAX", HFILL }}, + { &hf_t124_domainParameters, + { "domainParameters", "t124.domainParameters", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_dataPriority, + { "dataPriority", "t124.dataPriority", + FT_UINT32, BASE_DEC, VALS(t124_DataPriority_vals), 0, + NULL, HFILL }}, + { &hf_t124_heightLimit, + { "heightLimit", "t124.heightLimit", + FT_UINT32, BASE_DEC, NULL, 0, + "INTEGER_0_MAX", HFILL }}, + { &hf_t124_subHeight, + { "subHeight", "t124.subHeight", + FT_UINT32, BASE_DEC, NULL, 0, + "INTEGER_0_MAX", HFILL }}, + { &hf_t124_subInterval, + { "subInterval", "t124.subInterval", + FT_UINT32, BASE_DEC, NULL, 0, + "INTEGER_0_MAX", HFILL }}, + { &hf_t124_static, + { "static", "t124.static", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_channelId, + { "channelId", "t124.channelId", + FT_UINT32, BASE_DEC, NULL, 0, + "StaticChannelId", HFILL }}, + { &hf_t124_userId, + { "userId", "t124.userId", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_joined, + { "joined", "t124.joined", + FT_BOOLEAN, BASE_NONE, NULL, 0, + "BOOLEAN", HFILL }}, + { &hf_t124_userId_01, + { "userId", "t124.userId", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_t124_private, + { "private", "t124.private", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_channelId_01, + { "channelId", "t124.channelId", + FT_UINT32, BASE_DEC, NULL, 0, + "PrivateChannelId", HFILL }}, + { &hf_t124_manager, + { "manager", "t124.manager", + FT_UINT32, BASE_DEC, NULL, 0, + "UserId", HFILL }}, + { &hf_t124_admitted, + { "admitted", "t124.admitted", + FT_UINT32, BASE_DEC, NULL, 0, + "SET_OF_UserId", HFILL }}, + { &hf_t124_admitted_item, + { "UserId", "t124.UserId", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_t124_assigned, + { "assigned", "t124.assigned", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_channelId_02, + { "channelId", "t124.channelId", + FT_UINT32, BASE_DEC, NULL, 0, + "AssignedChannelId", HFILL }}, + { &hf_t124_mergeChannels, + { "mergeChannels", "t124.mergeChannels", + FT_UINT32, BASE_DEC, NULL, 0, + "SET_OF_ChannelAttributes", HFILL }}, + { &hf_t124_mergeChannels_item, + { "ChannelAttributes", "t124.ChannelAttributes", + FT_UINT32, BASE_DEC, VALS(t124_ChannelAttributes_vals), 0, + NULL, HFILL }}, + { &hf_t124_purgeChannelIds, + { "purgeChannelIds", "t124.purgeChannelIds", + FT_UINT32, BASE_DEC, NULL, 0, + "SET_OF_ChannelId", HFILL }}, + { &hf_t124_purgeChannelIds_item, + { "ChannelId", "t124.ChannelId", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_t124_detachUserIds, + { "detachUserIds", "t124.detachUserIds", + FT_UINT32, BASE_DEC, NULL, 0, + "SET_OF_UserId", HFILL }}, + { &hf_t124_detachUserIds_item, + { "UserId", "t124.UserId", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_t124_grabbed, + { "grabbed", "t124.grabbed", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_tokenId, + { "tokenId", "t124.tokenId", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_t124_grabber, + { "grabber", "t124.grabber", + FT_UINT32, BASE_DEC, NULL, 0, + "UserId", HFILL }}, + { &hf_t124_inhibited, + { "inhibited", "t124.inhibited", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_inhibitors, + { "inhibitors", "t124.inhibitors", + FT_UINT32, BASE_DEC, NULL, 0, + "SET_OF_UserId", HFILL }}, + { &hf_t124_inhibitors_item, + { "UserId", "t124.UserId", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_t124_giving, + { "giving", "t124.giving", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_recipient, + { "recipient", "t124.recipient", + FT_UINT32, BASE_DEC, NULL, 0, + "UserId", HFILL }}, + { &hf_t124_ungivable, + { "ungivable", "t124.ungivable", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_given, + { "given", "t124.given", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_mergeTokens, + { "mergeTokens", "t124.mergeTokens", + FT_UINT32, BASE_DEC, NULL, 0, + "SET_OF_TokenAttributes", HFILL }}, + { &hf_t124_mergeTokens_item, + { "TokenAttributes", "t124.TokenAttributes", + FT_UINT32, BASE_DEC, VALS(t124_TokenAttributes_vals), 0, + NULL, HFILL }}, + { &hf_t124_purgeTokenIds, + { "purgeTokenIds", "t124.purgeTokenIds", + FT_UINT32, BASE_DEC, NULL, 0, + "SET_OF_TokenId", HFILL }}, + { &hf_t124_purgeTokenIds_item, + { "TokenId", "t124.TokenId", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_t124_reason_01, + { "reason", "t124.reason", + FT_UINT32, BASE_DEC, VALS(t124_Reason_vals), 0, + NULL, HFILL }}, + { &hf_t124_diagnostic, + { "diagnostic", "t124.diagnostic", + FT_UINT32, BASE_DEC, VALS(t124_Diagnostic_vals), 0, + NULL, HFILL }}, + { &hf_t124_initialOctets, + { "initialOctets", "t124.initialOctets", + FT_BYTES, BASE_NONE, NULL, 0, + "OCTET_STRING", HFILL }}, + { &hf_t124_initiator, + { "initiator", "t124.initiator", + FT_UINT32, BASE_DEC, NULL, 0, + "UserId", HFILL }}, + { &hf_t124_userIds, + { "userIds", "t124.userIds", + FT_UINT32, BASE_DEC, NULL, 0, + "SET_OF_UserId", HFILL }}, + { &hf_t124_userIds_item, + { "UserId", "t124.UserId", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_t124_channelId_03, + { "channelId", "t124.channelId", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_t124_requested, + { "requested", "t124.requested", + FT_UINT32, BASE_DEC, NULL, 0, + "ChannelId", HFILL }}, + { &hf_t124_channelIds, + { "channelIds", "t124.channelIds", + FT_UINT32, BASE_DEC, NULL, 0, + "SET_OF_ChannelId", HFILL }}, + { &hf_t124_channelIds_item, + { "ChannelId", "t124.ChannelId", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, + { &hf_t124_segmentation, + { "segmentation", "t124.segmentation", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_userData_02, + { "userData", "t124.userData", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_userData_03, + { "userData", "t124.userData", + FT_BYTES, BASE_NONE, NULL, 0, + "T_userData_01", HFILL }}, + { &hf_t124_tokenStatus, + { "tokenStatus", "t124.tokenStatus", + FT_UINT32, BASE_DEC, VALS(t124_TokenStatus_vals), 0, + NULL, HFILL }}, + { &hf_t124_connect_initial, + { "connect-initial", "t124.connect_initial", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_connect_response, + { "connect-response", "t124.connect_response", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_connect_additional, + { "connect-additional", "t124.connect_additional", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_connect_result, + { "connect-result", "t124.connect_result", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_plumbDomainIndication, + { "plumbDomainIndication", "t124.plumbDomainIndication", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_erectDomainRequest, + { "erectDomainRequest", "t124.erectDomainRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_mergeChannelsRequest, + { "mergeChannelsRequest", "t124.mergeChannelsRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_mergeChannelsConfirm, + { "mergeChannelsConfirm", "t124.mergeChannelsConfirm", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_purgeChannelsIndication, + { "purgeChannelsIndication", "t124.purgeChannelsIndication", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_mergeTokensRequest, + { "mergeTokensRequest", "t124.mergeTokensRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_mergeTokensConfirm, + { "mergeTokensConfirm", "t124.mergeTokensConfirm", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_purgeTokensIndication, + { "purgeTokensIndication", "t124.purgeTokensIndication", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_disconnectProviderUltimatum, + { "disconnectProviderUltimatum", "t124.disconnectProviderUltimatum", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_rejectMCSPDUUltimatum, + { "rejectMCSPDUUltimatum", "t124.rejectMCSPDUUltimatum", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_attachUserRequest, + { "attachUserRequest", "t124.attachUserRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_attachUserConfirm, + { "attachUserConfirm", "t124.attachUserConfirm", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_detachUserRequest, + { "detachUserRequest", "t124.detachUserRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_detachUserIndication, + { "detachUserIndication", "t124.detachUserIndication", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_channelJoinRequest, + { "channelJoinRequest", "t124.channelJoinRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_channelJoinConfirm, + { "channelJoinConfirm", "t124.channelJoinConfirm", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_channelLeaveRequest, + { "channelLeaveRequest", "t124.channelLeaveRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_channelConveneRequest, + { "channelConveneRequest", "t124.channelConveneRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_channelConveneConfirm, + { "channelConveneConfirm", "t124.channelConveneConfirm", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_channelDisbandRequest, + { "channelDisbandRequest", "t124.channelDisbandRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_channelDisbandIndication, + { "channelDisbandIndication", "t124.channelDisbandIndication", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_channelAdmitRequest, + { "channelAdmitRequest", "t124.channelAdmitRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_channelAdmitIndication, + { "channelAdmitIndication", "t124.channelAdmitIndication", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_channelExpelRequest, + { "channelExpelRequest", "t124.channelExpelRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_channelExpelIndication, + { "channelExpelIndication", "t124.channelExpelIndication", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_sendDataRequest, + { "sendDataRequest", "t124.sendDataRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_sendDataIndication, + { "sendDataIndication", "t124.sendDataIndication", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_uniformSendDataRequest, + { "uniformSendDataRequest", "t124.uniformSendDataRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_uniformSendDataIndication, + { "uniformSendDataIndication", "t124.uniformSendDataIndication", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_tokenGrabRequest, + { "tokenGrabRequest", "t124.tokenGrabRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_tokenGrabConfirm, + { "tokenGrabConfirm", "t124.tokenGrabConfirm", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_tokenInhibitRequest, + { "tokenInhibitRequest", "t124.tokenInhibitRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_tokenInhibitConfirm, + { "tokenInhibitConfirm", "t124.tokenInhibitConfirm", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_tokenGiveRequest, + { "tokenGiveRequest", "t124.tokenGiveRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_tokenGiveIndication, + { "tokenGiveIndication", "t124.tokenGiveIndication", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_tokenGiveResponse, + { "tokenGiveResponse", "t124.tokenGiveResponse", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_tokenGiveConfirm, + { "tokenGiveConfirm", "t124.tokenGiveConfirm", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_tokenPleaseRequest, + { "tokenPleaseRequest", "t124.tokenPleaseRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_tokenPleaseIndication, + { "tokenPleaseIndication", "t124.tokenPleaseIndication", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_tokenReleaseRequest, + { "tokenReleaseRequest", "t124.tokenReleaseRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_tokenReleaseConfirm, + { "tokenReleaseConfirm", "t124.tokenReleaseConfirm", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_tokenTestRequest, + { "tokenTestRequest", "t124.tokenTestRequest", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_tokenTestConfirm, + { "tokenTestConfirm", "t124.tokenTestConfirm", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t124_Segmentation_begin, + { "begin", "t124.begin", + FT_BOOLEAN, 8, NULL, 0x80, + NULL, HFILL }}, + { &hf_t124_Segmentation_end, + { "end", "t124.end", + FT_BOOLEAN, 8, NULL, 0x40, + NULL, HFILL }}, + +/*--- End of included file: packet-t124-hfarr.c ---*/ +#line 177 "../../asn1/t124/packet-t124-template.c" + }; + + /* List of subtrees */ + static gint *ett[] = { + &ett_t124, + &ett_t124_connectGCCPDU, + +/*--- Included file: packet-t124-ettarr.c ---*/ +#line 1 "../../asn1/t124/packet-t124-ettarr.c" + &ett_t124_Key, + &ett_t124_NonStandardParameter, + &ett_t124_UserData, + &ett_t124_UserData_item, + &ett_t124_Password, + &ett_t124_PasswordSelector, + &ett_t124_ChallengeResponseItem, + &ett_t124_ChallengeResponseAlgorithm, + &ett_t124_ChallengeItem, + &ett_t124_ChallengeRequest, + &ett_t124_SET_OF_ChallengeItem, + &ett_t124_ChallengeResponse, + &ett_t124_PasswordChallengeRequestResponse, + &ett_t124_T_challengeRequestResponse, + &ett_t124_ConferenceName, + &ett_t124_ConferenceNameSelector, + &ett_t124_ConferencePriorityScheme, + &ett_t124_ConferencePriority, + &ett_t124_NodeCategory, + &ett_t124_ConferenceMode, + &ett_t124_NetworkAddress, + &ett_t124_NetworkAddress_item, + &ett_t124_T_aggregatedChannel, + &ett_t124_T_transferModes, + &ett_t124_T_highLayerCompatibility, + &ett_t124_T_transportConnection, + &ett_t124_MediaList, + &ett_t124_ChannelAggregationMethod, + &ett_t124_Profile, + &ett_t124_T_simpleProfile, + &ett_t124_T_multimediaProfile, + &ett_t124_T_profile, + &ett_t124_ExtendedE164NetworkAddress, + &ett_t124_TransportAddress, + &ett_t124_GSTNConnection, + &ett_t124_ISDNConnection, + &ett_t124_ISDNCircuitTypes, + &ett_t124_ISDNCircuitTypes_item, + &ett_t124_ISDNHighLayerCompatibility, + &ett_t124_CSDNConnection, + &ett_t124_T_circuitTypes, + &ett_t124_T_circuitTypes_item, + &ett_t124_PSDNConnection, + &ett_t124_PSDNNetworkAddress, + &ett_t124_ATMConnection, + &ett_t124_T_networkAddress, + &ett_t124_NetworkConnection, + &ett_t124_NetworkAddressV2, + &ett_t124_NetworkAddressV2_item, + &ett_t124_T_networkConnection, + &ett_t124_T_aggregatedConnections, + &ett_t124_T_connectionList, + &ett_t124_T_connectionList_item, + &ett_t124_SET_OF_ChannelAggregationMethod, + &ett_t124_SET_OF_Profile, + &ett_t124_NodeProperties, + &ett_t124_AsymmetryIndicator, + &ett_t124_AlternativeNodeID, + &ett_t124_ConferenceDescriptor, + &ett_t124_NodeRecord, + &ett_t124_SEQUENCE_OF_TextString, + &ett_t124_SessionKey, + &ett_t124_ApplicationRecord, + &ett_t124_T_nonCollapsingCapabilities, + &ett_t124_T_nonCollapsingCapabilities_item, + &ett_t124_CapabilityID, + &ett_t124_CapabilityClass, + &ett_t124_ApplicationInvokeSpecifier, + &ett_t124_T_expectedCapabilitySet, + &ett_t124_T_expectedCapabilitySet_item, + &ett_t124_RegistryKey, + &ett_t124_RegistryItem, + &ett_t124_RegistryEntryOwner, + &ett_t124_T_owned, + &ett_t124_UserIDIndication, + &ett_t124_ConferenceCreateRequest, + &ett_t124_SET_OF_Privilege, + &ett_t124_ConferenceCreateResponse, + &ett_t124_ConferenceQueryRequest, + &ett_t124_ConferenceQueryResponse, + &ett_t124_SET_OF_ConferenceDescriptor, + &ett_t124_ConferenceJoinRequest, + &ett_t124_ConferenceJoinResponse, + &ett_t124_ConferenceInviteRequest, + &ett_t124_ConferenceInviteResponse, + &ett_t124_ConferenceAddRequest, + &ett_t124_ConferenceAddResponse, + &ett_t124_ConferenceLockRequest, + &ett_t124_ConferenceLockResponse, + &ett_t124_ConferenceLockIndication, + &ett_t124_ConferenceUnlockRequest, + &ett_t124_ConferenceUnlockResponse, + &ett_t124_ConferenceUnlockIndication, + &ett_t124_ConferenceTerminateRequest, + &ett_t124_ConferenceTerminateResponse, + &ett_t124_ConferenceTerminateIndication, + &ett_t124_ConferenceEjectUserRequest, + &ett_t124_ConferenceEjectUserResponse, + &ett_t124_ConferenceEjectUserIndication, + &ett_t124_ConferenceTransferRequest, + &ett_t124_SET_SIZE_1_65536_OF_UserID, + &ett_t124_ConferenceTransferResponse, + &ett_t124_ConferenceTransferIndication, + &ett_t124_RosterUpdateIndication, + &ett_t124_T_nodeInformation, + &ett_t124_T_nodeRecordList, + &ett_t124_NodeRefresh, + &ett_t124_T_nodeRefresh_item, + &ett_t124_T_update, + &ett_t124_T_update_item, + &ett_t124_T_nodeUpdate, + &ett_t124_T_applicationInformation, + &ett_t124_T_applicationInformation_item, + &ett_t124_T_applicationRecordList, + &ett_t124_ApplicationRefresh, + &ett_t124_T_applicationRefresh_item, + &ett_t124_ApplicationUpdate, + &ett_t124_ApplicationUpdateItem, + &ett_t124_T_applicationUpdate, + &ett_t124_T_applicationCapabilitiesList, + &ett_t124_T_refresh, + &ett_t124_T_refresh_item, + &ett_t124_ApplicationInvokeIndication, + &ett_t124_SET_SIZE_1_65536_OF_ApplicationInvokeSpecifier, + &ett_t124_RegistryRegisterChannelRequest, + &ett_t124_RegistryAssignTokenRequest, + &ett_t124_RegistrySetParameterRequest, + &ett_t124_RegistryRetrieveEntryRequest, + &ett_t124_RegistryDeleteEntryRequest, + &ett_t124_RegistryMonitorEntryRequest, + &ett_t124_RegistryMonitorEntryIndication, + &ett_t124_RegistryAllocateHandleRequest, + &ett_t124_RegistryAllocateHandleResponse, + &ett_t124_RegistryResponse, + &ett_t124_ConductorAssignIndication, + &ett_t124_ConductorReleaseIndication, + &ett_t124_ConductorPermissionAskIndication, + &ett_t124_ConductorPermissionGrantIndication, + &ett_t124_SEQUENCE_SIZE_0_65535_OF_UserID, + &ett_t124_SEQUENCE_SIZE_1_65536_OF_UserID, + &ett_t124_ConferenceTimeRemainingIndication, + &ett_t124_ConferenceTimeInquireIndication, + &ett_t124_ConferenceTimeExtendIndication, + &ett_t124_ConferenceAssistanceIndication, + &ett_t124_TextMessageIndication, + &ett_t124_FunctionNotSupportedResponse, + &ett_t124_NonStandardPDU, + &ett_t124_ConnectData, + &ett_t124_ConnectGCCPDU, + &ett_t124_RequestPDU, + &ett_t124_ResponsePDU, + &ett_t124_IndicationPDU, + &ett_t124_Segmentation, + &ett_t124_DomainParameters, + &ett_t124_Connect_Initial, + &ett_t124_Connect_Response, + &ett_t124_Connect_Additional, + &ett_t124_Connect_Result, + &ett_t124_PlumbDomainIndication, + &ett_t124_ErectDomainRequest, + &ett_t124_ChannelAttributes, + &ett_t124_T_static, + &ett_t124_T_userId, + &ett_t124_T_private, + &ett_t124_SET_OF_UserId, + &ett_t124_T_assigned, + &ett_t124_MergeChannelsRequest, + &ett_t124_SET_OF_ChannelAttributes, + &ett_t124_SET_OF_ChannelId, + &ett_t124_MergeChannelsConfirm, + &ett_t124_PurgeChannelsIndication, + &ett_t124_TokenAttributes, + &ett_t124_T_grabbed, + &ett_t124_T_inhibited, + &ett_t124_T_giving, + &ett_t124_T_ungivable, + &ett_t124_T_given, + &ett_t124_MergeTokensRequest, + &ett_t124_SET_OF_TokenAttributes, + &ett_t124_SET_OF_TokenId, + &ett_t124_MergeTokensConfirm, + &ett_t124_PurgeTokensIndication, + &ett_t124_DisconnectProviderUltimatum, + &ett_t124_RejectMCSPDUUltimatum, + &ett_t124_AttachUserRequest, + &ett_t124_AttachUserConfirm, + &ett_t124_DetachUserRequest, + &ett_t124_DetachUserIndication, + &ett_t124_ChannelJoinRequest, + &ett_t124_ChannelJoinConfirm, + &ett_t124_ChannelLeaveRequest, + &ett_t124_ChannelConveneRequest, + &ett_t124_ChannelConveneConfirm, + &ett_t124_ChannelDisbandRequest, + &ett_t124_ChannelDisbandIndication, + &ett_t124_ChannelAdmitRequest, + &ett_t124_ChannelAdmitIndication, + &ett_t124_ChannelExpelRequest, + &ett_t124_ChannelExpelIndication, + &ett_t124_SendDataRequest, + &ett_t124_SendDataIndication, + &ett_t124_UniformSendDataRequest, + &ett_t124_UniformSendDataIndication, + &ett_t124_TokenGrabRequest, + &ett_t124_TokenGrabConfirm, + &ett_t124_TokenInhibitRequest, + &ett_t124_TokenInhibitConfirm, + &ett_t124_TokenGiveRequest, + &ett_t124_TokenGiveIndication, + &ett_t124_TokenGiveResponse, + &ett_t124_TokenGiveConfirm, + &ett_t124_TokenPleaseRequest, + &ett_t124_TokenPleaseIndication, + &ett_t124_TokenReleaseRequest, + &ett_t124_TokenReleaseConfirm, + &ett_t124_TokenTestRequest, + &ett_t124_TokenTestConfirm, + &ett_t124_ConnectMCSPDU, + &ett_t124_DomainMCSPDU, + +/*--- End of included file: packet-t124-ettarr.c ---*/ +#line 184 "../../asn1/t124/packet-t124-template.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", FT_STRING, BASE_NONE); + t124_sd_dissector_table = register_dissector_table("t124.sd", "T.124 H.221 Send Data Dissectors", FT_UINT32, BASE_NONE); + + new_register_dissector("t124", dissect_t124, proto_t124); +} + +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, proto_t124); + +} diff --git a/epan/dissectors/packet-t124.h b/epan/dissectors/packet-t124.h new file mode 100644 index 0000000000..8d1e598db3 --- /dev/null +++ b/epan/dissectors/packet-t124.h @@ -0,0 +1,59 @@ +/* Do not modify this file. */ +/* It is created automatically by the ASN.1 to Wireshark dissector compiler */ +/* packet-t124.h */ +/* ../../tools/asn2wrs.py -p t124 -c ./t124.cnf -s ./packet-t124-template -D . GCC-PROTOCOL.asn MCS-PROTOCOL.asn */ + +/* Input file: packet-t124-template.h */ + +#line 1 "../../asn1/t124/packet-t124-template.h" +/* packet-t124.h + * Routines for t124 packet dissection + * Copyright 2010, Graeme Lunt + * + * $Id$ + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1998 Gerald Combs + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef PACKET_T124_H +#define PACKET_T124_H + +#include <epan/packet_info.h> +#include <epan/dissectors/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); + + +/*--- Included file: packet-t124-exp.h ---*/ +#line 1 "../../asn1/t124/packet-t124-exp.h" +extern const value_string t124_ConnectGCCPDU_vals[]; +int dissect_t124_ConnectData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_); +int dissect_t124_ConnectGCCPDU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_); + +/*--- End of included file: packet-t124-exp.h ---*/ +#line 40 "../../asn1/t124/packet-t124-template.h" + +#endif /* PACKET_T124_H */ + + diff --git a/epan/dissectors/packet-t125.c b/epan/dissectors/packet-t125.c index d66d6cbfc9..ce0840c267 100644 --- a/epan/dissectors/packet-t125.c +++ b/epan/dissectors/packet-t125.c @@ -41,6 +41,9 @@ #include <epan/asn1.h> #include "packet-ber.h" +#include "packet-per.h" + +#include "packet-t124.h" #define PNAME "MULTIPOINT-COMMUNICATION-SERVICE T.125" #define PSNAME "T.125" @@ -49,6 +52,7 @@ /* Initialize the protocol and registered fields */ static int proto_t125 = -1; +static proto_tree *top_tree = NULL; /*--- Included file: packet-t125-hf.c ---*/ #line 1 "../../asn1/t125/packet-t125-hf.c" @@ -67,10 +71,11 @@ static int hf_t125_upwardFlag = -1; /* BOOLEAN */ static int hf_t125_targetParameters = -1; /* DomainParameters */ static int hf_t125_minimumParameters = -1; /* DomainParameters */ static int hf_t125_maximumParameters = -1; /* DomainParameters */ -static int hf_t125_userData = -1; /* OCTET_STRING */ +static int hf_t125_userData = -1; /* T_userData */ static int hf_t125_result = -1; /* Result */ static int hf_t125_calledConnectId = -1; /* INTEGER_0_MAX */ static int hf_t125_domainParameters = -1; /* DomainParameters */ +static int hf_t125_userData_01 = -1; /* T_userData_01 */ static int hf_t125_dataPriority = -1; /* DataPriority */ static int hf_t125_heightLimit = -1; /* INTEGER_0_MAX */ static int hf_t125_subHeight = -1; /* INTEGER_0_MAX */ @@ -118,6 +123,7 @@ static int hf_t125_requested = -1; /* ChannelId */ static int hf_t125_channelIds = -1; /* SET_OF_ChannelId */ static int hf_t125_channelIds_item = -1; /* ChannelId */ static int hf_t125_segmentation = -1; /* Segmentation */ +static int hf_t125_userData_02 = -1; /* OCTET_STRING */ static int hf_t125_tokenStatus = -1; /* TokenStatus */ static int hf_t125_connect_initial = -1; /* Connect_Initial */ static int hf_t125_connect_response = -1; /* Connect_Response */ @@ -171,11 +177,15 @@ static int hf_t125_Segmentation_begin = -1; static int hf_t125_Segmentation_end = -1; /*--- End of included file: packet-t125-hf.c ---*/ -#line 45 "../../asn1/t125/packet-t125-template.c" +#line 49 "../../asn1/t125/packet-t125-template.c" /* Initialize the subtree pointers */ static int ett_t125 = -1; +static int hf_t125_connectData = -1; +static int hf_t125_heur = -1; + + /*--- Included file: packet-t125-ett.c ---*/ #line 1 "../../asn1/t125/packet-t125-ett.c" static gint ett_t125_Segmentation = -1; @@ -247,7 +257,9 @@ static gint ett_t125_ConnectMCSPDU = -1; static gint ett_t125_DomainMCSPDU = -1; /*--- End of included file: packet-t125-ett.c ---*/ -#line 49 "../../asn1/t125/packet-t125-template.c" +#line 57 "../../asn1/t125/packet-t125-template.c" + +static heur_dissector_list_t t125_heur_subdissector_list; /*--- Included file: packet-t125-fn.c ---*/ @@ -424,6 +436,23 @@ dissect_t125_BOOLEAN(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U } + +static int +dissect_t125_T_userData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 39 "../../asn1/t125/t125.cnf" + tvbuff_t *next_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, + &next_tvb); + + if(next_tvb) + dissector_try_heuristic(t125_heur_subdissector_list, next_tvb, + actx->pinfo, top_tree); + + + return offset; +} + + static const ber_sequence_t Connect_Initial_U_sequence[] = { { &hf_t125_callingDomainSelector, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_t125_OCTET_STRING }, { &hf_t125_calledDomainSelector, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_t125_OCTET_STRING }, @@ -431,7 +460,7 @@ static const ber_sequence_t Connect_Initial_U_sequence[] = { { &hf_t125_targetParameters, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_t125_DomainParameters }, { &hf_t125_minimumParameters, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_t125_DomainParameters }, { &hf_t125_maximumParameters, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_t125_DomainParameters }, - { &hf_t125_userData , BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_t125_OCTET_STRING }, + { &hf_t125_userData , BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_t125_T_userData }, { NULL, 0, 0, 0, NULL } }; @@ -484,11 +513,28 @@ dissect_t125_Result(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_ } + +static int +dissect_t125_T_userData_01(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { +#line 48 "../../asn1/t125/t125.cnf" + tvbuff_t *next_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, + &next_tvb); + + if(next_tvb) + dissector_try_heuristic(t125_heur_subdissector_list, next_tvb, + actx->pinfo, top_tree); + + + return offset; +} + + static const ber_sequence_t Connect_Response_U_sequence[] = { { &hf_t125_result , BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_t125_Result }, { &hf_t125_calledConnectId, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_t125_INTEGER_0_MAX }, { &hf_t125_domainParameters, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_t125_DomainParameters }, - { &hf_t125_userData , BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_t125_OCTET_STRING }, + { &hf_t125_userData_01 , BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_t125_T_userData_01 }, { NULL, 0, 0, 0, NULL } }; @@ -1490,7 +1536,7 @@ static const ber_sequence_t SendDataRequest_U_sequence[] = { { &hf_t125_channelId_03 , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_t125_ChannelId }, { &hf_t125_dataPriority , BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_t125_DataPriority }, { &hf_t125_segmentation , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_t125_Segmentation }, - { &hf_t125_userData , BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_t125_OCTET_STRING }, + { &hf_t125_userData_02 , BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_t125_OCTET_STRING }, { NULL, 0, 0, 0, NULL } }; @@ -1518,7 +1564,7 @@ static const ber_sequence_t SendDataIndication_U_sequence[] = { { &hf_t125_channelId_03 , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_t125_ChannelId }, { &hf_t125_dataPriority , BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_t125_DataPriority }, { &hf_t125_segmentation , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_t125_Segmentation }, - { &hf_t125_userData , BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_t125_OCTET_STRING }, + { &hf_t125_userData_02 , BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_t125_OCTET_STRING }, { NULL, 0, 0, 0, NULL } }; @@ -1546,7 +1592,7 @@ static const ber_sequence_t UniformSendDataRequest_U_sequence[] = { { &hf_t125_channelId_03 , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_t125_ChannelId }, { &hf_t125_dataPriority , BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_t125_DataPriority }, { &hf_t125_segmentation , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_t125_Segmentation }, - { &hf_t125_userData , BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_t125_OCTET_STRING }, + { &hf_t125_userData_02 , BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_t125_OCTET_STRING }, { NULL, 0, 0, 0, NULL } }; @@ -1574,7 +1620,7 @@ static const ber_sequence_t UniformSendDataIndication_U_sequence[] = { { &hf_t125_channelId_03 , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_t125_ChannelId }, { &hf_t125_dataPriority , BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_t125_DataPriority }, { &hf_t125_segmentation , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_t125_Segmentation }, - { &hf_t125_userData , BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_t125_OCTET_STRING }, + { &hf_t125_userData_02 , BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_t125_OCTET_STRING }, { NULL, 0, 0, 0, NULL } }; @@ -1977,19 +2023,9 @@ static const ber_choice_t ConnectMCSPDU_choice[] = { static int dissect_t125_ConnectMCSPDU(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 22 "../../asn1/t125/t125.cnf" - gint connectmcs_value; - offset = dissect_ber_choice(actx, tree, tvb, offset, ConnectMCSPDU_choice, hf_index, ett_t125_ConnectMCSPDU, - &connectmcs_value); - - if( (connectmcs_value!=-1) && t125_ConnectMCSPDU_vals[connectmcs_value].strptr ){ - if (check_col(actx->pinfo->cinfo, COL_INFO)){ - col_add_fstr(actx->pinfo->cinfo, COL_INFO, "MCS: %s ", t125_ConnectMCSPDU_vals[connectmcs_value].strptr); - } - } - + NULL); return offset; } @@ -2091,17 +2127,23 @@ static const ber_choice_t DomainMCSPDU_choice[] = { static int dissect_t125_DomainMCSPDU(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { -#line 33 "../../asn1/t125/t125.cnf" +#line 21 "../../asn1/t125/t125.cnf" gint domainmcs_value; offset = dissect_ber_choice(actx, tree, tvb, offset, DomainMCSPDU_choice, hf_index, ett_t125_DomainMCSPDU, &domainmcs_value); - if( (domainmcs_value!=-1) && t125_DomainMCSPDU_vals[domainmcs_value].strptr ){ - if (check_col(actx->pinfo->cinfo, COL_INFO)){ - col_add_fstr(actx->pinfo->cinfo, COL_INFO, "MCS: %s ", t125_DomainMCSPDU_vals[domainmcs_value].strptr); - } + switch(domainmcs_value) { + case 25: /* sendDataRequest */ + case 26: /* sendDataIndication */ + case 27: /* uniformSendDataRequest */ + case 28: /* uniformSendDataIndication */ + /* Do nothing */ + break; + default: + col_append_sep_fstr(actx->pinfo->cinfo, COL_INFO, " ", "MCS: %s ", val_to_str(domainmcs_value, t125_DomainMCSPDU_vals, "Unknown")); + break; } @@ -2120,7 +2162,7 @@ static int dissect_ConnectMCSPDU_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, /*--- End of included file: packet-t125-fn.c ---*/ -#line 51 "../../asn1/t125/packet-t125-template.c" +#line 61 "../../asn1/t125/packet-t125-template.c" static int dissect_t125(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *parent_tree) @@ -2131,6 +2173,8 @@ dissect_t125(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *parent_tree) gboolean pc; gint32 tag; + top_tree = parent_tree; + col_set_str(pinfo->cinfo, COL_PROTOCOL, "T.125"); col_clear(pinfo->cinfo, COL_INFO); @@ -2141,20 +2185,58 @@ dissect_t125(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *parent_tree) if ( (class==BER_CLASS_APP) && (tag>=101) && (tag<=104) ){ dissect_ConnectMCSPDU_PDU(tvb, pinfo, tree); - } else { - col_set_str(pinfo->cinfo, COL_INFO, "T.125 payload"); - proto_tree_add_text(tree, tvb, 0, -1, "T.125 payload"); + } else { + t124_set_top_tree(top_tree); + dissect_DomainMCSPDU_PDU(tvb, pinfo, tree); } return tvb_length(tvb); } +static gboolean +dissect_t125_heur(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *parent_tree) +{ + gint8 class; + gboolean pc; + gint32 tag; + guint32 choice_index = 100; + asn1_ctx_t asn1_ctx; + + asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo); + + /* could be BER */ + get_ber_identifier(tvb, 0, &class, &pc, &tag); + /* or PER */ + dissect_per_constrained_integer(tvb, 0, &asn1_ctx, + NULL, hf_t125_heur, 0, 42, + &choice_index, FALSE); + + /* is this strong enough ? */ + if ( ((class==BER_CLASS_APP) && ((tag>=101) && (tag<=104))) || + (choice_index <=42)) { + + dissect_t125(tvb, pinfo, parent_tree); + + return TRUE; + } + + return FALSE; +} + /*--- proto_register_t125 -------------------------------------------*/ void proto_register_t125(void) { /* List of fields */ static hf_register_info hf[] = { + { &hf_t125_connectData, + { "connectData", "t125.connectData", + FT_NONE, BASE_NONE, NULL, 0, + NULL, HFILL }}, + { &hf_t125_heur, + { "heuristic", "t125.heuristic", + FT_UINT32, BASE_DEC, NULL, 0, + NULL, HFILL }}, /*--- Included file: packet-t125-hfarr.c ---*/ #line 1 "../../asn1/t125/packet-t125-hfarr.c" @@ -2221,7 +2303,7 @@ void proto_register_t125(void) { { &hf_t125_userData, { "userData", "t125.userData", FT_BYTES, BASE_NONE, NULL, 0, - "OCTET_STRING", HFILL }}, + NULL, HFILL }}, { &hf_t125_result, { "result", "t125.result", FT_UINT32, BASE_DEC, VALS(t125_Result_vals), 0, @@ -2234,6 +2316,10 @@ void proto_register_t125(void) { { "domainParameters", "t125.domainParameters", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_t125_userData_01, + { "userData", "t125.userData", + FT_BYTES, BASE_NONE, NULL, 0, + "T_userData_01", HFILL }}, { &hf_t125_dataPriority, { "dataPriority", "t125.dataPriority", FT_UINT32, BASE_DEC, VALS(t125_DataPriority_vals), 0, @@ -2422,6 +2508,10 @@ void proto_register_t125(void) { { "segmentation", "t125.segmentation", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_t125_userData_02, + { "userData", "t125.userData", + FT_BYTES, BASE_NONE, NULL, 0, + "OCTET_STRING", HFILL }}, { &hf_t125_tokenStatus, { "tokenStatus", "t125.tokenStatus", FT_UINT32, BASE_DEC, VALS(t125_TokenStatus_vals), 0, @@ -2624,7 +2714,7 @@ void proto_register_t125(void) { NULL, HFILL }}, /*--- End of included file: packet-t125-hfarr.c ---*/ -#line 86 "../../asn1/t125/packet-t125-template.c" +#line 136 "../../asn1/t125/packet-t125-template.c" }; /* List of subtrees */ @@ -2702,7 +2792,7 @@ void proto_register_t125(void) { &ett_t125_DomainMCSPDU, /*--- End of included file: packet-t125-ettarr.c ---*/ -#line 92 "../../asn1/t125/packet-t125-template.c" +#line 142 "../../asn1/t125/packet-t125-template.c" }; /* Register protocol */ @@ -2711,10 +2801,15 @@ void proto_register_t125(void) { proto_register_field_array(proto_t125, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + register_heur_dissector_list("t125", &t125_heur_subdissector_list); + new_register_dissector("t125", dissect_t125, proto_t125); } /*--- proto_reg_handoff_t125 ---------------------------------------*/ void proto_reg_handoff_t125(void) { + + heur_dissector_add("cotp", dissect_t125_heur, proto_t125); + heur_dissector_add("cotp_is", dissect_t125_heur, proto_t125); } diff --git a/epan/dissectors/packet-tpkt.c b/epan/dissectors/packet-tpkt.c index d5001a6282..456a576c63 100644 --- a/epan/dissectors/packet-tpkt.c +++ b/epan/dissectors/packet-tpkt.c @@ -54,14 +54,10 @@ static gint ett_tpkt = -1; static gboolean tpkt_desegment = TRUE; #define TCP_PORT_TPKT 102 -#define TCP_PORT_TPKT_X224 3389 /* find the dissector for OSI TP (aka COTP) */ static dissector_handle_t osi_tp_handle; -/* find the dissector for X.224 */ -static dissector_handle_t x224_handle; - /* * Check whether this could be a TPKT-encapsulated PDU. * Returns -1 if it's not, and the PDU length from the TPKT header @@ -591,16 +587,6 @@ dissect_tpkt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) } /* - * Dissect RFC 1006 TPKT, which wraps a TPKT header around an X.224 - * PDU. - */ -static void -dissect_tpkt_x224(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) -{ - dissect_tpkt_encap(tvb, pinfo, tree, tpkt_desegment, x224_handle); -} - -/* * Dissect ASCII TPKT, which wraps a ASCII TPKT header around an OSI TP * PDU. */ @@ -678,16 +664,12 @@ proto_register_tpkt(void) void proto_reg_handoff_tpkt(void) { - dissector_handle_t tpkt_handle, tpkt_x224_handle; + dissector_handle_t tpkt_handle; osi_tp_handle = find_dissector("ositp"); tpkt_handle = find_dissector("tpkt"); dissector_add_uint("tcp.port", TCP_PORT_TPKT, tpkt_handle); - x224_handle = find_dissector("x224"); - tpkt_x224_handle = create_dissector_handle(dissect_tpkt_x224, proto_tpkt); - dissector_add_uint("tcp.port", TCP_PORT_TPKT_X224, tpkt_x224_handle); - /* tpkt_ascii_handle = create_dissector_handle(dissect_ascii_tpkt, proto_tpkt); dissector_add_uint("tcp.port", TCP_PORT_TPKT, tpkt_ascii_handle); |