Added EXTERNAL handling for item update0 (1.0).
[yaz-moved-to-github.git] / zutil / zget.c
1 /*
2  * Copyright (c) 1995-2001, Index Data.
3  * See the file LICENSE for details.
4  * Sebastian Hammer, Adam Dickmeiss
5  *
6  * $Log: zget.c,v $
7  * Revision 1.8  2001-05-17 14:16:15  adam
8  * Added EXTERNAL handling for item update0 (1.0).
9  *
10  * Revision 1.7  2001/05/16 07:22:56  adam
11  * YAZ CVS Date part of implementationVersion in init{request,Response}.
12  *
13  * Revision 1.6  2001/03/25 21:55:13  adam
14  * Added odr_intdup. Ztest server returns TaskPackage for ItemUpdate.
15  *
16  * Revision 1.5  2001/03/13 18:11:38  adam
17  * Altered zget_ExtendedServicesRequest - sets waitAction to waitIfPossible.
18  *
19  * Revision 1.4  2001/02/21 13:46:54  adam
20  * C++ fixes.
21  *
22  * Revision 1.3  2000/03/20 19:06:25  adam
23  * Added Segment request for fronend server. Work on admin for client.
24  *
25  * Revision 1.2  1999/11/30 13:47:12  adam
26  * Improved installation. Moved header files to include/yaz.
27  *
28  * Revision 1.1  1999/06/08 10:10:16  adam
29  * New sub directory zutil. Moved YAZ Compiler to be part of YAZ tree.
30  *
31  * Revision 1.17  1999/04/20 09:56:48  adam
32  * Added 'name' paramter to encoder/decoder routines (typedef Odr_fun).
33  * Modified all encoders/decoders to reflect this change.
34  *
35  * Revision 1.16  1998/08/19 16:10:05  adam
36  * Changed som member names of DeleteResultSetRequest/Response.
37  *
38  * Revision 1.15  1998/03/31 15:13:19  adam
39  * Development towards compiled ASN.1.
40  *
41  * Revision 1.14  1998/02/11 11:53:32  adam
42  * Changed code so that it compiles as C++.
43  *
44  * Revision 1.13  1998/01/29 13:13:39  adam
45  * Function zget_presentRequest fills resultSetId with "default" instead
46  * of "Default".
47  *
48  * Revision 1.12  1997/10/29 12:00:37  adam
49  * Routine zget_SearchRequest fills resultSetName member with "default"
50  * instead of "Default".
51  *
52  * Revision 1.11  1997/05/02 08:39:10  quinn
53  * New PDUs added, thanks to Ronald van der Meer
54  *
55  * Revision 1.10  1996/01/02 08:57:23  quinn
56  * Changed enums in the ASN.1 .h files to #defines. Changed oident.class to oclass
57  *
58  * Revision 1.9  1995/09/29  17:11:55  quinn
59  * Smallish
60  *
61  * Revision 1.8  1995/09/27  15:02:43  quinn
62  * Modified function heads & prototypes.
63  *
64  * Revision 1.7  1995/06/15  07:44:52  quinn
65  * Moving to v3.
66  *
67  * Revision 1.6  1995/06/14  15:26:37  quinn
68  * *** empty log message ***
69  *
70  * Revision 1.5  1995/06/07  14:42:30  quinn
71  * Fixed CLOSE
72  *
73  * Revision 1.4  1995/06/07  14:36:25  quinn
74  * Added CLOSE
75  *
76  * Revision 1.3  1995/06/05  10:52:06  quinn
77  * Fixed some negligences.
78  *
79  * Revision 1.2  1995/05/30  10:15:49  quinn
80  * Added our implementor's ID
81  *
82  * Revision 1.1  1995/05/22  11:30:20  quinn
83  * Adding Z39.50-1992 stuff to proto.c. Adding zget.c
84  *
85  *
86  */
87
88 #include <yaz/proto.h>
89
90 Z_InitRequest *zget_InitRequest(ODR o)
91 {
92     Z_InitRequest *r = (Z_InitRequest *)odr_malloc(o, sizeof(*r));
93
94     r->referenceId = 0;
95     r->options = (Odr_bitmask *)odr_malloc(o, sizeof(*r->options));
96     ODR_MASK_ZERO(r->options);
97     r->protocolVersion = (Odr_bitmask *)odr_malloc(o, sizeof(*r->protocolVersion));
98     ODR_MASK_ZERO(r->protocolVersion);
99     r->preferredMessageSize = odr_intdup(o, 30*1024);
100     r->maximumRecordSize = odr_intdup(o, 30*1024);
101     r->idAuthentication = 0;
102     r->implementationId = "81";
103     r->implementationName = "Index Data/YAZ";
104     r->implementationVersion = YAZ_VERSION
105 #ifdef YAZ_DATE_STR
106     " (" YAZ_DATE_STR ")"
107 #endif
108         ;
109     r->userInformationField = 0;
110     r->otherInfo = 0;
111     return r;
112 }
113
114 Z_InitResponse *zget_InitResponse(ODR o)
115 {
116     Z_InitResponse *r = (Z_InitResponse *)odr_malloc(o, sizeof(*r));
117
118     r->referenceId = 0;
119     r->options = (Odr_bitmask *)odr_malloc(o, sizeof(*r->options));
120     ODR_MASK_ZERO(r->options);
121     r->protocolVersion = (Odr_bitmask *)odr_malloc(o, sizeof(*r->protocolVersion));
122     ODR_MASK_ZERO(r->protocolVersion);
123     r->preferredMessageSize = odr_intdup(o, 30*1024);
124     r->maximumRecordSize = odr_intdup(o, 30*1024);
125     r->result = odr_intdup(o, 1);
126     r->implementationId = "81";
127     r->implementationName = "Index Data/YAZ";
128     r->implementationVersion = YAZ_VERSION
129 #ifdef YAZ_DATE_STR
130     " (" YAZ_DATE_STR ")"
131 #endif
132         ;
133     r->userInformationField = 0;
134     r->otherInfo = 0;
135     return r;
136 }
137
138 Z_SearchRequest *zget_SearchRequest(ODR o)
139 {
140     Z_SearchRequest *r = (Z_SearchRequest *)odr_malloc(o, sizeof(*r));
141
142     r->referenceId = 0;
143     r->smallSetUpperBound = odr_intdup(o, 0);
144     r->largeSetLowerBound = odr_intdup(o, 1);
145     r->mediumSetPresentNumber = odr_intdup(o, 0);
146     r->replaceIndicator = odr_intdup(o, 1);
147     r->resultSetName = "default";
148     r->num_databaseNames = 0;
149     r->databaseNames = 0;
150     r->smallSetElementSetNames = 0;
151     r->mediumSetElementSetNames = 0;
152     r->preferredRecordSyntax = 0;
153     r->query = 0;
154     r->additionalSearchInfo = 0;
155     r->otherInfo = 0;
156     return r;
157 }
158
159 Z_SearchResponse *zget_SearchResponse(ODR o)
160 {
161     Z_SearchResponse *r = (Z_SearchResponse *)odr_malloc(o, sizeof(*r));
162
163     r->referenceId = 0;
164     r->resultCount = odr_intdup(o, 0);
165     r->numberOfRecordsReturned = odr_intdup(o, 0);
166     r->nextResultSetPosition = odr_intdup(o, 0);
167     r->searchStatus = odr_intdup(o, 1);
168     r->resultSetStatus = 0;
169     r->presentStatus = 0;
170     r->records = 0;
171     r->additionalSearchInfo = 0;
172     r->otherInfo = 0;
173     return r;
174 }
175
176 Z_PresentRequest *zget_PresentRequest(ODR o)
177 {
178     Z_PresentRequest *r = (Z_PresentRequest *)odr_malloc(o, sizeof(*r));
179
180     r->referenceId = 0;
181     r->resultSetId = "default";
182     r->resultSetStartPoint = odr_intdup(o, 1);
183     r->numberOfRecordsRequested = odr_intdup(o, 10);
184     r->num_ranges = 0;
185     r->additionalRanges = 0;
186     r->recordComposition = 0;
187     r->preferredRecordSyntax = 0;
188     r->maxSegmentCount = 0;
189     r->maxRecordSize = 0;
190     r->maxSegmentSize = 0;
191     r->otherInfo = 0;
192     return r;
193 }
194
195 Z_PresentResponse *zget_PresentResponse(ODR o)
196 {
197     Z_PresentResponse *r = (Z_PresentResponse *)odr_malloc(o, sizeof(*r));
198
199     r->referenceId = 0;
200     r->numberOfRecordsReturned = odr_intdup(o, 0);
201     r->nextResultSetPosition = odr_intdup(o, 0);
202     r->presentStatus = odr_intdup(o, Z_PRES_SUCCESS);
203     r->records = 0;
204     r->otherInfo = 0;
205     return r;
206 }
207
208 Z_DeleteResultSetRequest *zget_DeleteResultSetRequest(ODR o)
209 {
210     Z_DeleteResultSetRequest *r = (Z_DeleteResultSetRequest *)
211         odr_malloc(o, sizeof(*r));
212
213     r->referenceId = 0;
214     r->deleteFunction = odr_intdup(o, Z_DeleteRequest_list);
215     r->num_resultSetList = 0;
216     r->resultSetList = 0;
217     r->otherInfo = 0;
218     return r;
219 }
220
221 Z_DeleteResultSetResponse *zget_DeleteResultSetResponse(ODR o)
222 {
223     Z_DeleteResultSetResponse *r = (Z_DeleteResultSetResponse *)
224         odr_malloc(o, sizeof(*r));
225     
226     r->referenceId = 0;
227     r->deleteOperationStatus = odr_intdup(o, Z_DeleteStatus_success);
228     r->deleteListStatuses = 0;
229     r->numberNotDeleted = 0;
230     r->bulkStatuses = 0;
231     r->deleteMessage = 0;
232     r->otherInfo = 0;
233     return r;
234 }
235
236 Z_ScanRequest *zget_ScanRequest(ODR o)
237 {
238     Z_ScanRequest *r = (Z_ScanRequest *)odr_malloc(o, sizeof(*r));
239     
240     r->referenceId = 0;
241     r->num_databaseNames = 0;
242     r->databaseNames = 0;
243     r->attributeSet = 0;
244     r->termListAndStartPoint = 0;
245     r->stepSize = 0;
246     r->numberOfTermsRequested = odr_intdup(o, 20);
247     r->preferredPositionInResponse = 0;
248     r->otherInfo = 0;
249     return r;
250 }
251
252 Z_ScanResponse *zget_ScanResponse(ODR o)
253 {
254     Z_ScanResponse *r = (Z_ScanResponse *)odr_malloc(o, sizeof(*r));
255     
256     r->referenceId = 0;
257     r->stepSize = 0;
258     r->scanStatus = odr_intdup(o, Z_Scan_success);
259     r->numberOfEntriesReturned = odr_intdup(o, 0);
260     r->positionOfTerm =0;
261     r->entries = 0;
262     r->attributeSet = 0;
263     r->otherInfo = 0;
264     return r;
265 }
266
267 Z_TriggerResourceControlRequest *zget_TriggerResourceControlRequest(ODR o)
268 {
269     Z_TriggerResourceControlRequest *r = (Z_TriggerResourceControlRequest *)
270         odr_malloc(o, sizeof(*r));
271     
272     r->referenceId = 0;
273     r->requestedAction = odr_intdup(o, Z_TriggerResourceCtrl_resourceReport);
274     r->prefResourceReportFormat = 0;
275     r->resultSetWanted = 0;
276     r->otherInfo = 0;
277     return r;
278 }
279
280 Z_ResourceControlRequest *zget_ResourceControlRequest(ODR o)
281 {
282     Z_ResourceControlRequest *r = (Z_ResourceControlRequest *)
283         odr_malloc(o, sizeof(*r));
284
285     r->referenceId = 0;
286     r->suspendedFlag = 0;
287     r->resourceReport = 0;
288     r->partialResultsAvailable = 0;
289     r->responseRequired = odr_intdup(o, 0);
290     r->triggeredRequestFlag = 0;
291     r->otherInfo = 0;
292     return r;
293 }
294
295 Z_ResourceControlResponse *zget_ResourceControlResponse(ODR o)
296 {
297     Z_ResourceControlResponse *r = (Z_ResourceControlResponse *)
298         odr_malloc(o, sizeof(*r));
299
300     r->referenceId = 0;
301     r->continueFlag = odr_intdup(o, 1);
302     r->resultSetWanted = 0;
303     r->otherInfo = 0;
304     return r;
305 }
306
307 Z_AccessControlRequest *zget_AccessControlRequest(ODR o)
308 {
309     Z_AccessControlRequest *r = (Z_AccessControlRequest *)
310         odr_malloc(o, sizeof(*r));
311
312     r->referenceId = 0;
313     r->which = Z_AccessRequest_simpleForm;
314     r->u.simpleForm = 0;
315     r->otherInfo = 0;
316     return r;
317 }
318
319 Z_AccessControlResponse *zget_AccessControlResponse(ODR o)
320 {
321     Z_AccessControlResponse *r = (Z_AccessControlResponse *)
322         odr_malloc(o, sizeof(*r));
323
324     r->referenceId = 0;
325     r->which = Z_AccessResponse_simpleForm;
326     r->u.simpleForm = 0;
327     r->diagnostic = 0;
328     r->otherInfo = 0;
329     return r;
330 }
331
332 Z_Segment *zget_Segment(ODR o)
333 {
334     Z_Segment *r = (Z_Segment *)odr_malloc(o, sizeof(*r));
335
336     r->referenceId = 0;
337     r->numberOfRecordsReturned = odr_intdup(o, 0);
338     r->num_segmentRecords = 0;
339     r->segmentRecords = (Z_NamePlusRecord **) odr_nullval();
340     r->otherInfo = 0;
341     return r;
342 }
343
344 Z_Close *zget_Close(ODR o)
345 {
346     Z_Close *r = (Z_Close *)odr_malloc(o, sizeof(*r));
347
348     r->referenceId = 0;
349     r->closeReason = odr_intdup(o, Z_Close_finished);
350     r->diagnosticInformation = 0;
351     r->resourceReportFormat = 0;
352     r->resourceReport = 0;
353     r->otherInfo = 0;
354     return r;
355 }
356
357 Z_ResourceReportRequest *zget_ResourceReportRequest(ODR o)
358 {
359     Z_ResourceReportRequest *r = (Z_ResourceReportRequest *)
360         odr_malloc(o, sizeof(*r));
361
362     r->referenceId = 0;
363     r->opId = 0;
364     r->prefResourceReportFormat = 0;
365     r->otherInfo = 0;
366     return r;
367 }
368
369 Z_ResourceReportResponse *zget_ResourceReportResponse(ODR o)
370 {
371     Z_ResourceReportResponse *r = (Z_ResourceReportResponse *)
372         odr_malloc(o, sizeof(*r));
373
374     r->referenceId = 0;
375     r->resourceReportStatus = odr_intdup(o, Z_ResourceReportStatus_success);
376     r->resourceReport = 0;
377     r->otherInfo = 0;
378     return r;
379 }
380
381 Z_SortRequest *zget_SortRequest(ODR o)
382 {
383     Z_SortRequest *r = (Z_SortRequest *)odr_malloc(o, sizeof(*r));
384
385     r->referenceId = 0;
386     r->inputResultSetNames = 0;
387     r->sortedResultSetName = 0;
388     r->sortSequence = 0;
389     r->otherInfo = 0;
390     return r;
391 }
392
393 Z_SortResponse *zget_SortResponse(ODR o)
394 {
395     Z_SortResponse *r = (Z_SortResponse *)odr_malloc(o, sizeof(*r));
396
397     r->referenceId = 0;
398     r->sortStatus = odr_intdup(o, Z_SortStatus_success);
399     r->resultSetStatus = odr_intdup(o, Z_SortResultSetStatus_empty);
400     r->diagnostics = 0;
401     r->otherInfo = 0;
402     return r;
403 }
404
405 Z_ExtendedServicesRequest *zget_ExtendedServicesRequest(ODR o)
406 {
407     Z_ExtendedServicesRequest *r = (Z_ExtendedServicesRequest *)
408         odr_malloc(o, sizeof(*r));
409
410     r->referenceId = 0;
411     r->function = odr_intdup(o, Z_ExtendedServicesRequest_create);
412     r->packageType = 0;
413     r->packageName = 0;
414     r->userId = 0;
415     r->retentionTime = 0;
416     r->permissions = 0;
417     r->description = 0;
418     r->taskSpecificParameters = 0;
419     r->waitAction = odr_intdup(o, Z_ExtendedServicesRequest_waitIfPossible);
420     r->elements = 0;
421     r->otherInfo = 0;
422     return r;
423 }
424
425 Z_ExtendedServicesResponse *zget_ExtendedServicesResponse(ODR o)
426 {
427     Z_ExtendedServicesResponse *r = (Z_ExtendedServicesResponse *)
428         odr_malloc(o, sizeof(*r));
429
430     r->referenceId = 0;
431     r->operationStatus = odr_intdup(o, Z_ExtendedServicesResponse_done);
432     r->num_diagnostics = 0;
433     r->diagnostics = 0;
434     r->taskPackage = 0;
435     r->otherInfo = 0;
436     return r;
437 }
438
439 Z_APDU *zget_APDU(ODR o, int which)
440 {
441     Z_APDU *r = (Z_APDU *)odr_malloc(o, sizeof(*r));
442
443     switch (r->which = which)
444     {
445         case Z_APDU_initRequest:
446             r->u.initRequest = zget_InitRequest(o);
447             break;
448         case Z_APDU_initResponse:
449             r->u.initResponse = zget_InitResponse(o);
450             break;
451         case Z_APDU_searchRequest:
452             r->u.searchRequest = zget_SearchRequest(o);
453             break;
454         case Z_APDU_searchResponse:
455             r->u.searchResponse = zget_SearchResponse(o);
456             break;
457         case Z_APDU_presentRequest:
458             r->u.presentRequest = zget_PresentRequest(o);
459             break;
460         case Z_APDU_presentResponse:
461             r->u.presentResponse = zget_PresentResponse(o);
462             break;
463         case Z_APDU_deleteResultSetRequest:
464             r->u.deleteResultSetRequest = zget_DeleteResultSetRequest(o);
465             break;
466         case Z_APDU_deleteResultSetResponse:
467             r->u.deleteResultSetResponse = zget_DeleteResultSetResponse(o);
468             break;
469         case Z_APDU_scanRequest:
470             r->u.scanRequest = zget_ScanRequest(o);
471             break;
472         case Z_APDU_scanResponse:
473             r->u.scanResponse = zget_ScanResponse(o);
474             break;
475         case Z_APDU_triggerResourceControlRequest:
476             r->u.triggerResourceControlRequest =
477                 zget_TriggerResourceControlRequest(o);
478             break;
479         case Z_APDU_resourceControlRequest:
480             r->u.resourceControlRequest = zget_ResourceControlRequest(o);
481             break;
482         case Z_APDU_resourceControlResponse:
483             r->u.resourceControlResponse = zget_ResourceControlResponse(o);
484             break;
485         case Z_APDU_segmentRequest:
486             r->u.segmentRequest = zget_Segment(o);
487             break;
488         case Z_APDU_close:
489             r->u.close = zget_Close(o);
490             break;
491         case Z_APDU_accessControlRequest:
492             r->u.accessControlRequest = zget_AccessControlRequest(o);
493             break;
494         case Z_APDU_accessControlResponse:
495             r->u.accessControlResponse = zget_AccessControlResponse(o);
496             break;
497         case Z_APDU_resourceReportRequest:
498             r->u.resourceReportRequest = zget_ResourceReportRequest(o);
499             break;
500         case Z_APDU_resourceReportResponse:
501             r->u.resourceReportResponse = zget_ResourceReportResponse(o);
502             break;
503         case Z_APDU_sortRequest:
504             r->u.sortRequest = zget_SortRequest(o);
505             break;
506         case Z_APDU_sortResponse:
507             r->u.sortResponse = zget_SortResponse(o);
508             break;
509         case Z_APDU_extendedServicesRequest:
510             r->u.extendedServicesRequest = zget_ExtendedServicesRequest(o);
511             break;
512         case Z_APDU_extendedServicesResponse:
513             r->u.extendedServicesResponse = zget_ExtendedServicesResponse(o);
514             break;
515         default:
516             fprintf(stderr, "Bad APDU-type to zget_APDU");
517             exit(1);
518     }
519     return r;
520 }