Ignore:
Timestamp:
01/05/09 11:29:11 (4 years ago)
Author:
perry
Message:

Try to autoguess the tracetype if the format uri specify is not present

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/format_pcapfile.c

    r1391 r1401  
    4242#include <errno.h> 
    4343#include <fcntl.h> 
     44#include <stdbool.h> 
    4445 
    4546#define DATA(x) ((struct pcapfile_format_data_t*)((x)->format_data)) 
     
    5859 
    5960struct pcapfile_format_data_t { 
    60         io_t *file; 
    6161        struct { 
    6262                int real_time; 
    6363        } options; 
     64        bool started; 
    6465        pcapfile_header_t header; 
    6566}; 
     
    7273}; 
    7374 
     75static int pcapfile_probe_magic(io_t *io) 
     76{ 
     77        pcapfile_header_t header; 
     78        int len; 
     79        len = wandio_peek(io, &header, sizeof(header)); 
     80        /* Is this long enough? */ 
     81        if (len < (int)sizeof(header)) { 
     82                return 0; 
     83        } 
     84        /* Pcap magic? */ 
     85        if (header.magic_number == 0xa1b2c3d4 || header.magic_number == 0xd4c3b2a1) { 
     86                return 1; 
     87        } 
     88        /* Nope, not pcap */ 
     89        return 0; 
     90} 
     91 
    7492static int pcapfile_init_input(libtrace_t *libtrace) { 
    7593        libtrace->format_data = malloc(sizeof(struct pcapfile_format_data_t)); 
     
    8098        } 
    8199 
    82         DATA(libtrace)->file=NULL; 
    83100        IN_OPTIONS.real_time = 0; 
     101        DATA(libtrace)->started = false; 
    84102        return 0; 
    85103} 
     
    127145        int err; 
    128146 
    129         if (!DATA(libtrace)->file) { 
    130                 DATA(libtrace)->file=trace_open_file(libtrace); 
    131  
    132                 if (!DATA(libtrace)->file) 
     147        if (!libtrace->io) { 
     148                libtrace->io=trace_open_file(libtrace); 
     149                DATA(libtrace)->started=false; 
     150        } 
     151 
     152        if (!DATA(libtrace)->started) { 
     153 
     154                if (!libtrace->io) 
    133155                        return -1; 
    134156 
    135                 err=wandio_read(DATA(libtrace)->file, 
     157                err=wandio_read(libtrace->io, 
    136158                                &DATA(libtrace)->header, 
    137159                                sizeof(DATA(libtrace)->header)); 
     
    189211static int pcapfile_fin_input(libtrace_t *libtrace)  
    190212{ 
    191         if (DATA(libtrace)->file) 
    192                 wandio_destroy(DATA(libtrace)->file); 
     213        if (libtrace->io) 
     214                wandio_destroy(libtrace->io); 
    193215        free(libtrace->format_data); 
    194216        return 0; /* success */ 
     
    197219static int pcapfile_fin_output(libtrace_out_t *libtrace) 
    198220{ 
    199         if (DATA(libtrace)->file) 
     221        if (DATAOUT(libtrace)->file) 
    200222                wandio_wdestroy(DATAOUT(libtrace)->file); 
    201223        free(libtrace->format_data); 
     
    269291        flags |= TRACE_PREP_OWN_BUFFER; 
    270292         
    271         err=wandio_read(DATA(libtrace)->file, 
     293        err=wandio_read(libtrace->io, 
    272294                        packet->buffer, 
    273295                        sizeof(libtrace_pcapfile_pkt_hdr_t)); 
     
    284306        } 
    285307 
    286         err=wandio_read(DATA(libtrace)->file, 
     308        err=wandio_read(libtrace->io, 
    287309                        (char*)packet->buffer+sizeof(libtrace_pcapfile_pkt_hdr_t), 
    288310                        (size_t)swapl(libtrace,((libtrace_pcapfile_pkt_hdr_t*)packet->buffer)->caplen) 
     
    322344        /* Silently discard RT metadata packets and packets with an 
    323345         * unknown linktype. */ 
    324         if (linktype == TRACE_TYPE_METADATA || linktype == -1) { 
     346        if (linktype == TRACE_TYPE_METADATA || linktype == ~0U) { 
    325347                return 0; 
    326348        } 
     
    570592        "$Id$", 
    571593        TRACE_FORMAT_PCAPFILE, 
     594        NULL,                           /* probe filename */ 
     595        pcapfile_probe_magic,           /* probe magic */ 
    572596        pcapfile_init_input,            /* init_input */ 
    573597        pcapfile_config_input,          /* config_input */ 
Note: See TracChangeset for help on using the changeset viewer.