aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomas Kukosa <tomas.kukosa@siemens.com>2005-09-20 10:56:08 +0000
committerTomas Kukosa <tomas.kukosa@siemens.com>2005-09-20 10:56:08 +0000
commitd3492e684a5c5d69c62672e108384961b4367477 (patch)
treeadfcf988eab408f711a60befd92074265e6bab65
parentdce67e2bbe11bf500cbe593140d26cea4dde08f0 (diff)
asn2eth
- #.FN_BODY accepts parameters too - single line variant of #.FN_PAR is possible - new parameter FN_VARIANT for OBJECT IDENTIFIER packet-per.c - dissect_per_object_identifier() returns value as tvb - new dissect_per_object_identifier_str() function PER dissectors adapted and regenerated svn path=/trunk/; revision=15894
-rw-r--r--asn1/h225/h225.cnf66
-rw-r--r--asn1/h225/packet-h225-template.c4
-rw-r--r--asn1/h245/h245.cnf61
-rw-r--r--asn1/h245/packet-h245-template.c4
-rw-r--r--asn1/h450/packet-h450-template.c4
-rw-r--r--epan/dissectors/packet-h225.c22
-rw-r--r--epan/dissectors/packet-h235.c3
-rw-r--r--epan/dissectors/packet-h245.c15
-rw-r--r--epan/dissectors/packet-h450.c7
-rw-r--r--epan/dissectors/packet-per.c54
-rw-r--r--epan/dissectors/packet-per.h3
-rwxr-xr-xtools/asn2eth.py54
12 files changed, 136 insertions, 161 deletions
diff --git a/asn1/h225/h225.cnf b/asn1/h225/h225.cnf
index b746a1d88e..a2f370241e 100644
--- a/asn1/h225/h225.cnf
+++ b/asn1/h225/h225.cnf
@@ -137,9 +137,7 @@ RegistrationRejectReason/securityError reg_securityError
CallIdentifier/guid guid
#----------------------------------------------------------------------------------------
-#.FN_PARS H323-UU-PDU/h323-message-body
- VAL_PTR = &message_body_val
-#.FN_BODY H323-UU-PDU/h323-message-body
+#.FN_BODY H323-UU-PDU/h323-message-body VAL_PTR = &message_body_val
guint32 message_body_val;
contains_faststart = FALSE;
@@ -166,9 +164,7 @@ CallIdentifier/guid guid
#.END
#----------------------------------------------------------------------------------------
-#.FN_PARS FastStart/_item
- VAL_PTR = &value_tvb
-#.FN_BODY FastStart/_item
+#.FN_BODY FastStart/_item VAL_PTR = &value_tvb
tvbuff_t *value_tvb = NULL;
char codec_str[50];
@@ -184,9 +180,7 @@ CallIdentifier/guid guid
h225_pi->is_faststart = TRUE;
#.END
#----------------------------------------------------------------------------------------
-#.FN_PARS RasMessage
- VAL_PTR = &rasmessage_value
-#.FN_BODY RasMessage
+#.FN_BODY RasMessage VAL_PTR = &rasmessage_value
guint32 rasmessage_value;
%(DEFAULT_BODY)s
@@ -203,9 +197,7 @@ CallIdentifier/guid guid
h225_pi->is_destinationInfo = TRUE;
#.END
#----------------------------------------------------------------------------------------
-#.FN_PARS DialedDigits
- VAL_PTR = &value_tvb
-#.FN_BODY DialedDigits
+#.FN_BODY DialedDigits VAL_PTR = &value_tvb
tvbuff_t *value_tvb = NULL;
guint len = 0;
@@ -223,9 +215,7 @@ CallIdentifier/guid guid
}
#.END
#----------------------------------------------------------------------------------------
-#.FN_PARS H245TransportAddress/h245ipAddress/h245ipv4
- VAL_PTR = &value_tvb
-#.FN_BODY H245TransportAddress/h245ipAddress/h245ipv4
+#.FN_BODY H245TransportAddress/h245ipAddress/h245ipv4 VAL_PTR = &value_tvb
tvbuff_t *value_tvb;
ipv4_address = 0;
@@ -234,13 +224,9 @@ CallIdentifier/guid guid
ipv4_address = tvb_get_ipv4(value_tvb, 0);
#.END
#----------------------------------------------------------------------------------------
-#.FN_PARS H245TransportAddress/h245ipAddress/h245ipv4port
- VAL_PTR = &ipv4_port
-#.END
+#.FN_PARS H245TransportAddress/h245ipAddress/h245ipv4port VAL_PTR = &ipv4_port
#----------------------------------------------------------------------------------------
-#.FN_PARS ParallelH245Control/_item
- VAL_PTR = &h245_tvb
-#.FN_BODY ParallelH245Control/_item
+#.FN_BODY ParallelH245Control/_item VAL_PTR = &h245_tvb
tvbuff_t *h245_tvb = NULL;
%(DEFAULT_BODY)s
@@ -249,9 +235,7 @@ CallIdentifier/guid guid
}
#.END
#----------------------------------------------------------------------------------------
-#.FN_PARS H245Control/_item
- VAL_PTR = &h245_tvb
-#.FN_BODY H245Control/_item
+#.FN_BODY H245Control/_item VAL_PTR = &h245_tvb
tvbuff_t *h245_tvb = NULL;
%(DEFAULT_BODY)s
@@ -291,9 +275,7 @@ CallIdentifier/guid guid
g_snprintf(h225_pi->frame_label, 50, "%s", val_to_str(h225_pi->cs_type, T_h323_message_body_vals, "<unknown>"));
#.END
#----------------------------------------------------------------------------------------
-#.FN_PARS H323-UU-PDU/h245Tunneling
- VAL_PTR = &(h225_pi->is_h245Tunneling)
-#.END
+#.FN_PARS H323-UU-PDU/h245Tunneling VAL_PTR = &(h225_pi->is_h245Tunneling)
#----------------------------------------------------------------------------------------
#.FN_HDR Setup-UUIE
contains_faststart = FALSE;
@@ -475,17 +457,13 @@ ReleaseCompleteReason VAL_PTR = &value
tvb_memcpy(guid_tvb,h225_pi->guid,0,tvb_length(guid_tvb));
#.END
#----------------------------------------------------------------------------------------
-#.FN_PARS RequestSeqNum
- VAL_PTR = &(h225_pi->requestSeqNum)
-#.END
+#.FN_PARS RequestSeqNum VAL_PTR = &(h225_pi->requestSeqNum)
#----------------------------------------------------------------------------------------
-#.FN_PARS H323-UU-PDU/h4501SupplementaryService/_item
- VAL_PTR = &h4501_tvb
-#.FN_BODY H323-UU-PDU/h4501SupplementaryService/_item
+#.FN_BODY H323-UU-PDU/h4501SupplementaryService/_item VAL_PTR = &h4501_tvb
tvbuff_t *h4501_tvb = NULL;
%(DEFAULT_BODY)s
- if(tvb_length(h4501_tvb)){
+ if (h4501_tvb && tvb_length(h4501_tvb)) {
call_dissector(h4501_handle, h4501_tvb, pinfo, tree);
}
#.END
@@ -494,18 +472,16 @@ ReleaseCompleteReason VAL_PTR = &value
#--- TunnelledProtocol ------------------------------------------------------------------
#.FN_HDR TunnelledProtocol
- tpOID[0] = '\0';
+ tpOID = "";
#.FN_FTR TunnelledProtocol
tp_handle = dissector_get_string_handle(tp_dissector_table, tpOID);
#.FN_PARS TunnelledProtocol/id/tunnelledProtocolObjectID
- VAL_PTR = tpOID
+ FN_VARIANT = _str VAL_PTR = &tpOID
#.END
#.FN_HDR H323-UU-PDU/tunnelledSignallingMessage
tp_handle = NULL;
-#.FN_PARS H323-UU-PDU/tunnelledSignallingMessage/messageContent/_item
- VAL_PTR = &next_tvb
-#.FN_BODY H323-UU-PDU/tunnelledSignallingMessage/messageContent/_item
+#.FN_BODY H323-UU-PDU/tunnelledSignallingMessage/messageContent/_item VAL_PTR = &next_tvb
tvbuff_t *next_tvb = NULL;
%(DEFAULT_BODY)s
@@ -517,14 +493,13 @@ ReleaseCompleteReason VAL_PTR = &value
#--- NonStandardParameter ---------------------------------------------------------------
#.FN_PARS
-NonStandardIdentifier VAL_PTR = &value
-NonStandardIdentifier/object VAL_PTR = nsiOID
+NonStandardIdentifier/object FN_VARIANT = _str VAL_PTR = &nsiOID
#.END
-#.FN_BODY NonStandardIdentifier
+#.FN_BODY NonStandardIdentifier VAL_PTR = &value
guint32 value;
- nsiOID[0] = '\0';
+ nsiOID = "";
h221NonStandard = 0;
%(DEFAULT_BODY)s
@@ -555,9 +530,7 @@ H221NonStandard/manufacturerCode VAL_PTR = &manufacturerCode
#.FN_HDR NonStandardParameter
nsp_handle = NULL;
-#.FN_PARS NonStandardParameter/data
- VAL_PTR = &next_tvb
-#.FN_BODY NonStandardParameter/data
+#.FN_BODY NonStandardParameter/data VAL_PTR = &next_tvb
tvbuff_t *next_tvb = NULL;
%(DEFAULT_BODY)s
@@ -581,3 +554,4 @@ FastStart/_item TYPE = FT_UINT32 DISPLAY = BASE_DEC
ParallelH245Control/_item TYPE = FT_UINT32 DISPLAY = BASE_DEC
H245Control/_item TYPE = FT_UINT32 DISPLAY = BASE_DEC
GloballyUniqueID TYPE = FT_GUID DISPLAY = BASE_NONE
+#.END
diff --git a/asn1/h225/packet-h225-template.c b/asn1/h225/packet-h225-template.c
index b1b087686b..018fde9b3f 100644
--- a/asn1/h225/packet-h225-template.c
+++ b/asn1/h225/packet-h225-template.c
@@ -115,14 +115,14 @@ guint32 value;
static gboolean contains_faststart = FALSE;
/* NonStandardParameter */
-static char nsiOID[MAX_OID_STR_LEN];
+static char *nsiOID;
static guint32 h221NonStandard;
static guint32 t35CountryCode;
static guint32 t35Extension;
static guint32 manufacturerCode;
/* TunnelledProtocol */
-static char tpOID[MAX_OID_STR_LEN];
+static char *tpOID;
#include "packet-h225-fn.c"
diff --git a/asn1/h245/h245.cnf b/asn1/h245/h245.cnf
index d6722364ca..2a88f1206f 100644
--- a/asn1/h245/h245.cnf
+++ b/asn1/h245/h245.cnf
@@ -12,9 +12,7 @@ OpenLogicalChannel
OpenLogicalChannel
#----------------------------------------------------------------------------------------
-#.FN_PARS RequestMessage
- VAL_PTR = &value
-#.FN_BODY RequestMessage
+#.FN_BODY RequestMessage VAL_PTR = &value
guint32 value;
%(DEFAULT_BODY)s
@@ -52,9 +50,7 @@ OpenLogicalChannel
g_snprintf(h245_pi->frame_label, 50, "%%s (%%s) ", h245_pi->frame_label, codec_type);
#.END
#----------------------------------------------------------------------------------------
-#.FN_PARS ResponseMessage
- VAL_PTR = &value
-#.FN_BODY ResponseMessage
+#.FN_BODY ResponseMessage VAL_PTR = &value
guint32 value;
%(DEFAULT_BODY)s
@@ -78,9 +74,7 @@ OpenLogicalChannel
g_snprintf(h245_pi->comment, 50, "%%s %%s ", h245_pi->comment, val_to_str(value, h245_ResponseMessage_vals, "<unknown>"));
#.END
#----------------------------------------------------------------------------------------
-#.FN_PARS IndicationMessage
- VAL_PTR = &value
-#.FN_BODY IndicationMessage
+#.FN_BODY IndicationMessage VAL_PTR = &value
guint32 value;
%(DEFAULT_BODY)s
@@ -103,9 +97,7 @@ OpenLogicalChannel
g_snprintf(h245_pi->comment, 50, "%%s %%s ", h245_pi->comment, val_to_str(value, h245_IndicationMessage_vals, "<unknown>"));
#.END
#----------------------------------------------------------------------------------------
-#.FN_PARS CommandMessage
- VAL_PTR = &value
-#.FN_BODY CommandMessage
+#.FN_BODY CommandMessage VAL_PTR = &value
guint32 value;
%(DEFAULT_BODY)s
@@ -129,9 +121,7 @@ OpenLogicalChannel
#.END
#----------------------------------------------------------------------------------------
-#.FN_PARS AudioCapability
- VAL_PTR = &value
-#.FN_BODY AudioCapability
+#.FN_BODY AudioCapability VAL_PTR = &value
guint32 value;
%(DEFAULT_BODY)s
@@ -140,9 +130,7 @@ OpenLogicalChannel
#.END
#----------------------------------------------------------------------------------------
-#.FN_PARS VideoCapability
- VAL_PTR = &value
-#.FN_BODY VideoCapability
+#.FN_BODY VideoCapability VAL_PTR = &value
guint32 value;
%(DEFAULT_BODY)s
@@ -151,9 +139,7 @@ OpenLogicalChannel
#.END
#----------------------------------------------------------------------------------------
-#.FN_PARS Application
- VAL_PTR = &value
-#.FN_BODY Application
+#.FN_BODY Application VAL_PTR = &value
guint32 value;
%(DEFAULT_BODY)s
@@ -161,9 +147,7 @@ OpenLogicalChannel
if (h245_pi != NULL) g_snprintf(h245_pi->frame_label, 50, "%%s %%s", h245_pi->frame_label, codec_type);
#.END
#----------------------------------------------------------------------------------------
-#.FN_PARS AudioMode
- VAL_PTR = &value
-#.FN_BODY AudioMode
+#.FN_BODY AudioMode VAL_PTR = &value
guint32 value;
%(DEFAULT_BODY)s
@@ -171,9 +155,7 @@ OpenLogicalChannel
if (h245_pi != NULL) g_snprintf(h245_pi->frame_label, 50, "%%s %%s", h245_pi->frame_label, val_to_str(value, h245_AudioMode_vals, "ukn"));
#.END
#----------------------------------------------------------------------------------------
-#.FN_PARS VideoMode
- VAL_PTR = &value
-#.FN_BODY VideoMode
+#.FN_BODY VideoMode VAL_PTR = &value
guint32 value;
%(DEFAULT_BODY)s
@@ -181,9 +163,7 @@ OpenLogicalChannel
if (h245_pi != NULL) g_snprintf(h245_pi->frame_label, 50, "%%s %%s", h245_pi->frame_label, val_to_str(value, h245_VideoMode_vals, "ukn"));
#.END
#----------------------------------------------------------------------------------------
-#.FN_PARS DataModeApplication
- VAL_PTR = &value
-#.FN_BODY DataModeApplication
+#.FN_BODY DataModeApplication VAL_PTR = &value
guint32 value;
%(DEFAULT_BODY)s
@@ -262,7 +242,7 @@ OpenLogicalChannel
#.END
#----------------------------------------------------------------------------------------
#.FN_PARS CapabilityIdentifier/standard
- VAL_PTR = standard_oid_str
+ FN_VARIANT = _str VAL_PTR = &standard_oid_str
#.END
#----------------------------------------------------------------------------------------
#.FN_HDR GenericMessage/subMessageIdentifer
@@ -272,9 +252,7 @@ OpenLogicalChannel
VAL_PTR = &subMessageIdentifer
#.END
#----------------------------------------------------------------------------------------
-#.FN_PARS UnicastAddress/iPAddress/network
- VAL_PTR = &value_tvb
-#.FN_BODY UnicastAddress/iPAddress/network
+#.FN_BODY UnicastAddress/iPAddress/network VAL_PTR = &value_tvb
tvbuff_t *value_tvb;
@@ -287,9 +265,7 @@ OpenLogicalChannel
#.END
#----------------------------------------------------------------------------------------
-#.FN_PARS UnicastAddress/iPAddress/tsapIdentifier
- VAL_PTR = &tsapIdentifier
-#.FN_BODY UnicastAddress/iPAddress/tsapIdentifier
+#.FN_BODY UnicastAddress/iPAddress/tsapIdentifier VAL_PTR = &tsapIdentifier
guint32 tsapIdentifier;
%(DEFAULT_BODY)s
@@ -413,13 +389,12 @@ OpenLogicalChannel
#--- NonStandardParameter ---------------------------------------------------------------
#.FN_PARS
-NonStandardIdentifier VAL_PTR = &value
-NonStandardIdentifier/object VAL_PTR = nsiOID
+NonStandardIdentifier/object FN_VARIANT = _str VAL_PTR = &nsiOID
#.END
-#.FN_BODY NonStandardIdentifier
+#.FN_BODY NonStandardIdentifier VAL_PTR = &value
guint32 value;
- nsiOID[0] = '\0';
+ nsiOID = "";
h221NonStandard = 0;
%(DEFAULT_BODY)s
@@ -450,9 +425,7 @@ NonStandardIdentifier/h221NonStandard/manufacturerCode VAL_PTR = &manufacturerC
#.FN_HDR NonStandardParameter
nsp_handle = NULL;
-#.FN_PARS NonStandardParameter/data
- VAL_PTR = &next_tvb
-#.FN_BODY NonStandardParameter/data
+#.FN_BODY NonStandardParameter/data VAL_PTR = &next_tvb
tvbuff_t *next_tvb = NULL;
%(DEFAULT_BODY)s
diff --git a/asn1/h245/packet-h245-template.c b/asn1/h245/packet-h245-template.c
index e1f6267c4a..4bc2b01839 100644
--- a/asn1/h245/packet-h245-template.c
+++ b/asn1/h245/packet-h245-template.c
@@ -200,7 +200,7 @@ static const value_string h245_AudioCapability_short_vals[] = {
an OLC is read */
const char* codec_type = NULL;
-static char standard_oid_str[MAX_OID_STR_LEN];
+static char *standard_oid_str;
static guint32 ipv4_address;
static guint32 ipv4_port;
static guint32 rtcp_ipv4_address;
@@ -209,7 +209,7 @@ static gboolean media_channel;
static gboolean media_control_channel;
/* NonStandardParameter */
-static char nsiOID[MAX_OID_STR_LEN];
+static char *nsiOID;
static guint32 h221NonStandard;
static guint32 t35CountryCode;
static guint32 t35Extension;
diff --git a/asn1/h450/packet-h450-template.c b/asn1/h450/packet-h450-template.c
index c8884d2ffa..e752a7bfd2 100644
--- a/asn1/h450/packet-h450-template.c
+++ b/asn1/h450/packet-h450-template.c
@@ -218,7 +218,7 @@ static gint ett_h4501_ROS = -1;
/* Global variables */
static guint32 localOpcode;
static guint32 localErrorCode;
-static char globalcode_oid_str[256];
+static char *globalcode_oid_str;
static gboolean is_globalcode;
static const value_string localOpcode_vals[] = {
@@ -423,7 +423,7 @@ dissect_h4501_localOpcode(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_t
static int
dissect_h4501_globalCode(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
- offset=dissect_per_object_identifier(tvb, offset, pinfo, tree, hf_h4501_globalCode, globalcode_oid_str);
+ offset=dissect_per_object_identifier_str(tvb, offset, pinfo, tree, hf_h4501_globalCode, &globalcode_oid_str);
is_globalcode = TRUE;
return offset;
}
diff --git a/epan/dissectors/packet-h225.c b/epan/dissectors/packet-h225.c
index 286e6902e6..767b331290 100644
--- a/epan/dissectors/packet-h225.c
+++ b/epan/dissectors/packet-h225.c
@@ -1109,14 +1109,14 @@ guint32 value;
static gboolean contains_faststart = FALSE;
/* NonStandardParameter */
-static char nsiOID[MAX_OID_STR_LEN];
+static char *nsiOID;
static guint32 h221NonStandard;
static guint32 t35CountryCode;
static guint32 t35Extension;
static guint32 manufacturerCode;
/* TunnelledProtocol */
-static char tpOID[MAX_OID_STR_LEN];
+static char *tpOID;
/*--- Included file: packet-h225-fn.c ---*/
@@ -1199,8 +1199,7 @@ static int dissect_authenticationMode(tvbuff_t *tvb, int offset, packet_info *pi
static int
dissect_h225_ProtocolIdentifier(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
- offset = dissect_per_object_identifier(tvb, offset, pinfo, tree, hf_index,
- NULL);
+ offset = dissect_per_object_identifier(tvb, offset, pinfo, tree, hf_index, NULL);
return offset;
}
@@ -2002,8 +2001,7 @@ static int dissect_h245nsap(tvbuff_t *tvb, int offset, packet_info *pinfo, proto
static int
dissect_h225_T_object(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
- offset = dissect_per_object_identifier(tvb, offset, pinfo, tree, hf_index,
- nsiOID);
+ offset = dissect_per_object_identifier_str(tvb, offset, pinfo, tree, hf_index, &nsiOID);
return offset;
}
@@ -2094,7 +2092,7 @@ static int
dissect_h225_NonStandardIdentifier(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
guint32 value;
- nsiOID[0] = '\0';
+ nsiOID = "";
h221NonStandard = 0;
offset = dissect_per_choice(tvb, offset, pinfo, tree, hf_index,
@@ -3043,8 +3041,7 @@ static int dissect_versionId(tvbuff_t *tvb, int offset, packet_info *pinfo, prot
static int
dissect_h225_OBJECT_IDENTIFIER(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
- offset = dissect_per_object_identifier(tvb, offset, pinfo, tree, hf_index,
- NULL);
+ offset = dissect_per_object_identifier(tvb, offset, pinfo, tree, hf_index, NULL);
return offset;
}
@@ -3755,8 +3752,7 @@ static int dissect_set(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree
static int
dissect_h225_T_tunnelledProtocolObjectID(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
- offset = dissect_per_object_identifier(tvb, offset, pinfo, tree, hf_index,
- tpOID);
+ offset = dissect_per_object_identifier_str(tvb, offset, pinfo, tree, hf_index, &tpOID);
return offset;
}
@@ -3835,7 +3831,7 @@ static const per_sequence_t TunnelledProtocol_sequence[] = {
static int
dissect_h225_TunnelledProtocol(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
- tpOID[0] = '\0';
+ tpOID = "";
offset = dissect_per_sequence(tvb, offset, pinfo, tree, hf_index,
ett_h225_TunnelledProtocol, TunnelledProtocol_sequence);
@@ -6193,7 +6189,7 @@ dissect_h225_T_h4501SupplementaryService_item(tvbuff_t *tvb, int offset, packet_
offset = dissect_per_octet_string(tvb, offset, pinfo, tree, hf_index,
-1, -1, &h4501_tvb);
- if(tvb_length(h4501_tvb)){
+ if (h4501_tvb && tvb_length(h4501_tvb)) {
call_dissector(h4501_handle, h4501_tvb, pinfo, tree);
}
diff --git a/epan/dissectors/packet-h235.c b/epan/dissectors/packet-h235.c
index 119325833c..95703219e9 100644
--- a/epan/dissectors/packet-h235.c
+++ b/epan/dissectors/packet-h235.c
@@ -251,8 +251,7 @@ static int dissect_secureChannel(tvbuff_t *tvb, int offset, packet_info *pinfo,
static int
dissect_h235_OBJECT_IDENTIFIER(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
- offset = dissect_per_object_identifier(tvb, offset, pinfo, tree, hf_index,
- NULL);
+ offset = dissect_per_object_identifier(tvb, offset, pinfo, tree, hf_index, NULL);
return offset;
}
diff --git a/epan/dissectors/packet-h245.c b/epan/dissectors/packet-h245.c
index d8c5465aa0..88a0881b9c 100644
--- a/epan/dissectors/packet-h245.c
+++ b/epan/dissectors/packet-h245.c
@@ -207,7 +207,7 @@ static const value_string h245_AudioCapability_short_vals[] = {
an OLC is read */
const char* codec_type = NULL;
-static char standard_oid_str[MAX_OID_STR_LEN];
+static char *standard_oid_str;
static guint32 ipv4_address;
static guint32 ipv4_port;
static guint32 rtcp_ipv4_address;
@@ -216,7 +216,7 @@ static gboolean media_channel;
static gboolean media_control_channel;
/* NonStandardParameter */
-static char nsiOID[MAX_OID_STR_LEN];
+static char *nsiOID;
static guint32 h221NonStandard;
static guint32 t35CountryCode;
static guint32 t35Extension;
@@ -2159,8 +2159,7 @@ static int dissect_type(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tre
static int
dissect_h245_T_object(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
- offset = dissect_per_object_identifier(tvb, offset, pinfo, tree, hf_index,
- nsiOID);
+ offset = dissect_per_object_identifier_str(tvb, offset, pinfo, tree, hf_index, &nsiOID);
return offset;
}
@@ -2248,7 +2247,7 @@ static int
dissect_h245_NonStandardIdentifier(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
guint32 value;
- nsiOID[0] = '\0';
+ nsiOID = "";
h221NonStandard = 0;
offset = dissect_per_choice(tvb, offset, pinfo, tree, hf_index,
@@ -2459,8 +2458,7 @@ static int dissect_h233AlgorithmIdentifier(tvbuff_t *tvb, int offset, packet_inf
static int
dissect_h245_OBJECT_IDENTIFIER(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
- offset = dissect_per_object_identifier(tvb, offset, pinfo, tree, hf_index,
- NULL);
+ offset = dissect_per_object_identifier(tvb, offset, pinfo, tree, hf_index, NULL);
return offset;
}
@@ -5222,8 +5220,7 @@ static int dissect_t38fax(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_t
static int
dissect_h245_T_standard(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
- offset = dissect_per_object_identifier(tvb, offset, pinfo, tree, hf_index,
- standard_oid_str);
+ offset = dissect_per_object_identifier_str(tvb, offset, pinfo, tree, hf_index, &standard_oid_str);
return offset;
}
diff --git a/epan/dissectors/packet-h450.c b/epan/dissectors/packet-h450.c
index dbb8bcbe9e..93b2542fd7 100644
--- a/epan/dissectors/packet-h450.c
+++ b/epan/dissectors/packet-h450.c
@@ -583,7 +583,7 @@ static gint ett_h450_Extension = -1;
/* Global variables */
static guint32 localOpcode;
static guint32 localErrorCode;
-static char globalcode_oid_str[256];
+static char *globalcode_oid_str;
static gboolean is_globalcode;
static const value_string localOpcode_vals[] = {
@@ -1405,8 +1405,7 @@ static int dissect_presentationAllowedIndicator(tvbuff_t *tvb, int offset, packe
static int
dissect_h450_OBJECT_IDENTIFIER(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
- offset = dissect_per_object_identifier(tvb, offset, pinfo, tree, hf_index,
- NULL);
+ offset = dissect_per_object_identifier(tvb, offset, pinfo, tree, hf_index, NULL);
return offset;
}
@@ -4226,7 +4225,7 @@ dissect_h4501_localOpcode(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_t
static int
dissect_h4501_globalCode(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
- offset=dissect_per_object_identifier(tvb, offset, pinfo, tree, hf_h4501_globalCode, globalcode_oid_str);
+ offset=dissect_per_object_identifier_str(tvb, offset, pinfo, tree, hf_h4501_globalCode, &globalcode_oid_str);
is_globalcode = TRUE;
return offset;
}
diff --git a/epan/dissectors/packet-per.c b/epan/dissectors/packet-per.c
index bdc98a08e6..06f35d3ec4 100644
--- a/epan/dissectors/packet-per.c
+++ b/epan/dissectors/packet-per.c
@@ -203,7 +203,6 @@ dissect_per_GeneralString(tvbuff_t *tvb, guint32 offset, packet_info *pinfo, pro
offset=dissect_per_length_determinant(tvb, offset, pinfo, tree, hf_per_GeneralString_length, &length);
-
proto_tree_add_item(tree, hf_index, tvb, offset>>3, length, FALSE);
offset+=length*8;
@@ -603,19 +602,32 @@ DEBUG_ENTRY("dissect_per_set_of");
/* 23 Encoding the object identifier type */
guint32
-dissect_per_object_identifier(tvbuff_t *tvb, guint32 offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index, char *value_string)
+dissect_per_object_identifier(tvbuff_t *tvb, guint32 offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index, tvbuff_t **value_tvb)
{
- guint length;
- char *str, *name;
- proto_item *item;
+ guint length;
+ char *str, *name;
+ proto_item *item;
+ header_field_info *hfi;
DEBUG_ENTRY("dissect_per_object_identifier");
- offset = dissect_per_length_determinant(tvb, offset, pinfo, tree, hf_per_object_identifier_length, &length);
+ offset = dissect_per_length_determinant(tvb, offset, pinfo, tree, hf_per_object_identifier_length, &length);
+
+ str = oid_to_str(tvb_get_ptr(tvb, offset>>3, length), length);
+
+ hfi = proto_registrar_get_nth(hf_index);
+ /*if (hfi->type == FT_OID) {
+ item = proto_tree_add_item(tree, hf_index, tvb, offset>>3, length, FALSE);
+ } else*/ if (IS_FT_STRING(hfi->type)) {
+ item = proto_tree_add_string(tree, hf_index, tvb, offset>>3, length, str);
+ } else {
+ DISSECTOR_ASSERT_NOT_REACHED();
+ }
+
+ if (value_tvb)
+ *value_tvb = tvb_new_subset(tvb, offset>>3, length, length);
- str = oid_to_str(tvb_get_ptr(tvb, offset>>3, length), length);
- item = proto_tree_add_string(tree, hf_index, tvb, offset>>3, length, str);
- offset += 8 * length;
+ offset += 8 * length;
/* see if we know the name of this oid */
if(item){
@@ -625,13 +637,27 @@ DEBUG_ENTRY("dissect_per_object_identifier");
}
}
- if (value_string) {
- strcpy(value_string, str);
- }
-
- return offset;
+ return offset;
}
+guint32
+dissect_per_object_identifier_str(tvbuff_t *tvb, guint32 offset, packet_info *pinfo, proto_tree *tree, int hf_index, const char **value_string)
+{
+ tvbuff_t *value_tvb = NULL;
+ guint length;
+
+ offset = dissect_per_object_identifier(tvb, offset, pinfo, tree, hf_index, (value_string) ? &value_tvb : NULL);
+
+ if (value_string) {
+ if (value_tvb && (length = tvb_length(value_tvb))) {
+ *value_string = oid_to_str(tvb_get_ptr(tvb, 0, length), length);
+ } else {
+ *value_string = "";
+ }
+ }
+
+ return offset;
+}
diff --git a/epan/dissectors/packet-per.h b/epan/dissectors/packet-per.h
index ba2a375f8b..93d7f1f23a 100644
--- a/epan/dissectors/packet-per.h
+++ b/epan/dissectors/packet-per.h
@@ -88,7 +88,8 @@ extern guint32 dissect_per_constrained_set_of(tvbuff_t *tvb, guint32 offset, pac
extern guint32 dissect_per_set_of(tvbuff_t *tvb, guint32 offset, packet_info *pinfo, proto_tree *parent_tree, int hf_index, gint ett_index, const per_sequence_t *seq);
-extern guint32 dissect_per_object_identifier(tvbuff_t *tvb, guint32 offset, packet_info *pinfo, proto_tree *tree, int hf_index, char *value_string);
+extern guint32 dissect_per_object_identifier(tvbuff_t *tvb, guint32 offset, packet_info *pinfo, proto_tree *tree, int hf_index, tvbuff_t **value_tvb);
+extern guint32 dissect_per_object_identifier_str(tvbuff_t *tvb, guint32 offset, packet_info *pinfo, proto_tree *tree, int hf_index, const char **value_string);
extern guint32 dissect_per_boolean(tvbuff_t *tvb, guint32 offset, packet_info *pinfo, proto_tree *tree, int hf_index, gboolean *bool, proto_item **item);
diff --git a/tools/asn2eth.py b/tools/asn2eth.py
index 6beff7d5fb..e6fafb14a6 100755
--- a/tools/asn2eth.py
+++ b/tools/asn2eth.py
@@ -1340,20 +1340,20 @@ class EthCnf:
return par[0:pmax]
return par
- def get_par_nm(line, pnum, fn, lineno):
- if pnum:
- par = line.split(None, pnum)
+ def get_par_nm(line, pmin, pmax, fn, lineno):
+ if pmax:
+ par = line.split(None, pmax)
else:
par = [line,]
for i in range(len(par)):
if par[i][0] == '#':
par[i:] = []
break
- if len(par) < pnum:
- warnings.warn_explicit("Too few parameters.", UserWarning, fn, lineno)
+ if len(par) < pmin:
+ warnings.warn_explicit("Too few parameters. At least %d parameters are required" % (pmin), UserWarning, fn, lineno)
return None
- if len(par) > pnum:
- nmpar = par[pnum]
+ if len(par) > pmax:
+ nmpar = par[pmax]
else:
nmpar = ''
nmpars = {}
@@ -1373,8 +1373,8 @@ class EthCnf:
p2 = nmpar_end.search(nmpar, pos).start()
v = nmpar[p1:p2]
nmpars[k] = v
- if len(par) > pnum:
- par[pnum] = nmpars
+ if len(par) > pmax:
+ par[pmax] = nmpars
return par
f = open(fn, "r")
@@ -1404,18 +1404,29 @@ class EthCnf:
'TYPE_RENAME', 'FIELD_RENAME', 'IMPORT_TAG',
'TYPE_ATTR', 'ETYPE_ATTR', 'FIELD_ATTR', 'EFIELD_ATTR'):
ctx = result.group('name')
- elif result.group('name') in ('FN_HDR', 'FN_FTR', 'FN_BODY'):
+ elif result.group('name') in ('FN_HDR', 'FN_FTR'):
par = get_par(line[result.end():], 1, 1, fn=fn, lineno=lineno)
if not par: continue
ctx = result.group('name')
name = par[0]
+ elif result.group('name') == 'FN_BODY':
+ par = get_par_nm(line[result.end():], 1, 1, fn=fn, lineno=lineno)
+ if not par: continue
+ ctx = result.group('name')
+ name = par[0]
+ if len(par) > 1:
+ self.add_item('FN_PARS', name, pars=par[1], fn=fn, lineno=lineno)
elif result.group('name') == 'FN_PARS':
- par = get_par(line[result.end():], 0, 1, fn=fn, lineno=lineno)
+ par = get_par_nm(line[result.end():], 0, 1, fn=fn, lineno=lineno)
ctx = result.group('name')
if not par:
name = None
else:
name = par[0]
+ if len(par) > 1:
+ self.add_item(ctx, name, pars=par[1], fn=fn, lineno=lineno)
+ ctx = None
+ name = None
elif result.group('name') == 'INCLUDE':
par = get_par(line[result.end():], 1, 1, fn=fn, lineno=lineno)
if not par:
@@ -1506,15 +1517,15 @@ class EthCnf:
UserWarning, fn, lineno)
elif ctx in ('TYPE_ATTR', 'ETYPE_ATTR', 'FIELD_ATTR', 'EFIELD_ATTR'):
if empty.match(line): continue
- par = get_par_nm(line, 1, fn=fn, lineno=lineno)
+ par = get_par_nm(line, 1, 1, fn=fn, lineno=lineno)
if not par: continue
self.add_item(ctx, par[0], attr=par[1], fn=fn, lineno=lineno)
elif ctx == 'FN_PARS':
if empty.match(line): continue
if name:
- par = get_par_nm(line, 0, fn=fn, lineno=lineno)
+ par = get_par_nm(line, 0, 0, fn=fn, lineno=lineno)
else:
- par = get_par_nm(line, 1, fn=fn, lineno=lineno)
+ par = get_par_nm(line, 1, 1, fn=fn, lineno=lineno)
if not par: continue
if name:
self.add_item(ctx, name, pars=par[0], fn=fn, lineno=lineno)
@@ -1836,6 +1847,7 @@ class Type (Node):
pars = {
'TNAME' : tname,
'ER' : ectx.encp(),
+ 'FN_VARIANT' : '',
'PINFO' : 'pinfo',
'TREE' : 'tree',
'TVB' : 'tvb',
@@ -3009,16 +3021,14 @@ class ObjectIdentifierType (Type):
def eth_type_default_body(self, ectx, tname):
if (ectx.OBer()):
- body = ectx.eth_fn_call('dissect_%(ER)s_object_identifier', ret='offset',
- par=(('%(IMPLICIT_TAG)s', '%(PINFO)s', '%(TREE)s', '%(TVB)s', '%(OFFSET)s', '%(HF_INDEX)s'),
- ('%(VAL_PTR)s',),))
+ body = ectx.eth_fn_call('dissect_%(ER)s_object_identifier%(FN_VARIANT)s', ret='offset',
+ par=(('%(IMPLICIT_TAG)s', '%(PINFO)s', '%(TREE)s', '%(TVB)s', '%(OFFSET)s', '%(HF_INDEX)s', '%(VAL_PTR)s',),))
elif (ectx.NPer()):
- body = ectx.eth_fn_call('dissect_%(ER)s_object_identifier', ret='offset',
- par=(('%(TVB)s', '%(OFFSET)s', '%(PINFO)s', '%(TREE)s', '%(HF_INDEX)s', 'item', '%(VAL_PTR)s'),))
+ body = ectx.eth_fn_call('dissect_%(ER)s_object_identifier%(FN_VARIANT)s', ret='offset',
+ par=(('%(TVB)s', '%(OFFSET)s', '%(PINFO)s', '%(TREE)s', '%(HF_INDEX)s', 'item', '%(VAL_PTR)s',),))
elif (ectx.OPer()):
- body = ectx.eth_fn_call('dissect_%(ER)s_object_identifier', ret='offset',
- par=(('%(TVB)s', '%(OFFSET)s', '%(PINFO)s', '%(TREE)s', '%(HF_INDEX)s'),
- ('%(VAL_PTR)s',),))
+ body = ectx.eth_fn_call('dissect_%(ER)s_object_identifier%(FN_VARIANT)s', ret='offset',
+ par=(('%(TVB)s', '%(OFFSET)s', '%(PINFO)s', '%(TREE)s', '%(HF_INDEX)s', '%(VAL_PTR)s',),))
else:
body = '#error Can not decode %s' % (tname)
return body