forked from osmocom/wireshark
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:
parent
5fa636334b
commit
286f231eb9
|
@ -43,6 +43,7 @@ SUBDIRS = \
|
|||
h235 \
|
||||
h245 \
|
||||
h248 \
|
||||
h323 \
|
||||
h450 \
|
||||
h450-ros \
|
||||
inap \
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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))
|
||||
|
||||
|
||||
|
|
|
@ -16,10 +16,13 @@ ClearToken
|
|||
CryptoToken
|
||||
AuthenticationMechanism
|
||||
|
||||
SrtpCryptoCapability
|
||||
SrtpKeys
|
||||
#.END
|
||||
|
||||
#.PDU_NEW
|
||||
SrtpCryptoCapability
|
||||
#.END
|
||||
|
||||
#.OMIT_ASSIGNMENT
|
||||
ECGDSASignature
|
||||
H235CertificateSignature
|
||||
|
|
|
@ -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));
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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
|
||||
|
|
@ -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))
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
|
@ -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
|
|
@ -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));
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
|
@ -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 \
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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));
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -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 ---*/
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
|
@ -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 */
|
||||
|
||||
|
|
|
@ -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 */
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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 */
|
||||
|
||||
|
|
|
@ -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 */
|
||||
|
||||
|
|
Loading…
Reference in New Issue