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