diff options
author | Sean O. Stalley <sean.stalley@intel.com> | 2014-06-03 14:46:47 -0700 |
---|---|---|
committer | Evan Huus <eapache@gmail.com> | 2014-06-04 00:29:42 +0000 |
commit | 88581a68e74ede6235c98f8d616c0fca5cd3a2e2 (patch) | |
tree | 856c03835d23c20aced09282baf0cdb5e7597838 | |
parent | c5de173edc09cceb7c351cf8b85a470ad597be17 (diff) |
Added usb_set_addr helper function
Added a helper function used to set the address fields for an urb.
The code functions the same as before, but is now more modular.
This change makes it easier for other dissectors to reuse the usb
addressing code (ex: MAUSB).
Change-Id: Idef3156a0fc9a9eda77ec7b2bbf3797b7a59e264
Reviewed-on: https://code.wireshark.org/review/1942
Reviewed-by: Evan Huus <eapache@gmail.com>
-rw-r--r-- | epan/dissectors/packet-usb.c | 52 |
1 files changed, 31 insertions, 21 deletions
diff --git a/epan/dissectors/packet-usb.c b/epan/dissectors/packet-usb.c index 4ace02bdc9..572179bf23 100644 --- a/epan/dissectors/packet-usb.c +++ b/epan/dissectors/packet-usb.c @@ -2653,6 +2653,35 @@ dissect_win32_usb_pseudo_header(tvbuff_t *tvb, packet_info *pinfo, proto_tree *t } } +/* Set the usb_address_t fields based on the direction of the urb */ +static void +usb_set_addr(packet_info *pinfo, usb_address_t *src_addr, + usb_address_t *dst_addr, guint16 device_address, int endpoint, + gboolean req) +{ + if (req) { + /* request */ + src_addr->device = 0xffffffff; + src_addr->endpoint = NO_ENDPOINT; + dst_addr->device = GUINT16_TO_LE(device_address); + dst_addr->endpoint = GUINT32_TO_LE(endpoint); + } else { + /* response */ + src_addr->device = GUINT16_TO_LE(device_address); + src_addr->endpoint = GUINT32_TO_LE(endpoint); + dst_addr->device = 0xffffffff; + dst_addr->endpoint = NO_ENDPOINT; + } + + SET_ADDRESS(&pinfo->net_src, AT_USB, USB_ADDR_LEN, (char *)src_addr); + SET_ADDRESS(&pinfo->src, AT_USB, USB_ADDR_LEN, (char *)src_addr); + SET_ADDRESS(&pinfo->net_dst, AT_USB, USB_ADDR_LEN, (char *)dst_addr); + SET_ADDRESS(&pinfo->dst, AT_USB, USB_ADDR_LEN, (char *)dst_addr); + pinfo->ptype = PT_USB; + pinfo->srcport = src_addr->endpoint; + pinfo->destport = dst_addr->endpoint; +} + static void dissect_usb_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent, guint8 header_info) @@ -2702,27 +2731,8 @@ dissect_usb_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent, else return; /* invalid USB pseudo header */ - if (urb_type == URB_SUBMIT) { - /* request */ - src_addr.device = 0xffffffff; - src_addr.endpoint = NO_ENDPOINT; - dst_addr.device = GUINT16_TO_LE(device_address); - dst_addr.endpoint = GUINT32_TO_LE(endpoint); - } else { - /* response */ - src_addr.device = GUINT16_TO_LE(device_address); - src_addr.endpoint = GUINT32_TO_LE(endpoint); - dst_addr.device = 0xffffffff; - dst_addr.endpoint = NO_ENDPOINT; - } - - SET_ADDRESS(&pinfo->net_src, AT_USB, USB_ADDR_LEN, (char *)&src_addr); - SET_ADDRESS(&pinfo->src, AT_USB, USB_ADDR_LEN, (char *)&src_addr); - SET_ADDRESS(&pinfo->net_dst, AT_USB, USB_ADDR_LEN, (char *)&dst_addr); - SET_ADDRESS(&pinfo->dst, AT_USB, USB_ADDR_LEN, (char *)&dst_addr); - pinfo->ptype = PT_USB; - pinfo->srcport = src_addr.endpoint; - pinfo->destport = dst_addr.endpoint; + usb_set_addr(pinfo, &src_addr, &dst_addr, device_address, endpoint, + (urb_type == URB_SUBMIT)); conversation = get_usb_conversation(pinfo, &pinfo->src, &pinfo->dst, pinfo->srcport, pinfo->destport); usb_conv_info = get_usb_conv_info(conversation); |