diff options
author | Michael Mann <mmann78@netscape.net> | 2013-10-31 15:02:50 +0000 |
---|---|---|
committer | Michael Mann <mmann78@netscape.net> | 2013-10-31 15:02:50 +0000 |
commit | 35dd14348ee03957fc97c85a93a05f380d39caeb (patch) | |
tree | 0414e93defdd1cd4b1aae546d71786d07c3a17d8 /epan/dissectors/packet-usb-ccid.c | |
parent | 8baa7136050398efa6cbf1647429e30ccfd2a96f (diff) |
USB/PN532: Fix dissector to use new dissector *data instead of private_data. Bug 9333 (https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9333)
From Michal Labedzki
svn path=/trunk/; revision=53003
Diffstat (limited to 'epan/dissectors/packet-usb-ccid.c')
-rw-r--r-- | epan/dissectors/packet-usb-ccid.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/epan/dissectors/packet-usb-ccid.c b/epan/dissectors/packet-usb-ccid.c index 4098283cd5..cf25932d21 100644 --- a/epan/dissectors/packet-usb-ccid.c +++ b/epan/dissectors/packet-usb-ccid.c @@ -341,13 +341,16 @@ dissect_usb_ccid_descriptor(tvbuff_t *tvb, packet_info *pinfo _U_, } -static void -dissect_ccid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) +static gint +dissect_ccid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) { proto_item *item; proto_tree *ccid_tree; guint8 cmd; tvbuff_t *next_tvb; + usb_data_t *usb_data = (usb_data_t *) data; + + DISSECTOR_ASSERT(usb_data); col_set_str(pinfo->cinfo, COL_PROTOCOL, "USBCCID"); col_set_str(pinfo->cinfo, COL_INFO, "CCID Packet"); @@ -442,7 +445,7 @@ dissect_ccid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) if (tvb_get_guint8(tvb, 15) == 0xD4) { /* Skip the 5 byte ACS Pseudo-Header */ - call_dissector(sub_handles[sub_selected], tvb_new_subset_remaining(tvb, 15), pinfo, tree); + call_dissector_with_data(sub_handles[sub_selected], tvb_new_subset_remaining(tvb, 15), pinfo, tree, usb_data); } else { @@ -493,7 +496,7 @@ dissect_ccid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) /* 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(sub_handles[SUB_PN532_ACS_PSEUDO_APDU], next_tvb, pinfo, tree); + call_dissector_with_data(sub_handles[SUB_PN532_ACS_PSEUDO_APDU], next_tvb, pinfo, tree, usb_data); } /* Try to dissect responses to GSM SIM packets */ @@ -521,6 +524,9 @@ dissect_ccid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) proto_tree_add_item(ccid_tree, hf_ccid_bClockStatus, tvb, 9, 1, ENC_LITTLE_ENDIAN); break; } + + /* TODO: Try use "offset" instead of hardcoded constants */ + return tvb_length(tvb); } void @@ -665,7 +671,7 @@ proto_register_ccid(void) ccid_dissector_table = register_dissector_table("usbccid.payload", "USBCCID Payload", FT_UINT8, BASE_DEC); - register_dissector("usbccid", dissect_ccid, proto_ccid); + new_register_dissector("usbccid", dissect_ccid, proto_ccid); } /* Handler registration */ |