Changeset 0ea3526 for lib/trace.c
- Timestamp:
- 02/24/06 11:39:57 (16 years ago)
- 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
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
lib/trace.c
rd3b2234 r0ea3526 223 223 224 224 trace_err.err_num = TRACE_ERR_NOERROR; 225 libtrace->format=NULL; 225 226 226 227 /* parse the URI to determine what sort of event we are dealing with */ 227 228 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; 229 231 } 230 232 … … 233 235 libtrace->snaplen = 0; 234 236 235 libtrace->format = 0;236 237 for (i = 0; i < nformats; i++) { 237 238 if (strlen(scan) == strlen(format_list[i]->name) && … … 244 245 } 245 246 if (libtrace->format == 0) { 246 trace_set_err( TRACE_ERR_BAD_FORMAT,247 trace_set_err(libtrace, TRACE_ERR_BAD_FORMAT, 247 248 "Unknown format (%s)",scan); 248 249 return 0; … … 255 256 256 257 if (libtrace->format->init_input) { 257 if (!libtrace->format->init_input( 258 if (!libtrace->format->init_input(libtrace)) { 258 259 /* init_input should call trace_set_err to set 259 260 * the error message 260 261 */ 261 return 0;262 return libtrace; 262 263 } 263 264 } else { 264 trace_set_err( TRACE_ERR_NO_INIT,265 trace_set_err(libtrace,TRACE_ERR_NO_INIT, 265 266 "Format does not support input (%s)",scan); 266 return 0;267 return libtrace; 267 268 } 268 269 269 270 270 271 libtrace->fifo = create_tracefifo(1048576); 271 assert( 272 assert(libtrace->fifo); 272 273 free(scan); 273 274 libtrace->started=false; 275 trace_set_err(libtrace,0,""); 274 276 return libtrace; 275 277 } … … 309 311 } 310 312 if (libtrace->format == 0) { 311 trace_set_err( TRACE_ERR_BAD_FORMAT,313 trace_set_err(libtrace,TRACE_ERR_BAD_FORMAT, 312 314 "Unknown format (%s)",scan); 313 315 return 0; … … 323 325 * @param uri the uri string describing the output format and destination 324 326 * @returns opaque pointer to a libtrace_output_t 325 * @author Shane Alcock326 *327 * Valid URI's are: - gzerf:/path/to/erf/file.gz - gzerf:/path/to/erf/file -328 * rtserver:hostname - rtserver:hostname:port329 327 * 330 328 * If an error occured when attempting to open the output trace, NULL is … … 343 341 344 342 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; 346 345 } 347 346 … … 358 357 } 359 358 if (libtrace->format == 0) { 360 trace_set_err (TRACE_ERR_BAD_FORMAT,359 trace_set_err_out(libtrace,TRACE_ERR_BAD_FORMAT, 361 360 "Unknown output format (%s)",scan); 362 361 return 0; … … 381 380 } 382 381 } else { 383 trace_set_err (TRACE_ERR_NO_INIT_OUT,382 trace_set_err_out(libtrace,TRACE_ERR_NO_INIT_OUT, 384 383 "Format does not support writing (%s)",scan); 385 free(libtrace); 386 return 0; 384 return libtrace; 387 385 } 388 386 … … 458 456 break; 459 457 case TRACE_OPTION_PROMISC: 460 trace_set_err( TRACE_ERR_OPTION_UNAVAIL,458 trace_set_err(libtrace,TRACE_ERR_OPTION_UNAVAIL, 461 459 "Promisc mode is not supported by this format module"); 462 460 return -1; 463 461 default: 464 trace_set_err( TRACE_ERR_UNKNOWN_OPTION,462 trace_set_err(libtrace,TRACE_ERR_UNKNOWN_OPTION, 465 463 "Unknown option %i", option); 466 464 return -1; … … 1291 1289 linkptr = trace_get_link(packet); 1292 1290 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"); 1294 1293 return -1; 1295 1294 } … … 1304 1303 1, 0)) { 1305 1304 pcap_close(pcap); 1306 trace_set_err( TRACE_ERR_BAD_PACKET,1305 trace_set_err(packet->trace,TRACE_ERR_BAD_PACKET, 1307 1306 "Packet has no payload"); 1308 1307 return -1; … … 1563 1562 if((uridata = strchr(uri,':')) == NULL) { 1564 1563 /* badly formed URI - needs a : */ 1565 trace_set_err(TRACE_ERR_URI_NOCOLON,"Format missing");1566 1564 return 0; 1567 1565 } … … 1569 1567 if ((uridata - uri) > URI_PROTO_LINE) { 1570 1568 /* badly formed URI - uri type is too long */ 1571 trace_set_err(TRACE_ERR_URI_LONG,"Format too long");1572 1569 return 0; 1573 1570 } … … 1581 1578 } 1582 1579 1583 enum base_format_t trace_get_format(struct libtrace_packet_t *packet) { 1580 enum base_format_t trace_get_format(struct libtrace_packet_t *packet) 1581 { 1584 1582 assert(packet); 1585 1583 … … 1587 1585 } 1588 1586 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,...) 1587 libtrace_err_t trace_get_err(libtrace_t *trace) 1595 1588 { 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 1595 libtrace_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.