]> The Tcpdump Group git mirrors - libpcap/commitdiff
From Paolo Abeni:
authorguy <guy>
Thu, 12 Oct 2006 08:04:08 +0000 (08:04 +0000)
committerguy <guy>
Thu, 12 Oct 2006 08:04:08 +0000 (08:04 +0000)
The attached patch fix the parsing of setup data fields in current
implementation of usb_read_data.

Currently the "setup header is present" field is not marked so the
relevant fields are ignored from caller.

The patch contains also a little indentation fix, always in the same
function.

pcap-usb-linux.c

index f09d1fa2583687d2e44e945c4e19fafbb952430e..7094c2c9adc881281c39fb6d016b36652c3e2afa 100644 (file)
@@ -290,7 +290,7 @@ usb_read_linux(pcap_t *handle, int max_packets, pcap_handler callback, u_char *u
        
        /* check if this is a setup packet */
        ret = sscanf(status, "%d", &dummy);
-       if (ret == 0)
+       if (ret != 1)
        {
                /* this a setup packet, setup data can be filled with underscore if
                * usbmon has not been able to read them, so we must parse this fields as 
@@ -302,8 +302,8 @@ usb_read_linux(pcap_t *handle, int max_packets, pcap_handler callback, u_char *u
                if (ret < 5)
                {
                        snprintf(handle->errbuf, PCAP_ERRBUF_SIZE,
-                       "Can't parse usb bus message '%s', too few token (expected 5 got %d)",
-                       string, ret);
+                               "Can't parse usb bus message '%s', too few token (expected 5 got %d)",
+                               string, ret);
                        return -1;
                }
                string += cnt;
@@ -315,10 +315,14 @@ usb_read_linux(pcap_t *handle, int max_packets, pcap_handler callback, u_char *u
                shdr->wValue = htons(strtoul(str3, 0, 16));
                shdr->wIndex = htons(strtoul(str4, 0, 16));
                shdr->wLength = htons(strtoul(str5, 0, 16));
+               uhdr->setup_packet = 1;
                
-               pkth.caplen = sizeof(pcap_usb_setup);
+               
+               pkth.caplen += sizeof(pcap_usb_setup);
                rawdata += sizeof(pcap_usb_setup);
        }
+       else 
+               uhdr->setup_packet = 0;
        
        /* read urb data */
        ret = sscanf(string, " %d%n", &pkth.len, &cnt);