894ef1bd3b2381e8e2b9d7947c05efcf460bb265
[yaz-moved-to-github.git] / odr / test.c
1 #include <stdio.h>
2 #include <odr.h>
3 #include <odr_use.h>
4
5 typedef Odr_bitmask Z_ReferenceId;
6
7 typedef struct Z_InitRequest
8 {
9     Z_ReferenceId *referenceId;    /* OPTIONAL */
10     Odr_bitmask *options;
11     Odr_bitmask *protocolVersion;
12     int *preferredMessageSize;
13     int *maximumRecordSize;
14     char *idAuthentication;      /* OPTIONAL */
15     char *implementationId;      /* OPTIONAL */
16     char *implementationName;    /* OPTIONAL */
17     char *implementationVersion; /* OPTIONAL */
18 } Z_InitRequest;
19
20 int z_ReferenceId(ODR o, Z_ReferenceId **p, int opt)
21 {
22     return odr_implicit(o, odr_octetstring, (Odr_oct**) p, ODR_CONTEXT, 2, opt);
23 }
24
25 int z_InitRequest(ODR o, Z_InitRequest **p, int opt)
26 {
27     Z_InitRequest *pp;
28
29     if (!odr_sequence_begin(o, p, sizeof(Z_InitRequest)))
30         return opt;
31     pp = *p;
32     return
33         z_ReferenceId(o, &pp->referenceId, 1) &&
34         odr_implicit(o, odr_bitstring, &pp->protocolVersion, ODR_CONTEXT, 
35             3, 0) &&
36         odr_implicit(o, odr_bitstring, &pp->options, ODR_CONTEXT, 4, 0) &&
37         odr_implicit(o, odr_integer, &pp->preferredMessageSize, ODR_CONTEXT,
38             5, 0) &&
39         odr_implicit(o, odr_integer, &pp->maximumRecordSize, ODR_CONTEXT,
40             6, 0) &&
41         odr_implicit(o, odr_visiblestring, &pp->idAuthentication, ODR_CONTEXT,
42             7, 1) &&
43         odr_implicit(o, odr_visiblestring, &pp->implementationId, ODR_CONTEXT,
44             110, 1) &&
45         odr_implicit(o, odr_visiblestring, &pp->implementationName, ODR_CONTEXT,
46             111, 1) &&
47         odr_implicit(o, odr_visiblestring, &pp->implementationVersion,
48             ODR_CONTEXT, 112, 1) &&
49         odr_sequence_end(o);
50 }
51
52 int main()
53 {
54     int i;
55     unsigned char buf[4048];
56     struct odr o;
57     Z_InitRequest ireq, *ireqp, *ireq2p;
58     Odr_bitmask options, protocolVersion;
59     char *iId = "YAZ", *iName = "Yet Another Z39.50 Implementation",
60         *iVersion = "0.1";
61     int maximumRS = 4096, preferredMS = 2048;
62     static Odr_oid oid[] = {1, 2, 3, 4, -1}, *oidp1, *oidp2;
63
64     oidp1 = oid;
65
66     ODR_MASK_ZERO(&protocolVersion);
67     ODR_MASK_SET(&protocolVersion, 0);
68     ODR_MASK_SET(&protocolVersion, 1);
69
70     ODR_MASK_ZERO(&options);
71     ODR_MASK_SET(&options, 0);
72     ODR_MASK_SET(&options, 1);
73     ODR_MASK_SET(&options, 2);
74
75     ireq.referenceId = 0;
76     ireq.protocolVersion = &protocolVersion;
77     ireq.options = &options;
78     ireq.preferredMessageSize = &preferredMS;
79     ireq.maximumRecordSize = &maximumRS;
80     ireq.idAuthentication = 0;
81     ireq.implementationId = iId;
82     ireq.implementationName = iName;
83     ireq.implementationVersion = iVersion;
84     ireqp = &ireq;
85
86     o.buf = buf;
87     o.bp=o.buf;
88     o.left = o.buflen = 1024;
89     o.direction = ODR_ENCODE;
90     o.t_class = -1;
91
92     odr_oid(&o, &oidp1, 0);
93
94     o.direction = ODR_DECODE;
95     o.bp = o.buf;
96
97     odr_oid(&o, &oidp2, 0);
98 }