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