2 * Copyright (c) 1995, Index Data.
3 * See the file LICENSE for details.
4 * Sebastian Hammer, Adam Dickmeiss
7 * Revision 1.5 1998-02-11 11:53:32 adam
8 * Changed code so that it compiles as C++.
10 * Revision 1.4 1996/01/22 09:46:34 quinn
11 * Added Sort PDU. Moved StringList to main protocol file.
13 * Revision 1.3 1995/09/29 17:11:54 quinn
16 * Revision 1.2 1995/09/27 15:02:41 quinn
17 * Modified function heads & prototypes.
19 * Revision 1.1 1995/08/29 11:19:31 quinn
20 * Added Diagnostic Format
27 int z_TooMany(ODR o, Z_TooMany **p, int opt)
29 if (!odr_sequence_begin(o, p, sizeof(**p)))
30 return opt && odr_ok(o);
32 odr_implicit(o, odr_integer, &(*p)->tooManyWhat, ODR_CONTEXT, 1, 0) &&
33 odr_implicit(o, odr_integer, &(*p)->max, ODR_CONTEXT, 2, 1) &&
37 int z_BadSpec(ODR o, Z_BadSpec **p, int opt)
39 if (!odr_sequence_begin(o, p, sizeof(**p)))
40 return opt && odr_ok(o);
42 odr_implicit(o, z_Specification, &(*p)->spec, ODR_CONTEXT, 1, 0) &&
43 odr_implicit(o, z_DatabaseName, &(*p)->db, ODR_CONTEXT, 2, 1) &&
44 odr_implicit_settag(o, ODR_CONTEXT, 3) &&
45 (odr_sequence_of(o, (Odr_fun)z_Specification, &(*p)->goodOnes,
46 &(*p)->num_goodOnes) || odr_ok(o)) &&
50 int z_DbUnavailWhy(ODR o, Z_DbUnavailWhy **p, int opt)
52 if (!odr_sequence_begin(o, p, sizeof(**p)))
53 return opt && odr_ok(o);
55 odr_implicit(o, odr_integer, &(*p)->reasonCode, ODR_CONTEXT, 1, 1) &&
56 odr_implicit(o, z_InternationalString, &(*p)->message, ODR_CONTEXT,
61 int z_DbUnavail(ODR o, Z_DbUnavail **p, int opt)
63 if (!odr_sequence_begin(o, p, sizeof(**p)))
64 return opt && odr_ok(o);
66 odr_implicit(o, z_DatabaseName, &(*p)->db, ODR_CONTEXT, 1, 0) &&
67 odr_implicit(o, z_DbUnavailWhy, &(*p)->why, ODR_CONTEXT, 2, 0) &&
71 int z_Attribute(ODR o, Z_Attribute **p, int opt)
73 if (!odr_sequence_begin(o, p, sizeof(**p)))
74 return opt && odr_ok(o);
76 odr_implicit(o, odr_oid, &(*p)->id, ODR_CONTEXT, 1, 0) &&
77 odr_implicit(o, odr_integer, &(*p)->type, ODR_CONTEXT, 2, 1) &&
78 odr_implicit(o, odr_integer, &(*p)->value, ODR_CONTEXT, 3, 1) &&
79 odr_explicit(o, z_Term, &(*p)->term, ODR_CONTEXT, 4, 1) &&
83 int z_AttCombo(ODR o, Z_AttCombo **p, int opt)
85 if (!odr_sequence_begin(o, p, sizeof(**p)))
86 return opt && odr_ok(o);
88 odr_implicit(o, z_AttributeList, &(*p)->unsupportedCombination,
90 odr_implicit_settag(o, ODR_CONTEXT, 2) &&
91 (odr_sequence_of(o, (Odr_fun)z_AttributeList, &(*p)->alternatives,
92 &(*p)->num_alternatives) || odr_ok(o)) &&
96 int z_DiagTerm(ODR o, Z_DiagTerm **p, int opt)
98 if (!odr_sequence_begin(o, p, sizeof(**p)))
99 return opt && odr_ok(o);
101 odr_implicit(o, odr_integer, &(*p)->problem, ODR_CONTEXT, 1, 1) &&
102 odr_explicit(o, z_Term, &(*p)->term, ODR_CONTEXT, 2, 0) &&
106 int z_Proximity(ODR o, Z_Proximity **p, int opt)
108 static Odr_arm arm[] =
110 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Proximity_resultSets, (Odr_fun)odr_null},
111 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Proximity_badSet,
112 (Odr_fun)z_InternationalString},
113 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Proximity_relation, (Odr_fun)odr_integer},
114 {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_Proximity_unit, (Odr_fun)odr_integer},
115 {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_Proximity_distance, (Odr_fun)odr_integer},
116 {ODR_EXPLICIT, ODR_CONTEXT, 6, Z_Proximity_attributes, (Odr_fun)z_AttributeList},
117 {ODR_IMPLICIT, ODR_CONTEXT, 7, Z_Proximity_ordered, (Odr_fun)odr_null},
118 {ODR_IMPLICIT, ODR_CONTEXT, 8, Z_Proximity_exclusion, (Odr_fun)odr_null},
122 if (o->direction == ODR_DECODE)
123 *p = (Z_Proximity *)odr_malloc(o, sizeof(**p));
126 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
129 return opt && odr_ok(o);
132 int z_AttrListList(ODR o, Z_AttrListList **p, int opt)
134 if (o->direction == ODR_DECODE)
135 *p = (Z_AttrListList *)odr_malloc(o, sizeof(**p));
138 if (odr_sequence_of(o, (Odr_fun)z_AttributeList, &(*p)->lists, &(*p)->num_lists))
141 return opt && odr_ok(o);
144 int z_Scan(ODR o, Z_Scan **p, int opt)
146 static Odr_arm arm[] =
148 {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_ScanD_nonZeroStepSize, (Odr_fun)odr_null},
149 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ScanD_specifiedStepSize, (Odr_fun)odr_null},
150 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_ScanD_termList1, (Odr_fun)odr_null},
151 {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_ScanD_termList2, (Odr_fun)z_AttrListList},
152 {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_ScanD_posInResponse, (Odr_fun)odr_integer},
153 {ODR_IMPLICIT, ODR_CONTEXT, 6, Z_ScanD_resources, (Odr_fun)odr_null},
154 {ODR_IMPLICIT, ODR_CONTEXT, 7, Z_ScanD_endOfList, (Odr_fun)odr_null},
158 if (o->direction == ODR_DECODE)
159 *p = (Z_Scan *)odr_malloc(o, sizeof(**p));
162 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
165 return opt && odr_ok(o);
168 int z_Sort(ODR o, Z_Sort **p, int opt)
170 static Odr_arm arm[] =
172 {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_SortD_sequence, (Odr_fun)odr_null},
173 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_SortD_noRsName, (Odr_fun)odr_null},
174 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_SortD_tooMany, (Odr_fun)odr_integer},
175 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_SortD_incompatible, (Odr_fun)odr_null},
176 {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_SortD_generic, (Odr_fun)odr_null},
177 {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_SortD_dbSpecific, (Odr_fun)odr_null},
179 {ODR_EXPLICIT, ODR_CONTEXT, 6, Z_SortD_sortElement, (Odr_fun)z_SortElement},
181 {ODR_IMPLICIT, ODR_CONTEXT, 7, Z_SortD_key, (Odr_fun)odr_integer},
182 {ODR_IMPLICIT, ODR_CONTEXT, 8, Z_SortD_action, (Odr_fun)odr_null},
183 {ODR_IMPLICIT, ODR_CONTEXT, 9, Z_SortD_illegal, (Odr_fun)odr_integer},
184 {ODR_IMPLICIT, ODR_CONTEXT, 10, Z_SortD_inputTooLarge, (Odr_fun)z_StringList},
185 {ODR_IMPLICIT, ODR_CONTEXT, 11, Z_SortD_aggregateTooLarge, (Odr_fun)odr_null},
189 if (o->direction == ODR_DECODE)
190 *p = (Z_Sort *)odr_malloc(o, sizeof(**p));
193 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
196 return opt && odr_ok(o);
199 int z_Segmentation(ODR o, Z_Segmentation **p, int opt)
201 static Odr_arm arm[] =
203 {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_SegmentationD_segments, (Odr_fun)odr_null},
207 if (o->direction == ODR_DECODE)
208 *p = (Z_Segmentation *)odr_malloc(o, sizeof(**p));
211 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
214 return opt && odr_ok(o);
217 int z_ExtServices(ODR o, Z_ExtServices **p, int opt)
219 static Odr_arm arm[] =
221 {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_ExtServicesD_req, (Odr_fun)odr_integer},
222 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ExtServicesD_permission, (Odr_fun)odr_integer},
223 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ExtServicesD_immediate, (Odr_fun)odr_integer},
227 if (o->direction == ODR_DECODE)
228 *p = (Z_ExtServices *)odr_malloc(o, sizeof(**p));
231 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
234 return opt && odr_ok(o);
237 int z_OidList(ODR o, Z_OidList **p, int opt)
239 if (o->direction == ODR_DECODE)
240 *p = (Z_OidList *)odr_malloc(o, sizeof(**p));
243 if (odr_sequence_of(o, (Odr_fun)odr_oid, &(*p)->oids, &(*p)->num_oids))
246 return opt && odr_ok(o);
249 int z_AccessCtrl(ODR o, Z_AccessCtrl **p, int opt)
251 static Odr_arm arm[] =
253 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_AccessCtrlD_noUser, (Odr_fun)odr_null},
254 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_AccessCtrlD_refused, (Odr_fun)odr_null},
255 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_AccessCtrlD_simple, (Odr_fun)odr_null},
256 {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_AccessCtrlD_oid, (Odr_fun)z_OidList},
257 {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_AccessCtrlD_alternative, (Odr_fun)z_OidList},
258 {ODR_IMPLICIT, ODR_CONTEXT, 6, Z_AccessCtrlD_pwdInv, (Odr_fun)odr_null},
259 {ODR_IMPLICIT, ODR_CONTEXT, 7, Z_AccessCtrlD_pwdExp, (Odr_fun)odr_null},
263 if (o->direction == ODR_DECODE)
264 *p = (Z_AccessCtrl *)odr_malloc(o, sizeof(**p));
267 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
270 return opt && odr_ok(o);
273 int z_RecordSyntax(ODR o, Z_RecordSyntax **p, int opt)
275 if (!odr_sequence_begin(o, p, sizeof(**p)))
276 return opt && odr_ok(o);
278 odr_implicit(o, odr_oid, &(*p)->unsupportedSyntax, ODR_CONTEXT, 1, 0) &&
279 odr_implicit_settag(o, ODR_CONTEXT, 2) &&
280 (odr_sequence_of(o, (Odr_fun)odr_oid, &(*p)->suggestedAlternatives,
281 &(*p)->num_suggestedAlternatives) || odr_ok(o)) &&
285 int z_DiagFormat(ODR o, Z_DiagFormat **p, int opt)
287 static Odr_arm arm[] =
289 {ODR_IMPLICIT, ODR_CONTEXT, 1000, Z_DiagFormat_tooMany, (Odr_fun)z_TooMany},
290 {ODR_IMPLICIT, ODR_CONTEXT, 1001, Z_DiagFormat_badSpec, (Odr_fun)z_BadSpec},
291 {ODR_IMPLICIT, ODR_CONTEXT, 1002, Z_DiagFormat_dbUnavail, (Odr_fun)z_DbUnavail},
292 {ODR_IMPLICIT, ODR_CONTEXT, 1003, Z_DiagFormat_unSupOp, (Odr_fun)odr_integer},
293 {ODR_IMPLICIT, ODR_CONTEXT, 1004, Z_DiagFormat_attribute, (Odr_fun)z_Attribute},
294 {ODR_IMPLICIT, ODR_CONTEXT, 1005, Z_DiagFormat_attCombo, (Odr_fun)z_AttCombo},
295 {ODR_IMPLICIT, ODR_CONTEXT, 1006, Z_DiagFormat_term, (Odr_fun)z_DiagTerm},
296 {ODR_EXPLICIT, ODR_CONTEXT, 1007, Z_DiagFormat_proximity, (Odr_fun)z_Proximity},
297 {ODR_EXPLICIT, ODR_CONTEXT, 1008, Z_DiagFormat_scan, (Odr_fun)z_Scan},
298 {ODR_EXPLICIT, ODR_CONTEXT, 1009, Z_DiagFormat_sort, (Odr_fun)z_Sort},
299 {ODR_EXPLICIT, ODR_CONTEXT, 1010, Z_DiagFormat_segmentation,
300 (Odr_fun)z_Segmentation},
301 {ODR_EXPLICIT, ODR_CONTEXT, 1011, Z_DiagFormat_extServices,
302 (Odr_fun)z_ExtServices},
303 {ODR_EXPLICIT, ODR_CONTEXT, 1012, Z_DiagFormat_accessCtrl,
304 (Odr_fun)z_AccessCtrl},
305 {ODR_IMPLICIT, ODR_CONTEXT, 1013, Z_DiagFormat_recordSyntax,
306 (Odr_fun)z_RecordSyntax},
310 if (o->direction == ODR_DECODE)
311 *p = (Z_DiagFormat *)odr_malloc(o, sizeof(**p));
314 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
317 return opt && odr_ok(o);
320 int z_Diagnostic(ODR o, Z_Diagnostic **p, int opt)
322 static Odr_arm arm[] =
324 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Diagnostic_defaultDiagRec,
325 (Odr_fun)z_DefaultDiagFormat},
326 {ODR_EXPLICIT, ODR_CONTEXT, 2, Z_Diagnostic_explicitDiagnostic,
327 (Odr_fun)z_DiagFormat},
331 if (o->direction == ODR_DECODE)
332 *p = (Z_Diagnostic *)odr_malloc(o, sizeof(**p));
335 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
338 return opt && odr_ok(o);
341 int z_DiagnosticUnit(ODR o, Z_DiagnosticUnit **p, int opt)
343 if (!odr_sequence_begin(o, p, sizeof(**p)))
344 return opt && odr_ok(o);
346 odr_explicit(o, z_Diagnostic, &(*p)->diagnostic, ODR_CONTEXT, 1, 1) &&
347 odr_implicit(o, z_InternationalString, &(*p)->message, ODR_CONTEXT,
352 int z_DiagnosticFormat(ODR o, Z_DiagnosticFormat **p, int opt)
354 if (o->direction == ODR_DECODE)
355 *p = (Z_DiagnosticFormat *)odr_malloc(o, sizeof(**p));
358 if (odr_sequence_of(o, (Odr_fun)z_DiagnosticUnit, &(*p)->diagnostics,
359 &(*p)->num_diagnostics))
362 return opt && odr_ok(o);