Changeset 91b72d3 for lib/trace.c


Ignore:
Timestamp:
01/05/09 11:29:11 (13 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:
ad36006
Parents:
9d0049cf
Message:

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lib/trace.c

    rb4a17c7 r91b72d3  
    260260#define URI_PROTO_LINE 16U
    261261
     262/* Try to guess which format module */
     263static void guess_format(libtrace_t *libtrace, const char *filename)
     264{
     265        struct libtrace_format_t *tmp;
     266       
     267        /* Try and guess based on filename */
     268        for(tmp = formats_list; tmp; tmp=tmp->next) {
     269                if (tmp->probe_filename && tmp->probe_filename(filename)) {
     270                        libtrace->format = tmp;
     271                        libtrace->uridata = malloc(strlen(tmp->name)+1+strlen(filename)+1);
     272                        strcpy(libtrace->uridata,tmp->name);
     273                        strcat(libtrace->uridata,":");
     274                        strcat(libtrace->uridata,filename);
     275                        return;
     276                }
     277        }
     278
     279        libtrace->io = wandio_create(filename);
     280        if (!libtrace->io)
     281                return;
     282
     283        /* Try and guess based on file magic */
     284        for(tmp = formats_list; tmp; tmp=tmp->next) {
     285                if (tmp->probe_magic && tmp->probe_magic(libtrace->io)) {
     286                        libtrace->format = tmp;
     287                        libtrace->uridata = malloc(strlen(tmp->name)+1+strlen(filename)+1);
     288                        strcpy(libtrace->uridata,tmp->name);
     289                        strcat(libtrace->uridata,":");
     290                        strcat(libtrace->uridata,filename);
     291                        return;
     292                }
     293        }
     294       
     295        /* Oh well */
     296        return;
     297}
    262298
    263299/* Create a trace file from a URI
     
    286322        char *scan = 0;
    287323        const char *uridata = 0;                 
    288         struct libtrace_format_t *tmp;
    289324
    290325        trace_init();
     
    308343        libtrace->started=false;
    309344        libtrace->uridata = NULL;
     345        libtrace->io = NULL;
    310346        libtrace->filtered_packets = 0;
    311347
    312348        /* parse the URI to determine what sort of event we are dealing with */
    313349        if ((uridata = trace_parse_uri(uri, &scan)) == 0) {
    314                 trace_set_err(libtrace,TRACE_ERR_BAD_FORMAT,"Bad uri format (%s)",uri);
    315                 return libtrace;
    316         }
    317        
    318         for (tmp=formats_list;tmp;tmp=tmp->next) {
    319                 if (strlen(scan) == strlen(tmp->name) &&
    320                                 strncasecmp(scan, tmp->name, strlen(scan)) == 0
    321                                 ) {
    322                         libtrace->format=tmp;
    323                         break;
    324                 }
    325         }
    326         if (libtrace->format == 0) {
    327                 trace_set_err(libtrace, TRACE_ERR_BAD_FORMAT,
    328                                 "Unknown format (%s)",scan);
    329                 return libtrace;
    330         }
    331 
    332         libtrace->uridata = strdup(uridata);
     350                guess_format(libtrace,uri);
     351                if (!libtrace->format) {
     352                        trace_set_err(libtrace,TRACE_ERR_BAD_FORMAT,"Unable to guess format (%s)",uri);
     353                        return libtrace;
     354                }
     355        }
     356        else {
     357                struct libtrace_format_t *tmp;
     358
     359                for (tmp=formats_list;tmp;tmp=tmp->next) {
     360                        if (strlen(scan) == strlen(tmp->name) &&
     361                                        strncasecmp(scan, tmp->name, strlen(scan)) == 0
     362                                        ) {
     363                                libtrace->format=tmp;
     364                                break;
     365                        }
     366                }
     367                if (libtrace->format == 0) {
     368                        trace_set_err(libtrace, TRACE_ERR_BAD_FORMAT,
     369                                        "Unknown format (%s)",scan);
     370                        return libtrace;
     371                }
     372
     373                libtrace->uridata = strdup(uridata);
     374        }
    333375        /* libtrace->format now contains the type of uri
    334376         * libtrace->uridata contains the appropriate data for this
     
    381423        }
    382424       
    383         libtrace->format = 0;   
     425        libtrace->err.err_num = TRACE_ERR_NOERROR;
     426        libtrace->format=NULL;
     427       
     428        libtrace->event.tdelta = 0.0;
     429        libtrace->event.packet = NULL;
     430        libtrace->event.psize = 0;
     431        libtrace->event.trace_last_ts = 0.0;
     432        libtrace->filter = NULL;
     433        libtrace->snaplen = 0;
     434        libtrace->started=false;
     435        libtrace->uridata = NULL;
     436        libtrace->io = NULL;
     437        libtrace->filtered_packets = 0;
    384438       
    385439        for(tmp=formats_list;tmp;tmp=tmp->next) {
Note: See TracChangeset for help on using the changeset viewer.