X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=test%2Ftestclient.c;h=ee9363b74211ae54c05622187f4b8995468cf095;hb=fc0d7f26cdad5ac7ca028e83af4af05ec4dd291f;hp=0e7fccf6260c46f56e7cde6406ef20821c1716dc;hpb=e50fd13b322abbf5a35c89cfebe731529fbddbbd;p=idzebra-moved-to-github.git diff --git a/test/testclient.c b/test/testclient.c index 0e7fccf..ee9363b 100644 --- a/test/testclient.c +++ b/test/testclient.c @@ -1,48 +1,105 @@ /* - * $Id: testclient.c,v 1.2 2002-10-23 13:25:00 heikki Exp $ + * $Id: testclient.c,v 1.4 2002-10-23 13:55:37 adam Exp $ * - * Synchronous single-target client doing search (but no yet retrieval) + * Z39.50 client specifically for Zebra testing. */ #include #include #include +#include #include +char *prog = "testclient"; + int main(int argc, char **argv) { ZOOM_connection z; ZOOM_resultset r; int error; const char *errmsg, *addinfo; - int sec; + char *query = 0; + char *target = 0; + char *arg; + int delay_sec = 0; + int ret; + int retrieve_number = 0; + int retrieve_offset = 0; + char *format = 0; + int pos; + + while ((ret = options("d:n:o:f:", argv, argc, &arg)) != -2) + { + switch (ret) + { + case 0: + if (!target) + target = xstrdup(arg); + else if (!query) + query = xstrdup(arg); + break; + case 'd': + delay_sec = atoi(arg); + break; + case 'n': + retrieve_number = atoi(arg); + break; + case 'o': + retrieve_offset = atoi(arg); + break; + case 'f': + format = xstrdup(arg); + break; + default: + printf ("%s: unknown option %s\n", prog, arg); + printf ("usage:\n%s [options] target query \n", prog); + printf (" eg. bagel.indexdata.dk/gils computer\n"); + exit (1); + } + } - if ( (argc != 3) && (argc !=4) ) + if (!target || !target) { - fprintf (stderr, "usage:\n%s target query [delay]\n", *argv); - fprintf (stderr, " eg. bagel.indexdata.dk/gils computer\n"); - exit (1); + printf ("%s: missing target/query\n", prog); + printf ("usage:\n%s [options] target query \n", prog); + printf (" eg. bagel.indexdata.dk/gils computer\n"); + printf ("Options:\n"); + printf (" -n num number of records to fetch. Default: 0.\n"); + printf (" -o off offset for records - counting from 0.\n"); + printf (" -f format set record syntax. Default: none\n"); + printf (" -d sec delay a number of seconds before exit.\n"); + printf ("Options\n"); + exit (3); } - z = ZOOM_connection_new (argv[1], 0); + z = ZOOM_connection_new (target, 0); if ((error = ZOOM_connection_error(z, &errmsg, &addinfo))) { - fprintf (stderr, "Error: %s (%d) %s\n", errmsg, error, addinfo); + printf ("Error: %s (%d) %s\n", errmsg, error, addinfo); exit (2); } - r = ZOOM_connection_search_pqf (z, argv[2]); + r = ZOOM_connection_search_pqf (z, query); if ((error = ZOOM_connection_error(z, &errmsg, &addinfo))) fprintf (stderr, "Error: %s (%d) %s\n", errmsg, error, addinfo); else printf ("Result count: %d\n", ZOOM_resultset_size(r)); - if (argc==4) + + if (format) + ZOOM_resultset_option_set(r, "preferredRecordSyntax", format); + for (pos = 0; pos < retrieve_number; pos++) { - sec=atoi(argv[3]); - if (sec <= 0) - sec=3; - sleep(sec); + size_t len; + const char *rec = + ZOOM_record_get( + ZOOM_resultset_record(r, pos + retrieve_offset), + "render", &len); + + if (rec) + fwrite (rec, 1, len, stdout); } + if (delay_sec > 0) + sleep(delay_sec); ZOOM_resultset_destroy (r); ZOOM_connection_destroy (z); exit (0);