aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSean O. Stalley <sean.stalley@intel.com>2014-06-03 14:46:47 -0700
committerEvan Huus <eapache@gmail.com>2014-06-04 00:29:42 +0000
commit88581a68e74ede6235c98f8d616c0fca5cd3a2e2 (patch)
tree856c03835d23c20aced09282baf0cdb5e7597838
parentc5de173edc09cceb7c351cf8b85a470ad597be17 (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.c52
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);