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