/* This file is part of YAZ proxy
- Copyright (C) 1998-2008 Index Data
+ Copyright (C) 1998-2011 Index Data
YAZ proxy 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
#include <yaz/oid_db.h>
#include "msg-thread.h"
+#if YAZ_VERSIONL >= 0x03001D
+#define YAZ_HAS_MK_SURROGATE 1
+#else
+#define YAZ_HAS_MK_SURROGATE 0
+#endif
+
using namespace yazpp_1;
#ifdef WIN32
switch (r->which)
{
case Z_DefaultDiagFormat_v2Addinfo:
- yaz_log(YLOG_LOG, "%sError %d %s:%s",
+ yaz_log(YLOG_LOG, "%sError " ODR_INT_PRINTF " %s:%s",
m_session_str,
*r->condition, diagbib1_str(*r->condition),
r->u.v2Addinfo);
break;
case Z_DefaultDiagFormat_v3Addinfo:
- yaz_log(YLOG_LOG, "%sError %d %s:%s",
+ yaz_log(YLOG_LOG, "%sError " ODR_INT_PRINTF " %s:%s",
m_session_str,
*r->condition, diagbib1_str(*r->condition),
r->u.v3Addinfo);
return 0;
}
-static void yazproxy_encode_sru_surrogate(ODR o, Z_SRW_record *record, int pos,
- int code, const char *details)
+#if YAZ_HAS_MK_SURROGATE
+#else
+static void yazproxy_mk_sru_surrogate(ODR o, Z_SRW_record *record, int pos,
+ int code, const char *details)
{
const char *message = yaz_diag_srw_str(code);
int len = 200;
record->recordPosition = odr_intdup(o, pos);
record->recordSchema = odr_strdup(o, "info:srw/schema/1/diagnostics-v1.1");
}
-
+#endif
int Yaz_Proxy::send_to_srw_client_ok(int hits, Z_Records *records, int start)
{
Z_NamePlusRecord *npr = records->u.databaseOrSurDiagnostics->records[i];
if (npr->which != Z_NamePlusRecord_databaseRecord)
{
- yaz_log(YLOG_LOG, "Point 1");
- yazproxy_encode_sru_surrogate(
+#if YAZ_HAS_MK_SURROGATE
+ yaz_mk_sru_surrogate(
+ o, srw_res->records + i, i+start,
+ YAZ_SRW_RECORD_NOT_AVAILABLE_IN_THIS_SCHEMA, 0);
+#else
+ yazproxy_mk_sru_surrogate(
o, srw_res->records + i, i+start,
YAZ_SRW_RECORD_NOT_AVAILABLE_IN_THIS_SCHEMA, 0);
+#endif
continue;
}
Z_External *r = npr->u.databaseRecord;
}
else
{
- yaz_log(YLOG_LOG, "Point 2");
- yazproxy_encode_sru_surrogate(
+#if YAZ_HAS_MK_SURROGATE
+ yaz_mk_sru_surrogate(
+ o, srw_res->records + i, i+start,
+ YAZ_SRW_RECORD_NOT_AVAILABLE_IN_THIS_SCHEMA, 0);
+#else
+ yazproxy_mk_sru_surrogate(
o, srw_res->records + i, i+start,
YAZ_SRW_RECORD_NOT_AVAILABLE_IN_THIS_SCHEMA, 0);
+#endif
}
}
}
int Yaz_Proxy::send_srw_explain_response(Z_SRW_diagnostic *diagnostics,
int num_diagnostics)
{
+ int http_status = 404;
Yaz_ProxyConfig *cfg = check_reconfigure();
if (cfg)
{
int len;
char *b = cfg->get_explain_doc(odr_encode(), 0 /* target */,
- m_s2z_database, &len);
+ m_s2z_database, &len, &http_status);
if (b)
{
Z_SRW_PDU *res = yaz_srw_get(odr_encode(), Z_SRW_explain_response);
return send_srw_response(res);
}
}
- return send_http_response(404);
+ return send_http_response(http_status);
}
int Yaz_Proxy::send_PDU_convert(Z_APDU *apdu)
}
if (sr->resultCount)
{
- yaz_log(YLOG_LOG, "%s%d hits", m_session_str,
+ yaz_log(YLOG_LOG, "%s" ODR_INT_PRINTF " hits", m_session_str,
*sr->resultCount);
if (*sr->resultCount < 0)
{
{
Z_Records *rec = (Z_Records *)
odr_malloc (odr, sizeof(*rec));
- int *err = (int *)
+ Odr_int *err = (Odr_int *)
odr_malloc (odr, sizeof(*err));
Z_DiagRec *drec = (Z_DiagRec *)
odr_malloc (odr, sizeof(*drec));
m_s2z_stylesheet = 0;
Z_IdAuthentication *auth = NULL;
- if (srw_pdu->username && srw_pdu->password)
+ if (srw_pdu->username && !srw_pdu->password)
+ {
+ yaz_log(YLOG_LOG, "username: %s\n", srw_pdu->username);
+ auth = (Z_IdAuthentication *) odr_malloc(m_s2z_odr_init, sizeof(Z_IdAuthentication));
+ auth->which = Z_IdAuthentication_open;
+ auth->u.open = odr_strdup(m_s2z_odr_init, srw_pdu->username);
+ }
+ else if (srw_pdu->username && srw_pdu->password)
{
yaz_log(YLOG_LOG, "username/password: %s/%s\n",
srw_pdu->username, srw_pdu->password);
/*
* Local variables:
* c-basic-offset: 4
+ * c-file-style: "Stroustrup"
* indent-tabs-mode: nil
* End:
* vim: shiftwidth=4 tabstop=8 expandtab