From Bill Florac:

The displaying of attribute-lists in an "Attribute Reply" (ATTRRPLY) seems to
be written to display some special non-conforming attributes.  Conforming
attributes are either displayed wrong or not displayed at all.

When displaying an attributes-list in a "Service Registration" (SRVREG), the
attribute list is only displayed as a single string (and usually truncated).
While this is not wrong, it should be broken up into the comma separated
attributes as "Attribute Requests" tries to do.

svn path=/trunk/; revision=24163
This commit is contained in:
Jaap Keuter 2008-01-22 07:36:33 +00:00
parent 17a358e19c
commit 1c512cc373
1 changed files with 52 additions and 3 deletions

View File

@ -156,6 +156,7 @@ static int hf_srvloc_srvrply_svcname = -1;
static gint ett_srvloc = -1;
static gint ett_srvloc_attr = -1;
static gint ett_srvloc_flags = -1;
@ -567,7 +568,7 @@ attr_list(proto_tree *tree, int hf, tvbuff_t *tvb, int offset, int length,
for (foffset = offset; foffset<length; foffset += 2) {
ti = proto_tree_add_text(tree, tvb, foffset, -1, "Item %d", i);
srvloc_tree = proto_item_add_subtree(ti, ett_srvloc);
srvloc_tree = proto_item_add_subtree(ti, ett_srvloc_attr);
svc = tvb_get_guint8(tvb, foffset+1);
proto_tree_add_text(srvloc_tree, tvb, foffset+1, 1,
@ -641,7 +642,7 @@ attr_list(proto_tree *tree, int hf, tvbuff_t *tvb, int offset, int length,
for (foffset = offset + (type_len); foffset<length; foffset++) {
ti = proto_tree_add_text(tree, tvb, foffset, -1, "Item %d", i);
srvloc_tree = proto_item_add_subtree(ti, ett_srvloc);
srvloc_tree = proto_item_add_subtree(ti, ett_srvloc_attr);
svc = tvb_get_guint8(tvb, foffset+1);
proto_tree_add_text(srvloc_tree, tvb, foffset+1, 1,
@ -707,6 +708,53 @@ attr_list(proto_tree *tree, int hf, tvbuff_t *tvb, int offset, int length,
}
}
static void
attr_list2(proto_tree *tree, int hf, tvbuff_t *tvb, int offset, int length, guint16 encoding _U_)
{
guint8 *start;
guint8 c;
guint32 x;
guint32 cnt;
proto_item *ti;
proto_tree *attr_tree;
/* if we were to decode:
* For slp, these 9 characters: (),\!<=>~ and 0x00-1F, 0x7f are reserved and must be escaped in the form \HH
*/
/* create a sub tree for attributes */
ti = proto_tree_add_item(tree, hf, tvb, offset, length, TRUE);
attr_tree = proto_item_add_subtree(ti, ett_srvloc_attr);
/* this will ensure there is a terminating null */
start = tvb_get_ephemeral_string(tvb, offset, length);
cnt = 0;
x = 0;
c = start[x];
while (c) {
if (c == ',') {
cnt++; /* Attribute count */
start[x] = 0;
proto_tree_add_text(attr_tree, tvb, offset, x, "Item %d: %s", cnt, start);
offset += x+1;
start += x+1;
/* reset string length */
x = 0;
c = start[x];
} else {
/* increment and get next */
x++;
c = start[x];
}
}
/* display anything remaining */
if (x) {
cnt++;
proto_tree_add_text(attr_tree, tvb, offset, x, "Item %d: %s", cnt, start);
}
}
static int
dissect_url_entry_v1(tvbuff_t *tvb, int offset, proto_tree *tree,
guint16 encoding, guint16 flags)
@ -1178,7 +1226,7 @@ dissect_srvloc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
proto_tree_add_uint(srvloc_tree, hf_srvloc_attrrply_attrlistlen, tvb, offset, 2, length);
if (length > 0) {
offset += 2;
attr_list(srvloc_tree, hf_srvloc_attrrply_attrlist, tvb, offset, length, CHARSET_UTF_8);
attr_list2(srvloc_tree, hf_srvloc_attrrply_attrlist, tvb, offset, length, CHARSET_UTF_8);
offset += length;
count = tvb_get_guint8(tvb, offset);
proto_tree_add_uint(srvloc_tree, hf_srvloc_attrrply_attrauthcount, tvb, offset, 1, count);
@ -1788,6 +1836,7 @@ proto_register_srvloc(void)
static gint *ett[] = {
&ett_srvloc,
&ett_srvloc_attr,
&ett_srvloc_flags,
};
module_t *srvloc_module;