Make "little_endian" local to the routines to parse submessages.
Before checking for the "RTPS" tag, make sure we have at least 4 bytes in the message. Use "tvb_reported_length()" to get the length of the message, so we throw an exception on a packet cut short by a snapshot length. Put in a comment asking whether the byte order of the "offset to next submessage" field is little-endian or specified by the E bit. svn path=/trunk/; revision=10636
This commit is contained in:
parent
7d09e69dde
commit
c8b07d8c4b
|
@ -12,7 +12,7 @@
|
||||||
* version: 2004/04/15 9:40:45
|
* version: 2004/04/15 9:40:45
|
||||||
* dedication to Kj :]
|
* dedication to Kj :]
|
||||||
*
|
*
|
||||||
* $Id: packet-rtps.c,v 1.3 2004/04/18 06:40:27 ulfl Exp $
|
* $Id: packet-rtps.c,v 1.4 2004/04/18 18:55:13 guy Exp $
|
||||||
*
|
*
|
||||||
* Ethereal - Network traffic analyzer
|
* Ethereal - Network traffic analyzer
|
||||||
* By Gerald Combs <gerald@ethereal.com>
|
* By Gerald Combs <gerald@ethereal.com>
|
||||||
|
@ -154,9 +154,6 @@ static char *get_parameter(gint offset, tvbuff_t *tvb, gboolean little_endian, c
|
||||||
static gint seq_nr_to_string( gint offset, gboolean little_endian, tvbuff_t *tvb,
|
static gint seq_nr_to_string( gint offset, gboolean little_endian, tvbuff_t *tvb,
|
||||||
SequenceNumber *p_seqNumber);
|
SequenceNumber *p_seqNumber);
|
||||||
|
|
||||||
/* global variable - submessage ENDIAN */
|
|
||||||
static gboolean little_endian;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* *********************************************************************** */
|
/* *********************************************************************** */
|
||||||
|
@ -184,9 +181,8 @@ dissect_rtps(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
|
||||||
/* offset is the byte offset of 'tvb' at which the new tvbuff
|
/* offset is the byte offset of 'tvb' at which the new tvbuff
|
||||||
should start. The first byte is the 0th byte. */
|
should start. The first byte is the 0th byte. */
|
||||||
|
|
||||||
message_len = tvb_length(tvb);
|
|
||||||
|
|
||||||
/* --- making disition if protocol is RTPS protocol --- */
|
/* --- making disition if protocol is RTPS protocol --- */
|
||||||
|
if (!tvb_bytes_exist(tvb, offset, 4)) return FALSE;
|
||||||
if (tvb_get_guint8(tvb,offset++) != 'R') return FALSE;
|
if (tvb_get_guint8(tvb,offset++) != 'R') return FALSE;
|
||||||
if (tvb_get_guint8(tvb,offset++) != 'T') return FALSE;
|
if (tvb_get_guint8(tvb,offset++) != 'T') return FALSE;
|
||||||
if (tvb_get_guint8(tvb,offset++) != 'P') return FALSE;
|
if (tvb_get_guint8(tvb,offset++) != 'P') return FALSE;
|
||||||
|
@ -235,10 +231,13 @@ dissect_rtps(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
|
||||||
/* offset behind RTPS's Header */
|
/* offset behind RTPS's Header */
|
||||||
offset=16;
|
offset=16;
|
||||||
|
|
||||||
|
message_len = tvb_reported_length(tvb);
|
||||||
|
|
||||||
do {
|
do {
|
||||||
submessageId = tvb_get_guint8(tvb, offset);
|
submessageId = tvb_get_guint8(tvb, offset);
|
||||||
|
|
||||||
/* read value in littlendian format */
|
/* read value in littlendian format */
|
||||||
|
/* XXX - is this in the byte order specified by the E bit? */
|
||||||
next_submsg = tvb_get_letohs(tvb, offset+2);
|
next_submsg = tvb_get_letohs(tvb, offset+2);
|
||||||
|
|
||||||
switch (submessageId)
|
switch (submessageId)
|
||||||
|
@ -748,6 +747,7 @@ dissect_PAD(tvbuff_t *tvb, gint offset, proto_tree *tree)
|
||||||
proto_item *ti;
|
proto_item *ti;
|
||||||
proto_tree *rtps_submessage_tree;
|
proto_tree *rtps_submessage_tree;
|
||||||
gint flags = 0;
|
gint flags = 0;
|
||||||
|
gboolean little_endian;
|
||||||
|
|
||||||
ti = proto_tree_add_text(tree, tvb, offset, 1,"Submessage Id: PAD");
|
ti = proto_tree_add_text(tree, tvb, offset, 1,"Submessage Id: PAD");
|
||||||
rtps_submessage_tree = proto_item_add_subtree(ti, ett_rtps_submessage);
|
rtps_submessage_tree = proto_item_add_subtree(ti, ett_rtps_submessage);
|
||||||
|
@ -790,6 +790,7 @@ dissect_VAR(tvbuff_t *tvb, gint offset, proto_tree *tree)
|
||||||
proto_item *ti;
|
proto_item *ti;
|
||||||
proto_tree *rtps_submessage_tree;
|
proto_tree *rtps_submessage_tree;
|
||||||
gint flags = 0;
|
gint flags = 0;
|
||||||
|
gboolean little_endian;
|
||||||
gint next_submsg_offset = 0;
|
gint next_submsg_offset = 0;
|
||||||
char buff[200];
|
char buff[200];
|
||||||
SequenceNumber writerSeqNumber;
|
SequenceNumber writerSeqNumber;
|
||||||
|
@ -1120,6 +1121,7 @@ dissect_ISSUE(tvbuff_t *tvb, gint offset, proto_tree *tree)
|
||||||
proto_item *ti;
|
proto_item *ti;
|
||||||
proto_tree *rtps_submessage_tree;
|
proto_tree *rtps_submessage_tree;
|
||||||
gint flags = 0;
|
gint flags = 0;
|
||||||
|
gboolean little_endian;
|
||||||
gint next_submsg_offset = 0;
|
gint next_submsg_offset = 0;
|
||||||
char buff[40];
|
char buff[40];
|
||||||
SequenceNumber sequenceNumber; /* type struct */
|
SequenceNumber sequenceNumber; /* type struct */
|
||||||
|
@ -1211,6 +1213,7 @@ dissect_ACK(tvbuff_t *tvb, gint offset, proto_tree *tree)
|
||||||
proto_item *ti;
|
proto_item *ti;
|
||||||
proto_tree *rtps_submessage_tree;
|
proto_tree *rtps_submessage_tree;
|
||||||
gint flags = 0;
|
gint flags = 0;
|
||||||
|
gboolean little_endian;
|
||||||
gint next_submsg_offset = 0;
|
gint next_submsg_offset = 0;
|
||||||
char buff[40];
|
char buff[40];
|
||||||
|
|
||||||
|
@ -1273,6 +1276,7 @@ dissect_HEARTBEAT(tvbuff_t *tvb, gint offset, proto_tree *tree)
|
||||||
proto_item *ti;
|
proto_item *ti;
|
||||||
proto_tree *rtps_submessage_tree;
|
proto_tree *rtps_submessage_tree;
|
||||||
guint8 flags = 0;
|
guint8 flags = 0;
|
||||||
|
gboolean little_endian;
|
||||||
char buff[40];
|
char buff[40];
|
||||||
SequenceNumber sequenceNumber; /* type struct */
|
SequenceNumber sequenceNumber; /* type struct */
|
||||||
|
|
||||||
|
@ -1340,6 +1344,7 @@ dissect_GAP(tvbuff_t *tvb, gint offset, proto_tree *tree)
|
||||||
proto_item *ti;
|
proto_item *ti;
|
||||||
proto_tree *rtps_submessage_tree;
|
proto_tree *rtps_submessage_tree;
|
||||||
gint flags = 0;
|
gint flags = 0;
|
||||||
|
gboolean little_endian;
|
||||||
gint next_submsg_offset = 0;
|
gint next_submsg_offset = 0;
|
||||||
char buff[40];
|
char buff[40];
|
||||||
SequenceNumber sequenceNumber; /* type struct */
|
SequenceNumber sequenceNumber; /* type struct */
|
||||||
|
@ -1411,6 +1416,7 @@ dissect_INFO_TS(tvbuff_t *tvb, gint offset, proto_tree *tree)
|
||||||
proto_item *ti;
|
proto_item *ti;
|
||||||
proto_tree *rtps_submessage_tree;
|
proto_tree *rtps_submessage_tree;
|
||||||
gint flags = 0;
|
gint flags = 0;
|
||||||
|
gboolean little_endian;
|
||||||
char buff[10];
|
char buff[10];
|
||||||
|
|
||||||
ti = proto_tree_add_text(tree, tvb, offset,1,"Submessage Id: INFO_TS");
|
ti = proto_tree_add_text(tree, tvb, offset,1,"Submessage Id: INFO_TS");
|
||||||
|
@ -1463,6 +1469,7 @@ dissect_INFO_SRC(tvbuff_t *tvb, gint offset, proto_tree *tree)
|
||||||
proto_item *ti;
|
proto_item *ti;
|
||||||
proto_tree *rtps_submessage_tree;
|
proto_tree *rtps_submessage_tree;
|
||||||
gint flags = 0;
|
gint flags = 0;
|
||||||
|
gboolean little_endian;
|
||||||
char buff[200];
|
char buff[200];
|
||||||
|
|
||||||
|
|
||||||
|
@ -1538,6 +1545,7 @@ dissect_INFO_REPLY(tvbuff_t *tvb, gint offset, proto_tree *tree)
|
||||||
proto_item *ti;
|
proto_item *ti;
|
||||||
proto_tree *rtps_submessage_tree;
|
proto_tree *rtps_submessage_tree;
|
||||||
gint flags = 0;
|
gint flags = 0;
|
||||||
|
gboolean little_endian;
|
||||||
char buff_ip[10], buff_port[10];
|
char buff_ip[10], buff_port[10];
|
||||||
|
|
||||||
ti = proto_tree_add_text(tree,tvb,offset,1,"Submessage Id: INFO_REPLY");
|
ti = proto_tree_add_text(tree,tvb,offset,1,"Submessage Id: INFO_REPLY");
|
||||||
|
@ -1615,6 +1623,7 @@ dissect_INFO_DST(tvbuff_t *tvb,gint offset,proto_tree *tree)
|
||||||
proto_item *ti;
|
proto_item *ti;
|
||||||
proto_tree *rtps_submessage_tree;
|
proto_tree *rtps_submessage_tree;
|
||||||
gint flags = 0;
|
gint flags = 0;
|
||||||
|
gboolean little_endian;
|
||||||
char buff[200];
|
char buff[200];
|
||||||
|
|
||||||
ti = proto_tree_add_text(tree, tvb, offset,1,"Submessage Id: INFO_DST");
|
ti = proto_tree_add_text(tree, tvb, offset,1,"Submessage Id: INFO_DST");
|
||||||
|
|
Loading…
Reference in New Issue