X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=src%2Fyaz-proxy.cpp;h=23538addd29b1308303bcbc4efa52732e9af35b4;hb=8bc5c9154d4c59571b6a6f19d8082a230d3c8a8a;hp=4aff7673593119ea24169fc4ff9c36f668ab2a62;hpb=3eb9c4a4462d9ea7630750b541c253b145309521;p=yazpp-moved-to-github.git diff --git a/src/yaz-proxy.cpp b/src/yaz-proxy.cpp index 4aff767..23538ad 100644 --- 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. * - * $Id: yaz-proxy.cpp,v 1.96 2004-02-02 11:17:45 adam Exp $ + * $Id: yaz-proxy.cpp,v 1.99 2004-02-11 10:01:54 adam Exp $ */ #include @@ -100,6 +100,8 @@ Yaz_Proxy::Yaz_Proxy(IYaz_PDU_Observable *the_PDU_Observable, m_config_fname = 0; m_request_no = 0; m_invalid_session = 0; + m_referenceId = 0; + m_referenceId_mem = nmem_create(); m_config = 0; m_marcxml_flag = 0; m_stylesheet_xsp = 0; @@ -132,6 +134,8 @@ Yaz_Proxy::~Yaz_Proxy() m_bytes_sent, m_bytes_recv); nmem_destroy(m_initRequest_mem); nmem_destroy(m_mem_invalid_session); + nmem_destroy(m_referenceId_mem); + xfree (m_proxyTarget); xfree (m_default_target); xfree (m_proxy_authentication); @@ -634,7 +638,7 @@ void Yaz_Proxy::convert_xsl_delay() xsltFreeStylesheet(m_stylesheet_xsp); m_stylesheet_xsp = 0; timeout(m_client_idletime); - int r = send_PDU_convert(m_stylesheet_apdu); + send_PDU_convert(m_stylesheet_apdu); } else timeout(0); @@ -978,6 +982,11 @@ int Yaz_Proxy::send_PDU_convert(Z_APDU *apdu) int Yaz_Proxy::send_to_client(Z_APDU *apdu) { int kill_session = 0; + Z_ReferenceId **new_id = get_referenceIdP(apdu); + + if (new_id && m_referenceId) + *new_id = m_referenceId; + if (apdu->which == Z_APDU_searchResponse) { Z_SearchResponse *sr = apdu->u.searchResponse; @@ -1911,13 +1920,27 @@ void Yaz_Proxy::handle_incoming_HTTP(Z_HTTP_Request *hreq) void Yaz_Proxy::handle_incoming_Z_PDU(Z_APDU *apdu) { + Z_ReferenceId **refid = get_referenceIdP(apdu); + nmem_reset(m_referenceId_mem); + if (refid && *refid) + { + m_referenceId = (Z_ReferenceId *) + nmem_malloc(m_referenceId_mem, sizeof(*m_referenceId)); + m_referenceId->len = m_referenceId->size = (*refid)->len; + m_referenceId->buf = (unsigned char *) + nmem_malloc(m_referenceId_mem, (*refid)->len); + memcpy(m_referenceId->buf, (*refid)->buf, (*refid)->len); + } + else + m_referenceId = 0; + if (!m_client && m_invalid_session) { m_apdu_invalid_session = apdu; m_mem_invalid_session = odr_extract_mem(odr_decode()); apdu = m_initRequest_apdu; } - + // Determine our client. Z_OtherInformation **oi; get_otherInfoAPDU(apdu, &oi);