Hi all,
I'm sorry to say that there was a stupid error in the previous-sent
patch: the patched code does not compile.
Please discard my previous patch and use the one attached to this mail.
ciao,
Paolo
--
Email.it, the professional e-mail, gratis per te: http://www.email.it/f
Sponsor:
Grande Offerta di Benvenuto Cassine di Pietra:
* 36 bottiglie di ottimo vino veneto direttamente a casa tua!
*
Clicca qui: http://adv.email.it/cgi-bin/foclick.cgi?mid=3923&d=5-10
? add_guards_to_sll.patch
? ascii_conversion_and_snaplen_fix.patch
? diffs
? libpcap.so.0.9-PRE-CVS
? test
? test.c
? test1
? test2
Index: pcap-usb-linux.c
===================================================================
RCS file: /tcpdump/master/libpcap/pcap-usb-linux.c,v
retrieving revision 1.2
diff -u -r1.2 pcap-usb-linux.c
--- pcap-usb-linux.c 4 Oct 2006 18:09:22 -0000 1.2
+++ pcap-usb-linux.c 5 Oct 2006 16:24:09 -0000
@@ -149,7 +149,7 @@
free(handle);
return NULL;
}
-
+
handle->buffer = malloc(handle->bufsize + handle->offset);
if (!handle->buffer) {
snprintf(errmsg, PCAP_ERRBUF_SIZE,
@@ -181,7 +181,7 @@
static inline int
ascii_to_int(char c)
{
- return c < 'A' ? c- '0': ((c<'a') ? c- 'A': c-'a');
+ return c < 'A' ? c- '0': ((c<'a') ? c - 'A' + 10: c-'a'+10);
}
/*
@@ -331,12 +331,13 @@
string += cnt;
handle->md.packets_read++;
- /* urb tag is not present if urb length is 0 */
- pkth.len += pkth.caplen;
+ /* urb tag is not present if urb length is 0, so we can stop here
+ * text parsing */
+ pkth.len += pkth.caplen;
if (pkth.len == pkth.caplen)
return 1;
- /* check for data presence */
+ /* check for data presence; data is present if and only if urb tag is '=' */
if (sscanf(string, " %c", &urb_tag) != 1)
{
snprintf(handle->errbuf, PCAP_ERRBUF_SIZE,
@@ -347,9 +348,12 @@
if (urb_tag != '=')
goto got;
- /* read all urb data; if urb length is less then our string we get only
- * a partial information */
- while ((string[0] != 0) && (string[1] != 0))
+ /* read all urb data; if urb length is greater then the usbmon internal
+ * buffer length used by the kernel to spool the URB, we get only
+ * a partial information.
+ * At least until linux 2.6.17 there is no way to set usbmon intenal buffer
+ * length and default value is 130. */
+ while ((string[0] != 0) && (string[1] != 0) && (pkth.caplen < handle->snapshot))
{
rawdata[0] = ascii_to_int(string[0]) * 16 + ascii_to_int(string[1]);
rawdata++;
@@ -361,8 +365,6 @@
got:
handle->md.packets_read++;
- if (pkth.caplen > handle->snapshot)
- pkth.caplen = handle->snapshot;
callback(user, &pkth, handle->buffer);
return 1;
-
This is the tcpdump-workers list.
Visit https://cod.sandelman.ca/ to unsubscribe.