projects
/
yazpp-moved-to-github.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Honor stylesheet
[yazpp-moved-to-github.git]
/
src
/
yaz-proxy.cpp
diff --git
a/src/yaz-proxy.cpp
b/src/yaz-proxy.cpp
index
1ef2f5a
..
febff85
100644
(file)
--- a/
src/yaz-proxy.cpp
+++ b/
src/yaz-proxy.cpp
@@
-2,7
+2,7
@@
* Copyright (c) 1998-2004, Index Data.
* See the file LICENSE for details.
*
* 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>
*/
#include <assert.h>
@@
-106,7
+106,9
@@
Yaz_Proxy::Yaz_Proxy(IYaz_PDU_Observable *the_PDU_Observable,
m_invalid_session = 0;
m_config = 0;
m_marcxml_flag = 0;
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;
m_initRequest_apdu = 0;
m_initRequest_mem = 0;
m_apdu_invalid_session = 0;
@@
-134,7
+136,8
@@
Yaz_Proxy::~Yaz_Proxy()
xfree (m_default_target);
xfree (m_proxy_authentication);
xfree (m_optimize);
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)
if (m_s2z_odr_init)
odr_destroy(m_s2z_odr_init);
if (m_s2z_odr_search)
@@
-290,7
+293,6
@@
Yaz_ProxyClient *Yaz_Proxy::get_client(Z_APDU *apdu, const char *cookie,
{
assert (m_parent);
Yaz_Proxy *parent = m_parent;
{
assert (m_parent);
Yaz_Proxy *parent = m_parent;
- Z_OtherInformation **oi;
Yaz_ProxyClient *c = m_client;
if (!m_proxyTarget)
Yaz_ProxyClient *c = m_client;
if (!m_proxyTarget)
@@
-581,9
+583,9
@@
void Yaz_Proxy::display_diagrecs(Z_DiagRec **pp, int num)
void Yaz_Proxy::convert_xsl(Z_NamePlusRecordList *p)
{
void Yaz_Proxy::convert_xsl(Z_NamePlusRecordList *p)
{
- if (!m_stylesheet)
+ if (!m_stylesheet_schema)
return;
return;
- xmlDocPtr xslt_doc = xmlParseFile(m_stylesheet);
+ xmlDocPtr xslt_doc = xmlParseFile(m_stylesheet_schema);
xsltStylesheetPtr xsp;
xsp = xsltParseStylesheetDoc(xslt_doc);
xsltStylesheetPtr xsp;
xsp = xsltParseStylesheetDoc(xslt_doc);
@@
-697,7
+699,6
@@
void Yaz_Proxy::logtime()
int Yaz_Proxy::send_http_response(int code)
{
ODR o = odr_encode();
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)
Z_GDU *gdu = z_get_HTTP_Response(o, code);
Z_HTTP_Response *hres = gdu->u.HTTP_Response;
if (m_http_version)
@@
-742,9
+743,9
@@
int Yaz_Proxy::send_srw_response(Z_SRW_PDU *srw_pdu)
soap_package->u.generic->ns = soap_handlers[0].ns;
soap_package->u.generic->p = (void *) srw_pdu;
soap_package->ns = m_soap_ns;
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,
if (m_log_mask & PROXY_LOG_REQ_CLIENT)
{
yaz_log (LOG_LOG, "%sSending %s to client", m_session_str,
@@
-815,7
+816,7
@@
int Yaz_Proxy::send_to_srw_client_ok(int hits, Z_Records *records, int start)
oident *ent = oid_getentbyoid(r->direct_reference);
if (r->which == Z_External_octet && ent->value == VAL_TEXT_XML)
{
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;
srw_res->records[i].recordPacking = m_s2z_packing;
srw_res->records[i].recordData_buf = (char*)
r->u.octet_aligned->buf;
@@
-1017,11
+1018,12
@@
int Yaz_Proxy::send_to_client(Z_APDU *apdu)
int Yaz_ProxyClient::send_to_target(Z_APDU *apdu)
{
int len = 0;
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(),
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;
}
m_bytes_sent += len;
return r;
}
@@
-1447,7
+1449,7
@@
Z_APDU *Yaz_Proxy::handle_syntax_validation(Z_APDU *apdu)
err = cfg->check_syntax(odr_encode(),
m_default_target,
sr->preferredRecordSyntax, rc,
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 =
if (err == -1)
{
sr->preferredRecordSyntax =
@@
-1479,7
+1481,7
@@
Z_APDU *Yaz_Proxy::handle_syntax_validation(Z_APDU *apdu)
err = cfg->check_syntax(odr_encode(), m_default_target,
pr->preferredRecordSyntax,
pr->recordComposition,
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 =
if (err == -1)
{
pr->preferredRecordSyntax =
@@
-1564,10
+1566,18
@@
void Yaz_Proxy::handle_incoming_HTTP(Z_HTTP_Request *hreq)
m_s2z_init_apdu = 0;
m_s2z_search_apdu = 0;
m_s2z_present_apdu = 0;
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;
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"))
// set packing for response records ..
if (srw_req->recordPacking &&
!strcmp(srw_req->recordPacking, "xml"))
@@
-1711,7
+1721,12
@@
void Yaz_Proxy::handle_incoming_HTTP(Z_HTTP_Request *hreq)
else if (srw_pdu->which == Z_SRW_explain_request)
{
Z_SRW_explainRequest *srw_req = srw_pdu->u.explain_request;
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 (srw_req->recordPacking &&
!strcmp(srw_req->recordPacking, "xml"))
m_s2z_packing = Z_SRW_recordPacking_XML;
@@
-1720,7
+1735,6
@@
void Yaz_Proxy::handle_incoming_HTTP(Z_HTTP_Request *hreq)
if (!m_client)
{
if (!m_client)
{
- yaz_log(LOG_LOG, "handle_incoming: initRequest");
m_s2z_init_apdu = zget_APDU(m_s2z_odr_init,
Z_APDU_initRequest);
m_s2z_init_apdu = zget_APDU(m_s2z_odr_init,
Z_APDU_initRequest);
@@
-1989,7
+2003,6
@@
void Yaz_Proxy::pre_init()
int keepalive_limit_bw, keepalive_limit_pdu;
int pre_init;
const char *cql2rpn = 0;
int keepalive_limit_bw, keepalive_limit_pdu;
int pre_init;
const char *cql2rpn = 0;
- const char *zeerex = 0;
Yaz_ProxyConfig *cfg = check_reconfigure();
Yaz_ProxyConfig *cfg = check_reconfigure();