This allow to emulate reading from network Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx> --- codegen/check_dissector | 4 ++-- codegen/dissector_test.c | 32 +++++++++++++++++++++++++++++--- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/codegen/check_dissector b/codegen/check_dissector index f1444a2..7d6d086 100755 --- a/codegen/check_dissector +++ b/codegen/check_dissector @@ -6,8 +6,8 @@ error() { exit 1 } -./dissector_test 1 100 -if ./dissector_test 1 99; then +./dissector_test 1 100 </dev/null +if ./dissector_test 1 99 </dev/null; then error "This test should fail" fi exit 0 diff --git a/codegen/dissector_test.c b/codegen/dissector_test.c index 5a49f40..ba87367 100644 --- a/codegen/dissector_test.c +++ b/codegen/dissector_test.c @@ -15,6 +15,7 @@ enum { first_hf_registered = 0x10000, first_ei_registered = 0x20000, first_tree_registered = 0x30000, + max_message_size = 0x100000, }; static int last_hf_registered = first_hf_registered - 1; static int last_ei_registered = first_ei_registered - 1; @@ -474,8 +475,9 @@ static const struct option long_options[] = { { "client", 0, NULL, 'c' }, { "output-file", required_argument, NULL, 'o' }, { "xml", 0, NULL, 'x' }, + { "input-file", required_argument, NULL, 'i' }, }; -static const char options[] = "hscxo:"; +static const char options[] = "hscxo:i:"; static void syntax(FILE *f, int exit_value) { @@ -488,6 +490,7 @@ static void syntax(FILE *f, int exit_value) " -c, --client Process client messages\n" " -x, --xml Output in XML format\n" " -o, --output-file=FILE Output to specified file\n" + " -i, --input-file=FILE Input from specified file\n" ); exit(exit_value); } @@ -495,8 +498,12 @@ static void syntax(FILE *f, int exit_value) int main(int argc, char **argv) { int channel, message_type; + guint8 *buf, *p, *pend; + size_t size; + FILE *f = stdin; GlobalInfo glb; proto_tree tree; + struct tvbuff tvb; spice_dissect_func_t (*msg_func)(guint8 channel); spice_dissect_func_t channel_func = NULL; @@ -526,6 +533,10 @@ int main(int argc, char **argv) output_file = fopen(optarg, "w"); check(output_file != NULL, "Error opening output file"); break; + case 'i': + f = fopen(optarg, "rb"); + check(f != NULL, "Error opening input file"); + break; default: syntax(stderr, EXIT_FAILURE); break; @@ -540,10 +551,25 @@ int main(int argc, char **argv) hfs = g_ptr_array_new_with_free_func(free); spice_register_fields(1, NULL); + /* read message from standard input */ + buf = malloc(max_message_size); + assert(buf); + p = buf; + pend = buf + max_message_size; + while (p < pend && (size = fread(p, 1, pend - p, f)) > 0) + p += size; + assert(p < pend); + assert(!ferror(f)); + size = p - buf; + + memset(&tvb, 0, sizeof(tvb)); + tvb.data = buf; + tvb.len = size; + memset(&glb, 0, sizeof(glb)); - glb.tvb = NULL; + glb.tvb = &tvb; glb.message_offset = 0; - glb.message_end = 0; + glb.message_end = tvb.len; channel_func = msg_func(channel); assert(channel_func); -- 2.1.0 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel