aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorguy <guy@f5534014-38df-0310-8fa8-9805f1628bb7>2002-02-24 08:10:07 +0000
committerguy <guy@f5534014-38df-0310-8fa8-9805f1628bb7>2002-02-24 08:10:07 +0000
commit9026cd0ee81e255172c3515ba0b8560eafc2a379 (patch)
treeaa94d58f09e3dd2ca0351eb518365adf77f8e681
parent1ba6449c9fd28fcb51029b09aa889626d70d82f9 (diff)
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. git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@4798 f5534014-38df-0310-8fa8-9805f1628bb7
-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"));