diff --git a/debian/libwireshark0.symbols b/debian/libwireshark0.symbols index e53138f8ab..e5dfc238e5 100644 --- a/debian/libwireshark0.symbols +++ b/debian/libwireshark0.symbols @@ -934,6 +934,7 @@ libwireshark.so.0 libwireshark0 #MINVER# proto_tree_add_bytes_format@Base 1.9.1 proto_tree_add_bytes_format_value@Base 1.9.1 proto_tree_add_bytes_item@Base 1.12.0~rc1 + proto_tree_add_bytes_with_bytes@Base 1.99.3 proto_tree_add_debug_text@Base 1.9.1 proto_tree_add_double@Base 1.9.1 proto_tree_add_double_format@Base 1.9.1 @@ -969,7 +970,6 @@ libwireshark.so.0 libwireshark0 #MINVER# proto_tree_add_ipxnet_format_value@Base 1.9.1 proto_tree_add_item@Base 1.9.1 proto_tree_add_item_new@Base 1.12.0~rc1 - proto_tree_add_new_bytes@Base 1.99.3 proto_tree_add_none_format@Base 1.9.1 proto_tree_add_protocol_format@Base 1.9.1 proto_tree_add_string@Base 1.9.1 diff --git a/doc/README.dissector b/doc/README.dissector index 61384b5df4..ff0d5480b1 100644 --- a/doc/README.dissector +++ b/doc/README.dissector @@ -1129,6 +1129,9 @@ protocol or field labels to the proto_tree: proto_tree_add_bytes_format_value(tree, id, tvb, start, length, start_ptr, format, ...); + proto_item * + proto_tree_add_bytes_with_length(tree, id, tvb, start, tvb_length, start_ptr, ptr_length); + proto_item * proto_tree_add_time(tree, id, tvb, start, length, value_ptr); @@ -1583,6 +1586,11 @@ any more. For proto_tree_add_bytes(), the 'value_ptr' argument is a pointer to a sequence of bytes. + +proto_tree_add_bytes_with_length() is similar to proto_tree_add_bytes, +except that the length is not derived from the tvb length. Instead, +the displayed data size is controlled by 'ptr_length'. + For proto_tree_add_bytes_format() and proto_tree_add_bytes_format_value(), the 'value_ptr' argument is a pointer to a sequence of bytes or NULL if the bytes should be taken from the given TVB using the given offset and length. diff --git a/epan/dissectors/packet-btatt.c b/epan/dissectors/packet-btatt.c index 7bd4732fc9..390de6b6a0 100644 --- a/epan/dissectors/packet-btatt.c +++ b/epan/dissectors/packet-btatt.c @@ -1663,7 +1663,7 @@ dissect_handle_uint(proto_tree *tree, packet_info *pinfo, gint hf, if (local_uuid.size == 2) sub_item = proto_tree_add_uint(sub_tree, hf_btatt_uuid16, tvb, 0, 0, local_uuid.bt_uuid); else - sub_item = proto_tree_add_new_bytes(sub_tree, hf_btatt_uuid128, tvb, 0, 0, local_uuid.data, 16); + sub_item = proto_tree_add_bytes_with_length(sub_tree, hf_btatt_uuid128, tvb, 0, 0, local_uuid.data, 16); PROTO_ITEM_SET_GENERATED(sub_item); diff --git a/epan/proto.c b/epan/proto.c index 608a7f8639..c057b819bc 100644 --- a/epan/proto.c +++ b/epan/proto.c @@ -2441,29 +2441,6 @@ proto_tree_add_protocol_format(proto_tree *tree, int hfindex, tvbuff_t *tvb, return pi; } -/* Add a FT_BYTES to a proto_tree */ -proto_item * -proto_tree_add_new_bytes(proto_tree *tree, int hfindex, tvbuff_t *tvb, gint start, - gint length, const guint8 *start_ptr, gint ptr_length) -{ - proto_item *pi; - header_field_info *hfinfo; - gint item_length; - - PROTO_REGISTRAR_GET_NTH(hfindex, hfinfo); - get_hfi_length(hfinfo, tvb, start, &length, &item_length); - test_length(hfinfo, tvb, start, item_length); - - TRY_TO_FAKE_THIS_ITEM(tree, hfindex, hfinfo); - - DISSECTOR_ASSERT_FIELD_TYPE(hfinfo, FT_BYTES); - - pi = proto_tree_add_pi(tree, hfinfo, tvb, start, &length); - proto_tree_set_bytes(PNODE_FINFO(pi), start_ptr, ptr_length); - - return pi; -} - /* Add a FT_BYTES to a proto_tree */ proto_item * proto_tree_add_bytes(proto_tree *tree, int hfindex, tvbuff_t *tvb, gint start, @@ -2487,6 +2464,29 @@ proto_tree_add_bytes(proto_tree *tree, int hfindex, tvbuff_t *tvb, gint start, return pi; } +/* Add a FT_BYTES to a proto_tree */ +proto_item * +proto_tree_add_bytes_with_length(proto_tree *tree, int hfindex, tvbuff_t *tvb, gint start, + gint tvb_length, const guint8 *start_ptr, gint ptr_length) +{ + proto_item *pi; + header_field_info *hfinfo; + gint item_length; + + PROTO_REGISTRAR_GET_NTH(hfindex, hfinfo); + get_hfi_length(hfinfo, tvb, start, &tvb_length, &item_length); + test_length(hfinfo, tvb, start, item_length); + + TRY_TO_FAKE_THIS_ITEM(tree, hfindex, hfinfo); + + DISSECTOR_ASSERT_FIELD_TYPE(hfinfo, FT_BYTES); + + pi = proto_tree_add_pi(tree, hfinfo, tvb, start, &tvb_length); + proto_tree_set_bytes(PNODE_FINFO(pi), start_ptr, ptr_length); + + return pi; +} + proto_item * proto_tree_add_bytes_format_value(proto_tree *tree, int hfindex, tvbuff_t *tvb, gint start, gint length, diff --git a/epan/proto.h b/epan/proto.h index 6fb6d1b7d9..af9b7e9120 100644 --- a/epan/proto.h +++ b/epan/proto.h @@ -1071,7 +1071,8 @@ WS_DLL_PUBLIC proto_item * proto_tree_add_bytes(proto_tree *tree, int hfindex, tvbuff_t *tvb, gint start, gint length, const guint8* start_ptr); -/** Add a FT_BYTES to a proto_tree. +/** Add a FT_BYTES to a proto_tree like proto_tree_add_bytes, + but used when the tvb data length does not match the bytes length. @param tree the tree to append this item to @param hfindex field index @param tvb the tv buffer of the current data @@ -1081,7 +1082,7 @@ proto_tree_add_bytes(proto_tree *tree, int hfindex, tvbuff_t *tvb, gint start, @param ptr_length length of data in start_ptr @return the newly created item */ WS_DLL_PUBLIC proto_item * -proto_tree_add_new_bytes(proto_tree *tree, int hfindex, tvbuff_t *tvb, gint start, +proto_tree_add_bytes_with_length(proto_tree *tree, int hfindex, tvbuff_t *tvb, gint start, gint length, const guint8 *start_ptr, gint ptr_length); /** Get and add a byte-array-based FT_* to a proto_tree.