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