ee9363b74211ae54c05622187f4b8995468cf095
[idzebra-moved-to-github.git] / test / testclient.c
1 /*
2  * $Id: testclient.c,v 1.4 2002-10-23 13:55:37 adam Exp $
3  *
4  * Z39.50 client specifically for Zebra testing.
5  */
6
7 #include <stdlib.h>
8 #include <stdio.h>
9 #include <yaz/xmalloc.h>
10 #include <yaz/options.h>
11 #include <yaz/zoom.h>
12
13 char *prog = "testclient";
14
15 int main(int argc, char **argv)
16 {
17     ZOOM_connection z;
18     ZOOM_resultset r;
19     int error;
20     const char *errmsg, *addinfo;
21     char *query = 0;
22     char *target = 0;
23     char *arg;
24     int delay_sec = 0;
25     int ret;
26     int retrieve_number = 0;
27     int retrieve_offset = 0;
28     char *format = 0;
29     int pos;
30
31     while ((ret = options("d:n:o:f:", argv, argc, &arg)) != -2)
32     {
33         switch (ret)
34         {
35         case 0:
36             if (!target)
37                 target = xstrdup(arg);
38             else if (!query)
39                 query = xstrdup(arg);
40             break;
41         case 'd':
42             delay_sec = atoi(arg);
43             break;
44         case 'n':
45             retrieve_number = atoi(arg);
46             break;
47         case 'o':
48             retrieve_offset = atoi(arg);
49             break;
50         case 'f':
51             format = xstrdup(arg);
52             break;
53         default:
54             printf ("%s: unknown option %s\n", prog, arg);
55             printf ("usage:\n%s [options] target query \n", prog);
56             printf (" eg.  bagel.indexdata.dk/gils computer\n");
57             exit (1);
58         }
59     }
60
61     if (!target || !target)
62     {
63         printf ("%s: missing target/query\n", prog);
64         printf ("usage:\n%s [options] target query \n", prog);
65         printf (" eg.  bagel.indexdata.dk/gils computer\n");
66         printf ("Options:\n");
67         printf (" -n num       number of records to fetch. Default: 0.\n");
68         printf (" -o off       offset for records - counting from 0.\n");
69         printf (" -f format    set record syntax. Default: none\n");
70         printf (" -d sec       delay a number of seconds before exit.\n");
71         printf ("Options\n");
72         exit (3);
73     }
74     z = ZOOM_connection_new (target, 0);
75     
76     if ((error = ZOOM_connection_error(z, &errmsg, &addinfo)))
77     {
78         printf ("Error: %s (%d) %s\n", errmsg, error, addinfo);
79         exit (2);
80     }
81
82     r = ZOOM_connection_search_pqf (z, query);
83     if ((error = ZOOM_connection_error(z, &errmsg, &addinfo)))
84         fprintf (stderr, "Error: %s (%d) %s\n", errmsg, error, addinfo);
85     else
86         printf ("Result count: %d\n", ZOOM_resultset_size(r));
87     
88     if (format)
89         ZOOM_resultset_option_set(r, "preferredRecordSyntax", format);
90     for (pos = 0; pos < retrieve_number; pos++)
91     {
92         size_t len;
93         const char *rec =
94             ZOOM_record_get(
95                 ZOOM_resultset_record(r, pos + retrieve_offset),
96                 "render", &len);
97         
98         if (rec)
99             fwrite (rec, 1, len, stdout);
100     }
101     if (delay_sec > 0)
102         sleep(delay_sec);
103     ZOOM_resultset_destroy (r);
104     ZOOM_connection_destroy (z);
105     exit (0);
106 }