Fixed problem with proto.h.
[yaz-moved-to-github.git] / asn / prt-acc.c
1 /*
2  * Copyright (c) 1995-1999, Index Data.
3  * See the file LICENSE for details.
4  * Sebastian Hammer, Adam Dickmeiss
5  *
6  * $Log: prt-acc.c,v $
7  * Revision 1.8  1999-04-20 09:56:47  adam
8  * Added 'name' paramter to encoder/decoder routines (typedef Odr_fun).
9  * Modified all encoders/decoders to reflect this change.
10  *
11  * Revision 1.7  1998/02/11 11:53:32  adam
12  * Changed code so that it compiles as C++.
13  *
14  * Revision 1.6  1998/01/05 09:04:57  adam
15  * Fixed bugs in encoders/decoders - Not operator (!) missing.
16  *
17  * Revision 1.5  1995/09/29 17:11:53  quinn
18  * Smallish
19  *
20  * Revision 1.4  1995/09/27  15:02:41  quinn
21  * Modified function heads & prototypes.
22  *
23  * Revision 1.3  1995/08/15  11:59:41  quinn
24  * Updated External
25  *
26  * Revision 1.2  1995/06/05  10:52:05  quinn
27  * Fixed some negligences.
28  *
29  * Revision 1.1  1995/06/02  09:49:15  quinn
30  * Adding access control
31  *
32  *
33  */
34
35 #include <proto.h>
36
37 int z_Encryption1(ODR o, Z_Encryption1 **p, int opt, const char *name)
38 {
39     if (!odr_sequence_begin(o, p, sizeof(**p), 0))
40         return opt && odr_ok(o);
41     return
42         odr_implicit(o, odr_octetstring, &(*p)->cryptType,
43                      ODR_CONTEXT, 1, 1) &&
44         odr_implicit(o, odr_octetstring, &(*p)->credential,
45                      ODR_CONTEXT, 2, 1) &&
46         odr_implicit(o, odr_octetstring, &(*p)->data, ODR_CONTEXT, 3, 0) &&
47         odr_sequence_end(o);
48 }
49
50 int z_EnumeratedPrompt1(ODR o, Z_EnumeratedPrompt1 **p, int opt,
51                         const char *name)
52 {
53     if (!odr_sequence_begin(o, p, sizeof(**p), 0))
54         return opt && odr_ok(o);
55     return
56         odr_implicit(o, odr_integer, &(*p)->type, ODR_CONTEXT, 1, 0) &&
57         odr_implicit(o, odr_visiblestring, &(*p)->suggestedString, ODR_CONTEXT,
58                      2, 1) &&
59         odr_sequence_end(o);
60 }
61
62 int z_PromptId1(ODR o, Z_PromptId1 **p, int opt, const char *name)
63 {
64     static Odr_arm arm[] =
65     {
66         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_PromptId1_enumeratedPrompt,
67          (Odr_fun)z_EnumeratedPrompt1, 0},
68         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_PromptId1_nonEnumeratedPrompt,
69          odr_visiblestring, 0},
70         {-1, -1, -1, -1, 0, 0}
71     };
72     
73     if (o->direction == ODR_DECODE)
74         *p = (Z_PromptId1 *)odr_malloc(o, sizeof(**p));
75     else if (!*p)
76         return opt;
77     if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
78         return 1;
79     *p = 0;
80     return opt && odr_ok(o);
81 }
82
83 int z_PromptInfo1(ODR o, Z_PromptInfo1 **p, int opt, const char *name)
84 {
85     static Odr_arm arm[] =
86     {
87         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Challenge1_character,
88          odr_visiblestring, 0},
89         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Challenge1_encrypted,
90          (Odr_fun)z_Encryption1, 0},
91         {-1, -1, -1, -1, 0, 0}
92     };
93     
94     if (o->direction == ODR_DECODE)
95         *p = (Z_PromptInfo1 *)odr_malloc(o, sizeof(**p));
96     else if (!*p)
97         return opt;
98     if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
99         return 1;
100     *p = 0;
101     return opt && odr_ok(o);
102 }
103
104 int z_ChallengeUnit1(ODR o, Z_ChallengeUnit1 **p, int opt, const char *name)
105 {
106     if (!odr_sequence_begin(o, p, sizeof(**p), 0))
107         return opt && odr_ok(o);
108     return
109         odr_explicit(o, z_PromptId1, &(*p)->promptId, ODR_CONTEXT, 1, 0) &&
110         odr_implicit(o, odr_visiblestring, &(*p)->defaultResponse,
111                      ODR_CONTEXT, 2, 1) &&
112         odr_explicit(o, z_PromptInfo1, &(*p)->promptInfo,
113                      ODR_CONTEXT, 3, 1) &&
114         odr_implicit(o, odr_visiblestring, &(*p)->regExpr,
115                      ODR_CONTEXT, 4, 1) &&
116         odr_implicit(o, odr_null, &(*p)->responseRequired,
117                      ODR_CONTEXT, 5, 1) &&
118         odr_implicit_settag(o, ODR_CONTEXT, 6) &&
119         (odr_sequence_of(o, odr_visiblestring, &(*p)->allowedValues,
120                          &(*p)->num_values, 0) || odr_ok(o)) &&
121         odr_implicit(o, odr_null, &(*p)->shouldSave, ODR_CONTEXT, 7, 1) &&
122         odr_implicit(o, odr_integer, &(*p)->dataType, ODR_CONTEXT, 8, 1) &&
123         odr_implicit(o, z_External, &(*p)->diagnostic, ODR_CONTEXT, 9, 1) &&
124         odr_sequence_end(o);
125 }
126
127 int z_Challenge1(ODR o, Z_Challenge1 **p, int opt, const char *name)
128 {
129     if (o->direction == ODR_ENCODE)
130         *p = (Z_Challenge1 *)odr_malloc(o, sizeof(**p));
131     else if (!*p)
132         return opt;
133     if (odr_sequence_of(o, (Odr_fun)z_ChallengeUnit1, &(*p)->list,
134                         &(*p)->num_challenges, 0))
135         return 1;
136     *p = 0;
137     return opt && odr_ok(o);
138 }
139
140 int z_ResponseUnit1(ODR o, Z_ResponseUnit1 **p, int opt, const char *name)
141 {
142     static Odr_arm arm[] = 
143     {
144         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Response1_string,
145          odr_visiblestring, 0},
146         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Response1_accept,
147          (Odr_fun)odr_bool, 0},
148         {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Response1_acknowledge,
149          (Odr_fun)odr_null, 0},
150         {ODR_EXPLICIT, ODR_CONTEXT, 4, Z_Response1_diagnostic,
151          (Odr_fun)z_DiagRec, 0},
152         {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_Response1_encrypted,
153          (Odr_fun)z_Encryption1, 0},
154         {-1, -1, -1, -1, 0, 0}
155     };
156     
157     if (!odr_sequence_begin(o, p, sizeof(**p), 0))
158         return opt && odr_ok(o);
159     return
160         odr_explicit(o, z_PromptId1, &(*p)->promptId, ODR_CONTEXT, 1, 0) &&
161         odr_constructed_begin(o, p, ODR_CONTEXT, 2, 0) &&
162         odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) &&
163         odr_constructed_end(o) &&
164         odr_sequence_end(o);
165 }
166
167 int z_Response1(ODR o, Z_Response1 **p, int opt, const char *name)
168 {
169     if (o->direction == ODR_ENCODE)
170         *p = (Z_Response1 *)odr_malloc(o, sizeof(**p));
171     else if (!*p)
172         return opt;
173     if (odr_sequence_of(o, (Odr_fun)z_ResponseUnit1, &(*p)->list,
174                         &(*p)->num_responses, 0))
175         return 1;
176     *p = 0;
177     return opt && odr_ok(o);
178 }
179
180 int z_PromptObject1(ODR o, Z_PromptObject1 **p, int opt, const char *name)
181 {
182     static Odr_arm arm[] =
183     {
184         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_PromptObject1_challenge,
185          (Odr_fun)z_Challenge1, 0},
186         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_PromptObject1_response,
187          (Odr_fun)z_Response1, 0},
188         {-1, -1, -1, -1, 0, 0}
189     };
190     
191     if (o->direction == ODR_DECODE)
192         *p = (Z_PromptObject1 *)odr_malloc(o, sizeof(**p));
193     else if (!*p)
194         return opt;
195     if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
196         return 1;
197     *p = 0;
198     return opt && odr_ok(o);
199 }