diff options
Diffstat (limited to 'src/tsnif-replay.c')
-rw-r--r-- | src/tsnif-replay.c | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/src/tsnif-replay.c b/src/tsnif-replay.c index 5864387..0f1455f 100644 --- a/src/tsnif-replay.c +++ b/src/tsnif-replay.c @@ -1,7 +1,89 @@ #include <stdio.h> +#include <unistd.h> +#include <getopt.h> + +#include "storage.h" + + +static char *filename; +struct tsnif_storage_handle storage_handle; +static struct tsnif_storage_opts storage_opts = { + .flags = TSNIF_STORAGE_OPT_READ, +}; + +int tsnif_debug = 0; + +static void usage() +{ + printf("tsnif-replay -f <file>\n"); + _exit(-1); +} + +static int get_args(int argc, char **argv) +{ + while (1) { + int c; + int option_index = 0; + static struct option long_options[] = { + {"file", required_argument, 0, 'f'}, + {"debug", no_argument, 0, 'd'}, + {"help", no_argument, 0, 'h'}, + {0, 0, 0, 0} + }; + + c = getopt_long(argc, argv, "f:dh", + long_options, &option_index); + + if (c == -1) + break; + + switch (c) { + case 'f': + filename = optarg; + break; + + case 'd': + tsnif_debug = 1; + break; + + case 'h': + usage(); + break; + + default: + printf("unknown option '%c'", c); + } /* switch(c) */ + } /* while(1) */ + + return 0; +} int main(int argc, char **argv) { + int err; + + if (get_args(argc, argv)) + usage(); + + err = tsnif_storage_init(&storage_handle, &storage_opts, filename); + if (err) + return -1; + + do { + struct tsnif_storage_rec rec; + + err = tsnif_storage_read(&storage_handle, + TSNIF_STORAGE_READ_NEXT, &rec); + + if (err) + break; + + fwrite(rec.ptr, rec.len, 1, stdout); + fflush(NULL); + + } while(1); + + tsnif_storage_close(&storage_handle); return 0; } |