aboutsummaryrefslogtreecommitdiffstats
path: root/packet-ndps.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2003-10-17 22:59:18 +0000
committerGuy Harris <guy@alum.mit.edu>2003-10-17 22:59:18 +0000
commit7e5234d842b642d171d509d6c662bcf9bb9d2afa (patch)
treeaa4b2858fa31758f9f4319a20283bd6cae933623 /packet-ndps.c
parent2158c2b0e359293d5e5e885e58ba56d4f540f895 (diff)
From Greg Morris: don't add zero-length items to the tree, add some
missing alignment adjustments, fix a call to "address_item()" to set the offset to its return value rather than adding its return value to the offset, handle an object type of 2 (counted list of objects) in an event handling profile, advance the offset past length values after processing the length value. Fix some additional "address_item()" calls, and put the aforementioned length values into the protocol tree. svn path=/trunk/; revision=8730
Diffstat (limited to 'packet-ndps.c')
-rw-r--r--packet-ndps.c278
1 files changed, 225 insertions, 53 deletions
diff --git a/packet-ndps.c b/packet-ndps.c
index 4ba46057b7..43c210caed 100644
--- a/packet-ndps.c
+++ b/packet-ndps.c
@@ -3,7 +3,7 @@
* Greg Morris <gmorris@novell.com>
* Copyright (c) Novell, Inc. 2002-2003
*
- * $Id: packet-ndps.c,v 1.24 2003/08/25 21:59:18 guy Exp $
+ * $Id: packet-ndps.c,v 1.25 2003/10/17 22:59:18 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@@ -223,6 +223,7 @@ static int hf_ndps_training = -1;
static int hf_ndps_colorant_set = -1;
static int hf_ndps_card_enum_time = -1;
static int hf_ndps_attrs_arg = -1;
+static int hf_ndps_context_len = -1;
static int hf_ndps_context = -1;
static int hf_ndps_filter = -1;
static int hf_ndps_item_filter = -1;
@@ -1843,6 +1844,7 @@ name_or_id(tvbuff_t* tvb, proto_tree *ndps_tree, int foffset)
foffset = ndps_string(tvb, hf_local_object_name, ndps_tree, foffset, NULL, 0);
break;
}
+ foffset += align_4(tvb, foffset);
return foffset;
}
@@ -2033,7 +2035,10 @@ credentials(tvbuff_t* tvb, proto_tree *ndps_tree, int foffset)
atree = proto_item_add_subtree(aitem, ett_ndps);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(atree, hf_ndps_password, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(atree, hf_ndps_password, tvb, foffset, length, FALSE);
+ }
proto_item_set_end(aitem, tvb, foffset);
foffset += length;
}
@@ -2041,7 +2046,10 @@ credentials(tvbuff_t* tvb, proto_tree *ndps_tree, int foffset)
case 1:
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(ndps_tree, hf_ndps_certified, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(ndps_tree, hf_ndps_certified, tvb, foffset, length, FALSE);
+ }
foffset += length;
break;
case 2:
@@ -2169,7 +2177,10 @@ cardinal_seq(tvbuff_t* tvb, proto_tree *ndps_tree, int foffset)
atree = proto_item_add_subtree(aitem, ett_ndps);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+ }
foffset += length;
foffset += (length%2);
proto_item_set_end(aitem, tvb, foffset);
@@ -2361,7 +2372,10 @@ attribute_value(tvbuff_t* tvb, proto_tree *ndps_tree, int foffset)
case 14: /* Cardinal Seq */
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(ndps_tree, hf_info_int32, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(ndps_tree, hf_info_int32, tvb, foffset, length, FALSE);
+ }
foffset += length;
break;
case 16: /* Integer Range */
@@ -2599,11 +2613,15 @@ attribute_value(tvbuff_t* tvb, proto_tree *ndps_tree, int foffset)
foffset = qualifiedname(tvb, ndps_tree, foffset);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+ }
foffset += length;
proto_tree_add_item(ndps_tree, hf_ndps_language_id, tvb, foffset, 4, FALSE);
foffset += 4;
foffset = name_or_id(tvb, ndps_tree, foffset);
+
number_of_items = tvb_get_ntohl(tvb, foffset);
proto_tree_add_uint(ndps_tree, hf_ndps_num_address_items, tvb, foffset, 4, number_of_items);
foffset += 4;
@@ -2611,7 +2629,7 @@ attribute_value(tvbuff_t* tvb, proto_tree *ndps_tree, int foffset)
{
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Address Item %u", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
- foffset += address_item(tvb, atree, foffset);
+ foffset = address_item(tvb, atree, foffset);
proto_item_set_end(aitem, tvb, foffset);
}
number_of_items = tvb_get_ntohl(tvb, foffset);
@@ -2624,15 +2642,27 @@ attribute_value(tvbuff_t* tvb, proto_tree *ndps_tree, int foffset)
proto_tree_add_item(atree, hf_ndps_event_type, tvb, foffset, 4, FALSE);
foffset += 4;
foffset = objectidentifier(tvb, atree, foffset);
+ foffset += align_4(tvb, foffset);
foffset = objectidentification(tvb, atree, foffset);
proto_tree_add_item(atree, hf_ndps_object_op, tvb, foffset, 4, FALSE);
foffset += 4;
-
event_object_type = tvb_get_ntohl(tvb, foffset);
proto_tree_add_uint(atree, hf_ndps_event_object_identifier, tvb, foffset, 4, event_object_type);
foffset += 4;
switch (event_object_type)
{
+ case 2:
+ /* Number of Objects */
+ number_of_items2 = tvb_get_ntohl(tvb, foffset);
+ proto_tree_add_uint(atree, hf_ndps_num_objects, tvb, foffset, 4, number_of_items2);
+ foffset += 4;
+ for (j = 1 ; j <= number_of_items2; j++ )
+ {
+ foffset = objectidentifier(tvb, atree, foffset);
+ }
+ foffset += 4;
+ break;
+
case 1:
foffset = objectidentifier(tvb, atree, foffset);
break;
@@ -2718,7 +2748,10 @@ attribute_value(tvbuff_t* tvb, proto_tree *ndps_tree, int foffset)
atree = proto_item_add_subtree(aitem, ett_ndps);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+ }
foffset += length;
foffset += (length%2);
proto_item_set_end(aitem, tvb, foffset);
@@ -2887,7 +2920,10 @@ attribute_value(tvbuff_t* tvb, proto_tree *ndps_tree, int foffset)
{
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(ndps_tree, hf_ndps_octet_string, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(ndps_tree, hf_ndps_octet_string, tvb, foffset, length, FALSE);
+ }
foffset += length;
foffset += (length%2);
}
@@ -3020,7 +3056,10 @@ attribute_value(tvbuff_t* tvb, proto_tree *ndps_tree, int foffset)
atree = proto_item_add_subtree(aitem, ett_ndps);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+ }
foffset += length;
foffset += (length%2);
}
@@ -3033,7 +3072,10 @@ attribute_value(tvbuff_t* tvb, proto_tree *ndps_tree, int foffset)
atree = proto_item_add_subtree(aitem, ett_ndps);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+ }
foffset += length;
foffset += (length%2);
proto_item_set_end(aitem, tvb, foffset);
@@ -3084,7 +3126,10 @@ attribute_value(tvbuff_t* tvb, proto_tree *ndps_tree, int foffset)
foffset += 4;
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(ndps_tree, hf_ndps_add_bytes, tvb, foffset, 4, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(ndps_tree, hf_ndps_add_bytes, tvb, foffset, 4, FALSE);
+ }
foffset += length;
break;
case 92: /* XY Dimensions Value */
@@ -3237,19 +3282,28 @@ attribute_value(tvbuff_t* tvb, proto_tree *ndps_tree, int foffset)
case 106: /* Octet String Pair */
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(ndps_tree, hf_ndps_octet_string, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(ndps_tree, hf_ndps_octet_string, tvb, foffset, length, FALSE);
+ }
foffset += length;
foffset += (length%2);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(ndps_tree, hf_ndps_octet_string, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(ndps_tree, hf_ndps_octet_string, tvb, foffset, length, FALSE);
+ }
foffset += length;
foffset += (length%2);
break;
case 107: /* Octet String Integer Pair */
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(ndps_tree, hf_ndps_octet_string, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(ndps_tree, hf_ndps_octet_string, tvb, foffset, length, FALSE);
+ }
foffset += length;
foffset += (length%2);
proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, 4, FALSE);
@@ -3265,7 +3319,10 @@ attribute_value(tvbuff_t* tvb, proto_tree *ndps_tree, int foffset)
foffset = qualifiedname(tvb, ndps_tree, foffset);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(ndps_tree, hf_ndps_octet_string, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(ndps_tree, hf_ndps_octet_string, tvb, foffset, length, FALSE);
+ }
foffset += length;
foffset += (length%2);
proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, 4, FALSE);
@@ -3284,7 +3341,10 @@ attribute_value(tvbuff_t* tvb, proto_tree *ndps_tree, int foffset)
case 3: /*OCTET_STRING*/
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(ndps_tree, hf_ndps_octet_string, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(ndps_tree, hf_ndps_octet_string, tvb, foffset, length, FALSE);
+ }
foffset += length;
foffset += (length%2);
break;
@@ -3990,7 +4050,10 @@ dissect_ndps_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree, g
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Security %u", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
length = tvb_get_ntohl(tvb, foffset);
- proto_tree_add_uint(atree, hf_bind_security, tvb, foffset, 4, length);
+ if (length!=0)
+ {
+ proto_tree_add_uint(atree, hf_bind_security, tvb, foffset, 4, length);
+ }
foffset += 4;
proto_item_set_end(aitem, tvb, foffset);
}
@@ -4071,7 +4134,10 @@ dissect_ndps_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree, g
proto_tree_add_item(btree, hf_ndps_data, tvb, foffset, -1, FALSE);
return;
}
- proto_tree_add_item(btree, hf_ndps_included_doc, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(btree, hf_ndps_included_doc, tvb, foffset, length, FALSE);
+ }
foffset += length;
foffset += (length%2);
}
@@ -4253,7 +4319,12 @@ dissect_ndps_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree, g
if (list_attr_op==0) /* Continuation */
{
length = tvb_get_ntohl(tvb, foffset);
- proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, FALSE);
+ proto_tree_add_uint(ndps_tree, hf_ndps_context_len, tvb, foffset, 4, length);
+ foffset += 4;
+ if (length!=0)
+ {
+ proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, FALSE);
+ }
foffset += length;
foffset += (length%2);
proto_tree_add_item(ndps_tree, hf_ndps_abort_flag, tvb, foffset, 4, FALSE);
@@ -4761,7 +4832,10 @@ dissect_ndps_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree, g
atree = proto_item_add_subtree(aitem, ett_ndps);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+ }
foffset += length;
proto_item_set_end(aitem, tvb, foffset);
}
@@ -4844,7 +4918,12 @@ dissect_ndps_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree, g
else /* Cont */
{
length = tvb_get_ntohl(tvb, foffset);
- proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, FALSE);
+ proto_tree_add_uint(ndps_tree, hf_ndps_context_len, tvb, foffset, 4, length);
+ foffset += 4;
+ if (length!=0)
+ {
+ proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, FALSE);
+ }
foffset += length;
foffset += (length%2);
proto_tree_add_item(ndps_tree, hf_ndps_abort_flag, tvb, foffset, 4, FALSE);
@@ -4887,7 +4966,10 @@ dissect_ndps_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree, g
case 0x00000022: /* Map GUID to NDS Name */
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(ndps_tree, hf_ndps_guid, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(ndps_tree, hf_ndps_guid, tvb, foffset, length, FALSE);
+ }
foffset += length;
break;
case 0x00000023: /* AddEventProfile2 */
@@ -5004,7 +5086,12 @@ dissect_ndps_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree, g
else /* Cont */
{
length = tvb_get_ntohl(tvb, foffset);
- proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, FALSE);
+ proto_tree_add_uint(ndps_tree, hf_ndps_context_len, tvb, foffset, 4, length);
+ foffset += 4;
+ if (length!=0)
+ {
+ proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, FALSE);
+ }
foffset += length;
foffset += (length%2);
proto_tree_add_item(ndps_tree, hf_ndps_abort_flag, tvb, foffset, 4, FALSE);
@@ -5031,7 +5118,10 @@ dissect_ndps_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree, g
atree = proto_item_add_subtree(aitem, ett_ndps);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(atree, hf_bind_security, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(atree, hf_bind_security, tvb, foffset, length, FALSE);
+ }
proto_item_set_end(aitem, tvb, foffset);
}
break;
@@ -5053,7 +5143,10 @@ dissect_ndps_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree, g
{
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(atree, hf_ndps_item_bytes, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(atree, hf_ndps_item_bytes, tvb, foffset, length, FALSE);
+ }
foffset += length;
}
proto_item_set_end(aitem, tvb, foffset);
@@ -5085,7 +5178,10 @@ dissect_ndps_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree, g
atree = proto_item_add_subtree(aitem, ett_ndps);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(atree, hf_bind_security, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(atree, hf_bind_security, tvb, foffset, length, FALSE);
+ }
proto_item_set_end(aitem, tvb, foffset);
}
break;
@@ -5154,7 +5250,12 @@ dissect_ndps_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree, g
else
{
length = tvb_get_ntohl(tvb, foffset);
- proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, FALSE);
+ proto_tree_add_uint(ndps_tree, hf_ndps_context_len, tvb, foffset, 4, length);
+ foffset += 4;
+ if (length!=0)
+ {
+ proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, FALSE);
+ }
foffset += length;
foffset += (length%2);
proto_tree_add_item(ndps_tree, hf_ndps_abort_flag, tvb, foffset, 4, FALSE);
@@ -5180,7 +5281,10 @@ dissect_ndps_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree, g
atree = proto_item_add_subtree(aitem, ett_ndps);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(atree, hf_bind_security, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(atree, hf_bind_security, tvb, foffset, length, FALSE);
+ }
proto_item_set_end(aitem, tvb, foffset);
}
break;
@@ -5227,7 +5331,10 @@ dissect_ndps_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree, g
proto_item_set_end(aitem, tvb, foffset);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+ }
foffset += length;
proto_tree_add_item(ndps_tree, hf_ndps_language_id, tvb, foffset, 4, FALSE);
foffset += 4;
@@ -5246,7 +5353,7 @@ dissect_ndps_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree, g
{
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Address %d", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
- foffset += address_item(tvb, btree, foffset);
+ foffset = address_item(tvb, btree, foffset);
proto_item_set_end(bitem, tvb, foffset);
}
proto_item_set_end(aitem, tvb, foffset);
@@ -5273,7 +5380,10 @@ dissect_ndps_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree, g
atree = proto_item_add_subtree(aitem, ett_ndps);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+ }
foffset += length;
proto_item_set_end(aitem, tvb, foffset);
}
@@ -5356,7 +5466,12 @@ dissect_ndps_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree, g
else /* Cont */
{
length = tvb_get_ntohl(tvb, foffset);
- proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, FALSE);
+ proto_tree_add_uint(ndps_tree, hf_ndps_context_len, tvb, foffset, 4, length);
+ foffset += 4;
+ if (length!=0)
+ {
+ proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, FALSE);
+ }
foffset += length;
foffset += (length%2);
proto_tree_add_item(ndps_tree, hf_ndps_abort_flag, tvb, foffset, 4, FALSE);
@@ -5534,7 +5649,12 @@ dissect_ndps_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree, g
break;
case 1: /* Continuation */
length = tvb_get_ntohl(tvb, foffset);
- proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, FALSE);
+ proto_tree_add_uint(ndps_tree, hf_ndps_context_len, tvb, foffset, 4, length);
+ foffset += 4;
+ if (length!=0)
+ {
+ proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, FALSE);
+ }
foffset += length;
foffset += (length%2);
proto_tree_add_item(ndps_tree, hf_ndps_abort_flag, tvb, foffset, 4, FALSE);
@@ -5574,7 +5694,10 @@ dissect_ndps_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree, g
atree = proto_item_add_subtree(aitem, ett_ndps);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(atree, hf_bind_security, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(atree, hf_bind_security, tvb, foffset, length, FALSE);
+ }
proto_item_set_end(aitem, tvb, foffset);
}
break;
@@ -5759,7 +5882,10 @@ dissect_ndps_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree, g
btree = proto_item_add_subtree(bitem, ett_ndps);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(btree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(btree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+ }
foffset += length;
proto_tree_add_item(btree, hf_ndps_event_type, tvb, foffset, 4, FALSE);
foffset += 4;
@@ -5813,7 +5939,10 @@ dissect_ndps_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree, g
btree = proto_item_add_subtree(bitem, ett_ndps);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(btree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(btree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+ }
foffset += length;
proto_tree_add_item(atree, hf_ndps_event_type, tvb, foffset, 4, FALSE);
foffset += 4;
@@ -6482,7 +6611,10 @@ dissect_ndps_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree, int
case 0x0000001d: /* List Event Profiles */
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+ }
foffset += length;
/* Start of Eventhandling */
proto_tree_add_item(ndps_tree, hf_ndps_profile_id, tvb, foffset, 4, FALSE);
@@ -6494,7 +6626,10 @@ dissect_ndps_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree, int
foffset = qualifiedname(tvb, atree, foffset);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+ }
foffset += length;
proto_tree_add_item(ndps_tree, hf_ndps_language_id, tvb, foffset, 4, FALSE);
foffset += 4;
@@ -6514,7 +6649,7 @@ dissect_ndps_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree, int
{
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Address %d", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
- foffset += address_item(tvb, btree, foffset);
+ foffset = address_item(tvb, btree, foffset);
proto_item_set_end(bitem, tvb, foffset);
}
proto_item_set_end(aitem, tvb, foffset);
@@ -6522,7 +6657,10 @@ dissect_ndps_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree, int
/* End of Eventhandling */
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(ndps_tree, hf_ndps_continuation_option, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(ndps_tree, hf_ndps_continuation_option, tvb, foffset, length, FALSE);
+ }
foffset += length;
if(error_val != 0)
{
@@ -6618,7 +6756,12 @@ dissect_ndps_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree, int
foffset = ndps_string(tvb, hf_notify_printer_uri, atree, foffset, NULL, 0);
proto_item_set_end(aitem, tvb, foffset);
/* End of Eventhandling2 */
- proto_tree_add_item(ndps_tree, hf_ndps_continuation_option, tvb, foffset, length, FALSE);
+ length = tvb_get_ntohl(tvb, foffset); /* Added on 10-17-03 */
+ foffset += 4;
+ if (length!=0)
+ {
+ proto_tree_add_item(ndps_tree, hf_ndps_continuation_option, tvb, foffset, length, FALSE);
+ }
foffset += length;
if(error_val != 0)
{
@@ -6682,7 +6825,10 @@ dissect_ndps_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree, int
atree = proto_item_add_subtree(aitem, ett_ndps);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(atree, hf_ndps_attribute_set, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(atree, hf_ndps_attribute_set, tvb, foffset, length, FALSE);
+ }
proto_item_set_end(aitem, tvb, foffset);
}
break;
@@ -6710,7 +6856,10 @@ dissect_ndps_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree, int
}
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(ndps_tree, hf_ndps_continuation_option, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(ndps_tree, hf_ndps_continuation_option, tvb, foffset, length, FALSE);
+ }
foffset += length;
foffset = return_code(tvb, pinfo, ndps_tree, foffset);
break;
@@ -6728,7 +6877,10 @@ dissect_ndps_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree, int
}
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(ndps_tree, hf_ndps_continuation_option, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(ndps_tree, hf_ndps_continuation_option, tvb, foffset, length, FALSE);
+ }
foffset += length;
foffset = return_code(tvb, pinfo, ndps_tree, foffset);
break;
@@ -6763,7 +6915,10 @@ dissect_ndps_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree, int
atree = proto_item_add_subtree(aitem, ett_ndps);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(atree, hf_ndps_attribute_set, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(atree, hf_ndps_attribute_set, tvb, foffset, length, FALSE);
+ }
proto_item_set_end(aitem, tvb, foffset);
}
break;
@@ -6808,7 +6963,10 @@ dissect_ndps_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree, int
proto_item_set_end(aitem, tvb, foffset);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+ }
foffset += length;
proto_tree_add_item(ndps_tree, hf_ndps_language_id, tvb, foffset, 4, FALSE);
foffset += 4;
@@ -6827,7 +6985,7 @@ dissect_ndps_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree, int
{
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Address %d", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
- foffset += address_item(tvb, btree, foffset);
+ foffset = address_item(tvb, btree, foffset);
proto_item_set_end(bitem, tvb, foffset);
}
proto_item_set_end(aitem, tvb, foffset);
@@ -6836,7 +6994,10 @@ dissect_ndps_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree, int
/* End of ProfileResultSet */
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(ndps_tree, hf_ndps_continuation_option, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(ndps_tree, hf_ndps_continuation_option, tvb, foffset, length, FALSE);
+ }
foffset += length;
foffset = return_code(tvb, pinfo, ndps_tree, foffset);
break;
@@ -6844,7 +7005,10 @@ dissect_ndps_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree, int
/* Start of IntegerSeq */
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(ndps_tree, hf_ndps_language_id, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(ndps_tree, hf_ndps_language_id, tvb, foffset, length, FALSE);
+ }
foffset += length;
/* End of IntegerSeq */
foffset = return_code(tvb, pinfo, ndps_tree, foffset);
@@ -6909,7 +7073,7 @@ dissect_ndps_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree, int
{
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Address %d", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
- foffset += address_item(tvb, btree, foffset);
+ foffset = address_item(tvb, btree, foffset);
proto_item_set_end(bitem, tvb, foffset);
}
proto_item_set_end(aitem, tvb, foffset);
@@ -6940,7 +7104,10 @@ dissect_ndps_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree, int
case 0x00000001: /* Bind */
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- proto_tree_add_item(ndps_tree, hf_ndps_attribute_set, tvb, foffset, length, FALSE);
+ if (length!=0)
+ {
+ proto_tree_add_item(ndps_tree, hf_ndps_attribute_set, tvb, foffset, length, FALSE);
+ }
break;
case 0x00000002: /* Unbind */
/* NoOp */
@@ -8057,6 +8224,11 @@ proto_register_ndps(void)
FT_UINT32, BASE_HEX, VALS(ndps_attrs_arg_enum), 0x0,
"List Attribute Operation", HFILL }},
+ { &hf_ndps_context_len,
+ { "Context Length", "ndps.context_len",
+ FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Context Length", HFILL }},
+
{ &hf_ndps_context,
{ "Context", "ndps.context",
FT_BYTES, BASE_NONE, NULL, 0x0,