diff --git a/src/extern.h b/src/extern.h index 42b9ce4..0bf5903 100644 --- a/src/extern.h +++ b/src/extern.h @@ -13,6 +13,7 @@ extern struct ip *ippacket; extern struct tcphdr *tcppacket; extern struct udphdr *udppacket; +extern struct pcap_pkthdr* phdr; extern u_char *payload; extern int payload_len; extern struct FLAGS flags; diff --git a/src/globals.h b/src/globals.h index 4e23ba3..d31358d 100644 --- a/src/globals.h +++ b/src/globals.h @@ -12,6 +12,7 @@ struct ip *ippacket; struct tcphdr *tcppacket; struct udphdr *udppacket; +struct pcap_pkthdr* phdr = NULL; u_char *payload; int payload_len = 0; struct FLAGS flags; diff --git a/src/loop.c b/src/loop.c index 3d24b03..a9f4ecd 100644 --- a/src/loop.c +++ b/src/loop.c @@ -38,6 +38,9 @@ got_packet (u_char * useless, { /* FIXME: this function is too long */ +/* Keep track of the original pcap header in order to put correct timestamps */ + phdr=(struct pcap_pkthdr *)hdr; + /* check if the flag for checking for expired connections is turned on */ diff --git a/src/time.c b/src/time.c index 5b14321..d5d42ac 100644 --- a/src/time.c +++ b/src/time.c @@ -32,21 +32,15 @@ char * time_ascii(char * ret) { struct timeval *tp; - struct timezone *tzp; struct tm * brokentime; if(flags.displaytime == NOTHING_TIME) goto retNULL; - tp = (struct timeval * ) S_malloc( sizeof(struct timeval) ); - tzp = (struct timezone * ) S_malloc( sizeof(struct timezone) ); + tp = &phdr->ts; + if(!tp) { - memset(tp, 0, sizeof(struct timeval)); - memset(tzp, 0, sizeof(struct timeval)); - - if(gettimeofday(tp, tzp)) { - - perror("gettimeofday returned not 0!"); + perror("No timestamp was available!"); goto retNULL; } else { @@ -93,9 +87,6 @@ char * time_ascii(char * ret) } } - S_free ( tp ); - S_free ( tzp ); - return ret; retNULL: