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