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