X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=odr%2Ftest.c;h=77506f9c707a5f479569f12de015212a0f52fb24;hb=a372d45e267573f7c0f53759de3db81ec1237383;hp=94e0aa962af3e2932b264b9bd061429b41ce19f9;hpb=173d9f50b7a6c63dff6c74dc5c3efe985f75ef39;p=yaz-moved-to-github.git diff --git a/odr/test.c b/odr/test.c index 94e0aa9..77506f9 100644 --- a/odr/test.c +++ b/odr/test.c @@ -1,13 +1,14 @@ #include #include +#include -typedef ODR_BITMASK Z_ReferenceId; +typedef Odr_bitmask Z_ReferenceId; typedef struct Z_InitRequest { Z_ReferenceId *referenceId; /* OPTIONAL */ - ODR_BITMASK *options; - ODR_BITMASK *protocolVersion; + Odr_bitmask *options; + Odr_bitmask *protocolVersion; int *preferredMessageSize; int *maximumRecordSize; char *idAuthentication; /* OPTIONAL */ @@ -18,7 +19,7 @@ typedef struct Z_InitRequest int z_ReferenceId(ODR o, Z_ReferenceId **p, int opt) { - return odr_implicit(o, odr_octetstring, (ODR_OCT**) p, ODR_CONTEXT, 2, opt); + return odr_implicit(o, odr_octetstring, (Odr_oct**) p, ODR_CONTEXT, 2, opt); } int z_InitRequest(ODR o, Z_InitRequest **p, int opt) @@ -48,16 +49,51 @@ int z_InitRequest(ODR o, Z_InitRequest **p, int opt) odr_sequence_end(o); } +struct A +{ + int which; + union + { + int *b; /* integer */ + char *c; /* visstring */ + } u; +}; + +int f_A(ODR o, struct A **p, int opt) +{ + int res; + Odr_arm arm[] = + { + { -1, -1, -1, 0, (Odr_fun) odr_integer }, + { ODR_IMPLICIT, ODR_CONTEXT, 200, 1, (Odr_fun) odr_visiblestring }, + { -1, -1, -1, -1, 0 } + }; + + if (o->direction == ODR_DECODE && !*p) + *p = nalloc(o, sizeof(**p)); + res = odr_choice(o, arm, &(*p)->u, &(*p)->which); + if (!res) + { + *p = 0; + return opt; + } + return 1; +} + +#if 0 int main() { int i; unsigned char buf[4048]; struct odr o; Z_InitRequest ireq, *ireqp, *ireq2p; - ODR_BITMASK options, protocolVersion; + Odr_bitmask options, protocolVersion; char *iId = "YAZ", *iName = "Yet Another Z39.50 Implementation", *iVersion = "0.1"; int maximumRS = 4096, preferredMS = 2048; + static Odr_oid oid[] = {1, 2, 3, 4, -1}, *oidp1, *oidp2; + + oidp1 = oid; ODR_MASK_ZERO(&protocolVersion); ODR_MASK_SET(&protocolVersion, 0); @@ -82,13 +118,45 @@ int main() o.buf = buf; o.bp=o.buf; o.left = o.buflen = 1024; - o.direction = ODR_ENCODE; + o.direction = ODR_PRINT; + o.print = stdout; o.t_class = -1; - z_InitRequest(&o, &ireqp, 0); + odr_oid(&o, &oidp1, 0); + + exit(0); o.direction = ODR_DECODE; o.bp = o.buf; - z_InitRequest(&o, &ireq2p, 0); + odr_oid(&o, &oidp2, 0); } +#endif + +int main() +{ + struct A ch, *chp1, *chp2; + int b = 9999; + char *c = "Nu tester vi en satans forpulet CHOICE!"; + struct odr o; + unsigned char buf[4096]; + + ch.u.c = c; + ch.which = 1; + chp1 = &ch; + + o.buf = buf; + o.bp=o.buf; + o.left = o.buflen = 1024; + o.direction = ODR_ENCODE; + o.t_class = -1; + + f_A(&o, &chp1, 0); + + o.direction = ODR_DECODE; + o.bp = o.buf; + + f_A(&o, &chp2, 0); + + return 0; +}