Changeset fe76c55 for lib/format_wag.c


Ignore:
Timestamp:
02/21/06 16:06:17 (16 years ago)
Author:
Perry Lorier <perry@…>
Branches:
4.0.1-hotfixes, cachetimestamps, develop, dpdk-ndag, etsilive, getfragoff, help, libtrace4, master, ndag_format, pfring, rc-4.0.1, rc-4.0.2, rc-4.0.3, rc-4.0.4, ringdecrementfix, ringperformance, ringtimestampfixes
Children:
c1db742
Parents:
9ff68ff
Message:

More fixups for writing

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lib/format_wag.c

    r6dbc47a rfe76c55  
    146146                malloc(sizeof(struct libtrace_format_data_t));
    147147
     148        return 1;
     149}
     150
     151static int wtf_start_input(libtrace_t *libtrace)
     152{
    148153        libtrace->format_data->input.file = trace_open_file(libtrace);
    149154
     
    155160
    156161static int wtf_init_output(struct libtrace_out_t *libtrace) {
    157         char *filemode = 0;
    158162        libtrace->format_data = (struct libtrace_format_data_out_t *)
    159163                calloc(1,sizeof(struct libtrace_format_data_out_t));
    160164
    161         OPTIONS.zlib.level = 0;
    162         asprintf(&filemode,"wb%d",OPTIONS.zlib.level);
    163         if (!strncmp(libtrace->uridata,"-",1)) {
    164                 /* STDOUT */
    165                 OUTPUT.file = LIBTRACE_FDOPEN(dup(1), filemode);
    166         } else {
    167                 int fd;
    168                 /* TRACE */
    169                 fd=open(libtrace->uridata,OPTIONS.zlib.filemode,
    170                                         S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
    171                 if (fd==-1) {
    172                         trace_set_err(errno,"open(%s)",libtrace->uridata);
    173                         return 0;
    174                 }
    175                 OUTPUT.file = LIBTRACE_FDOPEN(fd, filemode);
    176         }
    177 
    178         return 1;
     165        return 0;
     166}
     167
     168static int wtf_start_output(libtrace_out_t *libtrace) {
     169        OUTPUT.file = trace_open_file_out(libtrace,
     170                        OPTIONS.zlib.level,
     171                        OPTIONS.zlib.filemode);
     172        if (!OUTPUT.file) {
     173                return -1;
     174        }
     175        return 0;
    179176}
    180177
     
    248245        }
    249246
     247
    250248        framesize = ntohs(((struct frame_t *)buffer)->size);
    251249        magic = ntohs(((struct frame_t *)buffer)->magic);
     
    282280        int numbytes;
    283281       
    284         if (packet->buf_control == EXTERNAL) {
     282        if (packet->buf_control == EXTERNAL || !packet->buffer) {
    285283                packet->buf_control = PACKET;
    286284                packet->buffer = malloc(LIBTRACE_PACKET_BUFSIZE);
    287         }
     285        }
    288286       
    289287       
     
    304302static int wtf_read_packet(struct libtrace_t *libtrace, struct libtrace_packet_t *packet) {
    305303        int numbytes;
    306         void *buffer = packet->buffer;
    307         void *buffer2 = packet->buffer;
     304        void *buffer;
     305        void *buffer2;
    308306        int framesize;
    309307        int size;
    310308
    311         if (packet->buf_control == EXTERNAL) {
     309        if (packet->buf_control == EXTERNAL || !packet->buffer) {
    312310                packet->buf_control = PACKET;
    313311                packet->buffer = malloc(LIBTRACE_PACKET_BUFSIZE);
    314312        }
    315313
     314        buffer2 = buffer = packet->buffer;
    316315       
    317316        if ((numbytes = LIBTRACE_READ(INPUT.file, buffer, sizeof(struct frame_t))) == -1) {
    318                 trace_set_err(errno,"read(%s)",packet->trace->uridata);
     317                trace_set_err(errno,"read(%s,frame_t)",packet->trace->uridata);
    319318                return -1;
    320319        }
     
    322321        if (numbytes == 0) {
    323322                return 0;
     323        }
     324
     325        if (htons(((struct frame_t *)buffer)->magic) != 0xdaa1) {
     326                trace_set_err(TRACE_ERR_BAD_PACKET,"Insufficient magic");
     327                return -1;
    324328        }
    325329
     
    331335       
    332336        if ((numbytes=LIBTRACE_READ(INPUT.file, buffer2, size)) != size) {
    333                 trace_set_err(errno,"read(%s)",packet->trace->uridata);
     337                trace_set_err(errno,"read(%s,buffer)",packet->trace->uridata);
    334338                return -1;
    335339        }
     
    351355        }
    352356
    353         /* We could just read from packet->buffer, but I feel it is more technically correct
    354          * to read from the header and payload pointers
     357        /* We could just read from packet->buffer, but I feel it is more
     358         * technically correct to read from the header and payload pointers
    355359         */
    356         if ((numbytes = LIBTRACE_WRITE(OUTPUT.file, packet->header, trace_get_framing_length(packet))) == -1) {
     360        if ((numbytes = LIBTRACE_WRITE(OUTPUT.file, packet->header,
     361                                trace_get_framing_length(packet))) == -1) {
    357362                trace_set_err(errno,"write(%s)",packet->trace->uridata);
    358363                return -1;
    359364        }
    360365        if ((numbytes = LIBTRACE_WRITE(OUTPUT.file, packet->payload,
    361                         packet->size - trace_get_framing_length(packet))) == 0) {
     366                        packet->size - trace_get_framing_length(packet))) == -1) {
    362367                trace_set_err(errno,"write(%s)",packet->trace->uridata);
    363368                return -1;
     
    472477        wtf_init_input,                 /* init_input */
    473478        NULL,                           /* config input */
    474         NULL,                           /* start input */
     479        wtf_start_input,                /* start input */
    475480        NULL,                           /* pause_input */
    476481        wtf_init_output,                /* init_output */
    477482        wtf_config_output,              /* config_output */
    478         NULL,                           /* start output */
     483        wtf_start_output,               /* start output */
    479484        wtf_fin_input,                  /* fin_input */
    480485        wtf_fin_output,                 /* fin_output */
Note: See TracChangeset for help on using the changeset viewer.