Updated footer comment
[yazpp-moved-to-github.git] / zlint / test-init-06.cpp
1 /* This file is part of the yazpp toolkit.
2  * Copyright (C) 1998-2009 Index Data and Mike Taylor
3  * See the file LICENSE for details.
4  */
5
6 #include <yaz/log.h>
7
8 #include <zlint.h>
9
10 Zlint_test_init_06::Zlint_test_init_06()
11 {
12 }
13
14 Zlint_test_init_06::~Zlint_test_init_06()
15 {
16 }
17
18 Zlint_code Zlint_test_init_06::init(Zlint *z)
19 {
20     int len;
21     Z_APDU *apdu = z->create_Z_PDU(Z_APDU_initRequest);
22     Z_InitRequest *init = apdu->u.initRequest;
23
24     z->msg_check_for("for init options");
25     
26     /* set all options.. see what target really supports .. */
27     ODR_MASK_SET(init->protocolVersion, Z_ProtocolVersion_3);
28     ODR_MASK_ZERO(init->options);
29     int i;
30     for (i = 0; i <= 24; i++)
31         ODR_MASK_SET(init->options, i);
32
33     int r = z->send_Z_PDU(apdu, &len);
34     if (r < 0)
35     {
36         z->msg_check_fail("unable to send init request");
37         return TEST_FINISHED;
38     }
39     return TEST_CONTINUE;
40 }
41
42 Zlint_code Zlint_test_init_06::recv_gdu(Zlint *z, Z_GDU *gdu)
43 {
44     if (gdu->which == Z_GDU_Z3950 &&
45         gdu->u.z3950 && gdu->u.z3950->which == Z_APDU_initResponse)
46     {
47         Z_InitResponse *init = gdu->u.z3950->u.initResponse;
48         
49         if (init->options)
50         {
51             int i;
52             int no_set = 0;
53             int no_reset = 0;
54             for (i = 0; i <= 24; i++)
55                 if (ODR_MASK_GET(init->options, i))
56                     no_set++;
57                 else
58                     no_reset++;
59             if (no_set < 2)
60             {
61                 z->msg_check_fail("suspicuously few option bits set");
62                 return TEST_FINISHED;
63             }
64             if (no_reset == 0)
65             {
66                 z->msg_check_fail("suspicuously many option bits set");
67                 return TEST_FINISHED;
68             }
69         }
70         z->msg_check_ok();
71     }
72     else
73         z->msg_check_fail("did not receive init response as expected");
74     return TEST_FINISHED;
75 }
76
77
78 /*
79  * Local variables:
80  * c-basic-offset: 4
81  * c-file-style: "Stroustrup"
82  * indent-tabs-mode: nil
83  * End:
84  * vim: shiftwidth=4 tabstop=8 expandtab
85  */
86