1 /* $Id: gduutil.cpp,v 1.20 2007-04-13 09:57:51 adam Exp $
2 Copyright (c) 2005-2007, Index Data.
4 See the LICENSE file for details
10 #include <yaz/wrbuf.h>
11 #include <yaz/oid_db.h>
12 #include <yaz/querytowrbuf.h>
17 namespace mp = metaproxy_1;
19 // Doxygen doesn't like mp::gdu, so we use this instead
20 namespace mp_util = metaproxy_1::util;
25 std::ostream& std::operator<<(std::ostream& os, Z_GDU& zgdu)
27 if (zgdu.which == Z_GDU_Z3950)
31 os << *(zgdu.u.z3950);
33 else if (zgdu.which == Z_GDU_HTTP_Request)
36 if (zgdu.u.HTTP_Request)
37 os << " " << *(zgdu.u.HTTP_Request);
39 else if (zgdu.which == Z_GDU_HTTP_Response)
41 os << "HTTP_Response";
42 if (zgdu.u.HTTP_Response)
43 os << " " << *(zgdu.u.HTTP_Response);
50 std::ostream& std::operator<<(std::ostream& os, Z_HTTP_Request& httpreq)
52 os << httpreq.method << " ";
58 std::ostream& std::operator<<(std::ostream& os, Z_HTTP_Response& httpres)
60 os << httpres.code << " ";
61 os << httpres.content_len;
65 std::ostream& std::operator<<(std::ostream& os, Z_Records & rs)
68 case Z_Records_DBOSD :
71 if (rs.u.nonSurrogateDiagnostic)
72 os << *(rs.u.nonSurrogateDiagnostic);
74 case Z_Records_multipleNSD:
75 os << "Z_Records_multipleNSD";
76 //os << *(rs.u.multipleNonSurDiagnostics);
85 std::ostream& std::operator<<(std::ostream& os, Z_DiagRec& dr)
88 case Z_DiagRec_defaultFormat:
89 if (dr.u.defaultFormat)
90 os << *(dr.u.defaultFormat);
92 case Z_DiagRec_externallyDefined :
93 os << "Z_DiagRec_externallyDefined";
102 std::ostream& std::operator<<(std::ostream& os, Z_DefaultDiagFormat& ddf)
105 os << *(ddf.condition) << " ";
108 case Z_DefaultDiagFormat_v2Addinfo:
109 os << ddf.u.v2Addinfo;
111 case Z_DefaultDiagFormat_v3Addinfo:
112 os << ddf.u.v3Addinfo;
115 os << "Z_DefaultDiagFormat" ;
121 std::ostream& std::operator<<(std::ostream& os, Z_APDU& zapdu)
123 switch(zapdu.which) {
125 case Z_APDU_initRequest:
126 os << " " << "initRequest" << " ";
130 = zapdu.u.initRequest;
132 Z_IdAuthentication *a = ir->idAuthentication;
133 if (a && a->which == Z_IdAuthentication_idPass
134 && a->u.idPass->userId)
135 os << a->u.idPass->userId << " ";
136 //<< ":" << a->u.idPass->groupId << " ";
140 std::list<std::string> vhosts;
141 mp::util::get_vhost_otherinfo(ir->otherInfo, vhosts);
143 copy(vhosts.begin(), vhosts.end(),
144 ostream_iterator<string>(os, " "));
149 if (ir->implementationId)
150 os << (ir->implementationId) << " ";
151 //<< ir->referenceId << " "
152 if (ir->implementationName)
153 os<< (ir->implementationName) << " ";
154 if (ir->implementationVersion)
155 os << (ir->implementationVersion) << " ";
158 case Z_APDU_initResponse:
159 os << " " << "initResponse" << " ";
162 = zapdu.u.initResponse;
163 if (ir->result && *(ir->result)){
165 if (ir->implementationId)
166 os << (ir->implementationId) << " ";
167 //<< ir->referenceId << " "
168 if (ir->implementationName)
169 os<< (ir->implementationName) << " ";
170 if (ir->implementationVersion)
171 os << (ir->implementationVersion) << " ";
177 case Z_APDU_searchRequest:
178 os << " " << "searchRequest" << " ";
181 = zapdu.u.searchRequest;
183 for (int i = 0; i < sr->num_databaseNames; i++)
185 os << sr->databaseNames[i];
186 if (i+1 == sr->num_databaseNames)
192 WRBUF wr = wrbuf_alloc();
193 yaz_query_to_wrbuf(wr, sr->query);
194 os << wrbuf_cstr(wr);
198 case Z_APDU_searchResponse:
199 os << " " << "searchResponse" << " ";
202 = zapdu.u.searchResponse;
203 if (sr->searchStatus && *(sr->searchStatus))
207 os << " " << *(sr->resultCount);
210 //<< sr->referenceId << " "
211 if (sr->numberOfRecordsReturned)
212 os << " " << *(sr->numberOfRecordsReturned);
215 if (sr->nextResultSetPosition)
216 os << " " << *(sr->nextResultSetPosition);
222 os << "DIAG " << *(sr->records);
227 case Z_APDU_presentRequest:
228 os << " " << "presentRequest";
230 Z_PresentRequest *pr = zapdu.u.presentRequest;
232 os << " " << (pr->resultSetId);
235 //<< pr->referenceId << " "
236 if (pr->resultSetStartPoint)
237 os << " " << *(pr->resultSetStartPoint);
240 if (pr->numberOfRecordsRequested)
241 os << " " << *(pr->numberOfRecordsRequested);
244 if (pr->preferredRecordSyntax)
246 char oid_name_str[OID_STR_MAX];
247 const char *oid_name = yaz_oid_to_string_buf(
248 pr->preferredRecordSyntax, 0, oid_name_str);
250 os << " " << oid_name;
254 const char * msg = 0;
255 if (pr->recordComposition
256 && (msg = mp_util::record_composition_to_esn(pr->recordComposition)))
262 case Z_APDU_presentResponse:
263 os << " " << "presentResponse" << " ";
265 Z_PresentResponse *pr
266 = zapdu.u.presentResponse;
267 if ((pr->presentStatus) && !*(pr->presentStatus))
270 //<< pr->referenceId << " "
271 if (pr->numberOfRecordsReturned)
272 os << " " << *(pr->numberOfRecordsReturned);
275 if (pr->nextResultSetPosition)
276 os << " " << *(pr->nextResultSetPosition);
282 os << "DIAG " << *(pr->records);
286 //os << "DIAG" << " "
288 //<< pr->referenceId << " "
289 //<< *(pr->numberOfRecordsReturned) << " "
290 //<< *(pr->nextResultSetPosition);
293 case Z_APDU_deleteResultSetRequest:
294 os << " " << "deleteResultSetRequest";
296 case Z_APDU_deleteResultSetResponse:
297 os << " " << "deleteResultSetResponse";
299 case Z_APDU_accessControlRequest:
300 os << " " << "accessControlRequest";
302 case Z_APDU_accessControlResponse:
303 os << " " << "accessControlResponse";
305 case Z_APDU_resourceControlRequest:
306 os << " " << "resourceControlRequest";
308 case Z_APDU_resourceControlResponse:
309 os << " " << "resourceControlResponse";
311 case Z_APDU_triggerResourceControlRequest:
312 os << " " << "triggerResourceControlRequest";
314 case Z_APDU_resourceReportRequest:
315 os << " " << "resourceReportRequest";
317 case Z_APDU_resourceReportResponse:
318 os << " " << "resourceReportResponse";
320 case Z_APDU_scanRequest:
321 os << " " << "scanRequest" << " ";
324 = zapdu.u.scanRequest;
328 for (int i = 0; i < sr->num_databaseNames; i++)
330 os << sr->databaseNames[i];
331 if (i+1 == sr->num_databaseNames)
336 if (sr->numberOfTermsRequested)
337 os << " " << *(sr->numberOfTermsRequested);
340 if (sr->preferredPositionInResponse)
341 os << " " << *(sr->preferredPositionInResponse);
345 os << " " << *(sr->stepSize);
349 if (sr->termListAndStartPoint)
351 WRBUF wr = wrbuf_alloc();
352 yaz_scan_to_wrbuf(wr, sr->termListAndStartPoint,
354 os << wrbuf_cstr(wr);
362 case Z_APDU_scanResponse:
363 os << " " << "scanResponse" << " ";
366 = zapdu.u.scanResponse;
369 if ((sr->scanStatus) && !*(sr->scanStatus))
372 //<< *(sr->scanStatus) << " "
373 if (sr->numberOfEntriesReturned)
374 os << " " << *(sr->numberOfEntriesReturned);
377 //<< sr->referenceId << " "
378 if (sr->positionOfTerm)
379 os << " " << *(sr->positionOfTerm);
383 os << " " << *(sr->stepSize);
391 os << " " << *(sr->scanStatus) << " ";
393 switch (*(sr->scanStatus)){
397 case Z_Scan_partial_1:
400 case Z_Scan_partial_2:
403 case Z_Scan_partial_3:
406 case Z_Scan_partial_4:
409 case Z_Scan_partial_5:
419 if (sr->numberOfEntriesReturned)
420 os << " " << *(sr->numberOfEntriesReturned);
427 case Z_APDU_sortRequest:
428 os << " " << "sortRequest" << " ";
430 case Z_APDU_sortResponse:
431 os << " " << "sortResponse" << " ";
433 case Z_APDU_segmentRequest:
434 os << " " << "segmentRequest" << " ";
436 case Z_APDU_extendedServicesRequest:
437 os << " " << "extendedServicesRequest";
439 Z_ExtendedServicesRequest *er
440 = zapdu.u.extendedServicesRequest;
446 switch(*(er->function))
448 case Z_ExtendedServicesRequest_create:
451 case Z_ExtendedServicesRequest_delete:
454 case Z_ExtendedServicesRequest_modify:
466 os << " " << er->userId ;
471 os << " " << er->packageName;
476 os << " " << er->description;
482 case Z_APDU_extendedServicesResponse:
483 os << " " << "extendedServicesResponse";
485 Z_ExtendedServicesResponse *er
486 = zapdu.u.extendedServicesResponse;
489 if (er->operationStatus)
492 switch (*(er->operationStatus)){
493 case Z_ExtendedServicesResponse_done:
496 case Z_ExtendedServicesResponse_accepted:
499 case Z_ExtendedServicesResponse_failure:
500 if (er->num_diagnostics)
501 os << "DIAG " << **(er->diagnostics);
515 os << " " << "close" << " ";
523 os << *(c->closeReason) << " ";
525 switch (*(c->closeReason)) {
526 case Z_Close_finished:
529 case Z_Close_shutdown:
532 case Z_Close_systemProblem:
533 os << "systemProblem";
535 case Z_Close_costLimit:
538 case Z_Close_resources:
541 case Z_Close_securityViolation:
542 os << "securityViolation";
544 case Z_Close_protocolError:
545 os << "protocolError";
547 case Z_Close_lackOfActivity:
548 os << "lackOfActivity";
550 case Z_Close_peerAbort:
553 case Z_Close_unspecified:
561 if (c->diagnosticInformation)
562 os << " " << c->diagnosticInformation;
566 case Z_APDU_duplicateDetectionRequest:
567 os << " " << "duplicateDetectionRequest";
569 case Z_APDU_duplicateDetectionResponse:
570 os << " " << "duplicateDetectionResponse";
573 os << " " << "Z_APDU " << "UNKNOWN";
585 * indent-tabs-mode: nil
586 * c-file-style: "stroustrup"
588 * vim: shiftwidth=4 tabstop=8 expandtab