aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-wsmp.c
diff options
context:
space:
mode:
authorBill Meier <wmeier@newsguy.com>2013-10-22 14:27:48 +0000
committerBill Meier <wmeier@newsguy.com>2013-10-22 14:27:48 +0000
commita7fbfd70cf665592f4fcb45c5ab378d08d9c8425 (patch)
tree95f2a1a71e7763ca5d997bc835e8923fd66f41b6 /epan/dissectors/packet-wsmp.c
parent29b709298e2f1bdc7ebe8e032648848f3255d909 (diff)
Cleanup:
- remove duplicate/unneeded #includes - remove some boilerplate comments - fix up whitespace: indentation, trailing & etc - remove 'if (tree)' (Note: 'if (tree)' needs to be around all the code (as in the previous version of packet-wsmp) or none so that the same value of offset is used in various function calls whether or not 'tree == NULL'. For the moment I've chosen to remove the 'if (tree)' since (in theory) the (external) data dissector shouldn't be called under 'if (tree)'. - revert SVN #52757 since no it's longer needed with the removal of 'if (tree)'; - remove another unneeded line of code. svn path=/trunk/; revision=52761
Diffstat (limited to 'epan/dissectors/packet-wsmp.c')
-rw-r--r--epan/dissectors/packet-wsmp.c348
1 files changed, 160 insertions, 188 deletions
diff --git a/epan/dissectors/packet-wsmp.c b/epan/dissectors/packet-wsmp.c
index de264103cc..993a0ac8be 100644
--- a/epan/dissectors/packet-wsmp.c
+++ b/epan/dissectors/packet-wsmp.c
@@ -10,8 +10,6 @@
* By Gerald Combs <gerald@wireshark.org>
* Copyright 1998 Gerald Combs
*
- * Copied from README.developer
- *
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
@@ -33,14 +31,12 @@
#include <epan/packet.h>
#include <epan/etypes.h>
-#include <epan/prefs.h>
-#include <glib.h>
-#define WSMP 0x80
-#define WSMP_S 0x81
-#define WSMP_I 0x82
-#define CHANNUM 0x0F
-#define DATARATE 0x10
+#define WSMP 0x80
+#define WSMP_S 0x81
+#define WSMP_I 0x82
+#define CHANNUM 0x0F
+#define DATARATE 0x10
#define TRANSMITPW 0x04
static const value_string wsmp_elemenid_names[] = {
@@ -63,11 +59,11 @@ static int hf_wsmp_txpower = -1;
static int hf_wsmp_WAVEid = -1;
static int hf_wsmp_wsmlength = -1;
static int hf_wsmp_WSMP_S_data = -1;
+
/* Savari function to get the length of a psid based on the number of
successive 1s in the most sig bits of the most sig octet. Taken
from libwme
*/
-
int wme_getpsidlen (guint8 *psid)
{
int length = 0;
@@ -81,218 +77,194 @@ int wme_getpsidlen (guint8 *psid)
length = 2;
} else if ((psid[0] & 0x80) == 0x00) {
length = 1;
- }
+ }
return length;
}
-
-
/* Initialize the subtree pointers */
static gint ett_wsmp = -1;
static gint ett_wsmdata = -1;
-/* Code to actually dissect the packets */
static void
dissect_wsmp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
+ /* Set up structures needed to add the protocol subtree and manage it */
+ proto_item *ti, *wsmdata_item;
+ proto_tree *wsmp_tree, *wsmdata_tree;
+ tvbuff_t *wsmdata_tvb;
+ guint16 wsmlength, offset;
+ guint32 psidLen, psid;
+ guint8 elemenId, elemenLen, msb, supLen;
- /* Set up structures needed to add the protocol subtree and manage it */
- proto_item *ti, *wsmdata_item;
- proto_tree *wsmp_tree, *wsmdata_tree;
- tvbuff_t *wsmdata_tvb;
- guint16 wsmlength, offset;
- guint32 psidLen, psid;
- guint8 elemenId, elemenLen, msb, supLen;
+ /* Make entries in Protocol column and Info column on summary display */
+ col_set_str(pinfo->cinfo, COL_PROTOCOL, "WSMP");
- /* Make entries in Protocol column and Info column on summary display */
- col_set_str(pinfo->cinfo, COL_PROTOCOL, "WSMP");
+ col_set_str(pinfo->cinfo, COL_INFO, "WAVE Short Message Protocol IEEE P1609.3");
- col_set_str(pinfo->cinfo, COL_INFO, "WAVE Short Message Protocol IEEE P1609.3");
+ /* create display subtree for the protocol */
+ ti = proto_tree_add_item(tree, proto_wsmp, tvb, 0, -1, ENC_NA);
- /* create display subtree for the protocol */
- ti = proto_tree_add_item(tree, proto_wsmp, tvb, 0, -1, ENC_NA);
+ wsmp_tree = proto_item_add_subtree(ti, ett_wsmp);
- wsmp_tree = proto_item_add_subtree(ti, ett_wsmp);
-
- offset = 0;
- proto_tree_add_item(wsmp_tree,
+ offset = 0;
+ proto_tree_add_item(wsmp_tree,
hf_wsmp_version, tvb, offset, 1, ENC_BIG_ENDIAN);
- offset ++;
+ offset++;
- psid = tvb_get_guint8(tvb, offset);
- psidLen =(guint32)wme_getpsidlen((guint8*)&psid);
+ psid = tvb_get_guint8(tvb, offset);
+ psidLen = (guint32)wme_getpsidlen((guint8*)&psid);
-
- if(psidLen == 2)
- psid = tvb_get_ntohs(tvb, offset);
- else if(psidLen == 3)
- {
- psid = tvb_get_ntohl(tvb, offset);
- psid = psid & 0x00FFFF; /* three bytes */
- }
- else if(psidLen ==4)
- psid = tvb_get_ntohl(tvb, offset);
-
- wsmlength = 0;
-
- if (tree) {
- proto_tree_add_item(wsmp_tree,
- hf_wsmp_psid, tvb, offset, psidLen, ENC_BIG_ENDIAN);
- offset += psidLen;
-
-
- elemenId = tvb_get_guint8(tvb, offset);
- while(elemenId != WSMP && elemenId != WSMP_S
- && elemenId != WSMP_I)
- {
- offset++;
- if(elemenId == CHANNUM)
- {
- /* channel number */
- elemenLen = tvb_get_guint8(tvb, offset);
- offset++;
- proto_tree_add_item(wsmp_tree,
+ if (psidLen == 2)
+ psid = tvb_get_ntohs(tvb, offset);
+ else if (psidLen == 3)
+ {
+ psid = tvb_get_ntohl(tvb, offset);
+ psid = psid & 0x00FFFF; /* three bytes */
+
+ }
+ else if (psidLen == 4)
+ psid = tvb_get_ntohl(tvb, offset);
+
+ proto_tree_add_item(wsmp_tree,
+ hf_wsmp_psid, tvb, offset, psidLen, ENC_BIG_ENDIAN);
+ offset += psidLen;
+
+
+ elemenId = tvb_get_guint8(tvb, offset);
+ while ((elemenId != WSMP) && (elemenId != WSMP_S) && (elemenId != WSMP_I))
+ {
+ offset++;
+ if (elemenId == CHANNUM)
+ {
+ /* channel number */
+ elemenLen = tvb_get_guint8(tvb, offset);
+ offset++;
+ proto_tree_add_item(wsmp_tree,
hf_wsmp_channel, tvb, offset, elemenLen, ENC_BIG_ENDIAN);
- offset += elemenLen;
- }
- else if(elemenId == DATARATE)
- {
- /* Data rate */
- elemenLen = tvb_get_guint8(tvb, offset);
- offset++;
- proto_tree_add_item(wsmp_tree,
+ offset += elemenLen;
+ }
+ else if (elemenId == DATARATE)
+ {
+ /* Data rate */
+ elemenLen = tvb_get_guint8(tvb, offset);
+ offset++;
+ proto_tree_add_item(wsmp_tree,
hf_wsmp_rate, tvb, offset, elemenLen, ENC_BIG_ENDIAN);
- offset += elemenLen;
-
-
- }
- else if(elemenId == TRANSMITPW)
- {
- /* Transmit power */
- elemenLen = tvb_get_guint8(tvb, offset);
- offset++;
- proto_tree_add_item(wsmp_tree,
+ offset += elemenLen;
+ }
+ else if (elemenId == TRANSMITPW)
+ {
+ /* Transmit power */
+ elemenLen = tvb_get_guint8(tvb, offset);
+ offset++;
+ proto_tree_add_item(wsmp_tree,
hf_wsmp_txpower, tvb, offset, elemenLen, ENC_BIG_ENDIAN);
- offset += elemenLen;
- }
- elemenId = tvb_get_guint8(tvb, offset);
- elemenLen = 0;
- }
-
- proto_tree_add_item(wsmp_tree,
- hf_wsmp_WAVEid, tvb, offset, 1, ENC_BIG_ENDIAN);
- offset ++;
-
- wsmlength = tvb_get_letohs( tvb, offset);
- proto_tree_add_item(wsmp_tree,
- hf_wsmp_wsmlength, tvb, offset, 2, ENC_BIG_ENDIAN);
- offset += 2;
-
- if(elemenId == WSMP_S)
- {
- msb = 1;
- supLen = 0;
- while(msb)
- {
- msb = tvb_get_guint8(tvb, offset + supLen);
- msb = msb & 0x80;
- supLen++;
- }
- proto_tree_add_item(wsmp_tree,
- hf_wsmp_WSMP_S_data, tvb, offset, supLen, ENC_BIG_ENDIAN);
- wsmlength -= supLen;
- offset += supLen;
- }
+ offset += elemenLen;
}
-
- wsmdata_item = proto_tree_add_text (wsmp_tree, tvb, offset, wsmlength,
- "Wave Short Message");
- wsmdata_tree = proto_item_add_subtree(wsmdata_item, ett_wsmdata);
-
- wsmdata_tvb = tvb_new_subset(tvb, offset,-1, wsmlength);
- /* TODO: Branch on the application context and display accordingly
- * Default call the data dissector
- */
- if(psid == 0xbff0)
+ elemenId = tvb_get_guint8(tvb, offset);
+ }
+
+ proto_tree_add_item(wsmp_tree,
+ hf_wsmp_WAVEid, tvb, offset, 1, ENC_BIG_ENDIAN);
+ offset++;
+
+ wsmlength = tvb_get_letohs( tvb, offset);
+ proto_tree_add_item(wsmp_tree,
+ hf_wsmp_wsmlength, tvb, offset, 2, ENC_BIG_ENDIAN);
+ offset += 2;
+
+ if (elemenId == WSMP_S)
+ {
+ msb = 1;
+ supLen = 0;
+ while (msb)
{
- call_dissector(data_handle, wsmdata_tvb, pinfo, wsmdata_tree);
+ msb = tvb_get_guint8(tvb, offset + supLen);
+ msb = msb & 0x80;
+ supLen++;
}
+ proto_tree_add_item(wsmp_tree,
+ hf_wsmp_WSMP_S_data, tvb, offset, supLen, ENC_BIG_ENDIAN);
+ wsmlength -= supLen;
+ offset += supLen;
+ }
+
+ wsmdata_item = proto_tree_add_text (wsmp_tree, tvb, offset, wsmlength,
+ "Wave Short Message");
+ wsmdata_tree = proto_item_add_subtree(wsmdata_item, ett_wsmdata);
+
+ wsmdata_tvb = tvb_new_subset(tvb, offset, -1, wsmlength);
+
+ /* TODO: Branch on the application context and display accordingly
+ * Default: call the data dissector
+ */
+ if (psid == 0xbff0)
+ {
+ call_dissector(data_handle, wsmdata_tvb, pinfo, wsmdata_tree);
+ }
}
-
-/* Register the protocol with Wireshark */
-
-/* this format is require because a script is used to build the C function
- that calls all the protocol registration.
- */
-
void
proto_register_wsmp(void)
{
- /* Setup list of header fields See Section 1.6.1 for details*/
- static hf_register_info hf[] = {
- { &hf_wsmp_version,
- { "Version", "wsmp.version", FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL }},
-
- { &hf_wsmp_psid,
- { "PSID", "wsmp.psid", FT_UINT32, BASE_HEX, NULL, 0x0,
- NULL, HFILL }},
-
- { &hf_wsmp_channel,
- { "Channel", "wsmp.channel", FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL }},
-
- { &hf_wsmp_rate,
- { "Data Rate", "wsmp.rate", FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL }},
-
- { &hf_wsmp_txpower,
- { "Transmit Power", "wsmp.txpower", FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL }},
-
- { &hf_wsmp_WAVEid,
- { "WAVE element id", "wsmp.WAVEid", FT_UINT8, BASE_DEC, VALS(wsmp_elemenid_names), 0x0,
- NULL, HFILL }},
-
- { &hf_wsmp_wsmlength,
- { "WSM Length", "wsmp.wsmlength", FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL, HFILL }},
-
- { &hf_wsmp_WSMP_S_data,
- { "WAVE Supplement Data", "wsmp.supplement", FT_UINT8, BASE_HEX, NULL, 0x0,
- NULL, HFILL }},
- };
-
- /* Setup protocol subtree array */
- static gint *ett[] = {
- &ett_wsmp,
- &ett_wsmdata,
- };
-
- /* Register the protocol name and description */
- proto_wsmp = proto_register_protocol("Wave Short Message Protocol(IEEE P1609.3)",
- "WSMP", "wsmp");
-
- /* Required function calls to register the header fields and subtrees used */
- proto_register_field_array(proto_wsmp, hf, array_length(hf));
- proto_register_subtree_array(ett, array_length(ett));
-
+ /* Setup list of header fields See Section 1.6.1 for details*/
+ static hf_register_info hf[] = {
+ { &hf_wsmp_version,
+ { "Version", "wsmp.version", FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+
+ { &hf_wsmp_psid,
+ { "PSID", "wsmp.psid", FT_UINT32, BASE_HEX, NULL, 0x0,
+ NULL, HFILL }},
+
+ { &hf_wsmp_channel,
+ { "Channel", "wsmp.channel", FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+
+ { &hf_wsmp_rate,
+ { "Data Rate", "wsmp.rate", FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+
+ { &hf_wsmp_txpower,
+ { "Transmit Power", "wsmp.txpower", FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+
+ { &hf_wsmp_WAVEid,
+ { "WAVE element id", "wsmp.WAVEid", FT_UINT8, BASE_DEC, VALS(wsmp_elemenid_names), 0x0,
+ NULL, HFILL }},
+
+ { &hf_wsmp_wsmlength,
+ { "WSM Length", "wsmp.wsmlength", FT_UINT16, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+
+ { &hf_wsmp_WSMP_S_data,
+ { "WAVE Supplement Data", "wsmp.supplement", FT_UINT8, BASE_HEX, NULL, 0x0,
+ NULL, HFILL }},
+ };
+
+ /* Setup protocol subtree array */
+ static gint *ett[] = {
+ &ett_wsmp,
+ &ett_wsmdata,
+ };
+
+ /* Register the protocol name and description */
+ proto_wsmp = proto_register_protocol("Wave Short Message Protocol(IEEE P1609.3)",
+ "WSMP", "wsmp");
+
+ /* Required function calls to register the header fields and subtrees used */
+ proto_register_field_array(proto_wsmp, hf, array_length(hf));
+ proto_register_subtree_array(ett, array_length(ett));
}
-/* If this dissector uses sub-dissector registration add a registration routine.
- This exact format is required because a script is used to find these routines
- and create the code that calls these routines.
- */
-
void
proto_reg_handoff_wsmp(void)
{
- dissector_handle_t wsmp_handle;
+ dissector_handle_t wsmp_handle;
- wsmp_handle = create_dissector_handle(dissect_wsmp, proto_wsmp);
- dissector_add_uint("ethertype", ETHERTYPE_WSMP, wsmp_handle);
- data_handle = find_dissector("data");
- return;
+ wsmp_handle = create_dissector_handle(dissect_wsmp, proto_wsmp);
+ dissector_add_uint("ethertype", ETHERTYPE_WSMP, wsmp_handle);
+ data_handle = find_dissector("data");
+ return;
}