1 /* $Id: gduutil.cpp,v 1.21 2007-05-09 21:23:09 adam Exp $
2 Copyright (c) 2005-2007, Index Data.
4 This file is part of Metaproxy.
6 Metaproxy is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 2, or (at your option) any later
11 Metaproxy is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 You should have received a copy of the GNU General Public License
17 along with Metaproxy; see the file LICENSE. If not, write to the
18 Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
22 #include "gduutil.hpp"
25 #include <yaz/wrbuf.h>
26 #include <yaz/oid_db.h>
27 #include <yaz/querytowrbuf.h>
32 namespace mp = metaproxy_1;
34 // Doxygen doesn't like mp::gdu, so we use this instead
35 namespace mp_util = metaproxy_1::util;
40 std::ostream& std::operator<<(std::ostream& os, Z_GDU& zgdu)
42 if (zgdu.which == Z_GDU_Z3950)
46 os << *(zgdu.u.z3950);
48 else if (zgdu.which == Z_GDU_HTTP_Request)
51 if (zgdu.u.HTTP_Request)
52 os << " " << *(zgdu.u.HTTP_Request);
54 else if (zgdu.which == Z_GDU_HTTP_Response)
56 os << "HTTP_Response";
57 if (zgdu.u.HTTP_Response)
58 os << " " << *(zgdu.u.HTTP_Response);
65 std::ostream& std::operator<<(std::ostream& os, Z_HTTP_Request& httpreq)
67 os << httpreq.method << " ";
73 std::ostream& std::operator<<(std::ostream& os, Z_HTTP_Response& httpres)
75 os << httpres.code << " ";
76 os << httpres.content_len;
80 std::ostream& std::operator<<(std::ostream& os, Z_Records & rs)
83 case Z_Records_DBOSD :
86 if (rs.u.nonSurrogateDiagnostic)
87 os << *(rs.u.nonSurrogateDiagnostic);
89 case Z_Records_multipleNSD:
90 os << "Z_Records_multipleNSD";
91 //os << *(rs.u.multipleNonSurDiagnostics);
100 std::ostream& std::operator<<(std::ostream& os, Z_DiagRec& dr)
103 case Z_DiagRec_defaultFormat:
104 if (dr.u.defaultFormat)
105 os << *(dr.u.defaultFormat);
107 case Z_DiagRec_externallyDefined :
108 os << "Z_DiagRec_externallyDefined";
117 std::ostream& std::operator<<(std::ostream& os, Z_DefaultDiagFormat& ddf)
120 os << *(ddf.condition) << " ";
123 case Z_DefaultDiagFormat_v2Addinfo:
124 os << ddf.u.v2Addinfo;
126 case Z_DefaultDiagFormat_v3Addinfo:
127 os << ddf.u.v3Addinfo;
130 os << "Z_DefaultDiagFormat" ;
136 std::ostream& std::operator<<(std::ostream& os, Z_APDU& zapdu)
138 switch(zapdu.which) {
140 case Z_APDU_initRequest:
141 os << " " << "initRequest" << " ";
145 = zapdu.u.initRequest;
147 Z_IdAuthentication *a = ir->idAuthentication;
148 if (a && a->which == Z_IdAuthentication_idPass
149 && a->u.idPass->userId)
150 os << a->u.idPass->userId << " ";
151 //<< ":" << a->u.idPass->groupId << " ";
155 std::list<std::string> vhosts;
156 mp::util::get_vhost_otherinfo(ir->otherInfo, vhosts);
158 copy(vhosts.begin(), vhosts.end(),
159 ostream_iterator<string>(os, " "));
164 if (ir->implementationId)
165 os << (ir->implementationId) << " ";
166 //<< ir->referenceId << " "
167 if (ir->implementationName)
168 os<< (ir->implementationName) << " ";
169 if (ir->implementationVersion)
170 os << (ir->implementationVersion) << " ";
173 case Z_APDU_initResponse:
174 os << " " << "initResponse" << " ";
177 = zapdu.u.initResponse;
178 if (ir->result && *(ir->result)){
180 if (ir->implementationId)
181 os << (ir->implementationId) << " ";
182 //<< ir->referenceId << " "
183 if (ir->implementationName)
184 os<< (ir->implementationName) << " ";
185 if (ir->implementationVersion)
186 os << (ir->implementationVersion) << " ";
192 case Z_APDU_searchRequest:
193 os << " " << "searchRequest" << " ";
196 = zapdu.u.searchRequest;
198 for (int i = 0; i < sr->num_databaseNames; i++)
200 os << sr->databaseNames[i];
201 if (i+1 == sr->num_databaseNames)
207 WRBUF wr = wrbuf_alloc();
208 yaz_query_to_wrbuf(wr, sr->query);
209 os << wrbuf_cstr(wr);
213 case Z_APDU_searchResponse:
214 os << " " << "searchResponse" << " ";
217 = zapdu.u.searchResponse;
218 if (sr->searchStatus && *(sr->searchStatus))
222 os << " " << *(sr->resultCount);
225 //<< sr->referenceId << " "
226 if (sr->numberOfRecordsReturned)
227 os << " " << *(sr->numberOfRecordsReturned);
230 if (sr->nextResultSetPosition)
231 os << " " << *(sr->nextResultSetPosition);
237 os << "DIAG " << *(sr->records);
242 case Z_APDU_presentRequest:
243 os << " " << "presentRequest";
245 Z_PresentRequest *pr = zapdu.u.presentRequest;
247 os << " " << (pr->resultSetId);
250 //<< pr->referenceId << " "
251 if (pr->resultSetStartPoint)
252 os << " " << *(pr->resultSetStartPoint);
255 if (pr->numberOfRecordsRequested)
256 os << " " << *(pr->numberOfRecordsRequested);
259 if (pr->preferredRecordSyntax)
261 char oid_name_str[OID_STR_MAX];
262 const char *oid_name = yaz_oid_to_string_buf(
263 pr->preferredRecordSyntax, 0, oid_name_str);
265 os << " " << oid_name;
269 const char * msg = 0;
270 if (pr->recordComposition
271 && (msg = mp_util::record_composition_to_esn(pr->recordComposition)))
277 case Z_APDU_presentResponse:
278 os << " " << "presentResponse" << " ";
280 Z_PresentResponse *pr
281 = zapdu.u.presentResponse;
282 if ((pr->presentStatus) && !*(pr->presentStatus))
285 //<< pr->referenceId << " "
286 if (pr->numberOfRecordsReturned)
287 os << " " << *(pr->numberOfRecordsReturned);
290 if (pr->nextResultSetPosition)
291 os << " " << *(pr->nextResultSetPosition);
297 os << "DIAG " << *(pr->records);
301 //os << "DIAG" << " "
303 //<< pr->referenceId << " "
304 //<< *(pr->numberOfRecordsReturned) << " "
305 //<< *(pr->nextResultSetPosition);
308 case Z_APDU_deleteResultSetRequest:
309 os << " " << "deleteResultSetRequest";
311 case Z_APDU_deleteResultSetResponse:
312 os << " " << "deleteResultSetResponse";
314 case Z_APDU_accessControlRequest:
315 os << " " << "accessControlRequest";
317 case Z_APDU_accessControlResponse:
318 os << " " << "accessControlResponse";
320 case Z_APDU_resourceControlRequest:
321 os << " " << "resourceControlRequest";
323 case Z_APDU_resourceControlResponse:
324 os << " " << "resourceControlResponse";
326 case Z_APDU_triggerResourceControlRequest:
327 os << " " << "triggerResourceControlRequest";
329 case Z_APDU_resourceReportRequest:
330 os << " " << "resourceReportRequest";
332 case Z_APDU_resourceReportResponse:
333 os << " " << "resourceReportResponse";
335 case Z_APDU_scanRequest:
336 os << " " << "scanRequest" << " ";
339 = zapdu.u.scanRequest;
343 for (int i = 0; i < sr->num_databaseNames; i++)
345 os << sr->databaseNames[i];
346 if (i+1 == sr->num_databaseNames)
351 if (sr->numberOfTermsRequested)
352 os << " " << *(sr->numberOfTermsRequested);
355 if (sr->preferredPositionInResponse)
356 os << " " << *(sr->preferredPositionInResponse);
360 os << " " << *(sr->stepSize);
364 if (sr->termListAndStartPoint)
366 WRBUF wr = wrbuf_alloc();
367 yaz_scan_to_wrbuf(wr, sr->termListAndStartPoint,
369 os << wrbuf_cstr(wr);
377 case Z_APDU_scanResponse:
378 os << " " << "scanResponse" << " ";
381 = zapdu.u.scanResponse;
384 if ((sr->scanStatus) && !*(sr->scanStatus))
387 //<< *(sr->scanStatus) << " "
388 if (sr->numberOfEntriesReturned)
389 os << " " << *(sr->numberOfEntriesReturned);
392 //<< sr->referenceId << " "
393 if (sr->positionOfTerm)
394 os << " " << *(sr->positionOfTerm);
398 os << " " << *(sr->stepSize);
406 os << " " << *(sr->scanStatus) << " ";
408 switch (*(sr->scanStatus)){
412 case Z_Scan_partial_1:
415 case Z_Scan_partial_2:
418 case Z_Scan_partial_3:
421 case Z_Scan_partial_4:
424 case Z_Scan_partial_5:
434 if (sr->numberOfEntriesReturned)
435 os << " " << *(sr->numberOfEntriesReturned);
442 case Z_APDU_sortRequest:
443 os << " " << "sortRequest" << " ";
445 case Z_APDU_sortResponse:
446 os << " " << "sortResponse" << " ";
448 case Z_APDU_segmentRequest:
449 os << " " << "segmentRequest" << " ";
451 case Z_APDU_extendedServicesRequest:
452 os << " " << "extendedServicesRequest";
454 Z_ExtendedServicesRequest *er
455 = zapdu.u.extendedServicesRequest;
461 switch(*(er->function))
463 case Z_ExtendedServicesRequest_create:
466 case Z_ExtendedServicesRequest_delete:
469 case Z_ExtendedServicesRequest_modify:
481 os << " " << er->userId ;
486 os << " " << er->packageName;
491 os << " " << er->description;
497 case Z_APDU_extendedServicesResponse:
498 os << " " << "extendedServicesResponse";
500 Z_ExtendedServicesResponse *er
501 = zapdu.u.extendedServicesResponse;
504 if (er->operationStatus)
507 switch (*(er->operationStatus)){
508 case Z_ExtendedServicesResponse_done:
511 case Z_ExtendedServicesResponse_accepted:
514 case Z_ExtendedServicesResponse_failure:
515 if (er->num_diagnostics)
516 os << "DIAG " << **(er->diagnostics);
530 os << " " << "close" << " ";
538 os << *(c->closeReason) << " ";
540 switch (*(c->closeReason)) {
541 case Z_Close_finished:
544 case Z_Close_shutdown:
547 case Z_Close_systemProblem:
548 os << "systemProblem";
550 case Z_Close_costLimit:
553 case Z_Close_resources:
556 case Z_Close_securityViolation:
557 os << "securityViolation";
559 case Z_Close_protocolError:
560 os << "protocolError";
562 case Z_Close_lackOfActivity:
563 os << "lackOfActivity";
565 case Z_Close_peerAbort:
568 case Z_Close_unspecified:
576 if (c->diagnosticInformation)
577 os << " " << c->diagnosticInformation;
581 case Z_APDU_duplicateDetectionRequest:
582 os << " " << "duplicateDetectionRequest";
584 case Z_APDU_duplicateDetectionResponse:
585 os << " " << "duplicateDetectionResponse";
588 os << " " << "Z_APDU " << "UNKNOWN";
600 * indent-tabs-mode: nil
601 * c-file-style: "stroustrup"
603 * vim: shiftwidth=4 tabstop=8 expandtab