new H.323 dissector

- Generic Extensible Framework helper
  - Annex M1 (QSIG over H.323)
  - Annex M4
  - Annex R
H.225/H.245 support for Generic Extensible Framework (GEF)
H.235 register MIKEY into new H.225/H.245 GEF tables
regenerate H.225,H.245,H.235,H.450,H.450-ROS,T.35 from new makefiles

svn path=/trunk/; revision=23216
This commit is contained in:
Tomas Kukosa 2007-10-17 10:25:21 +00:00
parent 5fa636334b
commit 286f231eb9
30 changed files with 1705 additions and 200 deletions

View File

@ -43,6 +43,7 @@ SUBDIRS = \
h235 \
h245 \
h248 \
h323 \
h450 \
h450-ros \
inap \

View File

@ -82,6 +82,7 @@ per: \
h225 \
h235 \
h245 \
h323 \
h450 \
h450-ros \
nbap \
@ -153,6 +154,9 @@ clean:
cd h248
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake clean
cd ..
cd h323
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake clean
cd ..
cd h450
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake clean
cd ..
@ -395,6 +399,11 @@ h248::
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake copy_files
cd ..
h323::
cd h323
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake copy_files
cd ..
h450::
cd h450
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake copy_files

View File

@ -620,6 +620,75 @@ H221NonStandard/manufacturerCode VAL_PTR = &manufacturerCode
}
#.END
#=== Generic Extensible Framework =======================================================
#.FN_HDR GenericData
void *priv_data = actx->private_data;
gef_ctx_t *gefx;
/* check if not inherited from FeatureDescriptor */
gefx = gef_ctx_get(actx->private_data);
if (!gefx) {
gefx = gef_ctx_alloc(NULL, "GenericData");
actx->private_data = gefx;
}
#.FN_FTR
actx->private_data = priv_data;
#.END
#.FN_HDR GenericData/parameters/_item
gef_ctx_t *parent_gefx;
parent_gefx = gef_ctx_get(actx->private_data);
actx->private_data = gef_ctx_alloc(parent_gefx, NULL);
#.FN_FTR
actx->private_data = parent_gefx;
#.END
#----------------------------------------------------------------------------------------
#.FN_HDR FeatureDescriptor
void *priv_data = actx->private_data;
actx->private_data = gef_ctx_alloc(NULL, "FeatureDescriptor");
#.FN_FTR
actx->private_data = priv_data;
#.END
#----------------------------------------------------------------------------------------
#.FN_HDR GenericIdentifier
gef_ctx_t *gefx;
#.FN_FTR
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);
if (gefx) {
/* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG dissector_try_string: %s", gefx->key);*/
actx->pinfo->private_data = actx;
dissector_try_string(gef_name_dissector_table, gefx->key, tvb_new_subset(tvb, offset>>3, 0, 0), actx->pinfo, tree);
}
actx->private_data = gefx; /* subdissector could overwrite it */
#.END
#.FN_BODY GenericIdentifier/standard VAL_PTR = &value_int
gint32 value_int = -1;
gef_ctx_t *gefx;
%(DEFAULT_BODY)s
gefx = gef_ctx_get(actx->private_data);
if (gefx) gefx->id = ep_strdup_printf("%%d", value_int);
#.END
#.FN_BODY GenericIdentifier/oid FN_VARIANT = _str VAL_PTR = &oid_str
const gchar *oid_str = NULL;
gef_ctx_t *gefx;
%(DEFAULT_BODY)s
gefx = gef_ctx_get(actx->private_data);
if (gefx) gefx->id = oid_str;
#.END
#=== end of GEF =========================================================================
#.TYPE_ATTR
H221NonStandard/t35CountryCode TYPE = FT_UINT32 DISPLAY = BASE_DEC STRINGS = VALS(T35CountryCode_vals)
TransportAddress/ipAddress/ip TYPE = FT_IPv4 DISPLAY = BASE_NONE STRINGS = NULL

View File

@ -55,6 +55,7 @@
#include <epan/h225-persistentdata.h>
#include "packet-h235.h"
#include "packet-h245.h"
#include "packet-h323.h"
#include "packet-q931.h"
#include "packet-ssl.h"
@ -83,6 +84,8 @@ static dissector_handle_t data_handle;
static dissector_table_t nsp_object_dissector_table;
static dissector_table_t nsp_h221_dissector_table;
static dissector_table_t tp_dissector_table;
static dissector_table_t gef_name_dissector_table;
static dissector_table_t gef_content_dissector_table;
static dissector_handle_t h245_handle=NULL;
@ -291,6 +294,8 @@ void proto_register_h225(void) {
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);
tp_dissector_table = register_dissector_table("h225.tp", "H.225 TunnelledProtocol", FT_STRING, BASE_NONE);
gef_name_dissector_table = register_dissector_table("h225.gef.name", "H.225 Generic Extensible Framework (names)", FT_STRING, BASE_NONE);
gef_content_dissector_table = register_dissector_table("h225.gef.content", "H.225 Generic Extensible Framework", FT_STRING, BASE_NONE);
register_init_routine(&h225_init_routine);
h225_tap = register_tap("h225");

View File

@ -20,9 +20,10 @@
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
PROTOCOL_NAME=h235
PROTOCOL_NAME = h235
DISSECTOR_FILES=packet-$(PROTOCOL_NAME).c \
DISSECTOR_FILES = \
packet-$(PROTOCOL_NAME).c \
packet-$(PROTOCOL_NAME).h
NEED_PACKET_PROTO_H = 1
@ -53,5 +54,6 @@ EXTRA_CNF = \
../h225/h225-exp.cnf
../h225/h225-exp.cnf:
(cd ../h235 && $(MAKE_CNF_EXPORT))
(cd ../h225 && $(MAKE_CNF_EXPORT))

View File

@ -16,10 +16,13 @@ ClearToken
CryptoToken
AuthenticationMechanism
SrtpCryptoCapability
SrtpKeys
#.END
#.PDU_NEW
SrtpCryptoCapability
#.END
#.OMIT_ASSIGNMENT
ECGDSASignature
H235CertificateSignature

View File

@ -111,6 +111,10 @@ void proto_register_h235(void) {
add_oid_str_name(OID_TG, "itu-t(0) recommendation(0) h(8) 235 version(0) 3 70 - TG");
/* H.235.7, Chapter 9.5 */
add_oid_str_name(OID_SG, "itu-t(0) recommendation(0) h(8) 235 version(0) 3 71 - SG");
/* H.235.8, Chapter 4.2, Table 2 */
add_oid_str_name("0.0.8.235.0.4.91", "itu-t(0) recommendation(0) h(8) 235 version(0) 4 91 - AES_CM_128_HMAC_SHA1_80");
add_oid_str_name("0.0.8.235.0.4.92", "itu-t(0) recommendation(0) h(8) 235 version(0) 4 92 - AES_CM_128_HMAC_SHA1_32");
add_oid_str_name("0.0.8.235.0.4.93", "itu-t(0) recommendation(0) h(8) 235 version(0) 4 93 - F8_128_HMAC_SHA1_80");
}
@ -120,23 +124,27 @@ void proto_reg_handoff_h235(void) {
mikey_handle = find_dissector("mikey");
/* H.235.7, Chapter 7.1, MIKEY operation at "session level" */
dissector_add_string("h245.gen_par", OID_MIKEY "-0", mikey_handle);
dissector_add_string("h245.gen_par", OID_MIKEY_PS "-0", mikey_handle);
dissector_add_string("h245.gen_par", OID_MIKEY_DHHMAC "-0", mikey_handle);
dissector_add_string("h245.gen_par", OID_MIKEY_PK_SIGN "-0", mikey_handle);
dissector_add_string("h245.gen_par", OID_MIKEY_DH_SIGN "-0", mikey_handle);
dissector_add_string("h245.gen_par", "EncryptionSync-0", mikey_handle);
dissector_add_string("h245.gef.content", "GenericCapability/" OID_MIKEY "/nonCollapsing/0", mikey_handle);
dissector_add_string("h245.gef.content", "GenericCapability/" OID_MIKEY_PS "/nonCollapsing/0", mikey_handle);
dissector_add_string("h245.gef.content", "GenericCapability/" OID_MIKEY_DHHMAC "/nonCollapsing/0", mikey_handle);
dissector_add_string("h245.gef.content", "GenericCapability/" OID_MIKEY_PK_SIGN "/nonCollapsing/0", mikey_handle);
dissector_add_string("h245.gef.content", "GenericCapability/" OID_MIKEY_DH_SIGN "/nonCollapsing/0", mikey_handle);
dissector_add_string("h245.gef.content", "EncryptionSync/0", mikey_handle);
/* H.235.7, Chapter 7.2, MIKEY operation at "media level" */
dissector_add_string("h245.gen_par", "EncryptionSync-76", mikey_handle);
dissector_add_string("h245.gen_par", "EncryptionSync-72", mikey_handle);
dissector_add_string("h245.gen_par", "EncryptionSync-73", mikey_handle);
dissector_add_string("h245.gen_par", "EncryptionSync-74", mikey_handle);
dissector_add_string("h245.gen_par", "EncryptionSync-75", mikey_handle);
dissector_add_string("h245.gen_par", OID_MIKEY "-76", mikey_handle);
dissector_add_string("h245.gen_par", OID_MIKEY_PS "-72", mikey_handle);
dissector_add_string("h245.gen_par", OID_MIKEY_DHHMAC "-73", mikey_handle);
dissector_add_string("h245.gen_par", OID_MIKEY_PK_SIGN "-74", mikey_handle);
dissector_add_string("h245.gen_par", OID_MIKEY_DH_SIGN "-75", mikey_handle);
dissector_add_string("h245.gef.content", "EncryptionSync/76", mikey_handle);
dissector_add_string("h245.gef.content", "EncryptionSync/72", mikey_handle);
dissector_add_string("h245.gef.content", "EncryptionSync/73", mikey_handle);
dissector_add_string("h245.gef.content", "EncryptionSync/74", mikey_handle);
dissector_add_string("h245.gef.content", "EncryptionSync/75", mikey_handle);
dissector_add_string("h245.gef.content", "GenericCapability/" OID_MIKEY "/nonCollapsing/76", mikey_handle);
dissector_add_string("h245.gef.content", "GenericCapability/" OID_MIKEY_PS "/nonCollapsing/72", mikey_handle);
dissector_add_string("h245.gef.content", "GenericCapability/" OID_MIKEY_DHHMAC "/nonCollapsing/73", mikey_handle);
dissector_add_string("h245.gef.content", "GenericCapability/" OID_MIKEY_PK_SIGN "/nonCollapsing/74", mikey_handle);
dissector_add_string("h245.gef.content", "GenericCapability/" OID_MIKEY_DH_SIGN "/nonCollapsing/75", mikey_handle);
/* H.235.8, Chapter 4.1.2, SrtpCryptoCapability transport */
dissector_add_string("h245.gef.content", "GenericCapability/0.0.8.235.0.4.90/nonCollapsingRaw",
new_create_dissector_handle(dissect_SrtpCryptoCapability_PDU, proto_h235));
}

View File

@ -533,52 +533,146 @@ if (h245_pi != NULL)
h245_pi->msg_type = H245_OpenLogChnAck;
#.END
#----------------------------------------------------------------------------------------
#.FN_PARS CapabilityIdentifier/standard
FN_VARIANT = _str VAL_PTR = &standard_oid_str
#.FN_FTR CapabilityIdentifier/standard
gen_par_prefix = ep_strdup(standard_oid_str);
#=== Generic Extensible Framework =======================================================
#.FN_HDR GenericMessage
void *priv_data = actx->private_data;
gef_ctx_t *gefx;
/* check if not inherited from GenericInformation */
gefx = gef_ctx_get(actx->private_data);
if (!gefx) {
gefx = gef_ctx_alloc(NULL, "GenericMessage");
actx->private_data = gefx;
}
#.FN_FTR
actx->private_data = priv_data;
#.END
#.FN_BODY GenericMessage/subMessageIdentifier VAL_PTR = &subMessageIdentifer
guint32 subMessageIdentifer;
gef_ctx_t *gefx;
%(DEFAULT_BODY)s
gefx = gef_ctx_get(actx->private_data);
if (gefx) gefx->subid = ep_strdup_printf("%%u", subMessageIdentifer);
#.END
#.FN_HDR GenericMessage/messageContent/_item
gef_ctx_t *parent_gefx;
parent_gefx = gef_ctx_get(actx->private_data);
actx->private_data = gef_ctx_alloc(parent_gefx, NULL);
#.FN_FTR
actx->private_data = parent_gefx;
#.END
#----------------------------------------------------------------------------------------
#.FN_HDR GenericInformation
void *priv_data = actx->private_data;
actx->private_data = gef_ctx_alloc(NULL, "GenericInformation");
#.FN_FTR
actx->private_data = priv_data;
#.END
#--- GenericCapability ------------------------------------------------------------------
#.FN_HDR GenericCapability
void *priv_data = actx->private_data;
actx->private_data = gef_ctx_alloc(NULL, "GenericCapability");
#.FN_FTR
actx->private_data = priv_data;
#.END
#.FN_FTR GenericCapability/capabilityIdentifier
gef_ctx_update_key(gef_ctx_get(actx->private_data));
/* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "***DEBUG capabilityIdentifier: %s", gef_ctx_get(actx->private_data)->key);*/
#.END
#.FN_HDR GenericCapability/collapsing/_item
gef_ctx_t *parent_gefx;
parent_gefx = gef_ctx_get(actx->private_data);
actx->private_data = gef_ctx_alloc(parent_gefx, "collapsing");
#.FN_FTR
actx->private_data = parent_gefx;
#.END
#.FN_HDR GenericCapability/nonCollapsing/_item
gef_ctx_t *parent_gefx;
parent_gefx = gef_ctx_get(actx->private_data);
actx->private_data = gef_ctx_alloc(parent_gefx, "nonCollapsing");
#.FN_FTR
actx->private_data = parent_gefx;
#.END
#.FN_BODY GenericCapability/nonCollapsingRaw VAL_PTR = &value_tvb
tvbuff_t *value_tvb;
gef_ctx_t *parent_gefx;
gef_ctx_t *gefx;
parent_gefx = gef_ctx_get(actx->private_data);
actx->private_data = gef_ctx_alloc(parent_gefx, "nonCollapsingRaw");
%(DEFAULT_BODY)s
gefx = gef_ctx_get(actx->private_data);
if (gefx) {
/* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG dissector_try_string: %%s", gefx->key);*/
actx->pinfo->private_data = actx;
dissector_try_string(gef_content_dissector_table, gefx->key, value_tvb, %(ACTX)s->pinfo, %(TREE)s);
}
actx->private_data = parent_gefx;
#.END
#--- EncryptionSync ---------------------------------------------------------------------
#.FN_HDR EncryptionSync
void *priv_data = actx->private_data;
actx->private_data = gef_ctx_alloc(NULL, "EncryptionSync");
#.FN_FTR
actx->private_data = priv_data;
#.END
#----------------------------------------------------------------------------------------
#.FN_BODY CapabilityIdentifier/standard FN_VARIANT = _str VAL_PTR = &standard_oid_str
const gchar *standard_oid_str = NULL;
gef_ctx_t *gefx;
%(DEFAULT_BODY)s
gefx = gef_ctx_get(actx->private_data);
if (gefx) gefx->id = standard_oid_str;
if(!h245_lc_dissector && strcmp(standard_oid_str,"0.0.8.245.1.1.1") == 0)
h245_lc_dissector = amr_handle;
#.END
#----------------------------------------------------------------------------------------
#.FN_HDR GenericCapability
gen_par_prefix = "";
#.END
#----------------------------------------------------------------------------------------
#.FN_HDR GenericMessage
gen_par_prefix = "";
#.END
#----------------------------------------------------------------------------------------
#.FN_HDR GenericMessage/subMessageIdentifier
guint32 subMessageIdentifer;
#.FN_PARS GenericMessage/subMessageIdentifier
VAL_PTR = &subMessageIdentifer
#.END
#----------------------------------------------------------------------------------------
#.FN_HDR EncryptionSync
gen_par_prefix = "EncryptionSync";
#.END
#----------------------------------------------------------------------------------------
#.FN_HDR GenericParameter
gen_par_str = "";
#.FN_FTR GenericParameter/parameterIdentifier
gen_par_str = ep_strdup_printf("%s-%s", gen_par_prefix, gen_par_str);
gef_ctx_update_key(gef_ctx_get(actx->private_data));
/* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "***DEBUG capabilityIdentifier: %s", gef_ctx_get(actx->private_data)->key);*/
#.END
#----------------------------------------------------------------------------------------
#.FN_BODY ParameterIdentifier/standard VAL_PTR = &value_int
gint32 value_int;
gint32 value_int = -1;
gef_ctx_t *gefx;
%(DEFAULT_BODY)s
gen_par_str = ep_strdup_printf("%%d", value_int);
gefx = gef_ctx_get(actx->private_data);
if (gefx) gefx->id = ep_strdup_printf("%%d", value_int);
#.END
#----------------------------------------------------------------------------------------
#.FN_BODY ParameterValue/octetString VAL_PTR = &value_tvb
tvbuff_t *value_tvb;
gef_ctx_t *gefx;
%(DEFAULT_BODY)s
dissector_try_string(gen_par_dissector_table, gen_par_str, value_tvb, %(ACTX)s->pinfo, %(TREE)s);
gefx = gef_ctx_get(actx->private_data);
if (gefx) {
/* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG dissector_try_string: %%s", gefx->key);*/
dissector_try_string(gef_content_dissector_table, gefx->key, value_tvb, %(ACTX)s->pinfo, %(TREE)s);
}
#.END
#=== end of GEF =========================================================================
#----------------------------------------------------------------------------------------
#.FN_BODY UnicastAddress/iPAddress/network VAL_PTR = &value_tvb
@ -1187,6 +1281,7 @@ RTPPayloadType/payloadDescriptor/rfc-number TYPE = FT_UINT32 DISPLAY = BASE_DEC
NonStandardIdentifier/h221NonStandard/t35CountryCode TYPE = FT_UINT32 DISPLAY = BASE_DEC STRINGS = VALS(T35CountryCode_vals)
VendorIdentification/productNumber TYPE = FT_STRING DISPLAY = BASE_HEX STRINGS = NULL
VendorIdentification/versionNumber TYPE = FT_STRING DISPLAY = BASE_HEX STRINGS = NULL
ParameterValue/octetString TYPE = FT_UINT32 DISPLAY = BASE_DEC
#----------------------------------------------------------------------------------------
#.FIELD_ATTR

View File

@ -51,6 +51,7 @@
#include "tap.h"
#include "packet-tpkt.h"
#include "packet-per.h"
#include "packet-h323.h"
#include "packet-h245.h"
#include "packet-rtp.h"
#include "packet-rtcp.h"
@ -65,7 +66,7 @@ static dissector_handle_t rtcp_handle=NULL;
static dissector_handle_t t38_handle=NULL;
static dissector_table_t nsp_object_dissector_table;
static dissector_table_t nsp_h221_dissector_table;
static dissector_table_t gen_par_dissector_table;
static dissector_table_t gef_content_dissector_table;
static dissector_handle_t nsp_handle;
static dissector_handle_t data_handle;
static dissector_handle_t h245_handle;
@ -207,15 +208,12 @@ static const value_string h245_AudioCapability_short_vals[] = {
an OLC is read */
const char* codec_type = NULL;
static const char *standard_oid_str;
static guint32 ipv4_address;
static guint32 ipv4_port;
static guint32 rtcp_ipv4_address;
static guint32 rtcp_ipv4_port;
static gboolean media_channel;
static gboolean media_control_channel;
static const char *gen_par_prefix;
static const char *gen_par_str;
/* NonStandardParameter */
static const char *nsiOID;
@ -391,7 +389,7 @@ void proto_register_h245(void) {
nsp_object_dissector_table = register_dissector_table("h245.nsp.object", "H.245 NonStandardParameter (object)", FT_STRING, BASE_NONE);
nsp_h221_dissector_table = register_dissector_table("h245.nsp.h221", "H.245 NonStandardParameter (h221)", FT_UINT32, BASE_HEX);
gen_par_dissector_table = register_dissector_table("h245.gen_par", "H.245 GenericParameter", FT_STRING, BASE_NONE);
gef_content_dissector_table = register_dissector_table("h245.gef.content", "H.245 Generic Extensible Framework", FT_STRING, BASE_NONE);
h245_tap = register_tap("h245");
h245dg_tap = register_tap("h245dg");

26
asn1/h323/Makefile.am Normal file
View File

@ -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

53
asn1/h323/Makefile.common Normal file
View File

@ -0,0 +1,53 @@
# $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 = h323
DISSECTOR_FILES = \
packet-$(PROTOCOL_NAME).c \
packet-$(PROTOCOL_NAME).h
NEED_PACKET_PROTO_H = 1
EXT_ASN_FILE_LIST =
ASN_FILE_LIST = \
RAS-PROTOCOL-TUNNEL.asn \
ROBUSTNESS-DATA.asn
EXTRA_DIST = \
$(ASN_FILE_LIST) \
packet-$(PROTOCOL_NAME)-template.c \
$(PROTOCOL_NAME).cnf
SRC_FILES = \
$(EXTRA_DIST) \
$(EXT_ASN_FILE_LIST)
A2W_FLAGS =
EXTRA_CNF = \
../h225/h225-exp.cnf
../h225/h225-exp.cnf:
(cd ../h225 && $(MAKE_CNF_EXPORT))

29
asn1/h323/Makefile.nmake Normal file
View File

@ -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

View File

@ -0,0 +1,27 @@
-- RAS-PROTOCOL-TUNNEL.asn
--
-- Taken from ITU ASN.1 database
-- http://www.itu.int/ITU-T/asn1/database/itu-t/h/h323/2006/RAS-PROTOCOL-TUNNEL.asn
--
-- $Id: H235-SECURITY-MESSAGES.asn 18339 2006-06-05 06:52:50Z kukosa $
--
-- Module RAS-PROTOCOL-TUNNEL (H.323:06/2006)
RAS-PROTOCOL-TUNNEL DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
IMPORTS TunnelledProtocol, NonStandardParameter
FROM H323-MESSAGES;
RasTunnelledSignallingMessage ::= SEQUENCE {
tunnelledProtocolID TunnelledProtocol, -- tunnelled signalling protocol ID
messageContent SEQUENCE OF OCTET STRING, -- sequence of entire message(s)
tunnellingRequired NULL OPTIONAL,
nonStandardData NonStandardParameter OPTIONAL,
...
}
END
-- Generated by Asnp, the ASN.1 pretty-printer of France Telecom R&D

View File

@ -0,0 +1,89 @@
-- ROBUSTNESS-DATA.asn
--
-- $Id: H235-SECURITY-MESSAGES.asn 18339 2006-06-05 06:52:50Z kukosa $
--
-- ITU-T Rec. H.323 (06/2006)
--
-- Annex R - Robustness methods for H.323 entities
-- R.11 GenericData usage
--
ROBUSTNESS-DATA DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
IMPORTS
TransportAddress, AlternateTransportAddresses,
GloballyUniqueID, TimeToLive
FROM H323-MESSAGES;
RobustnessData ::= SEQUENCE {
versionID INTEGER(1..256),
robustnessData
CHOICE {
rrqData Rrq-RD,
rcfData Rcf-RD,
setupData Setup-RD,
connectData Connect-RD,
statusData Status-RD,
statusInquiryData StatusInquiry-RD,
...
},
...
}
BackupCallSignalAddresses ::= SEQUENCE OF
CHOICE {
tcp TransportAddress,
alternateTransport AlternateTransportAddresses,
...
}
GloballyUniqueIdentifier ::= GloballyUniqueID
Rrq-RD ::= SEQUENCE {
backupCallSignalAddresses BackupCallSignalAddresses,
hasSharedRepository NULL OPTIONAL,
...
}
Rcf-RD ::= SEQUENCE {
hasSharedRepository NULL OPTIONAL,
...,
irrFrequency INTEGER(1..65535) OPTIONAL -- in seconds;
-- not present
-- if GK does not
-- want IRRs for
-- recovered calls
}
Setup-RD ::= SEQUENCE {
backupCallSignalAddresses BackupCallSignalAddresses,
hasSharedRepository NULL OPTIONAL,
endpointGuid GloballyUniqueIdentifier OPTIONAL,
...
}
Connect-RD ::= SEQUENCE {
backupCallSignalAddresses BackupCallSignalAddresses,
hasSharedRepository NULL OPTIONAL,
endpointGuid GloballyUniqueIdentifier OPTIONAL,
...
}
Status-RD ::= SEQUENCE {
h245Address TransportAddress OPTIONAL,
fastStart SEQUENCE OF OCTET STRING OPTIONAL,
...,
resetH245 NULL OPTIONAL
}
StatusInquiry-RD ::= SEQUENCE {
h245Address TransportAddress OPTIONAL,
timeToLive TimeToLive OPTIONAL,
includeFastStart NULL OPTIONAL,
...
}
robustnessId GenericIdentifier ::= standard:1
END

17
asn1/h323/h323.cnf Normal file
View File

@ -0,0 +1,17 @@
# h323.cnf
# H.323 conformation file
# 2007 Tomas Kukosa
# $Id$
#.IMPORT ../h225/h225-exp.cnf
#.OPT
PER
ALIGNED
#.END
#.PDU_NEW
RasTunnelledSignallingMessage
RobustnessData
#.END

View File

@ -0,0 +1,145 @@
/* packet-h323.c
* Routines for H.323 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-h323.h"
#define PNAME "H.323"
#define PSNAME "H.323"
#define PFNAME "h323"
/* Generic Extensible Framework */
gef_ctx_t* gef_ctx_alloc(gef_ctx_t *parent, const gchar *type) {
gef_ctx_t *gefx;
gefx = ep_alloc0(sizeof(gef_ctx_t));
gefx->signature = GEF_CTX_SIGNATURE;
gefx->parent = parent;
gefx->type = type;
return gefx;
}
gboolean gef_ctx_check_signature(gef_ctx_t *gefx) {
return gefx && (gefx->signature == GEF_CTX_SIGNATURE);
}
gef_ctx_t* gef_ctx_get(void *ptr) {
gef_ctx_t *gefx = (gef_ctx_t*)ptr;
asn1_ctx_t *actx = (asn1_ctx_t*)ptr;
if (!asn1_ctx_check_signature(actx))
actx = NULL;
if (actx)
gefx = actx->private_data;
if (!gef_ctx_check_signature(gefx))
gefx = NULL;
return gefx;
}
void gef_ctx_update_key(gef_ctx_t *gefx) {
const gchar *parent_key;
if (!gefx) return;
parent_key = (gefx->parent) ? gefx->parent->key : NULL;
gefx->key = ep_strdup_printf(
"%s%s" /* parent prefix */
"%s%s%s" /* type, id */
"%s%s" /* subid */,
(parent_key) ? parent_key : "", (parent_key) ? "/" : "",
(gefx->type) ? gefx->type : "", (gefx->type && (gefx->id || gefx->subid)) ? "/" : "", (gefx->id) ? gefx->id : "",
(gefx->subid) ? "-" : "", (gefx->subid) ? gefx->subid : ""
);
}
/* Subdissectors */
static dissector_handle_t q931_handle = NULL;
/* Initialize the protocol and registered fields */
int proto_h323 = -1;
#include "packet-h323-hf.c"
/* Initialize the subtree pointers */
#include "packet-h323-ett.c"
#include "packet-h323-fn.c"
/*--- proto_register_h323 ----------------------------------------------*/
void proto_register_h323(void) {
/* List of fields */
static hf_register_info hf[] = {
#include "packet-h323-hfarr.c"
};
/* List of subtrees */
static gint *ett[] = {
#include "packet-h323-ettarr.c"
};
/* Register protocol */
proto_h323 = proto_register_protocol(PNAME, PSNAME, PFNAME);
/* Register fields and subtrees */
proto_register_field_array(proto_h323, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
}
/*--- proto_reg_handoff_h323 -------------------------------------------*/
void proto_reg_handoff_h323(void)
{
q931_handle = find_dissector("q931");
/* H.323, Annex M1, Tunnelling of signalling protocols (QSIG) in H.323 */
dissector_add_string("h225.tp", "1.3.12.9", q931_handle);
/* H.323, Annex M4, Tunnelling of narrow-band signalling syntax (NSS) for H.323 */
dissector_add_string("h225.gef.content", "GenericData/1000/1",
new_create_dissector_handle(dissect_RasTunnelledSignallingMessage_PDU, proto_h323));
/* H.323, Annex R, Robustness methods for H.323 entities */
dissector_add_string("h225.gef.content", "GenericData/1/1",
new_create_dissector_handle(dissect_RobustnessData_PDU, proto_h323));
}

View File

@ -1491,6 +1491,7 @@ AC_OUTPUT(
asn1/h235/Makefile
asn1/h245/Makefile
asn1/h248/Makefile
asn1/h323/Makefile
asn1/h450/Makefile
asn1/h450-ros/Makefile
asn1/inap/Makefile

View File

@ -102,6 +102,7 @@ ASN_DISSECTOR_SRC = \
packet-h235.c \
packet-h245.c \
packet-h248.c \
packet-h323.c \
packet-h450.c \
packet-h450-ros.c \
packet-inap.c \

View File

@ -1,6 +1,6 @@
/* Do not modify this file. */
/* It is created automatically by the ASN.1 to Wireshark dissector compiler */
/* ./packet-h225.c */
/* packet-h225.c */
/* ../../tools/asn2wrs.py -e -p h225 -c h225.cnf -s packet-h225-template H323-MESSAGES.asn */
/* Input file: packet-h225-template.c */
@ -63,6 +63,7 @@
#include <epan/h225-persistentdata.h>
#include "packet-h235.h"
#include "packet-h245.h"
#include "packet-h323.h"
#include "packet-q931.h"
#include "packet-ssl.h"
@ -91,6 +92,8 @@ static dissector_handle_t data_handle;
static dissector_table_t nsp_object_dissector_table;
static dissector_table_t nsp_h221_dissector_table;
static dissector_table_t tp_dissector_table;
static dissector_table_t gef_name_dissector_table;
static dissector_table_t gef_content_dissector_table;
static dissector_handle_t h245_handle=NULL;
@ -602,10 +605,10 @@ static int hf_h225_callDurationLimit = -1; /* INTEGER_1_4294967295 */
static int hf_h225_enforceCallDurationLimit = -1; /* BOOLEAN */
static int hf_h225_callStartingPoint = -1; /* CallCreditServiceControl_callStartingPoint */
static int hf_h225_id = -1; /* GenericIdentifier */
static int hf_h225_parameters = -1; /* SEQUENCE_SIZE_1_512_OF_EnumeratedParameter */
static int hf_h225_parameters_item = -1; /* EnumeratedParameter */
static int hf_h225_standard = -1; /* INTEGER_0_16383_ */
static int hf_h225_oid = -1; /* OBJECT_IDENTIFIER */
static int hf_h225_parameters = -1; /* T_parameters */
static int hf_h225_parameters_item = -1; /* T_parameters_item */
static int hf_h225_standard = -1; /* T_standard */
static int hf_h225_oid = -1; /* T_oid */
static int hf_h225_genericIdentifier_nonStandard = -1; /* GloballyUniqueID */
static int hf_h225_content = -1; /* Content */
static int hf_h225_raw = -1; /* OCTET_STRING */
@ -882,7 +885,7 @@ static int hf_h225_stopped = -1; /* NULL */
static int hf_h225_notAvailable = -1; /* NULL */
/*--- End of included file: packet-h225-hf.c ---*/
#line 111 "packet-h225-template.c"
#line 114 "packet-h225-template.c"
/* Initialize the subtree pointers */
static gint ett_h225 = -1;
@ -1045,10 +1048,11 @@ static gint ett_h225_CallCreditServiceControl = -1;
static gint ett_h225_T_billingMode = -1;
static gint ett_h225_CallCreditServiceControl_callStartingPoint = -1;
static gint ett_h225_GenericData = -1;
static gint ett_h225_SEQUENCE_SIZE_1_512_OF_EnumeratedParameter = -1;
static gint ett_h225_T_parameters = -1;
static gint ett_h225_GenericIdentifier = -1;
static gint ett_h225_EnumeratedParameter = -1;
static gint ett_h225_Content = -1;
static gint ett_h225_SEQUENCE_SIZE_1_512_OF_EnumeratedParameter = -1;
static gint ett_h225_SEQUENCE_SIZE_1_16_OF_GenericData = -1;
static gint ett_h225_FeatureSet = -1;
static gint ett_h225_TransportChannelInfo = -1;
@ -1128,7 +1132,7 @@ static gint ett_h225_ServiceControlResponse = -1;
static gint ett_h225_T_result = -1;
/*--- End of included file: packet-h225-ett.c ---*/
#line 115 "packet-h225-template.c"
#line 118 "packet-h225-template.c"
/* Preferences */
static guint h225_tls_port = TLS_PORT_CS;
@ -1162,7 +1166,7 @@ static const char *tpOID;
/* EnumeratedParameter -> Content -> Content/compound -> EnumeratedParameter */
static int dissect_h225_EnumeratedParameter(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
/* GenericData -> GenericData/parameters -> EnumeratedParameter -> Content -> Content/nested -> GenericData */
/* GenericData -> GenericData/parameters -> GenericData/parameters/_item -> EnumeratedParameter -> Content -> Content/nested -> GenericData */
int dissect_h225_GenericData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
@ -3627,9 +3631,34 @@ dissect_h225_CircuitIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *ac
static int
dissect_h225_INTEGER_0_16383_(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
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"
gint32 value_int = -1;
gef_ctx_t *gefx;
offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
0U, 16383U, NULL, TRUE);
0U, 16383U, &value_int, TRUE);
gefx = gef_ctx_get(actx->private_data);
if (gefx) gefx->id = ep_strdup_printf("%d", value_int);
return offset;
}
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"
const gchar *oid_str = NULL;
gef_ctx_t *gefx;
offset = dissect_per_object_identifier_str(tvb, offset, actx, tree, hf_index, &oid_str);
gefx = gef_ctx_get(actx->private_data);
if (gefx) gefx->id = oid_str;
return offset;
}
@ -3643,18 +3672,32 @@ const value_string h225_GenericIdentifier_vals[] = {
};
static const per_choice_t GenericIdentifier_choice[] = {
{ 0, &hf_h225_standard , ASN1_EXTENSION_ROOT , dissect_h225_INTEGER_0_16383_ },
{ 1, &hf_h225_oid , ASN1_EXTENSION_ROOT , dissect_h225_OBJECT_IDENTIFIER },
{ 0, &hf_h225_standard , ASN1_EXTENSION_ROOT , dissect_h225_T_standard },
{ 1, &hf_h225_oid , ASN1_EXTENSION_ROOT , dissect_h225_T_oid },
{ 2, &hf_h225_genericIdentifier_nonStandard, ASN1_EXTENSION_ROOT , dissect_h225_GloballyUniqueID },
{ 0, NULL, 0, NULL }
};
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"
gef_ctx_t *gefx;
offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
ett_h225_GenericIdentifier, GenericIdentifier_choice,
NULL);
#line 660 "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);
if (gefx) {
/* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG dissector_try_string: %s", gefx->key);*/
actx->pinfo->private_data = actx;
dissector_try_string(gef_name_dissector_table, gefx->key, tvb_new_subset(tvb, offset>>3, 0, 0), actx->pinfo, tree);
}
actx->private_data = gefx; /* subdissector could overwrite it */
return offset;
}
@ -3690,7 +3733,7 @@ dissect_h225_BMPString(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_,
static const per_sequence_t SEQUENCE_SIZE_1_512_OF_EnumeratedParameter_sequence_of[1] = {
{ &hf_h225_parameters_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h225_EnumeratedParameter },
{ &hf_h225_compound_item , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h225_EnumeratedParameter },
};
static int
@ -3774,17 +3817,63 @@ 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"
gef_ctx_t *parent_gefx;
parent_gefx = gef_ctx_get(actx->private_data);
actx->private_data = gef_ctx_alloc(parent_gefx, NULL);
offset = dissect_h225_EnumeratedParameter(tvb, offset, actx, tree, hf_index);
#line 645 "h225.cnf"
actx->private_data = parent_gefx;
return offset;
}
static const per_sequence_t T_parameters_sequence_of[1] = {
{ &hf_h225_parameters_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h225_T_parameters_item },
};
static int
dissect_h225_T_parameters(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_h225_T_parameters, T_parameters_sequence_of,
1, 512);
return offset;
}
static const per_sequence_t GenericData_sequence[] = {
{ &hf_h225_id , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h225_GenericIdentifier },
{ &hf_h225_parameters , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h225_SEQUENCE_SIZE_1_512_OF_EnumeratedParameter },
{ &hf_h225_parameters , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h225_T_parameters },
{ NULL, 0, 0, NULL }
};
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"
void *priv_data = actx->private_data;
gef_ctx_t *gefx;
/* check if not inherited from FeatureDescriptor */
gefx = gef_ctx_get(actx->private_data);
if (!gefx) {
gefx = gef_ctx_alloc(NULL, "GenericData");
actx->private_data = gefx;
}
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_h225_GenericData, GenericData_sequence);
#line 636 "h225.cnf"
actx->private_data = priv_data;
return offset;
}
@ -3821,8 +3910,15 @@ 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"
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"
actx->private_data = priv_data;
return offset;
}
@ -7307,7 +7403,7 @@ dissect_h225_RasMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_,
/*--- End of included file: packet-h225-fn.c ---*/
#line 141 "packet-h225-template.c"
#line 144 "packet-h225-template.c"
/* Forward declaration we need below */
@ -9362,19 +9458,19 @@ void proto_register_h225(void) {
{ &hf_h225_parameters,
{ "parameters", "h225.parameters",
FT_UINT32, BASE_DEC, NULL, 0,
"h225.SEQUENCE_SIZE_1_512_OF_EnumeratedParameter", HFILL }},
"h225.T_parameters", HFILL }},
{ &hf_h225_parameters_item,
{ "Item", "h225.parameters_item",
FT_NONE, BASE_NONE, NULL, 0,
"h225.EnumeratedParameter", HFILL }},
"h225.T_parameters_item", HFILL }},
{ &hf_h225_standard,
{ "standard", "h225.standard",
FT_UINT32, BASE_DEC, NULL, 0,
"h225.INTEGER_0_16383_", HFILL }},
"h225.T_standard", HFILL }},
{ &hf_h225_oid,
{ "oid", "h225.oid",
FT_OID, BASE_NONE, NULL, 0,
"h225.OBJECT_IDENTIFIER", HFILL }},
"h225.T_oid", HFILL }},
{ &hf_h225_genericIdentifier_nonStandard,
{ "nonStandard", "h225.nonStandard",
FT_GUID, BASE_NONE, NULL, 0,
@ -10473,7 +10569,7 @@ void proto_register_h225(void) {
"h225.NULL", HFILL }},
/*--- End of included file: packet-h225-hfarr.c ---*/
#line 254 "packet-h225-template.c"
#line 257 "packet-h225-template.c"
};
/* List of subtrees */
@ -10638,10 +10734,11 @@ void proto_register_h225(void) {
&ett_h225_T_billingMode,
&ett_h225_CallCreditServiceControl_callStartingPoint,
&ett_h225_GenericData,
&ett_h225_SEQUENCE_SIZE_1_512_OF_EnumeratedParameter,
&ett_h225_T_parameters,
&ett_h225_GenericIdentifier,
&ett_h225_EnumeratedParameter,
&ett_h225_Content,
&ett_h225_SEQUENCE_SIZE_1_512_OF_EnumeratedParameter,
&ett_h225_SEQUENCE_SIZE_1_16_OF_GenericData,
&ett_h225_FeatureSet,
&ett_h225_TransportChannelInfo,
@ -10721,7 +10818,7 @@ void proto_register_h225(void) {
&ett_h225_T_result,
/*--- End of included file: packet-h225-ettarr.c ---*/
#line 260 "packet-h225-template.c"
#line 263 "packet-h225-template.c"
};
module_t *h225_module;
@ -10756,6 +10853,8 @@ void proto_register_h225(void) {
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);
tp_dissector_table = register_dissector_table("h225.tp", "H.225 TunnelledProtocol", FT_STRING, BASE_NONE);
gef_name_dissector_table = register_dissector_table("h225.gef.name", "H.225 Generic Extensible Framework (names)", FT_STRING, BASE_NONE);
gef_content_dissector_table = register_dissector_table("h225.gef.content", "H.225 Generic Extensible Framework", FT_STRING, BASE_NONE);
register_init_routine(&h225_init_routine);
h225_tap = register_tap("h225");

View File

@ -1,6 +1,6 @@
/* Do not modify this file. */
/* It is created automatically by the ASN.1 to Wireshark dissector compiler */
/* ./packet-h225.h */
/* packet-h225.h */
/* ../../tools/asn2wrs.py -e -p h225 -c h225.cnf -s packet-h225-template H323-MESSAGES.asn */
/* Input file: packet-h225-template.h */

View File

@ -1,7 +1,7 @@
/* Do not modify this file. */
/* It is created automatically by the ASN.1 to Wireshark dissector compiler */
/* ./packet-h235.c */
/* ../../tools/asn2wrs.py -p h235 -c h235.cnf -s packet-h235-template H235-SECURITY-MESSAGES.asn H235-SRTP.asn */
/* packet-h235.c */
/* ../../tools/asn2wrs.py -e -p h235 -c h235.cnf -s packet-h235-template H235-SECURITY-MESSAGES.asn H235-SRTP.asn */
/* Input file: packet-h235-template.c */
@ -65,6 +65,7 @@ int proto_h235 = -1;
/*--- Included file: packet-h235-hf.c ---*/
#line 1 "packet-h235-hf.c"
static int hf_h235_SrtpCryptoCapability_PDU = -1; /* SrtpCryptoCapability */
static int hf_h235_nonStandardIdentifier = -1; /* OBJECT_IDENTIFIER */
static int hf_h235_data = -1; /* OCTET_STRING */
static int hf_h235_halfkey = -1; /* BIT_STRING_SIZE_0_2048 */
@ -571,7 +572,7 @@ static const per_sequence_t ENCRYPTED_sequence[] = {
int
dissect_h235_ENCRYPTED(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 56 "h235.cnf"
#line 59 "h235.cnf"
proto_tree_add_item_hidden(tree, proto_h235, tvb, offset, 0, FALSE);
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
@ -601,7 +602,7 @@ static const per_sequence_t SIGNED_sequence[] = {
int
dissect_h235_SIGNED(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 53 "h235.cnf"
#line 56 "h235.cnf"
proto_tree_add_item_hidden(tree, proto_h235, tvb, offset, 0, FALSE);
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
@ -764,7 +765,7 @@ static const per_sequence_t ClearToken_sequence[] = {
int
dissect_h235_ClearToken(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 63 "h235.cnf"
#line 66 "h235.cnf"
proto_tree_add_item_hidden(tree, proto_h235, tvb, offset, 0, FALSE);
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
@ -783,7 +784,7 @@ static const per_sequence_t HASHED_sequence[] = {
int
dissect_h235_HASHED(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 59 "h235.cnf"
#line 62 "h235.cnf"
proto_tree_add_item_hidden(tree, proto_h235, tvb, offset, 0, FALSE);
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
@ -866,7 +867,7 @@ static const per_choice_t CryptoToken_choice[] = {
int
dissect_h235_CryptoToken(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 67 "h235.cnf"
#line 70 "h235.cnf"
proto_tree_add_item_hidden(tree, proto_h235, tvb, offset, 0, FALSE);
offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
@ -1015,7 +1016,7 @@ static const per_sequence_t SrtpCryptoCapability_sequence_of[1] = {
{ &hf_h235_SrtpCryptoCapability_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_SrtpCryptoInfo },
};
int
static int
dissect_h235_SrtpCryptoCapability(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_h235_SrtpCryptoCapability, SrtpCryptoCapability_sequence_of);
@ -1100,6 +1101,17 @@ dissect_h235_SrtpKeys(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, p
return offset;
}
/*--- PDUs ---*/
static int dissect_SrtpCryptoCapability_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_h235_SrtpCryptoCapability(tvb, offset, &asn1_ctx, tree, hf_h235_SrtpCryptoCapability_PDU);
offset += 7; offset >>= 3;
return offset;
}
/*--- End of included file: packet-h235-fn.c ---*/
#line 71 "packet-h235-template.c"
@ -1113,6 +1125,10 @@ void proto_register_h235(void) {
/*--- Included file: packet-h235-hfarr.c ---*/
#line 1 "packet-h235-hfarr.c"
{ &hf_h235_SrtpCryptoCapability_PDU,
{ "SrtpCryptoCapability", "h235.SrtpCryptoCapability",
FT_UINT32, BASE_DEC, NULL, 0,
"h235.SrtpCryptoCapability", HFILL }},
{ &hf_h235_nonStandardIdentifier,
{ "nonStandardIdentifier", "h235.nonStandardIdentifier",
FT_OID, BASE_NONE, NULL, 0,
@ -1619,6 +1635,10 @@ void proto_register_h235(void) {
add_oid_str_name(OID_TG, "itu-t(0) recommendation(0) h(8) 235 version(0) 3 70 - TG");
/* H.235.7, Chapter 9.5 */
add_oid_str_name(OID_SG, "itu-t(0) recommendation(0) h(8) 235 version(0) 3 71 - SG");
/* H.235.8, Chapter 4.2, Table 2 */
add_oid_str_name("0.0.8.235.0.4.91", "itu-t(0) recommendation(0) h(8) 235 version(0) 4 91 - AES_CM_128_HMAC_SHA1_80");
add_oid_str_name("0.0.8.235.0.4.92", "itu-t(0) recommendation(0) h(8) 235 version(0) 4 92 - AES_CM_128_HMAC_SHA1_32");
add_oid_str_name("0.0.8.235.0.4.93", "itu-t(0) recommendation(0) h(8) 235 version(0) 4 93 - F8_128_HMAC_SHA1_80");
}
@ -1628,23 +1648,27 @@ void proto_reg_handoff_h235(void) {
mikey_handle = find_dissector("mikey");
/* H.235.7, Chapter 7.1, MIKEY operation at "session level" */
dissector_add_string("h245.gen_par", OID_MIKEY "-0", mikey_handle);
dissector_add_string("h245.gen_par", OID_MIKEY_PS "-0", mikey_handle);
dissector_add_string("h245.gen_par", OID_MIKEY_DHHMAC "-0", mikey_handle);
dissector_add_string("h245.gen_par", OID_MIKEY_PK_SIGN "-0", mikey_handle);
dissector_add_string("h245.gen_par", OID_MIKEY_DH_SIGN "-0", mikey_handle);
dissector_add_string("h245.gen_par", "EncryptionSync-0", mikey_handle);
dissector_add_string("h245.gef.content", "GenericCapability/" OID_MIKEY "/nonCollapsing/0", mikey_handle);
dissector_add_string("h245.gef.content", "GenericCapability/" OID_MIKEY_PS "/nonCollapsing/0", mikey_handle);
dissector_add_string("h245.gef.content", "GenericCapability/" OID_MIKEY_DHHMAC "/nonCollapsing/0", mikey_handle);
dissector_add_string("h245.gef.content", "GenericCapability/" OID_MIKEY_PK_SIGN "/nonCollapsing/0", mikey_handle);
dissector_add_string("h245.gef.content", "GenericCapability/" OID_MIKEY_DH_SIGN "/nonCollapsing/0", mikey_handle);
dissector_add_string("h245.gef.content", "EncryptionSync/0", mikey_handle);
/* H.235.7, Chapter 7.2, MIKEY operation at "media level" */
dissector_add_string("h245.gen_par", "EncryptionSync-76", mikey_handle);
dissector_add_string("h245.gen_par", "EncryptionSync-72", mikey_handle);
dissector_add_string("h245.gen_par", "EncryptionSync-73", mikey_handle);
dissector_add_string("h245.gen_par", "EncryptionSync-74", mikey_handle);
dissector_add_string("h245.gen_par", "EncryptionSync-75", mikey_handle);
dissector_add_string("h245.gen_par", OID_MIKEY "-76", mikey_handle);
dissector_add_string("h245.gen_par", OID_MIKEY_PS "-72", mikey_handle);
dissector_add_string("h245.gen_par", OID_MIKEY_DHHMAC "-73", mikey_handle);
dissector_add_string("h245.gen_par", OID_MIKEY_PK_SIGN "-74", mikey_handle);
dissector_add_string("h245.gen_par", OID_MIKEY_DH_SIGN "-75", mikey_handle);
dissector_add_string("h245.gef.content", "EncryptionSync/76", mikey_handle);
dissector_add_string("h245.gef.content", "EncryptionSync/72", mikey_handle);
dissector_add_string("h245.gef.content", "EncryptionSync/73", mikey_handle);
dissector_add_string("h245.gef.content", "EncryptionSync/74", mikey_handle);
dissector_add_string("h245.gef.content", "EncryptionSync/75", mikey_handle);
dissector_add_string("h245.gef.content", "GenericCapability/" OID_MIKEY "/nonCollapsing/76", mikey_handle);
dissector_add_string("h245.gef.content", "GenericCapability/" OID_MIKEY_PS "/nonCollapsing/72", mikey_handle);
dissector_add_string("h245.gef.content", "GenericCapability/" OID_MIKEY_DHHMAC "/nonCollapsing/73", mikey_handle);
dissector_add_string("h245.gef.content", "GenericCapability/" OID_MIKEY_PK_SIGN "/nonCollapsing/74", mikey_handle);
dissector_add_string("h245.gef.content", "GenericCapability/" OID_MIKEY_DH_SIGN "/nonCollapsing/75", mikey_handle);
/* H.235.8, Chapter 4.1.2, SrtpCryptoCapability transport */
dissector_add_string("h245.gef.content", "GenericCapability/0.0.8.235.0.4.90/nonCollapsingRaw",
new_create_dissector_handle(dissect_SrtpCryptoCapability_PDU, proto_h235));
}

View File

@ -1,7 +1,7 @@
/* Do not modify this file. */
/* It is created automatically by the ASN.1 to Wireshark dissector compiler */
/* ./packet-h235.h */
/* ../../tools/asn2wrs.py -p h235 -c h235.cnf -s packet-h235-template H235-SECURITY-MESSAGES.asn H235-SRTP.asn */
/* packet-h235.h */
/* ../../tools/asn2wrs.py -e -p h235 -c h235.cnf -s packet-h235-template H235-SECURITY-MESSAGES.asn H235-SRTP.asn */
/* Input file: packet-h235-template.h */
@ -46,7 +46,6 @@ int dissect_h235_SIGNED(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_,
int dissect_h235_ENCRYPTED(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
int dissect_h235_HASHED(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
int dissect_h235_CryptoToken(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
int dissect_h235_SrtpCryptoCapability(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
int dissect_h235_SrtpKeys(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
/*--- End of included file: packet-h235-exp.h ---*/

View File

@ -1,6 +1,6 @@
/* Do not modify this file. */
/* It is created automatically by the ASN.1 to Wireshark dissector compiler */
/* ./packet-h245.c */
/* packet-h245.c */
/* ../../tools/asn2wrs.py -e -p h245 -c h245.cnf -s packet-h245-template MULTIMEDIA-SYSTEM-CONTROL.asn */
/* Input file: packet-h245-template.c */
@ -59,6 +59,7 @@
#include "tap.h"
#include "packet-tpkt.h"
#include "packet-per.h"
#include "packet-h323.h"
#include "packet-h245.h"
#include "packet-rtp.h"
#include "packet-rtcp.h"
@ -73,7 +74,7 @@ static dissector_handle_t rtcp_handle=NULL;
static dissector_handle_t t38_handle=NULL;
static dissector_table_t nsp_object_dissector_table;
static dissector_table_t nsp_h221_dissector_table;
static dissector_table_t gen_par_dissector_table;
static dissector_table_t gef_content_dissector_table;
static dissector_handle_t nsp_handle;
static dissector_handle_t data_handle;
static dissector_handle_t h245_handle;
@ -215,15 +216,12 @@ static const value_string h245_AudioCapability_short_vals[] = {
an OLC is read */
const char* codec_type = NULL;
static const char *standard_oid_str;
static guint32 ipv4_address;
static guint32 ipv4_port;
static guint32 rtcp_ipv4_address;
static guint32 rtcp_ipv4_port;
static gboolean media_channel;
static gboolean media_control_channel;
static const char *gen_par_prefix;
static const char *gen_par_str;
/* NonStandardParameter */
static const char *nsiOID;
@ -373,8 +371,8 @@ static int hf_h245_mobileMultilinkReconfigurationIndication = -1; /* MobileMult
static int hf_h245_genericIndication = -1; /* GenericMessage */
static int hf_h245_messageIdentifier = -1; /* CapabilityIdentifier */
static int hf_h245_subMessageIdentifier = -1; /* T_subMessageIdentifier */
static int hf_h245_messageContent = -1; /* SEQUENCE_OF_GenericParameter */
static int hf_h245_messageContent_item = -1; /* GenericParameter */
static int hf_h245_messageContent = -1; /* T_messageContent */
static int hf_h245_messageContent_item = -1; /* T_messageContent_item */
static int hf_h245_nonStandardData = -1; /* NonStandardParameter */
static int hf_h245_nonStandardIdentifier = -1; /* NonStandardIdentifier */
static int hf_h245_nsd_data = -1; /* T_nsd_data */
@ -961,12 +959,12 @@ static int hf_h245_nonStandardParams_item = -1; /* NonStandardParameter */
static int hf_h245_chairControlCapability = -1; /* BOOLEAN */
static int hf_h245_videoIndicateMixingCapability = -1; /* BOOLEAN */
static int hf_h245_multipointVisualizationCapability = -1; /* BOOLEAN */
static int hf_h245_capabilityIdentifier = -1; /* CapabilityIdentifier */
static int hf_h245_collapsing = -1; /* SEQUENCE_OF_GenericParameter */
static int hf_h245_collapsing_item = -1; /* GenericParameter */
static int hf_h245_nonCollapsing = -1; /* SEQUENCE_OF_GenericParameter */
static int hf_h245_nonCollapsing_item = -1; /* GenericParameter */
static int hf_h245_nonCollapsingRaw = -1; /* OCTET_STRING */
static int hf_h245_capabilityIdentifier = -1; /* T_capabilityIdentifier */
static int hf_h245_collapsing = -1; /* T_collapsing */
static int hf_h245_collapsing_item = -1; /* T_collapsing_item */
static int hf_h245_nonCollapsing = -1; /* T_nonCollapsing */
static int hf_h245_nonCollapsing_item = -1; /* T_nonCollapsing_item */
static int hf_h245_nonCollapsingRaw = -1; /* T_nonCollapsingRaw */
static int hf_h245_transport = -1; /* DataProtocolCapability */
static int hf_h245_standardOid = -1; /* T_standardOid */
static int hf_h245_h221NonStandard = -1; /* NonStandardParameter */
@ -1687,7 +1685,7 @@ static int hf_h245_encrypted = -1; /* OCTET_STRING */
static int hf_h245_encryptedAlphanumeric = -1; /* EncryptedAlphanumeric */
/*--- End of included file: packet-h245-hf.c ---*/
#line 284 "packet-h245-template.c"
#line 282 "packet-h245-template.c"
/* Initialize the subtree pointers */
@ -1699,7 +1697,7 @@ static gint ett_h245_ResponseMessage = -1;
static gint ett_h245_CommandMessage = -1;
static gint ett_h245_IndicationMessage = -1;
static gint ett_h245_GenericMessage = -1;
static gint ett_h245_SEQUENCE_OF_GenericParameter = -1;
static gint ett_h245_T_messageContent = -1;
static gint ett_h245_NonStandardMessage = -1;
static gint ett_h245_NonStandardParameter = -1;
static gint ett_h245_NonStandardIdentifier = -1;
@ -1851,11 +1849,14 @@ static gint ett_h245_SEQUENCE_SIZE_1_16_OF_NonStandardParameter = -1;
static gint ett_h245_ConferenceCapability = -1;
static gint ett_h245_SEQUENCE_OF_NonStandardParameter = -1;
static gint ett_h245_GenericCapability = -1;
static gint ett_h245_T_collapsing = -1;
static gint ett_h245_T_nonCollapsing = -1;
static gint ett_h245_CapabilityIdentifier = -1;
static gint ett_h245_GenericParameter = -1;
static gint ett_h245_SEQUENCE_OF_ParameterIdentifier = -1;
static gint ett_h245_ParameterIdentifier = -1;
static gint ett_h245_ParameterValue = -1;
static gint ett_h245_SEQUENCE_OF_GenericParameter = -1;
static gint ett_h245_MultiplexedStreamCapability = -1;
static gint ett_h245_MultiplexFormat = -1;
static gint ett_h245_AudioTelephonyEventCapability = -1;
@ -2183,7 +2184,7 @@ static gint ett_h245_FlowControlIndication = -1;
static gint ett_h245_MobileMultilinkReconfigurationIndication = -1;
/*--- End of included file: packet-h245-ett.c ---*/
#line 287 "packet-h245-template.c"
#line 285 "packet-h245-template.c"
/* Forward declarations */
static int dissect_h245_MultimediaSystemControlMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
@ -2271,7 +2272,7 @@ static const per_sequence_t H221NonStandardID_sequence[] = {
static int
dissect_h245_H221NonStandardID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 769 "h245.cnf"
#line 863 "h245.cnf"
t35CountryCode = 0;
t35Extension = 0;
manufacturerCode = 0;
@ -2279,7 +2280,7 @@ dissect_h245_H221NonStandardID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *ac
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_h245_H221NonStandardID, H221NonStandardID_sequence);
#line 773 "h245.cnf"
#line 867 "h245.cnf"
h221NonStandard = ((t35CountryCode * 256) + t35Extension) * 65536 + manufacturerCode;
proto_tree_add_uint(tree, hf_h245Manufacturer, tvb, (offset>>3)-4, 4, h221NonStandard);
@ -2301,7 +2302,7 @@ static const per_choice_t NonStandardIdentifier_choice[] = {
static int
dissect_h245_NonStandardIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 750 "h245.cnf"
#line 844 "h245.cnf"
guint32 value;
nsiOID = "";
@ -2330,7 +2331,7 @@ dissect_h245_NonStandardIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t
static int
dissect_h245_T_nsd_data(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 784 "h245.cnf"
#line 878 "h245.cnf"
tvbuff_t *next_tvb = NULL;
offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
@ -2353,7 +2354,7 @@ static const per_sequence_t NonStandardParameter_sequence[] = {
static int
dissect_h245_NonStandardParameter(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 782 "h245.cnf"
#line 876 "h245.cnf"
nsp_handle = NULL;
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
@ -3306,13 +3307,19 @@ dissect_h245_T_t38fax(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, p
static int
dissect_h245_T_standardOid(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 637 "h245.cnf"
const gchar *standard_oid_str = NULL;
gef_ctx_t *gefx;
offset = dissect_per_object_identifier_str(tvb, offset, actx, tree, hf_index, &standard_oid_str);
#line 539 "h245.cnf"
gen_par_prefix = ep_strdup(standard_oid_str);
gefx = gef_ctx_get(actx->private_data);
if (gefx) gefx->id = standard_oid_str;
if(!h245_lc_dissector && strcmp(standard_oid_str,"0.0.8.245.1.1.1") == 0)
h245_lc_dissector = amr_handle;
return offset;
}
@ -3364,6 +3371,19 @@ dissect_h245_CapabilityIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t
static int
dissect_h245_T_capabilityIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_h245_CapabilityIdentifier(tvb, offset, actx, tree, hf_index);
#line 588 "h245.cnf"
gef_ctx_update_key(gef_ctx_get(actx->private_data));
/* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "***DEBUG capabilityIdentifier: %s", gef_ctx_get(actx->private_data)->key);*/
return offset;
}
static int
dissect_h245_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,
@ -3376,13 +3396,15 @@ dissect_h245_INTEGER_0_4294967295(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t
static int
dissect_h245_T_standard(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 570 "h245.cnf"
gint32 value_int;
#line 654 "h245.cnf"
gint32 value_int = -1;
gef_ctx_t *gefx;
offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
0U, 127U, &value_int, FALSE);
gen_par_str = ep_strdup_printf("%d", value_int);
gefx = gef_ctx_get(actx->private_data);
if (gefx) gefx->id = ep_strdup_printf("%d", value_int);
return offset;
@ -3420,8 +3442,9 @@ static int
dissect_h245_T_parameterIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_h245_ParameterIdentifier(tvb, offset, actx, tree, hf_index);
#line 566 "h245.cnf"
gen_par_str = ep_strdup_printf("%s-%s", gen_par_prefix, gen_par_str);
#line 649 "h245.cnf"
gef_ctx_update_key(gef_ctx_get(actx->private_data));
/* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "***DEBUG capabilityIdentifier: %s", gef_ctx_get(actx->private_data)->key);*/
return offset;
}
@ -3430,13 +3453,18 @@ dissect_h245_T_parameterIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t
static int
dissect_h245_T_octetString(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 577 "h245.cnf"
#line 663 "h245.cnf"
tvbuff_t *value_tvb;
gef_ctx_t *gefx;
offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
NO_BOUND, NO_BOUND, &value_tvb);
dissector_try_string(gen_par_dissector_table, gen_par_str, value_tvb, actx->pinfo, tree);
gefx = gef_ctx_get(actx->private_data);
if (gefx) {
/* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG dissector_try_string: %s", gefx->key);*/
dissector_try_string(gef_content_dissector_table, gefx->key, value_tvb, actx->pinfo, tree);
}
return offset;
@ -3444,7 +3472,7 @@ dissect_h245_T_octetString(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _
static const per_sequence_t SEQUENCE_OF_GenericParameter_sequence_of[1] = {
{ &hf_h245_messageContent_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h245_GenericParameter },
{ &hf_h245_genericParameters_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h245_GenericParameter },
};
static int
@ -3512,9 +3540,6 @@ static const per_sequence_t GenericParameter_sequence[] = {
static int
dissect_h245_GenericParameter(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 564 "h245.cnf"
gen_par_str = "";
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_h245_GenericParameter, GenericParameter_sequence);
@ -3522,24 +3547,116 @@ dissect_h245_GenericParameter(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *act
}
static int
dissect_h245_T_collapsing_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 593 "h245.cnf"
gef_ctx_t *parent_gefx;
parent_gefx = gef_ctx_get(actx->private_data);
actx->private_data = gef_ctx_alloc(parent_gefx, "collapsing");
offset = dissect_h245_GenericParameter(tvb, offset, actx, tree, hf_index);
#line 598 "h245.cnf"
actx->private_data = parent_gefx;
return offset;
}
static const per_sequence_t T_collapsing_sequence_of[1] = {
{ &hf_h245_collapsing_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h245_T_collapsing_item },
};
static int
dissect_h245_T_collapsing(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_h245_T_collapsing, T_collapsing_sequence_of);
return offset;
}
static int
dissect_h245_T_nonCollapsing_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 602 "h245.cnf"
gef_ctx_t *parent_gefx;
parent_gefx = gef_ctx_get(actx->private_data);
actx->private_data = gef_ctx_alloc(parent_gefx, "nonCollapsing");
offset = dissect_h245_GenericParameter(tvb, offset, actx, tree, hf_index);
#line 607 "h245.cnf"
actx->private_data = parent_gefx;
return offset;
}
static const per_sequence_t T_nonCollapsing_sequence_of[1] = {
{ &hf_h245_nonCollapsing_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h245_T_nonCollapsing_item },
};
static int
dissect_h245_T_nonCollapsing(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_h245_T_nonCollapsing, T_nonCollapsing_sequence_of);
return offset;
}
static int
dissect_h245_T_nonCollapsingRaw(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 611 "h245.cnf"
tvbuff_t *value_tvb;
gef_ctx_t *parent_gefx;
gef_ctx_t *gefx;
parent_gefx = gef_ctx_get(actx->private_data);
actx->private_data = gef_ctx_alloc(parent_gefx, "nonCollapsingRaw");
offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
NO_BOUND, NO_BOUND, &value_tvb);
gefx = gef_ctx_get(actx->private_data);
if (gefx) {
/* DEBUG */ /*proto_tree_add_text(tree, tvb, offset>>3, 0, "*** DEBUG dissector_try_string: %s", gefx->key);*/
actx->pinfo->private_data = actx;
dissector_try_string(gef_content_dissector_table, gefx->key, value_tvb, actx->pinfo, tree);
}
actx->private_data = parent_gefx;
return offset;
}
static const per_sequence_t GenericCapability_sequence[] = {
{ &hf_h245_capabilityIdentifier, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h245_CapabilityIdentifier },
{ &hf_h245_capabilityIdentifier, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h245_T_capabilityIdentifier },
{ &hf_h245_maxBitRate2_0_4294967295, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h245_INTEGER_0_4294967295 },
{ &hf_h245_collapsing , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h245_SEQUENCE_OF_GenericParameter },
{ &hf_h245_nonCollapsing , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h245_SEQUENCE_OF_GenericParameter },
{ &hf_h245_nonCollapsingRaw, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h245_OCTET_STRING },
{ &hf_h245_collapsing , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h245_T_collapsing },
{ &hf_h245_nonCollapsing , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h245_T_nonCollapsing },
{ &hf_h245_nonCollapsingRaw, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h245_T_nonCollapsingRaw },
{ &hf_h245_transport , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h245_DataProtocolCapability },
{ NULL, 0, 0, NULL }
};
static int
dissect_h245_GenericCapability(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 545 "h245.cnf"
gen_par_prefix = "";
#line 581 "h245.cnf"
void *priv_data = actx->private_data;
actx->private_data = gef_ctx_alloc(NULL, "GenericCapability");
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_h245_GenericCapability, GenericCapability_sequence);
#line 584 "h245.cnf"
actx->private_data = priv_data;
return offset;
}
@ -6118,13 +6235,48 @@ dissect_h245_SET_SIZE_1_256_OF_CapabilityDescriptor(tvbuff_t *tvb _U_, int offse
static int
dissect_h245_T_subMessageIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 553 "h245.cnf"
#line 554 "h245.cnf"
guint32 subMessageIdentifer;
gef_ctx_t *gefx;
offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
0U, 127U, &subMessageIdentifer, FALSE);
gefx = gef_ctx_get(actx->private_data);
if (gefx) gefx->subid = ep_strdup_printf("%u", subMessageIdentifer);
return offset;
}
static int
dissect_h245_T_messageContent_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 563 "h245.cnf"
gef_ctx_t *parent_gefx;
parent_gefx = gef_ctx_get(actx->private_data);
actx->private_data = gef_ctx_alloc(parent_gefx, NULL);
offset = dissect_h245_GenericParameter(tvb, offset, actx, tree, hf_index);
#line 568 "h245.cnf"
actx->private_data = parent_gefx;
return offset;
}
static const per_sequence_t T_messageContent_sequence_of[1] = {
{ &hf_h245_messageContent_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h245_T_messageContent_item },
};
static int
dissect_h245_T_messageContent(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_h245_T_messageContent, T_messageContent_sequence_of);
return offset;
}
@ -6132,18 +6284,29 @@ dissect_h245_T_subMessageIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_
static const per_sequence_t GenericMessage_sequence[] = {
{ &hf_h245_messageIdentifier, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h245_CapabilityIdentifier },
{ &hf_h245_subMessageIdentifier, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h245_T_subMessageIdentifier },
{ &hf_h245_messageContent , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h245_SEQUENCE_OF_GenericParameter },
{ &hf_h245_messageContent , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h245_T_messageContent },
{ NULL, 0, 0, NULL }
};
static int
dissect_h245_GenericMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 549 "h245.cnf"
gen_par_prefix = "";
#line 540 "h245.cnf"
void *priv_data = actx->private_data;
gef_ctx_t *gefx;
/* check if not inherited from GenericInformation */
gefx = gef_ctx_get(actx->private_data);
if (!gefx) {
gefx = gef_ctx_alloc(NULL, "GenericMessage");
actx->private_data = gefx;
}
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_h245_GenericMessage, GenericMessage_sequence);
#line 550 "h245.cnf"
actx->private_data = priv_data;
return offset;
}
@ -6151,8 +6314,15 @@ dissect_h245_GenericMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx
static int
dissect_h245_GenericInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 573 "h245.cnf"
void *priv_data = actx->private_data;
actx->private_data = gef_ctx_alloc(NULL, "GenericInformation");
offset = dissect_h245_GenericMessage(tvb, offset, actx, tree, hf_index);
#line 576 "h245.cnf"
actx->private_data = priv_data;
return offset;
}
@ -7362,7 +7532,7 @@ dissect_h245_V76LogicalChannelParameters(tvbuff_t *tvb _U_, int offset _U_, asn1
static int
dissect_h245_Ipv4_network(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 584 "h245.cnf"
#line 678 "h245.cnf"
tvbuff_t *value_tvb;
@ -7384,7 +7554,7 @@ dissect_h245_Ipv4_network(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U
static int
dissect_h245_TsapIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 597 "h245.cnf"
#line 691 "h245.cnf"
guint32 tsapIdentifier;
offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
@ -7643,14 +7813,14 @@ dissect_h245_TransportAddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *act
static int
dissect_h245_T_mediaChannel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 615 "h245.cnf"
#line 709 "h245.cnf"
media_channel = TRUE;
offset = dissect_h245_TransportAddress(tvb, offset, actx, tree, hf_index);
#line 645 "h245.cnf"
#line 739 "h245.cnf"
media_channel = FALSE;
@ -7662,14 +7832,14 @@ dissect_h245_T_mediaChannel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx
static int
dissect_h245_T_mediaControlChannel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 627 "h245.cnf"
#line 721 "h245.cnf"
media_control_channel = TRUE;
offset = dissect_h245_TransportAddress(tvb, offset, actx, tree, hf_index);
#line 651 "h245.cnf"
#line 745 "h245.cnf"
media_control_channel = FALSE;
@ -7849,7 +8019,7 @@ static const per_choice_t OLC_rev_multiplexParameters_choice[] = {
static int
dissect_h245_OLC_rev_multiplexParameters(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 701 "h245.cnf"
#line 795 "h245.cnf"
media_channel = FALSE;
@ -7860,7 +8030,7 @@ dissect_h245_OLC_rev_multiplexParameters(tvbuff_t *tvb _U_, int offset _U_, asn1
ett_h245_OLC_rev_multiplexParameters, OLC_rev_multiplexParameters_choice,
NULL);
#line 709 "h245.cnf"
#line 803 "h245.cnf"
if (!actx->pinfo->fd->flags.visited) {
if (codec_type && (strcmp(codec_type, "t38fax")==0)) {
@ -8085,12 +8255,16 @@ static const per_sequence_t EncryptionSync_sequence[] = {
static int
dissect_h245_EncryptionSync(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 560 "h245.cnf"
gen_par_prefix = "EncryptionSync";
#line 629 "h245.cnf"
void *priv_data = actx->private_data;
actx->private_data = gef_ctx_alloc(NULL, "EncryptionSync");
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_h245_EncryptionSync, EncryptionSync_sequence);
#line 632 "h245.cnf"
actx->private_data = priv_data;
return offset;
}
@ -10355,14 +10529,14 @@ dissect_h245_OLC_ack_reverseLogicalChannelParameters(tvbuff_t *tvb _U_, int offs
static int
dissect_h245_Ack_mediaChannel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 609 "h245.cnf"
#line 703 "h245.cnf"
media_channel = TRUE;
offset = dissect_h245_TransportAddress(tvb, offset, actx, tree, hf_index);
#line 633 "h245.cnf"
#line 727 "h245.cnf"
media_channel = FALSE;
@ -10374,14 +10548,14 @@ dissect_h245_Ack_mediaChannel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *act
static int
dissect_h245_Ack_mediaControlChannel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 621 "h245.cnf"
#line 715 "h245.cnf"
media_control_channel = TRUE;
offset = dissect_h245_TransportAddress(tvb, offset, actx, tree, hf_index);
#line 639 "h245.cnf"
#line 733 "h245.cnf"
media_control_channel = FALSE;
@ -10422,7 +10596,7 @@ static const per_choice_t T_forwardMultiplexAckParameters_choice[] = {
static int
dissect_h245_T_forwardMultiplexAckParameters(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 657 "h245.cnf"
#line 751 "h245.cnf"
media_channel = FALSE;
@ -10433,7 +10607,7 @@ dissect_h245_T_forwardMultiplexAckParameters(tvbuff_t *tvb _U_, int offset _U_,
ett_h245_T_forwardMultiplexAckParameters, T_forwardMultiplexAckParameters_choice,
NULL);
#line 665 "h245.cnf"
#line 759 "h245.cnf"
if (!actx->pinfo->fd->flags.visited) {
if (codec_type && strcmp(codec_type, "t38fax")==0) {
@ -13653,7 +13827,7 @@ dissect_h245_FunctionNotSupportedCause(tvbuff_t *tvb _U_, int offset _U_, asn1_c
static int
dissect_h245_T_returnedFunction(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
#line 793 "h245.cnf"
#line 887 "h245.cnf"
tvbuff_t *next_tvb = NULL;
proto_item *item;
proto_tree *subtree;
@ -13914,7 +14088,7 @@ static void dissect_OpenLogicalChannel_PDU(tvbuff_t *tvb _U_, packet_info *pinfo
/*--- End of included file: packet-h245-fn.c ---*/
#line 296 "packet-h245-template.c"
#line 294 "packet-h245-template.c"
static void
dissect_h245(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
@ -14313,11 +14487,11 @@ void proto_register_h245(void) {
{ &hf_h245_messageContent,
{ "messageContent", "h245.messageContent",
FT_UINT32, BASE_DEC, NULL, 0,
"h245.SEQUENCE_OF_GenericParameter", HFILL }},
"h245.T_messageContent", HFILL }},
{ &hf_h245_messageContent_item,
{ "Item", "h245.messageContent_item",
FT_NONE, BASE_NONE, NULL, 0,
"h245.GenericParameter", HFILL }},
"h245.T_messageContent_item", HFILL }},
{ &hf_h245_nonStandardData,
{ "nonStandardData", "h245.nonStandardData",
FT_NONE, BASE_NONE, NULL, 0,
@ -16665,27 +16839,27 @@ void proto_register_h245(void) {
{ &hf_h245_capabilityIdentifier,
{ "capabilityIdentifier", "h245.capabilityIdentifier",
FT_UINT32, BASE_DEC, VALS(h245_CapabilityIdentifier_vals), 0,
"h245.CapabilityIdentifier", HFILL }},
"h245.T_capabilityIdentifier", HFILL }},
{ &hf_h245_collapsing,
{ "collapsing", "h245.collapsing",
FT_UINT32, BASE_DEC, NULL, 0,
"h245.SEQUENCE_OF_GenericParameter", HFILL }},
"h245.T_collapsing", HFILL }},
{ &hf_h245_collapsing_item,
{ "Item", "h245.collapsing_item",
FT_NONE, BASE_NONE, NULL, 0,
"h245.GenericParameter", HFILL }},
"h245.T_collapsing_item", HFILL }},
{ &hf_h245_nonCollapsing,
{ "nonCollapsing", "h245.nonCollapsing",
FT_UINT32, BASE_DEC, NULL, 0,
"h245.SEQUENCE_OF_GenericParameter", HFILL }},
"h245.T_nonCollapsing", HFILL }},
{ &hf_h245_nonCollapsing_item,
{ "Item", "h245.nonCollapsing_item",
FT_NONE, BASE_NONE, NULL, 0,
"h245.GenericParameter", HFILL }},
"h245.T_nonCollapsing_item", HFILL }},
{ &hf_h245_nonCollapsingRaw,
{ "nonCollapsingRaw", "h245.nonCollapsingRaw",
FT_BYTES, BASE_HEX, NULL, 0,
"h245.OCTET_STRING", HFILL }},
"h245.T_nonCollapsingRaw", HFILL }},
{ &hf_h245_transport,
{ "transport", "h245.transport",
FT_UINT32, BASE_DEC, VALS(DataProtocolCapability_vals), 0,
@ -16752,7 +16926,7 @@ void proto_register_h245(void) {
"h245.INTEGER_0_4294967295", HFILL }},
{ &hf_h245_octetString,
{ "octetString", "h245.octetString",
FT_BYTES, BASE_HEX, NULL, 0,
FT_UINT32, BASE_DEC, NULL, 0,
"h245.T_octetString", HFILL }},
{ &hf_h245_genericParameters,
{ "genericParameter", "h245.genericParameter",
@ -19560,7 +19734,7 @@ void proto_register_h245(void) {
"h245.EncryptedAlphanumeric", HFILL }},
/*--- End of included file: packet-h245-hfarr.c ---*/
#line 361 "packet-h245-template.c"
#line 359 "packet-h245-template.c"
};
/* List of subtrees */
@ -19576,7 +19750,7 @@ void proto_register_h245(void) {
&ett_h245_CommandMessage,
&ett_h245_IndicationMessage,
&ett_h245_GenericMessage,
&ett_h245_SEQUENCE_OF_GenericParameter,
&ett_h245_T_messageContent,
&ett_h245_NonStandardMessage,
&ett_h245_NonStandardParameter,
&ett_h245_NonStandardIdentifier,
@ -19728,11 +19902,14 @@ void proto_register_h245(void) {
&ett_h245_ConferenceCapability,
&ett_h245_SEQUENCE_OF_NonStandardParameter,
&ett_h245_GenericCapability,
&ett_h245_T_collapsing,
&ett_h245_T_nonCollapsing,
&ett_h245_CapabilityIdentifier,
&ett_h245_GenericParameter,
&ett_h245_SEQUENCE_OF_ParameterIdentifier,
&ett_h245_ParameterIdentifier,
&ett_h245_ParameterValue,
&ett_h245_SEQUENCE_OF_GenericParameter,
&ett_h245_MultiplexedStreamCapability,
&ett_h245_MultiplexFormat,
&ett_h245_AudioTelephonyEventCapability,
@ -20060,7 +20237,7 @@ void proto_register_h245(void) {
&ett_h245_MobileMultilinkReconfigurationIndication,
/*--- End of included file: packet-h245-ettarr.c ---*/
#line 368 "packet-h245-template.c"
#line 366 "packet-h245-template.c"
};
module_t *h245_module;
@ -20087,7 +20264,7 @@ void proto_register_h245(void) {
nsp_object_dissector_table = register_dissector_table("h245.nsp.object", "H.245 NonStandardParameter (object)", FT_STRING, BASE_NONE);
nsp_h221_dissector_table = register_dissector_table("h245.nsp.h221", "H.245 NonStandardParameter (h221)", FT_UINT32, BASE_HEX);
gen_par_dissector_table = register_dissector_table("h245.gen_par", "H.245 GenericParameter", FT_STRING, BASE_NONE);
gef_content_dissector_table = register_dissector_table("h245.gef.content", "H.245 Generic Extensible Framework", FT_STRING, BASE_NONE);
h245_tap = register_tap("h245");
h245dg_tap = register_tap("h245dg");

View File

@ -1,6 +1,6 @@
/* Do not modify this file. */
/* It is created automatically by the ASN.1 to Wireshark dissector compiler */
/* ./packet-h245.h */
/* packet-h245.h */
/* ../../tools/asn2wrs.py -e -p h245 -c h245.cnf -s packet-h245-template MULTIMEDIA-SYSTEM-CONTROL.asn */
/* Input file: packet-h245-template.h */

View File

@ -0,0 +1,628 @@
/* Do not modify this file. */
/* It is created automatically by the ASN.1 to Wireshark dissector compiler */
/* packet-h323.c */
/* ../../tools/asn2wrs.py -p h323 -c h323.cnf -s packet-h323-template RAS-PROTOCOL-TUNNEL.asn ROBUSTNESS-DATA.asn */
/* Input file: packet-h323-template.c */
#line 1 "packet-h323-template.c"
/* packet-h323.c
* Routines for H.323 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-h323.h"
#define PNAME "H.323"
#define PSNAME "H.323"
#define PFNAME "h323"
/* Generic Extensible Framework */
gef_ctx_t* gef_ctx_alloc(gef_ctx_t *parent, const gchar *type) {
gef_ctx_t *gefx;
gefx = ep_alloc0(sizeof(gef_ctx_t));
gefx->signature = GEF_CTX_SIGNATURE;
gefx->parent = parent;
gefx->type = type;
return gefx;
}
gboolean gef_ctx_check_signature(gef_ctx_t *gefx) {
return gefx && (gefx->signature == GEF_CTX_SIGNATURE);
}
gef_ctx_t* gef_ctx_get(void *ptr) {
gef_ctx_t *gefx = (gef_ctx_t*)ptr;
asn1_ctx_t *actx = (asn1_ctx_t*)ptr;
if (!asn1_ctx_check_signature(actx))
actx = NULL;
if (actx)
gefx = actx->private_data;
if (!gef_ctx_check_signature(gefx))
gefx = NULL;
return gefx;
}
void gef_ctx_update_key(gef_ctx_t *gefx) {
const gchar *parent_key;
if (!gefx) return;
parent_key = (gefx->parent) ? gefx->parent->key : NULL;
gefx->key = ep_strdup_printf(
"%s%s" /* parent prefix */
"%s%s%s" /* type, id */
"%s%s" /* subid */,
(parent_key) ? parent_key : "", (parent_key) ? "/" : "",
(gefx->type) ? gefx->type : "", (gefx->type && (gefx->id || gefx->subid)) ? "/" : "", (gefx->id) ? gefx->id : "",
(gefx->subid) ? "-" : "", (gefx->subid) ? gefx->subid : ""
);
}
/* Subdissectors */
static dissector_handle_t q931_handle = NULL;
/* Initialize the protocol and registered fields */
int proto_h323 = -1;
/*--- Included file: packet-h323-hf.c ---*/
#line 1 "packet-h323-hf.c"
static int hf_h323_RasTunnelledSignallingMessage_PDU = -1; /* RasTunnelledSignallingMessage */
static int hf_h323_RobustnessData_PDU = -1; /* RobustnessData */
static int hf_h323_tunnelledProtocolID = -1; /* TunnelledProtocol */
static int hf_h323_messageContent = -1; /* T_messageContent */
static int hf_h323_messageContent_item = -1; /* OCTET_STRING */
static int hf_h323_tunnellingRequired = -1; /* NULL */
static int hf_h323_nonStandardData = -1; /* NonStandardParameter */
static int hf_h323_versionID = -1; /* INTEGER_1_256 */
static int hf_h323_robustnessData = -1; /* T_robustnessData */
static int hf_h323_rrqData = -1; /* Rrq_RD */
static int hf_h323_rcfData = -1; /* Rcf_RD */
static int hf_h323_setupData = -1; /* Setup_RD */
static int hf_h323_connectData = -1; /* Connect_RD */
static int hf_h323_statusData = -1; /* Status_RD */
static int hf_h323_statusInquiryData = -1; /* StatusInquiry_RD */
static int hf_h323_BackupCallSignalAddresses_item = -1; /* BackupCallSignalAddresses_item */
static int hf_h323_tcp = -1; /* TransportAddress */
static int hf_h323_alternateTransport = -1; /* AlternateTransportAddresses */
static int hf_h323_backupCallSignalAddresses = -1; /* BackupCallSignalAddresses */
static int hf_h323_hasSharedRepository = -1; /* NULL */
static int hf_h323_irrFrequency = -1; /* INTEGER_1_65535 */
static int hf_h323_endpointGuid = -1; /* GloballyUniqueIdentifier */
static int hf_h323_h245Address = -1; /* TransportAddress */
static int hf_h323_fastStart = -1; /* T_fastStart */
static int hf_h323_fastStart_item = -1; /* OCTET_STRING */
static int hf_h323_resetH245 = -1; /* NULL */
static int hf_h323_timeToLive = -1; /* TimeToLive */
static int hf_h323_includeFastStart = -1; /* NULL */
/*--- End of included file: packet-h323-hf.c ---*/
#line 100 "packet-h323-template.c"
/* Initialize the subtree pointers */
/*--- Included file: packet-h323-ett.c ---*/
#line 1 "packet-h323-ett.c"
static gint ett_h323_RasTunnelledSignallingMessage = -1;
static gint ett_h323_T_messageContent = -1;
static gint ett_h323_RobustnessData = -1;
static gint ett_h323_T_robustnessData = -1;
static gint ett_h323_BackupCallSignalAddresses = -1;
static gint ett_h323_BackupCallSignalAddresses_item = -1;
static gint ett_h323_Rrq_RD = -1;
static gint ett_h323_Rcf_RD = -1;
static gint ett_h323_Setup_RD = -1;
static gint ett_h323_Connect_RD = -1;
static gint ett_h323_Status_RD = -1;
static gint ett_h323_T_fastStart = -1;
static gint ett_h323_StatusInquiry_RD = -1;
/*--- End of included file: packet-h323-ett.c ---*/
#line 103 "packet-h323-template.c"
/*--- Included file: packet-h323-fn.c ---*/
#line 1 "packet-h323-fn.c"
static int
dissect_h323_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 T_messageContent_sequence_of[1] = {
{ &hf_h323_messageContent_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h323_OCTET_STRING },
};
static int
dissect_h323_T_messageContent(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_h323_T_messageContent, T_messageContent_sequence_of);
return offset;
}
static int
dissect_h323_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 RasTunnelledSignallingMessage_sequence[] = {
{ &hf_h323_tunnelledProtocolID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h225_TunnelledProtocol },
{ &hf_h323_messageContent , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h323_T_messageContent },
{ &hf_h323_tunnellingRequired, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h323_NULL },
{ &hf_h323_nonStandardData, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h225_NonStandardParameter },
{ NULL, 0, 0, NULL }
};
static int
dissect_h323_RasTunnelledSignallingMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_h323_RasTunnelledSignallingMessage, RasTunnelledSignallingMessage_sequence);
return offset;
}
static int
dissect_h323_INTEGER_1_256(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, 256U, NULL, FALSE);
return offset;
}
static const value_string h323_BackupCallSignalAddresses_item_vals[] = {
{ 0, "tcp" },
{ 1, "alternateTransport" },
{ 0, NULL }
};
static const per_choice_t BackupCallSignalAddresses_item_choice[] = {
{ 0, &hf_h323_tcp , ASN1_EXTENSION_ROOT , dissect_h225_TransportAddress },
{ 1, &hf_h323_alternateTransport, ASN1_EXTENSION_ROOT , dissect_h225_AlternateTransportAddresses },
{ 0, NULL, 0, NULL }
};
static int
dissect_h323_BackupCallSignalAddresses_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
ett_h323_BackupCallSignalAddresses_item, BackupCallSignalAddresses_item_choice,
NULL);
return offset;
}
static const per_sequence_t BackupCallSignalAddresses_sequence_of[1] = {
{ &hf_h323_BackupCallSignalAddresses_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h323_BackupCallSignalAddresses_item },
};
static int
dissect_h323_BackupCallSignalAddresses(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_h323_BackupCallSignalAddresses, BackupCallSignalAddresses_sequence_of);
return offset;
}
static const per_sequence_t Rrq_RD_sequence[] = {
{ &hf_h323_backupCallSignalAddresses, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h323_BackupCallSignalAddresses },
{ &hf_h323_hasSharedRepository, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h323_NULL },
{ NULL, 0, 0, NULL }
};
static int
dissect_h323_Rrq_RD(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_h323_Rrq_RD, Rrq_RD_sequence);
return offset;
}
static int
dissect_h323_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 Rcf_RD_sequence[] = {
{ &hf_h323_hasSharedRepository, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h323_NULL },
{ &hf_h323_irrFrequency , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_h323_INTEGER_1_65535 },
{ NULL, 0, 0, NULL }
};
static int
dissect_h323_Rcf_RD(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_h323_Rcf_RD, Rcf_RD_sequence);
return offset;
}
static int
dissect_h323_GloballyUniqueIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_h225_GloballyUniqueID(tvb, offset, actx, tree, hf_index);
return offset;
}
static const per_sequence_t Setup_RD_sequence[] = {
{ &hf_h323_backupCallSignalAddresses, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h323_BackupCallSignalAddresses },
{ &hf_h323_hasSharedRepository, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h323_NULL },
{ &hf_h323_endpointGuid , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h323_GloballyUniqueIdentifier },
{ NULL, 0, 0, NULL }
};
static int
dissect_h323_Setup_RD(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_h323_Setup_RD, Setup_RD_sequence);
return offset;
}
static const per_sequence_t Connect_RD_sequence[] = {
{ &hf_h323_backupCallSignalAddresses, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h323_BackupCallSignalAddresses },
{ &hf_h323_hasSharedRepository, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h323_NULL },
{ &hf_h323_endpointGuid , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h323_GloballyUniqueIdentifier },
{ NULL, 0, 0, NULL }
};
static int
dissect_h323_Connect_RD(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_h323_Connect_RD, Connect_RD_sequence);
return offset;
}
static const per_sequence_t T_fastStart_sequence_of[1] = {
{ &hf_h323_fastStart_item , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h323_OCTET_STRING },
};
static int
dissect_h323_T_fastStart(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_h323_T_fastStart, T_fastStart_sequence_of);
return offset;
}
static const per_sequence_t Status_RD_sequence[] = {
{ &hf_h323_h245Address , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h225_TransportAddress },
{ &hf_h323_fastStart , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h323_T_fastStart },
{ &hf_h323_resetH245 , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_h323_NULL },
{ NULL, 0, 0, NULL }
};
static int
dissect_h323_Status_RD(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_h323_Status_RD, Status_RD_sequence);
return offset;
}
static const per_sequence_t StatusInquiry_RD_sequence[] = {
{ &hf_h323_h245Address , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h225_TransportAddress },
{ &hf_h323_timeToLive , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h225_TimeToLive },
{ &hf_h323_includeFastStart, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h323_NULL },
{ NULL, 0, 0, NULL }
};
static int
dissect_h323_StatusInquiry_RD(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_h323_StatusInquiry_RD, StatusInquiry_RD_sequence);
return offset;
}
static const value_string h323_T_robustnessData_vals[] = {
{ 0, "rrqData" },
{ 1, "rcfData" },
{ 2, "setupData" },
{ 3, "connectData" },
{ 4, "statusData" },
{ 5, "statusInquiryData" },
{ 0, NULL }
};
static const per_choice_t T_robustnessData_choice[] = {
{ 0, &hf_h323_rrqData , ASN1_EXTENSION_ROOT , dissect_h323_Rrq_RD },
{ 1, &hf_h323_rcfData , ASN1_EXTENSION_ROOT , dissect_h323_Rcf_RD },
{ 2, &hf_h323_setupData , ASN1_EXTENSION_ROOT , dissect_h323_Setup_RD },
{ 3, &hf_h323_connectData , ASN1_EXTENSION_ROOT , dissect_h323_Connect_RD },
{ 4, &hf_h323_statusData , ASN1_EXTENSION_ROOT , dissect_h323_Status_RD },
{ 5, &hf_h323_statusInquiryData, ASN1_EXTENSION_ROOT , dissect_h323_StatusInquiry_RD },
{ 0, NULL, 0, NULL }
};
static int
dissect_h323_T_robustnessData(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_h323_T_robustnessData, T_robustnessData_choice,
NULL);
return offset;
}
static const per_sequence_t RobustnessData_sequence[] = {
{ &hf_h323_versionID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h323_INTEGER_1_256 },
{ &hf_h323_robustnessData , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h323_T_robustnessData },
{ NULL, 0, 0, NULL }
};
static int
dissect_h323_RobustnessData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_h323_RobustnessData, RobustnessData_sequence);
return offset;
}
/*--- PDUs ---*/
static int dissect_RasTunnelledSignallingMessage_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_h323_RasTunnelledSignallingMessage(tvb, offset, &asn1_ctx, tree, hf_h323_RasTunnelledSignallingMessage_PDU);
offset += 7; offset >>= 3;
return offset;
}
static int dissect_RobustnessData_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_h323_RobustnessData(tvb, offset, &asn1_ctx, tree, hf_h323_RobustnessData_PDU);
offset += 7; offset >>= 3;
return offset;
}
/*--- End of included file: packet-h323-fn.c ---*/
#line 105 "packet-h323-template.c"
/*--- proto_register_h323 ----------------------------------------------*/
void proto_register_h323(void) {
/* List of fields */
static hf_register_info hf[] = {
/*--- Included file: packet-h323-hfarr.c ---*/
#line 1 "packet-h323-hfarr.c"
{ &hf_h323_RasTunnelledSignallingMessage_PDU,
{ "RasTunnelledSignallingMessage", "h323.RasTunnelledSignallingMessage",
FT_NONE, BASE_NONE, NULL, 0,
"h323.RasTunnelledSignallingMessage", HFILL }},
{ &hf_h323_RobustnessData_PDU,
{ "RobustnessData", "h323.RobustnessData",
FT_NONE, BASE_NONE, NULL, 0,
"h323.RobustnessData", HFILL }},
{ &hf_h323_tunnelledProtocolID,
{ "tunnelledProtocolID", "h323.tunnelledProtocolID",
FT_NONE, BASE_NONE, NULL, 0,
"h225.TunnelledProtocol", HFILL }},
{ &hf_h323_messageContent,
{ "messageContent", "h323.messageContent",
FT_UINT32, BASE_DEC, NULL, 0,
"h323.T_messageContent", HFILL }},
{ &hf_h323_messageContent_item,
{ "Item", "h323.messageContent_item",
FT_BYTES, BASE_HEX, NULL, 0,
"h323.OCTET_STRING", HFILL }},
{ &hf_h323_tunnellingRequired,
{ "tunnellingRequired", "h323.tunnellingRequired",
FT_NONE, BASE_NONE, NULL, 0,
"h323.NULL", HFILL }},
{ &hf_h323_nonStandardData,
{ "nonStandardData", "h323.nonStandardData",
FT_NONE, BASE_NONE, NULL, 0,
"h225.NonStandardParameter", HFILL }},
{ &hf_h323_versionID,
{ "versionID", "h323.versionID",
FT_UINT32, BASE_DEC, NULL, 0,
"h323.INTEGER_1_256", HFILL }},
{ &hf_h323_robustnessData,
{ "robustnessData", "h323.robustnessData",
FT_UINT32, BASE_DEC, VALS(h323_T_robustnessData_vals), 0,
"h323.T_robustnessData", HFILL }},
{ &hf_h323_rrqData,
{ "rrqData", "h323.rrqData",
FT_NONE, BASE_NONE, NULL, 0,
"h323.Rrq_RD", HFILL }},
{ &hf_h323_rcfData,
{ "rcfData", "h323.rcfData",
FT_NONE, BASE_NONE, NULL, 0,
"h323.Rcf_RD", HFILL }},
{ &hf_h323_setupData,
{ "setupData", "h323.setupData",
FT_NONE, BASE_NONE, NULL, 0,
"h323.Setup_RD", HFILL }},
{ &hf_h323_connectData,
{ "connectData", "h323.connectData",
FT_NONE, BASE_NONE, NULL, 0,
"h323.Connect_RD", HFILL }},
{ &hf_h323_statusData,
{ "statusData", "h323.statusData",
FT_NONE, BASE_NONE, NULL, 0,
"h323.Status_RD", HFILL }},
{ &hf_h323_statusInquiryData,
{ "statusInquiryData", "h323.statusInquiryData",
FT_NONE, BASE_NONE, NULL, 0,
"h323.StatusInquiry_RD", HFILL }},
{ &hf_h323_BackupCallSignalAddresses_item,
{ "Item", "h323.BackupCallSignalAddresses_item",
FT_UINT32, BASE_DEC, VALS(h323_BackupCallSignalAddresses_item_vals), 0,
"h323.BackupCallSignalAddresses_item", HFILL }},
{ &hf_h323_tcp,
{ "tcp", "h323.tcp",
FT_UINT32, BASE_DEC, VALS(h225_TransportAddress_vals), 0,
"h225.TransportAddress", HFILL }},
{ &hf_h323_alternateTransport,
{ "alternateTransport", "h323.alternateTransport",
FT_NONE, BASE_NONE, NULL, 0,
"h225.AlternateTransportAddresses", HFILL }},
{ &hf_h323_backupCallSignalAddresses,
{ "backupCallSignalAddresses", "h323.backupCallSignalAddresses",
FT_UINT32, BASE_DEC, NULL, 0,
"h323.BackupCallSignalAddresses", HFILL }},
{ &hf_h323_hasSharedRepository,
{ "hasSharedRepository", "h323.hasSharedRepository",
FT_NONE, BASE_NONE, NULL, 0,
"h323.NULL", HFILL }},
{ &hf_h323_irrFrequency,
{ "irrFrequency", "h323.irrFrequency",
FT_UINT32, BASE_DEC, NULL, 0,
"h323.INTEGER_1_65535", HFILL }},
{ &hf_h323_endpointGuid,
{ "endpointGuid", "h323.endpointGuid",
FT_GUID, BASE_NONE, NULL, 0,
"h323.GloballyUniqueIdentifier", HFILL }},
{ &hf_h323_h245Address,
{ "h245Address", "h323.h245Address",
FT_UINT32, BASE_DEC, VALS(h225_TransportAddress_vals), 0,
"h225.TransportAddress", HFILL }},
{ &hf_h323_fastStart,
{ "fastStart", "h323.fastStart",
FT_UINT32, BASE_DEC, NULL, 0,
"h323.T_fastStart", HFILL }},
{ &hf_h323_fastStart_item,
{ "Item", "h323.fastStart_item",
FT_BYTES, BASE_HEX, NULL, 0,
"h323.OCTET_STRING", HFILL }},
{ &hf_h323_resetH245,
{ "resetH245", "h323.resetH245",
FT_NONE, BASE_NONE, NULL, 0,
"h323.NULL", HFILL }},
{ &hf_h323_timeToLive,
{ "timeToLive", "h323.timeToLive",
FT_UINT32, BASE_DEC, NULL, 0,
"h225.TimeToLive", HFILL }},
{ &hf_h323_includeFastStart,
{ "includeFastStart", "h323.includeFastStart",
FT_NONE, BASE_NONE, NULL, 0,
"h323.NULL", HFILL }},
/*--- End of included file: packet-h323-hfarr.c ---*/
#line 112 "packet-h323-template.c"
};
/* List of subtrees */
static gint *ett[] = {
/*--- Included file: packet-h323-ettarr.c ---*/
#line 1 "packet-h323-ettarr.c"
&ett_h323_RasTunnelledSignallingMessage,
&ett_h323_T_messageContent,
&ett_h323_RobustnessData,
&ett_h323_T_robustnessData,
&ett_h323_BackupCallSignalAddresses,
&ett_h323_BackupCallSignalAddresses_item,
&ett_h323_Rrq_RD,
&ett_h323_Rcf_RD,
&ett_h323_Setup_RD,
&ett_h323_Connect_RD,
&ett_h323_Status_RD,
&ett_h323_T_fastStart,
&ett_h323_StatusInquiry_RD,
/*--- End of included file: packet-h323-ettarr.c ---*/
#line 117 "packet-h323-template.c"
};
/* Register protocol */
proto_h323 = proto_register_protocol(PNAME, PSNAME, PFNAME);
/* Register fields and subtrees */
proto_register_field_array(proto_h323, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
}
/*--- proto_reg_handoff_h323 -------------------------------------------*/
void proto_reg_handoff_h323(void)
{
q931_handle = find_dissector("q931");
/* H.323, Annex M1, Tunnelling of signalling protocols (QSIG) in H.323 */
dissector_add_string("h225.tp", "1.3.12.9", q931_handle);
/* H.323, Annex M4, Tunnelling of narrow-band signalling syntax (NSS) for H.323 */
dissector_add_string("h225.gef.content", "GenericData/1000/1",
new_create_dissector_handle(dissect_RasTunnelledSignallingMessage_PDU, proto_h323));
/* H.323, Annex R, Robustness methods for H.323 entities */
dissector_add_string("h225.gef.content", "GenericData/1/1",
new_create_dissector_handle(dissect_RobustnessData_PDU, proto_h323));
}

View File

@ -1,7 +1,7 @@
/* Do not modify this file. */
/* It is created automatically by the ASN.1 to Wireshark dissector compiler */
/* ./packet-h450-ros.c */
/* ../../tools/asn2wrs.py -e -p h450.ros -I ../ros -c h450-ros.cnf -o h450-ros -s packet-h450-ros-template ../ros/Remote-Operations-Information-Objects.asn Remote-Operations-Apdus.asn */
/* packet-h450-ros.c */
/* ../../tools/asn2wrs.py -e -p h450.ros -c h450-ros.cnf -s packet-h450-ros-template ../ros/Remote-Operations-Information-Objects.asn Remote-Operations-Apdus.asn */
/* Input file: packet-h450-ros-template.c */

View File

@ -1,7 +1,7 @@
/* Do not modify this file. */
/* It is created automatically by the ASN.1 to Wireshark dissector compiler */
/* ./packet-h450-ros.h */
/* ../../tools/asn2wrs.py -e -p h450.ros -I ../ros -c h450-ros.cnf -o h450-ros -s packet-h450-ros-template ../ros/Remote-Operations-Information-Objects.asn Remote-Operations-Apdus.asn */
/* packet-h450-ros.h */
/* ../../tools/asn2wrs.py -e -p h450.ros -c h450-ros.cnf -s packet-h450-ros-template ../ros/Remote-Operations-Information-Objects.asn Remote-Operations-Apdus.asn */
/* Input file: packet-h450-ros-template.h */

View File

@ -1,6 +1,6 @@
/* Do not modify this file. */
/* It is created automatically by the ASN.1 to Wireshark dissector compiler */
/* ./packet-h450.c */
/* packet-h450.c */
/* ../../tools/asn2wrs.py -c h450.cnf -s packet-h450-template H4501-Supplementary-ServiceAPDU-Structure.asn Addressing-Data-Elements.asn H225-generic-parameters-definition.asn Manufacturer-specific-service-extension-definition.asn H4501-General-Error-List.asn Call-Transfer-Operations.asn Call-Diversion-Operations.asn Call-Hold-Operations.asn Call-Park-Pickup-Operations.asn Call-Waiting-Operations.asn Message-Waiting-Indication-Operations.asn Name-Operations.asn Call-Completion-Operations.asn Call-Offer-Operations.asn Call-Intrusion-Operations.asn Common-Information-Operations.asn */
/* Input file: packet-h450-template.c */
@ -80,7 +80,7 @@ static int hf_h450_anyEntity = -1; /* NULL */
static int hf_h450_discardAnyUnrecognizedInvokePdu = -1; /* NULL */
static int hf_h450_clearCallIfAnyInvokePduNotRecognized = -1; /* NULL */
static int hf_h450_rejectAnyUnrecognizedInvokePdu = -1; /* NULL */
static int hf_h450_rosApdus = -1; /* SEQUENCE_SIZE_1_MAX_OF_ROS */
static int hf_h450_rosApdus = -1; /* T_rosApdus */
static int hf_h450_rosApdus_item = -1; /* T_rosApdus_item */
static int hf_h450_addressScreened_presentationAllowedAddress = -1; /* AddressScreened */
static int hf_h450_presentationRestricted = -1; /* NULL */
@ -477,7 +477,7 @@ static gint ett_h450_NetworkFacilityExtension = -1;
static gint ett_h450_EntityType = -1;
static gint ett_h450_InterpretationApdu = -1;
static gint ett_h450_ServiceApdus = -1;
static gint ett_h450_SEQUENCE_SIZE_1_MAX_OF_ROS = -1;
static gint ett_h450_T_rosApdus = -1;
static gint ett_h450_PresentedAddressScreened = -1;
static gint ett_h450_PresentedAddressUnscreened = -1;
static gint ett_h450_PresentedNumberScreened = -1;
@ -952,14 +952,14 @@ dissect_h450_T_rosApdus_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx
}
static const per_sequence_t h450_SEQUENCE_SIZE_1_MAX_OF_ROS_sequence_of[1] = {
static const per_sequence_t h450_T_rosApdus_sequence_of[1] = {
{ &hf_h450_rosApdus_item , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h450_T_rosApdus_item },
};
static int
dissect_h450_SEQUENCE_SIZE_1_MAX_OF_ROS(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
dissect_h450_T_rosApdus(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_h450_SEQUENCE_SIZE_1_MAX_OF_ROS, h450_SEQUENCE_SIZE_1_MAX_OF_ROS_sequence_of,
ett_h450_T_rosApdus, h450_T_rosApdus_sequence_of,
1, NO_BOUND);
return offset;
@ -972,7 +972,7 @@ static const value_string h450_ServiceApdus_vals[] = {
};
static const per_choice_t h450_ServiceApdus_choice[] = {
{ 0, &hf_h450_rosApdus , ASN1_EXTENSION_ROOT , dissect_h450_SEQUENCE_SIZE_1_MAX_OF_ROS },
{ 0, &hf_h450_rosApdus , ASN1_EXTENSION_ROOT , dissect_h450_T_rosApdus },
{ 0, NULL, 0, NULL }
};
@ -5080,7 +5080,7 @@ void proto_register_h450(void) {
{ &hf_h450_rosApdus,
{ "rosApdus", "h450.rosApdus",
FT_UINT32, BASE_DEC, NULL, 0,
"h450.SEQUENCE_SIZE_1_MAX_OF_ROS", HFILL }},
"h450.T_rosApdus", HFILL }},
{ &hf_h450_rosApdus_item,
{ "Item", "h450.rosApdus_item",
FT_UINT32, BASE_DEC, VALS(h450_ros_ROS_vals), 0,
@ -6520,7 +6520,7 @@ void proto_register_h450(void) {
&ett_h450_EntityType,
&ett_h450_InterpretationApdu,
&ett_h450_ServiceApdus,
&ett_h450_SEQUENCE_SIZE_1_MAX_OF_ROS,
&ett_h450_T_rosApdus,
&ett_h450_PresentedAddressScreened,
&ett_h450_PresentedAddressUnscreened,
&ett_h450_PresentedNumberScreened,

View File

@ -1,7 +1,7 @@
/* Do not modify this file. */
/* It is created automatically by the ASN.1 to Wireshark dissector compiler */
/* ./packet-t38.c */
/* ../../tools/asn2wrs.py -p t38 -c t38.cnf -s packet-t38-template T38(2002).asn */
/* packet-t38.c */
/* ../../tools/asn2wrs.py -p t38 -c t38.cnf -s packet-t38-template T38_2002.asn */
/* Input file: packet-t38-template.c */

View File

@ -1,7 +1,7 @@
/* Do not modify this file. */
/* It is created automatically by the ASN.1 to Wireshark dissector compiler */
/* ./packet-t38.h */
/* ../../tools/asn2wrs.py -p t38 -c t38.cnf -s packet-t38-template T38(2002).asn */
/* packet-t38.h */
/* ../../tools/asn2wrs.py -p t38 -c t38.cnf -s packet-t38-template T38_2002.asn */
/* Input file: packet-t38-template.h */