aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-per.c
diff options
context:
space:
mode:
authoretxrab <etxrab@f5534014-38df-0310-8fa8-9805f1628bb7>2006-06-08 06:06:17 +0000
committeretxrab <etxrab@f5534014-38df-0310-8fa8-9805f1628bb7>2006-06-08 06:06:17 +0000
commitc7fcb8309f65cb68f67082a4c89ef619a4083264 (patch)
tree4faa3654eec73f4ce3912ebd14e74644cbfc1f71 /epan/dissectors/packet-per.c
parent0d3b8f3b11193e91ef908eb631949f3493155a96 (diff)
MAke it possible to get a tvb with a BIT STRING, regenerate PER dissectors.
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@18395 f5534014-38df-0310-8fa8-9805f1628bb7
Diffstat (limited to 'epan/dissectors/packet-per.c')
-rw-r--r--epan/dissectors/packet-per.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/epan/dissectors/packet-per.c b/epan/dissectors/packet-per.c
index e695b6b6c1..34a23e2205 100644
--- a/epan/dissectors/packet-per.c
+++ b/epan/dissectors/packet-per.c
@@ -1371,10 +1371,12 @@ DEBUG_ENTRY("dissect_per_sequence");
*/
guint32
-dissect_per_bit_string(tvbuff_t *tvb, guint32 offset, asn_ctx_t *actx, proto_tree *tree, int hf_index, int min_len, int max_len, gboolean has_extension)
+dissect_per_bit_string(tvbuff_t *tvb, guint32 offset, asn_ctx_t *actx, proto_tree *tree, int hf_index, int min_len, int max_len, gboolean has_extension, tvbuff_t **value_tvb)
{
+ gint val_start, val_length;
guint32 length;
header_field_info *hfi;
+ tvbuff_t *out_tvb = NULL;
hfi = (hf_index==-1) ? NULL : proto_registrar_get_nth(hf_index);
@@ -1423,6 +1425,8 @@ DEBUG_ENTRY("dissect_per_bit_string");
if((min_len==max_len)&&(min_len<65536)){
/* align to byte */
BYTE_ALIGN_OFFSET(offset);
+ val_start = offset>>3;
+ val_length = (min_len+7)/8;
if (hfi) {
proto_tree_add_item(tree, hf_index, tvb, offset>>3, (min_len+7)/8, FALSE);
}
@@ -1446,8 +1450,13 @@ DEBUG_ENTRY("dissect_per_bit_string");
proto_tree_add_item(tree, hf_index, tvb, offset>>3, (length+7)/8, FALSE);
}
}
+ val_start = offset>>3;
+ val_length = (length+7)/8;
offset+=length;
+ if (value_tvb)
+ *value_tvb = (out_tvb) ? out_tvb : tvb_new_subset(tvb, val_start, val_length, val_length);
+
return offset;
}