aboutsummaryrefslogtreecommitdiffstats
path: root/epan
diff options
context:
space:
mode:
authorGraeme Lunt <graeme.lunt@smhs.co.uk>2011-09-21 07:35:51 +0000
committerGraeme Lunt <graeme.lunt@smhs.co.uk>2011-09-21 07:35:51 +0000
commit9db6d4065699e4b1128ac798f674dcbf3e0a43a2 (patch)
treeceb35affc2c80067b78b1daed782613d272ca6b2 /epan
parent3e7c0390d77e9288fc7048f4d0f0e833a2a4d9f4 (diff)
Basic RDP dissection, which can dissect the connection sequence.
A work in progress. Can be used with the SSL dissector to decrypt Enhanced RDP Security SSL. With Standard RDP Security (e.g those on Wiki), the PDUs are all encrypted after the SecurityExchange PDU. Wiki to be updated with an example SSL protected capture and associated key material. svn path=/trunk/; revision=39066
Diffstat (limited to 'epan')
-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
9 files changed, 11017 insertions, 52 deletions
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);