-/* $Id: gduutil.cpp,v 1.17 2007-01-25 14:05:54 adam Exp $
- Copyright (c) 2005-2007, Index Data.
+/* This file is part of Metaproxy.
+ Copyright (C) Index Data
- See the LICENSE file for details
+Metaproxy is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+Metaproxy is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "gduutil.hpp"
-#include "util.hpp"
+#include <metaproxy/util.hpp>
#include <yaz/wrbuf.h>
+#include <yaz/oid_db.h>
#include <yaz/querytowrbuf.h>
#include <iostream>
-#include <list>
namespace mp = metaproxy_1;
// Doxygen doesn't like mp::gdu, so we use this instead
namespace mp_util = metaproxy_1::util;
-
-
-
std::ostream& std::operator<<(std::ostream& os, Z_GDU& zgdu)
{
if (zgdu.which == Z_GDU_Z3950)
std::ostream& std::operator<<(std::ostream& os, Z_HTTP_Request& httpreq)
{
os << httpreq.method << " ";
- os << httpreq.path;
+ os << httpreq.path;
return os;
}
-
std::ostream& std::operator<<(std::ostream& os, Z_HTTP_Response& httpres)
{
os << httpres.code << " ";
- os << httpres.content_len;
+ os << httpres.content_len;
return os;
}
std::ostream& std::operator<<(std::ostream& os, Z_Records & rs)
{
- switch(rs.which) {
+ switch (rs.which)
+ {
case Z_Records_DBOSD :
break;
case Z_Records_NSD:
os << *(rs.u.nonSurrogateDiagnostic);
break;
case Z_Records_multipleNSD:
- os << "Z_Records_multipleNSD";
- //os << *(rs.u.multipleNonSurDiagnostics);
+ os << *(rs.u.multipleNonSurDiagnostics);
break;
default:
os << "Z_Records" ;
}
-
+
+ return os;
+}
+
+std::ostream& std::operator<<(std::ostream& os, Z_DiagRecs& dr)
+{
+ if (dr.num_diagRecs >= 1)
+ {
+ os << *dr.diagRecs[0];
+ }
+ else
+ {
+ os << "multipleNSD";
+ }
return os;
}
+
std::ostream& std::operator<<(std::ostream& os, Z_DiagRec& dr)
{
- switch(dr.which) {
+ switch (dr.which)
+ {
case Z_DiagRec_defaultFormat:
if (dr.u.defaultFormat)
os << *(dr.u.defaultFormat);
default:
os << "Z_DiagRec" ;
}
-
+
return os;
}
if (ddf.condition)
os << *(ddf.condition) << " ";
- switch(ddf.which) {
+ switch (ddf.which)
+ {
case Z_DefaultDiagFormat_v2Addinfo:
+ os << "\"";
os << ddf.u.v2Addinfo;
+ os << "\"";
break;
case Z_DefaultDiagFormat_v3Addinfo:
+ os << "\"";
os << ddf.u.v3Addinfo;
+ os << "\"";
break;
default:
- os << "Z_DefaultDiagFormat" ;
+ os << "-";
}
-
+
return os;
}
+static void dump_opt_string(std::ostream& os, const char *s)
+{
+ os << " ";
+ if (s)
+ os << s;
+ else
+ os << "-";
+}
+
+static void dump_opt_int_l(std::ostream& os, const Odr_int *i, const char *lead)
+{
+ os << lead;
+ if (i)
+ os << *i;
+ else
+ os << "-";
+}
+
+static void dump_opt_int(std::ostream& os, const Odr_int *i)
+{
+ dump_opt_int_l(os, i, " ");
+}
+
std::ostream& std::operator<<(std::ostream& os, Z_APDU& zapdu)
{
switch(zapdu.which) {
case Z_APDU_initRequest:
- os << " " << "initRequest" << " ";
-
+ os << " " << "initRequest";
+
{
- Z_InitRequest *ir
+ 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 << " ";
+ if (a && a->which == Z_IdAuthentication_idPass)
+ dump_opt_string(os, a->u.idPass->userId);
+ else if (a && a->which == Z_IdAuthentication_open)
+ dump_opt_string(os, a->u.open);
else
- os << "-" << " ";
+ dump_opt_string(os, 0);
+ os << " ";
std::list<std::string> vhosts;
mp::util::get_vhost_otherinfo(ir->otherInfo, vhosts);
if (vhosts.size()){
- copy(vhosts.begin(), vhosts.end(),
+ copy(vhosts.begin(), vhosts.end(),
ostream_iterator<string>(os, " "));
}
- else
- os << "-" << " " ;
+ else
+ os << "-" ;
- os << (ir->implementationId) << " "
- //<< ir->referenceId << " "
- << (ir->implementationName) << " "
- << (ir->implementationVersion);
+ dump_opt_string(os, ir->implementationId);
+ dump_opt_string(os, ir->implementationName);
+ dump_opt_string(os, ir->implementationVersion);
}
break;
case Z_APDU_initResponse:
- os << " " << "initResponse" << " ";
+ os << " " << "initResponse ";
{
- Z_InitResponse *ir
+ Z_InitResponse *ir
= zapdu.u.initResponse;
if (ir->result && *(ir->result))
- os << "OK" << " "
- << (ir->implementationId) << " "
- //<< ir->referenceId << " "
- << (ir->implementationName) << " "
- << (ir->implementationVersion) << " ";
+ {
+ os << "OK";
+ }
else
- os << "DIAG";
+ {
+ os << "FAIL";
+ }
+ dump_opt_string(os, ir->implementationId);
+ dump_opt_string(os, ir->implementationName);
+ dump_opt_string(os, ir->implementationVersion);
}
break;
case Z_APDU_searchRequest:
os << " " << "searchRequest" << " ";
- {
- Z_SearchRequest *sr
+ {
+ 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
+ if (i+1 != sr->num_databaseNames)
os << "+";
}
-
- WRBUF wr = wrbuf_alloc();
+
+ dump_opt_string(os, sr->resultSetName);
+
+ os << " ";
+ if (sr->preferredRecordSyntax)
+ {
+ char oid_name_str[OID_STR_MAX];
+ os << yaz_oid_to_string_buf(
+ sr->preferredRecordSyntax, 0, oid_name_str);
+ }
+ else
+ os << "-";
+
+ os << " ";
+ mp::wrbuf wr;
yaz_query_to_wrbuf(wr, sr->query);
- os << wrbuf_buf(wr);
- wrbuf_free(wr, 1);
+ os << wrbuf_cstr(wr);
}
break;
case Z_APDU_searchResponse:
- os << " " << "searchResponse" << " ";
+ os << " " << "searchResponse ";
{
- Z_SearchResponse *sr
- = zapdu.u.searchResponse;
- if (sr->searchStatus && *(sr->searchStatus))
- {
+ Z_SearchResponse *sr = zapdu.u.searchResponse;
+ if (!sr->searchStatus)
+ os << "Unknown";
+ else if (*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
+ os << "Failure";
+ if (sr->records && sr->records->which != Z_Records_DBOSD)
+ {
+ os << " DIAG " << *sr->records;
+ }
+ else
+ {
+ dump_opt_int(os, sr->resultCount);
+ dump_opt_int_l(os, sr->numberOfRecordsReturned, " 1+");
+ dump_opt_int(os, sr->nextResultSetPosition);
}
- else
- if (sr->records)
- os << "DIAG " << *(sr->records);
- else
- os << "ERROR";
}
break;
case Z_APDU_presentRequest:
os << " " << "presentRequest";
{
Z_PresentRequest *pr = zapdu.u.presentRequest;
- if (pr->resultSetId)
- os << " " << (pr->resultSetId);
- else
- os << " -";
- //<< pr->referenceId << " "
- if (pr->resultSetStartPoint)
- os << " " << *(pr->resultSetStartPoint);
- else
- os << " -";
- if (pr->numberOfRecordsRequested)
- os << " " << *(pr->numberOfRecordsRequested);
- else
- os << " -";
+ dump_opt_string(os, pr->resultSetId);
+ dump_opt_int(os, pr->resultSetStartPoint);
+ dump_opt_int_l(os, pr->numberOfRecordsRequested, "+");
if (pr->preferredRecordSyntax)
- //os << " " << pr->preferredRecordSyntax;
- os << " " <<(oid_getentbyoid(pr->preferredRecordSyntax))->desc;
+ {
+ char oid_name_str[OID_STR_MAX];
+ const char *oid_name = yaz_oid_to_string_buf(
+ pr->preferredRecordSyntax, 0, oid_name_str);
+
+ os << " " << oid_name;
+ }
else
os << " -";
const char * msg = 0;
- if (pr->recordComposition
- && (msg = mp_util::record_composition_to_esn(pr->recordComposition)))
- os << " " << msg;
- else
- os << " -";
+ if (pr->recordComposition)
+ msg = mp_util::record_composition_to_esn(pr->recordComposition);
+ dump_opt_string(os, msg);
}
break;
case Z_APDU_presentResponse:
os << " " << "presentResponse" << " ";
{
- Z_PresentResponse *pr
+ Z_PresentResponse *pr
= zapdu.u.presentResponse;
- if ((pr->presentStatus) && !*(pr->presentStatus))
+ if (!pr->presentStatus)
+ os << "Unknown";
+ else
{
- os << "OK";
- //<< pr->referenceId << " "
- if (pr->numberOfRecordsReturned)
- os << " " << *(pr->numberOfRecordsReturned);
- else
- os << " -";
- if (pr->nextResultSetPosition)
- os << " " << *(pr->nextResultSetPosition);
- else
- os << " -";
+ switch (*pr->presentStatus)
+ {
+ case Z_PresentStatus_success:
+ os << "OK"; break;
+ case Z_PresentStatus_partial_1:
+ os << "Partial-1"; break;
+ case Z_PresentStatus_partial_2:
+ os << "Partial-2"; break;
+ case Z_PresentStatus_partial_3:
+ os << "Partial-3"; break;
+ case Z_PresentStatus_partial_4:
+ os << "Partial-4"; break;
+ case Z_PresentStatus_failure:
+ os << "Failure"; break;
+ default:
+ os << "Unknown"; break;
+ }
}
+ if (pr->records && pr->records->which != Z_Records_DBOSD)
+ os << " DIAG " << *pr->records;
else
- if (pr->records)
- os << "DIAG " << *(pr->records);
- else
- os << "ERROR";
-
- //os << "DIAG" << " "
- //<< "-" << " "
- //<< pr->referenceId << " "
- //<< *(pr->numberOfRecordsReturned) << " "
- //<< *(pr->nextResultSetPosition);
+ {
+ dump_opt_int(os, pr->numberOfRecordsReturned);
+ dump_opt_int(os, pr->nextResultSetPosition);
+ }
}
break;
case Z_APDU_deleteResultSetRequest:
break;
case Z_APDU_scanRequest:
os << " " << "scanRequest" << " ";
- {
- Z_ScanRequest *sr
- = zapdu.u.scanRequest;
-
+ {
+ Z_ScanRequest *sr = zapdu.u.scanRequest;
+
if (sr)
{
for (int i = 0; i < sr->num_databaseNames; i++)
{
os << sr->databaseNames[i];
- if (i+1 == sr->num_databaseNames)
- os << " ";
- else
- os << "+";
+ if (i+1 != sr->num_databaseNames)
+ 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 << " -";
-
+ dump_opt_int(os, sr->numberOfTermsRequested);
+ dump_opt_int(os, sr->preferredPositionInResponse);
+ dump_opt_int(os, sr->stepSize);
+
+ 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);
+ mp::wrbuf wr;
+ yaz_scan_to_wrbuf(wr, sr->termListAndStartPoint,
+ sr->attributeSet);
+ os << wrbuf_cstr(wr);
}
else
- os << " -";
+ os << "-";
}
}
break;
case Z_APDU_scanResponse:
os << " " << "scanResponse" << " ";
{
- Z_ScanResponse *sr
- = zapdu.u.scanResponse;
+ Z_ScanResponse *sr = zapdu.u.scanResponse;
if (sr)
{
- if ((sr->scanStatus) && !*(sr->scanStatus))
- {
+ if (!sr->scanStatus)
os << "OK";
- //<< *(sr->scanStatus) << " "
- if (sr->numberOfEntriesReturned)
- os << " " << *(sr->numberOfEntriesReturned);
- else
- os << " -";
- //<< sr->referenceId << " "
- if (sr->positionOfTerm)
- os << " " << *(sr->positionOfTerm);
- else
- os << " -";
- if (sr->stepSize)
- os << " " << *(sr->stepSize);
- else
- os << " -";
- }
- else {
- os << "ERROR";
- if (sr->scanStatus)
+ else
+ {
+ switch (*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";
- }
+ case Z_Scan_success:
+ os << "OK";
+ 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 << " -";
}
+ dump_opt_int(os, sr->numberOfEntriesReturned);
+ dump_opt_int(os, sr->positionOfTerm);
+ dump_opt_int(os, sr->stepSize);
}
}
break;
break;
case Z_APDU_extendedServicesRequest:
os << " " << "extendedServicesRequest";
- {
- Z_ExtendedServicesRequest *er
+ {
+ Z_ExtendedServicesRequest *er
= zapdu.u.extendedServicesRequest;
if (er)
{
}
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
break;
case Z_APDU_extendedServicesResponse:
os << " " << "extendedServicesResponse";
- {
- Z_ExtendedServicesResponse *er
- = zapdu.u.extendedServicesResponse;
- 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 << " -";
- }
- }
+ {
+ Z_ExtendedServicesResponse *er
+ = zapdu.u.extendedServicesResponse;
+ 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" << " ";
- {
- Z_Close *c
- = zapdu.u.close;
+ {
+ Z_Close *c = zapdu.u.close;
if (c)
{
if (c->closeReason)
{
os << *(c->closeReason) << " ";
- switch (*(c->closeReason)) {
+ switch (*c->closeReason)
+ {
case Z_Close_finished:
os << "finished";
break;
os << "unknown";
}
}
-
+
if (c->diagnosticInformation)
os << " " << c->diagnosticInformation;
}
case Z_APDU_duplicateDetectionResponse:
os << " " << "duplicateDetectionResponse";
break;
- default:
+ default:
os << " " << "Z_APDU " << "UNKNOWN";
}
/*
* Local variables:
* c-basic-offset: 4
+ * c-file-style: "Stroustrup"
* indent-tabs-mode: nil
- * c-file-style: "stroustrup"
* End:
* vim: shiftwidth=4 tabstop=8 expandtab
*/
+