* Copyright (c) 1998-2004, Index Data.
* See the file LICENSE for details.
*
- * $Id: yaz-proxy.cpp,v 1.77 2004-01-06 21:17:42 adam Exp $
+ * $Id: yaz-proxy.cpp,v 1.82 2004-01-07 21:29:26 adam Exp $
*/
#include <assert.h>
m_invalid_session = 0;
m_config = 0;
m_marcxml_flag = 0;
- m_stylesheet = 0;
+ m_stylesheet_schema = 0;
+ m_s2z_stylesheet = 0;
+ m_schema = 0;
m_initRequest_apdu = 0;
m_initRequest_mem = 0;
m_apdu_invalid_session = 0;
xfree (m_default_target);
xfree (m_proxy_authentication);
xfree (m_optimize);
- xfree (m_stylesheet);
+ xfree (m_stylesheet_schema);
+ xfree (m_schema);
if (m_s2z_odr_init)
odr_destroy(m_s2z_odr_init);
if (m_s2z_odr_search)
{
assert (m_parent);
Yaz_Proxy *parent = m_parent;
- Z_OtherInformation **oi;
Yaz_ProxyClient *c = m_client;
if (!m_proxyTarget)
void Yaz_Proxy::convert_xsl(Z_NamePlusRecordList *p)
{
- if (!m_stylesheet)
+ if (!m_stylesheet_schema)
return;
- xmlDocPtr xslt_doc = xmlParseFile(m_stylesheet);
+ xmlDocPtr xslt_doc = xmlParseFile(m_stylesheet_schema);
xsltStylesheetPtr xsp;
xsp = xsltParseStylesheetDoc(xslt_doc);
int Yaz_Proxy::send_http_response(int code)
{
ODR o = odr_encode();
- const char *ctype = "text/xml";
Z_GDU *gdu = z_get_HTTP_Response(o, code);
Z_HTTP_Response *hres = gdu->u.HTTP_Response;
if (m_http_version)
soap_package->u.generic->ns = soap_handlers[0].ns;
soap_package->u.generic->p = (void *) srw_pdu;
soap_package->ns = m_soap_ns;
- int ret = z_soap_codec_enc(o, &soap_package,
- &hres->content_buf, &hres->content_len,
- soap_handlers, 0);
+ z_soap_codec_enc_xsl(o, &soap_package,
+ &hres->content_buf, &hres->content_len,
+ soap_handlers, 0, m_s2z_stylesheet);
if (m_log_mask & PROXY_LOG_REQ_CLIENT)
{
yaz_log (LOG_LOG, "%sSending %s to client", m_session_str,
oident *ent = oid_getentbyoid(r->direct_reference);
if (r->which == Z_External_octet && ent->value == VAL_TEXT_XML)
{
- srw_res->records[i].recordSchema = "http://www.loc.gov/marcxml/";
+ srw_res->records[i].recordSchema = m_schema;
srw_res->records[i].recordPacking = m_s2z_packing;
srw_res->records[i].recordData_buf = (char*)
r->u.octet_aligned->buf;
int Yaz_ProxyClient::send_to_target(Z_APDU *apdu)
{
int len = 0;
+ const char *apdu_name_tmp = apdu_name(apdu);
int r = send_Z_PDU(apdu, &len);
if (m_root->get_log_mask() & PROXY_LOG_REQ_SERVER)
yaz_log (LOG_LOG, "%sSending %s to %s %d bytes",
get_session_str(),
- apdu_name(apdu), get_hostname(), len);
+ apdu_name_tmp, get_hostname(), len);
m_bytes_sent += len;
return r;
}
err = cfg->check_syntax(odr_encode(),
m_default_target,
sr->preferredRecordSyntax, rc,
- &addinfo, &m_stylesheet);
+ &addinfo, &m_stylesheet_schema, &m_schema);
if (err == -1)
{
sr->preferredRecordSyntax =
err = cfg->check_syntax(odr_encode(), m_default_target,
pr->preferredRecordSyntax,
pr->recordComposition,
- &addinfo, &m_stylesheet);
+ &addinfo, &m_stylesheet_schema, &m_schema);
if (err == -1)
{
pr->preferredRecordSyntax =
m_s2z_init_apdu = 0;
m_s2z_search_apdu = 0;
m_s2z_present_apdu = 0;
+
+ m_s2z_stylesheet = 0;
+
if (srw_pdu->which == Z_SRW_searchRetrieve_request)
{
Z_SRW_searchRetrieveRequest *srw_req = srw_pdu->u.request;
+ // save stylesheet
+ if (srw_req->stylesheet)
+ m_s2z_stylesheet =
+ odr_strdup(m_s2z_odr_init, srw_req->stylesheet);
+
// set packing for response records ..
if (srw_req->recordPacking &&
!strcmp(srw_req->recordPacking, "xml"))
else if (srw_pdu->which == Z_SRW_explain_request)
{
Z_SRW_explainRequest *srw_req = srw_pdu->u.explain_request;
-
+
+ // save stylesheet
+ if (srw_req->stylesheet)
+ m_s2z_stylesheet =
+ odr_strdup(m_s2z_odr_init, srw_req->stylesheet);
+
if (srw_req->recordPacking &&
!strcmp(srw_req->recordPacking, "xml"))
m_s2z_packing = Z_SRW_recordPacking_XML;
if (!m_client)
{
- yaz_log(LOG_LOG, "handle_incoming: initRequest");
m_s2z_init_apdu = zget_APDU(m_s2z_odr_init,
Z_APDU_initRequest);
int keepalive_limit_bw, keepalive_limit_pdu;
int pre_init;
const char *cql2rpn = 0;
- const char *zeerex = 0;
Yaz_ProxyConfig *cfg = check_reconfigure();