#include "wtap-int.h"
#include "file_wrappers.h"
#include "buffer.h"
+#include "5views.h"
typedef struct
}t_5VW_Attributes_Header;
-#define CST_5VW_INFO_HEADER_KEY 0xAAAAAAAA /* signature */
+#define CST_5VW_INFO_HEADER_KEY 0xAAAAAAAAU /* signature */
-#define CST_5VW_INFO_RECORD_VERSION 0x00010000 /* version */
+#define CST_5VW_INFO_RECORD_VERSION 0x00010000U /* version */
#define CST_5VW_DECALE_FILE_TYPE 24
-#define CST_5VW_SECTION_CAPTURES 0x08
+#define CST_5VW_SECTION_CAPTURES 0x08U
#define CST_5VW_CAPTURES_FILE (CST_5VW_SECTION_CAPTURES << CST_5VW_DECALE_FILE_TYPE) /* 0x08000000 */
-#define CST_5VW_FLAT_FILE 0x10000000
+#define CST_5VW_FLAT_FILE 0x10000000U
#define CST_5VW_CAPTURE_FILEID (CST_5VW_FLAT_FILE | CST_5VW_CAPTURES_FILE)
-#define CST_5VW_FAMILY_CAP_ETH 0x01
-#define CST_5VW_FAMILY_CAP_WAN 0x02
+#define CST_5VW_FAMILY_CAP_ETH 0x01U
+#define CST_5VW_FAMILY_CAP_WAN 0x02U
#define CST_5VW_DECALE_FILE_FAMILY 12
#define CST_5VW_CAP_ETH (CST_5VW_FAMILY_CAP_ETH << CST_5VW_DECALE_FILE_FAMILY) /* 0x00001000 */
#define CST_5VW_CAP_WAN (CST_5VW_FAMILY_CAP_WAN << CST_5VW_DECALE_FILE_FAMILY) /* 0x00002000 */
#define CST_5VW_CAPTURE_ETH_FILEID (CST_5VW_CAPTURE_FILEID | CST_5VW_CAP_ETH)
#define CST_5VW_CAPTURE_WAN_FILEID (CST_5VW_CAPTURE_FILEID | CST_5VW_CAP_WAN)
-#define CST_5VW_CAPTURE_FILE_TYPE_MASK 0xFF000000
+#define CST_5VW_CAPTURE_FILE_TYPE_MASK 0xFF000000U
-#define CST_5VW_FRAME_RECORD 0x00000000
-#define CST_5VW_RECORDS_HEADER_KEY 0x3333EEEE
+#define CST_5VW_FRAME_RECORD 0x00000000U
+#define CST_5VW_RECORDS_HEADER_KEY 0x3333EEEEU
typedef struct
{
}t_5VW_TimeStamped_Header;
-#define CST_5VW_IA_CAP_INF_NB_TRAMES_STOCKEES 0x20000000
-#define CST_5VW_IA_DATE_CREATION 0x80000007 /* Struct t_Attrib_Date_Create */
-#define CST_5VW_TIMESTAMPED_HEADER_TYPE 0x4000
+#define CST_5VW_IA_CAP_INF_NB_TRAMES_STOCKEES 0x20000000U
+#define CST_5VW_IA_DATE_CREATION 0x80000007U /* Struct t_Attrib_Date_Create */
+#define CST_5VW_TIMESTAMPED_HEADER_TYPE 0x4000U
#define CST_5VW_CAPTURES_RECORD (CST_5VW_SECTION_CAPTURES << 28) /* 0x80000000 */
-#define CST_5VW_SYSTEM_RECORD 0x00000000
+#define CST_5VW_SYSTEM_RECORD 0x00000000U
static gboolean _5views_read(wtap *wth, int *err, gchar **err_info,
- long *data_offset);
+ gint64 *data_offset);
static gboolean _5views_read_rec_data(FILE_T fh, guchar *pd, int length,
int *err);
static int _5views_read_header(wtap *wth, FILE_T fh,
t_5VW_TimeStamped_Header *hdr, int *err);
-static gboolean _5views_seek_read(wtap *wth, long seek_off,
+static gboolean _5views_seek_read(wtap *wth, gint64 seek_off,
union wtap_pseudo_header *pseudo_header, guchar *pd, int length,
int *err, gchar **err_info);
wth->subtype_seek_read = _5views_seek_read;
wth->file_encap = encap;
wth->snapshot_length = 0; /* not available in header */
+ wth->tsprecision = WTAP_FILE_TSPREC_NSEC;
return 1;
}
/* Read the next packet */
static gboolean
-_5views_read(wtap *wth, int *err, gchar **err_info _U_, long *data_offset)
+_5views_read(wtap *wth, int *err, gchar **err_info _U_, gint64 *data_offset)
{
t_5VW_TimeStamped_Header TimeStamped_Header;
int bytes_read;
TimeStamped_Header.RecSize =
pletohl(&TimeStamped_Header.RecSize);
if(TimeStamped_Header.RecSubType != CST_5VW_FRAME_RECORD) {
- if (file_seek(wth->fh, TimeStamped_Header.RecSize, SEEK_SET, err) == -1)
+ if (file_seek(wth->fh, TimeStamped_Header.RecSize, SEEK_CUR, err) == -1)
return FALSE;
wth->data_offset += TimeStamped_Header.RecSize;
} else
TimeStamped_Header.Utc = pletohl(&TimeStamped_Header.Utc);
TimeStamped_Header.NanoSecondes =
pletohl(&TimeStamped_Header.NanoSecondes);
- wth->phdr.ts.tv_sec = TimeStamped_Header.Utc;
- wth->phdr.ts.tv_usec = TimeStamped_Header.NanoSecondes/1000;
+ wth->phdr.ts.secs = TimeStamped_Header.Utc;
+ wth->phdr.ts.nsecs = TimeStamped_Header.NanoSecondes;
wth->phdr.caplen = packet_size;
wth->phdr.len = orig_size;
}
static gboolean
-_5views_seek_read(wtap *wth, long seek_off,
+_5views_seek_read(wtap *wth, gint64 seek_off,
union wtap_pseudo_header *pseudo_header, guchar *pd, int length,
int *err, gchar **err_info _U_)
{
HeaderFrame.RecNb = htolel(1);
/* record-dependant fields */
- HeaderFrame.Utc = htolel(phdr->ts.tv_sec);
- HeaderFrame.NanoSecondes = htolel(phdr->ts.tv_usec*1000);
+ HeaderFrame.Utc = htolel(phdr->ts.secs);
+ HeaderFrame.NanoSecondes = htolel(phdr->ts.nsecs);
HeaderFrame.RecSize = htolel(phdr->len);
HeaderFrame.RecInfo = htolel(0);