Added 'name' paramter to encoder/decoder routines (typedef Odr_fun).
[yaz-moved-to-github.git] / asn / prt-exd.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-exd.c,v $
7  * Revision 1.9  1999-04-20 09:56:48  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.8  1998/02/11 11:53:32  adam
12  * Changed code so that it compiles as C++.
13  *
14  * Revision 1.7  1998/02/10 15:31:46  adam
15  * Implemented date and time structure. Changed the Update Extended
16  * Service.
17  *
18  * Revision 1.6  1998/01/05 09:04:57  adam
19  * Fixed bugs in encoders/decoders - Not operator (!) missing.
20  *
21  * Revision 1.5  1997/04/30 08:52:02  quinn
22  * Null
23  *
24  * Revision 1.4  1996/10/10  12:35:12  quinn
25  * Added Update extended service.
26  *
27  * Revision 1.3  1995/09/29  17:11:54  quinn
28  * Smallish
29  *
30  * Revision 1.2  1995/09/27  15:02:41  quinn
31  * Modified function heads & prototypes.
32  *
33  * Revision 1.1  1995/08/21  09:16:32  quinn
34  * Added Extended services + Item Order
35  *
36  *
37  */
38
39 #include <proto.h>
40
41 int z_TaskPackage(ODR o, Z_TaskPackage **p, int opt, const char *name)
42 {
43     if (!odr_sequence_begin(o, p, sizeof(**p), 0))
44         return opt && odr_ok(o);
45     return
46         odr_implicit(o, odr_oid, &(*p)->packageType, ODR_CONTEXT, 1, 0) &&
47         odr_implicit(o, z_InternationalString, &(*p)->packageName,
48                      ODR_CONTEXT, 2, 1) &&
49         odr_implicit(o, z_InternationalString, &(*p)->userId,
50                      ODR_CONTEXT, 3, 1) &&
51         odr_implicit(o, z_IntUnit, &(*p)->retentionTime, ODR_CONTEXT, 4, 1) &&
52         odr_implicit(o, z_Permissions, &(*p)->permissions,
53                      ODR_CONTEXT, 5, 1) &&
54         odr_implicit(o, z_InternationalString, &(*p)->description,
55                      ODR_CONTEXT, 6, 1) &&
56         odr_implicit(o, odr_octetstring, &(*p)->targetReference,
57                      ODR_CONTEXT, 7, 0) &&
58         odr_implicit(o, odr_generalizedtime, &(*p)->creationDateTime,
59                      ODR_CONTEXT, 8, 1) &&
60         odr_implicit(o, odr_integer, &(*p)->taskStatus,
61                      ODR_CONTEXT, 9, 0) &&
62         odr_implicit_settag(o, ODR_CONTEXT, 10) &&
63         (odr_sequence_of(o, (Odr_fun)z_DiagRec, &(*p)->packageDiagnostics,
64                          &(*p)->num_packageDiagnostics, 0) || odr_ok(o)) &&
65         odr_implicit(o, z_External, &(*p)->taskSpecificParameters,
66                      ODR_CONTEXT, 11, 0) &&
67         odr_sequence_end(o);
68 }
69
70 /* ----------------------- ITEM ORDER --------------------- */
71
72 int z_IOTargetPart(ODR o, Z_IOTargetPart **p, int opt, const char *name)
73 {
74     if (!odr_sequence_begin(o, p, sizeof(**p), 0))
75         return opt && odr_ok(o);
76     return
77         odr_implicit(o, z_External, &(*p)->itemRequest, ODR_CONTEXT, 1, 1) &&
78         odr_implicit(o, z_External, &(*p)->statusOrErrorReport, ODR_CONTEXT,
79             2, 0) &&
80         odr_implicit(o, odr_integer, &(*p)->auxiliaryStatus, ODR_CONTEXT,
81             3, 1) &&
82         odr_sequence_end(o);
83 }
84
85 int z_IOResultSetItem(ODR o, Z_IOResultSetItem **p, int opt, const char *name)
86 {
87     if (!odr_sequence_begin(o, p, sizeof(**p), 0))
88         return opt && odr_ok(o);
89     return
90         odr_implicit(o, z_InternationalString, &(*p)->resultSetId, ODR_CONTEXT,
91             1, 0) &&
92         odr_implicit(o, odr_integer, &(*p)->item, ODR_CONTEXT, 2, 1) &&
93         odr_sequence_end(o);
94 }
95
96 int z_IOOriginPartNotToKeep(ODR o, Z_IOOriginPartNotToKeep **p, int opt,
97                             const char *name)
98 {
99     if (!odr_sequence_begin(o, p, sizeof(**p), 0))
100         return opt && odr_ok(o);
101     return
102         odr_implicit(o, z_IOResultSetItem, &(*p)->resultSetItem, ODR_CONTEXT,
103             1, 0) &&
104         odr_implicit(o, z_External, &(*p)->itemRequest, ODR_CONTEXT, 2, 1) &&
105         odr_sequence_end(o);
106 }
107
108 int z_IOContact(ODR o, Z_IOContact **p, int opt, const char *name)
109 {
110     if (!odr_sequence_begin(o, p, sizeof(**p), 0))
111         return opt && odr_ok(o);
112     return
113         odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT,
114             1, 1) &&
115         odr_implicit(o, z_InternationalString, &(*p)->phone, ODR_CONTEXT,
116             2, 1) &&
117         odr_implicit(o, z_InternationalString, &(*p)->email, ODR_CONTEXT,
118             3, 1) &&
119         odr_sequence_end(o);
120 }
121
122 int z_IOCreditCardInfo(ODR o, Z_IOCreditCardInfo **p, int opt,
123                        const char *name)
124 {
125     if (!odr_sequence_begin(o, p, sizeof(**p), 0))
126         return opt && odr_ok(o);
127     return
128         odr_implicit(o, z_InternationalString, &(*p)->nameOnCard, ODR_CONTEXT,
129             1, 0) &&
130         odr_implicit(o, z_InternationalString, &(*p)->expirationDate,
131             ODR_CONTEXT, 2, 0) &&
132         odr_implicit(o, z_InternationalString, &(*p)->cardNumber, ODR_CONTEXT,
133             3, 0) &&
134         odr_sequence_end(o);
135 }
136
137 int z_IOBilling(ODR o, Z_IOBilling **p, int opt, const char *name)
138 {
139     static Odr_arm arm[] =
140     {
141         {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_IOBilling_billInvoice,
142          (Odr_fun)odr_null, 0},
143         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_IOBilling_prepay,
144          (Odr_fun)odr_null, 0},
145         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_IOBilling_depositAccount,
146          (Odr_fun)odr_null, 0},
147         {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_IOBilling_creditCard,
148          (Odr_fun)z_IOCreditCardInfo, 0},
149         {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_IOBilling_cardInfoPreviouslySupplied,
150          (Odr_fun)odr_null, 0},
151         {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_IOBilling_privateKnown,
152          (Odr_fun)odr_null, 0},
153         {ODR_IMPLICIT, ODR_CONTEXT, 6, Z_IOBilling_privateNotKnown,
154          (Odr_fun)z_External, 0},
155         {-1, -1, -1, -1, 0, 0}
156     };
157     
158     if (!odr_sequence_begin(o, p, sizeof(**p), 0))
159         return opt && odr_ok(o);
160     return
161         odr_constructed_begin(o, &(*p)->paymentMethod,
162                               ODR_CONTEXT, 1, 0) &&
163         odr_choice(o, arm, &(*p)->paymentMethod, &(*p)->which, 0) &&
164         odr_constructed_end(o) &&
165         odr_implicit(o, z_InternationalString, &(*p)->customerReference,
166                      ODR_CONTEXT, 2, 1) &&
167         odr_implicit(o, z_InternationalString, &(*p)->customerPONumber,
168                      ODR_CONTEXT, 3, 1) &&
169         odr_sequence_end(o);
170 }
171
172 int z_IOOriginPartToKeep(ODR o, Z_IOOriginPartToKeep **p, int opt,
173                          const char *name)
174 {
175     if (!odr_sequence_begin(o, p, sizeof(**p), 0))
176         return opt && odr_ok(o);
177     return
178         odr_implicit(o, z_External, &(*p)->supplDescription,
179                      ODR_CONTEXT, 1, 1) &&
180         odr_implicit(o, z_IOContact, &(*p)->contact, ODR_CONTEXT, 2, 1) &&
181         odr_implicit(o, z_IOBilling, &(*p)->addlBilling,
182                      ODR_CONTEXT, 3, 1) &&
183         odr_sequence_end(o);
184 }
185
186 int z_IORequest(ODR o, Z_IORequest **p, int opt, const char *name)
187 {
188     if (!odr_sequence_begin(o, p, sizeof(**p), 0))
189         return opt && odr_ok(o);
190     return 
191         odr_implicit(o, z_IOOriginPartToKeep, &(*p)->toKeep,
192                      ODR_CONTEXT, 1, 1) &&
193         odr_implicit(o, z_IOOriginPartNotToKeep, &(*p)->notToKeep,
194                      ODR_CONTEXT, 2, 0) &&
195         odr_sequence_end(o);
196 }
197
198 int z_IOTaskPackage(ODR o, Z_IOTaskPackage **p, int opt, const char *name)
199 {
200     if (!odr_sequence_begin(o, p, sizeof(**p), 0))
201         return opt && odr_ok(o);
202     return
203         odr_implicit(o, z_IOOriginPartToKeep, &(*p)->originPart,
204                      ODR_CONTEXT, 1, 1) &&
205         odr_implicit(o, z_IOTargetPart, &(*p)->targetPart,
206                      ODR_CONTEXT, 2, 0) &&
207         odr_sequence_end(o);
208 }
209
210 int z_ItemOrder(ODR o, Z_ItemOrder **p, int opt, const char *name)
211 {
212     static Odr_arm arm[] =
213     {
214         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ItemOrder_esRequest,
215          (Odr_fun)z_IORequest, 0},
216         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ItemOrder_taskPackage,
217          (Odr_fun)z_IOTaskPackage, 0},
218         {-1, -1, -1, -1, 0, 0}
219     };
220     
221     if (o->direction == ODR_DECODE)
222         *p = (Z_ItemOrder *)odr_malloc(o, sizeof(**p));
223     else if (!*p)
224         return opt;
225     if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
226         return 1;
227     *p = 0;
228     return opt && odr_ok(o);
229 }
230
231 /* ----------------------- ITEM UPDATE -------------------- */
232
233 int z_IUSuppliedRecordsId (ODR o, Z_IUSuppliedRecordsId **p, int opt,
234                            const char *name)
235 {
236     static Odr_arm arm[] = {
237         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_IUSuppliedRecordsId_timeStamp,
238          odr_generalizedtime, 0},
239         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_IUSuppliedRecordsId_versionNumber,
240          z_InternationalString, 0},
241         {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_IUSuppliedRecordsId_previousVersion,
242          (Odr_fun)odr_external, 0},
243         {-1, -1, -1, -1, 0, 0}
244     };
245     if (!odr_initmember(o, p, sizeof(**p)))
246         return opt && odr_ok(o);
247     if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
248         return 1;
249     *p = 0;
250     return opt && odr_ok(o);
251 }
252
253 int z_IUCorrelationInfo (ODR o, Z_IUCorrelationInfo **p, int opt,
254                          const char *name)
255 {
256     if (!odr_sequence_begin (o, p, sizeof(**p), 0))
257         return opt && odr_ok (o);
258     return
259         odr_implicit (o, z_InternationalString,
260                       &(*p)->note, ODR_CONTEXT, 1, 1) &&
261         odr_implicit (o, odr_integer,
262                       &(*p)->id, ODR_CONTEXT, 2, 1) &&
263         odr_sequence_end (o);
264 }
265
266 int z_IUSuppliedRecords_elem (ODR o, Z_IUSuppliedRecords_elem **p, int opt,
267                               const char *name)
268 {
269     static Odr_arm arm[] = {
270         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_IUSuppliedRecords_number,
271          (Odr_fun)odr_integer, 0},
272         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_IUSuppliedRecords_string,
273          (Odr_fun)z_InternationalString, 0},
274         {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_IUSuppliedRecords_opaque,
275          (Odr_fun)odr_octetstring, 0},
276         {-1, -1, -1, -1, 0, 0}
277     };
278     if (!odr_sequence_begin (o, p, sizeof(**p), 0))
279         return opt && odr_ok (o);
280     return
281         ((odr_constructed_begin (o, &(*p)->u, ODR_CONTEXT, 1, 0) &&
282           odr_choice (o, arm, &(*p)->u, &(*p)->which, 0) &&
283           odr_constructed_end (o)) || odr_ok(o)) &&
284         odr_explicit (o, z_IUSuppliedRecordsId,
285                       &(*p)->supplementalId, ODR_CONTEXT, 2, 1) &&
286         odr_implicit (o, z_IUCorrelationInfo,
287                       &(*p)->correlationInfo, ODR_CONTEXT, 3, 1) &&
288         odr_implicit (o, odr_external,
289                       &(*p)->record, ODR_CONTEXT, 4, 0) &&
290         odr_sequence_end (o);
291 }
292
293 int z_IUSuppliedRecords (ODR o, Z_IUSuppliedRecords **p, int opt,
294                          const char *name)
295 {
296     if (!odr_initmember (o, p, sizeof(**p)))
297         return opt && odr_ok(o);
298     if (odr_sequence_of (o, (Odr_fun)z_IUSuppliedRecords_elem, &(*p)->elements,
299                          &(*p)->num, 0))
300         return 1;
301     *p = 0;
302     return opt && odr_ok(o);
303 }
304
305 int z_IUTaskPackageRecordStructure (ODR o, Z_IUTaskPackageRecordStructure **p,
306                                     int opt, const char *name)
307 {
308     static Odr_arm arm[] = {
309         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_IUTaskPackageRecordStructure_record,
310          (Odr_fun)odr_external, 0},
311         {ODR_EXPLICIT, ODR_CONTEXT, 2,
312          Z_IUTaskPackageRecordStructure_surrogateDiagnostics,
313          (Odr_fun)z_DiagRecs, 0},
314         {-1, -1, -1, -1, 0, 0}
315     };
316     if (!odr_sequence_begin (o, p, sizeof(**p), 0))
317         return opt && odr_ok (o);
318     return
319         ((odr_constructed_begin (o, &(*p)->u, ODR_CONTEXT, 1, 0) &&
320           odr_choice (o, arm, &(*p)->u, &(*p)->which, 0) &&
321           odr_constructed_end (o)) || odr_ok(o)) &&
322         odr_implicit (o, z_IUCorrelationInfo,
323                       &(*p)->correlationInfo, ODR_CONTEXT, 2, 1) &&
324         odr_implicit (o, odr_integer,
325                       &(*p)->recordStatus, ODR_CONTEXT, 3, 0) &&
326         odr_implicit (o, z_DiagRecs, 
327                       &(*p)->supplementalDiagnostics, ODR_CONTEXT, 4, 1) &&
328         odr_sequence_end (o);
329 }
330
331 int z_IUOriginPartToKeep (ODR o, Z_IUOriginPartToKeep **p, int opt,
332                           const char *name)
333 {
334     if (!odr_sequence_begin (o, p, sizeof(**p), 0))
335         return opt && odr_ok (o);
336     return
337         odr_implicit (o, odr_integer,
338                       &(*p)->action, ODR_CONTEXT, 1, 0) &&
339         odr_implicit (o, z_InternationalString,
340                       &(*p)->databaseName, ODR_CONTEXT, 2, 0) &&
341         odr_implicit (o, odr_oid,
342                       &(*p)->schema, ODR_CONTEXT, 3, 1) &&
343         odr_implicit (o, z_InternationalString,
344                       &(*p)->elementSetName, ODR_CONTEXT, 4, 1) &&
345         odr_implicit (o, odr_external,
346                       &(*p)->actionQualifier, ODR_CONTEXT, 5, 1) &&
347         odr_sequence_end (o);
348 }
349
350 int z_IUTargetPart (ODR o, Z_IUTargetPart **p, int opt, const char *name)
351 {
352     if (!odr_sequence_begin (o, p, sizeof(**p), 0))
353         return opt && odr_ok (o);
354     return
355         odr_implicit (o, odr_integer,
356                       &(*p)->updateStatus, ODR_CONTEXT, 1, 0) &&
357         odr_implicit_settag (o, ODR_CONTEXT, 2) &&
358         (odr_sequence_of(o, (Odr_fun)z_DiagRec, &(*p)->globalDiagnostics,
359                          &(*p)->num_globalDiagnostics, 0) || odr_ok(o)) &&
360         odr_implicit_settag (o, ODR_CONTEXT, 3) &&
361         odr_sequence_of(o, (Odr_fun)z_IUTaskPackageRecordStructure,
362                         &(*p)->taskPackageRecords,
363                         &(*p)->num_taskPackageRecords, 0) &&
364         odr_sequence_end (o);
365 }
366
367 int z_IUUpdateEsRequest (ODR o, Z_IUUpdateEsRequest **p, int opt,
368                          const char *name)
369 {
370     if (!odr_sequence_begin (o, p, sizeof(**p), 0))
371         return opt && odr_ok (o);
372     return
373         odr_explicit (o, z_IUOriginPartToKeep,
374                       &(*p)->toKeep, ODR_CONTEXT, 1, 0) &&
375         odr_explicit (o, z_IUSuppliedRecords,
376                       &(*p)->notToKeep, ODR_CONTEXT, 2, 0) &&
377         odr_sequence_end (o);
378 }
379
380 int z_IUUpdateTaskPackage (ODR o, Z_IUUpdateTaskPackage **p, int opt,
381                            const char *name)
382 {
383     if (!odr_sequence_begin (o, p, sizeof(**p), 0))
384         return opt && odr_ok (o);
385     return
386         odr_explicit (o, z_IUOriginPartToKeep,
387                       &(*p)->originPart, ODR_CONTEXT, 1, 0) &&
388         odr_explicit (o, z_IUTargetPart,
389                       &(*p)->targetPart, ODR_CONTEXT, 2, 0) &&
390         odr_sequence_end (o);
391 }
392
393 int z_IUUpdate (ODR o, Z_IUUpdate **p, int opt, const char *name)
394 {
395     static Odr_arm arm[] = {
396         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_IUUpdate_esRequest,
397          (Odr_fun)z_IUUpdateEsRequest, 0},
398         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_IUUpdate_taskPackage,
399          (Odr_fun)z_IUUpdateTaskPackage, 0},
400         {-1, -1, -1, -1, 0, 0}
401     };
402     if (!odr_initmember(o, p, sizeof(**p)))
403         return opt && odr_ok(o);
404     if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
405         return 1;
406     *p = 0;
407     return opt && odr_ok(o);
408 }