From e6c49cfe4d6250568023350f210b0b9a716fcf76 Mon Sep 17 00:00:00 2001 From: Richard Sharpe Date: Sun, 12 Dec 1999 21:04:29 +0000 Subject: Another commit from a Qantas Club Lounge ... :-) Update editcap to print out the type of capture file if -v specified and add a -h flag. Also fix a few compiler warnings ... svn path=/trunk/; revision=1302 --- editcap.c | 91 +++++++++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 62 insertions(+), 29 deletions(-) (limited to 'editcap.c') diff --git a/editcap.c b/editcap.c index 0e306f021e..0d1edb971f 100644 --- a/editcap.c +++ b/editcap.c @@ -1,13 +1,14 @@ /* Edit capture files. We can delete records, or simply convert from one * format to another format. * - * $Id: editcap.c,v 1.3 1999/12/05 01:27:14 guy Exp $ + * $Id: editcap.c,v 1.4 1999/12/12 21:04:29 sharpe Exp $ * * Originally written by Richard Sharpe. * Improved by Guy Harris. */ #include +#include #include #include #include @@ -20,8 +21,9 @@ int selectfrm[100], max_selected = -1; static int count = 1; static int keep_em = 0; -static int out_file_type = WTAP_FILE_PCAP; /* default to "libpcap" */ -static int out_frame_type = -2; /* Leave frame type alone */ +static int out_file_type = WTAP_FILE_PCAP; /* default to "libpcap" */ +static int out_frame_type = -2; /* Leave frame type alone */ +static int verbose = 0; /* Not so verbose */ /* Was the record selected? */ @@ -60,7 +62,8 @@ edit_callback(u_char *user, const struct wtap_pkthdr *phdr, int offset, if ((!selected(count) && !keep_em) || (selected(count) && keep_em)) { - printf("Record: %u\n", count); + if (verbose) + printf("Record: %u\n", count); /* We simply write it, we could do other things, like modify it */ @@ -81,12 +84,14 @@ edit_callback(u_char *user, const struct wtap_pkthdr *phdr, int offset, void usage() { int i; - char *string; + const char *string; - fprintf(stderr, "Usage: editcap [-r] [-T ] [-F ] \\\n"); - fprintf(stderr, " [ ... ]\n"); + fprintf(stderr, "Usage: editcap [-r] [-h] [-v] [-T ] [-F ] \\\n"); + fprintf(stderr, " [ ... ]\n"); fprintf(stderr, " where\t-r specifies that the records specified should be kept, not deleted, \n"); fprintf(stderr, " default is to delete\n"); + fprintf(stderr, " \t-v specifies verbose operation, default is silent\n"); + fprintf(stderr, " \t-h produces this help listing.\n"); fprintf(stderr, " \t-T specifies the encapsulation type to use:\n"); for (i = 0; i < WTAP_NUM_ENCAP_TYPES; i++) { string = wtap_encap_short_string(i); @@ -94,21 +99,21 @@ void usage() fprintf(stderr, " \t %s - %s\n", string, wtap_encap_string(i)); } - fprintf(stderr, " \t default is the same as the input file\n"); + fprintf(stderr, " \t default is the same as the input file\n"); fprintf(stderr, " \t-F specifies the capture file type to write:\n"); for (i = 0; i < WTAP_NUM_FILE_TYPES; i++) { if (wtap_dump_can_open(i)) fprintf(stderr, " \t %s - %s\n", wtap_file_type_short_string(i), wtap_file_type_string(i)); } - fprintf(stderr, " \t default is libpcap\n"); + fprintf(stderr, " \t default is libpcap\n"); } int main(int argc, char *argv[]) { wtap *wth; - int read_bytes, pcnt = 0, i, err; + int i, err; callback_arg args; extern char *optarg; extern int optind, opterr, optopt; @@ -116,7 +121,7 @@ int main(int argc, char *argv[]) /* Process the options first */ - while ((opt = getopt(argc, argv, "T:F:r")) != EOF) { + while ((opt = getopt(argc, argv, "T:F:rv")) != EOF) { switch (opt) { @@ -138,10 +143,19 @@ int main(int argc, char *argv[]) } break; + case 'v': + verbose = !verbose; /* Just invert */ + break; + case 'r': keep_em = !keep_em; /* Just invert */ break; + case 'h': + usage(); + exit(1); + break; + case '?': /* Bad options if GNU getopt */ usage(); exit(1); @@ -151,9 +165,11 @@ int main(int argc, char *argv[]) } +#ifdef DEBUG printf("Optind = %i, argc = %i\n", optind, argc); +#endif - if ((argc - optind) < 2) { + if ((argc - optind) < 1) { usage(); exit(1); @@ -170,32 +186,49 @@ int main(int argc, char *argv[]) } - args.filename = argv[optind + 1]; - if (out_frame_type == -2) - out_frame_type = wtap_file_encap(wth); + if (verbose) { - args.pdh = wtap_dump_open(argv[optind + 1], out_file_type, - out_frame_type, wtap_snapshot_length(wth), &err); - if (args.pdh == NULL) { - - fprintf(stderr, "editcap: Can't open or create %s: %s\n", argv[optind+1], - wtap_strerror(err)); - exit(1); + fprintf(stderr, "File %s is a %s capture file.\n", argv[optind], + wtap_file_type_string(wtap_file_type(wth))); } - for (i = optind + 2; i < argc; i++) - selectfrm[++max_selected] = atoi(argv[i]); + /* + * Now, process the rest, if any ... we only write if there is an extra + * argument or so ... + */ - wtap_loop(wth, 0, edit_callback, (char *)&args, &err); + if ((argc - optind) >= 2) { - if (!wtap_dump_close(args.pdh, &err)) { + args.filename = argv[optind + 1]; + if (out_frame_type == -2) + out_frame_type = wtap_file_encap(wth); - fprintf(stderr, "editcap: Error writing to %s: %s\n", argv[2], - wtap_strerror(err)); - exit(1); + args.pdh = wtap_dump_open(argv[optind + 1], out_file_type, + out_frame_type, wtap_snapshot_length(wth), &err); + if (args.pdh == NULL) { + fprintf(stderr, "editcap: Can't open or create %s: %s\n", argv[optind+1], + wtap_strerror(err)); + exit(1); + + } + + for (i = optind + 2; i < argc; i++) + selectfrm[++max_selected] = atoi(argv[i]); + + wtap_loop(wth, 0, edit_callback, (char *)&args, &err); + + if (!wtap_dump_close(args.pdh, &err)) { + + fprintf(stderr, "editcap: Error writing to %s: %s\n", argv[2], + wtap_strerror(err)); + exit(1); + + } } + exit(0); + return 0; /* Silence compiler warnings */ } -- cgit v1.2.3