2 * Copyright (c) 1995-1999, Index Data.
3 * See the file LICENSE for details.
4 * Sebastian Hammer, Adam Dickmeiss
7 * Revision 1.6 1999-04-20 09:56:47 adam
8 * Added 'name' paramter to encoder/decoder routines (typedef Odr_fun).
9 * Modified all encoders/decoders to reflect this change.
11 * Revision 1.5 1998/02/11 11:53:32 adam
12 * Changed code so that it compiles as C++.
14 * Revision 1.4 1996/01/22 09:46:34 quinn
15 * Added Sort PDU. Moved StringList to main protocol file.
17 * Revision 1.3 1995/09/29 17:11:54 quinn
20 * Revision 1.2 1995/09/27 15:02:41 quinn
21 * Modified function heads & prototypes.
23 * Revision 1.1 1995/08/29 11:19:31 quinn
24 * Added Diagnostic Format
31 int z_TooMany(ODR o, Z_TooMany **p, int opt, const char *name)
33 if (!odr_sequence_begin(o, p, sizeof(**p), 0))
34 return opt && odr_ok(o);
36 odr_implicit(o, odr_integer, &(*p)->tooManyWhat, ODR_CONTEXT, 1, 0) &&
37 odr_implicit(o, odr_integer, &(*p)->max, ODR_CONTEXT, 2, 1) &&
41 int z_BadSpec(ODR o, Z_BadSpec **p, int opt, const char *name)
43 if (!odr_sequence_begin(o, p, sizeof(**p), 0))
44 return opt && odr_ok(o);
46 odr_implicit(o, z_Specification, &(*p)->spec, ODR_CONTEXT, 1, 0) &&
47 odr_implicit(o, z_DatabaseName, &(*p)->db, ODR_CONTEXT, 2, 1) &&
48 odr_implicit_settag(o, ODR_CONTEXT, 3) &&
49 (odr_sequence_of(o, (Odr_fun)z_Specification, &(*p)->goodOnes,
50 &(*p)->num_goodOnes, 0) || odr_ok(o)) &&
54 int z_DbUnavailWhy(ODR o, Z_DbUnavailWhy **p, int opt, const char *name)
56 if (!odr_sequence_begin(o, p, sizeof(**p), 0))
57 return opt && odr_ok(o);
59 odr_implicit(o, odr_integer, &(*p)->reasonCode, ODR_CONTEXT, 1, 1) &&
60 odr_implicit(o, z_InternationalString, &(*p)->message, ODR_CONTEXT,
65 int z_DbUnavail(ODR o, Z_DbUnavail **p, int opt, const char *name)
67 if (!odr_sequence_begin(o, p, sizeof(**p), 0))
68 return opt && odr_ok(o);
70 odr_implicit(o, z_DatabaseName, &(*p)->db, ODR_CONTEXT, 1, 0) &&
71 odr_implicit(o, z_DbUnavailWhy, &(*p)->why, ODR_CONTEXT, 2, 0) &&
75 int z_Attribute(ODR o, Z_Attribute **p, int opt, const char *name)
77 if (!odr_sequence_begin(o, p, sizeof(**p), 0))
78 return opt && odr_ok(o);
80 odr_implicit(o, odr_oid, &(*p)->id, ODR_CONTEXT, 1, 0) &&
81 odr_implicit(o, odr_integer, &(*p)->type, ODR_CONTEXT, 2, 1) &&
82 odr_implicit(o, odr_integer, &(*p)->value, ODR_CONTEXT, 3, 1) &&
83 odr_explicit(o, z_Term, &(*p)->term, ODR_CONTEXT, 4, 1) &&
87 int z_AttCombo(ODR o, Z_AttCombo **p, int opt, const char *name)
89 if (!odr_sequence_begin(o, p, sizeof(**p), 0))
90 return opt && odr_ok(o);
92 odr_implicit(o, z_AttributeList, &(*p)->unsupportedCombination,
94 odr_implicit_settag(o, ODR_CONTEXT, 2) &&
95 (odr_sequence_of(o, (Odr_fun)z_AttributeList, &(*p)->alternatives,
96 &(*p)->num_alternatives, 0) || odr_ok(o)) &&
100 int z_DiagTerm(ODR o, Z_DiagTerm **p, int opt, const char *name)
102 if (!odr_sequence_begin(o, p, sizeof(**p), 0))
103 return opt && odr_ok(o);
105 odr_implicit(o, odr_integer, &(*p)->problem, ODR_CONTEXT, 1, 1) &&
106 odr_explicit(o, z_Term, &(*p)->term, ODR_CONTEXT, 2, 0) &&
110 int z_Proximity(ODR o, Z_Proximity **p, int opt, const char *name)
112 static Odr_arm arm[] =
114 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Proximity_resultSets,
115 (Odr_fun)odr_null, 0},
116 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Proximity_badSet,
117 (Odr_fun)z_InternationalString, 0},
118 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Proximity_relation,
119 (Odr_fun)odr_integer, 0},
120 {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_Proximity_unit,
121 (Odr_fun)odr_integer, 0},
122 {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_Proximity_distance,
123 (Odr_fun)odr_integer, 0},
124 {ODR_EXPLICIT, ODR_CONTEXT, 6, Z_Proximity_attributes,
125 (Odr_fun)z_AttributeList, 0},
126 {ODR_IMPLICIT, ODR_CONTEXT, 7, Z_Proximity_ordered,
127 (Odr_fun)odr_null, 0},
128 {ODR_IMPLICIT, ODR_CONTEXT, 8, Z_Proximity_exclusion,
129 (Odr_fun)odr_null, 0},
130 {-1, -1, -1, -1, 0, 0}
133 if (o->direction == ODR_DECODE)
134 *p = (Z_Proximity *)odr_malloc(o, sizeof(**p));
137 if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
140 return opt && odr_ok(o);
143 int z_AttrListList(ODR o, Z_AttrListList **p, int opt, const char *name)
145 if (o->direction == ODR_DECODE)
146 *p = (Z_AttrListList *)odr_malloc(o, sizeof(**p));
149 if (odr_sequence_of(o, (Odr_fun)z_AttributeList, &(*p)->lists,
150 &(*p)->num_lists, 0))
153 return opt && odr_ok(o);
156 int z_Scan(ODR o, Z_Scan **p, int opt, const char *name)
158 static Odr_arm arm[] =
160 {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_ScanD_nonZeroStepSize,
161 (Odr_fun)odr_null, 0},
162 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ScanD_specifiedStepSize,
163 (Odr_fun)odr_null, 0},
164 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_ScanD_termList1,
165 (Odr_fun)odr_null, 0},
166 {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_ScanD_termList2,
167 (Odr_fun)z_AttrListList, 0},
168 {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_ScanD_posInResponse,
169 (Odr_fun)odr_integer, 0},
170 {ODR_IMPLICIT, ODR_CONTEXT, 6, Z_ScanD_resources,
171 (Odr_fun)odr_null, 0},
172 {ODR_IMPLICIT, ODR_CONTEXT, 7, Z_ScanD_endOfList,
173 (Odr_fun)odr_null, 0},
174 {-1, -1, -1, -1, 0, 0}
177 if (o->direction == ODR_DECODE)
178 *p = (Z_Scan *)odr_malloc(o, sizeof(**p));
181 if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
184 return opt && odr_ok(o);
187 int z_Sort(ODR o, Z_Sort **p, int opt, const char *name)
189 static Odr_arm arm[] =
191 {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_SortD_sequence,
192 (Odr_fun)odr_null, 0},
193 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_SortD_noRsName,
194 (Odr_fun)odr_null, 0},
195 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_SortD_tooMany,
196 (Odr_fun)odr_integer, 0},
197 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_SortD_incompatible,
198 (Odr_fun)odr_null, 0},
199 {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_SortD_generic,
200 (Odr_fun)odr_null, 0},
201 {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_SortD_dbSpecific,
202 (Odr_fun)odr_null, 0},
204 {ODR_EXPLICIT, ODR_CONTEXT, 6, Z_SortD_sortElement,
205 (Odr_fun)z_SortElement, 0},
207 {ODR_IMPLICIT, ODR_CONTEXT, 7, Z_SortD_key,
208 (Odr_fun)odr_integer, 0},
209 {ODR_IMPLICIT, ODR_CONTEXT, 8, Z_SortD_action,
210 (Odr_fun)odr_null, 0},
211 {ODR_IMPLICIT, ODR_CONTEXT, 9, Z_SortD_illegal,
212 (Odr_fun)odr_integer, 0},
213 {ODR_IMPLICIT, ODR_CONTEXT, 10, Z_SortD_inputTooLarge,
214 (Odr_fun)z_StringList, 0},
215 {ODR_IMPLICIT, ODR_CONTEXT, 11, Z_SortD_aggregateTooLarge,
216 (Odr_fun)odr_null, 0},
217 {-1, -1, -1, -1, 0, 0}
220 if (o->direction == ODR_DECODE)
221 *p = (Z_Sort *)odr_malloc(o, sizeof(**p));
224 if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
227 return opt && odr_ok(o);
230 int z_Segmentation(ODR o, Z_Segmentation **p, int opt, const char *name)
232 static Odr_arm arm[] =
234 {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_SegmentationD_segments,
235 (Odr_fun)odr_null, 0},
236 {-1, -1, -1, -1, 0, 0}
239 if (o->direction == ODR_DECODE)
240 *p = (Z_Segmentation *)odr_malloc(o, sizeof(**p));
243 if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
246 return opt && odr_ok(o);
249 int z_ExtServices(ODR o, Z_ExtServices **p, int opt, const char *name)
251 static Odr_arm arm[] =
253 {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_ExtServicesD_req,
254 (Odr_fun)odr_integer, 0},
255 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ExtServicesD_permission,
256 (Odr_fun)odr_integer, 0},
257 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ExtServicesD_immediate,
258 (Odr_fun)odr_integer, 0},
259 {-1, -1, -1, -1, 0, 0}
262 if (o->direction == ODR_DECODE)
263 *p = (Z_ExtServices *)odr_malloc(o, sizeof(**p));
266 if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
269 return opt && odr_ok(o);
272 int z_OidList(ODR o, Z_OidList **p, int opt, const char *name)
274 if (o->direction == ODR_DECODE)
275 *p = (Z_OidList *)odr_malloc(o, sizeof(**p));
278 if (odr_sequence_of(o, (Odr_fun)odr_oid, &(*p)->oids, &(*p)->num_oids, 0))
281 return opt && odr_ok(o);
284 int z_AccessCtrl(ODR o, Z_AccessCtrl **p, int opt, const char *name)
286 static Odr_arm arm[] =
288 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_AccessCtrlD_noUser,
289 (Odr_fun)odr_null, 0},
290 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_AccessCtrlD_refused,
291 (Odr_fun)odr_null, 0},
292 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_AccessCtrlD_simple,
293 (Odr_fun)odr_null, 0},
294 {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_AccessCtrlD_oid,
295 (Odr_fun)z_OidList, 0},
296 {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_AccessCtrlD_alternative,
297 (Odr_fun)z_OidList, 0},
298 {ODR_IMPLICIT, ODR_CONTEXT, 6, Z_AccessCtrlD_pwdInv,
299 (Odr_fun)odr_null, 0},
300 {ODR_IMPLICIT, ODR_CONTEXT, 7, Z_AccessCtrlD_pwdExp,
301 (Odr_fun)odr_null, 0},
302 {-1, -1, -1, -1, 0, 0}
305 if (o->direction == ODR_DECODE)
306 *p = (Z_AccessCtrl *)odr_malloc(o, sizeof(**p));
309 if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
312 return opt && odr_ok(o);
315 int z_RecordSyntax(ODR o, Z_RecordSyntax **p, int opt, const char *name)
317 if (!odr_sequence_begin(o, p, sizeof(**p), 0))
318 return opt && odr_ok(o);
320 odr_implicit(o, odr_oid, &(*p)->unsupportedSyntax,
321 ODR_CONTEXT, 1, 0) &&
322 odr_implicit_settag(o, ODR_CONTEXT, 2) &&
323 (odr_sequence_of(o, (Odr_fun)odr_oid, &(*p)->suggestedAlternatives,
324 &(*p)->num_suggestedAlternatives, 0) || odr_ok(o)) &&
328 int z_DiagFormat(ODR o, Z_DiagFormat **p, int opt, const char *name)
330 static Odr_arm arm[] =
332 {ODR_IMPLICIT, ODR_CONTEXT, 1000, Z_DiagFormat_tooMany,
333 (Odr_fun)z_TooMany, 0},
334 {ODR_IMPLICIT, ODR_CONTEXT, 1001, Z_DiagFormat_badSpec,
335 (Odr_fun)z_BadSpec, 0},
336 {ODR_IMPLICIT, ODR_CONTEXT, 1002, Z_DiagFormat_dbUnavail,
337 (Odr_fun)z_DbUnavail, 0},
338 {ODR_IMPLICIT, ODR_CONTEXT, 1003, Z_DiagFormat_unSupOp,
339 (Odr_fun)odr_integer, 0},
340 {ODR_IMPLICIT, ODR_CONTEXT, 1004, Z_DiagFormat_attribute,
341 (Odr_fun)z_Attribute, 0},
342 {ODR_IMPLICIT, ODR_CONTEXT, 1005, Z_DiagFormat_attCombo,
343 (Odr_fun)z_AttCombo, 0},
344 {ODR_IMPLICIT, ODR_CONTEXT, 1006, Z_DiagFormat_term,
345 (Odr_fun)z_DiagTerm, 0},
346 {ODR_EXPLICIT, ODR_CONTEXT, 1007, Z_DiagFormat_proximity,
347 (Odr_fun)z_Proximity, 0},
348 {ODR_EXPLICIT, ODR_CONTEXT, 1008, Z_DiagFormat_scan,
350 {ODR_EXPLICIT, ODR_CONTEXT, 1009, Z_DiagFormat_sort,
352 {ODR_EXPLICIT, ODR_CONTEXT, 1010, Z_DiagFormat_segmentation,
353 (Odr_fun)z_Segmentation, 0},
354 {ODR_EXPLICIT, ODR_CONTEXT, 1011, Z_DiagFormat_extServices,
355 (Odr_fun)z_ExtServices, 0},
356 {ODR_EXPLICIT, ODR_CONTEXT, 1012, Z_DiagFormat_accessCtrl,
357 (Odr_fun)z_AccessCtrl, 0},
358 {ODR_IMPLICIT, ODR_CONTEXT, 1013, Z_DiagFormat_recordSyntax,
359 (Odr_fun)z_RecordSyntax, 0},
360 {-1, -1, -1, -1, 0, 0}
363 if (o->direction == ODR_DECODE)
364 *p = (Z_DiagFormat *)odr_malloc(o, sizeof(**p));
367 if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
370 return opt && odr_ok(o);
373 int z_Diagnostic(ODR o, Z_Diagnostic **p, int opt, const char *name)
375 static Odr_arm arm[] =
377 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Diagnostic_defaultDiagRec,
378 (Odr_fun)z_DefaultDiagFormat, 0},
379 {ODR_EXPLICIT, ODR_CONTEXT, 2, Z_Diagnostic_explicitDiagnostic,
380 (Odr_fun)z_DiagFormat, 0},
381 {-1, -1, -1, -1, 0, 0}
384 if (o->direction == ODR_DECODE)
385 *p = (Z_Diagnostic *)odr_malloc(o, sizeof(**p));
388 if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
391 return opt && odr_ok(o);
394 int z_DiagnosticUnit(ODR o, Z_DiagnosticUnit **p, int opt, const char *name)
396 if (!odr_sequence_begin(o, p, sizeof(**p), 0))
397 return opt && odr_ok(o);
399 odr_explicit(o, z_Diagnostic, &(*p)->diagnostic, ODR_CONTEXT, 1, 1) &&
400 odr_implicit(o, z_InternationalString, &(*p)->message,
401 ODR_CONTEXT, 2, 1) &&
405 int z_DiagnosticFormat(ODR o, Z_DiagnosticFormat **p, int opt,
408 if (o->direction == ODR_DECODE)
409 *p = (Z_DiagnosticFormat *)odr_malloc(o, sizeof(**p));
412 if (odr_sequence_of(o, (Odr_fun)z_DiagnosticUnit, &(*p)->diagnostics,
413 &(*p)->num_diagnostics, 0))
416 return opt && odr_ok(o);