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