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