ACDR: Handle timestamps as time values instead of bytes

This commit is contained in:
Orgad Shaneh 2021-10-26 12:15:10 +03:00
parent 93b3f3b575
commit a114a115ba
1 changed files with 17 additions and 26 deletions

View File

@ -929,9 +929,6 @@ static int
dissect_signaling_packet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint8 trace_point) dissect_signaling_packet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint8 trace_point)
{ {
tvbuff_t *next_tvb = NULL; tvbuff_t *next_tvb = NULL;
proto_item *ti = NULL;
guint32 tmp;
gint64 timestamp;
gint32 offset = 0; gint32 offset = 0;
gint remaining; gint remaining;
const gboolean is_incoming = trace_point == Host2Pstn || trace_point == DspIncoming; const gboolean is_incoming = trace_point == Host2Pstn || trace_point == DspIncoming;
@ -944,17 +941,12 @@ dissect_signaling_packet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gu
HEADER_FIELD_SIG_SIZE_BYTE_COUNT, ENC_BIG_ENDIAN); HEADER_FIELD_SIG_SIZE_BYTE_COUNT, ENC_BIG_ENDIAN);
offset += HEADER_FIELD_SIG_SIZE_BYTE_COUNT; offset += HEADER_FIELD_SIG_SIZE_BYTE_COUNT;
} else { } else {
ti = proto_tree_add_item(tree, hf_acdr_signaling_timestamp, tvb, HEADER_FIELD_SIG_TIME_BYTE_NO, const guint32 timestamp = tvb_get_ntohl(tvb, HEADER_FIELD_SIG_TIME_BYTE_NO);
HEADER_FIELD_SIG_TIME_BYTE_COUNT, ENC_NA); nstime_t time = {timestamp / 1000000, (timestamp % 1000000) * 1000};
proto_tree_add_time_format_value(
tree, hf_acdr_signaling_timestamp, tvb, HEADER_FIELD_SIG_TIME_BYTE_NO,
HEADER_FIELD_SIG_TIME_BYTE_COUNT, &time, "%f sec", timestamp / 1000000.0f);
offset += HEADER_FIELD_SIG_TIME_BYTE_COUNT; offset += HEADER_FIELD_SIG_TIME_BYTE_COUNT;
tmp = tvb_get_ntohl(tvb, HEADER_FIELD_SIG_TIME_BYTE_NO);
timestamp = (((gint64) tmp) << 16);
tmp = tvb_get_ntohs(tvb, HEADER_FIELD_SIG_TIME_BYTE_NO + 2);
timestamp |= tmp;
proto_item_append_text(ti, " (%f sec)", timestamp / 1000000.0);
} }
remaining = tvb_reported_length_remaining(tvb, offset); remaining = tvb_reported_length_remaining(tvb, offset);
@ -984,10 +976,8 @@ static void
create_acdr_tree(proto_tree *tree, packet_info *pinfo, tvbuff_t *tvb) create_acdr_tree(proto_tree *tree, packet_info *pinfo, tvbuff_t *tvb)
{ {
proto_item *header_ti = NULL; proto_item *header_ti = NULL;
proto_item *ti = NULL;
proto_tree *acdr_tree; proto_tree *acdr_tree;
tvbuff_t *next_tvb = NULL; tvbuff_t *next_tvb = NULL;
guint32 tmp;
gint offset = 0; gint offset = 0;
gint header_byte_length = 15; gint header_byte_length = 15;
gint cid_byte_length = 2; gint cid_byte_length = 2;
@ -996,6 +986,8 @@ create_acdr_tree(proto_tree *tree, packet_info *pinfo, tvbuff_t *tvb)
guint8 media_type, extra_data; guint8 media_type, extra_data;
gboolean medium_mii = 0; gboolean medium_mii = 0;
gint64 timestamp; gint64 timestamp;
nstime_t time = NSTIME_INIT_ZERO;
gint time_size = 0;
int acdr_header_length; int acdr_header_length;
gboolean header_added; gboolean header_added;
gboolean li_packet; gboolean li_packet;
@ -1036,18 +1028,17 @@ create_acdr_tree(proto_tree *tree, packet_info *pinfo, tvbuff_t *tvb)
// Timestamp // Timestamp
if ((version & 0xF) <= 3) { if ((version & 0xF) <= 3) {
ti = proto_tree_add_item(acdr_tree, hf_acdr_timestamp, tvb, offset, 6, ENC_NA); timestamp = (tvb_get_ntohl(tvb, offset) << 16) | tvb_get_ntohs(tvb, offset + 4);
tmp = tvb_get_ntohl(tvb, offset); time_size = 6;
timestamp = (((gint64) tmp) << 16);
tmp = tvb_get_ntohs(tvb, offset + 4);
timestamp |= tmp;
offset += 6;
} else { } else {
ti = proto_tree_add_item(acdr_tree, hf_acdr_timestamp, tvb, offset, 4, ENC_NA);
timestamp = tvb_get_ntohl(tvb, offset); timestamp = tvb_get_ntohl(tvb, offset);
offset += 4; time_size = 4;
} }
proto_item_append_text(ti, " (%f sec)", timestamp / 1000000.0); time.secs = timestamp / 1000000;
time.nsecs = (timestamp % 1000000) * 1000;
proto_tree_add_time_format_value(acdr_tree, hf_acdr_timestamp, tvb, offset, time_size, &time,
"%f sec", timestamp / 1000000.0f);
offset += time_size;
// Sequence Number // Sequence Number
if ((version & 0xF) >= 4) { if ((version & 0xF) >= 4) {
@ -1375,7 +1366,7 @@ proto_register_acdr(void)
}, },
{ &hf_acdr_timestamp, { &hf_acdr_timestamp,
{ "Time Stamp", "acdr.timestamp", { "Time Stamp", "acdr.timestamp",
FT_BYTES, BASE_NONE, FT_RELATIVE_TIME, BASE_NONE,
NULL, 0x0, NULL, 0x0,
"timestamp in us resolution", HFILL } "timestamp in us resolution", HFILL }
}, },
@ -1778,7 +1769,7 @@ proto_register_acdr(void)
}, },
{ &hf_acdr_signaling_timestamp, { &hf_acdr_signaling_timestamp,
{ "Timestamp", "acdr.signaling_timestamp", { "Timestamp", "acdr.signaling_timestamp",
FT_BYTES, BASE_NONE, FT_RELATIVE_TIME, BASE_NONE,
NULL, 0x0, NULL, 0x0,
"Timestamp in us resolution", HFILL } "Timestamp in us resolution", HFILL }
} }