2 * Copyright (c) 1995, Index Data.
3 * See the file LICENSE for details.
4 * Sebastian Hammer, Adam Dickmeiss
7 * Revision 1.4 1996-01-22 09:46:34 quinn
8 * Added Sort PDU. Moved StringList to main protocol file.
10 * Revision 1.3 1995/09/29 17:11:54 quinn
13 * Revision 1.2 1995/09/27 15:02:41 quinn
14 * Modified function heads & prototypes.
16 * Revision 1.1 1995/08/29 11:19:31 quinn
17 * Added Diagnostic Format
24 int z_TooMany(ODR o, Z_TooMany **p, int opt)
26 if (!odr_sequence_begin(o, p, sizeof(**p)))
27 return opt && odr_ok(o);
29 odr_implicit(o, odr_integer, &(*p)->tooManyWhat, ODR_CONTEXT, 1, 0) &&
30 odr_implicit(o, odr_integer, &(*p)->max, ODR_CONTEXT, 2, 1) &&
34 int z_BadSpec(ODR o, Z_BadSpec **p, int opt)
36 if (!odr_sequence_begin(o, p, sizeof(**p)))
37 return opt && odr_ok(o);
39 odr_implicit(o, z_Specification, &(*p)->spec, ODR_CONTEXT, 1, 0) &&
40 odr_implicit(o, z_DatabaseName, &(*p)->db, ODR_CONTEXT, 2, 1) &&
41 odr_implicit_settag(o, ODR_CONTEXT, 3) &&
42 (odr_sequence_of(o, z_Specification, &(*p)->goodOnes,
43 &(*p)->num_goodOnes) || odr_ok(o)) &&
47 int z_DbUnavailWhy(ODR o, Z_DbUnavailWhy **p, int opt)
49 if (!odr_sequence_begin(o, p, sizeof(**p)))
50 return opt && odr_ok(o);
52 odr_implicit(o, odr_integer, &(*p)->reasonCode, ODR_CONTEXT, 1, 1) &&
53 odr_implicit(o, z_InternationalString, &(*p)->message, ODR_CONTEXT,
58 int z_DbUnavail(ODR o, Z_DbUnavail **p, int opt)
60 if (!odr_sequence_begin(o, p, sizeof(**p)))
61 return opt && odr_ok(o);
63 odr_implicit(o, z_DatabaseName, &(*p)->db, ODR_CONTEXT, 1, 0) &&
64 odr_implicit(o, z_DbUnavailWhy, &(*p)->why, ODR_CONTEXT, 2, 0) &&
68 int z_Attribute(ODR o, Z_Attribute **p, int opt)
70 if (!odr_sequence_begin(o, p, sizeof(**p)))
71 return opt && odr_ok(o);
73 odr_implicit(o, odr_oid, &(*p)->id, ODR_CONTEXT, 1, 0) &&
74 odr_implicit(o, odr_integer, &(*p)->type, ODR_CONTEXT, 2, 1) &&
75 odr_implicit(o, odr_integer, &(*p)->value, ODR_CONTEXT, 3, 1) &&
76 odr_explicit(o, z_Term, &(*p)->term, ODR_CONTEXT, 4, 1) &&
80 int z_AttCombo(ODR o, Z_AttCombo **p, int opt)
82 if (!odr_sequence_begin(o, p, sizeof(**p)))
83 return opt && odr_ok(o);
85 odr_implicit(o, z_AttributeList, &(*p)->unsupportedCombination,
87 odr_implicit_settag(o, ODR_CONTEXT, 2) &&
88 (odr_sequence_of(o, z_AttributeList, &(*p)->alternatives,
89 &(*p)->num_alternatives) || odr_ok(o)) &&
93 int z_DiagTerm(ODR o, Z_DiagTerm **p, int opt)
95 if (!odr_sequence_begin(o, p, sizeof(**p)))
96 return opt && odr_ok(o);
98 odr_implicit(o, odr_integer, &(*p)->problem, ODR_CONTEXT, 1, 1) &&
99 odr_explicit(o, z_Term, &(*p)->term, ODR_CONTEXT, 2, 0) &&
103 int z_Proximity(ODR o, Z_Proximity **p, int opt)
105 static Odr_arm arm[] =
107 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Proximity_resultSets, odr_null},
108 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Proximity_badSet,
109 z_InternationalString},
110 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Proximity_relation, odr_integer},
111 {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_Proximity_unit, odr_integer},
112 {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_Proximity_distance, odr_integer},
113 {ODR_EXPLICIT, ODR_CONTEXT, 6, Z_Proximity_attributes, z_AttributeList},
114 {ODR_IMPLICIT, ODR_CONTEXT, 7, Z_Proximity_ordered, odr_null},
115 {ODR_IMPLICIT, ODR_CONTEXT, 8, Z_Proximity_exclusion, odr_null},
119 if (o->direction == ODR_DECODE)
120 *p = odr_malloc(o, sizeof(**p));
123 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
126 return opt && odr_ok(o);
129 int z_AttrListList(ODR o, Z_AttrListList **p, int opt)
131 if (o->direction == ODR_DECODE)
132 *p = odr_malloc(o, sizeof(**p));
135 if (odr_sequence_of(o, z_AttributeList, &(*p)->lists, &(*p)->num_lists))
138 return opt && odr_ok(o);
141 int z_Scan(ODR o, Z_Scan **p, int opt)
143 static Odr_arm arm[] =
145 {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_ScanD_nonZeroStepSize, odr_null},
146 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ScanD_specifiedStepSize, odr_null},
147 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_ScanD_termList1, odr_null},
148 {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_ScanD_termList2, z_AttrListList},
149 {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_ScanD_posInResponse, odr_integer},
150 {ODR_IMPLICIT, ODR_CONTEXT, 6, Z_ScanD_resources, odr_null},
151 {ODR_IMPLICIT, ODR_CONTEXT, 7, Z_ScanD_endOfList, odr_null},
155 if (o->direction == ODR_DECODE)
156 *p = odr_malloc(o, sizeof(**p));
159 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
162 return opt && odr_ok(o);
165 int z_Sort(ODR o, Z_Sort **p, int opt)
167 static Odr_arm arm[] =
169 {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_SortD_sequence, odr_null},
170 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_SortD_noRsName, odr_null},
171 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_SortD_tooMany, odr_integer},
172 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_SortD_incompatible, odr_null},
173 {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_SortD_generic, odr_null},
174 {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_SortD_dbSpecific, odr_null},
176 {ODR_EXPLICIT, ODR_CONTEXT, 6, Z_SortD_sortElement, z_SortElement},
178 {ODR_IMPLICIT, ODR_CONTEXT, 7, Z_SortD_key, odr_integer},
179 {ODR_IMPLICIT, ODR_CONTEXT, 8, Z_SortD_action, odr_null},
180 {ODR_IMPLICIT, ODR_CONTEXT, 9, Z_SortD_illegal, odr_integer},
181 {ODR_IMPLICIT, ODR_CONTEXT, 10, Z_SortD_inputTooLarge, z_StringList},
182 {ODR_IMPLICIT, ODR_CONTEXT, 11, Z_SortD_aggregateTooLarge, odr_null},
186 if (o->direction == ODR_DECODE)
187 *p = odr_malloc(o, sizeof(**p));
190 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
193 return opt && odr_ok(o);
196 int z_Segmentation(ODR o, Z_Segmentation **p, int opt)
198 static Odr_arm arm[] =
200 {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_SegmentationD_segments, odr_null},
204 if (o->direction == ODR_DECODE)
205 *p = odr_malloc(o, sizeof(**p));
208 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
211 return opt && odr_ok(o);
214 int z_ExtServices(ODR o, Z_ExtServices **p, int opt)
216 static Odr_arm arm[] =
218 {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_ExtServicesD_req, odr_integer},
219 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ExtServicesD_permission, odr_integer},
220 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ExtServicesD_immediate, odr_integer},
224 if (o->direction == ODR_DECODE)
225 *p = odr_malloc(o, sizeof(**p));
228 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
231 return opt && odr_ok(o);
234 int z_OidList(ODR o, Z_OidList **p, int opt)
236 if (o->direction == ODR_DECODE)
237 *p = odr_malloc(o, sizeof(**p));
240 if (odr_sequence_of(o, odr_oid, &(*p)->oids, &(*p)->num_oids))
243 return opt && odr_ok(o);
246 int z_AccessCtrl(ODR o, Z_AccessCtrl **p, int opt)
248 static Odr_arm arm[] =
250 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_AccessCtrlD_noUser, odr_null},
251 {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_AccessCtrlD_refused, odr_null},
252 {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_AccessCtrlD_simple, odr_null},
253 {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_AccessCtrlD_oid, z_OidList},
254 {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_AccessCtrlD_alternative, z_OidList},
255 {ODR_IMPLICIT, ODR_CONTEXT, 6, Z_AccessCtrlD_pwdInv, odr_null},
256 {ODR_IMPLICIT, ODR_CONTEXT, 7, Z_AccessCtrlD_pwdExp, odr_null},
260 if (o->direction == ODR_DECODE)
261 *p = odr_malloc(o, sizeof(**p));
264 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
267 return opt && odr_ok(o);
270 int z_RecordSyntax(ODR o, Z_RecordSyntax **p, int opt)
272 if (!odr_sequence_begin(o, p, sizeof(**p)))
273 return opt && odr_ok(o);
275 odr_implicit(o, odr_oid, &(*p)->unsupportedSyntax, ODR_CONTEXT, 1, 0) &&
276 odr_implicit_settag(o, ODR_CONTEXT, 2) &&
277 (odr_sequence_of(o, odr_oid, &(*p)->suggestedAlternatives,
278 &(*p)->num_suggestedAlternatives) || odr_ok(o)) &&
282 int z_DiagFormat(ODR o, Z_DiagFormat **p, int opt)
284 static Odr_arm arm[] =
286 {ODR_IMPLICIT, ODR_CONTEXT, 1000, Z_DiagFormat_tooMany, z_TooMany},
287 {ODR_IMPLICIT, ODR_CONTEXT, 1001, Z_DiagFormat_badSpec, z_BadSpec},
288 {ODR_IMPLICIT, ODR_CONTEXT, 1002, Z_DiagFormat_dbUnavail, z_DbUnavail},
289 {ODR_IMPLICIT, ODR_CONTEXT, 1003, Z_DiagFormat_unSupOp, odr_integer},
290 {ODR_IMPLICIT, ODR_CONTEXT, 1004, Z_DiagFormat_attribute, z_Attribute},
291 {ODR_IMPLICIT, ODR_CONTEXT, 1005, Z_DiagFormat_attCombo, z_AttCombo},
292 {ODR_IMPLICIT, ODR_CONTEXT, 1006, Z_DiagFormat_term, z_DiagTerm},
293 {ODR_EXPLICIT, ODR_CONTEXT, 1007, Z_DiagFormat_proximity, z_Proximity},
294 {ODR_EXPLICIT, ODR_CONTEXT, 1008, Z_DiagFormat_scan, z_Scan},
295 {ODR_EXPLICIT, ODR_CONTEXT, 1009, Z_DiagFormat_sort, z_Sort},
296 {ODR_EXPLICIT, ODR_CONTEXT, 1010, Z_DiagFormat_segmentation,
298 {ODR_EXPLICIT, ODR_CONTEXT, 1011, Z_DiagFormat_extServices,
300 {ODR_EXPLICIT, ODR_CONTEXT, 1012, Z_DiagFormat_accessCtrl,
302 {ODR_IMPLICIT, ODR_CONTEXT, 1013, Z_DiagFormat_recordSyntax,
307 if (o->direction == ODR_DECODE)
308 *p = odr_malloc(o, sizeof(**p));
311 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
314 return opt && odr_ok(o);
317 int z_Diagnostic(ODR o, Z_Diagnostic **p, int opt)
319 static Odr_arm arm[] =
321 {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Diagnostic_defaultDiagRec,
322 z_DefaultDiagFormat},
323 {ODR_EXPLICIT, ODR_CONTEXT, 2, Z_Diagnostic_explicitDiagnostic,
328 if (o->direction == ODR_DECODE)
329 *p = odr_malloc(o, sizeof(**p));
332 if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
335 return opt && odr_ok(o);
338 int z_DiagnosticUnit(ODR o, Z_DiagnosticUnit **p, int opt)
340 if (!odr_sequence_begin(o, p, sizeof(**p)))
341 return opt && odr_ok(o);
343 odr_explicit(o, z_Diagnostic, &(*p)->diagnostic, ODR_CONTEXT, 1, 1) &&
344 odr_implicit(o, z_InternationalString, &(*p)->message, ODR_CONTEXT,
349 int z_DiagnosticFormat(ODR o, Z_DiagnosticFormat **p, int opt)
351 if (o->direction == ODR_DECODE)
352 *p = odr_malloc(o, sizeof(**p));
355 if (odr_sequence_of(o, z_DiagnosticUnit, &(*p)->diagnostics,
356 &(*p)->num_diagnostics))
359 return opt && odr_ok(o);