Index: nse_nsock.cc =================================================================== --- nse_nsock.cc (revision 6857) +++ nse_nsock.cc (working copy) @@ -132,6 +138,7 @@ size_t r_layer2_len; unsigned char *r_layer3; size_t r_layer3_len; + struct timeval timestamp; size_t packetsz; int ncap_cback_ref; /* just copy of udata->ncap_cback_ref @@ -1179,12 +1225,13 @@ const unsigned char *l2_data, *l3_data; size_t l2_len, l3_len, packet_len; nse_readpcap(nse, &l2_data, &l2_len, &l3_data, &l3_len, - &packet_len, NULL); + &packet_len, &nr->timestamp); char *packet = (char*) malloc(l2_len + l3_len); nr->r_layer2 = (unsigned char*)memcpy(&packet[0], l2_data, l2_len); nr->r_layer3 = (unsigned char*)memcpy(&packet[l2_len], l3_data, l3_len); nr->r_layer2_len = l2_len; nr->r_layer3_len = l3_len; + //nr->timestamp nr->packetsz = packet_len; break;} case NSE_STATUS_ERROR: @@ -1221,11 +1268,16 @@ lua_pushnumber(l, nr->packetsz); lua_pushlstring(l, (char*)nr->r_layer2, nr->r_layer2_len); lua_pushlstring(l, (char*)nr->r_layer3, nr->r_layer3_len); + // no rounding error, unless the number is greater than 100,000,000,000,000 + double usec = 0.0; //MAX_INT*1000 = 4 294 967 296 000 <- miliseconds since epoch should fit + usec = nr->timestamp.tv_sec*1000 + (int)(nr->timestamp.tv_usec/1000); + lua_pushnumber(l, usec); }else{ lua_pushnil(l); lua_pushstring(l, nr->r_status); lua_pushnil(l); lua_pushnil(l); + lua_pushnil(l); } bool suspended = nr->suspended; nr->l = NULL; @@ -1238,9 +1290,9 @@ free(nr); if(suspended) /* lua process is suspended */ - return process_waiting2running(l, 4); + return process_waiting2running(l, 5); else /* not suspended, just pass output */ - return 4; + return 5; }