aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2002-02-24 08:10:07 +0000
committerGuy Harris <guy@alum.mit.edu>2002-02-24 08:10:07 +0000
commit1be3629f30b319af0d161ba3c02b8ef700cae312 (patch)
treeaa94d58f09e3dd2ca0351eb518365adf77f8e681
parentca8f79df3d8d042806e24a70a738bd5c92b2dc90 (diff)
downloadwireshark-1be3629f30b319af0d161ba3c02b8ef700cae312.tar.gz
wireshark-1be3629f30b319af0d161ba3c02b8ef700cae312.tar.bz2
wireshark-1be3629f30b319af0d161ba3c02b8ef700cae312.zip
Don't copy the entire EAP header, just extract stuff from it a field at
a time, so we dissect as far as we can. Set the length of the EAP protocol item to the length of an EAP header. Put information into the Info column about the EAP code and, for a request or response, the EAP type. svn path=/trunk/; revision=4798
-rw-r--r--packet-eap.c52
1 files changed, 27 insertions, 25 deletions
diff --git a/packet-eap.c b/packet-eap.c
index 80f2742f2d..2c6447a927 100644
--- a/packet-eap.c
+++ b/packet-eap.c
@@ -2,7 +2,7 @@
* Routines for EAP Extensible Authentication Protocol header disassembly,
* RFC 2284
*
- * $Id: packet-eap.c,v 1.10 2002/02/22 21:51:18 guy Exp $
+ * $Id: packet-eap.c,v 1.11 2002/02/24 08:10:07 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@@ -51,12 +51,6 @@ static int hf_eap_type = -1;
static gint ett_eap = -1;
-typedef struct _e_eap {
- guint8 eap_code;
- guint8 eap_id;
- guint16 eap_len;
-} e_eap;
-
#define EAP_REQUEST 1
#define EAP_RESPONSE 2
#define EAP_SUCCESS 3
@@ -84,41 +78,49 @@ static const value_string eap_type_vals[] = {
static void
dissect_eap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
- e_eap eaph;
+ guint8 eap_code;
+ guint8 eap_id;
+ guint16 eap_len;
+ guint8 eap_type;
guint len;
proto_tree *ti;
- proto_tree *eap_tree;
+ proto_tree *eap_tree = NULL;
if (check_col(pinfo->cinfo, COL_PROTOCOL))
col_set_str(pinfo->cinfo, COL_PROTOCOL, "EAP");
if (check_col(pinfo->cinfo, COL_INFO))
col_clear(pinfo->cinfo, COL_INFO);
- tvb_memcpy(tvb, (guint8 *)&eaph, 0, sizeof(eaph));
- eaph.eap_len = ntohs(eaph.eap_len);
-
- len = eaph.eap_len;
-
- set_actual_length(tvb, len);
-
- eap_tree = NULL;
-
+ eap_code = tvb_get_guint8(tvb, 0);
+ if (check_col(pinfo->cinfo, COL_INFO))
+ col_add_str(pinfo->cinfo, COL_INFO,
+ val_to_str(eap_code, eap_code_vals, "Unknown code (0x%02X)"));
if (tree) {
- ti = proto_tree_add_item(tree, proto_eap, tvb, 0, len, FALSE);
+ ti = proto_tree_add_item(tree, proto_eap, tvb, 0, 4, FALSE);
eap_tree = proto_item_add_subtree(ti, ett_eap);
- proto_tree_add_uint(eap_tree, hf_eap_code, tvb, 0, 1, eaph.eap_code);
-
- proto_tree_add_uint(eap_tree, hf_eap_identifier, tvb, 1, 1, eaph.eap_id);
- proto_tree_add_uint(eap_tree, hf_eap_len, tvb, 2, 2, eaph.eap_len);
+ proto_tree_add_uint(eap_tree, hf_eap_code, tvb, 0, 1, eap_code);
}
- switch (eaph.eap_code) {
+ if (tree)
+ proto_tree_add_item(eap_tree, hf_eap_identifier, tvb, 1, 1, FALSE);
+
+ eap_len = tvb_get_ntohs(tvb, 2);
+ len = eap_len;
+ set_actual_length(tvb, len);
+ if (tree)
+ proto_tree_add_uint(eap_tree, hf_eap_len, tvb, 2, 2, eap_len);
+
+ switch (eap_code) {
case EAP_REQUEST:
case EAP_RESPONSE:
+ eap_type = tvb_get_guint8(tvb, 4);
+ if (check_col(pinfo->cinfo, COL_INFO))
+ col_append_fstr(pinfo->cinfo, COL_INFO, ", %s",
+ val_to_str(eap_type, eap_type_vals, "Unknown type (0x%02X)"));
if (tree) {
- proto_tree_add_item(eap_tree, hf_eap_type, tvb, 4, 1, FALSE);
+ proto_tree_add_uint(eap_tree, hf_eap_type, tvb, 4, 1, eap_type);
if (len > 5) {
proto_tree_add_text(eap_tree, tvb, 5, len - 5, "Type-Data (%d byte%s)",
len - 5, plurality(len - 5, "", "s"));