summaryrefslogtreecommitdiff
path: root/plugins/irda
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2016-02-29 13:49:02 -0500
committerMichael Mann <mmann78@netscape.net>2016-03-01 03:13:49 +0000
commit68dede24d17f5f51096b62bc2dc76cb72b4136f8 (patch)
tree84ca87c2ec72ee41e10261e7cd075766b9374d5e /plugins/irda
parentc73cf3cd00c1fb144e67ef79ea55be41993b79be (diff)
downloadwireshark-68dede24d17f5f51096b62bc2dc76cb72b4136f8.tar.gz
IrDA: Register a link-layer IrLAP address type".
Was using AT_NONE as "unknown address type" instead of "no address". Ping-Bug: 12205 Change-Id: Ic1d7022f8eaa3dfab9bb7b607eed264cc527c87c Reviewed-on: https://code.wireshark.org/review/14242 Petri-Dish: Michael Mann <mmann78@netscape.net> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Michael Mann <mmann78@netscape.net>
Diffstat (limited to 'plugins/irda')
-rw-r--r--plugins/irda/packet-irda.c46
1 files changed, 38 insertions, 8 deletions
diff --git a/plugins/irda/packet-irda.c b/plugins/irda/packet-irda.c
index 12da57a165..322b739ba0 100644
--- a/plugins/irda/packet-irda.c
+++ b/plugins/irda/packet-irda.c
@@ -30,6 +30,8 @@
#include <string.h>
#include <epan/packet.h>
+#include <epan/address_types.h>
+#include <epan/to_str.h>
#include <epan/conversation.h>
#include <epan/xdlc.h>
#include <wiretap/wtap.h>
@@ -239,6 +241,8 @@ static gint ett_param[MAX_PARAMETERS];
static gint ett_iap_entry[MAX_IAP_ENTRIES];
+static int irda_address_type = -1;
+
static const xdlc_cf_items irlap_cf_items = {
&hf_lap_c_nr,
&hf_lap_c_ns,
@@ -529,9 +533,9 @@ static void dissect_iap_request(tvbuff_t* tvb, packet_info* pinfo, proto_tree* r
/* create conversation entry */
src = circuit_id ^ CMD_FRAME;
- set_address(&srcaddr, AT_NONE, 1, &src);
+ set_address(&srcaddr, irda_address_type, 1, &src);
- set_address(&destaddr, AT_NONE, 1, &circuit_id);
+ set_address(&destaddr, irda_address_type, 1, &circuit_id);
conv = find_conversation(pinfo->num, &srcaddr, &destaddr, PT_NONE, pinfo->srcport, pinfo->destport, 0);
if (conv)
@@ -678,9 +682,9 @@ static void dissect_iap_result(tvbuff_t* tvb, packet_info* pinfo, proto_tree* ro
retcode = tvb_get_guint8(tvb, offset + 1);
src = circuit_id ^ CMD_FRAME;
- set_address(&srcaddr, AT_NONE, 1, &src);
+ set_address(&srcaddr, irda_address_type, 1, &src);
- set_address(&destaddr, AT_NONE, 1, &circuit_id);
+ set_address(&destaddr, irda_address_type, 1, &circuit_id);
/* Find result value dissector */
conv = find_conversation(pinfo->num, &srcaddr, &destaddr, PT_NONE, pinfo->srcport, pinfo->destport, 0);
@@ -959,9 +963,9 @@ static void dissect_appl_proto(tvbuff_t* tvb, packet_info* pinfo, proto_tree* ro
src = circuit_id ^ CMD_FRAME;
- set_address(&srcaddr, AT_NONE, 1, &src);
+ set_address(&srcaddr, irda_address_type, 1, &src);
- set_address(&destaddr, AT_NONE, 1, &circuit_id);
+ set_address(&destaddr, irda_address_type, 1, &circuit_id);
/* Find result value dissector */
conv = find_conversation(pinfo->num, &srcaddr, &destaddr, PT_NONE, pinfo->srcport, pinfo->destport, 0);
@@ -1188,9 +1192,9 @@ void add_lmp_conversation(packet_info* pinfo, guint8 dlsap, gboolean ttp, dissec
/*g_message("%d: add_lmp_conversation(%p, %d, %d, %p) = ", pinfo->num, pinfo, dlsap, ttp, proto_dissector); */
- set_address(&srcaddr, AT_NONE, 1, &circuit_id);
+ set_address(&srcaddr, irda_address_type, 1, &circuit_id);
- set_address(&destaddr, AT_NONE, 1, &dest);
+ set_address(&destaddr, irda_address_type, 1, &dest);
conv = find_conversation(pinfo->num, &destaddr, &srcaddr, PT_NONE, dlsap, 0, NO_PORT_B);
if (conv)
@@ -1846,6 +1850,30 @@ static int dissect_irda(tvbuff_t* tvb, packet_info* pinfo, proto_tree* root, voi
return tvb_captured_length(tvb);
}
+static int irda_addr_to_str(const address* addr, gchar *buf, int buf_len _U_)
+{
+ const guint8 *addrdata = (const guint8 *)addr->data;
+ gchar *start_buf = buf;
+
+ buf = uint_to_str_back(buf, *addrdata);
+ *buf = '\0';
+ return (int)(buf-start_buf+1);
+}
+
+static int irda_addr_str_len(const address* addr _U_)
+{
+ return 11; /* Leaves required space (10 bytes) for uint_to_str_back() */
+}
+
+static const char* irda_col_filter_str(const address* addr _U_, gboolean is_src _U_)
+{
+ return "irlap.a";
+}
+
+static int irda_addr_len(void)
+{
+ return 1;
+}
/*
* Register the protocol with Wireshark
@@ -2203,6 +2231,8 @@ void proto_register_irda(void)
ett_iap_e[i] = &ett_iap_entry[i];
}
proto_register_subtree_array(ett_iap_e, MAX_IAP_ENTRIES);
+
+ irda_address_type = address_type_dissector_register("AT_IRDA", "IRDA Address", irda_addr_to_str, irda_addr_str_len, irda_col_filter_str, irda_addr_len, NULL, NULL);
}