Changeset 0ea3526 for lib/trace.c


Ignore:
Timestamp:
02/24/06 11:39:57 (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:
c6a6c3a
Parents:
913721f
Message:

Add new error handling

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lib/trace.c

    rd3b2234 r0ea3526  
    223223       
    224224        trace_err.err_num = TRACE_ERR_NOERROR;
     225        libtrace->format=NULL;
    225226       
    226227        /* parse the URI to determine what sort of event we are dealing with */
    227228        if ((uridata = trace_parse_uri(uri, &scan)) == 0) {
    228                 return 0;
     229                trace_set_err(libtrace,TRACE_ERR_BAD_FORMAT,"Bad uri format");
     230                return libtrace;
    229231        }
    230232       
     
    233235        libtrace->snaplen = 0;
    234236
    235         libtrace->format = 0;
    236237        for (i = 0; i < nformats; i++) {
    237238                if (strlen(scan) == strlen(format_list[i]->name) &&
     
    244245        }
    245246        if (libtrace->format == 0) {
    246                 trace_set_err(TRACE_ERR_BAD_FORMAT,
     247                trace_set_err(libtrace, TRACE_ERR_BAD_FORMAT,
    247248                                "Unknown format (%s)",scan);
    248249                return 0;
     
    255256       
    256257        if (libtrace->format->init_input) {
    257                 if (!libtrace->format->init_input( libtrace)) {
     258                if (!libtrace->format->init_input(libtrace)) {
    258259                        /* init_input should call trace_set_err to set
    259260                         * the error message
    260261                         */
    261                         return 0;
     262                        return libtrace;
    262263                }
    263264        } else {
    264                 trace_set_err(TRACE_ERR_NO_INIT,
     265                trace_set_err(libtrace,TRACE_ERR_NO_INIT,
    265266                                "Format does not support input (%s)",scan);
    266                 return 0;
     267                return libtrace;
    267268        }
    268269       
    269270
    270271        libtrace->fifo = create_tracefifo(1048576);
    271         assert( libtrace->fifo);
     272        assert(libtrace->fifo);
    272273        free(scan);
    273274        libtrace->started=false;
     275        trace_set_err(libtrace,0,"");
    274276        return libtrace;
    275277}
     
    309311        }
    310312        if (libtrace->format == 0) {
    311                 trace_set_err(TRACE_ERR_BAD_FORMAT,
     313                trace_set_err(libtrace,TRACE_ERR_BAD_FORMAT,
    312314                                "Unknown format (%s)",scan);
    313315                return 0;
     
    323325 * @param uri   the uri string describing the output format and destination
    324326 * @returns opaque pointer to a libtrace_output_t
    325  * @author Shane Alcock
    326  *
    327  * Valid URI's are: - gzerf:/path/to/erf/file.gz - gzerf:/path/to/erf/file -
    328  * rtserver:hostname - rtserver:hostname:port
    329327 *
    330328 *  If an error occured when attempting to open the output trace, NULL is
     
    343341
    344342        if ((uridata = trace_parse_uri(uri, &scan)) == 0) {
    345                 return 0;
     343                trace_set_err_out(libtrace,TRACE_ERR_BAD_FORMAT,"Bad uri format");
     344                return libtrace;
    346345        }
    347346       
     
    358357        }
    359358        if (libtrace->format == 0) {
    360                 trace_set_err(TRACE_ERR_BAD_FORMAT,
     359                trace_set_err_out(libtrace,TRACE_ERR_BAD_FORMAT,
    361360                                "Unknown output format (%s)",scan);
    362361                return 0;
     
    381380                }
    382381        } else {
    383                 trace_set_err(TRACE_ERR_NO_INIT_OUT,
     382                trace_set_err_out(libtrace,TRACE_ERR_NO_INIT_OUT,
    384383                                "Format does not support writing (%s)",scan);
    385                 free(libtrace);
    386                 return 0;
     384                return libtrace;
    387385        }
    388386
     
    458456                        break;
    459457                case TRACE_OPTION_PROMISC:
    460                         trace_set_err(TRACE_ERR_OPTION_UNAVAIL,
     458                        trace_set_err(libtrace,TRACE_ERR_OPTION_UNAVAIL,
    461459                                "Promisc mode is not supported by this format module");
    462460                        return -1;
    463461                default:
    464                         trace_set_err(TRACE_ERR_UNKNOWN_OPTION,
     462                        trace_set_err(libtrace,TRACE_ERR_UNKNOWN_OPTION,
    465463                                "Unknown option %i", option);
    466464                        return -1;
     
    12911289        linkptr = trace_get_link(packet);
    12921290        if (!linkptr) {
    1293                 trace_set_err(TRACE_ERR_BAD_PACKET,"Packet has no payload");
     1291                trace_set_err(packet->trace,
     1292                                TRACE_ERR_BAD_PACKET,"Packet has no payload");
    12941293                return -1;
    12951294        }
     
    13041303                                        1, 0)) {
    13051304                        pcap_close(pcap);
    1306                         trace_set_err(TRACE_ERR_BAD_PACKET,
     1305                        trace_set_err(packet->trace,TRACE_ERR_BAD_PACKET,
    13071306                                        "Packet has no payload");
    13081307                        return -1;
     
    15631562        if((uridata = strchr(uri,':')) == NULL) {
    15641563                /* badly formed URI - needs a : */
    1565                 trace_set_err(TRACE_ERR_URI_NOCOLON,"Format missing");
    15661564                return 0;
    15671565        }
     
    15691567        if ((uridata - uri) > URI_PROTO_LINE) {
    15701568                /* badly formed URI - uri type is too long */
    1571                 trace_set_err(TRACE_ERR_URI_LONG,"Format too long");
    15721569                return 0;
    15731570        }
     
    15811578}
    15821579
    1583 enum base_format_t trace_get_format(struct libtrace_packet_t *packet) {
     1580enum base_format_t trace_get_format(struct libtrace_packet_t *packet)
     1581{
    15841582        assert(packet);
    15851583
     
    15871585}
    15881586       
    1589 /** Update the libtrace error
    1590  * @param errcode either an Econstant from libc, or a LIBTRACE_ERROR
    1591  * @param msg a plaintext error message
    1592  * @internal
    1593  */
    1594 void trace_set_err(int errcode,const char *msg,...)
     1587libtrace_err_t trace_get_err(libtrace_t *trace)
    15951588{
    1596         char buf[256];
    1597         va_list va;
    1598         va_start(va,msg);
    1599         trace_err.err_num=errcode;
    1600         if (errcode>0) {
    1601                 vsnprintf(buf,sizeof(buf),msg,va);
    1602                 snprintf(trace_err.problem,sizeof(trace_err.problem),
    1603                                 "%s: %s",buf,strerror(errno));
    1604         } else {
    1605                 vsnprintf(trace_err.problem,sizeof(trace_err.problem),msg,va);
    1606         }
    1607         va_end(va);
    1608 }
     1589        libtrace_err_t err = trace->err;
     1590        trace->err.err_num = 0; /* "OK" */
     1591        trace->err.problem[0]='\0';
     1592        return err;
     1593}
     1594
     1595libtrace_err_t trace_get_err_output(libtrace_out_t *trace)
     1596{
     1597        libtrace_err_t err = trace->err;
     1598        trace->err.err_num = 0; /* "OK" */
     1599        trace->err.problem[0]='\0';
     1600        return err;
     1601}
Note: See TracChangeset for help on using the changeset viewer.