aboutsummaryrefslogtreecommitdiffstats
path: root/asn1/h248
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2012-03-13 13:26:13 +0000
committerAnders Broman <anders.broman@ericsson.com>2012-03-13 13:26:13 +0000
commitfd19aa7c890996fa9d43440ea5c26433c486f059 (patch)
tree97ef9e04a7bf80c7438f281ab2b1628bff90efef /asn1/h248
parent16a7f0db082224083f55c3266fd7c5682f04d671 (diff)
H.248 Annex E dissector does not properly dissect event parameters
(Update the h.248 dissector's package registration to support v1 packets.) Applying part of the patch from Alex Lindberg in bug https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=6915 by hand. Fixes bug https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=4842 svn path=/trunk/; revision=41526
Diffstat (limited to 'asn1/h248')
-rw-r--r--asn1/h248/h248.cnf10
-rw-r--r--asn1/h248/h248v1support.asn10
-rw-r--r--asn1/h248/packet-h248-template.c28
3 files changed, 43 insertions, 5 deletions
diff --git a/asn1/h248/h248.cnf b/asn1/h248/h248.cnf
index 2c5d941102..1cb5105190 100644
--- a/asn1/h248/h248.cnf
+++ b/asn1/h248/h248.cnf
@@ -21,6 +21,8 @@ EventName
EventParameterName
EventParamValue
ContextID
+EventParamValueV1
+#SigParamValueV1
#.TYPE_RENAME
IndAudMediaDescriptor/streams IndAudMediaDescriptorStreams
@@ -81,6 +83,12 @@ TransactionRequest/transactionId transactionId
SegmentReply/transactionId seg_rep_transactionId
TransactionReply/transactionId trep_transactionId
TransactionPending/transactionId tpend_transactionId
+PropertyParmV1/values prop_param_values
+EventParameterV1/value event_param_value
+SigParameterV1/value sig_param_value
+PropertyParmV1/value prop_parm_value
+AuditReplyV1/auditResult audit_result
+PropertyParmV1/extraInfo extra_info
#.FN_HDR Message
curr_info.msg = gcp_msg(actx->pinfo,tvb_raw_offset(tvb),keep_persistent_data);
@@ -395,7 +403,7 @@ TransactionPending/transactionId tpend_transactionId
#.FN_BODY EventParameter
/* H248 v1 support */
- if (h248_version >1) {
+ if (h248_version > 1) {
%(DEFAULT_BODY)s
} else {
offset = dissect_h248_EventParameterV1( implicit_tag, tvb, offset, actx, tree, hf_index);
diff --git a/asn1/h248/h248v1support.asn b/asn1/h248/h248v1support.asn
index 2ab54f000d..a7b103682b 100644
--- a/asn1/h248/h248v1support.asn
+++ b/asn1/h248/h248v1support.asn
@@ -26,8 +26,8 @@ BEGIN
-- V1
EventParameterV1 ::= SEQUENCE
{
- eventParamterName [0] Name,
- value [1] ValueV1
+ eventParamterName [0] EventParameterName,
+ value [1] EventParamValueV1
}
-- V1
@@ -47,10 +47,12 @@ BEGIN
-- V1
SigParameterV1 ::= SEQUENCE
{
- sigParameterName [0] Name,
- value [1] ValueV1
+ sigParameterName [0] SigParameterName,
+ value [1] SigParamValueV1
}
ValueV1 ::= OCTET STRING
+ EventParamValueV1 ::= OCTET STRING
+ SigParamValueV1 ::= OCTET STRING
END \ No newline at end of file
diff --git a/asn1/h248/packet-h248-template.c b/asn1/h248/packet-h248-template.c
index 932817f9dd..8845d2c08b 100644
--- a/asn1/h248/packet-h248-template.c
+++ b/asn1/h248/packet-h248-template.c
@@ -1291,6 +1291,34 @@ static int dissect_h248_EventParamValue(gboolean implicit_tag _U_, tvbuff_t *tvb
return end_offset;
}
+static int dissect_h248_EventParamValueV1(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index _U_) {
+ tvbuff_t *next_tvb;
+ int end_offset;
+ gint8 class;
+ gboolean pc, ind;
+ gint32 tag;
+ guint32 len;
+
+ offset=dissect_ber_identifier(actx->pinfo, tree, tvb, offset, &class, &pc, &tag);
+ offset=dissect_ber_length(actx->pinfo, tree, tvb, offset, &len, &ind);
+ end_offset=offset+len;
+
+ if( (class!=BER_CLASS_UNI)
+ ||(tag!=BER_UNI_TAG_OCTETSTRING) ){
+ proto_tree_add_text(tree, tvb, offset-2, 2, "H.248 BER Error: OctetString expected but Class:%d PC:%d Tag:%d was unexpected", class, pc, tag);
+ return end_offset;
+ }
+
+
+ next_tvb = tvb_new_subset(tvb,offset,len,len);
+
+ if ( curr_info.par && curr_info.par->dissector) {
+ curr_info.par->dissector(tree, next_tvb, actx->pinfo, *(curr_info.par->hfid), &curr_info, curr_info.par->data);
+ }
+
+ return end_offset;
+}
+
static int dissect_h248_MtpAddress(gboolean implicit_tag, tvbuff_t *tvb, int offset, asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
tvbuff_t *new_tvb;
proto_tree *mtp_tree=NULL;