diff options
author | etxrab <etxrab@f5534014-38df-0310-8fa8-9805f1628bb7> | 2006-06-08 06:06:17 +0000 |
---|---|---|
committer | etxrab <etxrab@f5534014-38df-0310-8fa8-9805f1628bb7> | 2006-06-08 06:06:17 +0000 |
commit | c7fcb8309f65cb68f67082a4c89ef619a4083264 (patch) | |
tree | 4faa3654eec73f4ce3912ebd14e74644cbfc1f71 /epan/dissectors/packet-per.c | |
parent | 0d3b8f3b11193e91ef908eb631949f3493155a96 (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.c | 11 |
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; } |