aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-dtn.c
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2011-09-11 19:54:11 +0000
committerAnders Broman <anders.broman@ericsson.com>2011-09-11 19:54:11 +0000
commit6c987f0b0c58cf8fb9c1704791d410228c1108d7 (patch)
treeaf04430fcfcd52bbae071705bb30373ff8c45bd2 /epan/dissectors/packet-dtn.c
parenteb0f64c3203490f1a82c6e1e8d3c7e9eecb139a6 (diff)
From Michael Mann:
Extend 64-bit SDNV decoding to Administrative Records. https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=4109 svn path=/trunk/; revision=38967
Diffstat (limited to 'epan/dissectors/packet-dtn.c')
-rw-r--r--epan/dissectors/packet-dtn.c47
1 files changed, 39 insertions, 8 deletions
diff --git a/epan/dissectors/packet-dtn.c b/epan/dissectors/packet-dtn.c
index 41d513a02a..528023827b 100644
--- a/epan/dissectors/packet-dtn.c
+++ b/epan/dissectors/packet-dtn.c
@@ -1611,11 +1611,13 @@ dissect_admin_record(proto_tree *primary_tree, tvbuff_t *tvb, int offset)
{
proto_item *admin_record_item;
proto_tree *admin_record_tree;
+ proto_item *timestamp_sequence_item;
guint8 record_type;
guint8 status;
guint8 reason;
int record_size = 0;
int sdnv_length;
+ int timestamp_sequence;
int endpoint_length;
guint8 *string_ptr;
@@ -1750,10 +1752,24 @@ dissect_admin_record(proto_tree *primary_tree, tvbuff_t *tvb, int offset)
return 0;
}
offset += sdnv_length; record_size += sdnv_length;
- sdnv_length = add_sdnv_to_tree(admin_record_tree, tvb, offset,
- "Bundle Creation Timestamp Sequence");
- if(sdnv_length <= 0) {
- return 0;
+
+ timestamp_sequence = evaluate_sdnv(tvb, offset, &sdnv_length);
+ timestamp_sequence_item = proto_tree_add_text(admin_record_tree, tvb, offset, sdnv_length, " ");
+
+ if(timestamp_sequence < 0) {
+ gint64 ts_seq;
+
+ if((ts_seq = evaluate_sdnv_64(tvb, offset, &sdnv_length)) < 0) {
+ proto_item_set_text(timestamp_sequence_item, "Timestamp Sequence Number: Error");
+ return 0;
+ }
+
+ proto_item_set_text(timestamp_sequence_item,
+ "Timestamp Sequence Number: 0x%" G_GINT64_MODIFIER "x", ts_seq);
+ }
+ else {
+ proto_item_set_text(timestamp_sequence_item,
+ "Timestamp Sequence Number: %d", timestamp_sequence);
}
offset += sdnv_length; record_size += sdnv_length;
@@ -1826,11 +1842,26 @@ dissect_admin_record(proto_tree *primary_tree, tvbuff_t *tvb, int offset)
return 0;
}
offset += sdnv_length; record_size += sdnv_length;
- sdnv_length = add_sdnv_to_tree(admin_record_tree, tvb, offset,
- "Bundle Creation Timestamp Sequence");
- if(sdnv_length <= 0) {
- return 0;
+
+ timestamp_sequence = evaluate_sdnv(tvb, offset, &sdnv_length);
+ timestamp_sequence_item = proto_tree_add_text(admin_record_tree, tvb, offset, sdnv_length, " ");
+
+ if(timestamp_sequence < 0) {
+ gint64 ts_seq;
+
+ if((ts_seq = evaluate_sdnv_64(tvb, offset, &sdnv_length)) < 0) {
+ proto_item_set_text(timestamp_sequence_item, "Timestamp Sequence Number: Error");
+ return 0;
+ }
+
+ proto_item_set_text(timestamp_sequence_item,
+ "Timestamp Sequence Number: 0x%" G_GINT64_MODIFIER "x", ts_seq);
+ }
+ else {
+ proto_item_set_text(timestamp_sequence_item,
+ "Timestamp Sequence Number: %d", timestamp_sequence);
}
+
offset += sdnv_length; record_size += sdnv_length;
endpoint_length = evaluate_sdnv(tvb, offset, &sdnv_length);