aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2013-11-12 13:46:51 +0000
committerMichael Mann <mmann78@netscape.net>2013-11-12 13:46:51 +0000
commit76bfa2ce1af4867baf4f6990ac233d04a1b3af23 (patch)
treec665d826554ef5c3256b9a9b3fdc1fc9841ae56c
parent2b729ba554b5b5681f2304d0a51b63d3b250a9c0 (diff)
Remove usb_conv_info_t from packet_info and pass the data directly into the subdissectors. Bug 9413 (https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9413)
svn path=/trunk/; revision=53274
-rw-r--r--epan/dissectors/packet-hci_usb.c40
-rw-r--r--epan/dissectors/packet-mbim.c11
-rw-r--r--epan/dissectors/packet-rfid-pn532-hci.c9
-rw-r--r--epan/dissectors/packet-rfid-pn532.c11
-rw-r--r--epan/dissectors/packet-tfp.c45
-rw-r--r--epan/dissectors/packet-usb-audio.c12
-rw-r--r--epan/dissectors/packet-usb-ccid.c8
-rw-r--r--epan/dissectors/packet-usb-com.c12
-rw-r--r--epan/dissectors/packet-usb-hid.c9
-rw-r--r--epan/dissectors/packet-usb-hub.c9
-rw-r--r--epan/dissectors/packet-usb-masstorage.c40
-rw-r--r--epan/dissectors/packet-usb-video.c39
-rw-r--r--epan/dissectors/packet-usb.c131
-rw-r--r--epan/dissectors/packet-usb.h13
-rw-r--r--epan/packet_info.h1
15 files changed, 159 insertions, 231 deletions
diff --git a/epan/dissectors/packet-hci_usb.c b/epan/dissectors/packet-hci_usb.c
index 2d96953ad5..6fdf2c08de 100644
--- a/epan/dissectors/packet-hci_usb.c
+++ b/epan/dissectors/packet-hci_usb.c
@@ -106,7 +106,7 @@ dissect_hci_usb(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
proto_tree *titem = NULL;
proto_item *pitem = NULL;
gint offset = 0;
- usb_data_t *usb_data;
+ usb_conv_info_t *usb_conv_info = (usb_conv_info_t *)data;
tvbuff_t *next_tvb = NULL;
hci_data_t *hci_data;
gint p2p_dir_save;
@@ -121,12 +121,10 @@ dissect_hci_usb(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
col_set_str(pinfo->cinfo, COL_PROTOCOL, "HCI_USB");
-
- usb_data = (usb_data_t *)data;
- DISSECTOR_ASSERT(usb_data);
+ DISSECTOR_ASSERT(usb_conv_info);
p2p_dir_save = pinfo->p2p_dir;
- pinfo->p2p_dir = usb_data->direction;
+ pinfo->p2p_dir = usb_conv_info->direction;
switch (pinfo->p2p_dir) {
@@ -143,11 +141,11 @@ dissect_hci_usb(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
break;
}
- session_id = usb_data->bus_id << 16 | usb_data->device_address << 8 | ((pinfo->p2p_dir == P2P_DIR_RECV) ? 1 : 0 ) << 7 | usb_data->endpoint;
+ session_id = usb_conv_info->bus_id << 16 | usb_conv_info->device_address << 8 | ((pinfo->p2p_dir == P2P_DIR_RECV) ? 1 : 0 ) << 7 | usb_conv_info->endpoint;
hci_data = (hci_data_t *) wmem_new(wmem_packet_scope(), hci_data_t);
hci_data->interface_id = HCI_INTERFACE_USB;
- hci_data->adapter_id = usb_data->bus_id << 8 | usb_data->device_address;
+ hci_data->adapter_id = usb_conv_info->bus_id << 8 | usb_conv_info->device_address;
hci_data->chandle_to_bdaddr_table = chandle_to_bdaddr_table;
hci_data->bdaddr_to_name_table = bdaddr_to_name_table;
hci_data->localhost_bdaddr = localhost_bdaddr;
@@ -156,7 +154,7 @@ dissect_hci_usb(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
pinfo->ptype = PT_BLUETOOTH;
next_tvb = tvb_new_subset_remaining(tvb, offset);
- if (!pinfo->fd->flags.visited && usb_data->endpoint <= 0x02) {
+ if (!pinfo->fd->flags.visited && usb_conv_info->endpoint <= 0x02) {
fragment_info_t *fragment_info;
fragment_info = (fragment_info_t *) wmem_tree_lookup32(fragment_info_table, session_id);
@@ -169,12 +167,17 @@ dissect_hci_usb(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
}
if (fragment_info->fragment_id == 0) {
- if (usb_data->endpoint == 0x00) {
+ switch(usb_conv_info->endpoint)
+ {
+ case 0:
fragment_info->remaining_length = tvb_get_guint8(tvb, offset + 2) + 3;
- } else if (usb_data->endpoint == 0x01) {
+ break;
+ case 1:
fragment_info->remaining_length = tvb_get_guint8(tvb, offset + 1) + 2;
- } else if (usb_data->endpoint == 0x02) {
+ break;
+ case 2:
fragment_info->remaining_length = tvb_get_letohs(tvb, offset + 2) + 4;
+ break;
}
}
@@ -206,21 +209,26 @@ dissect_hci_usb(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
NULL, ttree);
}
- if (usb_data->endpoint == 0x00) {
+ switch(usb_conv_info->endpoint)
+ {
+ case 0:
call_dissector_with_data(bthci_cmd_handle, next_tvb, pinfo, tree, hci_data);
- } else if (usb_data->endpoint == 0x01) {
+ break;
+ case 1:
call_dissector_with_data(bthci_evt_handle, next_tvb, pinfo, tree, hci_data);
- } else if (usb_data->endpoint == 0x02) {
+ break;
+ case 2:
call_dissector_with_data(bthci_acl_handle, next_tvb, pinfo, tree, hci_data);
+ break;
}
} else {
pitem = proto_tree_add_item(ttree, hf_bthci_usb_packet_unknown_fragment, tvb, offset, -1, ENC_NA);
PROTO_ITEM_SET_GENERATED(pitem);
}
- if (usb_data->endpoint == 0x03) {
+ if (usb_conv_info->endpoint == 0x03) {
call_dissector_with_data(bthci_sco_handle, next_tvb, pinfo, tree, hci_data);
- } else if (usb_data->endpoint > 0x03) {
+ } else if (usb_conv_info->endpoint > 0x03) {
proto_tree_add_item(ttree, hf_bthci_usb_data, tvb, offset, -1, ENC_NA);
}
diff --git a/epan/dissectors/packet-mbim.c b/epan/dissectors/packet-mbim.c
index e959bec4fe..f1c9e9662c 100644
--- a/epan/dissectors/packet-mbim.c
+++ b/epan/dissectors/packet-mbim.c
@@ -4609,16 +4609,15 @@ dissect_mbim_bulk(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *dat
static gboolean
dissect_mbim_bulk_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
{
- usb_conv_info_t *usb_conv_info;
+ usb_conv_info_t *usb_conv_info = (usb_conv_info_t *)data;
- usb_conv_info = (usb_conv_info_t *)pinfo->usb_conv_info;
- if (usb_conv_info &&
- (usb_conv_info->interfaceClass != IF_CLASS_CDC_DATA) &&
- (usb_conv_info->interfaceClass != IF_CLASS_UNKNOWN)) {
+ if ((usb_conv_info == NULL) ||
+ ((usb_conv_info->interfaceClass != IF_CLASS_CDC_DATA) &&
+ (usb_conv_info->interfaceClass != IF_CLASS_UNKNOWN))) {
return FALSE;
}
- if (dissect_mbim_bulk(tvb, pinfo, tree, data)) {
+ if (dissect_mbim_bulk(tvb, pinfo, tree, usb_conv_info)) {
return TRUE;
}
return FALSE;
diff --git a/epan/dissectors/packet-rfid-pn532-hci.c b/epan/dissectors/packet-rfid-pn532-hci.c
index 3f5d528038..d1218291f3 100644
--- a/epan/dissectors/packet-rfid-pn532-hci.c
+++ b/epan/dissectors/packet-rfid-pn532-hci.c
@@ -76,10 +76,9 @@ dissect_pn532_hci(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *dat
guint16 packet_code;
guint16 length;
guint8 checksum;
- usb_data_t *usb_data;
+ usb_conv_info_t *usb_conv_info = (usb_conv_info_t *)data;
- usb_data = (usb_data_t *) data;
- DISSECTOR_ASSERT(usb_data);
+ DISSECTOR_ASSERT(usb_conv_info);
length = tvb_length_remaining(tvb, offset);
if (length < 6) return offset;
@@ -136,7 +135,7 @@ dissect_pn532_hci(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *dat
offset += 1;
next_tvb = tvb_new_subset(tvb, offset, length, length);
- call_dissector_with_data(pn532_handle, next_tvb, pinfo, tree, usb_data);
+ call_dissector_with_data(pn532_handle, next_tvb, pinfo, tree, usb_conv_info);
offset += length;
proto_tree_add_item(main_tree, hf_data_checksum, tvb, offset, 1, ENC_NA);
@@ -163,7 +162,7 @@ dissect_pn532_hci(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *dat
offset += 1;
next_tvb = tvb_new_subset(tvb, offset, length, length);
- call_dissector_with_data(pn532_handle, next_tvb, pinfo, tree, usb_data);
+ call_dissector_with_data(pn532_handle, next_tvb, pinfo, tree, usb_conv_info);
offset += length;
proto_tree_add_item(main_tree, hf_data_checksum, tvb, offset, 1, ENC_NA);
diff --git a/epan/dissectors/packet-rfid-pn532.c b/epan/dissectors/packet-rfid-pn532.c
index 4936a33163..2fe0972d37 100644
--- a/epan/dissectors/packet-rfid-pn532.c
+++ b/epan/dissectors/packet-rfid-pn532.c
@@ -633,7 +633,7 @@ dissect_pn532(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
tvbuff_t *next_tvb;
gint offset = 0;
command_data_t *command_data = NULL;
- usb_data_t *usb_data;
+ usb_conv_info_t *usb_conv_info = (usb_conv_info_t *)data;
wmem_tree_key_t key[5];
guint32 bus_id;
guint32 device_address;
@@ -657,12 +657,11 @@ dissect_pn532(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
col_set_str(pinfo->cinfo, COL_INFO, val_to_str_ext_const(cmd, &pn532_commands_ext, "Unknown command"));
- usb_data = (usb_data_t *) data;
- DISSECTOR_ASSERT(usb_data);
+ DISSECTOR_ASSERT(usb_conv_info);
- bus_id = usb_data->bus_id;
- device_address = usb_data->device_address;
- endpoint = usb_data->endpoint;
+ bus_id = usb_conv_info->bus_id;
+ device_address = usb_conv_info->device_address;
+ endpoint = usb_conv_info->endpoint;
k_bus_id = bus_id;
k_device_address = device_address;
diff --git a/epan/dissectors/packet-tfp.c b/epan/dissectors/packet-tfp.c
index 599fcf4029..e8b50d85c8 100644
--- a/epan/dissectors/packet-tfp.c
+++ b/epan/dissectors/packet-tfp.c
@@ -226,14 +226,9 @@ dissect_tfp_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
byte_offset += byte_count_tfp_flags;
- proto_tree_add_item(tfp_tree,
- hf_tfp_payload,
- tvb,
- byte_offset,
- -1,
- ENC_NA);
+ proto_tree_add_item(tfp_tree, hf_tfp_payload, tvb, byte_offset, -1, ENC_NA);
}
- }
+ }
}
/* dissector function for dissecting TCP payloads */
@@ -241,32 +236,27 @@ static void
dissect_tfp_tcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
col_set_str(pinfo->cinfo, COL_PROTOCOL, "TFP over TCP");
- col_clear(pinfo->cinfo, COL_INFO);
+ col_clear(pinfo->cinfo, COL_INFO);
dissect_tfp_common(tvb, pinfo, tree);
}
/* dissector function for dissecting USB payloads */
-static void
-dissect_tfp_usb(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+static gboolean
+dissect_tfp_bulk_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
{
- usb_conv_info_t *usb_conv_info;
- usb_conv_info = (usb_conv_info_t *)pinfo->usb_conv_info;
+ usb_conv_info_t *usb_conv_info = (usb_conv_info_t *)data;
- if (usb_conv_info->deviceVendor == tfp_USB_VENDOR_ID) {
+ if ((usb_conv_info != NULL) &&
+ (usb_conv_info->deviceVendor == tfp_USB_VENDOR_ID) &&
+ (usb_conv_info->deviceProduct == tfp_USB_PRODUCT_ID)) {
col_set_str(pinfo->cinfo, COL_PROTOCOL, "TFP over USB");
- if (usb_conv_info->deviceProduct == tfp_USB_PRODUCT_ID) {
- col_clear(pinfo->cinfo, COL_INFO);
- dissect_tfp_common(tvb, pinfo, tree);
- }
- else {
- /* ToDo? Display "Unknown Product" ?? */
- }
- return;
- }
- else {
- return; /* Not tfp_USB_VENDOR_ID */
+ col_clear(pinfo->cinfo, COL_INFO);
+ dissect_tfp_common(tvb, pinfo, tree);
+ return TRUE;
}
+
+ return FALSE;
}
/* protocol register function */
@@ -418,15 +408,12 @@ proto_register_tfp(void)
void
proto_reg_handoff_tfp(void) {
- static dissector_handle_t
- tfp_handle_tcp,
- tfp_handle_usb;
+ dissector_handle_t tfp_handle_tcp;
tfp_handle_tcp = create_dissector_handle(dissect_tfp_tcp, proto_tfp);
- tfp_handle_usb = create_dissector_handle(dissect_tfp_usb, proto_tfp);
dissector_add_uint("tcp.port", tfp_PORT, tfp_handle_tcp);
- dissector_add_uint("usb.bulk", IF_CLASS_VENDOR_SPECIFIC, tfp_handle_usb);
+ heur_dissector_add("usb.bulk", dissect_tfp_bulk_heur, proto_tfp);
}
/*
diff --git a/epan/dissectors/packet-usb-audio.c b/epan/dissectors/packet-usb-audio.c
index bd57a79011..54ca0ca493 100644
--- a/epan/dissectors/packet-usb-audio.c
+++ b/epan/dissectors/packet-usb-audio.c
@@ -275,16 +275,14 @@ dissect_usb_audio_descriptor(tvbuff_t *tvb, packet_info *pinfo _U_,
/* dissector for usb midi bulk data */
-static void
-dissect_usb_audio_bulk(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
+static int
+dissect_usb_audio_bulk(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* data)
{
- usb_conv_info_t *usb_conv_info;
+ usb_conv_info_t *usb_conv_info = (usb_conv_info_t *)data;
proto_tree *tree = NULL;
guint offset;
guint length = tvb_length(tvb);
- usb_conv_info = (usb_conv_info_t *)pinfo->usb_conv_info;
-
col_set_str(pinfo->cinfo, COL_PROTOCOL, "USBAUDIO");
if (parent_tree)
@@ -311,6 +309,8 @@ dissect_usb_audio_bulk(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tre
offset = 0;
proto_tree_add_expert(tree, pinfo, &ei_usb_audio_undecoded, tvb, offset, length - offset);
}
+
+ return tvb_length(tvb);
}
static void
@@ -391,7 +391,7 @@ proto_register_usb_audio(void)
expert_register_field_array(expert_usb_audio, ei, array_length(ei));
register_init_routine(&midi_data_reassemble_init);
- register_dissector("usbaudio", dissect_usb_audio_bulk, proto_usb_audio);
+ new_register_dissector("usbaudio", dissect_usb_audio_bulk, proto_usb_audio);
}
void
diff --git a/epan/dissectors/packet-usb-ccid.c b/epan/dissectors/packet-usb-ccid.c
index cf25932d21..bd528bb3e0 100644
--- a/epan/dissectors/packet-usb-ccid.c
+++ b/epan/dissectors/packet-usb-ccid.c
@@ -348,9 +348,9 @@ dissect_ccid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
proto_tree *ccid_tree;
guint8 cmd;
tvbuff_t *next_tvb;
- usb_data_t *usb_data = (usb_data_t *) data;
+ usb_conv_info_t *usb_conv_info = (usb_conv_info_t *)data;
- DISSECTOR_ASSERT(usb_data);
+ DISSECTOR_ASSERT(usb_conv_info);
col_set_str(pinfo->cinfo, COL_PROTOCOL, "USBCCID");
col_set_str(pinfo->cinfo, COL_INFO, "CCID Packet");
@@ -445,7 +445,7 @@ dissect_ccid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
if (tvb_get_guint8(tvb, 15) == 0xD4) {
/* Skip the 5 byte ACS Pseudo-Header */
- call_dissector_with_data(sub_handles[sub_selected], tvb_new_subset_remaining(tvb, 15), pinfo, tree, usb_data);
+ call_dissector_with_data(sub_handles[sub_selected], tvb_new_subset_remaining(tvb, 15), pinfo, tree, usb_conv_info);
}
else {
@@ -496,7 +496,7 @@ dissect_ccid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
/* Strip the ISO 7816 status word at the end, like we do in the PN532 dissector for FeliCa payloads... */
next_tvb= tvb_new_subset(tvb, 10, (tvb_get_guint8(tvb, 1) - 2), (tvb_get_guint8(tvb, 1) - 2));
- call_dissector_with_data(sub_handles[SUB_PN532_ACS_PSEUDO_APDU], next_tvb, pinfo, tree, usb_data);
+ call_dissector_with_data(sub_handles[SUB_PN532_ACS_PSEUDO_APDU], next_tvb, pinfo, tree, usb_conv_info);
}
/* Try to dissect responses to GSM SIM packets */
diff --git a/epan/dissectors/packet-usb-com.c b/epan/dissectors/packet-usb-com.c
index c95ed8695f..a6ff849ff6 100644
--- a/epan/dissectors/packet-usb-com.c
+++ b/epan/dissectors/packet-usb-com.c
@@ -198,7 +198,7 @@ dissect_usb_com_descriptor(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
break;
case 0x1b:
case 0x1c:
- offset = call_dissector_only(mbim_descriptor_handle, tvb, pinfo, subtree, NULL);
+ offset = call_dissector_only(mbim_descriptor_handle, tvb, pinfo, subtree, data);
break;
default:
break;
@@ -216,15 +216,13 @@ dissect_usb_com_descriptor(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
}
static int
-dissect_usb_com_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
+dissect_usb_com_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
{
- usb_conv_info_t *usb_conv_info;
+ usb_conv_info_t *usb_conv_info = (usb_conv_info_t *)data;
proto_tree *subtree;
proto_item *ti;
gint offset = 0;
- usb_conv_info = (usb_conv_info_t *)pinfo->usb_conv_info;
-
col_set_str(pinfo->cinfo, COL_PROTOCOL, "USBCOM");
ti = proto_tree_add_item(tree, proto_usb_com, tvb, 0, -1, ENC_NA);
@@ -254,9 +252,7 @@ dissect_usb_com_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, voi
static int
dissect_usb_com_bulk(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
{
- usb_conv_info_t *usb_conv_info;
-
- usb_conv_info = (usb_conv_info_t *)pinfo->usb_conv_info;
+ usb_conv_info_t *usb_conv_info = (usb_conv_info_t *)data;
if (usb_conv_info) {
switch (usb_conv_info->interfaceProtocol)
diff --git a/epan/dissectors/packet-usb-hid.c b/epan/dissectors/packet-usb-hid.c
index 3a9bef7321..f30bb0fff3 100644
--- a/epan/dissectors/packet-usb-hid.c
+++ b/epan/dissectors/packet-usb-hid.c
@@ -766,20 +766,17 @@ static const value_string usb_hid_report_type_vals[] = {
* and FALSE otherwise.
*/
static gint
-dissect_usb_hid_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
+dissect_usb_hid_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
{
gboolean is_request;
- usb_conv_info_t *usb_conv_info;
- usb_trans_info_t *usb_trans_info;
+ usb_conv_info_t *usb_conv_info = (usb_conv_info_t *)data;
+ usb_trans_info_t *usb_trans_info = usb_conv_info->usb_trans_info;
int offset = 0;
usb_setup_dissector dissector;
const usb_setup_dissector_table_t *tmp;
is_request = (pinfo->srcport==NO_ENDPOINT);
- usb_conv_info = (usb_conv_info_t *)pinfo->usb_conv_info;
- usb_trans_info = usb_conv_info->usb_trans_info;
-
/* See if we can find a class specific dissector for this request */
dissector = NULL;
diff --git a/epan/dissectors/packet-usb-hub.c b/epan/dissectors/packet-usb-hub.c
index 033c861394..c1540d98bc 100644
--- a/epan/dissectors/packet-usb-hub.c
+++ b/epan/dissectors/packet-usb-hub.c
@@ -609,20 +609,17 @@ static const usb_setup_dissector_table_t setup_dissectors[] = {
* and FALSE otherwise.
*/
static gint
-dissect_usb_hub_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
+dissect_usb_hub_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
{
gboolean is_request;
- usb_conv_info_t *usb_conv_info;
- usb_trans_info_t *usb_trans_info;
+ usb_conv_info_t *usb_conv_info = (usb_conv_info_t *)data;
+ usb_trans_info_t *usb_trans_info = usb_conv_info->usb_trans_info;
int offset = 0;
usb_setup_dissector dissector;
const usb_setup_dissector_table_t *tmp;
is_request = (pinfo->srcport==NO_ENDPOINT);
- usb_conv_info = (usb_conv_info_t *)pinfo->usb_conv_info;
- usb_trans_info = usb_conv_info->usb_trans_info;
-
/* See if we can find a class specific dissector for this request */
dissector = NULL;
diff --git a/epan/dissectors/packet-usb-masstorage.c b/epan/dissectors/packet-usb-masstorage.c
index 9df6ecda6a..9afa7a7ecf 100644
--- a/epan/dissectors/packet-usb-masstorage.c
+++ b/epan/dissectors/packet-usb-masstorage.c
@@ -127,24 +127,19 @@ static const value_string setup_request_names_vals[] = {
* and FALSE othervise.
*/
static gint
-dissect_usb_ms_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
+dissect_usb_ms_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
{
gboolean is_request;
- usb_conv_info_t *usb_conv_info;
- usb_trans_info_t *usb_trans_info;
+ usb_conv_info_t *usb_conv_info = (usb_conv_info_t *)data;
+ usb_trans_info_t *usb_trans_info = usb_conv_info->usb_trans_info;
int offset=0;
- usb_setup_dissector dissector;
+ usb_setup_dissector dissector = NULL;
const usb_setup_dissector_table_t *tmp;
is_request=(pinfo->srcport==NO_ENDPOINT);
- usb_conv_info=(usb_conv_info_t *)pinfo->usb_conv_info;
- usb_trans_info=usb_conv_info->usb_trans_info;
-
-
/* See if we can find a class specific dissector for this request */
- dissector=NULL;
for(tmp=setup_dissectors;tmp->dissector;tmp++){
if (tmp->request == usb_trans_info->setup.request){
dissector=tmp->dissector;
@@ -176,10 +171,10 @@ dissect_usb_ms_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void
/* dissector for mass storage bulk data */
-static void
-dissect_usb_ms_bulk(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
+static int
+dissect_usb_ms_bulk(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* data)
{
- usb_conv_info_t *usb_conv_info;
+ usb_conv_info_t *usb_conv_info = (usb_conv_info_t *)data;
usb_ms_conv_info_t *usb_ms_conv_info;
proto_tree *tree=NULL;
guint32 signature=0;
@@ -188,7 +183,6 @@ dissect_usb_ms_bulk(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
itl_nexus_t *itl;
itlq_nexus_t *itlq;
- usb_conv_info=(usb_conv_info_t *)pinfo->usb_conv_info;
/* verify that we do have a usb_ms_conv_info */
usb_ms_conv_info=(usb_ms_conv_info_t *)usb_conv_info->class_data;
if(!usb_ms_conv_info){
@@ -295,7 +289,7 @@ dissect_usb_ms_bulk(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
cdb_tvb=tvb_new_subset(tvb, offset, cdblen, cdbrlen);
dissect_scsi_cdb(cdb_tvb, pinfo, parent_tree, SCSI_DEV_UNKNOWN, itlq, itl);
}
- return;
+ return tvb_length(tvb);
}
@@ -324,13 +318,13 @@ dissect_usb_ms_bulk(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
itlq=(itlq_nexus_t *)wmem_tree_lookup32_le(usb_ms_conv_info->itlq, pinfo->fd->num);
if(!itlq){
- return;
+ return tvb_length(tvb);
}
itlq->last_exchange_frame=pinfo->fd->num;
itl=(itl_nexus_t *)wmem_tree_lookup32(usb_ms_conv_info->itl, itlq->lun);
if(!itl){
- return;
+ return tvb_length(tvb);
}
if(!status){
@@ -339,7 +333,7 @@ dissect_usb_ms_bulk(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
/* just send "check condition" */
dissect_scsi_rsp(tvb, pinfo, parent_tree, itlq, itl, 0x02);
}
- return;
+ return tvb_length(tvb);
}
/*
@@ -347,20 +341,20 @@ dissect_usb_ms_bulk(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
*/
itlq=(itlq_nexus_t *)wmem_tree_lookup32_le(usb_ms_conv_info->itlq, pinfo->fd->num);
if(!itlq){
- return;
+ return tvb_length(tvb);
}
itl=(itl_nexus_t *)wmem_tree_lookup32(usb_ms_conv_info->itl, itlq->lun);
if(!itl){
- return;
+ return tvb_length(tvb);
}
dissect_scsi_payload(tvb, pinfo, parent_tree, is_request, itlq, itl, 0);
-
+ return tvb_length(tvb);
}
static gboolean
-dissect_usb_ms_bulk_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
+dissect_usb_ms_bulk_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
{
const gchar usbc[] = {0x55, 0x53, 0x42, 0x43};
const gchar usbs[] = {0x55, 0x53, 0x42, 0x53};
@@ -369,7 +363,7 @@ dissect_usb_ms_bulk_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, vo
if (tvb_memeql(tvb, 0, usbc, sizeof(usbc)) == 0 ||
tvb_memeql(tvb, 0, usbs, sizeof(usbs)) == 0) {
- dissect_usb_ms_bulk(tvb, pinfo, tree);
+ dissect_usb_ms_bulk(tvb, pinfo, tree, data);
return TRUE;
}
@@ -447,7 +441,7 @@ proto_register_usb_ms(void)
proto_register_field_array(proto_usb_ms, hf, array_length(hf));
proto_register_subtree_array(usb_ms_subtrees, array_length(usb_ms_subtrees));
- register_dissector("usbms", dissect_usb_ms_bulk, proto_usb_ms);
+ new_register_dissector("usbms", dissect_usb_ms_bulk, proto_usb_ms);
}
void
diff --git a/epan/dissectors/packet-usb-video.c b/epan/dissectors/packet-usb-video.c
index 355db03619..33f82c2150 100644
--- a/epan/dissectors/packet-usb-video.c
+++ b/epan/dissectors/packet-usb-video.c
@@ -891,7 +891,7 @@ dissect_usb_video_extension_unit(proto_tree *tree, tvbuff_t *tvb, int offset)
*/
static int
dissect_usb_video_control_interface_descriptor(proto_tree *parent_tree, tvbuff_t *tvb,
- guint8 descriptor_len, packet_info *pinfo)
+ guint8 descriptor_len, packet_info *pinfo, usb_conv_info_t *usb_conv_info)
{
video_conv_info_t *video_conv_info = NULL;
video_entity_t *entity = NULL;
@@ -1020,14 +1020,8 @@ dissect_usb_video_control_interface_descriptor(proto_tree *parent_tree, tvbuff_t
if (entity_id != 0)
proto_item_append_text(item, " (Entity %d)", entity_id);
- if (subtype != VC_HEADER && pinfo->usb_conv_info)
+ if (subtype != VC_HEADER && usb_conv_info)
{
- /* Remember the entity ID / type for GET/SET transactions */
- usb_conv_info_t* usb_conv_info;
-
- /* This is the usb_conv_info of the CONTROL endpoint */
- usb_conv_info = (usb_conv_info_t*) pinfo->usb_conv_info;
-
/* Switch to the usb_conv_info of the Video Control interface */
usb_conv_info = get_usb_iface_conv_info(pinfo, usb_conv_info->interfaceNum);
video_conv_info = (video_conv_info_t *)usb_conv_info->class_data;
@@ -1470,13 +1464,13 @@ dissect_usb_video_endpoint_descriptor(proto_tree *parent_tree, tvbuff_t *tvb,
* @return >0 amount of data in the descriptor
*/
static int
-dissect_usb_vid_descriptor(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
- void *data _U_)
+dissect_usb_vid_descriptor(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
{
int offset = 0;
guint8 descriptor_len;
guint8 descriptor_type;
gint bytes_available;
+ usb_conv_info_t *usb_conv_info = (usb_conv_info_t *)data;
tvbuff_t *desc_tvb;
@@ -1493,14 +1487,11 @@ dissect_usb_vid_descriptor(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
}
else if (descriptor_type == CS_INTERFACE)
{
- usb_conv_info_t *usb_conv_info;
-
- usb_conv_info = (usb_conv_info_t *)pinfo->usb_conv_info;
if (usb_conv_info->interfaceSubclass == SC_VIDEOCONTROL)
{
offset = dissect_usb_video_control_interface_descriptor(tree, desc_tvb,
descriptor_len,
- pinfo);
+ pinfo, usb_conv_info);
}
else if (usb_conv_info->interfaceSubclass == SC_VIDEOSTREAMING)
{
@@ -1997,22 +1988,16 @@ static const value_string setup_request_names_vals[] = {
* @return >0 amount of data in the descriptor
*/
static int
-dissect_usb_vid_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
+dissect_usb_vid_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
{
- gboolean is_request;
- usb_conv_info_t *usb_conv_info;
- usb_trans_info_t *usb_trans_info;
+ gboolean is_request = (pinfo->srcport == NO_ENDPOINT);
+ usb_conv_info_t *usb_conv_info = (usb_conv_info_t *)data;
+ usb_trans_info_t *usb_trans_info = usb_conv_info->usb_trans_info;
int offset = 0;
- usb_setup_dissector dissector;
+ usb_setup_dissector dissector = NULL;
const usb_setup_dissector_table_t *tmp;
- is_request = (pinfo->srcport == NO_ENDPOINT);
-
- usb_conv_info = (usb_conv_info_t *)pinfo->usb_conv_info;
- usb_trans_info = usb_conv_info->usb_trans_info;
-
/* See if we can find a class specific dissector for this request */
- dissector = NULL;
for (tmp=setup_dissectors; tmp->dissector; tmp++)
{
if (tmp->request == usb_trans_info->setup.request)
@@ -2054,13 +2039,13 @@ dissect_usb_vid_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, voi
* @return >0 amount of data in the descriptor
*/
static int
-dissect_usb_vid_interrupt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
+dissect_usb_vid_interrupt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
{
usb_conv_info_t *usb_conv_info;
gint bytes_available;
int offset = 0;
- usb_conv_info = (usb_conv_info_t *)pinfo->usb_conv_info;
+ usb_conv_info = (usb_conv_info_t *)data;
bytes_available = tvb_length_remaining(tvb, offset);
col_set_str(pinfo->cinfo, COL_PROTOCOL, "USBVIDEO");
diff --git a/epan/dissectors/packet-usb.c b/epan/dissectors/packet-usb.c
index 14b24cd654..2c15e6a7d8 100644
--- a/epan/dissectors/packet-usb.c
+++ b/epan/dissectors/packet-usb.c
@@ -1124,8 +1124,7 @@ dissect_usb_setup_clear_feature_request(packet_info *pinfo _U_, proto_tree *tree
tvbuff_t *tvb, int offset,
usb_trans_info_t *usb_trans_info _U_,
usb_conv_info_t *usb_conv_info _U_,
- guint bus_id _U_, guint device_address _U_,
- usb_data_t *usb_data _U_)
+ guint bus_id _U_, guint device_address _U_)
{
/* feature selector */
proto_tree_add_item(tree, hf_usb_wFeatureSelector, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -1148,8 +1147,7 @@ dissect_usb_setup_clear_feature_response(packet_info *pinfo _U_, proto_tree *tre
tvbuff_t *tvb _U_, int offset,
usb_trans_info_t *usb_trans_info _U_,
usb_conv_info_t *usb_conv_info _U_,
- guint bus_id _U_, guint device_address _U_,
- usb_data_t *usb_data _U_)
+ guint bus_id _U_, guint device_address _U_)
{
return offset;
}
@@ -1167,8 +1165,7 @@ dissect_usb_setup_get_configuration_response(packet_info *pinfo _U_, proto_tree
tvbuff_t *tvb _U_, int offset,
usb_trans_info_t *usb_trans_info _U_,
usb_conv_info_t *usb_conv_info _U_,
- guint bus_id _U_, guint device_address _U_,
- usb_data_t *usb_data _U_)
+ guint bus_id _U_, guint device_address _U_)
{
proto_tree_add_item(tree, hf_usb_bConfigurationValue, tvb, offset, 1, ENC_LITTLE_ENDIAN);
offset += 1;
@@ -1299,7 +1296,7 @@ static int
dissect_usb_device_descriptor(packet_info *pinfo, proto_tree *parent_tree,
tvbuff_t *tvb, int offset,
usb_trans_info_t *usb_trans_info _U_,
- guint bus_id, guint device_address)
+ guint bus_id, guint device_address, usb_conv_info_t *usb_conv_info)
{
proto_item *item = NULL;
proto_tree *tree = NULL;
@@ -1310,7 +1307,6 @@ dissect_usb_device_descriptor(packet_info *pinfo, proto_tree *parent_tree,
guint16 vendor_id;
guint32 product;
guint16 product_id;
- usb_conv_info_t *usb_conv_info;
guint8 *field_description;
gint field_description_length;
header_field_info *hfi;
@@ -1320,8 +1316,6 @@ dissect_usb_device_descriptor(packet_info *pinfo, proto_tree *parent_tree,
tree = proto_item_add_subtree(item, ett_descriptor_device);
}
- usb_conv_info=(usb_conv_info_t *)pinfo->usb_conv_info;
-
dissect_usb_descriptor_header(tree, tvb, offset, NULL);
offset += 2;
@@ -1834,7 +1828,7 @@ static int
dissect_usb_configuration_descriptor(packet_info *pinfo _U_, proto_tree *parent_tree,
tvbuff_t *tvb, int offset,
usb_trans_info_t *usb_trans_info,
- usb_conv_info_t *usb_conv_info, usb_data_t *usb_data)
+ usb_conv_info_t *usb_conv_info)
{
proto_item *item = NULL;
proto_tree *tree = NULL;
@@ -1940,7 +1934,7 @@ dissect_usb_configuration_descriptor(packet_info *pinfo _U_, proto_tree *parent_
break;
default:
next_tvb = tvb_new_subset(tvb, offset, next_len, next_len);
- if (dissector_try_uint_new(usb_descriptor_dissector_table, usb_conv_info->interfaceClass, next_tvb, pinfo, parent_tree, TRUE, usb_data)) {
+ if (dissector_try_uint_new(usb_descriptor_dissector_table, usb_conv_info->interfaceClass, next_tvb, pinfo, parent_tree, TRUE, usb_conv_info)) {
offset += next_len;
} else {
offset = dissect_usb_unknown_descriptor(pinfo, parent_tree, tvb, offset, usb_trans_info, usb_conv_info);
@@ -1975,8 +1969,7 @@ dissect_usb_setup_get_descriptor_request(packet_info *pinfo, proto_tree *tree,
tvbuff_t *tvb, int offset,
usb_trans_info_t *usb_trans_info,
usb_conv_info_t *usb_conv_info _U_,
- guint bus_id _U_, guint device_address _U_,
- usb_data_t *usb_data _U_)
+ guint bus_id _U_, guint device_address _U_)
{
/* descriptor index */
proto_tree_add_item(tree, hf_usb_descriptor_index, tvb, offset, 1, ENC_LITTLE_ENDIAN);
@@ -2006,8 +1999,7 @@ dissect_usb_setup_get_descriptor_response(packet_info *pinfo, proto_tree *tree,
tvbuff_t *tvb, int offset,
usb_trans_info_t *usb_trans_info,
usb_conv_info_t *usb_conv_info,
- guint bus_id, guint device_address,
- usb_data_t *usb_data)
+ guint bus_id, guint device_address)
{
col_append_fstr(pinfo->cinfo, COL_INFO, " %s",
@@ -2015,10 +2007,10 @@ dissect_usb_setup_get_descriptor_response(packet_info *pinfo, proto_tree *tree,
switch(usb_trans_info->u.get_descriptor.type) {
case USB_DT_DEVICE:
- offset = dissect_usb_device_descriptor(pinfo, tree, tvb, offset, usb_trans_info, bus_id, device_address);
+ offset = dissect_usb_device_descriptor(pinfo, tree, tvb, offset, usb_trans_info, bus_id, device_address, usb_conv_info);
break;
case USB_DT_CONFIG:
- offset = dissect_usb_configuration_descriptor(pinfo, tree, tvb, offset, usb_trans_info, usb_conv_info, usb_data);
+ offset = dissect_usb_configuration_descriptor(pinfo, tree, tvb, offset, usb_trans_info, usb_conv_info);
break;
case USB_DT_STRING:
offset = dissect_usb_string_descriptor(pinfo, tree, tvb, offset, usb_trans_info, usb_conv_info);
@@ -2061,8 +2053,7 @@ dissect_usb_setup_get_interface_request(packet_info *pinfo _U_, proto_tree *tree
tvbuff_t *tvb, int offset,
usb_trans_info_t *usb_trans_info _U_,
usb_conv_info_t *usb_conv_info _U_,
- guint bus_id _U_, guint device_address _U_,
- usb_data_t *usb_data _U_)
+ guint bus_id _U_, guint device_address _U_)
{
/* zero */
proto_tree_add_item(tree, hf_usb_value, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -2084,8 +2075,7 @@ dissect_usb_setup_get_interface_response(packet_info *pinfo _U_, proto_tree *tre
tvbuff_t *tvb, int offset,
usb_trans_info_t *usb_trans_info _U_,
usb_conv_info_t *usb_conv_info _U_,
- guint bus_id _U_, guint device_address _U_,
- usb_data_t *usb_data _U_)
+ guint bus_id _U_, guint device_address _U_)
{
/* alternate setting */
proto_tree_add_item(tree, hf_usb_bAlternateSetting, tvb, offset, 1, ENC_LITTLE_ENDIAN);
@@ -2107,8 +2097,7 @@ dissect_usb_setup_get_status_request(packet_info *pinfo _U_, proto_tree *tree,
tvbuff_t *tvb, int offset,
usb_trans_info_t *usb_trans_info _U_,
usb_conv_info_t *usb_conv_info _U_,
- guint bus_id _U_, guint device_address _U_,
- usb_data_t *usb_data _U_)
+ guint bus_id _U_, guint device_address _U_)
{
/* zero */
proto_tree_add_item(tree, hf_usb_value, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -2131,8 +2120,7 @@ dissect_usb_setup_get_status_response(packet_info *pinfo _U_, proto_tree *tree,
tvbuff_t *tvb, int offset,
usb_trans_info_t *usb_trans_info _U_,
usb_conv_info_t *usb_conv_info _U_,
- guint bus_id _U_, guint device_address _U_,
- usb_data_t *usb_data _U_)
+ guint bus_id _U_, guint device_address _U_)
{
/* status */
/* XXX - show bits */
@@ -2155,8 +2143,7 @@ dissect_usb_setup_set_address_request(packet_info *pinfo _U_, proto_tree *tree,
tvbuff_t *tvb, int offset,
usb_trans_info_t *usb_trans_info _U_,
usb_conv_info_t *usb_conv_info _U_,
- guint bus_id _U_, guint device_address _U_,
- usb_data_t *usb_data _U_)
+ guint bus_id _U_, guint device_address _U_)
{
/* device address */
proto_tree_add_item(tree, hf_usb_device_address, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -2178,8 +2165,7 @@ dissect_usb_setup_set_address_response(packet_info *pinfo _U_, proto_tree *tree
tvbuff_t *tvb _U_, int offset,
usb_trans_info_t *usb_trans_info _U_,
usb_conv_info_t *usb_conv_info _U_,
- guint bus_id _U_, guint device_address _U_,
- usb_data_t *usb_data _U_)
+ guint bus_id _U_, guint device_address _U_)
{
return offset;
}
@@ -2197,8 +2183,7 @@ dissect_usb_setup_set_configuration_request(packet_info *pinfo _U_, proto_tree *
tvbuff_t *tvb, int offset,
usb_trans_info_t *usb_trans_info _U_,
usb_conv_info_t *usb_conv_info _U_,
- guint bus_id _U_, guint device_address _U_,
- usb_data_t *usb_data _U_)
+ guint bus_id _U_, guint device_address _U_)
{
/* configuration value */
proto_tree_add_item(tree, hf_usb_bConfigurationValue, tvb, offset, 1, ENC_LITTLE_ENDIAN);
@@ -2220,8 +2205,7 @@ dissect_usb_setup_set_configuration_response(packet_info *pinfo _U_, proto_tree
tvbuff_t *tvb _U_, int offset,
usb_trans_info_t *usb_trans_info _U_,
usb_conv_info_t *usb_conv_info _U_,
- guint bus_id _U_, guint device_address _U_,
- usb_data_t *usb_data _U_)
+ guint bus_id _U_, guint device_address _U_)
{
return offset;
}
@@ -2239,8 +2223,7 @@ dissect_usb_setup_set_feature_request(packet_info *pinfo _U_, proto_tree *tree,
tvbuff_t *tvb, int offset,
usb_trans_info_t *usb_trans_info _U_,
usb_conv_info_t *usb_conv_info _U_,
- guint bus_id _U_, guint device_address _U_,
- usb_data_t *usb_data _U_)
+ guint bus_id _U_, guint device_address _U_)
{
/* feature selector */
proto_tree_add_item(tree, hf_usb_wFeatureSelector, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -2263,8 +2246,7 @@ dissect_usb_setup_set_feature_response(packet_info *pinfo _U_, proto_tree *tree
tvbuff_t *tvb _U_, int offset,
usb_trans_info_t *usb_trans_info _U_,
usb_conv_info_t *usb_conv_info _U_,
- guint bus_id _U_, guint device_address _U_,
- usb_data_t *usb_data _U_)
+ guint bus_id _U_, guint device_address _U_)
{
return offset;
}
@@ -2282,8 +2264,7 @@ dissect_usb_setup_set_interface_request(packet_info *pinfo _U_, proto_tree *tree
tvbuff_t *tvb, int offset,
usb_trans_info_t *usb_trans_info _U_,
usb_conv_info_t *usb_conv_info _U_,
- guint bus_id _U_, guint device_address _U_,
- usb_data_t *usb_data _U_)
+ guint bus_id _U_, guint device_address _U_)
{
/* alternate setting */
proto_tree_add_item(tree, hf_usb_bAlternateSetting, tvb, offset, 1, ENC_LITTLE_ENDIAN);
@@ -2305,8 +2286,7 @@ dissect_usb_setup_set_interface_response(packet_info *pinfo _U_, proto_tree *tre
tvbuff_t *tvb _U_, int offset,
usb_trans_info_t *usb_trans_info _U_,
usb_conv_info_t *usb_conv_info _U_,
- guint bus_id _U_, guint device_address _U_,
- usb_data_t *usb_data _U_)
+ guint bus_id _U_, guint device_address _U_)
{
return offset;
}
@@ -2324,8 +2304,7 @@ dissect_usb_setup_synch_frame_request(packet_info *pinfo _U_, proto_tree *tree,
tvbuff_t *tvb, int offset,
usb_trans_info_t *usb_trans_info _U_,
usb_conv_info_t *usb_conv_info _U_,
- guint bus_id _U_, guint device_address _U_,
- usb_data_t *usb_data _U_)
+ guint bus_id _U_, guint device_address _U_)
{
/* zero */
proto_tree_add_item(tree, hf_usb_value, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -2348,8 +2327,7 @@ dissect_usb_setup_synch_frame_response(packet_info *pinfo _U_, proto_tree *tree
tvbuff_t *tvb _U_, int offset,
usb_trans_info_t *usb_trans_info _U_,
usb_conv_info_t *usb_conv_info _U_,
- guint bus_id _U_, guint device_address _U_,
- usb_data_t *usb_data _U_)
+ guint bus_id _U_, guint device_address _U_)
{
/* frame number */
proto_tree_add_item(tree, hf_usb_wFrameNumber, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -2363,8 +2341,7 @@ typedef int (*usb_setup_dissector)(packet_info *pinfo, proto_tree *tree,
tvbuff_t *tvb, int offset,
usb_trans_info_t *usb_trans_info,
usb_conv_info_t *usb_conv_info,
- guint bus_id, guint device_address,
- usb_data_t *usb_data);
+ guint bus_id, guint device_address);
typedef struct _usb_setup_dissector_table_t {
guint8 request;
@@ -2647,7 +2624,6 @@ dissect_usb_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent,
usb_tap_data_t *tap_data;
guint bus_id = 0;
guint device_address = 0;
- usb_data_t *usb_data;
tvbuff_t *next_tvb = NULL;
col_set_str(pinfo->cinfo, COL_PROTOCOL, "USB");
@@ -2716,17 +2692,6 @@ dissect_usb_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent,
return;
}
- usb_data = wmem_new(wmem_file_scope(), usb_data_t);
- usb_data->bus_id = bus_id;
- usb_data->device_address = device_address;
- usb_data->endpoint = endpoint;
-
- if (endpoint_with_dir & URB_TRANSFER_IN) {
- usb_data->direction = P2P_DIR_RECV;
- } else {
- usb_data->direction = P2P_DIR_SENT;
- }
-
/* Set up addresses and ports. */
if (is_request) {
src_addr.device = 0xffffffff;
@@ -2751,8 +2716,16 @@ dissect_usb_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent,
conversation = get_usb_conversation(pinfo, &pinfo->src, &pinfo->dst, pinfo->srcport, pinfo->destport);
usb_conv_info = get_usb_conv_info(conversation);
- pinfo->usb_conv_info = usb_conv_info;
+ usb_conv_info->bus_id = bus_id;
+ usb_conv_info->device_address = device_address;
+ usb_conv_info->endpoint = endpoint;
+
+ if (endpoint_with_dir & URB_TRANSFER_IN) {
+ usb_conv_info->direction = P2P_DIR_RECV;
+ } else {
+ usb_conv_info->direction = P2P_DIR_SENT;
+ }
/* request/response matching so we can keep track of transaction specific
* data.
@@ -2835,12 +2808,11 @@ dissect_usb_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent,
}
if (tvb_reported_length_remaining(tvb, offset)) {
- pinfo->usb_conv_info = usb_conv_info;
next_tvb = tvb_new_subset_remaining(tvb, offset);
- if (try_heuristics && dissector_try_heuristic(heur_bulk_subdissector_list, next_tvb, pinfo, parent, NULL)) {
+ if (try_heuristics && dissector_try_heuristic(heur_bulk_subdissector_list, next_tvb, pinfo, parent, usb_conv_info)) {
return;
}
- else if (dissector_try_uint_new(usb_bulk_dissector_table, usb_conv_info->interfaceClass, next_tvb, pinfo, parent, TRUE, usb_data)) {
+ else if (dissector_try_uint_new(usb_bulk_dissector_table, usb_conv_info->interfaceClass, next_tvb, pinfo, parent, TRUE, usb_conv_info)) {
return;
}
}
@@ -2867,12 +2839,11 @@ dissect_usb_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent,
}
if (tvb_reported_length_remaining(tvb, offset)) {
- pinfo->usb_conv_info = usb_conv_info;
next_tvb = tvb_new_subset_remaining(tvb, offset);
- if (try_heuristics && dissector_try_heuristic(heur_interrupt_subdissector_list, next_tvb, pinfo, parent, NULL)) {
+ if (try_heuristics && dissector_try_heuristic(heur_interrupt_subdissector_list, next_tvb, pinfo, parent, usb_conv_info)) {
return;
}
- else if (dissector_try_uint_new(usb_interrupt_dissector_table, usb_conv_info->interfaceClass, next_tvb, pinfo, parent, TRUE, usb_data)) {
+ else if (dissector_try_uint_new(usb_interrupt_dissector_table, usb_conv_info->interfaceClass, next_tvb, pinfo, parent, TRUE, usb_conv_info)) {
return;
}
}
@@ -2933,7 +2904,7 @@ dissect_usb_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent,
if (dissector) {
offset = dissector(pinfo, setup_tree, tvb, offset, usb_trans_info,
- usb_conv_info, bus_id, device_address, usb_data);
+ usb_conv_info, bus_id, device_address);
} else {
proto_tree_add_item(setup_tree, hf_usb_value, tvb, offset, 2, ENC_LITTLE_ENDIAN);
offset += 2;
@@ -2950,7 +2921,6 @@ dissect_usb_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent,
guint8 interface_num = usb_trans_info->setup.wIndex & 0xff;
usb_conv_info = get_usb_iface_conv_info(pinfo, interface_num);
usb_conv_info->usb_trans_info = usb_trans_info;
- pinfo->usb_conv_info = usb_conv_info;
} else if (USB_RECIPIENT(usb_trans_info->setup.requesttype) == RQT_SETUP_RECIPIENT_ENDPOINT) {
static address endpoint_addr;
endpoint = usb_trans_info->setup.wIndex & 0x0f;
@@ -2961,7 +2931,6 @@ dissect_usb_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent,
conversation = get_usb_conversation(pinfo, &pinfo->src, &endpoint_addr, pinfo->srcport, dst_endpoint);
usb_conv_info = get_usb_conv_info(conversation);
usb_conv_info->usb_trans_info = usb_trans_info;
- pinfo->usb_conv_info = usb_conv_info;
}
tap_data->conv_info = usb_conv_info;
@@ -2973,10 +2942,10 @@ dissect_usb_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent,
/* Try to find a class specific dissector */
next_tvb = tvb_new_subset_remaining(tvb, offset);
- if (try_heuristics && dissector_try_heuristic(heur_control_subdissector_list, next_tvb, pinfo, setup_tree, NULL)) {
+ if (try_heuristics && dissector_try_heuristic(heur_control_subdissector_list, next_tvb, pinfo, setup_tree, usb_conv_info)) {
return;
}
- if (dissector_try_uint_new(usb_control_dissector_table, usb_conv_info->interfaceClass, next_tvb, pinfo, setup_tree, TRUE, usb_data)) {
+ if (dissector_try_uint_new(usb_control_dissector_table, usb_conv_info->interfaceClass, next_tvb, pinfo, setup_tree, TRUE, usb_conv_info)) {
return;
}
/* Else no class dissector, just display generic fields */
@@ -3018,10 +2987,10 @@ dissect_usb_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent,
if (tvb_reported_length_remaining(tvb, offset) != 0) {
next_tvb = tvb_new_subset_remaining(tvb, offset);
- if (try_heuristics && dissector_try_heuristic(heur_control_subdissector_list, next_tvb, pinfo, parent, NULL)) {
+ if (try_heuristics && dissector_try_heuristic(heur_control_subdissector_list, next_tvb, pinfo, parent, usb_conv_info)) {
return;
}
- if (dissector_try_uint_new(usb_control_dissector_table, usb_conv_info->interfaceClass, next_tvb, pinfo, parent, TRUE, usb_data)) {
+ if (dissector_try_uint_new(usb_control_dissector_table, usb_conv_info->interfaceClass, next_tvb, pinfo, parent, TRUE, usb_conv_info)) {
return;
}
}
@@ -3040,7 +3009,6 @@ dissect_usb_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent,
guint8 interface_num = usb_trans_info->setup.wIndex & 0xff;
usb_conv_info = get_usb_iface_conv_info(pinfo, interface_num);
usb_conv_info->usb_trans_info = usb_trans_info;
- pinfo->usb_conv_info = usb_conv_info;
} else if (USB_RECIPIENT(usb_trans_info->setup.requesttype) == RQT_SETUP_RECIPIENT_ENDPOINT) {
static address endpoint_addr;
endpoint = usb_trans_info->setup.wIndex & 0x0f;
@@ -3051,7 +3019,6 @@ dissect_usb_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent,
conversation = get_usb_conversation(pinfo, &endpoint_addr, &pinfo->dst, src_endpoint, pinfo->destport);
usb_conv_info = get_usb_conv_info(conversation);
usb_conv_info->usb_trans_info = usb_trans_info;
- pinfo->usb_conv_info = usb_conv_info;
}
}
}
@@ -3085,10 +3052,10 @@ dissect_usb_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent,
/* Try to find a class specific dissector */
next_tvb = tvb_new_subset_remaining(tvb, offset);
- if (try_heuristics && dissector_try_heuristic(heur_control_subdissector_list, next_tvb, pinfo, parent, NULL)) {
+ if (try_heuristics && dissector_try_heuristic(heur_control_subdissector_list, next_tvb, pinfo, parent, usb_conv_info)) {
return;
}
- if (dissector_try_uint_new(usb_control_dissector_table, usb_conv_info->interfaceClass, next_tvb, pinfo, parent, TRUE, usb_data)) {
+ if (dissector_try_uint_new(usb_control_dissector_table, usb_conv_info->interfaceClass, next_tvb, pinfo, parent, TRUE, usb_conv_info)) {
return;
}
@@ -3114,7 +3081,7 @@ dissect_usb_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent,
if (dissector) {
offset = dissector(pinfo, parent, tvb, offset, usb_conv_info->usb_trans_info,
- usb_conv_info, bus_id, device_address, usb_data);
+ usb_conv_info, bus_id, device_address);
} else {
if (tvb_reported_length_remaining(tvb, offset) != 0) {
proto_tree_add_text(parent, tvb, offset, -1, "CONTROL response data");
@@ -3394,7 +3361,7 @@ dissect_usb_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent,
next_tvb = tvb_new_subset_remaining(tvb, offset);
- if (!dissector_try_uint_new(device_to_dissector, (guint32) (bus_id << 8 | device_address), next_tvb, pinfo, parent, FALSE, usb_data)) {
+ if (!dissector_try_uint_new(device_to_dissector, (guint32) (bus_id << 8 | device_address), next_tvb, pinfo, parent, FALSE, usb_conv_info)) {
wmem_tree_key_t key[4];
guint32 k_frame_number;
guint32 k_device_address;
@@ -3417,7 +3384,7 @@ dissect_usb_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent,
device_protocol_data = (device_protocol_data_t *)wmem_tree_lookup32_array_le(device_to_protocol_table, key);
if (device_protocol_data && device_protocol_data->bus_id == bus_id &&
device_protocol_data->device_address == device_address &&
- dissector_try_uint_new(protocol_to_dissector, (guint32) device_protocol_data->protocol, next_tvb, pinfo, parent, FALSE, usb_data)) {
+ dissector_try_uint_new(protocol_to_dissector, (guint32) device_protocol_data->protocol, next_tvb, pinfo, parent, FALSE, usb_conv_info)) {
offset += tvb_length(next_tvb);
} else {
device_product_data_t *device_product_data;
@@ -3426,7 +3393,7 @@ dissect_usb_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent,
if (device_product_data && device_product_data->bus_id == bus_id &&
device_product_data->device_address == device_address &&
dissector_try_uint_new(product_to_dissector, (guint32) (device_product_data->vendor << 16 | device_product_data->product),
- next_tvb, pinfo, parent, FALSE, usb_data)) {
+ next_tvb, pinfo, parent, FALSE, usb_conv_info)) {
offset += tvb_length(next_tvb);
}
}
diff --git a/epan/dissectors/packet-usb.h b/epan/dissectors/packet-usb.h
index 16d52148be..19d0afbeab 100644
--- a/epan/dissectors/packet-usb.h
+++ b/epan/dissectors/packet-usb.h
@@ -79,14 +79,21 @@ typedef struct _usb_trans_info_t {
/* Conversation Structure
* there is one such structure for each device/endpoint conversation */
struct _usb_conv_info_t {
+ guint16 bus_id;
+ guint8 device_address;
+ guint8 endpoint;
+ gint direction;
+
guint16 interfaceClass; /* Interface Descriptor - class */
guint16 interfaceSubclass; /* Interface Descriptor - subclass */
guint16 interfaceProtocol; /* Interface Descriptor - protocol */
guint8 interfaceNum; /* Most recent interface number */
+
guint16 deviceVendor; /* Device Descriptor - USB Vendor ID */
guint32 deviceProduct; /* Device Descriptor - USB Product ID - MSBs only for encoding unknown */
wmem_tree_t *transactions;
usb_trans_info_t *usb_trans_info; /* pointer to the current transaction */
+
void *class_data; /* private class/id decode data */
};
@@ -98,12 +105,6 @@ typedef struct _usb_tap_data_t {
usb_trans_info_t *trans_info;
} usb_tap_data_t;
-typedef struct _usb_data_t {
- guint16 bus_id;
- guint8 device_address;
- guint8 endpoint;
- gint direction;
-} usb_data_t;
/* This is the endpoint number used for "no endpoint" or the fake endpoint
* for the host side since we need two endpoints to manage conversations
diff --git a/epan/packet_info.h b/epan/packet_info.h
index 0610bd6271..b4d48cb568 100644
--- a/epan/packet_info.h
+++ b/epan/packet_info.h
@@ -195,7 +195,6 @@ typedef struct _packet_info {
* MTP2_ANNEX_A_USED_UNKNOWN 2
*/
guint16 profinet_type; /**< the type of PROFINET packet (0: not a PROFINET packet) */
- void *usb_conv_info;
const char *dcerpc_procedure_name; /* Used by PIDL to store the name of the current dcerpc procedure */