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