6ae2989f315ffaec0f174ed5eb36e4b15d79f6d9
[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.1  1995-08-21 09:16:32  quinn
8  * Added Extended services + Item Order
9  *
10  *
11  */
12
13 #include <proto.h>
14
15 int z_TaskPackage(ODR o, Z_TaskPackage **p, int opt)
16 {
17     if (!odr_sequence_begin(o, p, sizeof(**p)))
18         return opt && odr_ok(o);
19     return
20         odr_implicit(o, odr_oid, &(*p)->packageType, ODR_CONTEXT, 1, 0) &&
21         odr_implicit(o, z_InternationalString, &(*p)->packageName, ODR_CONTEXT,
22             2, 1) &&
23         odr_implicit(o, z_InternationalString, &(*p)->userId, ODR_CONTEXT,
24             3, 1) &&
25         odr_implicit(o, z_IntUnit, &(*p)->retentionTime, ODR_CONTEXT, 4, 1) &&
26         odr_implicit(o, z_Permissions, &(*p)->permissions, ODR_CONTEXT, 5, 1) &&
27         odr_implicit(o, z_InternationalString, &(*p)->description, ODR_CONTEXT,
28             6, 1) &&
29         odr_implicit(o, odr_octetstring, &(*p)->targetReference, ODR_CONTEXT,
30             7, 0) &&
31         odr_implicit(o, odr_generalizedtime, &(*p)->creationDateTime,
32             ODR_CONTEXT,
33             8, 1) &&
34         odr_implicit(o, odr_integer, &(*p)->taskStatus, ODR_CONTEXT, 9, 0) &&
35         odr_implicit_settag(o, ODR_CONTEXT, 10) &&
36         (odr_sequence_of(o, z_DiagRec, &(*p)->packageDiagnostics,
37             &(*p)->num_packageDiagnostics) || odr_ok(o)) &&
38         odr_implicit(o, z_External, &(*p)->taskSpecificParameters, ODR_CONTEXT,
39             11, 0) &&
40         odr_sequence_end(o);
41 }
42
43 /* ----------------------- ITEM ORDER --------------------- */
44
45 int z_IOTargetPart(ODR o, Z_IOTargetPart **p, int opt)
46 {
47     if (!odr_sequence_begin(o, p, sizeof(**p)))
48         return opt && odr_ok(o);
49     return
50         odr_implicit(o, z_External, &(*p)->itemRequest, ODR_CONTEXT, 1, 1) &&
51         odr_implicit(o, z_External, &(*p)->statusOrErrorReport, ODR_CONTEXT,
52             2, 0) &&
53         odr_implicit(o, odr_integer, &(*p)->auxiliaryStatus, ODR_CONTEXT,
54             3, 1) &&
55         odr_sequence_end(o);
56 }
57
58 int z_IOResultSetItem(ODR o, Z_IOResultSetItem **p, int opt)
59 {
60     if (!odr_sequence_begin(o, p, sizeof(**p)))
61         return opt && odr_ok(o);
62     return
63         odr_implicit(o, z_InternationalString, &(*p)->resultSetId, ODR_CONTEXT,
64             1, 0) &&
65         odr_implicit(o, odr_integer, &(*p)->item, ODR_CONTEXT, 2, 1) &&
66         odr_sequence_end(o);
67 }
68
69 int z_IOOriginPartNotToKeep(ODR o, Z_IOOriginPartNotToKeep **p, int opt)
70 {
71     if (!odr_sequence_begin(o, p, sizeof(**p)))
72         return opt && odr_ok(o);
73     return
74         odr_implicit(o, z_IOResultSetItem, &(*p)->resultSetItem, ODR_CONTEXT,
75             1, 0) &&
76         odr_implicit(o, z_External, &(*p)->itemRequest, ODR_CONTEXT, 2, 1) &&
77         odr_sequence_end(o);
78 }
79
80 int z_IOContact(ODR o, Z_IOContact **p, int opt)
81 {
82     if (!odr_sequence_begin(o, p, sizeof(**p)))
83         return opt && odr_ok(o);
84     return
85         odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT,
86             1, 1) &&
87         odr_implicit(o, z_InternationalString, &(*p)->phone, ODR_CONTEXT,
88             2, 1) &&
89         odr_implicit(o, z_InternationalString, &(*p)->email, ODR_CONTEXT,
90             3, 1) &&
91         odr_sequence_end(o);
92 }
93
94 int z_IOCreditCardInfo(ODR o, Z_IOCreditCardInfo **p, int opt)
95 {
96     if (!odr_sequence_begin(o, p, sizeof(**p)))
97         return opt && odr_ok(o);
98     return
99         odr_implicit(o, z_InternationalString, &(*p)->nameOnCard, ODR_CONTEXT,
100             1, 0) &&
101         odr_implicit(o, z_InternationalString, &(*p)->expirationDate,
102             ODR_CONTEXT, 2, 0) &&
103         odr_implicit(o, z_InternationalString, &(*p)->cardNumber, ODR_CONTEXT,
104             3, 0) &&
105         odr_sequence_end(o);
106 }
107
108 int z_IOBilling(ODR o, Z_IOBilling **p, int opt)
109 {
110     static Odr_arm arm[] =
111     {
112         {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_IOBilling_billInvoice, odr_null},
113         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_IOBilling_prepay, odr_null},
114         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_IOBilling_depositAccount, odr_null},
115         {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_IOBilling_creditCard,
116             z_IOCreditCardInfo},
117         {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_IOBilling_cardInfoPreviouslySupplied,
118             odr_null},
119         {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_IOBilling_privateKnown, odr_null},
120         {ODR_IMPLICIT, ODR_CONTEXT, 6, Z_IOBilling_privateNotKnown,
121             z_External},
122         {-1, -1, -1, -1, 0}
123     };
124
125     if (!odr_sequence_begin(o, p, sizeof(**p)))
126         return opt && odr_ok(o);
127     return
128         odr_constructed_begin(o, &(*p)->paymentMethod,
129             ODR_CONTEXT, 1) &&
130         odr_choice(o, arm, &(*p)->paymentMethod, &(*p)->which) &&
131         odr_constructed_end(o) &&
132         odr_implicit(o, z_InternationalString, &(*p)->customerReference,
133             ODR_CONTEXT, 2, 1) &&
134         odr_implicit(o, z_InternationalString, &(*p)->customerPONumber,
135             ODR_CONTEXT, 3, 1) &&
136         odr_sequence_end(o);
137 }
138
139 int z_IOOriginPartToKeep(ODR o, Z_IOOriginPartToKeep **p, int opt)
140 {
141     if (!odr_sequence_begin(o, p, sizeof(**p)))
142         return opt && odr_ok(o);
143     return
144         odr_implicit(o, z_External, &(*p)->supplDescription, ODR_CONTEXT,
145             1, 1) &&
146         odr_implicit(o, z_IOContact, &(*p)->contact, ODR_CONTEXT, 2, 1) &&
147         odr_implicit(o, z_IOBilling, &(*p)->addlBilling, ODR_CONTEXT,
148             3, 1) &&
149         odr_sequence_end(o);
150 }
151
152 int z_IORequest(ODR o, Z_IORequest **p, int opt)
153 {
154     if (!odr_sequence_begin(o, p, sizeof(**p)))
155         return opt && odr_ok(o);
156     return 
157         odr_implicit(o, z_IOOriginPartToKeep, &(*p)->toKeep, ODR_CONTEXT,
158             1, 1) &&
159         odr_implicit(o, z_IOOriginPartNotToKeep, &(*p)->notToKeep, ODR_CONTEXT,
160             2, 0) &&
161         odr_sequence_end(o);
162 }
163
164 int z_IOTaskPackage(ODR o, Z_IOTaskPackage **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)->originPart, ODR_CONTEXT,
170             1, 1) &&
171         odr_implicit(o, z_IOTargetPart, &(*p)->targetPart, ODR_CONTEXT, 2, 0) &&
172         odr_sequence_end(o);
173 }
174
175 int z_ItemOrder(ODR o, Z_ItemOrder **p, int opt)
176 {
177     static Odr_arm arm[] =
178     {
179         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ItemOrder_esRequest, z_IORequest},
180         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ItemOrder_taskPackage,
181             z_IOTaskPackage},
182         {-1, -1, -1, -1, 0}
183     };
184
185     if (o->direction == ODR_DECODE)
186         *p = odr_malloc(o, sizeof(**p));
187     else if (!*p)
188         return opt;
189     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
190         return 1;
191     *p = 0;
192     return opt && odr_ok(o);
193 }