4 typedef ODR_BITMASK Z_ReferenceId;
6 typedef struct Z_InitRequest
8 Z_ReferenceId *referenceId; /* OPTIONAL */
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 */
19 int z_ReferenceId(ODR o, Z_ReferenceId **p, int opt)
21 return odr_implicit(o, odr_octetstring, (ODR_OCT**) p, ODR_CONTEXT, 2, opt);
24 int z_InitRequest(ODR o, Z_InitRequest **p, int opt)
28 if (!odr_sequence_begin(o, p, sizeof(Z_InitRequest)))
32 z_ReferenceId(o, &pp->referenceId, 1) &&
33 odr_implicit(o, odr_bitstring, &pp->protocolVersion, ODR_CONTEXT,
35 odr_implicit(o, odr_bitstring, &pp->options, ODR_CONTEXT, 4, 0) &&
36 odr_implicit(o, odr_integer, &pp->preferredMessageSize, ODR_CONTEXT,
38 odr_implicit(o, odr_integer, &pp->maximumRecordSize, ODR_CONTEXT,
40 odr_implicit(o, odr_visiblestring, &pp->idAuthentication, ODR_CONTEXT,
42 odr_implicit(o, odr_visiblestring, &pp->implementationId, ODR_CONTEXT,
44 odr_implicit(o, odr_visiblestring, &pp->implementationName, ODR_CONTEXT,
46 odr_implicit(o, odr_visiblestring, &pp->implementationVersion,
47 ODR_CONTEXT, 112, 1) &&
54 unsigned char buf[4048];
56 Z_InitRequest ireq, *ireqp, *ireq2p;
57 ODR_BITMASK options, protocolVersion;
58 char *iId = "YAZ", *iName = "Yet Another Z39.50 Implementation",
60 int maximumRS = 4096, preferredMS = 2048;
62 ODR_MASK_ZERO(&protocolVersion);
63 ODR_MASK_SET(&protocolVersion, 0);
64 ODR_MASK_SET(&protocolVersion, 1);
66 ODR_MASK_ZERO(&options);
67 ODR_MASK_SET(&options, 0);
68 ODR_MASK_SET(&options, 1);
69 ODR_MASK_SET(&options, 2);
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;
84 o.left = o.buflen = 1024;
85 o.direction = ODR_ENCODE;
88 z_InitRequest(&o, &ireqp, 0);
90 o.direction = ODR_DECODE;
93 z_InitRequest(&o, &ireq2p, 0);