aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomas Kukosa <tomas.kukosa@siemens.com>2007-10-18 13:35:57 +0000
committerTomas Kukosa <tomas.kukosa@siemens.com>2007-10-18 13:35:57 +0000
commit44800d2c5a2100e98f518545a82ef63106b0a669 (patch)
treeab278f89b7cf9026c3776fdc91e63b9f91885207
parent74b161b10804943ffd43105ccf1ab2504831e74f (diff)
H.460 new dissector implemented (H.460.2-H.460.22)
H.225 - change RysMessage_vals to h225_Rasmessage_vals - use #.PDU directive for H323-UserInformation and RasMessage instead of implementing it by hands - register RasMessage_PDU as "h225.ras" dissector for calling it from H.460 asn2wrs make PDUs exportable svn path=/trunk/; revision=23226
-rw-r--r--asn1/Makefile.am1
-rw-r--r--asn1/Makefile.nmake9
-rw-r--r--asn1/h225/h225.cnf12
-rw-r--r--asn1/h225/packet-h225-template.c25
-rw-r--r--asn1/h460/CALL-PARTY-CATEGORY.asn26
-rw-r--r--asn1/h460/CALL-PRIORITY.asn58
-rw-r--r--asn1/h460/CIRCUIT-STATUS-MAP.asn39
-rw-r--r--asn1/h460/MEDIA-TRAVERSAL.asn33
-rw-r--r--asn1/h460/MESSAGE-BROADCAST.asn53
-rw-r--r--asn1/h460/MLPP.asn65
-rw-r--r--asn1/h460/Makefile.am26
-rw-r--r--asn1/h460/Makefile.common69
-rw-r--r--asn1/h460/Makefile.nmake29
-rw-r--r--asn1/h460/NUMBER-PORTABILITY.asn65
-rw-r--r--asn1/h460/QOS-MONITORING-EXTENDED-VOIP-REPORT.asn73
-rw-r--r--asn1/h460/QOS-MONITORING-REPORT.asn102
-rw-r--r--asn1/h460/SIGNALLING-CHANNEL-SUSPEND-REDIRECT.asn59
-rw-r--r--asn1/h460/SIGNALLING-TRAVERSAL.asn31
-rw-r--r--asn1/h460/h460.cnf61
-rw-r--r--asn1/h460/packet-h460-template.c294
-rw-r--r--configure.in1
-rw-r--r--epan/dissectors/Makefile.common1
-rw-r--r--epan/dissectors/packet-h225.c191
-rw-r--r--epan/dissectors/packet-h225.h3
-rw-r--r--epan/dissectors/packet-h460.c3091
-rw-r--r--epan/libwireshark.def2
-rw-r--r--gtk/h225_counter.c2
-rw-r--r--gtk/voip_calls.c2
-rw-r--r--tap-h225counter.c2
-rwxr-xr-xtools/asn2wrs.py53
30 files changed, 4355 insertions, 123 deletions
diff --git a/asn1/Makefile.am b/asn1/Makefile.am
index 74e9198355..1c3f0e5fd7 100644
--- a/asn1/Makefile.am
+++ b/asn1/Makefile.am
@@ -46,6 +46,7 @@ SUBDIRS = \
h323 \
h450 \
h450-ros \
+ h460 \
inap \
ldap \
logotype-cert-extn \
diff --git a/asn1/Makefile.nmake b/asn1/Makefile.nmake
index 82decaf080..728e8ec078 100644
--- a/asn1/Makefile.nmake
+++ b/asn1/Makefile.nmake
@@ -85,6 +85,7 @@ per: \
h323 \
h450 \
h450-ros \
+ h460 \
nbap \
mpeg-audio \
mpeg-pes \
@@ -163,6 +164,9 @@ clean:
cd h450-ros
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake clean
cd ..
+ cd h460
+ $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake clean
+ cd ..
cd inap
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake clean
cd ..
@@ -414,6 +418,11 @@ h450-ros::
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake copy_files
cd ..
+h460::
+ cd h460
+ $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake copy_files
+ cd ..
+
inap::
cd inap
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake copy_files
diff --git a/asn1/h225/h225.cnf b/asn1/h225/h225.cnf
index 0f59a08ea3..52ee9e1e9f 100644
--- a/asn1/h225/h225.cnf
+++ b/asn1/h225/h225.cnf
@@ -14,7 +14,6 @@ TransportAddress TYPE = FT_UINT32 DISPLAY = BASE_DEC STRINGS = VALS(h
#----------------------------------------------------------------------------------------
#.EXPORTS ONLY_VALS WS_VAR NO_PROT_PREFIX
-RasMessage WITH_VALS
H323-UU-PDU/h323-message-body
FacilityReason
GatekeeperRejectReason
@@ -29,6 +28,7 @@ LocationRejectReason
RegistrationRejectReason
#.EXPORTS
+RasMessage WS_VAR
NonStandardParameter
PublicTypeOfNumber
PrivateTypeOfNumber
@@ -60,7 +60,15 @@ SupportedProtocols
GatekeeperIdentifier
ServiceControlSession
ReleaseCompleteReason WS_VAR
+ExtendedAliasAddress_PDU
#.END
+
+#.PDU_NEW
+H323-UserInformation
+RasMessage
+ExtendedAliasAddress
+#.END
+
#----------------------------------------------------------------------------------------
#.OMIT_ASSIGNMENT
@@ -278,7 +286,7 @@ IsupNumber/nationalStandardPartyNumber isupNationalStandardPartyNumber
%(DEFAULT_BODY)s
if (check_col(%(ACTX)s->pinfo->cinfo, COL_INFO)){
col_add_fstr(%(ACTX)s->pinfo->cinfo, COL_INFO, "RAS: %%s ",
- val_to_str(rasmessage_value, RasMessage_vals, "<unknown>"));
+ val_to_str(rasmessage_value, h225_RasMessage_vals, "<unknown>"));
}
h225_pi->msg_tag = rasmessage_value;
diff --git a/asn1/h225/packet-h225-template.c b/asn1/h225/packet-h225-template.c
index e1943fcb70..f47ea8c044 100644
--- a/asn1/h225/packet-h225-template.c
+++ b/asn1/h225/packet-h225-template.c
@@ -102,8 +102,6 @@ static next_tvb_list_t tp_list;
static int h225_tap = -1;
static int proto_h225 = -1;
-static int hf_h225_H323_UserInformation = -1;
-static int hf_h225_RasMessage = -1;
static int hf_h221Manufacturer = -1;
static int hf_h225_ras_req_frame = -1;
static int hf_h225_ras_rsp_frame = -1;
@@ -152,7 +150,6 @@ dissect_h225_H323UserInformation(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
proto_item *it;
proto_tree *tr;
int offset = 0;
- asn1_ctx_t asn1_ctx;
pi_current++;
if(pi_current==5){
@@ -177,8 +174,7 @@ dissect_h225_H323UserInformation(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
it=proto_tree_add_protocol_format(tree, proto_h225, tvb, 0, tvb_length(tvb), PSNAME" CS");
tr=proto_item_add_subtree(it, ett_h225);
- asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
- offset = dissect_h225_H323_UserInformation(tvb, offset, &asn1_ctx, tr, hf_h225_H323_UserInformation);
+ offset = dissect_H323_UserInformation_PDU(tvb, pinfo, tr);
if (h245_list.count && check_col(pinfo->cinfo, COL_PROTOCOL)){
col_append_str(pinfo->cinfo, COL_PROTOCOL, "/");
@@ -197,7 +193,6 @@ dissect_h225_h225_RasMessage(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree
proto_item *it;
proto_tree *tr;
guint32 offset=0;
- asn1_ctx_t asn1_ctx;
pi_current++;
if(pi_current==5){
@@ -216,8 +211,7 @@ dissect_h225_h225_RasMessage(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree
it=proto_tree_add_protocol_format(tree, proto_h225, tvb, offset, tvb_length(tvb), PSNAME" RAS");
tr=proto_item_add_subtree(it, ett_h225);
- asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
- offset = dissect_h225_RasMessage(tvb, 0, &asn1_ctx, tr, hf_h225_RasMessage );
+ offset = dissect_RasMessage_PDU(tvb, pinfo, tr);
ras_call_matching(tvb, pinfo, tr, h225_pi);
@@ -231,12 +225,6 @@ void proto_register_h225(void) {
/* List of fields */
static hf_register_info hf[] = {
- { &hf_h225_H323_UserInformation,
- { "H323_UserInformation", "h225.H323_UserInformation", FT_NONE, BASE_NONE,
- NULL, 0, "H323_UserInformation sequence", HFILL }},
- { &hf_h225_RasMessage,
- { "RasMessage", "h225.RasMessage", FT_UINT32, BASE_DEC,
- VALS(RasMessage_vals), 0, "RasMessage choice", HFILL }},
{ &hf_h221Manufacturer,
{ "H.221 Manufacturer", "h221.Manufacturer", FT_UINT32, BASE_HEX,
VALS(H221ManufacturerCode_vals), 0, "H.221 Manufacturer", HFILL }},
@@ -290,6 +278,7 @@ void proto_register_h225(void) {
new_register_dissector("h225", dissect_h225_H323UserInformation, proto_h225);
new_register_dissector("h323ui",dissect_h225_H323UserInformation, proto_h225);
+ new_register_dissector("h225.ras", dissect_h225_h225_RasMessage, proto_h225);
nsp_object_dissector_table = register_dissector_table("h225.nsp.object", "H.225 NonStandardParameter (object)", FT_STRING, BASE_NONE);
nsp_h221_dissector_table = register_dissector_table("h225.nsp.h221", "H.225 NonStandardParameter (h221)", FT_UINT32, BASE_HEX);
@@ -299,9 +288,13 @@ void proto_register_h225(void) {
register_init_routine(&h225_init_routine);
h225_tap = register_tap("h225");
- add_oid_str_name("0.0.8.2250.0.2","itu-t(0) recommendation(0) h(8) h225-0(2250) version(0) 2");
- add_oid_str_name("0.0.8.2250.0.4","itu-t(0) recommendation(0) h(8) h225-0(2250) version(0) 4");
+ add_oid_str_name("0.0.8.2250.0.1", "itu-t(0) recommendation(0) h(8) h225-0(2250) version(0) 1 - Version 1");
+ add_oid_str_name("0.0.8.2250.0.2", "itu-t(0) recommendation(0) h(8) h225-0(2250) version(0) 2 - Version 2");
+ add_oid_str_name("0.0.8.2250.0.3", "itu-t(0) recommendation(0) h(8) h225-0(2250) version(0) 3 - Version 3");
+ add_oid_str_name("0.0.8.2250.0.4", "itu-t(0) recommendation(0) h(8) h225-0(2250) version(0) 4 - Version 4");
+ add_oid_str_name("0.0.8.2250.0.5", "itu-t(0) recommendation(0) h(8) h225-0(2250) version(0) 5 - Version 5");
+ add_oid_str_name("0.0.8.2250.0.6", "itu-t(0) recommendation(0) h(8) h225-0(2250) version(0) 6 - Version 6");
}
diff --git a/asn1/h460/CALL-PARTY-CATEGORY.asn b/asn1/h460/CALL-PARTY-CATEGORY.asn
new file mode 100644
index 0000000000..cc69c97aff
--- /dev/null
+++ b/asn1/h460/CALL-PARTY-CATEGORY.asn
@@ -0,0 +1,26 @@
+-- CALL-PARTY-CATEGORY.asn
+--
+-- Taken from ITU ASN.1 database
+-- http://www.itu.int/ITU-T/asn1/database/itu-t/h/h460.15/2004/SIGNALLING-CHANNEL-SUSPEND-REDIRECT.asn
+--
+-- http://www.itu.int/ITU-T/asn1/database/itu-t/h/h460.10/2004/CALL-PARTY-CATEGORY.asn
+--
+
+-- Module CALL-PARTY-CATEGORY (H.460.10:03/2004)
+CALL-PARTY-CATEGORY DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+CallPartyCategoryInfo ::= SEQUENCE {
+ callPartyCategory CallPartyCategory OPTIONAL,
+ originatingLineInfo OriginatingLineInfo OPTIONAL,
+ ...
+}
+
+CallPartyCategory ::= INTEGER(0..255)
+
+OriginatingLineInfo ::= INTEGER(0..255)
+
+END
+
+-- Generated by Asnp, the ASN.1 pretty-printer of France Telecom R&D
+
diff --git a/asn1/h460/CALL-PRIORITY.asn b/asn1/h460/CALL-PRIORITY.asn
new file mode 100644
index 0000000000..74a20ed83d
--- /dev/null
+++ b/asn1/h460/CALL-PRIORITY.asn
@@ -0,0 +1,58 @@
+-- CALL-PRIORITY.asn
+--
+-- Taken from ITU ASN.1 database
+-- http://www.itu.int/ITU-T/asn1/database/itu-t/h/h460.15/2004/SIGNALLING-CHANNEL-SUSPEND-REDIRECT.asn
+--
+-- http://www.itu.int/ITU-T/asn1/database/itu-t/h/h460.4/2007/CALL-PRIORITY.asn
+--
+
+-- Module CALL-PRIORITY (H.460.4:01/2007)
+CALL-PRIORITY {itu-t(0) recommendation(0) h(8) 460 4 version(1)} DEFINITIONS
+AUTOMATIC TAGS ::=
+BEGIN
+
+IMPORTS ClearToken, CryptoToken
+ FROM H235-SECURITY-MESSAGES;
+
+CallPriorityInfo ::= SEQUENCE -- root for Call Priority related asn.1
+ {
+ priorityValue
+ CHOICE {emergencyAuthorized NULL,
+ emergencyPublic NULL,
+ high NULL,
+ normal NULL,
+ ...},
+ priorityExtension INTEGER(0..255) OPTIONAL,
+ tokens SEQUENCE OF ClearToken OPTIONAL,
+ cryptoTokens SEQUENCE OF CryptoToken OPTIONAL,
+ rejectReason
+ CHOICE {priorityUnavailable NULL,
+ priorityUnauthorized NULL,
+ priorityValueUnknown NULL,
+ ...} OPTIONAL, -- Only used in CallPriorityConfirm
+ ...
+}
+
+CountryInternationalNetworkCallOriginationIdentification ::=
+ SEQUENCE
+ -- root for Country/International Network
+ -- of Call Origination Identification related asn.1
+ {
+ numberingPlan
+ CHOICE {x121
+ SEQUENCE {countryCode IA5String(SIZE (3))(FROM ("0123456789")),
+ ...},
+ e164
+ SEQUENCE {countryCode
+ IA5String(SIZE (3))(FROM ("0123456789")),
+ identificationCode
+ IA5String(SIZE (1..4))(FROM ("0123456789")),
+ ...},
+ ...},
+ ...
+}
+
+END -- of ASN.1
+
+-- Generated by Asnp, the ASN.1 pretty-printer of France Telecom R&D
+
diff --git a/asn1/h460/CIRCUIT-STATUS-MAP.asn b/asn1/h460/CIRCUIT-STATUS-MAP.asn
new file mode 100644
index 0000000000..0bab3205da
--- /dev/null
+++ b/asn1/h460/CIRCUIT-STATUS-MAP.asn
@@ -0,0 +1,39 @@
+-- CIRCUIT-STATUS-MAP.asn
+--
+-- Taken from ITU ASN.1 database
+-- http://www.itu.int/ITU-T/asn1/database/itu-t/h/h460.15/2004/SIGNALLING-CHANNEL-SUSPEND-REDIRECT.asn
+--
+-- http://www.itu.int/ITU-T/asn1/database/itu-t/h/h460.3/2002/CIRCUIT-STATUS-MAP.asn
+--
+
+-- Module CIRCUIT-STATUS-MAP (H.460.3:11/2002)
+CIRCUIT-STATUS-MAP DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+IMPORTS CircuitIdentifier
+ FROM H323-MESSAGES;
+
+CircuitStatus ::= SEQUENCE -- root for Circuit Status Map ASN.1
+ {
+ circuitStatusMap SEQUENCE OF CircuitStatusMap OPTIONAL,
+ ...
+}
+
+CircuitStatusMap ::= SEQUENCE {
+ statusType CircuitStatusType,
+ baseCircuitID CircuitIdentifier,
+ range INTEGER(0..4095),
+ status OCTET STRING,
+ ...
+}
+
+CircuitStatusType ::= CHOICE {
+ serviceStatus NULL, -- status: 0 = out-of-service, 1 = in-service
+ busyStatus NULL, -- status: 0 = free, 1 = in-use
+ ...
+}
+
+END
+
+-- Generated by Asnp, the ASN.1 pretty-printer of France Telecom R&D
+
diff --git a/asn1/h460/MEDIA-TRAVERSAL.asn b/asn1/h460/MEDIA-TRAVERSAL.asn
new file mode 100644
index 0000000000..860c38502a
--- /dev/null
+++ b/asn1/h460/MEDIA-TRAVERSAL.asn
@@ -0,0 +1,33 @@
+-- MEDIA-TRAVERSAL.asn
+--
+-- Taken from ITU ASN.1 database
+-- http://www.itu.int/ITU-T/asn1/database/itu-t/h/h460.15/2004/SIGNALLING-CHANNEL-SUSPEND-REDIRECT.asn
+--
+-- http://www.itu.int/ITU-T/asn1/database/itu-t/h/h460.19/2005/MEDIA-TRAVERSAL.asn
+--
+
+-- Module MEDIA-TRAVERSAL (H.460.19:09/2005)
+MEDIA-TRAVERSAL {itu-t(0) recommendation(0) h(8) 460 19 version(0) 1}
+DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+IMPORTS
+ TimeToLive
+ FROM H323-MESSAGES
+ TransportAddress
+ FROM MULTIMEDIA-SYSTEM-CONTROL;
+
+TraversalParameters ::= SEQUENCE {
+ multiplexedMediaChannel TransportAddress OPTIONAL,
+ multiplexedMediaControlChannel TransportAddress OPTIONAL,
+ multiplexID INTEGER(0..4294967295) OPTIONAL,
+ keepAliveChannel TransportAddress OPTIONAL,
+ keepAlivePayloadType INTEGER(0..127) OPTIONAL,
+ keepAliveInterval TimeToLive OPTIONAL,
+ ...
+}
+
+END
+
+-- Generated by Asnp, the ASN.1 pretty-printer of France Telecom R&D
+
diff --git a/asn1/h460/MESSAGE-BROADCAST.asn b/asn1/h460/MESSAGE-BROADCAST.asn
new file mode 100644
index 0000000000..d6378ad73a
--- /dev/null
+++ b/asn1/h460/MESSAGE-BROADCAST.asn
@@ -0,0 +1,53 @@
+-- MESSAGE-BROADCAST.asn
+--
+-- Taken from ITU ASN.1 database
+-- http://www.itu.int/ITU-T/asn1/database/itu-t/h/h460.15/2004/SIGNALLING-CHANNEL-SUSPEND-REDIRECT.asn
+--
+-- http://www.itu.int/ITU-T/asn1/database/itu-t/h/h460.21/2006/MESSAGE-BROADCAST.asn
+--
+
+-- Module MESSAGE-BROADCAST (H.460.21:05/2006)
+MESSAGE-BROADCAST DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+IMPORTS
+ MulticastAddress, UnicastAddress, Capability
+ FROM MULTIMEDIA-SYSTEM-CONTROL;
+
+CapabilityAdvertisement ::= SEQUENCE {
+ receiveCapabilities ReceiveCapabilities OPTIONAL,
+ transmitCapabilities SEQUENCE SIZE (1..256) OF TransmitCapabilities OPTIONAL,
+ ...
+}
+
+ReceiveCapabilities ::= SEQUENCE {
+ capabilities SEQUENCE SIZE (1..256) OF Capability,
+ maxGroups INTEGER(1..65535),
+ ...
+}
+
+GloballyUniqueID ::= OCTET STRING(SIZE (16))
+
+TransmitCapabilities ::= SEQUENCE {
+ groupIdentifer GloballyUniqueID,
+ capability Capability,
+ sourceAddress UnicastAddress,
+ ...
+}
+
+MessageBroadcastGroups ::= SEQUENCE SIZE (1..256) OF GroupAttributes
+
+GroupAttributes ::= SEQUENCE {
+ priority INTEGER(0..255), -- 0 = high, 255 = low
+ groupIdentifer GloballyUniqueID OPTIONAL,
+ capability Capability,
+ groupAddress MulticastAddress,
+ sourceAddress UnicastAddress OPTIONAL,
+ alertUser BOOLEAN,
+ ...
+}
+
+END
+
+-- Generated by Asnp, the ASN.1 pretty-printer of France Telecom R&D
+
diff --git a/asn1/h460/MLPP.asn b/asn1/h460/MLPP.asn
new file mode 100644
index 0000000000..2f8ea03d6d
--- /dev/null
+++ b/asn1/h460/MLPP.asn
@@ -0,0 +1,65 @@
+-- MLPP.asn
+--
+-- Taken from ITU ASN.1 database
+-- http://www.itu.int/ITU-T/asn1/database/itu-t/h/h460.15/2004/SIGNALLING-CHANNEL-SUSPEND-REDIRECT.asn
+--
+-- http://www.itu.int/ITU-T/asn1/database/itu-t/h/h460.14/2004/MLPP.asn
+--
+
+-- Module MLPP (H.460.14:03/2004)
+MLPP DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+IMPORTS
+ CallIdentifier, AliasAddress
+ FROM H323-MESSAGES; -- defined in H.225.0, Annex H
+
+MLPPInfo ::= SEQUENCE -- root for MLPP data ASN.1
+ {
+ precedence MlppPrecedence OPTIONAL,
+ mlppReason MlppReason OPTIONAL,
+ mlppNotification MlppNotification OPTIONAL,
+ alternateParty AlternateParty OPTIONAL,
+ releaseCall ReleaseCall OPTIONAL,
+ ...
+}
+
+MlppPrecedence ::= ENUMERATED {
+ flashOveride(0), flash(1), immediate(2), priority(3), routine(4), ...
+ }
+
+MlppReason ::=
+ ENUMERATED -- Indicates reasons that call is refused or released.
+ {preemptionNoReservation(8), preemptionReservation(9), callBlocked(46), ...
+ }
+
+MlppNotification ::=
+ CHOICE
+ -- Provides various notification events in Call Signalling messages
+ {
+ preemptionPending NULL,
+ preemptionInProgress NULL,
+ preemptionEnd NULL,
+ preemptionComplete NULL,
+ ...
+}
+
+AlternateParty ::= SEQUENCE {
+ altID AliasAddress,
+ altTimer INTEGER(0..255) OPTIONAL, --seconds
+ ...
+}
+
+ReleaseCall ::= SEQUENCE
+ -- Identifies other call to be preempted first
+ {
+ preemptCallID CallIdentifier,
+ releaseReason MlppReason,
+ releaseDelay INTEGER(0..255) OPTIONAL, --seconds to wait
+ ...
+}
+
+END
+
+-- Generated by Asnp, the ASN.1 pretty-printer of France Telecom R&D
+
diff --git a/asn1/h460/Makefile.am b/asn1/h460/Makefile.am
new file mode 100644
index 0000000000..0b7ca0ada3
--- /dev/null
+++ b/asn1/h460/Makefile.am
@@ -0,0 +1,26 @@
+# $Id: Makefile.am 23085 2007-10-07 21:07:33Z jmayer $
+#
+#
+# Wireshark - Network traffic analyzer
+# By Gerald Combs <gerald@wireshark.org>
+# Copyright 1998 Gerald Combs
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+include ../Makefile.preinc
+include Makefile.common
+include ../Makefile.inc
+
diff --git a/asn1/h460/Makefile.common b/asn1/h460/Makefile.common
new file mode 100644
index 0000000000..26ecffe427
--- /dev/null
+++ b/asn1/h460/Makefile.common
@@ -0,0 +1,69 @@
+# $Id: Makefile.common 22951 2007-09-25 11:58:35Z kukosa $
+#
+#
+# Wireshark - Network traffic analyzer
+# By Gerald Combs <gerald@wireshark.org>
+# Copyright 1998 Gerald Combs
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+PROTOCOL_NAME = h460
+
+DISSECTOR_FILES = \
+ packet-$(PROTOCOL_NAME).c
+
+# NEED_PACKET_PROTO_H =
+
+EXT_ASN_FILE_LIST =
+
+ASN_FILE_LIST = \
+ NUMBER-PORTABILITY.asn \
+ CIRCUIT-STATUS-MAP.asn \
+ CALL-PRIORITY.asn \
+ QOS-MONITORING-REPORT.asn \
+ QOS-MONITORING-EXTENDED-VOIP-REPORT.asn \
+ CALL-PARTY-CATEGORY.asn MLPP.asn \
+ SIGNALLING-CHANNEL-SUSPEND-REDIRECT.asn \
+ SIGNALLING-TRAVERSAL.asn \
+ MEDIA-TRAVERSAL.asn \
+ MESSAGE-BROADCAST.asn
+
+EXTRA_DIST = \
+ $(ASN_FILE_LIST) \
+ packet-$(PROTOCOL_NAME)-template.c \
+ $(PROTOCOL_NAME).cnf
+
+SRC_FILES = \
+ $(EXTRA_DIST) \
+ $(EXT_ASN_FILE_LIST)
+
+# need empty -p <proto> option, default is -p $(PROTOCOL_NAME)
+PROTO_OPT =
+A2W_FLAGS =
+
+EXTRA_CNF = \
+ ../h225/h225-exp.cnf \
+ ../h235/h235-exp.cnf \
+ ../h245/h245-exp.cnf
+
+../h225/h225-exp.cnf:
+ (cd ../h225 && $(MAKE_CNF_EXPORT))
+
+../h235/h235-exp.cnf:
+ (cd ../h235 && $(MAKE_CNF_EXPORT))
+
+../h245/h245-exp.cnf:
+ (cd ../h245 && $(MAKE_CNF_EXPORT))
diff --git a/asn1/h460/Makefile.nmake b/asn1/h460/Makefile.nmake
new file mode 100644
index 0000000000..d8dc2a43eb
--- /dev/null
+++ b/asn1/h460/Makefile.nmake
@@ -0,0 +1,29 @@
+## Use: $(MAKE) /$(MAKEFLAGS) -f makefile.nmake
+#
+# $Id: Makefile.nmake 23085 2007-10-07 21:07:33Z jmayer $
+#
+#
+# Wireshark - Network traffic analyzer
+# By Gerald Combs <gerald@wireshark.org>
+# Copyright 1998 Gerald Combs
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+include ../../config.nmake
+include ../Makefile.preinc.nmake
+include Makefile.common
+include ../Makefile.inc.nmake
+
diff --git a/asn1/h460/NUMBER-PORTABILITY.asn b/asn1/h460/NUMBER-PORTABILITY.asn
new file mode 100644
index 0000000000..1607249510
--- /dev/null
+++ b/asn1/h460/NUMBER-PORTABILITY.asn
@@ -0,0 +1,65 @@
+-- NUMBER-PORTABILITY.asn
+--
+-- Taken from ITU ASN.1 database
+-- http://www.itu.int/ITU-T/asn1/database/itu-t/h/h460.15/2004/SIGNALLING-CHANNEL-SUSPEND-REDIRECT.asn
+--
+-- http://www.itu.int/ITU-T/asn1/database/itu-t/h/h460.2/2001/NUMBER-PORTABILITY.asn
+--
+
+-- Module NUMBER-PORTABILITY (H.460.2:07/2001)
+NUMBER-PORTABILITY DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+IMPORTS
+ PublicTypeOfNumber, PrivateTypeOfNumber, AliasAddress
+ FROM H323-MESSAGES;
+
+NumberPortabilityInfo ::= CHOICE {
+ numberPortabilityRejectReason NumberPortabilityRejectReason,
+ nUMBERPORTABILITYDATA
+ SEQUENCE {addressTranslated NULL OPTIONAL,
+ portedAddress PortabilityAddress OPTIONAL,
+ routingAddress PortabilityAddress OPTIONAL,
+ regionalParams RegionalParameters OPTIONAL,
+ ...},
+ ...
+}
+
+NumberPortabilityRejectReason ::= CHOICE {
+ unspecified NULL,
+ qorPortedNumber NULL,
+ ...
+}
+
+PortabilityAddress ::= SEQUENCE {
+ aliasAddress AliasAddress,
+ typeOfAddress NumberPortabilityTypeOfNumber OPTIONAL,
+ ...
+}
+
+NumberPortabilityTypeOfNumber ::= CHOICE {
+ publicTypeOfNumber PublicTypeOfNumber,
+ privateTypeOfNumber PrivateTypeOfNumber,
+ portabilityTypeOfNumber PortabilityTypeOfNumber,
+ ...
+}
+
+PortabilityTypeOfNumber ::= CHOICE {
+ portedNumber NULL,
+ routingNumber NULL,
+ concatenatedNumber NULL,
+ ...
+}
+
+RegionalParameters ::= SEQUENCE {
+ t35CountryCode INTEGER(0..255),
+ t35Extension INTEGER(0..255),
+ variantIdentifier INTEGER(1..255) OPTIONAL,
+ regionalData OCTET STRING,
+ ...
+}
+
+END
+
+-- Generated by Asnp, the ASN.1 pretty-printer of France Telecom R&D
+
diff --git a/asn1/h460/QOS-MONITORING-EXTENDED-VOIP-REPORT.asn b/asn1/h460/QOS-MONITORING-EXTENDED-VOIP-REPORT.asn
new file mode 100644
index 0000000000..50784279b9
--- /dev/null
+++ b/asn1/h460/QOS-MONITORING-EXTENDED-VOIP-REPORT.asn
@@ -0,0 +1,73 @@
+-- QOS-MONITORING-EXTENDED-VOIP-REPORT.asn
+--
+-- Taken from ITU ASN.1 database
+-- http://www.itu.int/ITU-T/asn1/database/itu-t/h/h460.15/2004/SIGNALLING-CHANNEL-SUSPEND-REDIRECT.asn
+--
+-- http://www.itu.int/ITU-T/asn1/database/itu-t/h/h460.9/2002/QOS-MONITORING-EXTENDED-VOIP-REPORT.asn
+--
+
+-- Module QOS-MONITORING-EXTENDED-VOIP-REPORT (H.460.9:11/2002)
+QOS-MONITORING-EXTENDED-VOIP-REPORT DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+IMPORTS GenericIdentifier
+ FROM H323-MESSAGES;
+
+ExtendedRTPMetrics ::= SEQUENCE {
+ networkPacketLossRate INTEGER(0..255) OPTIONAL,
+ jitterBufferDiscardRate INTEGER(0..255) OPTIONAL,
+ burstMetrics BurstMetrics OPTIONAL,
+ rtcpRoundTripDelay INTEGER(0..65535) OPTIONAL,
+ endSystemDelay INTEGER(0..65535) OPTIONAL,
+ signalLevel INTEGER(-127..10) OPTIONAL,
+ noiseLevel INTEGER(-127..0) OPTIONAL,
+ residualEchoReturnLoss INTEGER(0..127) OPTIONAL,
+ rFactor INTEGER(0..100) OPTIONAL,
+ extRFactor INTEGER(0..100) OPTIONAL,
+ estimatedMOSLQ INTEGER(10..50) OPTIONAL,
+ estimatedMOSCQ INTEGER(10..50) OPTIONAL,
+ plcType PLCtypes OPTIONAL,
+ jitterBufferParms JitterBufferParms OPTIONAL,
+ ...
+}
+
+BurstMetrics ::= SEQUENCE {
+ gmin INTEGER(0..255) OPTIONAL,
+ burstLossDensity INTEGER(0..255) OPTIONAL,
+ gapLossDensity INTEGER(0..255) OPTIONAL,
+ burstDuration INTEGER(0..65535) OPTIONAL,
+ gapDuration INTEGER(0..65535) OPTIONAL,
+ ...
+}
+
+PLCtypes ::= CHOICE {
+ unspecified NULL,
+ disabled NULL,
+ enhanced NULL,
+ standard NULL,
+ ...
+}
+
+JitterBufferParms ::= SEQUENCE {
+ jitterBufferType JitterBufferTypes OPTIONAL,
+ jitterBufferAdaptRate INTEGER(0..15) OPTIONAL,
+ jitterBufferNominalSize INTEGER(0..65535) OPTIONAL,
+ jitterBufferMaxSize INTEGER(0..65535) OPTIONAL,
+ jitterBufferAbsoluteMax INTEGER(0..65535) OPTIONAL,
+ ...
+}
+
+JitterBufferTypes ::= CHOICE {
+ unknown NULL,
+ reserved NULL,
+ nonadaptive NULL,
+ adaptive NULL,
+ ...
+}
+
+qosMonitoringExtendedRTPMetrics GenericIdentifier ::= standard:2
+
+END -- of QOS-MONITORING-EXTENDED-VOIP-REPORT
+
+-- Generated by Asnp, the ASN.1 pretty-printer of France Telecom R&D
+
diff --git a/asn1/h460/QOS-MONITORING-REPORT.asn b/asn1/h460/QOS-MONITORING-REPORT.asn
new file mode 100644
index 0000000000..a3f7cd54cd
--- /dev/null
+++ b/asn1/h460/QOS-MONITORING-REPORT.asn
@@ -0,0 +1,102 @@
+-- QOS-MONITORING-REPORT.asn
+--
+-- Taken from ITU ASN.1 database
+-- http://www.itu.int/ITU-T/asn1/database/itu-t/h/h460.15/2004/SIGNALLING-CHANNEL-SUSPEND-REDIRECT.asn
+--
+-- http://www.itu.int/ITU-T/asn1/database/itu-t/h/h460.9/2002/QOS-MONITORING-REPORT.asn
+--
+
+-- Module QOS-MONITORING-REPORT (H.460.9:11/2002)
+QOS-MONITORING-REPORT DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+IMPORTS
+ NonStandardParameter, TransportChannelInfo, CallIdentifier,
+ CallReferenceValue, ConferenceIdentifier, BandWidth, GenericIdentifier
+ FROM H323-MESSAGES;
+
+EstimatedEnd2EndDelay ::= INTEGER(0..4294967295)
+
+-- middle 32 bits of 64 bit NTP timestamp
+CalculatedJitter ::= INTEGER(0..4294967295)
+
+-- measured in timestamp units
+Extension ::= SEQUENCE {
+ extensionId GenericIdentifier,
+ extensionContent OCTET STRING OPTIONAL,
+ ...
+}
+
+RTCPMeasures ::= SEQUENCE {
+ rtpAddress TransportChannelInfo,
+ rtcpAddress TransportChannelInfo,
+ sessionId INTEGER(1..255),
+ nonStandardData NonStandardParameter OPTIONAL,
+ mediaSenderMeasures
+ SEQUENCE {worstEstimatedEnd2EndDelay EstimatedEnd2EndDelay OPTIONAL,
+ meanEstimatedEnd2EndDelay EstimatedEnd2EndDelay OPTIONAL,
+ ...} OPTIONAL,
+ mediaReceiverMeasures
+ SEQUENCE {cumulativeNumberOfPacketsLost INTEGER(0..4294967295) OPTIONAL,
+ packetLostRate INTEGER(0..65535) OPTIONAL,
+ worstJitter CalculatedJitter OPTIONAL,
+ estimatedThroughput BandWidth OPTIONAL, -- in 100s of bits--
+ fractionLostRate INTEGER(0..65535) OPTIONAL,
+ meanJitter CalculatedJitter OPTIONAL,
+ ...} OPTIONAL,
+ extensions SEQUENCE OF Extension OPTIONAL,
+ ...
+}
+
+PerCallQoSReport ::= SEQUENCE {
+ nonStandardData NonStandardParameter OPTIONAL,
+ callReferenceValue CallReferenceValue,
+ conferenceID ConferenceIdentifier,
+ callIdentifier CallIdentifier,
+ mediaChannelsQoS SEQUENCE OF RTCPMeasures OPTIONAL,
+ -- one element per media channel
+ extensions SEQUENCE OF Extension OPTIONAL,
+ ...
+}
+
+QosMonitoringReportData ::= CHOICE {
+ periodic PeriodicQoSMonReport, -- included in IRR messages
+ final FinalQosMonReport, -- included in DRQ/DCF message
+ interGK InterGKQosMonReport, -- included in usageIndication message
+ ...
+}
+
+PeriodicQoSMonReport ::= SEQUENCE {
+ perCallInfo SEQUENCE OF PerCallQoSReport, -- one element per call
+ extensions SEQUENCE OF Extension OPTIONAL,
+ ...
+}
+
+FinalQosMonReport ::= SEQUENCE {
+ mediaInfo SEQUENCE OF RTCPMeasures, -- one element per channel
+ nonStandardData NonStandardParameter OPTIONAL,
+ extensions SEQUENCE OF Extension OPTIONAL,
+ ...
+}
+
+InterGKQosMonReport ::= SEQUENCE {
+ mediaInfo SEQUENCE OF RTCPMeasures, -- one element per channel
+ nonStandardData NonStandardParameter OPTIONAL,
+ extensions SEQUENCE OF Extension OPTIONAL,
+ ...
+}
+
+--
+-- H.460.9 Identifiers:
+--
+qosMonitoringReportID GenericIdentifier ::=
+ standard:9
+
+qosMonitoringFinalOnly GenericIdentifier ::= standard:0
+
+qosMonitoringReportData GenericIdentifier ::= standard:1
+
+END -- of ASN.1
+
+-- Generated by Asnp, the ASN.1 pretty-printer of France Telecom R&D
+
diff --git a/asn1/h460/SIGNALLING-CHANNEL-SUSPEND-REDIRECT.asn b/asn1/h460/SIGNALLING-CHANNEL-SUSPEND-REDIRECT.asn
new file mode 100644
index 0000000000..ebd2a6123b
--- /dev/null
+++ b/asn1/h460/SIGNALLING-CHANNEL-SUSPEND-REDIRECT.asn
@@ -0,0 +1,59 @@
+-- SIGNALLING-CHANNEL-SUSPEND-REDIRECT.asn
+--
+-- Taken from ITU ASN.1 database
+-- http://www.itu.int/ITU-T/asn1/database/itu-t/h/h460.15/2004/SIGNALLING-CHANNEL-SUSPEND-REDIRECT.asn
+--
+-- $Id: H323-MESSAGES.asn 20807 2007-02-14 08:08:44Z kukosa $
+--
+
+-- Module SIGNALLING-CHANNEL-SUSPEND-REDIRECT (H.460.15:03/2004)
+SIGNALLING-CHANNEL-SUSPEND-REDIRECT DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+IMPORTS TransportAddress
+ FROM H323-MESSAGES;
+
+SignallingChannelData ::= SEQUENCE {
+ signallingChannelData
+ CHOICE {channelSuspendRequest ChannelSuspendRequest,
+ channelSuspendResponse ChannelSuspendResponse,
+ channelSuspendConfirm ChannelSuspendConfirm,
+ channelSuspendCancel ChannelSuspendCancel,
+ channelResumeRequest ChannelResumeRequest,
+ channelResumeResponse ChannelResumeResponse,
+ ...},
+ ...
+}
+
+ChannelSuspendRequest ::= SEQUENCE {
+ channelResumeAddress SEQUENCE OF TransportAddress,
+ immediateResume BOOLEAN,
+ resetH245 NULL OPTIONAL,
+ ...
+}
+
+ChannelSuspendResponse ::= SEQUENCE {
+ okToSuspend BOOLEAN,
+ channelResumeAddress SEQUENCE OF TransportAddress,
+ ...
+}
+
+ChannelSuspendConfirm ::= SEQUENCE {...
+}
+
+ChannelSuspendCancel ::= SEQUENCE {...
+}
+
+ChannelResumeRequest ::= SEQUENCE {
+ randomNumber INTEGER(0..4294967295),
+ resetH245 NULL OPTIONAL,
+ ...
+}
+
+ChannelResumeResponse ::= SEQUENCE {...
+}
+
+END -- of ASN.1
+
+-- Generated by Asnp, the ASN.1 pretty-printer of France Telecom R&D
+
diff --git a/asn1/h460/SIGNALLING-TRAVERSAL.asn b/asn1/h460/SIGNALLING-TRAVERSAL.asn
new file mode 100644
index 0000000000..9550fb5f8e
--- /dev/null
+++ b/asn1/h460/SIGNALLING-TRAVERSAL.asn
@@ -0,0 +1,31 @@
+-- SIGNALLING-TRAVERSAL.asn
+--
+-- Taken from ITU ASN.1 database
+-- http://www.itu.int/ITU-T/asn1/database/itu-t/h/h460.18/2005/SIGNALLING-TRAVERSAL.asn
+--
+-- $Id: H323-MESSAGES.asn 20807 2007-02-14 08:08:44Z kukosa $
+--
+
+-- Module SIGNALLING-TRAVERSAL (H.460.18:09/2005)
+SIGNALLING-TRAVERSAL {itu-t(0) recommendation(0) h(8) 460 18 version(0) 1}
+DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+IMPORTS CallIdentifier, TimeToLive, TransportAddress
+ FROM H323-MESSAGES;
+
+IncomingCallIndication ::= SEQUENCE {
+ callSignallingAddress TransportAddress,
+ callID CallIdentifier,
+ ...
+}
+
+LRQKeepAliveData ::= SEQUENCE {
+ lrqKeepAliveInterval TimeToLive, -- keep-alive interval (seconds)
+ ...
+}
+
+END
+
+-- Generated by Asnp, the ASN.1 pretty-printer of France Telecom R&D
+
diff --git a/asn1/h460/h460.cnf b/asn1/h460/h460.cnf
new file mode 100644
index 0000000000..861025acbe
--- /dev/null
+++ b/asn1/h460/h460.cnf
@@ -0,0 +1,61 @@
+# h460.cnf
+# H.460.x conformation file
+# 2007 Tomas Kukosa
+
+# $Id$
+
+#.INCLUDE ../h225/h225-exp.cnf
+#.INCLUDE ../h235/h235-exp.cnf
+#.INCLUDE ../h245/h245-exp.cnf
+
+#.OPT
+PER
+ALIGNED
+GROUP_BY_PROT
+-o h460
+#.END
+
+#.MODULE
+NUMBER-PORTABILITY h460.2
+CIRCUIT-STATUS-MAP h460.3
+CALL-PRIORITY h460.4
+QOS-MONITORING-REPORT h460.9
+QOS-MONITORING-EXTENDED-VOIP-REPORT h460.9
+CALL-PARTY-CATEGORY h460.10
+MLPP h460.14
+SIGNALLING-CHANNEL-SUSPEND-REDIRECT h460.15
+SIGNALLING-TRAVERSAL h460.18
+MEDIA-TRAVERSAL h460.19
+MESSAGE-BROADCAST h460.21
+#.END
+
+#.PDU_NEW
+# H.460.2
+NumberPortabilityInfo
+# H.460.3
+CircuitStatus
+# H.460.4
+CallPriorityInfo
+CountryInternationalNetworkCallOriginationIdentification
+# H.460.9
+QosMonitoringReportData
+ExtendedRTPMetrics
+# H.460.10
+CallPartyCategoryInfo
+# H.460.14
+MLPPInfo
+# H.460.15
+SignallingChannelData
+# H.460.18
+IncomingCallIndication
+LRQKeepAliveData
+# H.460.19
+TraversalParameters
+# H.460.21
+CapabilityAdvertisement
+#.END
+
+#.TF_RENAME
+CountryInternationalNetworkCallOriginationIdentification/numberingPlan/x121/countryCode x121CountryCode
+CountryInternationalNetworkCallOriginationIdentification/numberingPlan/e164/countryCode e164CountryCode
+#.END \ No newline at end of file
diff --git a/asn1/h460/packet-h460-template.c b/asn1/h460/packet-h460-template.c
new file mode 100644
index 0000000000..3792e2091f
--- /dev/null
+++ b/asn1/h460/packet-h460-template.c
@@ -0,0 +1,294 @@
+/* packet-h460.c
+ * Routines for H.460.x packet dissection
+ * 2007 Tomas Kukosa
+ *
+ * $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/oids.h>
+#include <epan/asn1.h>
+
+#include <stdio.h>
+#include <string.h>
+
+#include "packet-per.h"
+#include "packet-h225.h"
+#include "packet-h235.h"
+#include "packet-h245.h"
+
+#define PNAME "H.460 Supplementary Services"
+#define PSNAME "H.460"
+#define PFNAME "h460"
+
+/* Initialize the protocol and registered fields */
+int proto_h460 = -1;
+#include "packet-h460-hf.c"
+
+/* Initialize the subtree pointers */
+#include "packet-h460-ett.c"
+
+/* Subdissectors */
+static dissector_handle_t q931_ie_handle = NULL;
+static dissector_handle_t h225_ras_handle = NULL;
+
+#include "packet-h460-fn.c"
+
+static int
+dissect_ies(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+ int offset = 0;
+
+ if (q931_ie_handle) {
+ call_dissector(q931_ie_handle, tvb, pinfo, tree);
+ offset += tvb_length_remaining(tvb, offset);
+ }
+ return offset;
+}
+
+static int
+dissect_ras(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+ int offset = 0;
+
+ if (h225_ras_handle) {
+ call_dissector(h225_ras_handle, tvb, pinfo, tree);
+ offset += tvb_length_remaining(tvb, offset);
+ }
+ return offset;
+}
+
+typedef struct _h460_feature_t {
+ guint32 opt;
+ const gchar *id;
+ const gchar *name;
+ new_dissector_t content_pdu;
+ /*---*/
+ const gchar *key_gd;
+ const gchar *key_fd;
+ const gchar *key_gm;
+ const gchar *key_gi;
+ dissector_handle_t content_hnd;
+} h460_feature_t;
+
+/* options */
+#define GD 0x01 /* present in H.225 GenericData */
+#define FD 0x02 /* present in H.225 FeatureDescriptor */
+#define GM 0x04 /* present in H.245 GenericMessage */
+#define GI 0x08 /* present in H.245 GenericInformation */
+
+static h460_feature_t h460_feature_tab[] = {
+ /* H.460.3 */
+ { GD|FD, "2", "Number Portability", NULL },
+ { GD|FD, "2/1", "NumberPortabilityData", dissect_h460_2_NumberPortabilityInfo_PDU },
+ /* H.460.3 */
+ { GD|FD, "3", "Circuit Status", NULL },
+ { GD|FD, "3/1", "Circuit Status Map", dissect_h460_3_CircuitStatus_PDU },
+ /* H.460.4 */
+ { GD|FD, "4", "CallPriorityDesignation", NULL },
+ { GD|FD, "4/1", "CallPriorityRequest", dissect_h460_4_CallPriorityInfo_PDU },
+ { GD|FD, "4/2", "CallPriorityConfirm", dissect_h460_4_CallPriorityInfo_PDU },
+ { GD|FD, "4/3", "Country/InternationalNetworkCallOriginationRequest", dissect_h460_4_CountryInternationalNetworkCallOriginationIdentification_PDU },
+ { GD|FD, "4/4", "Country/InternationalNetworkCallOriginationConfirm", dissect_h460_4_CountryInternationalNetworkCallOriginationIdentification_PDU },
+ /* H.460.5 */
+ { GD|FD, "5", "DuplicateIEs", NULL },
+ { GD|FD, "5/1", "IEsString", dissect_ies },
+ /* H.460.6 */
+ { GD|FD, "6", "Extended Fast Connect", NULL },
+ { GD|FD, "6/1", "EFC Proposal", NULL },
+ { GD|FD, "6/2", "EFC Close All Media Channels", NULL },
+ { GD|FD, "6/3", "EFC Request New Proposals", NULL },
+ { GD|FD, "6/4", "EFC Require Symmetric Operation", NULL },
+ /* H.460.7 */
+ { GD|FD, "7", "Digit Maps", NULL },
+ { FD, "7/1", "Digit Maps Length", NULL },
+ { FD, "7/2", "Digit Map Length for Overlapped Sending", NULL },
+ { FD, "7/3", "HTTP Digit Maps Download Capability", NULL },
+ { GD , "7/1", "Start Timer", NULL },
+ { GD , "7/2", "Short Timer", NULL },
+ { GD , "7/3", "Long Timer", NULL },
+ { GD , "7/4", "Digit Map String", NULL },
+ { GD , "7/5", "ToN Associated Digit Map", NULL },
+ { GD , "7/5/1", "Type of Number", NULL },
+ { GD , "7/5/2", "Digit Map Strings for ToN", NULL },
+ { GD , "7/6", "Digit Map URL", NULL },
+ /* H.460.8 */
+ { GD|FD, "8", "Querying for Alternate Routes", NULL },
+ { GD|FD, "8/1", "Query Count", NULL },
+ { GD|FD, "8/2", "Call Termination Cause", NULL },
+ /* H.460.9 */
+ { GD|FD, "9", "QoS-monitoring Reporting", NULL },
+ { GD|FD, "9/1", "qosMonitoringFinalOnly", NULL },
+ { GD|FD, "9/2", "qosMonitoringReportData", dissect_h460_9_QosMonitoringReportData_PDU },
+ { GD|FD, "9/3", "qosMonitoringExtendedRTPMetrics", dissect_h460_9_ExtendedRTPMetrics_PDU },
+ /* H.460.10 */
+ { GD|FD, "10", "Call Party Category", NULL },
+ { GD|FD, "10/1", "Call party category info", dissect_h460_10_CallPartyCategoryInfo_PDU },
+ /* H.460.11 */
+ { GD|FD, "11", "Delayed Call Establishment", NULL },
+ { GD|FD, "11/1", "Delay Point Indicator", NULL },
+ { GD|FD, "11/2", "Implicit DCE Release", NULL },
+ { GD|FD, "11/3", "Delay Point Reached", NULL },
+ { GD|FD, "11/4", "DCE Release", NULL },
+ /* H.460.12 */
+ { GD|FD, "12", "Glare Control Indicator", NULL },
+ { GD|FD, "12/1", "Glare Control Indicator Parameter", NULL },
+ /* H.460.13 */
+ { GD|FD, "13", "Called User Release Control", NULL },
+ { GD|FD, "13/1", "Called User Release Control", NULL },
+ /* H.460.14 */
+ { GD|FD, "14", "Multi-Level Precedence and Preemption", NULL },
+ { GD|FD, "14/1", "MLPP Information", dissect_h460_14_MLPPInfo_PDU },
+ /* H.460.15 */
+ { GD|FD, "15", "Call signalling transport channel suspension and redirection", NULL },
+ { GD|FD, "15/1", "Signalling channel suspend and redirect", dissect_h460_15_SignallingChannelData_PDU },
+ /* H.460.16 */
+ { GD|FD, "16", "Multiple-message Release Sequence", NULL },
+ { GD|FD, "16/1", "MMRS use required", NULL },
+ { GD|FD, "16/2", "MMRS procedure", NULL },
+ { GD|FD, "16/3", "MMRS additional IEs", dissect_ies },
+ /* H.460.17 */
+ { GD|FD, "17", "RAS over H.225.0", NULL },
+ { GD|FD, "17/1", "RAS message", dissect_ras },
+ /* H.460.18 */
+ { GD|FD|GM, "18", "Signalling Traversal", NULL },
+ { GD|FD , "18/1", "IncomingCallIndication", dissect_h460_18_IncomingCallIndication_PDU },
+ { GD|FD , "18/2", "LRQKeepAliveData", dissect_h460_18_LRQKeepAliveData_PDU },
+ { GM, "18-1", "connectionCorrelation", NULL },
+ { GM, "18-1/1", "callIdentifier", NULL },
+ { GM, "18-1/2", "answerCall", NULL },
+ /* H.460.19 */
+ { GD|FD|GI, "19", "mediaNATFWTraversal", NULL },
+ { GD|FD , "19/1", "supportTransmitMultiplexedMedia", NULL },
+ { GD|FD , "19/2", "mediaTraversalServer", NULL },
+ { GI, "19/1", "Traversal Parameters", dissect_h460_19_TraversalParameters_PDU },
+ /* H.460.20 */
+ { GD|FD, "20", "LocationSourceAddress", NULL },
+ { GD|FD, "20/1", "LocationSourceAddress", dissect_h225_ExtendedAliasAddress_PDU },
+ /* H.460.21 */
+ { GD|FD, "21", "Message Broadcast", NULL },
+ { GD|FD, "21/1", "MessageBroadcastParameter", dissect_h460_21_CapabilityAdvertisement_PDU },
+ /* H.460.22 */
+ { GD|FD, "22", "securityProtocolNegotiation", NULL },
+ { GD|FD, "22/1", "tlsSecurityProtocol", NULL },
+ { GD|FD, "22/1/1", "priority", NULL },
+ { GD|FD, "22/1/2", "connectionAddress", NULL },
+ { GD|FD, "22/2", "ipsecSecurityProtocol", NULL },
+ { GD|FD, "22/2/1", "priority", NULL },
+ { 0, NULL, NULL, NULL },
+};
+
+static h460_feature_t *find_ftr(const gchar *key) {
+ h460_feature_t *ftr = NULL;
+ h460_feature_t *f;
+
+ for (f=h460_feature_tab; f->id; f++) {
+ if (f->key_gd && !strcmp(key, f->key_gd)) { ftr = f; break; }
+ if (f->key_fd && !strcmp(key, f->key_fd)) { ftr = f; break; }
+ if (f->key_gm && !strcmp(key, f->key_gm)) { ftr = f; break; }
+ if (f->key_gi && !strcmp(key, f->key_gi)) { ftr = f; break; }
+ }
+ return ftr;
+}
+
+/*--- dissect_h460_name -------------------------------------------*/
+static int
+dissect_h460_name(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+ int offset = 0;
+ asn1_ctx_t *actx;
+ h460_feature_t *ftr;
+
+ actx = get_asn1_ctx(pinfo->private_data);
+ DISSECTOR_ASSERT(actx);
+ if (tree) {
+ /* DEBUG */ /*proto_tree_add_text(tree, tvb, 0, 0, "*** DEBUG dissect_h460_name: %s", pinfo->match_string);*/
+ ftr = find_ftr(pinfo->match_string);
+ /* DEBUG */ /*proto_tree_add_text(tree, tvb, 0, 0, "*** DEBUG dissect_h460_name: ftr %s", (ftr)?ftr->name:"-none-");*/
+ if (ftr) {
+ proto_item_append_text(actx->created_item, " - %s", ftr->name);
+ proto_item_append_text(proto_item_get_parent(proto_tree_get_parent(tree)), ": %s", ftr->name);
+ } else {
+ proto_item_append_text(actx->created_item, " - unknown(%s)", pinfo->match_string);
+ }
+ }
+
+ return offset;
+}
+
+/*--- proto_register_h460 ----------------------------------------------*/
+void proto_register_h460(void) {
+ h460_feature_t *ftr;
+
+ /* List of fields */
+ static hf_register_info hf[] = {
+#include "packet-h460-hfarr.c"
+ };
+
+ /* List of subtrees */
+ static gint *ett[] = {
+#include "packet-h460-ettarr.c"
+ };
+
+ /* Register protocol */
+ proto_h460 = proto_register_protocol(PNAME, PSNAME, PFNAME);
+
+ /* Register fields and subtrees */
+ proto_register_field_array(proto_h460, hf, array_length(hf));
+ proto_register_subtree_array(ett, array_length(ett));
+
+ for (ftr=h460_feature_tab; ftr->id; ftr++) {
+ if (ftr->opt & GD) ftr->key_gd = ep_strdup_printf("GenericData/%s", ftr->id);
+ if (ftr->opt & FD) ftr->key_fd = ep_strdup_printf("FeatureDescriptor/%s", ftr->id);
+ if (ftr->opt & GM) ftr->key_gm = ep_strdup_printf("GenericMessage/%s", ftr->id);
+ if (ftr->opt & GI) ftr->key_gi = ep_strdup_printf("GenericInformation/%s", ftr->id);
+ if (ftr->content_pdu) ftr->content_hnd = new_create_dissector_handle(ftr->content_pdu, proto_h460);
+ }
+}
+
+/*--- proto_reg_handoff_h460 -------------------------------------------*/
+void proto_reg_handoff_h460(void)
+{
+ h460_feature_t *ftr;
+ dissector_handle_t h460_name_handle;
+
+ q931_ie_handle = find_dissector("q931.ie");
+ h225_ras_handle = find_dissector("h225.ras");
+
+ h460_name_handle = new_create_dissector_handle(dissect_h460_name, proto_h460);
+ for (ftr=h460_feature_tab; ftr->id; ftr++) {
+ if (ftr->key_gd) dissector_add_string("h225.gef.name", ftr->key_gd, h460_name_handle);
+ if (ftr->key_fd) dissector_add_string("h225.gef.name", ftr->key_fd, h460_name_handle);
+/* if (ftr->key_gm) dissector_add_string("h245.gef.name", ftr->key_gm, h460_name_handle);
+ if (ftr->key_gi) dissector_add_string("h245.gef.name", ftr->key_gi, h460_name_handle);*/
+ if (ftr->content_hnd) {
+ if (ftr->key_gd) dissector_add_string("h225.gef.content", ftr->key_gd, ftr->content_hnd);
+ if (ftr->key_fd) dissector_add_string("h225.gef.content", ftr->key_fd, ftr->content_hnd);
+ if (ftr->key_gm) dissector_add_string("h245.gef.content", ftr->key_gm, ftr->content_hnd);
+ if (ftr->key_gi) dissector_add_string("h245.gef.content", ftr->key_gi, ftr->content_hnd);
+ }
+ }
+
+}
+
diff --git a/configure.in b/configure.in
index f16cb705cc..d3946bd899 100644
--- a/configure.in
+++ b/configure.in
@@ -1494,6 +1494,7 @@ AC_OUTPUT(
asn1/h323/Makefile
asn1/h450/Makefile
asn1/h450-ros/Makefile
+ asn1/h460/Makefile
asn1/inap/Makefile
asn1/ldap/Makefile
asn1/logotype-cert-extn/Makefile
diff --git a/epan/dissectors/Makefile.common b/epan/dissectors/Makefile.common
index 75badcac45..997fe0c6b2 100644
--- a/epan/dissectors/Makefile.common
+++ b/epan/dissectors/Makefile.common
@@ -105,6 +105,7 @@ ASN_DISSECTOR_SRC = \
packet-h323.c \
packet-h450.c \
packet-h450-ros.c \
+ packet-h460.c \
packet-inap.c \
packet-ldap.c \
packet-logotypecertextn.c \
diff --git a/epan/dissectors/packet-h225.c b/epan/dissectors/packet-h225.c
index 5c91a867ce..9693f96f6a 100644
--- a/epan/dissectors/packet-h225.c
+++ b/epan/dissectors/packet-h225.c
@@ -110,8 +110,6 @@ static next_tvb_list_t tp_list;
static int h225_tap = -1;
static int proto_h225 = -1;
-static int hf_h225_H323_UserInformation = -1;
-static int hf_h225_RasMessage = -1;
static int hf_h221Manufacturer = -1;
static int hf_h225_ras_req_frame = -1;
static int hf_h225_ras_rsp_frame = -1;
@@ -121,6 +119,9 @@ static int hf_h225_ras_deltatime = -1;
/*--- Included file: packet-h225-hf.c ---*/
#line 1 "packet-h225-hf.c"
+static int hf_h225_H323_UserInformation_PDU = -1; /* H323_UserInformation */
+static int hf_h225_h225_ExtendedAliasAddress_PDU = -1; /* ExtendedAliasAddress */
+static int hf_h225_RasMessage_PDU = -1; /* RasMessage */
static int hf_h225_h323_uu_pdu = -1; /* H323_UU_PDU */
static int hf_h225_user_data = -1; /* T_user_data */
static int hf_h225_protocol_discriminator = -1; /* INTEGER_0_255 */
@@ -885,7 +886,7 @@ static int hf_h225_stopped = -1; /* NULL */
static int hf_h225_notAvailable = -1; /* NULL */
/*--- End of included file: packet-h225-hf.c ---*/
-#line 114 "packet-h225-template.c"
+#line 112 "packet-h225-template.c"
/* Initialize the subtree pointers */
static gint ett_h225 = -1;
@@ -1132,7 +1133,7 @@ static gint ett_h225_ServiceControlResponse = -1;
static gint ett_h225_T_result = -1;
/*--- End of included file: packet-h225-ett.c ---*/
-#line 118 "packet-h225-template.c"
+#line 116 "packet-h225-template.c"
/* Preferences */
static guint h225_tls_port = TLS_PORT_CS;
@@ -1183,7 +1184,7 @@ dissect_h225_ProtocolIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *a
static int
dissect_h225_T_h245Ip(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 311 "h225.cnf"
+#line 319 "h225.cnf"
tvbuff_t *value_tvb;
ipv4_address = 0;
@@ -1423,7 +1424,7 @@ static const per_sequence_t H221NonStandard_sequence[] = {
static int
dissect_h225_H221NonStandard(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 600 "h225.cnf"
+#line 608 "h225.cnf"
t35CountryCode = 0;
t35Extension = 0;
manufacturerCode = 0;
@@ -1431,7 +1432,7 @@ dissect_h225_H221NonStandard(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_h225_H221NonStandard, H221NonStandard_sequence);
-#line 604 "h225.cnf"
+#line 612 "h225.cnf"
h221NonStandard = ((t35CountryCode * 256) + t35Extension) * 65536 + manufacturerCode;
proto_tree_add_uint(tree, hf_h221Manufacturer, tvb, (offset>>3)-4, 4, h221NonStandard);
@@ -1453,7 +1454,7 @@ static const per_choice_t NonStandardIdentifier_choice[] = {
static int
dissect_h225_NonStandardIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 581 "h225.cnf"
+#line 589 "h225.cnf"
guint32 value;
nsiOID = "";
@@ -1482,7 +1483,7 @@ dissect_h225_NonStandardIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t
static int
dissect_h225_T_nsp_data(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 615 "h225.cnf"
+#line 623 "h225.cnf"
tvbuff_t *next_tvb = NULL;
offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
@@ -1505,7 +1506,7 @@ static const per_sequence_t NonStandardParameter_sequence[] = {
int
dissect_h225_NonStandardParameter(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 613 "h225.cnf"
+#line 621 "h225.cnf"
nsp_handle = NULL;
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
@@ -1539,7 +1540,7 @@ static const per_choice_t H245TransportAddress_choice[] = {
static int
dissect_h225_H245TransportAddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 421 "h225.cnf"
+#line 429 "h225.cnf"
ipv4_address=0;
ipv4_port=0;
@@ -1548,7 +1549,7 @@ dissect_h225_H245TransportAddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t
ett_h225_H245TransportAddress, H245TransportAddress_choice,
NULL);
-#line 427 "h225.cnf"
+#line 435 "h225.cnf"
/* we need this info for TAPing */
h225_pi->is_h245 = TRUE;
h225_pi->h245_address = ipv4_address;
@@ -1577,7 +1578,7 @@ dissect_h225_H245TransportAddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t
static int
dissect_h225_DialedDigits(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 293 "h225.cnf"
+#line 301 "h225.cnf"
tvbuff_t *value_tvb = NULL;
guint len = 0;
@@ -2647,13 +2648,13 @@ static const per_sequence_t TunnelledProtocol_sequence[] = {
int
dissect_h225_TunnelledProtocol(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 558 "h225.cnf"
+#line 566 "h225.cnf"
tpOID = "";
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_h225_TunnelledProtocol, TunnelledProtocol_sequence);
-#line 560 "h225.cnf"
+#line 568 "h225.cnf"
tp_handle = dissector_get_string_handle(tp_dissector_table, tpOID);
return offset;
@@ -2831,7 +2832,7 @@ dissect_h225_CallType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, p
static int
dissect_h225_T_guid(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 533 "h225.cnf"
+#line 541 "h225.cnf"
tvbuff_t *guid_tvb;
actx->value_ptr = &guid_tvb;
@@ -3044,7 +3045,7 @@ dissect_h225_SEQUENCE_OF_CryptoH323Token(tvbuff_t *tvb _U_, int offset _U_, asn1
static int
dissect_h225_FastStart_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 260 "h225.cnf"
+#line 268 "h225.cnf"
tvbuff_t *value_tvb = NULL;
char codec_str[50];
@@ -3632,7 +3633,7 @@ dissect_h225_CircuitIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *ac
static int
dissect_h225_T_standard(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 672 "h225.cnf"
+#line 680 "h225.cnf"
gint32 value_int = -1;
gef_ctx_t *gefx;
@@ -3650,7 +3651,7 @@ dissect_h225_T_standard(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_,
static int
dissect_h225_T_oid(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 681 "h225.cnf"
+#line 689 "h225.cnf"
const gchar *oid_str = NULL;
gef_ctx_t *gefx;
@@ -3680,14 +3681,14 @@ static const per_choice_t GenericIdentifier_choice[] = {
int
dissect_h225_GenericIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 658 "h225.cnf"
+#line 666 "h225.cnf"
gef_ctx_t *gefx;
offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
ett_h225_GenericIdentifier, GenericIdentifier_choice,
NULL);
-#line 660 "h225.cnf"
+#line 668 "h225.cnf"
gef_ctx_update_key(gef_ctx_get(actx->private_data));
/* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG GenericIdentifier: %s", gef_ctx_get(actx->private_data)->key);*/
gefx = gef_ctx_get(actx->private_data);
@@ -3820,7 +3821,7 @@ dissect_h225_EnumeratedParameter(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *
static int
dissect_h225_T_parameters_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 640 "h225.cnf"
+#line 648 "h225.cnf"
gef_ctx_t *parent_gefx;
parent_gefx = gef_ctx_get(actx->private_data);
@@ -3828,7 +3829,7 @@ dissect_h225_T_parameters_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *ac
offset = dissect_h225_EnumeratedParameter(tvb, offset, actx, tree, hf_index);
-#line 645 "h225.cnf"
+#line 653 "h225.cnf"
actx->private_data = parent_gefx;
return offset;
@@ -3857,7 +3858,7 @@ static const per_sequence_t GenericData_sequence[] = {
int
dissect_h225_GenericData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 626 "h225.cnf"
+#line 634 "h225.cnf"
void *priv_data = actx->private_data;
gef_ctx_t *gefx;
@@ -3871,7 +3872,7 @@ dissect_h225_GenericData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_h225_GenericData, GenericData_sequence);
-#line 636 "h225.cnf"
+#line 644 "h225.cnf"
actx->private_data = priv_data;
return offset;
@@ -3910,13 +3911,13 @@ dissect_h225_CircuitInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_
static int
dissect_h225_FeatureDescriptor(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 650 "h225.cnf"
+#line 658 "h225.cnf"
void *priv_data = actx->private_data;
actx->private_data = gef_ctx_alloc(NULL, "FeatureDescriptor");
offset = dissect_h225_GenericData(tvb, offset, actx, tree, hf_index);
-#line 653 "h225.cnf"
+#line 661 "h225.cnf"
actx->private_data = priv_data;
return offset;
@@ -3939,7 +3940,7 @@ dissect_h225_SEQUENCE_OF_FeatureDescriptor(tvbuff_t *tvb _U_, int offset _U_, as
static int
dissect_h225_ParallelH245Control_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 322 "h225.cnf"
+#line 330 "h225.cnf"
tvbuff_t *h245_tvb = NULL;
offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
@@ -4050,13 +4051,13 @@ static const per_sequence_t Setup_UUIE_sequence[] = {
static int
dissect_h225_Setup_UUIE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 375 "h225.cnf"
+#line 383 "h225.cnf"
contains_faststart = FALSE;
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_h225_Setup_UUIE, Setup_UUIE_sequence);
-#line 379 "h225.cnf"
+#line 387 "h225.cnf"
/* Add to packet info */
h225_pi->cs_type = H225_SETUP;
if (contains_faststart == TRUE )
@@ -4106,7 +4107,7 @@ dissect_h225_CallProceeding_UUIE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_h225_CallProceeding_UUIE, CallProceeding_UUIE_sequence);
-#line 388 "h225.cnf"
+#line 396 "h225.cnf"
/* Add to packet info */
h225_pi->cs_type = H225_CALL_PROCEDING;
if (contains_faststart == TRUE )
@@ -4146,7 +4147,7 @@ dissect_h225_Connect_UUIE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_h225_Connect_UUIE, Connect_UUIE_sequence);
-#line 412 "h225.cnf"
+#line 420 "h225.cnf"
/* Add to packet info */
h225_pi->cs_type = H225_CONNECT;
if (contains_faststart == TRUE )
@@ -4184,7 +4185,7 @@ dissect_h225_Alerting_UUIE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_h225_Alerting_UUIE, Alerting_UUIE_sequence);
-#line 397 "h225.cnf"
+#line 405 "h225.cnf"
/* Add to packet info */
h225_pi->cs_type = H225_ALERTING;
if (contains_faststart == TRUE )
@@ -4212,7 +4213,7 @@ dissect_h225_Information_UUIE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *act
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_h225_Information_UUIE, Information_UUIE_sequence);
-#line 346 "h225.cnf"
+#line 354 "h225.cnf"
/* Add to packet info */
h225_pi->cs_type = H225_INFORMATION;
g_snprintf(h225_pi->frame_label, 50, "%s", val_to_str(h225_pi->cs_type, T_h323_message_body_vals, "<unknown>"));
@@ -4331,7 +4332,7 @@ static const per_choice_t ReleaseCompleteReason_choice[] = {
int
dissect_h225_ReleaseCompleteReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 526 "h225.cnf"
+#line 534 "h225.cnf"
guint32 value;
offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
@@ -4365,7 +4366,7 @@ dissect_h225_ReleaseComplete_UUIE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_h225_ReleaseComplete_UUIE, ReleaseComplete_UUIE_sequence);
-#line 406 "h225.cnf"
+#line 414 "h225.cnf"
/* Add to packet info */
h225_pi->cs_type = H225_RELEASE_COMPLET;
g_snprintf(h225_pi->frame_label, 50, "%s", val_to_str(h225_pi->cs_type, T_h323_message_body_vals, "<unknown>"));
@@ -4406,7 +4407,7 @@ static const per_choice_t FacilityReason_choice[] = {
static int
dissect_h225_FacilityReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 450 "h225.cnf"
+#line 458 "h225.cnf"
guint32 value;
offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
@@ -4479,7 +4480,7 @@ dissect_h225_Facility_UUIE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_h225_Facility_UUIE, Facility_UUIE_sequence);
-#line 367 "h225.cnf"
+#line 375 "h225.cnf"
/* Add to packet info */
h225_pi->cs_type = H225_FACILITY;
g_snprintf(h225_pi->frame_label, 50, "%s", val_to_str(h225_pi->cs_type, T_h323_message_body_vals, "<unknown>"));
@@ -4508,7 +4509,7 @@ dissect_h225_Progress_UUIE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_h225_Progress_UUIE, Progress_UUIE_sequence);
-#line 352 "h225.cnf"
+#line 360 "h225.cnf"
/* Add to packet info */
h225_pi->cs_type = H225_PROGRESS;
if (contains_faststart == TRUE )
@@ -4525,7 +4526,7 @@ static int
dissect_h225_T_empty_flg(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);
-#line 336 "h225.cnf"
+#line 344 "h225.cnf"
h225_pi->cs_type = H225_EMPTY;
return offset;
@@ -4545,7 +4546,7 @@ dissect_h225_Status_UUIE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_h225_Status_UUIE, Status_UUIE_sequence);
-#line 340 "h225.cnf"
+#line 348 "h225.cnf"
/* Add to packet info */
h225_pi->cs_type = H225_STATUS;
g_snprintf(h225_pi->frame_label, 50, "%s", val_to_str(h225_pi->cs_type, T_h323_message_body_vals, "<unknown>"));
@@ -4584,7 +4585,7 @@ dissect_h225_SetupAcknowledge_UUIE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_h225_SetupAcknowledge_UUIE, SetupAcknowledge_UUIE_sequence);
-#line 361 "h225.cnf"
+#line 369 "h225.cnf"
/* Add to packet info */
h225_pi->cs_type = H225_SETUP_ACK;
g_snprintf(h225_pi->frame_label, 50, "%s", val_to_str(h225_pi->cs_type, T_h323_message_body_vals, "<unknown>"));
@@ -4649,7 +4650,7 @@ static const per_choice_t T_h323_message_body_choice[] = {
static int
dissect_h225_T_h323_message_body(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 233 "h225.cnf"
+#line 241 "h225.cnf"
guint32 message_body_val;
contains_faststart = FALSE;
@@ -4686,7 +4687,7 @@ dissect_h225_T_h323_message_body(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *
static int
dissect_h225_T_h4501SupplementaryService_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 546 "h225.cnf"
+#line 554 "h225.cnf"
tvbuff_t *h4501_tvb = NULL;
offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
@@ -4726,7 +4727,7 @@ dissect_h225_T_h245Tunneling(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx
static int
dissect_h225_H245Control_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 329 "h225.cnf"
+#line 337 "h225.cnf"
tvbuff_t *h245_tvb = NULL;
offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
@@ -4783,7 +4784,7 @@ dissect_h225_CallLinkage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_
static int
dissect_h225_T_messageContent_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 568 "h225.cnf"
+#line 576 "h225.cnf"
tvbuff_t *next_tvb = NULL;
offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
@@ -4819,7 +4820,7 @@ static const per_sequence_t T_tunnelledSignallingMessage_sequence[] = {
static int
dissect_h225_T_tunnelledSignallingMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 566 "h225.cnf"
+#line 574 "h225.cnf"
tp_handle = NULL;
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
@@ -5666,7 +5667,7 @@ static const per_choice_t GatekeeperRejectReason_choice[] = {
static int
dissect_h225_GatekeeperRejectReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 457 "h225.cnf"
+#line 465 "h225.cnf"
guint32 value;
offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
@@ -5968,7 +5969,7 @@ static const per_choice_t RegistrationRejectReason_choice[] = {
static int
dissect_h225_RegistrationRejectReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 512 "h225.cnf"
+#line 520 "h225.cnf"
guint32 value;
offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
@@ -6031,7 +6032,7 @@ static const per_choice_t UnregRequestReason_choice[] = {
static int
dissect_h225_UnregRequestReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 464 "h225.cnf"
+#line 472 "h225.cnf"
guint32 value;
offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
@@ -6116,7 +6117,7 @@ static const per_choice_t UnregRejectReason_choice[] = {
static int
dissect_h225_UnregRejectReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 471 "h225.cnf"
+#line 479 "h225.cnf"
guint32 value;
offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
@@ -6176,7 +6177,7 @@ dissect_h225_CallModel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_,
static int
dissect_h225_DestinationInfo_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 288 "h225.cnf"
+#line 296 "h225.cnf"
h225_pi->is_destinationInfo = TRUE;
@@ -6384,7 +6385,7 @@ static const per_choice_t AdmissionRejectReason_choice[] = {
static int
dissect_h225_AdmissionRejectReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 498 "h225.cnf"
+#line 506 "h225.cnf"
guint32 value;
offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
@@ -6516,7 +6517,7 @@ static const per_choice_t BandRejectReason_choice[] = {
static int
dissect_h225_BandRejectReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 478 "h225.cnf"
+#line 486 "h225.cnf"
guint32 value;
offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
@@ -6568,7 +6569,7 @@ static const per_choice_t DisengageReason_choice[] = {
static int
dissect_h225_DisengageReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 485 "h225.cnf"
+#line 493 "h225.cnf"
guint32 value;
offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
@@ -6655,7 +6656,7 @@ static const per_choice_t DisengageRejectReason_choice[] = {
static int
dissect_h225_DisengageRejectReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 491 "h225.cnf"
+#line 499 "h225.cnf"
guint32 value;
offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
@@ -6801,7 +6802,7 @@ static const per_choice_t LocationRejectReason_choice[] = {
static int
dissect_h225_LocationRejectReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 505 "h225.cnf"
+#line 513 "h225.cnf"
guint32 value;
offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
@@ -7172,7 +7173,7 @@ static const per_choice_t InfoRequestNakReason_choice[] = {
static int
dissect_h225_InfoRequestNakReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 519 "h225.cnf"
+#line 527 "h225.cnf"
guint32 value;
offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
@@ -7307,7 +7308,7 @@ dissect_h225_SEQUENCE_OF_AdmissionConfirm(tvbuff_t *tvb _U_, int offset _U_, asn
}
-const value_string RasMessage_vals[] = {
+const value_string h225_RasMessage_vals[] = {
{ 0, "gatekeeperRequest" },
{ 1, "gatekeeperConfirm" },
{ 2, "gatekeeperReject" },
@@ -7383,7 +7384,7 @@ static const per_choice_t RasMessage_choice[] = {
int
dissect_h225_RasMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 276 "h225.cnf"
+#line 284 "h225.cnf"
guint32 rasmessage_value;
offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
@@ -7392,7 +7393,7 @@ dissect_h225_RasMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_,
if (check_col(actx->pinfo->cinfo, COL_INFO)){
col_add_fstr(actx->pinfo->cinfo, COL_INFO, "RAS: %s ",
- val_to_str(rasmessage_value, RasMessage_vals, "<unknown>"));
+ val_to_str(rasmessage_value, h225_RasMessage_vals, "<unknown>"));
}
h225_pi->msg_tag = rasmessage_value;
@@ -7401,9 +7402,36 @@ dissect_h225_RasMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_,
return offset;
}
+/*--- PDUs ---*/
+
+static int dissect_H323_UserInformation_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_h225_H323_UserInformation(tvb, offset, &asn1_ctx, tree, hf_h225_H323_UserInformation_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+int dissect_h225_ExtendedAliasAddress_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_h225_ExtendedAliasAddress(tvb, offset, &asn1_ctx, tree, hf_h225_h225_ExtendedAliasAddress_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+static int dissect_RasMessage_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_h225_RasMessage(tvb, offset, &asn1_ctx, tree, hf_h225_RasMessage_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+
/*--- End of included file: packet-h225-fn.c ---*/
-#line 144 "packet-h225-template.c"
+#line 142 "packet-h225-template.c"
/* Forward declaration we need below */
@@ -7415,7 +7443,6 @@ dissect_h225_H323UserInformation(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
proto_item *it;
proto_tree *tr;
int offset = 0;
- asn1_ctx_t asn1_ctx;
pi_current++;
if(pi_current==5){
@@ -7440,8 +7467,7 @@ dissect_h225_H323UserInformation(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
it=proto_tree_add_protocol_format(tree, proto_h225, tvb, 0, tvb_length(tvb), PSNAME" CS");
tr=proto_item_add_subtree(it, ett_h225);
- asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
- offset = dissect_h225_H323_UserInformation(tvb, offset, &asn1_ctx, tr, hf_h225_H323_UserInformation);
+ offset = dissect_H323_UserInformation_PDU(tvb, pinfo, tr);
if (h245_list.count && check_col(pinfo->cinfo, COL_PROTOCOL)){
col_append_str(pinfo->cinfo, COL_PROTOCOL, "/");
@@ -7460,7 +7486,6 @@ dissect_h225_h225_RasMessage(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree
proto_item *it;
proto_tree *tr;
guint32 offset=0;
- asn1_ctx_t asn1_ctx;
pi_current++;
if(pi_current==5){
@@ -7479,8 +7504,7 @@ dissect_h225_h225_RasMessage(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree
it=proto_tree_add_protocol_format(tree, proto_h225, tvb, offset, tvb_length(tvb), PSNAME" RAS");
tr=proto_item_add_subtree(it, ett_h225);
- asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
- offset = dissect_h225_RasMessage(tvb, 0, &asn1_ctx, tr, hf_h225_RasMessage );
+ offset = dissect_RasMessage_PDU(tvb, pinfo, tr);
ras_call_matching(tvb, pinfo, tr, h225_pi);
@@ -7494,12 +7518,6 @@ void proto_register_h225(void) {
/* List of fields */
static hf_register_info hf[] = {
- { &hf_h225_H323_UserInformation,
- { "H323_UserInformation", "h225.H323_UserInformation", FT_NONE, BASE_NONE,
- NULL, 0, "H323_UserInformation sequence", HFILL }},
- { &hf_h225_RasMessage,
- { "RasMessage", "h225.RasMessage", FT_UINT32, BASE_DEC,
- VALS(RasMessage_vals), 0, "RasMessage choice", HFILL }},
{ &hf_h221Manufacturer,
{ "H.221 Manufacturer", "h221.Manufacturer", FT_UINT32, BASE_HEX,
VALS(H221ManufacturerCode_vals), 0, "H.221 Manufacturer", HFILL }},
@@ -7519,6 +7537,18 @@ void proto_register_h225(void) {
/*--- Included file: packet-h225-hfarr.c ---*/
#line 1 "packet-h225-hfarr.c"
+ { &hf_h225_H323_UserInformation_PDU,
+ { "H323-UserInformation", "h225.H323_UserInformation",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h225.H323_UserInformation", HFILL }},
+ { &hf_h225_h225_ExtendedAliasAddress_PDU,
+ { "ExtendedAliasAddress", "h225.ExtendedAliasAddress",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h225.ExtendedAliasAddress", HFILL }},
+ { &hf_h225_RasMessage_PDU,
+ { "RasMessage", "h225.RasMessage",
+ FT_UINT32, BASE_DEC, VALS(h225_RasMessage_vals), 0,
+ "h225.RasMessage", HFILL }},
{ &hf_h225_h323_uu_pdu,
{ "h323-uu-pdu", "h225.h323_uu_pdu",
FT_NONE, BASE_NONE, NULL, 0,
@@ -10569,7 +10599,7 @@ void proto_register_h225(void) {
"h225.NULL", HFILL }},
/*--- End of included file: packet-h225-hfarr.c ---*/
-#line 257 "packet-h225-template.c"
+#line 245 "packet-h225-template.c"
};
/* List of subtrees */
@@ -10818,7 +10848,7 @@ void proto_register_h225(void) {
&ett_h225_T_result,
/*--- End of included file: packet-h225-ettarr.c ---*/
-#line 263 "packet-h225-template.c"
+#line 251 "packet-h225-template.c"
};
module_t *h225_module;
@@ -10849,6 +10879,7 @@ void proto_register_h225(void) {
new_register_dissector("h225", dissect_h225_H323UserInformation, proto_h225);
new_register_dissector("h323ui",dissect_h225_H323UserInformation, proto_h225);
+ new_register_dissector("h225.ras", dissect_h225_h225_RasMessage, proto_h225);
nsp_object_dissector_table = register_dissector_table("h225.nsp.object", "H.225 NonStandardParameter (object)", FT_STRING, BASE_NONE);
nsp_h221_dissector_table = register_dissector_table("h225.nsp.h221", "H.225 NonStandardParameter (h221)", FT_UINT32, BASE_HEX);
@@ -10858,9 +10889,13 @@ void proto_register_h225(void) {
register_init_routine(&h225_init_routine);
h225_tap = register_tap("h225");
- add_oid_str_name("0.0.8.2250.0.2","itu-t(0) recommendation(0) h(8) h225-0(2250) version(0) 2");
- add_oid_str_name("0.0.8.2250.0.4","itu-t(0) recommendation(0) h(8) h225-0(2250) version(0) 4");
+ add_oid_str_name("0.0.8.2250.0.1", "itu-t(0) recommendation(0) h(8) h225-0(2250) version(0) 1 - Version 1");
+ add_oid_str_name("0.0.8.2250.0.2", "itu-t(0) recommendation(0) h(8) h225-0(2250) version(0) 2 - Version 2");
+ add_oid_str_name("0.0.8.2250.0.3", "itu-t(0) recommendation(0) h(8) h225-0(2250) version(0) 3 - Version 3");
+ add_oid_str_name("0.0.8.2250.0.4", "itu-t(0) recommendation(0) h(8) h225-0(2250) version(0) 4 - Version 4");
+ add_oid_str_name("0.0.8.2250.0.5", "itu-t(0) recommendation(0) h(8) h225-0(2250) version(0) 5 - Version 5");
+ add_oid_str_name("0.0.8.2250.0.6", "itu-t(0) recommendation(0) h(8) h225-0(2250) version(0) 6 - Version 6");
}
diff --git a/epan/dissectors/packet-h225.h b/epan/dissectors/packet-h225.h
index d549fcb175..8521fab2aa 100644
--- a/epan/dissectors/packet-h225.h
+++ b/epan/dissectors/packet-h225.h
@@ -104,7 +104,7 @@ extern const value_string h225_PrivateTypeOfNumber_vals[];
extern const value_string h225_IntegrityMechanism_vals[];
extern const value_string h225_CryptoH323Token_vals[];
extern const value_string h225_GenericIdentifier_vals[];
-WS_VAR_IMPORT const value_string RasMessage_vals[];
+WS_VAR_IMPORT const value_string h225_RasMessage_vals[];
WS_VAR_IMPORT const value_string GatekeeperRejectReason_vals[];
WS_VAR_IMPORT const value_string RegistrationRejectReason_vals[];
WS_VAR_IMPORT const value_string UnregRequestReason_vals[];
@@ -148,6 +148,7 @@ int dissect_h225_FeatureSet(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx
int dissect_h225_TransportChannelInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
int dissect_h225_RasMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
int dissect_h225_TransportQOS(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
+int dissect_h225_ExtendedAliasAddress_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_);
/*--- End of included file: packet-h225-exp.h ---*/
#line 83 "packet-h225-template.h"
diff --git a/epan/dissectors/packet-h460.c b/epan/dissectors/packet-h460.c
new file mode 100644
index 0000000000..a14c52823d
--- /dev/null
+++ b/epan/dissectors/packet-h460.c
@@ -0,0 +1,3091 @@
+/* Do not modify this file. */
+/* It is created automatically by the ASN.1 to Wireshark dissector compiler */
+/* packet-h460.c */
+/* ../../tools/asn2wrs.py -c h460.cnf -s packet-h460-template NUMBER-PORTABILITY.asn CIRCUIT-STATUS-MAP.asn CALL-PRIORITY.asn QOS-MONITORING-REPORT.asn QOS-MONITORING-EXTENDED-VOIP-REPORT.asn CALL-PARTY-CATEGORY.asn MLPP.asn SIGNALLING-CHANNEL-SUSPEND-REDIRECT.asn SIGNALLING-TRAVERSAL.asn MEDIA-TRAVERSAL.asn MESSAGE-BROADCAST.asn */
+
+/* Input file: packet-h460-template.c */
+
+#line 1 "packet-h460-template.c"
+/* packet-h460.c
+ * Routines for H.460.x packet dissection
+ * 2007 Tomas Kukosa
+ *
+ * $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/oids.h>
+#include <epan/asn1.h>
+
+#include <stdio.h>
+#include <string.h>
+
+#include "packet-per.h"
+#include "packet-h225.h"
+#include "packet-h235.h"
+#include "packet-h245.h"
+
+#define PNAME "H.460 Supplementary Services"
+#define PSNAME "H.460"
+#define PFNAME "h460"
+
+/* Initialize the protocol and registered fields */
+int proto_h460 = -1;
+
+/*--- Included file: packet-h460-hf.c ---*/
+#line 1 "packet-h460-hf.c"
+
+/* --- Module NUMBER-PORTABILITY --- --- --- */
+
+static int hf_h460_2_h460_2_NumberPortabilityInfo_PDU = -1; /* NumberPortabilityInfo */
+static int hf_h460_2_numberPortabilityRejectReason = -1; /* NumberPortabilityRejectReason */
+static int hf_h460_2_nUMBERPORTABILITYDATA = -1; /* T_nUMBERPORTABILITYDATA */
+static int hf_h460_2_addressTranslated = -1; /* NULL */
+static int hf_h460_2_portedAddress = -1; /* PortabilityAddress */
+static int hf_h460_2_routingAddress = -1; /* PortabilityAddress */
+static int hf_h460_2_regionalParams = -1; /* RegionalParameters */
+static int hf_h460_2_unspecified = -1; /* NULL */
+static int hf_h460_2_qorPortedNumber = -1; /* NULL */
+static int hf_h460_2_aliasAddress = -1; /* AliasAddress */
+static int hf_h460_2_typeOfAddress = -1; /* NumberPortabilityTypeOfNumber */
+static int hf_h460_2_publicTypeOfNumber = -1; /* PublicTypeOfNumber */
+static int hf_h460_2_privateTypeOfNumber = -1; /* PrivateTypeOfNumber */
+static int hf_h460_2_portabilityTypeOfNumber = -1; /* PortabilityTypeOfNumber */
+static int hf_h460_2_portedNumber = -1; /* NULL */
+static int hf_h460_2_routingNumber = -1; /* NULL */
+static int hf_h460_2_concatenatedNumber = -1; /* NULL */
+static int hf_h460_2_t35CountryCode = -1; /* INTEGER_0_255 */
+static int hf_h460_2_t35Extension = -1; /* INTEGER_0_255 */
+static int hf_h460_2_variantIdentifier = -1; /* INTEGER_1_255 */
+static int hf_h460_2_regionalData = -1; /* OCTET_STRING */
+
+/* --- Module CIRCUIT-STATUS-MAP --- --- --- */
+
+static int hf_h460_3_h460_3_CircuitStatus_PDU = -1; /* CircuitStatus */
+static int hf_h460_3_circuitStatusMap = -1; /* SEQUENCE_OF_CircuitStatusMap */
+static int hf_h460_3_circuitStatusMap_item = -1; /* CircuitStatusMap */
+static int hf_h460_3_statusType = -1; /* CircuitStatusType */
+static int hf_h460_3_baseCircuitID = -1; /* CircuitIdentifier */
+static int hf_h460_3_range = -1; /* INTEGER_0_4095 */
+static int hf_h460_3_status = -1; /* OCTET_STRING */
+static int hf_h460_3_serviceStatus = -1; /* NULL */
+static int hf_h460_3_busyStatus = -1; /* NULL */
+
+/* --- Module CALL-PRIORITY --- --- --- */
+
+static int hf_h460_4_h460_4_CallPriorityInfo_PDU = -1; /* CallPriorityInfo */
+static int hf_h460_4_h460_4_CountryInternationalNetworkCallOriginationIdentification_PDU = -1; /* CountryInternationalNetworkCallOriginationIdentification */
+static int hf_h460_4_priorityValue = -1; /* T_priorityValue */
+static int hf_h460_4_emergencyAuthorized = -1; /* NULL */
+static int hf_h460_4_emergencyPublic = -1; /* NULL */
+static int hf_h460_4_high = -1; /* NULL */
+static int hf_h460_4_normal = -1; /* NULL */
+static int hf_h460_4_priorityExtension = -1; /* INTEGER_0_255 */
+static int hf_h460_4_tokens = -1; /* SEQUENCE_OF_ClearToken */
+static int hf_h460_4_tokens_item = -1; /* ClearToken */
+static int hf_h460_4_cryptoTokens = -1; /* SEQUENCE_OF_CryptoToken */
+static int hf_h460_4_cryptoTokens_item = -1; /* CryptoToken */
+static int hf_h460_4_rejectReason = -1; /* T_rejectReason */
+static int hf_h460_4_priorityUnavailable = -1; /* NULL */
+static int hf_h460_4_priorityUnauthorized = -1; /* NULL */
+static int hf_h460_4_priorityValueUnknown = -1; /* NULL */
+static int hf_h460_4_numberingPlan = -1; /* T_numberingPlan */
+static int hf_h460_4_x121 = -1; /* T_x121 */
+static int hf_h460_4_x121CountryCode = -1; /* X121CountryCode */
+static int hf_h460_4_e164 = -1; /* T_e164 */
+static int hf_h460_4_e164CountryCode = -1; /* E164CountryCode */
+static int hf_h460_4_identificationCode = -1; /* T_identificationCode */
+
+/* --- Modules QOS-MONITORING-REPORT QOS-MONITORING-EXTENDED-VOIP-REPORT --- --- --- */
+
+static int hf_h460_9_h460_9_QosMonitoringReportData_PDU = -1; /* QosMonitoringReportData */
+static int hf_h460_9_h460_9_ExtendedRTPMetrics_PDU = -1; /* ExtendedRTPMetrics */
+static int hf_h460_9_extensionId = -1; /* GenericIdentifier */
+static int hf_h460_9_extensionContent = -1; /* OCTET_STRING */
+static int hf_h460_9_rtpAddress = -1; /* TransportChannelInfo */
+static int hf_h460_9_rtcpAddress = -1; /* TransportChannelInfo */
+static int hf_h460_9_sessionId = -1; /* INTEGER_1_255 */
+static int hf_h460_9_nonStandardData = -1; /* NonStandardParameter */
+static int hf_h460_9_mediaSenderMeasures = -1; /* T_mediaSenderMeasures */
+static int hf_h460_9_worstEstimatedEnd2EndDelay = -1; /* EstimatedEnd2EndDelay */
+static int hf_h460_9_meanEstimatedEnd2EndDelay = -1; /* EstimatedEnd2EndDelay */
+static int hf_h460_9_mediaReceiverMeasures = -1; /* T_mediaReceiverMeasures */
+static int hf_h460_9_cumulativeNumberOfPacketsLost = -1; /* INTEGER_0_4294967295 */
+static int hf_h460_9_packetLostRate = -1; /* INTEGER_0_65535 */
+static int hf_h460_9_worstJitter = -1; /* CalculatedJitter */
+static int hf_h460_9_estimatedThroughput = -1; /* BandWidth */
+static int hf_h460_9_fractionLostRate = -1; /* INTEGER_0_65535 */
+static int hf_h460_9_meanJitter = -1; /* CalculatedJitter */
+static int hf_h460_9_extensions = -1; /* SEQUENCE_OF_Extension */
+static int hf_h460_9_extensions_item = -1; /* Extension */
+static int hf_h460_9_callReferenceValue = -1; /* CallReferenceValue */
+static int hf_h460_9_conferenceID = -1; /* ConferenceIdentifier */
+static int hf_h460_9_callIdentifier = -1; /* CallIdentifier */
+static int hf_h460_9_mediaChannelsQoS = -1; /* SEQUENCE_OF_RTCPMeasures */
+static int hf_h460_9_mediaChannelsQoS_item = -1; /* RTCPMeasures */
+static int hf_h460_9_periodic = -1; /* PeriodicQoSMonReport */
+static int hf_h460_9_final = -1; /* FinalQosMonReport */
+static int hf_h460_9_interGK = -1; /* InterGKQosMonReport */
+static int hf_h460_9_perCallInfo = -1; /* SEQUENCE_OF_PerCallQoSReport */
+static int hf_h460_9_perCallInfo_item = -1; /* PerCallQoSReport */
+static int hf_h460_9_mediaInfo = -1; /* SEQUENCE_OF_RTCPMeasures */
+static int hf_h460_9_mediaInfo_item = -1; /* RTCPMeasures */
+static int hf_h460_9_networkPacketLossRate = -1; /* INTEGER_0_255 */
+static int hf_h460_9_jitterBufferDiscardRate = -1; /* INTEGER_0_255 */
+static int hf_h460_9_burstMetrics = -1; /* BurstMetrics */
+static int hf_h460_9_rtcpRoundTripDelay = -1; /* INTEGER_0_65535 */
+static int hf_h460_9_endSystemDelay = -1; /* INTEGER_0_65535 */
+static int hf_h460_9_signalLevel = -1; /* INTEGER_M127_10 */
+static int hf_h460_9_noiseLevel = -1; /* INTEGER_M127_0 */
+static int hf_h460_9_residualEchoReturnLoss = -1; /* INTEGER_0_127 */
+static int hf_h460_9_rFactor = -1; /* INTEGER_0_100 */
+static int hf_h460_9_extRFactor = -1; /* INTEGER_0_100 */
+static int hf_h460_9_estimatedMOSLQ = -1; /* INTEGER_10_50 */
+static int hf_h460_9_estimatedMOSCQ = -1; /* INTEGER_10_50 */
+static int hf_h460_9_plcType = -1; /* PLCtypes */
+static int hf_h460_9_jitterBufferParms = -1; /* JitterBufferParms */
+static int hf_h460_9_gmin = -1; /* INTEGER_0_255 */
+static int hf_h460_9_burstLossDensity = -1; /* INTEGER_0_255 */
+static int hf_h460_9_gapLossDensity = -1; /* INTEGER_0_255 */
+static int hf_h460_9_burstDuration = -1; /* INTEGER_0_65535 */
+static int hf_h460_9_gapDuration = -1; /* INTEGER_0_65535 */
+static int hf_h460_9_unspecified = -1; /* NULL */
+static int hf_h460_9_disabled = -1; /* NULL */
+static int hf_h460_9_enhanced = -1; /* NULL */
+static int hf_h460_9_standard = -1; /* NULL */
+static int hf_h460_9_jitterBufferType = -1; /* JitterBufferTypes */
+static int hf_h460_9_jitterBufferAdaptRate = -1; /* INTEGER_0_15 */
+static int hf_h460_9_jitterBufferNominalSize = -1; /* INTEGER_0_65535 */
+static int hf_h460_9_jitterBufferMaxSize = -1; /* INTEGER_0_65535 */
+static int hf_h460_9_jitterBufferAbsoluteMax = -1; /* INTEGER_0_65535 */
+static int hf_h460_9_unknown = -1; /* NULL */
+static int hf_h460_9_reserved = -1; /* NULL */
+static int hf_h460_9_nonadaptive = -1; /* NULL */
+static int hf_h460_9_adaptive = -1; /* NULL */
+
+/* --- Module CALL-PARTY-CATEGORY --- --- --- */
+
+static int hf_h460_10_h460_10_CallPartyCategoryInfo_PDU = -1; /* CallPartyCategoryInfo */
+static int hf_h460_10_callPartyCategory = -1; /* CallPartyCategory */
+static int hf_h460_10_originatingLineInfo = -1; /* OriginatingLineInfo */
+
+/* --- Module MLPP --- --- --- */
+
+static int hf_h460_14_h460_14_MLPPInfo_PDU = -1; /* MLPPInfo */
+static int hf_h460_14_precedence = -1; /* MlppPrecedence */
+static int hf_h460_14_mlppReason = -1; /* MlppReason */
+static int hf_h460_14_mlppNotification = -1; /* MlppNotification */
+static int hf_h460_14_alternateParty = -1; /* AlternateParty */
+static int hf_h460_14_releaseCall = -1; /* ReleaseCall */
+static int hf_h460_14_preemptionPending = -1; /* NULL */
+static int hf_h460_14_preemptionInProgress = -1; /* NULL */
+static int hf_h460_14_preemptionEnd = -1; /* NULL */
+static int hf_h460_14_preemptionComplete = -1; /* NULL */
+static int hf_h460_14_altID = -1; /* AliasAddress */
+static int hf_h460_14_altTimer = -1; /* INTEGER_0_255 */
+static int hf_h460_14_preemptCallID = -1; /* CallIdentifier */
+static int hf_h460_14_releaseReason = -1; /* MlppReason */
+static int hf_h460_14_releaseDelay = -1; /* INTEGER_0_255 */
+
+/* --- Module SIGNALLING-CHANNEL-SUSPEND-REDIRECT --- --- --- */
+
+static int hf_h460_15_h460_15_SignallingChannelData_PDU = -1; /* SignallingChannelData */
+static int hf_h460_15_signallingChannelData = -1; /* T_signallingChannelData */
+static int hf_h460_15_channelSuspendRequest = -1; /* ChannelSuspendRequest */
+static int hf_h460_15_channelSuspendResponse = -1; /* ChannelSuspendResponse */
+static int hf_h460_15_channelSuspendConfirm = -1; /* ChannelSuspendConfirm */
+static int hf_h460_15_channelSuspendCancel = -1; /* ChannelSuspendCancel */
+static int hf_h460_15_channelResumeRequest = -1; /* ChannelResumeRequest */
+static int hf_h460_15_channelResumeResponse = -1; /* ChannelResumeResponse */
+static int hf_h460_15_channelResumeAddress = -1; /* SEQUENCE_OF_TransportAddress */
+static int hf_h460_15_channelResumeAddress_item = -1; /* TransportAddress */
+static int hf_h460_15_immediateResume = -1; /* BOOLEAN */
+static int hf_h460_15_resetH245 = -1; /* NULL */
+static int hf_h460_15_okToSuspend = -1; /* BOOLEAN */
+static int hf_h460_15_randomNumber = -1; /* INTEGER_0_4294967295 */
+
+/* --- Module SIGNALLING-TRAVERSAL --- --- --- */
+
+static int hf_h460_18_h460_18_IncomingCallIndication_PDU = -1; /* IncomingCallIndication */
+static int hf_h460_18_h460_18_LRQKeepAliveData_PDU = -1; /* LRQKeepAliveData */
+static int hf_h460_18_callSignallingAddress = -1; /* TransportAddress */
+static int hf_h460_18_callID = -1; /* CallIdentifier */
+static int hf_h460_18_lrqKeepAliveInterval = -1; /* TimeToLive */
+
+/* --- Module MEDIA-TRAVERSAL --- --- --- */
+
+static int hf_h460_19_h460_19_TraversalParameters_PDU = -1; /* TraversalParameters */
+static int hf_h460_19_multiplexedMediaChannel = -1; /* TransportAddress */
+static int hf_h460_19_multiplexedMediaControlChannel = -1; /* TransportAddress */
+static int hf_h460_19_multiplexID = -1; /* INTEGER_0_4294967295 */
+static int hf_h460_19_keepAliveChannel = -1; /* TransportAddress */
+static int hf_h460_19_keepAlivePayloadType = -1; /* INTEGER_0_127 */
+static int hf_h460_19_keepAliveInterval = -1; /* TimeToLive */
+
+/* --- Module MESSAGE-BROADCAST --- --- --- */
+
+static int hf_h460_21_h460_21_CapabilityAdvertisement_PDU = -1; /* CapabilityAdvertisement */
+static int hf_h460_21_receiveCapabilities = -1; /* ReceiveCapabilities */
+static int hf_h460_21_transmitCapabilities = -1; /* SEQUENCE_SIZE_1_256_OF_TransmitCapabilities */
+static int hf_h460_21_transmitCapabilities_item = -1; /* TransmitCapabilities */
+static int hf_h460_21_capabilities = -1; /* SEQUENCE_SIZE_1_256_OF_Capability */
+static int hf_h460_21_capabilities_item = -1; /* Capability */
+static int hf_h460_21_maxGroups = -1; /* INTEGER_1_65535 */
+static int hf_h460_21_groupIdentifer = -1; /* GloballyUniqueID */
+static int hf_h460_21_capability = -1; /* Capability */
+static int hf_h460_21_sourceAddress = -1; /* UnicastAddress */
+static int hf_h460_21_MessageBroadcastGroups_item = -1; /* GroupAttributes */
+static int hf_h460_21_priority = -1; /* INTEGER_0_255 */
+static int hf_h460_21_groupAddress = -1; /* MulticastAddress */
+static int hf_h460_21_alertUser = -1; /* BOOLEAN */
+
+/*--- End of included file: packet-h460-hf.c ---*/
+#line 51 "packet-h460-template.c"
+
+/* Initialize the subtree pointers */
+
+/*--- Included file: packet-h460-ett.c ---*/
+#line 1 "packet-h460-ett.c"
+
+/* --- Module NUMBER-PORTABILITY --- --- --- */
+
+static gint ett_h460_2_NumberPortabilityInfo = -1;
+static gint ett_h460_2_T_nUMBERPORTABILITYDATA = -1;
+static gint ett_h460_2_NumberPortabilityRejectReason = -1;
+static gint ett_h460_2_PortabilityAddress = -1;
+static gint ett_h460_2_NumberPortabilityTypeOfNumber = -1;
+static gint ett_h460_2_PortabilityTypeOfNumber = -1;
+static gint ett_h460_2_RegionalParameters = -1;
+
+/* --- Module CIRCUIT-STATUS-MAP --- --- --- */
+
+static gint ett_h460_3_CircuitStatus = -1;
+static gint ett_h460_3_SEQUENCE_OF_CircuitStatusMap = -1;
+static gint ett_h460_3_CircuitStatusMap = -1;
+static gint ett_h460_3_CircuitStatusType = -1;
+
+/* --- Module CALL-PRIORITY --- --- --- */
+
+static gint ett_h460_4_CallPriorityInfo = -1;
+static gint ett_h460_4_T_priorityValue = -1;
+static gint ett_h460_4_SEQUENCE_OF_ClearToken = -1;
+static gint ett_h460_4_SEQUENCE_OF_CryptoToken = -1;
+static gint ett_h460_4_T_rejectReason = -1;
+static gint ett_h460_4_CountryInternationalNetworkCallOriginationIdentification = -1;
+static gint ett_h460_4_T_numberingPlan = -1;
+static gint ett_h460_4_T_x121 = -1;
+static gint ett_h460_4_T_e164 = -1;
+
+/* --- Modules QOS-MONITORING-REPORT QOS-MONITORING-EXTENDED-VOIP-REPORT --- --- --- */
+
+static gint ett_h460_9_Extension = -1;
+static gint ett_h460_9_RTCPMeasures = -1;
+static gint ett_h460_9_T_mediaSenderMeasures = -1;
+static gint ett_h460_9_T_mediaReceiverMeasures = -1;
+static gint ett_h460_9_SEQUENCE_OF_Extension = -1;
+static gint ett_h460_9_PerCallQoSReport = -1;
+static gint ett_h460_9_SEQUENCE_OF_RTCPMeasures = -1;
+static gint ett_h460_9_QosMonitoringReportData = -1;
+static gint ett_h460_9_PeriodicQoSMonReport = -1;
+static gint ett_h460_9_SEQUENCE_OF_PerCallQoSReport = -1;
+static gint ett_h460_9_FinalQosMonReport = -1;
+static gint ett_h460_9_InterGKQosMonReport = -1;
+static gint ett_h460_9_ExtendedRTPMetrics = -1;
+static gint ett_h460_9_BurstMetrics = -1;
+static gint ett_h460_9_PLCtypes = -1;
+static gint ett_h460_9_JitterBufferParms = -1;
+static gint ett_h460_9_JitterBufferTypes = -1;
+
+/* --- Module CALL-PARTY-CATEGORY --- --- --- */
+
+static gint ett_h460_10_CallPartyCategoryInfo = -1;
+
+/* --- Module MLPP --- --- --- */
+
+static gint ett_h460_14_MLPPInfo = -1;
+static gint ett_h460_14_MlppNotification = -1;
+static gint ett_h460_14_AlternateParty = -1;
+static gint ett_h460_14_ReleaseCall = -1;
+
+/* --- Module SIGNALLING-CHANNEL-SUSPEND-REDIRECT --- --- --- */
+
+static gint ett_h460_15_SignallingChannelData = -1;
+static gint ett_h460_15_T_signallingChannelData = -1;
+static gint ett_h460_15_ChannelSuspendRequest = -1;
+static gint ett_h460_15_SEQUENCE_OF_TransportAddress = -1;
+static gint ett_h460_15_ChannelSuspendResponse = -1;
+static gint ett_h460_15_ChannelSuspendConfirm = -1;
+static gint ett_h460_15_ChannelSuspendCancel = -1;
+static gint ett_h460_15_ChannelResumeRequest = -1;
+static gint ett_h460_15_ChannelResumeResponse = -1;
+
+/* --- Module SIGNALLING-TRAVERSAL --- --- --- */
+
+static gint ett_h460_18_IncomingCallIndication = -1;
+static gint ett_h460_18_LRQKeepAliveData = -1;
+
+/* --- Module MEDIA-TRAVERSAL --- --- --- */
+
+static gint ett_h460_19_TraversalParameters = -1;
+
+/* --- Module MESSAGE-BROADCAST --- --- --- */
+
+static gint ett_h460_21_CapabilityAdvertisement = -1;
+static gint ett_h460_21_SEQUENCE_SIZE_1_256_OF_TransmitCapabilities = -1;
+static gint ett_h460_21_ReceiveCapabilities = -1;
+static gint ett_h460_21_SEQUENCE_SIZE_1_256_OF_Capability = -1;
+static gint ett_h460_21_TransmitCapabilities = -1;
+static gint ett_h460_21_MessageBroadcastGroups = -1;
+static gint ett_h460_21_GroupAttributes = -1;
+
+/*--- End of included file: packet-h460-ett.c ---*/
+#line 54 "packet-h460-template.c"
+
+/* Subdissectors */
+static dissector_handle_t q931_ie_handle = NULL;
+static dissector_handle_t h225_ras_handle = NULL;
+
+
+/*--- Included file: packet-h460-fn.c ---*/
+#line 1 "packet-h460-fn.c"
+
+/* --- Module NUMBER-PORTABILITY --- --- --- */
+
+
+
+static int
+dissect_h460_2_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 h460_2_NumberPortabilityRejectReason_vals[] = {
+ { 0, "unspecified" },
+ { 1, "qorPortedNumber" },
+ { 0, NULL }
+};
+
+static const per_choice_t h460_2_NumberPortabilityRejectReason_choice[] = {
+ { 0, &hf_h460_2_unspecified , ASN1_EXTENSION_ROOT , dissect_h460_2_NULL },
+ { 1, &hf_h460_2_qorPortedNumber, ASN1_EXTENSION_ROOT , dissect_h460_2_NULL },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_h460_2_NumberPortabilityRejectReason(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_h460_2_NumberPortabilityRejectReason, h460_2_NumberPortabilityRejectReason_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const value_string h460_2_PortabilityTypeOfNumber_vals[] = {
+ { 0, "portedNumber" },
+ { 1, "routingNumber" },
+ { 2, "concatenatedNumber" },
+ { 0, NULL }
+};
+
+static const per_choice_t h460_2_PortabilityTypeOfNumber_choice[] = {
+ { 0, &hf_h460_2_portedNumber , ASN1_EXTENSION_ROOT , dissect_h460_2_NULL },
+ { 1, &hf_h460_2_routingNumber, ASN1_EXTENSION_ROOT , dissect_h460_2_NULL },
+ { 2, &hf_h460_2_concatenatedNumber, ASN1_EXTENSION_ROOT , dissect_h460_2_NULL },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_h460_2_PortabilityTypeOfNumber(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_h460_2_PortabilityTypeOfNumber, h460_2_PortabilityTypeOfNumber_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const value_string h460_2_NumberPortabilityTypeOfNumber_vals[] = {
+ { 0, "publicTypeOfNumber" },
+ { 1, "privateTypeOfNumber" },
+ { 2, "portabilityTypeOfNumber" },
+ { 0, NULL }
+};
+
+static const per_choice_t h460_2_NumberPortabilityTypeOfNumber_choice[] = {
+ { 0, &hf_h460_2_publicTypeOfNumber, ASN1_EXTENSION_ROOT , dissect_h225_PublicTypeOfNumber },
+ { 1, &hf_h460_2_privateTypeOfNumber, ASN1_EXTENSION_ROOT , dissect_h225_PrivateTypeOfNumber },
+ { 2, &hf_h460_2_portabilityTypeOfNumber, ASN1_EXTENSION_ROOT , dissect_h460_2_PortabilityTypeOfNumber },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_h460_2_NumberPortabilityTypeOfNumber(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_h460_2_NumberPortabilityTypeOfNumber, h460_2_NumberPortabilityTypeOfNumber_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_2_PortabilityAddress_sequence[] = {
+ { &hf_h460_2_aliasAddress , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h225_AliasAddress },
+ { &hf_h460_2_typeOfAddress, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_2_NumberPortabilityTypeOfNumber },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_2_PortabilityAddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_2_PortabilityAddress, h460_2_PortabilityAddress_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_h460_2_INTEGER_0_255(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, 255U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_h460_2_INTEGER_1_255(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, 255U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_h460_2_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, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_2_RegionalParameters_sequence[] = {
+ { &hf_h460_2_t35CountryCode, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_2_INTEGER_0_255 },
+ { &hf_h460_2_t35Extension , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_2_INTEGER_0_255 },
+ { &hf_h460_2_variantIdentifier, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_2_INTEGER_1_255 },
+ { &hf_h460_2_regionalData , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_2_OCTET_STRING },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_2_RegionalParameters(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_2_RegionalParameters, h460_2_RegionalParameters_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_2_T_nUMBERPORTABILITYDATA_sequence[] = {
+ { &hf_h460_2_addressTranslated, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_2_NULL },
+ { &hf_h460_2_portedAddress, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_2_PortabilityAddress },
+ { &hf_h460_2_routingAddress, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_2_PortabilityAddress },
+ { &hf_h460_2_regionalParams, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_2_RegionalParameters },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_2_T_nUMBERPORTABILITYDATA(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_2_T_nUMBERPORTABILITYDATA, h460_2_T_nUMBERPORTABILITYDATA_sequence);
+
+ return offset;
+}
+
+
+static const value_string h460_2_NumberPortabilityInfo_vals[] = {
+ { 0, "numberPortabilityRejectReason" },
+ { 1, "nUMBERPORTABILITYDATA" },
+ { 0, NULL }
+};
+
+static const per_choice_t h460_2_NumberPortabilityInfo_choice[] = {
+ { 0, &hf_h460_2_numberPortabilityRejectReason, ASN1_EXTENSION_ROOT , dissect_h460_2_NumberPortabilityRejectReason },
+ { 1, &hf_h460_2_nUMBERPORTABILITYDATA, ASN1_EXTENSION_ROOT , dissect_h460_2_T_nUMBERPORTABILITYDATA },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_h460_2_NumberPortabilityInfo(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_h460_2_NumberPortabilityInfo, h460_2_NumberPortabilityInfo_choice,
+ NULL);
+
+ return offset;
+}
+
+/*--- PDUs ---*/
+
+static int dissect_h460_2_NumberPortabilityInfo_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_h460_2_NumberPortabilityInfo(tvb, offset, &asn1_ctx, tree, hf_h460_2_h460_2_NumberPortabilityInfo_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+
+
+/* --- Module CIRCUIT-STATUS-MAP --- --- --- */
+
+
+
+static int
+dissect_h460_3_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 h460_3_CircuitStatusType_vals[] = {
+ { 0, "serviceStatus" },
+ { 1, "busyStatus" },
+ { 0, NULL }
+};
+
+static const per_choice_t h460_3_CircuitStatusType_choice[] = {
+ { 0, &hf_h460_3_serviceStatus, ASN1_EXTENSION_ROOT , dissect_h460_3_NULL },
+ { 1, &hf_h460_3_busyStatus , ASN1_EXTENSION_ROOT , dissect_h460_3_NULL },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_h460_3_CircuitStatusType(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_h460_3_CircuitStatusType, h460_3_CircuitStatusType_choice,
+ NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_h460_3_INTEGER_0_4095(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, 4095U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_h460_3_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, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_3_CircuitStatusMap_sequence[] = {
+ { &hf_h460_3_statusType , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_3_CircuitStatusType },
+ { &hf_h460_3_baseCircuitID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h225_CircuitIdentifier },
+ { &hf_h460_3_range , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_3_INTEGER_0_4095 },
+ { &hf_h460_3_status , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_3_OCTET_STRING },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_3_CircuitStatusMap(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_3_CircuitStatusMap, h460_3_CircuitStatusMap_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_3_SEQUENCE_OF_CircuitStatusMap_sequence_of[1] = {
+ { &hf_h460_3_circuitStatusMap_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h460_3_CircuitStatusMap },
+};
+
+static int
+dissect_h460_3_SEQUENCE_OF_CircuitStatusMap(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_h460_3_SEQUENCE_OF_CircuitStatusMap, h460_3_SEQUENCE_OF_CircuitStatusMap_sequence_of);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_3_CircuitStatus_sequence[] = {
+ { &hf_h460_3_circuitStatusMap, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_3_SEQUENCE_OF_CircuitStatusMap },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_3_CircuitStatus(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_3_CircuitStatus, h460_3_CircuitStatus_sequence);
+
+ return offset;
+}
+
+/*--- PDUs ---*/
+
+static int dissect_h460_3_CircuitStatus_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_h460_3_CircuitStatus(tvb, offset, &asn1_ctx, tree, hf_h460_3_h460_3_CircuitStatus_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+
+
+/* --- Module CALL-PRIORITY --- --- --- */
+
+
+
+static int
+dissect_h460_4_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 h460_4_T_priorityValue_vals[] = {
+ { 0, "emergencyAuthorized" },
+ { 1, "emergencyPublic" },
+ { 2, "high" },
+ { 3, "normal" },
+ { 0, NULL }
+};
+
+static const per_choice_t h460_4_T_priorityValue_choice[] = {
+ { 0, &hf_h460_4_emergencyAuthorized, ASN1_EXTENSION_ROOT , dissect_h460_4_NULL },
+ { 1, &hf_h460_4_emergencyPublic, ASN1_EXTENSION_ROOT , dissect_h460_4_NULL },
+ { 2, &hf_h460_4_high , ASN1_EXTENSION_ROOT , dissect_h460_4_NULL },
+ { 3, &hf_h460_4_normal , ASN1_EXTENSION_ROOT , dissect_h460_4_NULL },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_h460_4_T_priorityValue(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_h460_4_T_priorityValue, h460_4_T_priorityValue_choice,
+ NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_h460_4_INTEGER_0_255(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, 255U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_4_SEQUENCE_OF_ClearToken_sequence_of[1] = {
+ { &hf_h460_4_tokens_item , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_ClearToken },
+};
+
+static int
+dissect_h460_4_SEQUENCE_OF_ClearToken(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_h460_4_SEQUENCE_OF_ClearToken, h460_4_SEQUENCE_OF_ClearToken_sequence_of);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_4_SEQUENCE_OF_CryptoToken_sequence_of[1] = {
+ { &hf_h460_4_cryptoTokens_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_CryptoToken },
+};
+
+static int
+dissect_h460_4_SEQUENCE_OF_CryptoToken(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_h460_4_SEQUENCE_OF_CryptoToken, h460_4_SEQUENCE_OF_CryptoToken_sequence_of);
+
+ return offset;
+}
+
+
+static const value_string h460_4_T_rejectReason_vals[] = {
+ { 0, "priorityUnavailable" },
+ { 1, "priorityUnauthorized" },
+ { 2, "priorityValueUnknown" },
+ { 0, NULL }
+};
+
+static const per_choice_t h460_4_T_rejectReason_choice[] = {
+ { 0, &hf_h460_4_priorityUnavailable, ASN1_EXTENSION_ROOT , dissect_h460_4_NULL },
+ { 1, &hf_h460_4_priorityUnauthorized, ASN1_EXTENSION_ROOT , dissect_h460_4_NULL },
+ { 2, &hf_h460_4_priorityValueUnknown, ASN1_EXTENSION_ROOT , dissect_h460_4_NULL },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_h460_4_T_rejectReason(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_h460_4_T_rejectReason, h460_4_T_rejectReason_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_4_CallPriorityInfo_sequence[] = {
+ { &hf_h460_4_priorityValue, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_4_T_priorityValue },
+ { &hf_h460_4_priorityExtension, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_4_INTEGER_0_255 },
+ { &hf_h460_4_tokens , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_4_SEQUENCE_OF_ClearToken },
+ { &hf_h460_4_cryptoTokens , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_4_SEQUENCE_OF_CryptoToken },
+ { &hf_h460_4_rejectReason , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_4_T_rejectReason },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_4_CallPriorityInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_4_CallPriorityInfo, h460_4_CallPriorityInfo_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_h460_4_X121CountryCode(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,
+ 3, 3, "0123456789", 10,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_4_T_x121_sequence[] = {
+ { &hf_h460_4_x121CountryCode, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_4_X121CountryCode },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_4_T_x121(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_4_T_x121, h460_4_T_x121_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_h460_4_E164CountryCode(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,
+ 3, 3, "0123456789", 10,
+ NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_h460_4_T_identificationCode(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, 4, "0123456789", 10,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_4_T_e164_sequence[] = {
+ { &hf_h460_4_e164CountryCode, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_4_E164CountryCode },
+ { &hf_h460_4_identificationCode, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_4_T_identificationCode },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_4_T_e164(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_4_T_e164, h460_4_T_e164_sequence);
+
+ return offset;
+}
+
+
+static const value_string h460_4_T_numberingPlan_vals[] = {
+ { 0, "x121" },
+ { 1, "e164" },
+ { 0, NULL }
+};
+
+static const per_choice_t h460_4_T_numberingPlan_choice[] = {
+ { 0, &hf_h460_4_x121 , ASN1_EXTENSION_ROOT , dissect_h460_4_T_x121 },
+ { 1, &hf_h460_4_e164 , ASN1_EXTENSION_ROOT , dissect_h460_4_T_e164 },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_h460_4_T_numberingPlan(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_h460_4_T_numberingPlan, h460_4_T_numberingPlan_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_4_CountryInternationalNetworkCallOriginationIdentification_sequence[] = {
+ { &hf_h460_4_numberingPlan, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_4_T_numberingPlan },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_4_CountryInternationalNetworkCallOriginationIdentification(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_4_CountryInternationalNetworkCallOriginationIdentification, h460_4_CountryInternationalNetworkCallOriginationIdentification_sequence);
+
+ return offset;
+}
+
+/*--- PDUs ---*/
+
+static int dissect_h460_4_CallPriorityInfo_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_h460_4_CallPriorityInfo(tvb, offset, &asn1_ctx, tree, hf_h460_4_h460_4_CallPriorityInfo_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+static int dissect_h460_4_CountryInternationalNetworkCallOriginationIdentification_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_h460_4_CountryInternationalNetworkCallOriginationIdentification(tvb, offset, &asn1_ctx, tree, hf_h460_4_h460_4_CountryInternationalNetworkCallOriginationIdentification_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+
+
+/* --- Modules QOS-MONITORING-REPORT QOS-MONITORING-EXTENDED-VOIP-REPORT --- --- --- */
+
+
+
+static int
+dissect_h460_9_EstimatedEnd2EndDelay(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_h460_9_CalculatedJitter(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_h460_9_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, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_9_Extension_sequence[] = {
+ { &hf_h460_9_extensionId , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h225_GenericIdentifier },
+ { &hf_h460_9_extensionContent, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_OCTET_STRING },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_9_Extension(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_9_Extension, h460_9_Extension_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_h460_9_INTEGER_1_255(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, 255U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_9_T_mediaSenderMeasures_sequence[] = {
+ { &hf_h460_9_worstEstimatedEnd2EndDelay, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_EstimatedEnd2EndDelay },
+ { &hf_h460_9_meanEstimatedEnd2EndDelay, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_EstimatedEnd2EndDelay },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_9_T_mediaSenderMeasures(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_9_T_mediaSenderMeasures, h460_9_T_mediaSenderMeasures_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_h460_9_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 int
+dissect_h460_9_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 h460_9_T_mediaReceiverMeasures_sequence[] = {
+ { &hf_h460_9_cumulativeNumberOfPacketsLost, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_4294967295 },
+ { &hf_h460_9_packetLostRate, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_65535 },
+ { &hf_h460_9_worstJitter , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_CalculatedJitter },
+ { &hf_h460_9_estimatedThroughput, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h225_BandWidth },
+ { &hf_h460_9_fractionLostRate, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_65535 },
+ { &hf_h460_9_meanJitter , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_CalculatedJitter },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_9_T_mediaReceiverMeasures(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_9_T_mediaReceiverMeasures, h460_9_T_mediaReceiverMeasures_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_9_SEQUENCE_OF_Extension_sequence_of[1] = {
+ { &hf_h460_9_extensions_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h460_9_Extension },
+};
+
+static int
+dissect_h460_9_SEQUENCE_OF_Extension(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_h460_9_SEQUENCE_OF_Extension, h460_9_SEQUENCE_OF_Extension_sequence_of);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_9_RTCPMeasures_sequence[] = {
+ { &hf_h460_9_rtpAddress , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h225_TransportChannelInfo },
+ { &hf_h460_9_rtcpAddress , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h225_TransportChannelInfo },
+ { &hf_h460_9_sessionId , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_9_INTEGER_1_255 },
+ { &hf_h460_9_nonStandardData, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h225_NonStandardParameter },
+ { &hf_h460_9_mediaSenderMeasures, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_T_mediaSenderMeasures },
+ { &hf_h460_9_mediaReceiverMeasures, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_T_mediaReceiverMeasures },
+ { &hf_h460_9_extensions , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_SEQUENCE_OF_Extension },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_9_RTCPMeasures(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_9_RTCPMeasures, h460_9_RTCPMeasures_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_9_SEQUENCE_OF_RTCPMeasures_sequence_of[1] = {
+ { &hf_h460_9_mediaChannelsQoS_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h460_9_RTCPMeasures },
+};
+
+static int
+dissect_h460_9_SEQUENCE_OF_RTCPMeasures(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_h460_9_SEQUENCE_OF_RTCPMeasures, h460_9_SEQUENCE_OF_RTCPMeasures_sequence_of);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_9_PerCallQoSReport_sequence[] = {
+ { &hf_h460_9_nonStandardData, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h225_NonStandardParameter },
+ { &hf_h460_9_callReferenceValue, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h225_CallReferenceValue },
+ { &hf_h460_9_conferenceID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h225_ConferenceIdentifier },
+ { &hf_h460_9_callIdentifier, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h225_CallIdentifier },
+ { &hf_h460_9_mediaChannelsQoS, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_SEQUENCE_OF_RTCPMeasures },
+ { &hf_h460_9_extensions , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_SEQUENCE_OF_Extension },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_9_PerCallQoSReport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_9_PerCallQoSReport, h460_9_PerCallQoSReport_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_9_SEQUENCE_OF_PerCallQoSReport_sequence_of[1] = {
+ { &hf_h460_9_perCallInfo_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h460_9_PerCallQoSReport },
+};
+
+static int
+dissect_h460_9_SEQUENCE_OF_PerCallQoSReport(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_h460_9_SEQUENCE_OF_PerCallQoSReport, h460_9_SEQUENCE_OF_PerCallQoSReport_sequence_of);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_9_PeriodicQoSMonReport_sequence[] = {
+ { &hf_h460_9_perCallInfo , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_9_SEQUENCE_OF_PerCallQoSReport },
+ { &hf_h460_9_extensions , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_SEQUENCE_OF_Extension },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_9_PeriodicQoSMonReport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_9_PeriodicQoSMonReport, h460_9_PeriodicQoSMonReport_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_9_FinalQosMonReport_sequence[] = {
+ { &hf_h460_9_mediaInfo , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_9_SEQUENCE_OF_RTCPMeasures },
+ { &hf_h460_9_nonStandardData, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h225_NonStandardParameter },
+ { &hf_h460_9_extensions , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_SEQUENCE_OF_Extension },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_9_FinalQosMonReport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_9_FinalQosMonReport, h460_9_FinalQosMonReport_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_9_InterGKQosMonReport_sequence[] = {
+ { &hf_h460_9_mediaInfo , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_9_SEQUENCE_OF_RTCPMeasures },
+ { &hf_h460_9_nonStandardData, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h225_NonStandardParameter },
+ { &hf_h460_9_extensions , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_SEQUENCE_OF_Extension },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_9_InterGKQosMonReport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_9_InterGKQosMonReport, h460_9_InterGKQosMonReport_sequence);
+
+ return offset;
+}
+
+
+static const value_string h460_9_QosMonitoringReportData_vals[] = {
+ { 0, "periodic" },
+ { 1, "final" },
+ { 2, "interGK" },
+ { 0, NULL }
+};
+
+static const per_choice_t h460_9_QosMonitoringReportData_choice[] = {
+ { 0, &hf_h460_9_periodic , ASN1_EXTENSION_ROOT , dissect_h460_9_PeriodicQoSMonReport },
+ { 1, &hf_h460_9_final , ASN1_EXTENSION_ROOT , dissect_h460_9_FinalQosMonReport },
+ { 2, &hf_h460_9_interGK , ASN1_EXTENSION_ROOT , dissect_h460_9_InterGKQosMonReport },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_h460_9_QosMonitoringReportData(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_h460_9_QosMonitoringReportData, h460_9_QosMonitoringReportData_choice,
+ NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_h460_9_INTEGER_0_255(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, 255U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_9_BurstMetrics_sequence[] = {
+ { &hf_h460_9_gmin , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_255 },
+ { &hf_h460_9_burstLossDensity, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_255 },
+ { &hf_h460_9_gapLossDensity, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_255 },
+ { &hf_h460_9_burstDuration, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_65535 },
+ { &hf_h460_9_gapDuration , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_65535 },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_9_BurstMetrics(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_9_BurstMetrics, h460_9_BurstMetrics_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_h460_9_INTEGER_M127_10(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,
+ -127, 10U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_h460_9_INTEGER_M127_0(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,
+ -127, 0U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_h460_9_INTEGER_0_127(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, 127U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_h460_9_INTEGER_0_100(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, 100U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_h460_9_INTEGER_10_50(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,
+ 10U, 50U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_h460_9_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 h460_9_PLCtypes_vals[] = {
+ { 0, "unspecified" },
+ { 1, "disabled" },
+ { 2, "enhanced" },
+ { 3, "standard" },
+ { 0, NULL }
+};
+
+static const per_choice_t h460_9_PLCtypes_choice[] = {
+ { 0, &hf_h460_9_unspecified , ASN1_EXTENSION_ROOT , dissect_h460_9_NULL },
+ { 1, &hf_h460_9_disabled , ASN1_EXTENSION_ROOT , dissect_h460_9_NULL },
+ { 2, &hf_h460_9_enhanced , ASN1_EXTENSION_ROOT , dissect_h460_9_NULL },
+ { 3, &hf_h460_9_standard , ASN1_EXTENSION_ROOT , dissect_h460_9_NULL },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_h460_9_PLCtypes(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_h460_9_PLCtypes, h460_9_PLCtypes_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const value_string h460_9_JitterBufferTypes_vals[] = {
+ { 0, "unknown" },
+ { 1, "reserved" },
+ { 2, "nonadaptive" },
+ { 3, "adaptive" },
+ { 0, NULL }
+};
+
+static const per_choice_t h460_9_JitterBufferTypes_choice[] = {
+ { 0, &hf_h460_9_unknown , ASN1_EXTENSION_ROOT , dissect_h460_9_NULL },
+ { 1, &hf_h460_9_reserved , ASN1_EXTENSION_ROOT , dissect_h460_9_NULL },
+ { 2, &hf_h460_9_nonadaptive , ASN1_EXTENSION_ROOT , dissect_h460_9_NULL },
+ { 3, &hf_h460_9_adaptive , ASN1_EXTENSION_ROOT , dissect_h460_9_NULL },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_h460_9_JitterBufferTypes(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_h460_9_JitterBufferTypes, h460_9_JitterBufferTypes_choice,
+ NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_h460_9_INTEGER_0_15(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, 15U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_9_JitterBufferParms_sequence[] = {
+ { &hf_h460_9_jitterBufferType, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_JitterBufferTypes },
+ { &hf_h460_9_jitterBufferAdaptRate, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_15 },
+ { &hf_h460_9_jitterBufferNominalSize, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_65535 },
+ { &hf_h460_9_jitterBufferMaxSize, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_65535 },
+ { &hf_h460_9_jitterBufferAbsoluteMax, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_65535 },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_9_JitterBufferParms(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_9_JitterBufferParms, h460_9_JitterBufferParms_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_9_ExtendedRTPMetrics_sequence[] = {
+ { &hf_h460_9_networkPacketLossRate, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_255 },
+ { &hf_h460_9_jitterBufferDiscardRate, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_255 },
+ { &hf_h460_9_burstMetrics , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_BurstMetrics },
+ { &hf_h460_9_rtcpRoundTripDelay, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_65535 },
+ { &hf_h460_9_endSystemDelay, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_65535 },
+ { &hf_h460_9_signalLevel , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_M127_10 },
+ { &hf_h460_9_noiseLevel , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_M127_0 },
+ { &hf_h460_9_residualEchoReturnLoss, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_127 },
+ { &hf_h460_9_rFactor , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_100 },
+ { &hf_h460_9_extRFactor , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_0_100 },
+ { &hf_h460_9_estimatedMOSLQ, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_10_50 },
+ { &hf_h460_9_estimatedMOSCQ, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_INTEGER_10_50 },
+ { &hf_h460_9_plcType , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_PLCtypes },
+ { &hf_h460_9_jitterBufferParms, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_9_JitterBufferParms },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_9_ExtendedRTPMetrics(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_9_ExtendedRTPMetrics, h460_9_ExtendedRTPMetrics_sequence);
+
+ return offset;
+}
+
+/*--- PDUs ---*/
+
+static int dissect_h460_9_QosMonitoringReportData_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_h460_9_QosMonitoringReportData(tvb, offset, &asn1_ctx, tree, hf_h460_9_h460_9_QosMonitoringReportData_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+static int dissect_h460_9_ExtendedRTPMetrics_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_h460_9_ExtendedRTPMetrics(tvb, offset, &asn1_ctx, tree, hf_h460_9_h460_9_ExtendedRTPMetrics_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+
+
+/* --- Module CALL-PARTY-CATEGORY --- --- --- */
+
+
+
+static int
+dissect_h460_10_CallPartyCategory(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, 255U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_h460_10_OriginatingLineInfo(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, 255U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_10_CallPartyCategoryInfo_sequence[] = {
+ { &hf_h460_10_callPartyCategory, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_10_CallPartyCategory },
+ { &hf_h460_10_originatingLineInfo, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_10_OriginatingLineInfo },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_10_CallPartyCategoryInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_10_CallPartyCategoryInfo, h460_10_CallPartyCategoryInfo_sequence);
+
+ return offset;
+}
+
+/*--- PDUs ---*/
+
+static int dissect_h460_10_CallPartyCategoryInfo_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_h460_10_CallPartyCategoryInfo(tvb, offset, &asn1_ctx, tree, hf_h460_10_h460_10_CallPartyCategoryInfo_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+
+
+/* --- Module MLPP --- --- --- */
+
+
+static const value_string h460_14_MlppPrecedence_vals[] = {
+ { 0, "flashOveride" },
+ { 1, "flash" },
+ { 2, "immediate" },
+ { 3, "priority" },
+ { 4, "routine" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_h460_14_MlppPrecedence(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 h460_14_MlppReason_vals[] = {
+ { 8, "preemptionNoReservation" },
+ { 9, "preemptionReservation" },
+ { 46, "callBlocked" },
+ { 0, NULL }
+};
+
+static guint32 h460_14_MlppReason_value_map[3+0] = {8, 9, 46};
+
+static int
+dissect_h460_14_MlppReason(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, h460_14_MlppReason_value_map);
+
+ return offset;
+}
+
+
+
+static int
+dissect_h460_14_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 h460_14_MlppNotification_vals[] = {
+ { 0, "preemptionPending" },
+ { 1, "preemptionInProgress" },
+ { 2, "preemptionEnd" },
+ { 3, "preemptionComplete" },
+ { 0, NULL }
+};
+
+static const per_choice_t h460_14_MlppNotification_choice[] = {
+ { 0, &hf_h460_14_preemptionPending, ASN1_EXTENSION_ROOT , dissect_h460_14_NULL },
+ { 1, &hf_h460_14_preemptionInProgress, ASN1_EXTENSION_ROOT , dissect_h460_14_NULL },
+ { 2, &hf_h460_14_preemptionEnd, ASN1_EXTENSION_ROOT , dissect_h460_14_NULL },
+ { 3, &hf_h460_14_preemptionComplete, ASN1_EXTENSION_ROOT , dissect_h460_14_NULL },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_h460_14_MlppNotification(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_h460_14_MlppNotification, h460_14_MlppNotification_choice,
+ NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_h460_14_INTEGER_0_255(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, 255U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_14_AlternateParty_sequence[] = {
+ { &hf_h460_14_altID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h225_AliasAddress },
+ { &hf_h460_14_altTimer , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_14_INTEGER_0_255 },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_14_AlternateParty(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_14_AlternateParty, h460_14_AlternateParty_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_14_ReleaseCall_sequence[] = {
+ { &hf_h460_14_preemptCallID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h225_CallIdentifier },
+ { &hf_h460_14_releaseReason, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_14_MlppReason },
+ { &hf_h460_14_releaseDelay, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_14_INTEGER_0_255 },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_14_ReleaseCall(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_14_ReleaseCall, h460_14_ReleaseCall_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_14_MLPPInfo_sequence[] = {
+ { &hf_h460_14_precedence , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_14_MlppPrecedence },
+ { &hf_h460_14_mlppReason , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_14_MlppReason },
+ { &hf_h460_14_mlppNotification, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_14_MlppNotification },
+ { &hf_h460_14_alternateParty, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_14_AlternateParty },
+ { &hf_h460_14_releaseCall , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_14_ReleaseCall },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_14_MLPPInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_14_MLPPInfo, h460_14_MLPPInfo_sequence);
+
+ return offset;
+}
+
+/*--- PDUs ---*/
+
+static int dissect_h460_14_MLPPInfo_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_h460_14_MLPPInfo(tvb, offset, &asn1_ctx, tree, hf_h460_14_h460_14_MLPPInfo_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+
+
+/* --- Module SIGNALLING-CHANNEL-SUSPEND-REDIRECT --- --- --- */
+
+
+static const per_sequence_t h460_15_SEQUENCE_OF_TransportAddress_sequence_of[1] = {
+ { &hf_h460_15_channelResumeAddress_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h225_TransportAddress },
+};
+
+static int
+dissect_h460_15_SEQUENCE_OF_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_of(tvb, offset, actx, tree, hf_index,
+ ett_h460_15_SEQUENCE_OF_TransportAddress, h460_15_SEQUENCE_OF_TransportAddress_sequence_of);
+
+ return offset;
+}
+
+
+
+static int
+dissect_h460_15_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 int
+dissect_h460_15_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 per_sequence_t h460_15_ChannelSuspendRequest_sequence[] = {
+ { &hf_h460_15_channelResumeAddress, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_15_SEQUENCE_OF_TransportAddress },
+ { &hf_h460_15_immediateResume, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_15_BOOLEAN },
+ { &hf_h460_15_resetH245 , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_15_NULL },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_15_ChannelSuspendRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_15_ChannelSuspendRequest, h460_15_ChannelSuspendRequest_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_15_ChannelSuspendResponse_sequence[] = {
+ { &hf_h460_15_okToSuspend , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_15_BOOLEAN },
+ { &hf_h460_15_channelResumeAddress, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_15_SEQUENCE_OF_TransportAddress },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_15_ChannelSuspendResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_15_ChannelSuspendResponse, h460_15_ChannelSuspendResponse_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_15_ChannelSuspendConfirm_sequence[] = {
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_15_ChannelSuspendConfirm(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_15_ChannelSuspendConfirm, h460_15_ChannelSuspendConfirm_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_15_ChannelSuspendCancel_sequence[] = {
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_15_ChannelSuspendCancel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_15_ChannelSuspendCancel, h460_15_ChannelSuspendCancel_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_h460_15_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 per_sequence_t h460_15_ChannelResumeRequest_sequence[] = {
+ { &hf_h460_15_randomNumber, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_15_INTEGER_0_4294967295 },
+ { &hf_h460_15_resetH245 , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_15_NULL },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_15_ChannelResumeRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_15_ChannelResumeRequest, h460_15_ChannelResumeRequest_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_15_ChannelResumeResponse_sequence[] = {
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_15_ChannelResumeResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_15_ChannelResumeResponse, h460_15_ChannelResumeResponse_sequence);
+
+ return offset;
+}
+
+
+static const value_string h460_15_T_signallingChannelData_vals[] = {
+ { 0, "channelSuspendRequest" },
+ { 1, "channelSuspendResponse" },
+ { 2, "channelSuspendConfirm" },
+ { 3, "channelSuspendCancel" },
+ { 4, "channelResumeRequest" },
+ { 5, "channelResumeResponse" },
+ { 0, NULL }
+};
+
+static const per_choice_t h460_15_T_signallingChannelData_choice[] = {
+ { 0, &hf_h460_15_channelSuspendRequest, ASN1_EXTENSION_ROOT , dissect_h460_15_ChannelSuspendRequest },
+ { 1, &hf_h460_15_channelSuspendResponse, ASN1_EXTENSION_ROOT , dissect_h460_15_ChannelSuspendResponse },
+ { 2, &hf_h460_15_channelSuspendConfirm, ASN1_EXTENSION_ROOT , dissect_h460_15_ChannelSuspendConfirm },
+ { 3, &hf_h460_15_channelSuspendCancel, ASN1_EXTENSION_ROOT , dissect_h460_15_ChannelSuspendCancel },
+ { 4, &hf_h460_15_channelResumeRequest, ASN1_EXTENSION_ROOT , dissect_h460_15_ChannelResumeRequest },
+ { 5, &hf_h460_15_channelResumeResponse, ASN1_EXTENSION_ROOT , dissect_h460_15_ChannelResumeResponse },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_h460_15_T_signallingChannelData(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_h460_15_T_signallingChannelData, h460_15_T_signallingChannelData_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_15_SignallingChannelData_sequence[] = {
+ { &hf_h460_15_signallingChannelData, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_15_T_signallingChannelData },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_15_SignallingChannelData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_15_SignallingChannelData, h460_15_SignallingChannelData_sequence);
+
+ return offset;
+}
+
+/*--- PDUs ---*/
+
+static int dissect_h460_15_SignallingChannelData_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_h460_15_SignallingChannelData(tvb, offset, &asn1_ctx, tree, hf_h460_15_h460_15_SignallingChannelData_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+
+
+/* --- Module SIGNALLING-TRAVERSAL --- --- --- */
+
+
+static const per_sequence_t h460_18_IncomingCallIndication_sequence[] = {
+ { &hf_h460_18_callSignallingAddress, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h225_TransportAddress },
+ { &hf_h460_18_callID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h225_CallIdentifier },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_18_IncomingCallIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_18_IncomingCallIndication, h460_18_IncomingCallIndication_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_18_LRQKeepAliveData_sequence[] = {
+ { &hf_h460_18_lrqKeepAliveInterval, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h225_TimeToLive },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_18_LRQKeepAliveData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_18_LRQKeepAliveData, h460_18_LRQKeepAliveData_sequence);
+
+ return offset;
+}
+
+/*--- PDUs ---*/
+
+static int dissect_h460_18_IncomingCallIndication_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_h460_18_IncomingCallIndication(tvb, offset, &asn1_ctx, tree, hf_h460_18_h460_18_IncomingCallIndication_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+static int dissect_h460_18_LRQKeepAliveData_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_h460_18_LRQKeepAliveData(tvb, offset, &asn1_ctx, tree, hf_h460_18_h460_18_LRQKeepAliveData_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+
+
+/* --- Module MEDIA-TRAVERSAL --- --- --- */
+
+
+
+static int
+dissect_h460_19_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 int
+dissect_h460_19_INTEGER_0_127(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, 127U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_19_TraversalParameters_sequence[] = {
+ { &hf_h460_19_multiplexedMediaChannel, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h245_TransportAddress },
+ { &hf_h460_19_multiplexedMediaControlChannel, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h245_TransportAddress },
+ { &hf_h460_19_multiplexID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_19_INTEGER_0_4294967295 },
+ { &hf_h460_19_keepAliveChannel, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h245_TransportAddress },
+ { &hf_h460_19_keepAlivePayloadType, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_19_INTEGER_0_127 },
+ { &hf_h460_19_keepAliveInterval, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h225_TimeToLive },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_19_TraversalParameters(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_19_TraversalParameters, h460_19_TraversalParameters_sequence);
+
+ return offset;
+}
+
+/*--- PDUs ---*/
+
+static int dissect_h460_19_TraversalParameters_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_h460_19_TraversalParameters(tvb, offset, &asn1_ctx, tree, hf_h460_19_h460_19_TraversalParameters_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+
+
+/* --- Module MESSAGE-BROADCAST --- --- --- */
+
+
+static const per_sequence_t h460_21_SEQUENCE_SIZE_1_256_OF_Capability_sequence_of[1] = {
+ { &hf_h460_21_capabilities_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h245_Capability },
+};
+
+static int
+dissect_h460_21_SEQUENCE_SIZE_1_256_OF_Capability(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_h460_21_SEQUENCE_SIZE_1_256_OF_Capability, h460_21_SEQUENCE_SIZE_1_256_OF_Capability_sequence_of,
+ 1, 256);
+
+ return offset;
+}
+
+
+
+static int
+dissect_h460_21_INTEGER_1_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,
+ 1U, 65535U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_21_ReceiveCapabilities_sequence[] = {
+ { &hf_h460_21_capabilities, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_21_SEQUENCE_SIZE_1_256_OF_Capability },
+ { &hf_h460_21_maxGroups , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_21_INTEGER_1_65535 },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_21_ReceiveCapabilities(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_21_ReceiveCapabilities, h460_21_ReceiveCapabilities_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_h460_21_GloballyUniqueID(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,
+ 16, 16, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_21_TransmitCapabilities_sequence[] = {
+ { &hf_h460_21_groupIdentifer, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_21_GloballyUniqueID },
+ { &hf_h460_21_capability , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h245_Capability },
+ { &hf_h460_21_sourceAddress, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h245_UnicastAddress },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_21_TransmitCapabilities(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_21_TransmitCapabilities, h460_21_TransmitCapabilities_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_21_SEQUENCE_SIZE_1_256_OF_TransmitCapabilities_sequence_of[1] = {
+ { &hf_h460_21_transmitCapabilities_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h460_21_TransmitCapabilities },
+};
+
+static int
+dissect_h460_21_SEQUENCE_SIZE_1_256_OF_TransmitCapabilities(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_h460_21_SEQUENCE_SIZE_1_256_OF_TransmitCapabilities, h460_21_SEQUENCE_SIZE_1_256_OF_TransmitCapabilities_sequence_of,
+ 1, 256);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_21_CapabilityAdvertisement_sequence[] = {
+ { &hf_h460_21_receiveCapabilities, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_21_ReceiveCapabilities },
+ { &hf_h460_21_transmitCapabilities, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_21_SEQUENCE_SIZE_1_256_OF_TransmitCapabilities },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_21_CapabilityAdvertisement(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_21_CapabilityAdvertisement, h460_21_CapabilityAdvertisement_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_h460_21_INTEGER_0_255(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, 255U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_h460_21_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 h460_21_GroupAttributes_sequence[] = {
+ { &hf_h460_21_priority , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_21_INTEGER_0_255 },
+ { &hf_h460_21_groupIdentifer, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h460_21_GloballyUniqueID },
+ { &hf_h460_21_capability , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h245_Capability },
+ { &hf_h460_21_groupAddress, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h245_MulticastAddress },
+ { &hf_h460_21_sourceAddress, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h245_UnicastAddress },
+ { &hf_h460_21_alertUser , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h460_21_BOOLEAN },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_h460_21_GroupAttributes(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_h460_21_GroupAttributes, h460_21_GroupAttributes_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t h460_21_MessageBroadcastGroups_sequence_of[1] = {
+ { &hf_h460_21_MessageBroadcastGroups_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h460_21_GroupAttributes },
+};
+
+static int
+dissect_h460_21_MessageBroadcastGroups(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_h460_21_MessageBroadcastGroups, h460_21_MessageBroadcastGroups_sequence_of,
+ 1, 256);
+
+ return offset;
+}
+
+/*--- PDUs ---*/
+
+static int dissect_h460_21_CapabilityAdvertisement_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_h460_21_CapabilityAdvertisement(tvb, offset, &asn1_ctx, tree, hf_h460_21_h460_21_CapabilityAdvertisement_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+
+
+/*--- End of included file: packet-h460-fn.c ---*/
+#line 60 "packet-h460-template.c"
+
+static int
+dissect_ies(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+ int offset = 0;
+
+ if (q931_ie_handle) {
+ call_dissector(q931_ie_handle, tvb, pinfo, tree);
+ offset += tvb_length_remaining(tvb, offset);
+ }
+ return offset;
+}
+
+static int
+dissect_ras(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+ int offset = 0;
+
+ if (h225_ras_handle) {
+ call_dissector(h225_ras_handle, tvb, pinfo, tree);
+ offset += tvb_length_remaining(tvb, offset);
+ }
+ return offset;
+}
+
+typedef struct _h460_feature_t {
+ guint32 opt;
+ const gchar *id;
+ const gchar *name;
+ new_dissector_t content_pdu;
+ /*---*/
+ const gchar *key_gd;
+ const gchar *key_fd;
+ const gchar *key_gm;
+ const gchar *key_gi;
+ dissector_handle_t content_hnd;
+} h460_feature_t;
+
+/* options */
+#define GD 0x01 /* present in H.225 GenericData */
+#define FD 0x02 /* present in H.225 FeatureDescriptor */
+#define GM 0x04 /* present in H.245 GenericMessage */
+#define GI 0x08 /* present in H.245 GenericInformation */
+
+static h460_feature_t h460_feature_tab[] = {
+ /* H.460.3 */
+ { GD|FD, "2", "Number Portability", NULL },
+ { GD|FD, "2/1", "NumberPortabilityData", dissect_h460_2_NumberPortabilityInfo_PDU },
+ /* H.460.3 */
+ { GD|FD, "3", "Circuit Status", NULL },
+ { GD|FD, "3/1", "Circuit Status Map", dissect_h460_3_CircuitStatus_PDU },
+ /* H.460.4 */
+ { GD|FD, "4", "CallPriorityDesignation", NULL },
+ { GD|FD, "4/1", "CallPriorityRequest", dissect_h460_4_CallPriorityInfo_PDU },
+ { GD|FD, "4/2", "CallPriorityConfirm", dissect_h460_4_CallPriorityInfo_PDU },
+ { GD|FD, "4/3", "Country/InternationalNetworkCallOriginationRequest", dissect_h460_4_CountryInternationalNetworkCallOriginationIdentification_PDU },
+ { GD|FD, "4/4", "Country/InternationalNetworkCallOriginationConfirm", dissect_h460_4_CountryInternationalNetworkCallOriginationIdentification_PDU },
+ /* H.460.5 */
+ { GD|FD, "5", "DuplicateIEs", NULL },
+ { GD|FD, "5/1", "IEsString", dissect_ies },
+ /* H.460.6 */
+ { GD|FD, "6", "Extended Fast Connect", NULL },
+ { GD|FD, "6/1", "EFC Proposal", NULL },
+ { GD|FD, "6/2", "EFC Close All Media Channels", NULL },
+ { GD|FD, "6/3", "EFC Request New Proposals", NULL },
+ { GD|FD, "6/4", "EFC Require Symmetric Operation", NULL },
+ /* H.460.7 */
+ { GD|FD, "7", "Digit Maps", NULL },
+ { FD, "7/1", "Digit Maps Length", NULL },
+ { FD, "7/2", "Digit Map Length for Overlapped Sending", NULL },
+ { FD, "7/3", "HTTP Digit Maps Download Capability", NULL },
+ { GD , "7/1", "Start Timer", NULL },
+ { GD , "7/2", "Short Timer", NULL },
+ { GD , "7/3", "Long Timer", NULL },
+ { GD , "7/4", "Digit Map String", NULL },
+ { GD , "7/5", "ToN Associated Digit Map", NULL },
+ { GD , "7/5/1", "Type of Number", NULL },
+ { GD , "7/5/2", "Digit Map Strings for ToN", NULL },
+ { GD , "7/6", "Digit Map URL", NULL },
+ /* H.460.8 */
+ { GD|FD, "8", "Querying for Alternate Routes", NULL },
+ { GD|FD, "8/1", "Query Count", NULL },
+ { GD|FD, "8/2", "Call Termination Cause", NULL },
+ /* H.460.9 */
+ { GD|FD, "9", "QoS-monitoring Reporting", NULL },
+ { GD|FD, "9/1", "qosMonitoringFinalOnly", NULL },
+ { GD|FD, "9/2", "qosMonitoringReportData", dissect_h460_9_QosMonitoringReportData_PDU },
+ { GD|FD, "9/3", "qosMonitoringExtendedRTPMetrics", dissect_h460_9_ExtendedRTPMetrics_PDU },
+ /* H.460.10 */
+ { GD|FD, "10", "Call Party Category", NULL },
+ { GD|FD, "10/1", "Call party category info", dissect_h460_10_CallPartyCategoryInfo_PDU },
+ /* H.460.11 */
+ { GD|FD, "11", "Delayed Call Establishment", NULL },
+ { GD|FD, "11/1", "Delay Point Indicator", NULL },
+ { GD|FD, "11/2", "Implicit DCE Release", NULL },
+ { GD|FD, "11/3", "Delay Point Reached", NULL },
+ { GD|FD, "11/4", "DCE Release", NULL },
+ /* H.460.12 */
+ { GD|FD, "12", "Glare Control Indicator", NULL },
+ { GD|FD, "12/1", "Glare Control Indicator Parameter", NULL },
+ /* H.460.13 */
+ { GD|FD, "13", "Called User Release Control", NULL },
+ { GD|FD, "13/1", "Called User Release Control", NULL },
+ /* H.460.14 */
+ { GD|FD, "14", "Multi-Level Precedence and Preemption", NULL },
+ { GD|FD, "14/1", "MLPP Information", dissect_h460_14_MLPPInfo_PDU },
+ /* H.460.15 */
+ { GD|FD, "15", "Call signalling transport channel suspension and redirection", NULL },
+ { GD|FD, "15/1", "Signalling channel suspend and redirect", dissect_h460_15_SignallingChannelData_PDU },
+ /* H.460.16 */
+ { GD|FD, "16", "Multiple-message Release Sequence", NULL },
+ { GD|FD, "16/1", "MMRS use required", NULL },
+ { GD|FD, "16/2", "MMRS procedure", NULL },
+ { GD|FD, "16/3", "MMRS additional IEs", dissect_ies },
+ /* H.460.17 */
+ { GD|FD, "17", "RAS over H.225.0", NULL },
+ { GD|FD, "17/1", "RAS message", dissect_ras },
+ /* H.460.18 */
+ { GD|FD|GM, "18", "Signalling Traversal", NULL },
+ { GD|FD , "18/1", "IncomingCallIndication", dissect_h460_18_IncomingCallIndication_PDU },
+ { GD|FD , "18/2", "LRQKeepAliveData", dissect_h460_18_LRQKeepAliveData_PDU },
+ { GM, "18-1", "connectionCorrelation", NULL },
+ { GM, "18-1/1", "callIdentifier", NULL },
+ { GM, "18-1/2", "answerCall", NULL },
+ /* H.460.19 */
+ { GD|FD|GI, "19", "mediaNATFWTraversal", NULL },
+ { GD|FD , "19/1", "supportTransmitMultiplexedMedia", NULL },
+ { GD|FD , "19/2", "mediaTraversalServer", NULL },
+ { GI, "19/1", "Traversal Parameters", dissect_h460_19_TraversalParameters_PDU },
+ /* H.460.20 */
+ { GD|FD, "20", "LocationSourceAddress", NULL },
+ { GD|FD, "20/1", "LocationSourceAddress", dissect_h225_ExtendedAliasAddress_PDU },
+ /* H.460.21 */
+ { GD|FD, "21", "Message Broadcast", NULL },
+ { GD|FD, "21/1", "MessageBroadcastParameter", dissect_h460_21_CapabilityAdvertisement_PDU },
+ /* H.460.22 */
+ { GD|FD, "22", "securityProtocolNegotiation", NULL },
+ { GD|FD, "22/1", "tlsSecurityProtocol", NULL },
+ { GD|FD, "22/1/1", "priority", NULL },
+ { GD|FD, "22/1/2", "connectionAddress", NULL },
+ { GD|FD, "22/2", "ipsecSecurityProtocol", NULL },
+ { GD|FD, "22/2/1", "priority", NULL },
+ { 0, NULL, NULL, NULL },
+};
+
+static h460_feature_t *find_ftr(const gchar *key) {
+ h460_feature_t *ftr = NULL;
+ h460_feature_t *f;
+
+ for (f=h460_feature_tab; f->id; f++) {
+ if (f->key_gd && !strcmp(key, f->key_gd)) { ftr = f; break; }
+ if (f->key_fd && !strcmp(key, f->key_fd)) { ftr = f; break; }
+ if (f->key_gm && !strcmp(key, f->key_gm)) { ftr = f; break; }
+ if (f->key_gi && !strcmp(key, f->key_gi)) { ftr = f; break; }
+ }
+ return ftr;
+}
+
+/*--- dissect_h460_name -------------------------------------------*/
+static int
+dissect_h460_name(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+ int offset = 0;
+ asn1_ctx_t *actx;
+ h460_feature_t *ftr;
+
+ actx = get_asn1_ctx(pinfo->private_data);
+ DISSECTOR_ASSERT(actx);
+ if (tree) {
+ /* DEBUG */ /*proto_tree_add_text(tree, tvb, 0, 0, "*** DEBUG dissect_h460_name: %s", pinfo->match_string);*/
+ ftr = find_ftr(pinfo->match_string);
+ /* DEBUG */ /*proto_tree_add_text(tree, tvb, 0, 0, "*** DEBUG dissect_h460_name: ftr %s", (ftr)?ftr->name:"-none-");*/
+ if (ftr) {
+ proto_item_append_text(actx->created_item, " - %s", ftr->name);
+ proto_item_append_text(proto_item_get_parent(proto_tree_get_parent(tree)), ": %s", ftr->name);
+ } else {
+ proto_item_append_text(actx->created_item, " - unknown(%s)", pinfo->match_string);
+ }
+ }
+
+ return offset;
+}
+
+/*--- proto_register_h460 ----------------------------------------------*/
+void proto_register_h460(void) {
+ h460_feature_t *ftr;
+
+ /* List of fields */
+ static hf_register_info hf[] = {
+
+/*--- Included file: packet-h460-hfarr.c ---*/
+#line 1 "packet-h460-hfarr.c"
+
+/* --- Module NUMBER-PORTABILITY --- --- --- */
+
+ { &hf_h460_2_h460_2_NumberPortabilityInfo_PDU,
+ { "NumberPortabilityInfo", "h460.2.NumberPortabilityInfo",
+ FT_UINT32, BASE_DEC, VALS(h460_2_NumberPortabilityInfo_vals), 0,
+ "h460_2.NumberPortabilityInfo", HFILL }},
+ { &hf_h460_2_numberPortabilityRejectReason,
+ { "numberPortabilityRejectReason", "h460.2.numberPortabilityRejectReason",
+ FT_UINT32, BASE_DEC, VALS(h460_2_NumberPortabilityRejectReason_vals), 0,
+ "h460_2.NumberPortabilityRejectReason", HFILL }},
+ { &hf_h460_2_nUMBERPORTABILITYDATA,
+ { "nUMBERPORTABILITYDATA", "h460.2.nUMBERPORTABILITYDATA",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_2.T_nUMBERPORTABILITYDATA", HFILL }},
+ { &hf_h460_2_addressTranslated,
+ { "addressTranslated", "h460.2.addressTranslated",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_2.NULL", HFILL }},
+ { &hf_h460_2_portedAddress,
+ { "portedAddress", "h460.2.portedAddress",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_2.PortabilityAddress", HFILL }},
+ { &hf_h460_2_routingAddress,
+ { "routingAddress", "h460.2.routingAddress",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_2.PortabilityAddress", HFILL }},
+ { &hf_h460_2_regionalParams,
+ { "regionalParams", "h460.2.regionalParams",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_2.RegionalParameters", HFILL }},
+ { &hf_h460_2_unspecified,
+ { "unspecified", "h460.2.unspecified",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_2.NULL", HFILL }},
+ { &hf_h460_2_qorPortedNumber,
+ { "qorPortedNumber", "h460.2.qorPortedNumber",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_2.NULL", HFILL }},
+ { &hf_h460_2_aliasAddress,
+ { "aliasAddress", "h460.2.aliasAddress",
+ FT_UINT32, BASE_DEC, VALS(AliasAddress_vals), 0,
+ "h225.AliasAddress", HFILL }},
+ { &hf_h460_2_typeOfAddress,
+ { "typeOfAddress", "h460.2.typeOfAddress",
+ FT_UINT32, BASE_DEC, VALS(h460_2_NumberPortabilityTypeOfNumber_vals), 0,
+ "h460_2.NumberPortabilityTypeOfNumber", HFILL }},
+ { &hf_h460_2_publicTypeOfNumber,
+ { "publicTypeOfNumber", "h460.2.publicTypeOfNumber",
+ FT_UINT32, BASE_DEC, VALS(h225_PublicTypeOfNumber_vals), 0,
+ "h225.PublicTypeOfNumber", HFILL }},
+ { &hf_h460_2_privateTypeOfNumber,
+ { "privateTypeOfNumber", "h460.2.privateTypeOfNumber",
+ FT_UINT32, BASE_DEC, VALS(h225_PrivateTypeOfNumber_vals), 0,
+ "h225.PrivateTypeOfNumber", HFILL }},
+ { &hf_h460_2_portabilityTypeOfNumber,
+ { "portabilityTypeOfNumber", "h460.2.portabilityTypeOfNumber",
+ FT_UINT32, BASE_DEC, VALS(h460_2_PortabilityTypeOfNumber_vals), 0,
+ "h460_2.PortabilityTypeOfNumber", HFILL }},
+ { &hf_h460_2_portedNumber,
+ { "portedNumber", "h460.2.portedNumber",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_2.NULL", HFILL }},
+ { &hf_h460_2_routingNumber,
+ { "routingNumber", "h460.2.routingNumber",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_2.NULL", HFILL }},
+ { &hf_h460_2_concatenatedNumber,
+ { "concatenatedNumber", "h460.2.concatenatedNumber",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_2.NULL", HFILL }},
+ { &hf_h460_2_t35CountryCode,
+ { "t35CountryCode", "h460.2.t35CountryCode",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_2.INTEGER_0_255", HFILL }},
+ { &hf_h460_2_t35Extension,
+ { "t35Extension", "h460.2.t35Extension",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_2.INTEGER_0_255", HFILL }},
+ { &hf_h460_2_variantIdentifier,
+ { "variantIdentifier", "h460.2.variantIdentifier",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_2.INTEGER_1_255", HFILL }},
+ { &hf_h460_2_regionalData,
+ { "regionalData", "h460.2.regionalData",
+ FT_BYTES, BASE_HEX, NULL, 0,
+ "h460_2.OCTET_STRING", HFILL }},
+
+/* --- Module CIRCUIT-STATUS-MAP --- --- --- */
+
+ { &hf_h460_3_h460_3_CircuitStatus_PDU,
+ { "CircuitStatus", "h460.3.CircuitStatus",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_3.CircuitStatus", HFILL }},
+ { &hf_h460_3_circuitStatusMap,
+ { "circuitStatusMap", "h460.3.circuitStatusMap",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_3.SEQUENCE_OF_CircuitStatusMap", HFILL }},
+ { &hf_h460_3_circuitStatusMap_item,
+ { "Item", "h460.3.circuitStatusMap_item",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_3.CircuitStatusMap", HFILL }},
+ { &hf_h460_3_statusType,
+ { "statusType", "h460.3.statusType",
+ FT_UINT32, BASE_DEC, VALS(h460_3_CircuitStatusType_vals), 0,
+ "h460_3.CircuitStatusType", HFILL }},
+ { &hf_h460_3_baseCircuitID,
+ { "baseCircuitID", "h460.3.baseCircuitID",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h225.CircuitIdentifier", HFILL }},
+ { &hf_h460_3_range,
+ { "range", "h460.3.range",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_3.INTEGER_0_4095", HFILL }},
+ { &hf_h460_3_status,
+ { "status", "h460.3.status",
+ FT_BYTES, BASE_HEX, NULL, 0,
+ "h460_3.OCTET_STRING", HFILL }},
+ { &hf_h460_3_serviceStatus,
+ { "serviceStatus", "h460.3.serviceStatus",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_3.NULL", HFILL }},
+ { &hf_h460_3_busyStatus,
+ { "busyStatus", "h460.3.busyStatus",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_3.NULL", HFILL }},
+
+/* --- Module CALL-PRIORITY --- --- --- */
+
+ { &hf_h460_4_h460_4_CallPriorityInfo_PDU,
+ { "CallPriorityInfo", "h460.4.CallPriorityInfo",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_4.CallPriorityInfo", HFILL }},
+ { &hf_h460_4_h460_4_CountryInternationalNetworkCallOriginationIdentification_PDU,
+ { "CountryInternationalNetworkCallOriginationIdentification", "h460.4.CountryInternationalNetworkCallOriginationIdentification",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_4.CountryInternationalNetworkCallOriginationIdentification", HFILL }},
+ { &hf_h460_4_priorityValue,
+ { "priorityValue", "h460.4.priorityValue",
+ FT_UINT32, BASE_DEC, VALS(h460_4_T_priorityValue_vals), 0,
+ "h460_4.T_priorityValue", HFILL }},
+ { &hf_h460_4_emergencyAuthorized,
+ { "emergencyAuthorized", "h460.4.emergencyAuthorized",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_4.NULL", HFILL }},
+ { &hf_h460_4_emergencyPublic,
+ { "emergencyPublic", "h460.4.emergencyPublic",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_4.NULL", HFILL }},
+ { &hf_h460_4_high,
+ { "high", "h460.4.high",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_4.NULL", HFILL }},
+ { &hf_h460_4_normal,
+ { "normal", "h460.4.normal",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_4.NULL", HFILL }},
+ { &hf_h460_4_priorityExtension,
+ { "priorityExtension", "h460.4.priorityExtension",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_4.INTEGER_0_255", HFILL }},
+ { &hf_h460_4_tokens,
+ { "tokens", "h460.4.tokens",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_4.SEQUENCE_OF_ClearToken", HFILL }},
+ { &hf_h460_4_tokens_item,
+ { "Item", "h460.4.tokens_item",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h235.ClearToken", HFILL }},
+ { &hf_h460_4_cryptoTokens,
+ { "cryptoTokens", "h460.4.cryptoTokens",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_4.SEQUENCE_OF_CryptoToken", HFILL }},
+ { &hf_h460_4_cryptoTokens_item,
+ { "Item", "h460.4.cryptoTokens_item",
+ FT_UINT32, BASE_DEC, VALS(h235_CryptoToken_vals), 0,
+ "h235.CryptoToken", HFILL }},
+ { &hf_h460_4_rejectReason,
+ { "rejectReason", "h460.4.rejectReason",
+ FT_UINT32, BASE_DEC, VALS(h460_4_T_rejectReason_vals), 0,
+ "h460_4.T_rejectReason", HFILL }},
+ { &hf_h460_4_priorityUnavailable,
+ { "priorityUnavailable", "h460.4.priorityUnavailable",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_4.NULL", HFILL }},
+ { &hf_h460_4_priorityUnauthorized,
+ { "priorityUnauthorized", "h460.4.priorityUnauthorized",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_4.NULL", HFILL }},
+ { &hf_h460_4_priorityValueUnknown,
+ { "priorityValueUnknown", "h460.4.priorityValueUnknown",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_4.NULL", HFILL }},
+ { &hf_h460_4_numberingPlan,
+ { "numberingPlan", "h460.4.numberingPlan",
+ FT_UINT32, BASE_DEC, VALS(h460_4_T_numberingPlan_vals), 0,
+ "h460_4.T_numberingPlan", HFILL }},
+ { &hf_h460_4_x121,
+ { "x121", "h460.4.x121",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_4.T_x121", HFILL }},
+ { &hf_h460_4_x121CountryCode,
+ { "countryCode", "h460.4.countryCode",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "h460_4.X121CountryCode", HFILL }},
+ { &hf_h460_4_e164,
+ { "e164", "h460.4.e164",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_4.T_e164", HFILL }},
+ { &hf_h460_4_e164CountryCode,
+ { "countryCode", "h460.4.countryCode",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "h460_4.E164CountryCode", HFILL }},
+ { &hf_h460_4_identificationCode,
+ { "identificationCode", "h460.4.identificationCode",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "h460_4.T_identificationCode", HFILL }},
+
+/* --- Modules QOS-MONITORING-REPORT QOS-MONITORING-EXTENDED-VOIP-REPORT --- --- --- */
+
+ { &hf_h460_9_h460_9_QosMonitoringReportData_PDU,
+ { "QosMonitoringReportData", "h460.9.QosMonitoringReportData",
+ FT_UINT32, BASE_DEC, VALS(h460_9_QosMonitoringReportData_vals), 0,
+ "h460_9.QosMonitoringReportData", HFILL }},
+ { &hf_h460_9_h460_9_ExtendedRTPMetrics_PDU,
+ { "ExtendedRTPMetrics", "h460.9.ExtendedRTPMetrics",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_9.ExtendedRTPMetrics", HFILL }},
+ { &hf_h460_9_extensionId,
+ { "extensionId", "h460.9.extensionId",
+ FT_UINT32, BASE_DEC, VALS(h225_GenericIdentifier_vals), 0,
+ "h225.GenericIdentifier", HFILL }},
+ { &hf_h460_9_extensionContent,
+ { "extensionContent", "h460.9.extensionContent",
+ FT_BYTES, BASE_HEX, NULL, 0,
+ "h460_9.OCTET_STRING", HFILL }},
+ { &hf_h460_9_rtpAddress,
+ { "rtpAddress", "h460.9.rtpAddress",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h225.TransportChannelInfo", HFILL }},
+ { &hf_h460_9_rtcpAddress,
+ { "rtcpAddress", "h460.9.rtcpAddress",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h225.TransportChannelInfo", HFILL }},
+ { &hf_h460_9_sessionId,
+ { "sessionId", "h460.9.sessionId",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_9.INTEGER_1_255", HFILL }},
+ { &hf_h460_9_nonStandardData,
+ { "nonStandardData", "h460.9.nonStandardData",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h225.NonStandardParameter", HFILL }},
+ { &hf_h460_9_mediaSenderMeasures,
+ { "mediaSenderMeasures", "h460.9.mediaSenderMeasures",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_9.T_mediaSenderMeasures", HFILL }},
+ { &hf_h460_9_worstEstimatedEnd2EndDelay,
+ { "worstEstimatedEnd2EndDelay", "h460.9.worstEstimatedEnd2EndDelay",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_9.EstimatedEnd2EndDelay", HFILL }},
+ { &hf_h460_9_meanEstimatedEnd2EndDelay,
+ { "meanEstimatedEnd2EndDelay", "h460.9.meanEstimatedEnd2EndDelay",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_9.EstimatedEnd2EndDelay", HFILL }},
+ { &hf_h460_9_mediaReceiverMeasures,
+ { "mediaReceiverMeasures", "h460.9.mediaReceiverMeasures",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_9.T_mediaReceiverMeasures", HFILL }},
+ { &hf_h460_9_cumulativeNumberOfPacketsLost,
+ { "cumulativeNumberOfPacketsLost", "h460.9.cumulativeNumberOfPacketsLost",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_9.INTEGER_0_4294967295", HFILL }},
+ { &hf_h460_9_packetLostRate,
+ { "packetLostRate", "h460.9.packetLostRate",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_9.INTEGER_0_65535", HFILL }},
+ { &hf_h460_9_worstJitter,
+ { "worstJitter", "h460.9.worstJitter",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_9.CalculatedJitter", HFILL }},
+ { &hf_h460_9_estimatedThroughput,
+ { "estimatedThroughput", "h460.9.estimatedThroughput",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h225.BandWidth", HFILL }},
+ { &hf_h460_9_fractionLostRate,
+ { "fractionLostRate", "h460.9.fractionLostRate",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_9.INTEGER_0_65535", HFILL }},
+ { &hf_h460_9_meanJitter,
+ { "meanJitter", "h460.9.meanJitter",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_9.CalculatedJitter", HFILL }},
+ { &hf_h460_9_extensions,
+ { "extensions", "h460.9.extensions",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_9.SEQUENCE_OF_Extension", HFILL }},
+ { &hf_h460_9_extensions_item,
+ { "Item", "h460.9.extensions_item",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_9.Extension", HFILL }},
+ { &hf_h460_9_callReferenceValue,
+ { "callReferenceValue", "h460.9.callReferenceValue",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h225.CallReferenceValue", HFILL }},
+ { &hf_h460_9_conferenceID,
+ { "conferenceID", "h460.9.conferenceID",
+ FT_GUID, BASE_NONE, NULL, 0,
+ "h225.ConferenceIdentifier", HFILL }},
+ { &hf_h460_9_callIdentifier,
+ { "callIdentifier", "h460.9.callIdentifier",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h225.CallIdentifier", HFILL }},
+ { &hf_h460_9_mediaChannelsQoS,
+ { "mediaChannelsQoS", "h460.9.mediaChannelsQoS",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_9.SEQUENCE_OF_RTCPMeasures", HFILL }},
+ { &hf_h460_9_mediaChannelsQoS_item,
+ { "Item", "h460.9.mediaChannelsQoS_item",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_9.RTCPMeasures", HFILL }},
+ { &hf_h460_9_periodic,
+ { "periodic", "h460.9.periodic",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_9.PeriodicQoSMonReport", HFILL }},
+ { &hf_h460_9_final,
+ { "final", "h460.9.final",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_9.FinalQosMonReport", HFILL }},
+ { &hf_h460_9_interGK,
+ { "interGK", "h460.9.interGK",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_9.InterGKQosMonReport", HFILL }},
+ { &hf_h460_9_perCallInfo,
+ { "perCallInfo", "h460.9.perCallInfo",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_9.SEQUENCE_OF_PerCallQoSReport", HFILL }},
+ { &hf_h460_9_perCallInfo_item,
+ { "Item", "h460.9.perCallInfo_item",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_9.PerCallQoSReport", HFILL }},
+ { &hf_h460_9_mediaInfo,
+ { "mediaInfo", "h460.9.mediaInfo",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_9.SEQUENCE_OF_RTCPMeasures", HFILL }},
+ { &hf_h460_9_mediaInfo_item,
+ { "Item", "h460.9.mediaInfo_item",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_9.RTCPMeasures", HFILL }},
+ { &hf_h460_9_networkPacketLossRate,
+ { "networkPacketLossRate", "h460.9.networkPacketLossRate",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_9.INTEGER_0_255", HFILL }},
+ { &hf_h460_9_jitterBufferDiscardRate,
+ { "jitterBufferDiscardRate", "h460.9.jitterBufferDiscardRate",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_9.INTEGER_0_255", HFILL }},
+ { &hf_h460_9_burstMetrics,
+ { "burstMetrics", "h460.9.burstMetrics",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_9.BurstMetrics", HFILL }},
+ { &hf_h460_9_rtcpRoundTripDelay,
+ { "rtcpRoundTripDelay", "h460.9.rtcpRoundTripDelay",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_9.INTEGER_0_65535", HFILL }},
+ { &hf_h460_9_endSystemDelay,
+ { "endSystemDelay", "h460.9.endSystemDelay",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_9.INTEGER_0_65535", HFILL }},
+ { &hf_h460_9_signalLevel,
+ { "signalLevel", "h460.9.signalLevel",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "h460_9.INTEGER_M127_10", HFILL }},
+ { &hf_h460_9_noiseLevel,
+ { "noiseLevel", "h460.9.noiseLevel",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "h460_9.INTEGER_M127_0", HFILL }},
+ { &hf_h460_9_residualEchoReturnLoss,
+ { "residualEchoReturnLoss", "h460.9.residualEchoReturnLoss",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_9.INTEGER_0_127", HFILL }},
+ { &hf_h460_9_rFactor,
+ { "rFactor", "h460.9.rFactor",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_9.INTEGER_0_100", HFILL }},
+ { &hf_h460_9_extRFactor,
+ { "extRFactor", "h460.9.extRFactor",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_9.INTEGER_0_100", HFILL }},
+ { &hf_h460_9_estimatedMOSLQ,
+ { "estimatedMOSLQ", "h460.9.estimatedMOSLQ",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_9.INTEGER_10_50", HFILL }},
+ { &hf_h460_9_estimatedMOSCQ,
+ { "estimatedMOSCQ", "h460.9.estimatedMOSCQ",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_9.INTEGER_10_50", HFILL }},
+ { &hf_h460_9_plcType,
+ { "plcType", "h460.9.plcType",
+ FT_UINT32, BASE_DEC, VALS(h460_9_PLCtypes_vals), 0,
+ "h460_9.PLCtypes", HFILL }},
+ { &hf_h460_9_jitterBufferParms,
+ { "jitterBufferParms", "h460.9.jitterBufferParms",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_9.JitterBufferParms", HFILL }},
+ { &hf_h460_9_gmin,
+ { "gmin", "h460.9.gmin",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_9.INTEGER_0_255", HFILL }},
+ { &hf_h460_9_burstLossDensity,
+ { "burstLossDensity", "h460.9.burstLossDensity",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_9.INTEGER_0_255", HFILL }},
+ { &hf_h460_9_gapLossDensity,
+ { "gapLossDensity", "h460.9.gapLossDensity",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_9.INTEGER_0_255", HFILL }},
+ { &hf_h460_9_burstDuration,
+ { "burstDuration", "h460.9.burstDuration",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_9.INTEGER_0_65535", HFILL }},
+ { &hf_h460_9_gapDuration,
+ { "gapDuration", "h460.9.gapDuration",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_9.INTEGER_0_65535", HFILL }},
+ { &hf_h460_9_unspecified,
+ { "unspecified", "h460.9.unspecified",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_9.NULL", HFILL }},
+ { &hf_h460_9_disabled,
+ { "disabled", "h460.9.disabled",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_9.NULL", HFILL }},
+ { &hf_h460_9_enhanced,
+ { "enhanced", "h460.9.enhanced",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_9.NULL", HFILL }},
+ { &hf_h460_9_standard,
+ { "standard", "h460.9.standard",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_9.NULL", HFILL }},
+ { &hf_h460_9_jitterBufferType,
+ { "jitterBufferType", "h460.9.jitterBufferType",
+ FT_UINT32, BASE_DEC, VALS(h460_9_JitterBufferTypes_vals), 0,
+ "h460_9.JitterBufferTypes", HFILL }},
+ { &hf_h460_9_jitterBufferAdaptRate,
+ { "jitterBufferAdaptRate", "h460.9.jitterBufferAdaptRate",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_9.INTEGER_0_15", HFILL }},
+ { &hf_h460_9_jitterBufferNominalSize,
+ { "jitterBufferNominalSize", "h460.9.jitterBufferNominalSize",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_9.INTEGER_0_65535", HFILL }},
+ { &hf_h460_9_jitterBufferMaxSize,
+ { "jitterBufferMaxSize", "h460.9.jitterBufferMaxSize",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_9.INTEGER_0_65535", HFILL }},
+ { &hf_h460_9_jitterBufferAbsoluteMax,
+ { "jitterBufferAbsoluteMax", "h460.9.jitterBufferAbsoluteMax",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_9.INTEGER_0_65535", HFILL }},
+ { &hf_h460_9_unknown,
+ { "unknown", "h460.9.unknown",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_9.NULL", HFILL }},
+ { &hf_h460_9_reserved,
+ { "reserved", "h460.9.reserved",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_9.NULL", HFILL }},
+ { &hf_h460_9_nonadaptive,
+ { "nonadaptive", "h460.9.nonadaptive",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_9.NULL", HFILL }},
+ { &hf_h460_9_adaptive,
+ { "adaptive", "h460.9.adaptive",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_9.NULL", HFILL }},
+
+/* --- Module CALL-PARTY-CATEGORY --- --- --- */
+
+ { &hf_h460_10_h460_10_CallPartyCategoryInfo_PDU,
+ { "CallPartyCategoryInfo", "h460.10.CallPartyCategoryInfo",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_10.CallPartyCategoryInfo", HFILL }},
+ { &hf_h460_10_callPartyCategory,
+ { "callPartyCategory", "h460.10.callPartyCategory",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_10.CallPartyCategory", HFILL }},
+ { &hf_h460_10_originatingLineInfo,
+ { "originatingLineInfo", "h460.10.originatingLineInfo",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_10.OriginatingLineInfo", HFILL }},
+
+/* --- Module MLPP --- --- --- */
+
+ { &hf_h460_14_h460_14_MLPPInfo_PDU,
+ { "MLPPInfo", "h460.14.MLPPInfo",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_14.MLPPInfo", HFILL }},
+ { &hf_h460_14_precedence,
+ { "precedence", "h460.14.precedence",
+ FT_UINT32, BASE_DEC, VALS(h460_14_MlppPrecedence_vals), 0,
+ "h460_14.MlppPrecedence", HFILL }},
+ { &hf_h460_14_mlppReason,
+ { "mlppReason", "h460.14.mlppReason",
+ FT_UINT32, BASE_DEC, VALS(h460_14_MlppReason_vals), 0,
+ "h460_14.MlppReason", HFILL }},
+ { &hf_h460_14_mlppNotification,
+ { "mlppNotification", "h460.14.mlppNotification",
+ FT_UINT32, BASE_DEC, VALS(h460_14_MlppNotification_vals), 0,
+ "h460_14.MlppNotification", HFILL }},
+ { &hf_h460_14_alternateParty,
+ { "alternateParty", "h460.14.alternateParty",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_14.AlternateParty", HFILL }},
+ { &hf_h460_14_releaseCall,
+ { "releaseCall", "h460.14.releaseCall",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_14.ReleaseCall", HFILL }},
+ { &hf_h460_14_preemptionPending,
+ { "preemptionPending", "h460.14.preemptionPending",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_14.NULL", HFILL }},
+ { &hf_h460_14_preemptionInProgress,
+ { "preemptionInProgress", "h460.14.preemptionInProgress",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_14.NULL", HFILL }},
+ { &hf_h460_14_preemptionEnd,
+ { "preemptionEnd", "h460.14.preemptionEnd",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_14.NULL", HFILL }},
+ { &hf_h460_14_preemptionComplete,
+ { "preemptionComplete", "h460.14.preemptionComplete",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_14.NULL", HFILL }},
+ { &hf_h460_14_altID,
+ { "altID", "h460.14.altID",
+ FT_UINT32, BASE_DEC, VALS(AliasAddress_vals), 0,
+ "h225.AliasAddress", HFILL }},
+ { &hf_h460_14_altTimer,
+ { "altTimer", "h460.14.altTimer",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_14.INTEGER_0_255", HFILL }},
+ { &hf_h460_14_preemptCallID,
+ { "preemptCallID", "h460.14.preemptCallID",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h225.CallIdentifier", HFILL }},
+ { &hf_h460_14_releaseReason,
+ { "releaseReason", "h460.14.releaseReason",
+ FT_UINT32, BASE_DEC, VALS(h460_14_MlppReason_vals), 0,
+ "h460_14.MlppReason", HFILL }},
+ { &hf_h460_14_releaseDelay,
+ { "releaseDelay", "h460.14.releaseDelay",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_14.INTEGER_0_255", HFILL }},
+
+/* --- Module SIGNALLING-CHANNEL-SUSPEND-REDIRECT --- --- --- */
+
+ { &hf_h460_15_h460_15_SignallingChannelData_PDU,
+ { "SignallingChannelData", "h460.15.SignallingChannelData",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_15.SignallingChannelData", HFILL }},
+ { &hf_h460_15_signallingChannelData,
+ { "signallingChannelData", "h460.15.signallingChannelData",
+ FT_UINT32, BASE_DEC, VALS(h460_15_T_signallingChannelData_vals), 0,
+ "h460_15.T_signallingChannelData", HFILL }},
+ { &hf_h460_15_channelSuspendRequest,
+ { "channelSuspendRequest", "h460.15.channelSuspendRequest",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_15.ChannelSuspendRequest", HFILL }},
+ { &hf_h460_15_channelSuspendResponse,
+ { "channelSuspendResponse", "h460.15.channelSuspendResponse",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_15.ChannelSuspendResponse", HFILL }},
+ { &hf_h460_15_channelSuspendConfirm,
+ { "channelSuspendConfirm", "h460.15.channelSuspendConfirm",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_15.ChannelSuspendConfirm", HFILL }},
+ { &hf_h460_15_channelSuspendCancel,
+ { "channelSuspendCancel", "h460.15.channelSuspendCancel",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_15.ChannelSuspendCancel", HFILL }},
+ { &hf_h460_15_channelResumeRequest,
+ { "channelResumeRequest", "h460.15.channelResumeRequest",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_15.ChannelResumeRequest", HFILL }},
+ { &hf_h460_15_channelResumeResponse,
+ { "channelResumeResponse", "h460.15.channelResumeResponse",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_15.ChannelResumeResponse", HFILL }},
+ { &hf_h460_15_channelResumeAddress,
+ { "channelResumeAddress", "h460.15.channelResumeAddress",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_15.SEQUENCE_OF_TransportAddress", HFILL }},
+ { &hf_h460_15_channelResumeAddress_item,
+ { "Item", "h460.15.channelResumeAddress_item",
+ FT_UINT32, BASE_DEC, VALS(h225_TransportAddress_vals), 0,
+ "h225.TransportAddress", HFILL }},
+ { &hf_h460_15_immediateResume,
+ { "immediateResume", "h460.15.immediateResume",
+ FT_BOOLEAN, 8, NULL, 0,
+ "h460_15.BOOLEAN", HFILL }},
+ { &hf_h460_15_resetH245,
+ { "resetH245", "h460.15.resetH245",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_15.NULL", HFILL }},
+ { &hf_h460_15_okToSuspend,
+ { "okToSuspend", "h460.15.okToSuspend",
+ FT_BOOLEAN, 8, NULL, 0,
+ "h460_15.BOOLEAN", HFILL }},
+ { &hf_h460_15_randomNumber,
+ { "randomNumber", "h460.15.randomNumber",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_15.INTEGER_0_4294967295", HFILL }},
+
+/* --- Module SIGNALLING-TRAVERSAL --- --- --- */
+
+ { &hf_h460_18_h460_18_IncomingCallIndication_PDU,
+ { "IncomingCallIndication", "h460.18.IncomingCallIndication",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_18.IncomingCallIndication", HFILL }},
+ { &hf_h460_18_h460_18_LRQKeepAliveData_PDU,
+ { "LRQKeepAliveData", "h460.18.LRQKeepAliveData",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_18.LRQKeepAliveData", HFILL }},
+ { &hf_h460_18_callSignallingAddress,
+ { "callSignallingAddress", "h460.18.callSignallingAddress",
+ FT_UINT32, BASE_DEC, VALS(h225_TransportAddress_vals), 0,
+ "h225.TransportAddress", HFILL }},
+ { &hf_h460_18_callID,
+ { "callID", "h460.18.callID",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h225.CallIdentifier", HFILL }},
+ { &hf_h460_18_lrqKeepAliveInterval,
+ { "lrqKeepAliveInterval", "h460.18.lrqKeepAliveInterval",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h225.TimeToLive", HFILL }},
+
+/* --- Module MEDIA-TRAVERSAL --- --- --- */
+
+ { &hf_h460_19_h460_19_TraversalParameters_PDU,
+ { "TraversalParameters", "h460.19.TraversalParameters",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_19.TraversalParameters", HFILL }},
+ { &hf_h460_19_multiplexedMediaChannel,
+ { "multiplexedMediaChannel", "h460.19.multiplexedMediaChannel",
+ FT_UINT32, BASE_DEC, VALS(h225_TransportAddress_vals), 0,
+ "h245.TransportAddress", HFILL }},
+ { &hf_h460_19_multiplexedMediaControlChannel,
+ { "multiplexedMediaControlChannel", "h460.19.multiplexedMediaControlChannel",
+ FT_UINT32, BASE_DEC, VALS(h225_TransportAddress_vals), 0,
+ "h245.TransportAddress", HFILL }},
+ { &hf_h460_19_multiplexID,
+ { "multiplexID", "h460.19.multiplexID",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_19.INTEGER_0_4294967295", HFILL }},
+ { &hf_h460_19_keepAliveChannel,
+ { "keepAliveChannel", "h460.19.keepAliveChannel",
+ FT_UINT32, BASE_DEC, VALS(h225_TransportAddress_vals), 0,
+ "h245.TransportAddress", HFILL }},
+ { &hf_h460_19_keepAlivePayloadType,
+ { "keepAlivePayloadType", "h460.19.keepAlivePayloadType",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_19.INTEGER_0_127", HFILL }},
+ { &hf_h460_19_keepAliveInterval,
+ { "keepAliveInterval", "h460.19.keepAliveInterval",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h225.TimeToLive", HFILL }},
+
+/* --- Module MESSAGE-BROADCAST --- --- --- */
+
+ { &hf_h460_21_h460_21_CapabilityAdvertisement_PDU,
+ { "CapabilityAdvertisement", "h460.21.CapabilityAdvertisement",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_21.CapabilityAdvertisement", HFILL }},
+ { &hf_h460_21_receiveCapabilities,
+ { "receiveCapabilities", "h460.21.receiveCapabilities",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_21.ReceiveCapabilities", HFILL }},
+ { &hf_h460_21_transmitCapabilities,
+ { "transmitCapabilities", "h460.21.transmitCapabilities",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_21.SEQUENCE_SIZE_1_256_OF_TransmitCapabilities", HFILL }},
+ { &hf_h460_21_transmitCapabilities_item,
+ { "Item", "h460.21.transmitCapabilities_item",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_21.TransmitCapabilities", HFILL }},
+ { &hf_h460_21_capabilities,
+ { "capabilities", "h460.21.capabilities",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_21.SEQUENCE_SIZE_1_256_OF_Capability", HFILL }},
+ { &hf_h460_21_capabilities_item,
+ { "Item", "h460.21.capabilities_item",
+ FT_UINT32, BASE_DEC, VALS(h245_Capability_vals), 0,
+ "h245.Capability", HFILL }},
+ { &hf_h460_21_maxGroups,
+ { "maxGroups", "h460.21.maxGroups",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_21.INTEGER_1_65535", HFILL }},
+ { &hf_h460_21_groupIdentifer,
+ { "groupIdentifer", "h460.21.groupIdentifer",
+ FT_GUID, BASE_NONE, NULL, 0,
+ "h460_21.GloballyUniqueID", HFILL }},
+ { &hf_h460_21_capability,
+ { "capability", "h460.21.capability",
+ FT_UINT32, BASE_DEC, VALS(h245_Capability_vals), 0,
+ "h245.Capability", HFILL }},
+ { &hf_h460_21_sourceAddress,
+ { "sourceAddress", "h460.21.sourceAddress",
+ FT_UINT32, BASE_DEC, VALS(h245_UnicastAddress_vals), 0,
+ "h245.UnicastAddress", HFILL }},
+ { &hf_h460_21_MessageBroadcastGroups_item,
+ { "Item", "h460.21.MessageBroadcastGroups_item",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "h460_21.GroupAttributes", HFILL }},
+ { &hf_h460_21_priority,
+ { "priority", "h460.21.priority",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "h460_21.INTEGER_0_255", HFILL }},
+ { &hf_h460_21_groupAddress,
+ { "groupAddress", "h460.21.groupAddress",
+ FT_UINT32, BASE_DEC, VALS(h245_MulticastAddress_vals), 0,
+ "h245.MulticastAddress", HFILL }},
+ { &hf_h460_21_alertUser,
+ { "alertUser", "h460.21.alertUser",
+ FT_BOOLEAN, 8, NULL, 0,
+ "h460_21.BOOLEAN", HFILL }},
+
+/*--- End of included file: packet-h460-hfarr.c ---*/
+#line 247 "packet-h460-template.c"
+ };
+
+ /* List of subtrees */
+ static gint *ett[] = {
+
+/*--- Included file: packet-h460-ettarr.c ---*/
+#line 1 "packet-h460-ettarr.c"
+
+/* --- Module NUMBER-PORTABILITY --- --- --- */
+
+ &ett_h460_2_NumberPortabilityInfo,
+ &ett_h460_2_T_nUMBERPORTABILITYDATA,
+ &ett_h460_2_NumberPortabilityRejectReason,
+ &ett_h460_2_PortabilityAddress,
+ &ett_h460_2_NumberPortabilityTypeOfNumber,
+ &ett_h460_2_PortabilityTypeOfNumber,
+ &ett_h460_2_RegionalParameters,
+
+/* --- Module CIRCUIT-STATUS-MAP --- --- --- */
+
+ &ett_h460_3_CircuitStatus,
+ &ett_h460_3_SEQUENCE_OF_CircuitStatusMap,
+ &ett_h460_3_CircuitStatusMap,
+ &ett_h460_3_CircuitStatusType,
+
+/* --- Module CALL-PRIORITY --- --- --- */
+
+ &ett_h460_4_CallPriorityInfo,
+ &ett_h460_4_T_priorityValue,
+ &ett_h460_4_SEQUENCE_OF_ClearToken,
+ &ett_h460_4_SEQUENCE_OF_CryptoToken,
+ &ett_h460_4_T_rejectReason,
+ &ett_h460_4_CountryInternationalNetworkCallOriginationIdentification,
+ &ett_h460_4_T_numberingPlan,
+ &ett_h460_4_T_x121,
+ &ett_h460_4_T_e164,
+
+/* --- Modules QOS-MONITORING-REPORT QOS-MONITORING-EXTENDED-VOIP-REPORT --- --- --- */
+
+ &ett_h460_9_Extension,
+ &ett_h460_9_RTCPMeasures,
+ &ett_h460_9_T_mediaSenderMeasures,
+ &ett_h460_9_T_mediaReceiverMeasures,
+ &ett_h460_9_SEQUENCE_OF_Extension,
+ &ett_h460_9_PerCallQoSReport,
+ &ett_h460_9_SEQUENCE_OF_RTCPMeasures,
+ &ett_h460_9_QosMonitoringReportData,
+ &ett_h460_9_PeriodicQoSMonReport,
+ &ett_h460_9_SEQUENCE_OF_PerCallQoSReport,
+ &ett_h460_9_FinalQosMonReport,
+ &ett_h460_9_InterGKQosMonReport,
+ &ett_h460_9_ExtendedRTPMetrics,
+ &ett_h460_9_BurstMetrics,
+ &ett_h460_9_PLCtypes,
+ &ett_h460_9_JitterBufferParms,
+ &ett_h460_9_JitterBufferTypes,
+
+/* --- Module CALL-PARTY-CATEGORY --- --- --- */
+
+ &ett_h460_10_CallPartyCategoryInfo,
+
+/* --- Module MLPP --- --- --- */
+
+ &ett_h460_14_MLPPInfo,
+ &ett_h460_14_MlppNotification,
+ &ett_h460_14_AlternateParty,
+ &ett_h460_14_ReleaseCall,
+
+/* --- Module SIGNALLING-CHANNEL-SUSPEND-REDIRECT --- --- --- */
+
+ &ett_h460_15_SignallingChannelData,
+ &ett_h460_15_T_signallingChannelData,
+ &ett_h460_15_ChannelSuspendRequest,
+ &ett_h460_15_SEQUENCE_OF_TransportAddress,
+ &ett_h460_15_ChannelSuspendResponse,
+ &ett_h460_15_ChannelSuspendConfirm,
+ &ett_h460_15_ChannelSuspendCancel,
+ &ett_h460_15_ChannelResumeRequest,
+ &ett_h460_15_ChannelResumeResponse,
+
+/* --- Module SIGNALLING-TRAVERSAL --- --- --- */
+
+ &ett_h460_18_IncomingCallIndication,
+ &ett_h460_18_LRQKeepAliveData,
+
+/* --- Module MEDIA-TRAVERSAL --- --- --- */
+
+ &ett_h460_19_TraversalParameters,
+
+/* --- Module MESSAGE-BROADCAST --- --- --- */
+
+ &ett_h460_21_CapabilityAdvertisement,
+ &ett_h460_21_SEQUENCE_SIZE_1_256_OF_TransmitCapabilities,
+ &ett_h460_21_ReceiveCapabilities,
+ &ett_h460_21_SEQUENCE_SIZE_1_256_OF_Capability,
+ &ett_h460_21_TransmitCapabilities,
+ &ett_h460_21_MessageBroadcastGroups,
+ &ett_h460_21_GroupAttributes,
+
+/*--- End of included file: packet-h460-ettarr.c ---*/
+#line 252 "packet-h460-template.c"
+ };
+
+ /* Register protocol */
+ proto_h460 = proto_register_protocol(PNAME, PSNAME, PFNAME);
+
+ /* Register fields and subtrees */
+ proto_register_field_array(proto_h460, hf, array_length(hf));
+ proto_register_subtree_array(ett, array_length(ett));
+
+ for (ftr=h460_feature_tab; ftr->id; ftr++) {
+ if (ftr->opt & GD) ftr->key_gd = ep_strdup_printf("GenericData/%s", ftr->id);
+ if (ftr->opt & FD) ftr->key_fd = ep_strdup_printf("FeatureDescriptor/%s", ftr->id);
+ if (ftr->opt & GM) ftr->key_gm = ep_strdup_printf("GenericMessage/%s", ftr->id);
+ if (ftr->opt & GI) ftr->key_gi = ep_strdup_printf("GenericInformation/%s", ftr->id);
+ if (ftr->content_pdu) ftr->content_hnd = new_create_dissector_handle(ftr->content_pdu, proto_h460);
+ }
+}
+
+/*--- proto_reg_handoff_h460 -------------------------------------------*/
+void proto_reg_handoff_h460(void)
+{
+ h460_feature_t *ftr;
+ dissector_handle_t h460_name_handle;
+
+ q931_ie_handle = find_dissector("q931.ie");
+ h225_ras_handle = find_dissector("h225.ras");
+
+ h460_name_handle = new_create_dissector_handle(dissect_h460_name, proto_h460);
+ for (ftr=h460_feature_tab; ftr->id; ftr++) {
+ if (ftr->key_gd) dissector_add_string("h225.gef.name", ftr->key_gd, h460_name_handle);
+ if (ftr->key_fd) dissector_add_string("h225.gef.name", ftr->key_fd, h460_name_handle);
+/* if (ftr->key_gm) dissector_add_string("h245.gef.name", ftr->key_gm, h460_name_handle);
+ if (ftr->key_gi) dissector_add_string("h245.gef.name", ftr->key_gi, h460_name_handle);*/
+ if (ftr->content_hnd) {
+ if (ftr->key_gd) dissector_add_string("h225.gef.content", ftr->key_gd, ftr->content_hnd);
+ if (ftr->key_fd) dissector_add_string("h225.gef.content", ftr->key_fd, ftr->content_hnd);
+ if (ftr->key_gm) dissector_add_string("h245.gef.content", ftr->key_gm, ftr->content_hnd);
+ if (ftr->key_gi) dissector_add_string("h245.gef.content", ftr->key_gi, ftr->content_hnd);
+ }
+ }
+
+}
+
diff --git a/epan/libwireshark.def b/epan/libwireshark.def
index a2d3cca9de..e304183ef9 100644
--- a/epan/libwireshark.def
+++ b/epan/libwireshark.def
@@ -450,6 +450,7 @@ guids_add_guid
guids_get_guid_name
guids_init
guids_resolve_guid_to_str
+h225_RasMessage_vals DATA
h225_ReleaseCompleteReason_vals DATA
h245_set_h223_add_lc_handle
h245_set_h223_set_mc_handle
@@ -682,7 +683,6 @@ range_copy
range_empty
range_foreach
ranges_are_equal
-RasMessage_vals DATA
read_prefs
read_prefs_file
reassembled_table_init
diff --git a/gtk/h225_counter.c b/gtk/h225_counter.c
index a999d4f444..11b6f7099b 100644
--- a/gtk/h225_counter.c
+++ b/gtk/h225_counter.c
@@ -312,7 +312,7 @@ h225counter_draw(void *phs)
for(i=0;i<=RAS_MSG_TYPES;i++) {
if(hs->ras_msg[i]!=0) {
g_snprintf(str[0], sizeof(char[256]),
- "%s", val_to_str(i,RasMessage_vals,"unknown ras-messages "));
+ "%s", val_to_str(i,h225_RasMessage_vals,"unknown ras-messages "));
g_snprintf(str[1], sizeof(char[256]),
"%d", hs->ras_msg[i]);
gtk_clist_append(hs->table, str);
diff --git a/gtk/voip_calls.c b/gtk/voip_calls.c
index 2e9a14e4e4..d2b62ee513 100644
--- a/gtk/voip_calls.c
+++ b/gtk/voip_calls.c
@@ -1915,7 +1915,7 @@ H225calls_packet(void *ptr _U_, packet_info *pinfo, epan_dissect_t *edt _U_, con
default:
comment = g_strdup("H225 RAS");
}
- frame_label = g_strdup_printf("%s", val_to_str(pi->msg_tag, RasMessage_vals, "<unknown>"));
+ frame_label = g_strdup_printf("%s", val_to_str(pi->msg_tag, h225_RasMessage_vals, "<unknown>"));
} else {
frame_label = g_strdup("H225: Unknown");
comment = g_strdup("");
diff --git a/tap-h225counter.c b/tap-h225counter.c
index 933c9f69aa..5e6388b62d 100644
--- a/tap-h225counter.c
+++ b/tap-h225counter.c
@@ -242,7 +242,7 @@ h225counter_draw(void *phs)
printf("RAS-Messages:\n");
for(i=0;i<=RAS_MSG_TYPES;i++) {
if(hs->ras_msg[i]!=0) {
- printf(" %s : %u\n", val_to_str(i,RasMessage_vals,"unknown ras-messages "), hs->ras_msg[i]);
+ printf(" %s : %u\n", val_to_str(i,h225_RasMessage_vals,"unknown ras-messages "), hs->ras_msg[i]);
/* reason counter */
switch(i) {
case 2: /* GRJ */
diff --git a/tools/asn2wrs.py b/tools/asn2wrs.py
index ecc6ce97fd..975625da03 100755
--- a/tools/asn2wrs.py
+++ b/tools/asn2wrs.py
@@ -960,6 +960,7 @@ class EthCtx:
self.field[ident]['modified'] = '#' + str(id(self))
self.field[ident]['attr'].update(self.conform.use_item('FIELD_ATTR', ident))
if (pdu):
+ self.field[ident]['pdu']['export'] = (self.conform.use_item('EXPORTS', ident + '_PDU') != 0)
self.pdu_ord.append(ident)
else:
self.field_ord.append(ident)
@@ -1197,7 +1198,7 @@ class EthCtx:
nm = asn2c(nm)
if (self.field[f]['pdu']):
nm += '_PDU'
- if (not self.merge_modules):
+ if (not self.merge_modules or self.field[f]['pdu']['export']):
nm = self.eproto + '_' + nm
t = self.field[f]['type']
if self.type.has_key(t):
@@ -1302,9 +1303,9 @@ class EthCtx:
out = ""
has_enum = self.eth_type[tname]['enum'] & EF_ENUM
if (not self.eth_type[tname]['export'] & EF_VALS):
- out += "static "
+ out += 'static '
if (self.eth_type[tname]['export'] & EF_VALS) and (self.eth_type[tname]['export'] & EF_TABLE):
- out += "static "
+ out += 'static '
out += "const value_string %s[] = {\n" % (self.eth_vals_nm(tname))
for (val, id) in vals:
if (has_enum):
@@ -1379,7 +1380,7 @@ class EthCtx:
def eth_type_fn_h(self, tname):
out = ""
if (not self.eth_type[tname]['export'] & EF_TYPE):
- out += "static "
+ out += 'static '
out += "int "
if (self.Ber()):
out += "dissect_%s_%s(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_)" % (self.eth_type[tname]['proto'], tname)
@@ -1409,7 +1410,7 @@ class EthCtx:
def eth_type_fn_hdr(self, tname):
out = '\n'
if (not self.eth_type[tname]['export'] & EF_TYPE):
- out += "static "
+ out += 'static '
out += "int\n"
if (self.Ber()):
out += "dissect_%s_%s(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {\n" % (self.eth_type[tname]['proto'], tname)
@@ -1449,6 +1450,20 @@ class EthCtx:
pass
return out
+ #--- eth_out_pdu_decl ----------------------------------------------------------
+ def eth_out_pdu_decl(self, f):
+ t = self.eth_hf[f]['ethtype']
+ is_new = self.eth_hf[f]['pdu']['new']
+ out = ''
+ if (not self.eth_hf[f]['pdu']['export']):
+ out += 'static '
+ if (is_new):
+ out += 'int '
+ else:
+ out += 'void '
+ out += 'dissect_'+f+'(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_);\n'
+ return out
+
#--- eth_output_hf ----------------------------------------------------------
def eth_output_hf (self):
if not len(self.eth_hf_ord) and not len(self.eth_hfpdu_ord) and not len(self.named_bit): return
@@ -1527,6 +1542,9 @@ class EthCtx:
if self.eth_type[t]['export'] & EF_EXTERN:
fx.write("extern ")
fx.write(self.eth_type_fn_h(t))
+ for f in self.eth_hfpdu_ord: # PDUs
+ if (self.eth_hf[f]['pdu'] and self.eth_hf[f]['pdu']['export']):
+ fx.write(self.eth_out_pdu_decl(f))
self.output.file_close(fx)
#--- eth_output_expcnf ------------------------------------------------------
@@ -1626,27 +1644,18 @@ class EthCtx:
out += '}\n'
return out
#end out_field()
- def out_pdu_decl(f):
- t = self.eth_hf[f]['ethtype']
- is_new = self.eth_hf[f]['pdu']['new']
- out = 'static '
- if (is_new):
- out += 'int'
- else:
- out += 'void'
- out += ' dissect_'+f+'(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_);\n'
- return out
- #end out_pdu_decl()
def out_pdu(f):
t = self.eth_hf[f]['ethtype']
is_new = self.eth_hf[f]['pdu']['new']
impl = 'FALSE'
- out = 'static '
+ out = ''
+ if (not self.eth_hf[f]['pdu']['export']):
+ out += 'static '
if (is_new):
- out += 'int'
+ out += 'int '
else:
- out += 'void'
- out += ' dissect_'+f+'(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {\n'
+ out += 'void '
+ out += 'dissect_'+f+'(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {\n'
if (is_new):
out += ' int offset = 0;\n'
off_par = 'offset'
@@ -1686,7 +1695,7 @@ class EthCtx:
if first_decl:
fx.write('/*--- PDUs declarations ---*/\n')
first_decl = False
- fx.write(out_pdu_decl(f))
+ fx.write(self.eth_out_pdu_decl(f))
if not first_decl:
fx.write('\n')
if self.eth_dep_cycle:
@@ -2120,7 +2129,7 @@ class EthCnf:
(reg, hidden) = (None, False)
if (len(par) > 1): reg = par[1]
if (reg and reg[0]=='@'): (reg, hidden) = (reg[1:], True)
- attr = {'new' : is_new, 'reg' : reg, 'hidden' : hidden, 'need_decl' : False}
+ attr = {'new' : is_new, 'reg' : reg, 'hidden' : hidden, 'need_decl' : False, 'export' : False}
self.add_item('PDU', par[0], attr=attr, fn=fn, lineno=lineno)
return