1 /* $Id: gduutil.cpp,v 1.9 2006-09-19 13:50:17 marc Exp $
2 Copyright (c) 2005-2006, Index Data.
4 See the LICENSE file for details
10 #include <yaz/wrbuf.h>
11 #include <yaz/querytowrbuf.h>
16 namespace mp = metaproxy_1;
18 // Doxygen doesn't like mp::gdu, so we use this instead
19 namespace mp_gdu = metaproxy_1::gdu;
21 std::ostream& std::operator<<(std::ostream& os, Z_GDU& zgdu)
23 if (zgdu.which == Z_GDU_Z3950)
27 os << *(zgdu.u.z3950);
29 else if (zgdu.which == Z_GDU_HTTP_Request)
32 if (zgdu.u.HTTP_Request)
33 os << " " << *(zgdu.u.HTTP_Request);
35 else if (zgdu.which == Z_GDU_HTTP_Response)
37 os << "HTTP_Response";
38 if (zgdu.u.HTTP_Response)
39 os << " " << *(zgdu.u.HTTP_Response);
46 std::ostream& std::operator<<(std::ostream& os, Z_HTTP_Request& httpreq)
48 os << httpreq.method << " ";
54 std::ostream& std::operator<<(std::ostream& os, Z_HTTP_Response& httpres)
56 os << httpres.code << " ";
57 os << httpres.content_len;
61 std::ostream& std::operator<<(std::ostream& os, Z_Records & rs)
64 case Z_Records_DBOSD :
67 if (rs.u.nonSurrogateDiagnostic)
68 os << *(rs.u.nonSurrogateDiagnostic);
70 case Z_Records_multipleNSD:
71 os << "Z_Records_multipleNSD";
72 //os << *(rs.u.multipleNonSurDiagnostics);
81 std::ostream& std::operator<<(std::ostream& os, Z_DiagRec& dr)
84 case Z_DiagRec_defaultFormat:
85 if (dr.u.defaultFormat)
86 os << *(dr.u.defaultFormat);
88 case Z_DiagRec_externallyDefined :
89 os << "Z_DiagRec_externallyDefined";
98 std::ostream& std::operator<<(std::ostream& os, Z_DefaultDiagFormat& ddf)
101 os << *(ddf.condition) << " ";
104 case Z_DefaultDiagFormat_v2Addinfo:
105 os << ddf.u.v2Addinfo;
107 case Z_DefaultDiagFormat_v3Addinfo:
108 os << ddf.u.v3Addinfo;
111 os << "Z_DefaultDiagFormat" ;
117 std::ostream& std::operator<<(std::ostream& os, Z_APDU& zapdu)
119 switch(zapdu.which) {
121 case Z_APDU_initRequest:
122 os << " " << "initRequest" << " ";
126 = zapdu.u.initRequest;
128 Z_IdAuthentication *a = ir->idAuthentication;
129 if (a && a->which == Z_IdAuthentication_idPass )
130 os << a->u.idPass->userId << " ";
131 //<< ":" << a->u.idPass->groupId << " ";
135 std::list<std::string> vhosts;
136 mp::util::get_vhost_otherinfo(ir->otherInfo, vhosts);
138 copy(vhosts.begin(), vhosts.end(),
139 ostream_iterator<string>(os, " "));
144 os << (ir->implementationId) << " "
145 //<< ir->referenceId << " "
146 << (ir->implementationName) << " "
147 << (ir->implementationVersion);
150 case Z_APDU_initResponse:
151 os << " " << "initResponse" << " ";
154 = zapdu.u.initResponse;
155 if (ir->result && *(ir->result))
157 << (ir->implementationId) << " "
158 //<< ir->referenceId << " "
159 << (ir->implementationName) << " "
160 << (ir->implementationVersion) << " ";
165 case Z_APDU_searchRequest:
166 os << " " << "searchRequest" << " ";
169 = zapdu.u.searchRequest;
171 for (int i = 0; i < sr->num_databaseNames; i++)
173 os << sr->databaseNames[i];
174 if (i+1 == sr->num_databaseNames)
180 WRBUF wr = wrbuf_alloc();
181 yaz_query_to_wrbuf(wr, sr->query);
186 case Z_APDU_searchResponse:
187 os << " " << "searchResponse" << " ";
190 = zapdu.u.searchResponse;
191 if (sr->searchStatus && *(sr->searchStatus))
195 os << " " << *(sr->resultCount);
198 //<< sr->referenceId << " "
199 if (sr->numberOfRecordsReturned)
200 os << " " << *(sr->numberOfRecordsReturned);
203 if (sr->nextResultSetPosition)
204 os << " " << *(sr->nextResultSetPosition);
210 os << "DIAG " << *(sr->records);
215 case Z_APDU_presentRequest:
216 os << " " << "presentRequest" << " ";
218 Z_PresentRequest *pr = zapdu.u.presentRequest;
219 os << pr->resultSetId << " "
220 //<< pr->referenceId << " "
221 << *(pr->resultSetStartPoint) << " "
222 << *(pr->numberOfRecordsRequested);
225 case Z_APDU_presentResponse:
226 os << " " << "presentResponse" << " ";
228 Z_PresentResponse *pr
229 = zapdu.u.presentResponse;
230 if ((pr->presentStatus) && !*(pr->presentStatus))
233 //<< pr->referenceId << " "
234 if (pr->numberOfRecordsReturned)
235 os << " " << *(pr->numberOfRecordsReturned);
238 if (pr->nextResultSetPosition)
239 os << " " << *(pr->nextResultSetPosition);
245 os << "DIAG " << *(pr->records);
249 //os << "DIAG" << " "
251 //<< pr->referenceId << " "
252 //<< *(pr->numberOfRecordsReturned) << " "
253 //<< *(pr->nextResultSetPosition);
256 case Z_APDU_deleteResultSetRequest:
257 os << " " << "deleteResultSetRequest";
259 case Z_APDU_deleteResultSetResponse:
260 os << " " << "deleteResultSetResponse";
262 case Z_APDU_accessControlRequest:
263 os << " " << "accessControlRequest";
265 case Z_APDU_accessControlResponse:
266 os << " " << "accessControlResponse";
268 case Z_APDU_resourceControlRequest:
269 os << " " << "resourceControlRequest";
271 case Z_APDU_resourceControlResponse:
272 os << " " << "resourceControlResponse";
274 case Z_APDU_triggerResourceControlRequest:
275 os << " " << "triggerResourceControlRequest";
277 case Z_APDU_resourceReportRequest:
278 os << " " << "resourceReportRequest";
280 case Z_APDU_resourceReportResponse:
281 os << " " << "resourceReportResponse";
283 case Z_APDU_scanRequest:
284 os << " " << "scanRequest" << " ";
287 = zapdu.u.scanRequest;
291 for (int i = 0; i < sr->num_databaseNames; i++)
293 os << sr->databaseNames[i];
294 if (i+1 == sr->num_databaseNames)
299 if (sr->numberOfTermsRequested)
300 os << " " << *(sr->numberOfTermsRequested);
303 if (sr->preferredPositionInResponse)
304 os << " " << *(sr->preferredPositionInResponse);
308 os << " " << *(sr->stepSize);
312 if (sr->termListAndStartPoint)
314 WRBUF wr = wrbuf_alloc();
315 yaz_scan_to_wrbuf(wr, sr->termListAndStartPoint, VAL_NONE);
324 case Z_APDU_scanResponse:
325 os << " " << "scanResponse" << " ";
328 = zapdu.u.scanResponse;
331 if ((sr->scanStatus) && !*(sr->scanStatus))
334 //<< *(sr->scanStatus) << " "
335 if (sr->numberOfEntriesReturned)
336 os << " " << *(sr->numberOfEntriesReturned);
339 //<< sr->referenceId << " "
340 if (sr->positionOfTerm)
341 os << " " << *(sr->positionOfTerm);
345 os << " " << *(sr->stepSize);
353 os << " " << *(sr->scanStatus) << " ";
355 switch (*(sr->scanStatus)){
359 case Z_Scan_partial_1:
362 case Z_Scan_partial_2:
365 case Z_Scan_partial_3:
368 case Z_Scan_partial_4:
371 case Z_Scan_partial_5:
381 if (sr->numberOfEntriesReturned)
382 os << " " << *(sr->numberOfEntriesReturned);
389 case Z_APDU_sortRequest:
390 os << " " << "sortRequest" << " ";
392 case Z_APDU_sortResponse:
393 os << " " << "sortResponse" << " ";
395 case Z_APDU_segmentRequest:
396 os << " " << "segmentRequest" << " ";
398 case Z_APDU_extendedServicesRequest:
399 os << " " << "extendedServicesRequest";
401 Z_ExtendedServicesRequest *er
402 = zapdu.u.extendedServicesRequest;
408 switch(*(er->function))
410 case Z_ExtendedServicesRequest_create:
413 case Z_ExtendedServicesRequest_delete:
416 case Z_ExtendedServicesRequest_modify:
428 os << " " << er->userId ;
433 os << " " << er->packageName;
438 os << " " << er->description;
444 case Z_APDU_extendedServicesResponse:
445 os << " " << "extendedServicesResponse";
447 Z_ExtendedServicesResponse *er
448 = zapdu.u.extendedServicesResponse;
451 if (er->operationStatus)
454 switch (*(er->operationStatus)){
455 case Z_ExtendedServicesResponse_done:
458 case Z_ExtendedServicesResponse_accepted:
461 case Z_ExtendedServicesResponse_failure:
462 if (er->num_diagnostics)
463 os << "DIAG " << **(er->diagnostics);
477 os << " " << "close" << " ";
485 os << *(c->closeReason) << " ";
487 switch (*(c->closeReason)) {
488 case Z_Close_finished:
491 case Z_Close_shutdown:
494 case Z_Close_systemProblem:
495 os << "systemProblem";
497 case Z_Close_costLimit:
500 case Z_Close_resources:
503 case Z_Close_securityViolation:
504 os << "securityViolation";
506 case Z_Close_protocolError:
507 os << "protocolError";
509 case Z_Close_lackOfActivity:
510 os << "lackOfActivity";
512 case Z_Close_peerAbort:
515 case Z_Close_unspecified:
523 if (c->diagnosticInformation)
524 os << " " << c->diagnosticInformation;
528 case Z_APDU_duplicateDetectionRequest:
529 os << " " << "duplicateDetectionRequest";
531 case Z_APDU_duplicateDetectionResponse:
532 os << " " << "duplicateDetectionResponse";
535 os << " " << "Z_APDU " << "UNKNOWN";
542 std::ostream& std::operator<<(std::ostream& os, Z_SRW_PDU& srw_pdu)
546 switch(srw_pdu.which) {
547 case Z_SRW_searchRetrieve_request:
548 os << " " << "searchRetrieveRequest";
550 Z_SRW_searchRetrieveRequest *sr = srw_pdu.u.request;
554 os << " " << (sr->database);
558 os << " " << *(sr->startRecord);
561 if (sr->maximumRecords)
562 os << " " << *(sr->maximumRecords);
565 if (sr->recordPacking)
566 os << " " << *(sr->recordPacking);
570 switch (sr->query_type){
571 case Z_SRW_query_type_cql:
572 os << " CQL " << sr->query.cql;
574 case Z_SRW_query_type_xcql:
577 case Z_SRW_query_type_pqf:
578 os << " PQF " << sr->query.pqf;
584 case Z_SRW_searchRetrieve_response:
585 os << " " << "searchRetrieveResponse";
587 case Z_SRW_explain_request:
588 os << " " << "explainRequest";
590 case Z_SRW_explain_response:
591 os << " " << "explainResponse";
593 case Z_SRW_scan_request:
594 os << " " << "scanRequest";
596 case Z_SRW_scan_response:
597 os << " " << "scanResponse";
599 case Z_SRW_update_request:
600 os << " " << "updateRequest";
602 case Z_SRW_update_response:
603 os << " " << "updateResponse";
606 os << " " << "UNKNOWN";
615 // = zapdu.u.initRequest;
617 // Z_IdAuthentication *a = ir->idAuthentication;
618 // if (a && a->which == Z_IdAuthentication_idPass )
619 // os << a->u.idPass->userId << " ";
620 // //<< ":" << a->u.idPass->groupId << " ";
624 // std::list<std::string> vhosts;
625 // mp::util::get_vhost_otherinfo(ir->otherInfo, vhosts);
626 // if (vhosts.size()){
627 // copy(vhosts.begin(), vhosts.end(),
628 // ostream_iterator<string>(os, " "));
631 // os << "-" << " " ;
633 // os << (ir->implementationId) << " "
634 // //<< ir->referenceId << " "
635 // << (ir->implementationName) << " "
636 // << (ir->implementationVersion);
639 // case Z_APDU_initResponse:
640 // os << " " << "initResponse" << " ";
642 // Z_InitResponse *ir
643 // = zapdu.u.initResponse;
644 // if (ir->result && *(ir->result))
646 // << (ir->implementationId) << " "
647 // //<< ir->referenceId << " "
648 // << (ir->implementationName) << " "
649 // << (ir->implementationVersion) << " ";
654 // case Z_APDU_searchRequest:
655 // os << " " << "searchRequest" << " ";
657 // Z_SearchRequest *sr
658 // = zapdu.u.searchRequest;
660 // for (int i = 0; i < sr->num_databaseNames; i++)
662 // os << sr->databaseNames[i];
663 // if (i+1 == sr->num_databaseNames)
669 // WRBUF wr = wrbuf_alloc();
670 // yaz_query_to_wrbuf(wr, sr->query);
671 // os << wrbuf_buf(wr);
672 // wrbuf_free(wr, 1);
681 * indent-tabs-mode: nil
682 * c-file-style: "stroustrup"
684 * vim: shiftwidth=4 tabstop=8 expandtab