aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--asn1/Makefile.am1
-rw-r--r--asn1/t124/GCC-PROTOCOL.asn1180
-rw-r--r--asn1/t124/Makefile651
-rw-r--r--asn1/t124/Makefile.am26
-rw-r--r--asn1/t124/Makefile.common51
-rw-r--r--asn1/t124/Makefile.in651
-rw-r--r--asn1/t124/Makefile.nmake29
-rw-r--r--asn1/t124/packet-t124-template.c204
-rw-r--r--asn1/t124/packet-t124-template.h43
-rw-r--r--asn1/t124/t124.cnf162
-rw-r--r--asn1/t125/packet-t125-template.c61
-rw-r--r--asn1/t125/t125.cnf41
-rw-r--r--epan/CMakeLists.txt2
-rw-r--r--epan/dissectors/Makefile.common4
-rw-r--r--epan/dissectors/packet-rdp.c2848
-rw-r--r--epan/dissectors/packet-rdp.h40
-rw-r--r--epan/dissectors/packet-ses.c11
-rw-r--r--epan/dissectors/packet-t124.c7926
-rw-r--r--epan/dissectors/packet-t124.h59
-rw-r--r--epan/dissectors/packet-t125.c159
-rw-r--r--epan/dissectors/packet-tpkt.c20
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);