aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2004-12-31 22:00:44 +0000
committerGuy Harris <guy@alum.mit.edu>2004-12-31 22:00:44 +0000
commit3f0d0ca5ea5f6034904e4cb03b38b66e7b03e165 (patch)
tree174322d6dcc7eaee33e5f06cecd6843ea9cb0de1 /epan/dissectors
parented15a739621ddac0970e45aae3de9ec6a397b54f (diff)
Note what Fibre Channel spec documents this protocol.
Don't assign the const pointers passed to hash routines to non-const pointers. In "zonenm_to_str()", don't assume there's a null terminator in the packet - use "tvb_get_string()" so that the buffer into which it's copied is explicitly null-terminated. Put the Domain & Port into the protocol tree as a "0xXXXXXXXX" string, rather than as a string with one blank in it. svn path=/trunk/; revision=12909
Diffstat (limited to 'epan/dissectors')
-rw-r--r--epan/dissectors/packet-fcdns.c53
1 files changed, 28 insertions, 25 deletions
diff --git a/epan/dissectors/packet-fcdns.c b/epan/dissectors/packet-fcdns.c
index 78c2099ebd..1bdda592c8 100644
--- a/epan/dissectors/packet-fcdns.c
+++ b/epan/dissectors/packet-fcdns.c
@@ -59,6 +59,10 @@
#include "packet-fcdns.h"
#include "packet-fcswils.h"
+/*
+ * See FC-GS-2.
+ */
+
/* Initialize the protocol and registered fields */
static int proto_fcdns = -1;
static int hf_fcdns_gssubtype = -1;
@@ -137,8 +141,8 @@ static dissector_handle_t data_handle;
static gint
fcdns_equal(gconstpointer v, gconstpointer w)
{
- fcdns_conv_key_t *v1 = (fcdns_conv_key_t *)v;
- fcdns_conv_key_t *v2 = (fcdns_conv_key_t *)w;
+ const fcdns_conv_key_t *v1 = v;
+ const fcdns_conv_key_t *v2 = w;
return (v1->conv_idx == v2->conv_idx);
}
@@ -146,7 +150,7 @@ fcdns_equal(gconstpointer v, gconstpointer w)
static guint
fcdns_hash (gconstpointer v)
{
- fcdns_conv_key_t *key = (fcdns_conv_key_t *)v;
+ const fcdns_conv_key_t *key = v;
guint val;
val = key->conv_idx;
@@ -1135,26 +1139,30 @@ dissect_fcdns_daid (tvbuff_t *tvb, proto_tree *req_tree, gboolean isreq)
}
}
-static gchar *
+static guint8 *
zonenm_to_str (tvbuff_t *tvb, gint offset)
{
int len = tvb_get_guint8 (tvb, offset);
- return ((gchar *)tvb_get_ptr (tvb, offset+4, len));
+ return tvb_get_string (tvb, offset+4, len);
}
static void
dissect_fcdns_zone_mbr (tvbuff_t *tvb, proto_tree *zmbr_tree, int offset)
{
- int mbrlen = 4 + tvb_get_guint8 (tvb, offset+3);
-
- proto_tree_add_item (zmbr_tree, hf_fcdns_zone_mbrtype, tvb,
- offset, 1, 0);
+ guint8 mbrtype;
+ int idlen;
+ char dpbuf[2+8+1];
+ char *str;
+
+ mbrtype = tvb_get_guint8 (tvb, offset);
+ proto_tree_add_uint (zmbr_tree, hf_fcdns_zone_mbrtype, tvb,
+ offset, 1, mbrtype);
proto_tree_add_text (zmbr_tree, tvb, offset+2, 1, "Flags: 0x%x",
tvb_get_guint8 (tvb, offset+2));
+ idlen = tvb_get_guint8 (tvb, offset+3);
proto_tree_add_text (zmbr_tree, tvb, offset+3, 1,
- "Identifier Length: %d",
- tvb_get_guint8 (tvb, offset+3));
- switch (tvb_get_guint8 (tvb, offset)) {
+ "Identifier Length: %d", idlen);
+ switch (mbrtype) {
case FC_SWILS_ZONEMBR_WWN:
proto_tree_add_string (zmbr_tree, hf_fcdns_zone_mbrid, tvb,
offset+4, 8,
@@ -1163,29 +1171,26 @@ dissect_fcdns_zone_mbr (tvbuff_t *tvb, proto_tree *zmbr_tree, int offset)
8)));
break;
case FC_SWILS_ZONEMBR_DP:
- proto_tree_add_string_format (zmbr_tree,
- hf_fcdns_zone_mbrid,
- tvb, offset+4, 4, " ",
- "0x%x",
- tvb_get_ntohl (tvb,
- offset+4));
+ sprintf(dpbuf, "0x%08x", tvb_get_ntohl (tvb, offset+4));
+ proto_tree_add_string (zmbr_tree, hf_fcdns_zone_mbrid, tvb,
+ offset+4, 4, dpbuf);
break;
case FC_SWILS_ZONEMBR_FCID:
proto_tree_add_string (zmbr_tree, hf_fcdns_zone_mbrid, tvb,
offset+4, 4,
fc_to_str (tvb_get_ptr (tvb,
- offset+4,
+ offset+5,
3)));
break;
case FC_SWILS_ZONEMBR_ALIAS:
+ str = zonenm_to_str (tvb, offset+4);
proto_tree_add_string (zmbr_tree, hf_fcdns_zone_mbrid, tvb,
- offset+4,
- tvb_get_guint8 (tvb, offset+3),
- zonenm_to_str (tvb, offset+4));
+ offset+4, idlen, str);
+ g_free (str);
break;
default:
proto_tree_add_string (zmbr_tree, hf_fcdns_zone_mbrid, tvb,
- offset+4, mbrlen,
+ offset+4, idlen,
"Unknown member type format");
}
@@ -1935,5 +1940,3 @@ proto_reg_handoff_fcdns (void)
data_handle = find_dissector ("data");
}
-
-