source: trunk/gsdl/packages/yaz/asn/prt-dia.c@ 1343

Last change on this file since 1343 was 1343, checked in by johnmcp, 24 years ago

Added the YAZ toolkit source to the packages directory (for z39.50 stuff)

  • Property svn:keywords set to Author Date Id Revision
File size: 12.5 KB
Line 
1/*
2 * Copyright (c) 1995-1999, Index Data.
3 * See the file LICENSE for details.
4 * Sebastian Hammer, Adam Dickmeiss
5 *
6 * $Log$
7 * Revision 1.1 2000/08/03 03:09:49 johnmcp
8 * Added the YAZ toolkit source to the packages directory (for z39.50 stuff)
9 *
10 * Revision 1.7 1999/11/30 13:47:11 adam
11 * Improved installation. Moved header files to include/yaz.
12 *
13 * Revision 1.6 1999/04/20 09:56:47 adam
14 * Added 'name' paramter to encoder/decoder routines (typedef Odr_fun).
15 * Modified all encoders/decoders to reflect this change.
16 *
17 * Revision 1.5 1998/02/11 11:53:32 adam
18 * Changed code so that it compiles as C++.
19 *
20 * Revision 1.4 1996/01/22 09:46:34 quinn
21 * Added Sort PDU. Moved StringList to main protocol file.
22 *
23 * Revision 1.3 1995/09/29 17:11:54 quinn
24 * Smallish
25 *
26 * Revision 1.2 1995/09/27 15:02:41 quinn
27 * Modified function heads & prototypes.
28 *
29 * Revision 1.1 1995/08/29 11:19:31 quinn
30 * Added Diagnostic Format
31 *
32 *
33 */
34
35#include <yaz/proto.h>
36
37int z_TooMany(ODR o, Z_TooMany **p, int opt, const char *name)
38{
39 if (!odr_sequence_begin(o, p, sizeof(**p), 0))
40 return opt && odr_ok(o);
41 return
42 odr_implicit(o, odr_integer, &(*p)->tooManyWhat, ODR_CONTEXT, 1, 0) &&
43 odr_implicit(o, odr_integer, &(*p)->max, ODR_CONTEXT, 2, 1) &&
44 odr_sequence_end(o);
45}
46
47int z_BadSpec(ODR o, Z_BadSpec **p, int opt, const char *name)
48{
49 if (!odr_sequence_begin(o, p, sizeof(**p), 0))
50 return opt && odr_ok(o);
51 return
52 odr_implicit(o, z_Specification, &(*p)->spec, ODR_CONTEXT, 1, 0) &&
53 odr_implicit(o, z_DatabaseName, &(*p)->db, ODR_CONTEXT, 2, 1) &&
54 odr_implicit_settag(o, ODR_CONTEXT, 3) &&
55 (odr_sequence_of(o, (Odr_fun)z_Specification, &(*p)->goodOnes,
56 &(*p)->num_goodOnes, 0) || odr_ok(o)) &&
57 odr_sequence_end(o);
58}
59
60int z_DbUnavailWhy(ODR o, Z_DbUnavailWhy **p, int opt, const char *name)
61{
62 if (!odr_sequence_begin(o, p, sizeof(**p), 0))
63 return opt && odr_ok(o);
64 return
65 odr_implicit(o, odr_integer, &(*p)->reasonCode, ODR_CONTEXT, 1, 1) &&
66 odr_implicit(o, z_InternationalString, &(*p)->message, ODR_CONTEXT,
67 2, 1) &&
68 odr_sequence_end(o);
69}
70
71int z_DbUnavail(ODR o, Z_DbUnavail **p, int opt, const char *name)
72{
73 if (!odr_sequence_begin(o, p, sizeof(**p), 0))
74 return opt && odr_ok(o);
75 return
76 odr_implicit(o, z_DatabaseName, &(*p)->db, ODR_CONTEXT, 1, 0) &&
77 odr_implicit(o, z_DbUnavailWhy, &(*p)->why, ODR_CONTEXT, 2, 0) &&
78 odr_sequence_end(o);
79}
80
81int z_Attribute(ODR o, Z_Attribute **p, int opt, const char *name)
82{
83 if (!odr_sequence_begin(o, p, sizeof(**p), 0))
84 return opt && odr_ok(o);
85 return
86 odr_implicit(o, odr_oid, &(*p)->id, ODR_CONTEXT, 1, 0) &&
87 odr_implicit(o, odr_integer, &(*p)->type, ODR_CONTEXT, 2, 1) &&
88 odr_implicit(o, odr_integer, &(*p)->value, ODR_CONTEXT, 3, 1) &&
89 odr_explicit(o, z_Term, &(*p)->term, ODR_CONTEXT, 4, 1) &&
90 odr_sequence_end(o);
91}
92
93int z_AttCombo(ODR o, Z_AttCombo **p, int opt, const char *name)
94{
95 if (!odr_sequence_begin(o, p, sizeof(**p), 0))
96 return opt && odr_ok(o);
97 return
98 odr_implicit(o, z_AttributeList, &(*p)->unsupportedCombination,
99 ODR_CONTEXT, 1, 0) &&
100 odr_implicit_settag(o, ODR_CONTEXT, 2) &&
101 (odr_sequence_of(o, (Odr_fun)z_AttributeList, &(*p)->alternatives,
102 &(*p)->num_alternatives, 0) || odr_ok(o)) &&
103 odr_sequence_end(o);
104}
105
106int z_DiagTerm(ODR o, Z_DiagTerm **p, int opt, const char *name)
107{
108 if (!odr_sequence_begin(o, p, sizeof(**p), 0))
109 return opt && odr_ok(o);
110 return
111 odr_implicit(o, odr_integer, &(*p)->problem, ODR_CONTEXT, 1, 1) &&
112 odr_explicit(o, z_Term, &(*p)->term, ODR_CONTEXT, 2, 0) &&
113 odr_sequence_end(o);
114}
115
116int z_Proximity(ODR o, Z_Proximity **p, int opt, const char *name)
117{
118 static Odr_arm arm[] =
119 {
120 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Proximity_resultSets,
121 (Odr_fun)odr_null, 0},
122 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Proximity_badSet,
123 (Odr_fun)z_InternationalString, 0},
124 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Proximity_relation,
125 (Odr_fun)odr_integer, 0},
126 {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_Proximity_unit,
127 (Odr_fun)odr_integer, 0},
128 {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_Proximity_distance,
129 (Odr_fun)odr_integer, 0},
130 {ODR_EXPLICIT, ODR_CONTEXT, 6, Z_Proximity_attributes,
131 (Odr_fun)z_AttributeList, 0},
132 {ODR_IMPLICIT, ODR_CONTEXT, 7, Z_Proximity_ordered,
133 (Odr_fun)odr_null, 0},
134 {ODR_IMPLICIT, ODR_CONTEXT, 8, Z_Proximity_exclusion,
135 (Odr_fun)odr_null, 0},
136 {-1, -1, -1, -1, 0, 0}
137 };
138
139 if (o->direction == ODR_DECODE)
140 *p = (Z_Proximity *)odr_malloc(o, sizeof(**p));
141 else if (!*p)
142 return opt;
143 if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
144 return 1;
145 *p = 0;
146 return opt && odr_ok(o);
147}
148
149int z_AttrListList(ODR o, Z_AttrListList **p, int opt, const char *name)
150{
151 if (o->direction == ODR_DECODE)
152 *p = (Z_AttrListList *)odr_malloc(o, sizeof(**p));
153 else if (!*p)
154 return opt;
155 if (odr_sequence_of(o, (Odr_fun)z_AttributeList, &(*p)->lists,
156 &(*p)->num_lists, 0))
157 return 1;
158 *p = 0;
159 return opt && odr_ok(o);
160}
161
162int z_Scan(ODR o, Z_Scan **p, int opt, const char *name)
163{
164 static Odr_arm arm[] =
165 {
166 {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_ScanD_nonZeroStepSize,
167 (Odr_fun)odr_null, 0},
168 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ScanD_specifiedStepSize,
169 (Odr_fun)odr_null, 0},
170 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_ScanD_termList1,
171 (Odr_fun)odr_null, 0},
172 {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_ScanD_termList2,
173 (Odr_fun)z_AttrListList, 0},
174 {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_ScanD_posInResponse,
175 (Odr_fun)odr_integer, 0},
176 {ODR_IMPLICIT, ODR_CONTEXT, 6, Z_ScanD_resources,
177 (Odr_fun)odr_null, 0},
178 {ODR_IMPLICIT, ODR_CONTEXT, 7, Z_ScanD_endOfList,
179 (Odr_fun)odr_null, 0},
180 {-1, -1, -1, -1, 0, 0}
181 };
182
183 if (o->direction == ODR_DECODE)
184 *p = (Z_Scan *)odr_malloc(o, sizeof(**p));
185 else if (!*p)
186 return opt;
187 if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
188 return 1;
189 *p = 0;
190 return opt && odr_ok(o);
191}
192
193int z_Sort(ODR o, Z_Sort **p, int opt, const char *name)
194{
195 static Odr_arm arm[] =
196 {
197 {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_SortD_sequence,
198 (Odr_fun)odr_null, 0},
199 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_SortD_noRsName,
200 (Odr_fun)odr_null, 0},
201 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_SortD_tooMany,
202 (Odr_fun)odr_integer, 0},
203 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_SortD_incompatible,
204 (Odr_fun)odr_null, 0},
205 {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_SortD_generic,
206 (Odr_fun)odr_null, 0},
207 {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_SortD_dbSpecific,
208 (Odr_fun)odr_null, 0},
209#if 0
210 {ODR_EXPLICIT, ODR_CONTEXT, 6, Z_SortD_sortElement,
211 (Odr_fun)z_SortElement, 0},
212#endif
213 {ODR_IMPLICIT, ODR_CONTEXT, 7, Z_SortD_key,
214 (Odr_fun)odr_integer, 0},
215 {ODR_IMPLICIT, ODR_CONTEXT, 8, Z_SortD_action,
216 (Odr_fun)odr_null, 0},
217 {ODR_IMPLICIT, ODR_CONTEXT, 9, Z_SortD_illegal,
218 (Odr_fun)odr_integer, 0},
219 {ODR_IMPLICIT, ODR_CONTEXT, 10, Z_SortD_inputTooLarge,
220 (Odr_fun)z_StringList, 0},
221 {ODR_IMPLICIT, ODR_CONTEXT, 11, Z_SortD_aggregateTooLarge,
222 (Odr_fun)odr_null, 0},
223 {-1, -1, -1, -1, 0, 0}
224 };
225
226 if (o->direction == ODR_DECODE)
227 *p = (Z_Sort *)odr_malloc(o, sizeof(**p));
228 else if (!*p)
229 return opt;
230 if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
231 return 1;
232 *p = 0;
233 return opt && odr_ok(o);
234}
235
236int z_Segmentation(ODR o, Z_Segmentation **p, int opt, const char *name)
237{
238 static Odr_arm arm[] =
239 {
240 {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_SegmentationD_segments,
241 (Odr_fun)odr_null, 0},
242 {-1, -1, -1, -1, 0, 0}
243 };
244
245 if (o->direction == ODR_DECODE)
246 *p = (Z_Segmentation *)odr_malloc(o, sizeof(**p));
247 else if (!*p)
248 return opt;
249 if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
250 return 1;
251 *p = 0;
252 return opt && odr_ok(o);
253}
254
255int z_ExtServices(ODR o, Z_ExtServices **p, int opt, const char *name)
256{
257 static Odr_arm arm[] =
258 {
259 {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_ExtServicesD_req,
260 (Odr_fun)odr_integer, 0},
261 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ExtServicesD_permission,
262 (Odr_fun)odr_integer, 0},
263 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ExtServicesD_immediate,
264 (Odr_fun)odr_integer, 0},
265 {-1, -1, -1, -1, 0, 0}
266 };
267
268 if (o->direction == ODR_DECODE)
269 *p = (Z_ExtServices *)odr_malloc(o, sizeof(**p));
270 else if (!*p)
271 return opt;
272 if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
273 return 1;
274 *p = 0;
275 return opt && odr_ok(o);
276}
277
278int z_OidList(ODR o, Z_OidList **p, int opt, const char *name)
279{
280 if (o->direction == ODR_DECODE)
281 *p = (Z_OidList *)odr_malloc(o, sizeof(**p));
282 else if (!*p)
283 return opt;
284 if (odr_sequence_of(o, (Odr_fun)odr_oid, &(*p)->oids, &(*p)->num_oids, 0))
285 return 1;
286 *p = 0;
287 return opt && odr_ok(o);
288}
289
290int z_AccessCtrl(ODR o, Z_AccessCtrl **p, int opt, const char *name)
291{
292 static Odr_arm arm[] =
293 {
294 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_AccessCtrlD_noUser,
295 (Odr_fun)odr_null, 0},
296 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_AccessCtrlD_refused,
297 (Odr_fun)odr_null, 0},
298 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_AccessCtrlD_simple,
299 (Odr_fun)odr_null, 0},
300 {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_AccessCtrlD_oid,
301 (Odr_fun)z_OidList, 0},
302 {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_AccessCtrlD_alternative,
303 (Odr_fun)z_OidList, 0},
304 {ODR_IMPLICIT, ODR_CONTEXT, 6, Z_AccessCtrlD_pwdInv,
305 (Odr_fun)odr_null, 0},
306 {ODR_IMPLICIT, ODR_CONTEXT, 7, Z_AccessCtrlD_pwdExp,
307 (Odr_fun)odr_null, 0},
308 {-1, -1, -1, -1, 0, 0}
309 };
310
311 if (o->direction == ODR_DECODE)
312 *p = (Z_AccessCtrl *)odr_malloc(o, sizeof(**p));
313 else if (!*p)
314 return opt;
315 if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
316 return 1;
317 *p = 0;
318 return opt && odr_ok(o);
319}
320
321int z_RecordSyntax(ODR o, Z_RecordSyntax **p, int opt, const char *name)
322{
323 if (!odr_sequence_begin(o, p, sizeof(**p), 0))
324 return opt && odr_ok(o);
325 return
326 odr_implicit(o, odr_oid, &(*p)->unsupportedSyntax,
327 ODR_CONTEXT, 1, 0) &&
328 odr_implicit_settag(o, ODR_CONTEXT, 2) &&
329 (odr_sequence_of(o, (Odr_fun)odr_oid, &(*p)->suggestedAlternatives,
330 &(*p)->num_suggestedAlternatives, 0) || odr_ok(o)) &&
331 odr_sequence_end(o);
332}
333
334int z_DiagFormat(ODR o, Z_DiagFormat **p, int opt, const char *name)
335{
336 static Odr_arm arm[] =
337 {
338 {ODR_IMPLICIT, ODR_CONTEXT, 1000, Z_DiagFormat_tooMany,
339 (Odr_fun)z_TooMany, 0},
340 {ODR_IMPLICIT, ODR_CONTEXT, 1001, Z_DiagFormat_badSpec,
341 (Odr_fun)z_BadSpec, 0},
342 {ODR_IMPLICIT, ODR_CONTEXT, 1002, Z_DiagFormat_dbUnavail,
343 (Odr_fun)z_DbUnavail, 0},
344 {ODR_IMPLICIT, ODR_CONTEXT, 1003, Z_DiagFormat_unSupOp,
345 (Odr_fun)odr_integer, 0},
346 {ODR_IMPLICIT, ODR_CONTEXT, 1004, Z_DiagFormat_attribute,
347 (Odr_fun)z_Attribute, 0},
348 {ODR_IMPLICIT, ODR_CONTEXT, 1005, Z_DiagFormat_attCombo,
349 (Odr_fun)z_AttCombo, 0},
350 {ODR_IMPLICIT, ODR_CONTEXT, 1006, Z_DiagFormat_term,
351 (Odr_fun)z_DiagTerm, 0},
352 {ODR_EXPLICIT, ODR_CONTEXT, 1007, Z_DiagFormat_proximity,
353 (Odr_fun)z_Proximity, 0},
354 {ODR_EXPLICIT, ODR_CONTEXT, 1008, Z_DiagFormat_scan,
355 (Odr_fun)z_Scan, 0},
356 {ODR_EXPLICIT, ODR_CONTEXT, 1009, Z_DiagFormat_sort,
357 (Odr_fun)z_Sort, 0},
358 {ODR_EXPLICIT, ODR_CONTEXT, 1010, Z_DiagFormat_segmentation,
359 (Odr_fun)z_Segmentation, 0},
360 {ODR_EXPLICIT, ODR_CONTEXT, 1011, Z_DiagFormat_extServices,
361 (Odr_fun)z_ExtServices, 0},
362 {ODR_EXPLICIT, ODR_CONTEXT, 1012, Z_DiagFormat_accessCtrl,
363 (Odr_fun)z_AccessCtrl, 0},
364 {ODR_IMPLICIT, ODR_CONTEXT, 1013, Z_DiagFormat_recordSyntax,
365 (Odr_fun)z_RecordSyntax, 0},
366 {-1, -1, -1, -1, 0, 0}
367 };
368
369 if (o->direction == ODR_DECODE)
370 *p = (Z_DiagFormat *)odr_malloc(o, sizeof(**p));
371 else if (!*p)
372 return opt;
373 if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
374 return 1;
375 *p = 0;
376 return opt && odr_ok(o);
377}
378
379int z_Diagnostic(ODR o, Z_Diagnostic **p, int opt, const char *name)
380{
381 static Odr_arm arm[] =
382 {
383 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Diagnostic_defaultDiagRec,
384 (Odr_fun)z_DefaultDiagFormat, 0},
385 {ODR_EXPLICIT, ODR_CONTEXT, 2, Z_Diagnostic_explicitDiagnostic,
386 (Odr_fun)z_DiagFormat, 0},
387 {-1, -1, -1, -1, 0, 0}
388 };
389
390 if (o->direction == ODR_DECODE)
391 *p = (Z_Diagnostic *)odr_malloc(o, sizeof(**p));
392 else if (!*p)
393 return opt;
394 if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
395 return 1;
396 *p = 0;
397 return opt && odr_ok(o);
398}
399
400int z_DiagnosticUnit(ODR o, Z_DiagnosticUnit **p, int opt, const char *name)
401{
402 if (!odr_sequence_begin(o, p, sizeof(**p), 0))
403 return opt && odr_ok(o);
404 return
405 odr_explicit(o, z_Diagnostic, &(*p)->diagnostic, ODR_CONTEXT, 1, 1) &&
406 odr_implicit(o, z_InternationalString, &(*p)->message,
407 ODR_CONTEXT, 2, 1) &&
408 odr_sequence_end(o);
409}
410
411int z_DiagnosticFormat(ODR o, Z_DiagnosticFormat **p, int opt,
412 const char *name)
413{
414 if (o->direction == ODR_DECODE)
415 *p = (Z_DiagnosticFormat *)odr_malloc(o, sizeof(**p));
416 else if (!*p)
417 return opt;
418 if (odr_sequence_of(o, (Odr_fun)z_DiagnosticUnit, &(*p)->diagnostics,
419 &(*p)->num_diagnostics, 0))
420 return 1;
421 *p = 0;
422 return opt && odr_ok(o);
423}
Note: See TracBrowser for help on using the repository browser.