-/* $Id: gduutil.cpp,v 1.6 2006-09-07 12:12:21 adam Exp $
+/* $Id: gduutil.cpp,v 1.10 2006-09-20 15:09:45 marc Exp $
Copyright (c) 2005-2006, Index Data.
See the LICENSE file for details
std::ostream& std::operator<<(std::ostream& os, Z_GDU& zgdu)
{
if (zgdu.which == Z_GDU_Z3950)
- os << "Z3950" << " " << *(zgdu.u.z3950) ;
+ {
+ os << "Z3950";
+ if (zgdu.u.z3950)
+ os << *(zgdu.u.z3950);
+ }
else if (zgdu.which == Z_GDU_HTTP_Request)
- os << "HTTP_Request" << " " << *(zgdu.u.HTTP_Request);
+ {
+ os << "HTTP_Request";
+ if (zgdu.u.HTTP_Request)
+ os << " " << *(zgdu.u.HTTP_Request);
+ }
else if (zgdu.which == Z_GDU_HTTP_Response)
- os << "HTTP_Response" << " " << *(zgdu.u.HTTP_Response);
+ {
+ os << "HTTP_Response";
+ if (zgdu.u.HTTP_Response)
+ os << " " << *(zgdu.u.HTTP_Response);
+ }
else
os << "Z_GDU";
return os;
case Z_Records_DBOSD :
break;
case Z_Records_NSD:
- os << *(rs.u.nonSurrogateDiagnostic);
+ if (rs.u.nonSurrogateDiagnostic)
+ os << *(rs.u.nonSurrogateDiagnostic);
break;
case Z_Records_multipleNSD:
os << "Z_Records_multipleNSD";
{
switch(dr.which) {
case Z_DiagRec_defaultFormat:
- os << *(dr.u.defaultFormat);
+ if (dr.u.defaultFormat)
+ os << *(dr.u.defaultFormat);
break;
case Z_DiagRec_externallyDefined :
os << "Z_DiagRec_externallyDefined";
std::ostream& std::operator<<(std::ostream& os, Z_DefaultDiagFormat& ddf)
{
- os << *(ddf.condition) << " ";
+ if (ddf.condition)
+ os << *(ddf.condition) << " ";
+
switch(ddf.which) {
case Z_DefaultDiagFormat_v2Addinfo:
os << ddf.u.v2Addinfo;
switch(zapdu.which) {
case Z_APDU_initRequest:
- os << "initRequest" << " ";
+ os << " " << "initRequest" << " ";
{
Z_InitRequest *ir
os << a->u.idPass->userId << " ";
//<< ":" << a->u.idPass->groupId << " ";
else
- os << "--" << " ";
+ os << "-" << " ";
std::list<std::string> vhosts;
mp::util::get_vhost_otherinfo(ir->otherInfo, vhosts);
ostream_iterator<string>(os, " "));
}
else
- os << "--" << " " ;
+ os << "-" << " " ;
os << (ir->implementationId) << " "
//<< ir->referenceId << " "
}
break;
case Z_APDU_initResponse:
- os << "initResponse" << " ";
+ os << " " << "initResponse" << " ";
{
Z_InitResponse *ir
= zapdu.u.initResponse;
- if (*(ir->result))
+ if (ir->result && *(ir->result))
os << "OK" << " "
<< (ir->implementationId) << " "
//<< ir->referenceId << " "
}
break;
case Z_APDU_searchRequest:
- os << "searchRequest" << " ";
+ os << " " << "searchRequest" << " ";
{
Z_SearchRequest *sr
= zapdu.u.searchRequest;
}
break;
case Z_APDU_searchResponse:
- os << "searchResponse" << " ";
+ os << " " << "searchResponse" << " ";
{
Z_SearchResponse *sr
= zapdu.u.searchResponse;
- if (*(sr->searchStatus))
- os << "OK" << " "
- << *(sr->resultCount) << " "
- //<< sr->referenceId << " "
- << *(sr->numberOfRecordsReturned) << " "
- << *(sr->nextResultSetPosition);
+ if (sr->searchStatus && *(sr->searchStatus))
+ {
+ os << "OK";
+ if (sr->resultCount)
+ os << " " << *(sr->resultCount);
+ else
+ os << " -";
+ //<< sr->referenceId << " "
+ if (sr->numberOfRecordsReturned)
+ os << " " << *(sr->numberOfRecordsReturned);
+ else
+ os << " -";
+ if (sr->nextResultSetPosition)
+ os << " " << *(sr->nextResultSetPosition);
+ else
+ os << " -";
+ }
else
if (sr->records)
os << "DIAG " << *(sr->records);
}
break;
case Z_APDU_presentRequest:
- os << "presentRequest" << " ";
+ os << " " << "presentRequest" << " ";
{
Z_PresentRequest *pr = zapdu.u.presentRequest;
os << pr->resultSetId << " "
}
break;
case Z_APDU_presentResponse:
- os << "presentResponse" << " ";
+ os << " " << "presentResponse" << " ";
{
Z_PresentResponse *pr
= zapdu.u.presentResponse;
- if (!*(pr->presentStatus))
- os << "OK" << " "
- //<< "-" << " "
- //<< pr->referenceId << " "
- << *(pr->numberOfRecordsReturned) << " "
- << *(pr->nextResultSetPosition);
+ if ((pr->presentStatus) && !*(pr->presentStatus))
+ {
+ os << "OK";
+ //<< pr->referenceId << " "
+ if (pr->numberOfRecordsReturned)
+ os << " " << *(pr->numberOfRecordsReturned);
+ else
+ os << " -";
+ if (pr->nextResultSetPosition)
+ os << " " << *(pr->nextResultSetPosition);
+ else
+ os << " -";
+ }
else
if (pr->records)
os << "DIAG " << *(pr->records);
}
break;
case Z_APDU_deleteResultSetRequest:
- os << "deleteResultSetRequest";
+ os << " " << "deleteResultSetRequest";
break;
case Z_APDU_deleteResultSetResponse:
- os << "deleteResultSetResponse";
+ os << " " << "deleteResultSetResponse";
break;
case Z_APDU_accessControlRequest:
- os << "accessControlRequest";
+ os << " " << "accessControlRequest";
break;
case Z_APDU_accessControlResponse:
- os << "accessControlResponse";
+ os << " " << "accessControlResponse";
break;
case Z_APDU_resourceControlRequest:
- os << "resourceControlRequest";
+ os << " " << "resourceControlRequest";
break;
case Z_APDU_resourceControlResponse:
- os << "resourceControlResponse";
+ os << " " << "resourceControlResponse";
break;
case Z_APDU_triggerResourceControlRequest:
- os << "triggerResourceControlRequest";
+ os << " " << "triggerResourceControlRequest";
break;
case Z_APDU_resourceReportRequest:
- os << "resourceReportRequest";
+ os << " " << "resourceReportRequest";
break;
case Z_APDU_resourceReportResponse:
- os << "resourceReportResponse";
+ os << " " << "resourceReportResponse";
break;
case Z_APDU_scanRequest:
- os << "scanRequest" << " ";
+ os << " " << "scanRequest" << " ";
{
Z_ScanRequest *sr
= zapdu.u.scanRequest;
-
- for (int i = 0; i < sr->num_databaseNames; i++)
+
+ if (sr)
{
- os << sr->databaseNames[i];
- if (i+1 == sr->num_databaseNames)
- os << " ";
- else
+ for (int i = 0; i < sr->num_databaseNames; i++)
+ {
+ os << sr->databaseNames[i];
+ if (i+1 == sr->num_databaseNames)
+ os << " ";
+ else
os << "+";
+ }
+ if (sr->numberOfTermsRequested)
+ os << " " << *(sr->numberOfTermsRequested);
+ else
+ os << " -";
+ if (sr->preferredPositionInResponse)
+ os << " " << *(sr->preferredPositionInResponse);
+ else
+ os << " -";
+ if (sr->stepSize)
+ os << " " << *(sr->stepSize);
+ else
+ os << " -";
+
+ if (sr->termListAndStartPoint)
+ {
+ WRBUF wr = wrbuf_alloc();
+ yaz_scan_to_wrbuf(wr, sr->termListAndStartPoint, VAL_NONE);
+ os << wrbuf_buf(wr);
+ wrbuf_free(wr, 1);
+ }
+ else
+ os << " -";
}
-
- os << *(sr->numberOfTermsRequested) << " "
- << *(sr->preferredPositionInResponse) << " "
- << *(sr->stepSize) << " ";
-
- WRBUF wr = wrbuf_alloc();
- yaz_scan_to_wrbuf(wr, sr->termListAndStartPoint, VAL_NONE);
- os << wrbuf_buf(wr);
- wrbuf_free(wr, 1);
}
break;
case Z_APDU_scanResponse:
- os << "scanResponse" << " ";
+ os << " " << "scanResponse" << " ";
{
Z_ScanResponse *sr
= zapdu.u.scanResponse;
- if (!*(sr->scanStatus))
- os << "OK" << " "
+ if (sr)
+ {
+ if ((sr->scanStatus) && !*(sr->scanStatus))
+ {
+ os << "OK";
//<< *(sr->scanStatus) << " "
- << *(sr->numberOfEntriesReturned) << " "
+ if (sr->numberOfEntriesReturned)
+ os << " " << *(sr->numberOfEntriesReturned);
+ else
+ os << " -";
//<< sr->referenceId << " "
- << *(sr->positionOfTerm) << " "
- << *(sr->stepSize) << " ";
- else {
- os << "ERROR" << " "
- << *(sr->scanStatus) << " ";
-
- switch (*(sr->scanStatus)){
- case Z_Scan_success:
- os << "success ";
- break;
- case Z_Scan_partial_1:
- os << "partial_1";
- break;
- case Z_Scan_partial_2:
- os << "partial_2";
- break;
- case Z_Scan_partial_3:
- os << "partial_3";
- break;
- case Z_Scan_partial_4:
- os << "partial_4";
- break;
- case Z_Scan_partial_5:
- os << "partial_5";
- break;
- case Z_Scan_failure:
- os << "failure";
- break;
- default:
- os << "unknown";
+ if (sr->positionOfTerm)
+ os << " " << *(sr->positionOfTerm);
+ else
+ os << " -";
+ if (sr->stepSize)
+ os << " " << *(sr->stepSize);
+ else
+ os << " -";
+ }
+ else {
+ os << "ERROR";
+ if (sr->scanStatus)
+ {
+ os << " " << *(sr->scanStatus) << " ";
+
+ switch (*(sr->scanStatus)){
+ case Z_Scan_success:
+ os << "success ";
+ break;
+ case Z_Scan_partial_1:
+ os << "partial_1";
+ break;
+ case Z_Scan_partial_2:
+ os << "partial_2";
+ break;
+ case Z_Scan_partial_3:
+ os << "partial_3";
+ break;
+ case Z_Scan_partial_4:
+ os << "partial_4";
+ break;
+ case Z_Scan_partial_5:
+ os << "partial_5";
+ break;
+ case Z_Scan_failure:
+ os << "failure";
+ break;
+ default:
+ os << "unknown";
+ }
+ }
+ if (sr->numberOfEntriesReturned)
+ os << " " << *(sr->numberOfEntriesReturned);
+ else
+ os << " -";
}
-
- os << " " << *(sr->numberOfEntriesReturned);
}
}
break;
case Z_APDU_sortRequest:
- os << "sortRequest" << " ";
+ os << " " << "sortRequest" << " ";
break;
case Z_APDU_sortResponse:
- os << "sortResponse" << " ";
+ os << " " << "sortResponse" << " ";
break;
case Z_APDU_segmentRequest:
- os << "segmentRequest" << " ";
+ os << " " << "segmentRequest" << " ";
break;
case Z_APDU_extendedServicesRequest:
- os << "extendedServicesRequest" << " ";
+ os << " " << "extendedServicesRequest";
{
Z_ExtendedServicesRequest *er
= zapdu.u.extendedServicesRequest;
-
- switch(*(er->function))
+ if (er)
{
- case Z_ExtendedServicesRequest_create:
- os << "create";
- break;
- case Z_ExtendedServicesRequest_delete:
- os << "delete";
- break;
- case Z_ExtendedServicesRequest_modify:
- os << "modify";
- break;
- default:
- os << "unknown";
+ if (er->function)
+ {
+ os << " ";
+ switch(*(er->function))
+ {
+ case Z_ExtendedServicesRequest_create:
+ os << "create";
+ break;
+ case Z_ExtendedServicesRequest_delete:
+ os << "delete";
+ break;
+ case Z_ExtendedServicesRequest_modify:
+ os << "modify";
+ break;
+ default:
+ os << "unknown";
+ }
+ }
+ else
+ os << " -";
+
+
+ if (er->userId)
+ os << " " << er->userId ;
+ else
+ os << " -";
+
+ if (er->packageName)
+ os << " " << er->packageName;
+ else
+ os << " -";
+
+ if (er->description)
+ os << " " << er->description;
+ else
+ os << " -";
}
-
- if (er->userId)
- os << " " << er->userId ;
- else
- os << " " << "--";
-
- if (er->packageName)
- os << " " << er->packageName;
- else
- os << " " << "--";
-
- if (er->description)
- os << " " << er->description;
- else
- os << " " << "--";
}
break;
case Z_APDU_extendedServicesResponse:
- os << "extendedServicesResponse" << " ";
+ os << " " << "extendedServicesResponse";
{
Z_ExtendedServicesResponse *er
= zapdu.u.extendedServicesResponse;
-
- switch (*(er->operationStatus)){
- case Z_ExtendedServicesResponse_done:
- os << "OK";
- break;
- case Z_ExtendedServicesResponse_accepted:
- os << "ACCEPT";
- break;
- case Z_ExtendedServicesResponse_failure:
- if (er->num_diagnostics)
- os << "DIAG " << **(er->diagnostics);
- else
- os << "ERROR";
- break;
- default:
- os << "unknown";
+ if (er)
+ {
+ if (er->operationStatus)
+ {
+ os << " ";
+ switch (*(er->operationStatus)){
+ case Z_ExtendedServicesResponse_done:
+ os << "OK";
+ break;
+ case Z_ExtendedServicesResponse_accepted:
+ os << "ACCEPT";
+ break;
+ case Z_ExtendedServicesResponse_failure:
+ if (er->num_diagnostics)
+ os << "DIAG " << **(er->diagnostics);
+ else
+ os << "ERROR";
+ break;
+ default:
+ os << "unknown";
+ }
+ }
+ else
+ os << " -";
}
}
break;
case Z_APDU_close:
- os << "close" << " ";
+ os << " " << "close" << " ";
{
Z_Close *c
= zapdu.u.close;
-
- os << *(c->closeReason) << " ";
- switch (*(c->closeReason)) {
- case Z_Close_finished:
- os << "finished";
- break;
- case Z_Close_shutdown:
- os << "shutdown";
- break;
- case Z_Close_systemProblem:
- os << "systemProblem";
- break;
- case Z_Close_costLimit:
- os << "costLimit";
- break;
- case Z_Close_resources:
- os << "resources";
- break;
- case Z_Close_securityViolation:
- os << "securityViolation";
- break;
- case Z_Close_protocolError:
- os << "protocolError";
- break;
- case Z_Close_lackOfActivity:
- os << "";
- break;
- case Z_Close_peerAbort:
- os << "peerAbort";
- break;
- case Z_Close_unspecified:
- os << "unspecified";
- break;
- default:
- os << "unknown";
- break;
+ if (c)
+ {
+ if (c->closeReason)
+ {
+ os << *(c->closeReason) << " ";
+
+ switch (*(c->closeReason)) {
+ case Z_Close_finished:
+ os << "finished";
+ break;
+ case Z_Close_shutdown:
+ os << "shutdown";
+ break;
+ case Z_Close_systemProblem:
+ os << "systemProblem";
+ break;
+ case Z_Close_costLimit:
+ os << "costLimit";
+ break;
+ case Z_Close_resources:
+ os << "resources";
+ break;
+ case Z_Close_securityViolation:
+ os << "securityViolation";
+ break;
+ case Z_Close_protocolError:
+ os << "protocolError";
+ break;
+ case Z_Close_lackOfActivity:
+ os << "lackOfActivity";
+ break;
+ case Z_Close_peerAbort:
+ os << "peerAbort";
+ break;
+ case Z_Close_unspecified:
+ os << "unspecified";
+ break;
+ default:
+ os << "unknown";
+ }
+ }
+
+ if (c->diagnosticInformation)
+ os << " " << c->diagnosticInformation;
}
- if (c->diagnosticInformation)
- os << " " << c->diagnosticInformation;
}
break;
case Z_APDU_duplicateDetectionRequest:
- os << "duplicateDetectionRequest";
+ os << " " << "duplicateDetectionRequest";
break;
case Z_APDU_duplicateDetectionResponse:
- os << "duplicateDetectionResponse";
+ os << " " << "duplicateDetectionResponse";
break;
default:
- os << "Z_APDU "
- << "UNKNOWN";
+ os << " " << "Z_APDU " << "UNKNOWN";
}
return os;
}
+std::ostream& std::operator<<(std::ostream& os, Z_SRW_PDU& srw_pdu)
+{
+ os << "SRU";
+
+ switch(srw_pdu.which) {
+ case Z_SRW_searchRetrieve_request:
+ os << " " << "searchRetrieveRequest";
+ {
+ Z_SRW_searchRetrieveRequest *sr = srw_pdu.u.request;
+ if (sr)
+ {
+ if (sr->database)
+ os << " " << (sr->database);
+ else
+ os << " -";
+ if (sr->startRecord)
+ os << " " << *(sr->startRecord);
+ else
+ os << " -";
+ if (sr->maximumRecords)
+ os << " " << *(sr->maximumRecords);
+ else
+ os << " -";
+ if (sr->recordPacking)
+ os << " " << (sr->recordPacking);
+ else
+ os << " -";
+
+ switch (sr->query_type){
+ case Z_SRW_query_type_cql:
+ os << " CQL " << sr->query.cql;
+ break;
+ case Z_SRW_query_type_xcql:
+ os << " XCQL";
+ break;
+ case Z_SRW_query_type_pqf:
+ os << " PQF " << sr->query.pqf;
+ break;
+ }
+ }
+ }
+ break;
+ case Z_SRW_searchRetrieve_response:
+ os << " " << "searchRetrieveResponse";
+ {
+ Z_SRW_searchRetrieveResponse *sr = srw_pdu.u.response;
+ if (sr)
+ {
+ if (! (sr->num_diagnostics))
+ {
+ os << " OK";
+ if (sr->numberOfRecords)
+ os << " " << *(sr->numberOfRecords);
+ else
+ os << " -";
+ //if (sr->num_records)
+ os << " " << (sr->num_records);
+ //else
+ //os << " -";
+ if (sr->nextRecordPosition)
+ os << " " << *(sr->nextRecordPosition);
+ else
+ os << " -";
+ }
+ else
+ {
+ os << " DIAG";
+ if (sr->diagnostics && sr->diagnostics->uri)
+ os << " " << *(sr->diagnostics->uri);
+ else
+ os << " -";
+ if (sr->diagnostics && sr->diagnostics->message)
+ os << " " << *(sr->diagnostics->message);
+ else
+ os << " -";
+ if (sr->diagnostics && sr->diagnostics->details)
+ os << " " << *(sr->diagnostics->details);
+ else
+ os << " -";
+ }
+
+
+ }
+ }
+ break;
+ case Z_SRW_explain_request:
+ os << " " << "explainRequest";
+ break;
+ case Z_SRW_explain_response:
+ os << " " << "explainResponse";
+ break;
+ case Z_SRW_scan_request:
+ os << " " << "scanRequest";
+ break;
+ case Z_SRW_scan_response:
+ os << " " << "scanResponse";
+ break;
+ case Z_SRW_update_request:
+ os << " " << "updateRequest";
+ break;
+ case Z_SRW_update_response:
+ os << " " << "updateResponse";
+ break;
+ default:
+ os << " " << "UNKNOWN";
+ }
+
+ return os;
+}
+
+
+// {
+// Z_InitRequest *ir
+// = zapdu.u.initRequest;
+
+// Z_IdAuthentication *a = ir->idAuthentication;
+// if (a && a->which == Z_IdAuthentication_idPass )
+// os << a->u.idPass->userId << " ";
+// //<< ":" << a->u.idPass->groupId << " ";
+// else
+// os << "-" << " ";
+
+// std::list<std::string> vhosts;
+// mp::util::get_vhost_otherinfo(ir->otherInfo, vhosts);
+// if (vhosts.size()){
+// copy(vhosts.begin(), vhosts.end(),
+// ostream_iterator<string>(os, " "));
+// }
+// else
+// os << "-" << " " ;
+
+// os << (ir->implementationId) << " "
+// //<< ir->referenceId << " "
+// << (ir->implementationName) << " "
+// << (ir->implementationVersion);
+// }
+// break;
+// case Z_APDU_initResponse:
+// os << " " << "initResponse" << " ";
+// {
+// Z_InitResponse *ir
+// = zapdu.u.initResponse;
+// if (ir->result && *(ir->result))
+// os << "OK" << " "
+// << (ir->implementationId) << " "
+// //<< ir->referenceId << " "
+// << (ir->implementationName) << " "
+// << (ir->implementationVersion) << " ";
+// else
+// os << "DIAG";
+// }
+// break;
+// case Z_APDU_searchRequest:
+// os << " " << "searchRequest" << " ";
+// {
+// Z_SearchRequest *sr
+// = zapdu.u.searchRequest;
+
+// for (int i = 0; i < sr->num_databaseNames; i++)
+// {
+// os << sr->databaseNames[i];
+// if (i+1 == sr->num_databaseNames)
+// os << " ";
+// else
+// os << "+";
+// }
+
+// WRBUF wr = wrbuf_alloc();
+// yaz_query_to_wrbuf(wr, sr->query);
+// os << wrbuf_buf(wr);
+// wrbuf_free(wr, 1);
+// }
+// break;
+
+
+
/*
* Local variables:
* c-basic-offset: 4