X-Git-Url: http://sru.miketaylor.org.uk/?a=blobdiff_plain;f=src%2Fyaz-proxy.cpp;h=6cb13ea62dd74433cb2b31cf5c6a01cb6520794b;hb=f5aa3da6fa8c40d6f8295514edf08477e3f3a054;hp=c80c99a8020672940fcac0159eec1d53b0e1abfa;hpb=4f79f9b5b0095b2f81b1ce583f0f82462f9ee36a;p=yazproxy-moved-to-github.git diff --git a/src/yaz-proxy.cpp b/src/yaz-proxy.cpp index c80c99a..6cb13ea 100644 --- a/src/yaz-proxy.cpp +++ b/src/yaz-proxy.cpp @@ -293,6 +293,7 @@ Yaz_Proxy::Yaz_Proxy(IPDU_Observable *the_PDU_Observable, m_usemarcon = new Yaz_usemarcon(); if (!m_parent) low_socket_open(); + m_backend_elementset = 0; m_my_thread = 0; m_ref_count = 1; m_main_ptr_dec = false; @@ -333,11 +334,14 @@ Yaz_Proxy::~Yaz_Proxy() xfree(m_backend_charset); xfree(m_usemarcon_ini_stage1); xfree(m_usemarcon_ini_stage2); + xfree(m_backend_elementset); delete m_usemarcon; if (m_s2z_odr_init) odr_destroy(m_s2z_odr_init); if (m_s2z_odr_search) odr_destroy(m_s2z_odr_search); + if (m_s2z_odr_scan) + odr_destroy(m_s2z_odr_scan); if (!m_parent) low_socket_close(); if (!m_parent) @@ -529,10 +533,8 @@ const char *Yaz_Proxy::load_balance(const char **url) } } int min_use = 100000; - int spare_for_min = 0; int max_spare = 0; const char *ret_min = 0; - const char *ret_spare = 0; for (i = 0; url[i]; i++) { yaz_log(YLOG_DEBUG, "%szurl=%s use=%d spare=%d", @@ -541,11 +543,9 @@ const char *Yaz_Proxy::load_balance(const char **url) { ret_min = url[i]; min_use = zurl_in_use[i]; - spare_for_min = zurl_in_spare[i]; } if (max_spare < zurl_in_spare[i]) { - ret_spare = url[i]; max_spare = zurl_in_spare[i]; } } @@ -2589,13 +2589,13 @@ Z_APDU *Yaz_Proxy::handle_query_validation(Z_APDU *apdu) int err = 0; char *addinfo = 0; +#if 0 Yaz_ProxyConfig *cfg = check_reconfigure(); // Something like this needs to be implemented later: -/* if (cfg) err = cfg->check_type_1_attributes(odr_encode(), m_default_target, sr->termListAndStartPoint->attributes, &addinfo); -*/ +#endif if (err) { Z_APDU *new_apdu = create_Z_PDU(Z_APDU_scanResponse); @@ -2723,7 +2723,8 @@ Z_APDU *Yaz_Proxy::handle_syntax_validation(Z_APDU *apdu) &addinfo, &stylesheet_name, &m_schema, &m_backend_type, &m_backend_charset, &m_usemarcon_ini_stage1, - &m_usemarcon_ini_stage2); + &m_usemarcon_ini_stage2, + &m_backend_elementset); if (stylesheet_name) { m_parent->low_socket_close(); @@ -2769,6 +2770,15 @@ Z_APDU *Yaz_Proxy::handle_syntax_validation(Z_APDU *apdu) yaz_string_to_oid_odr(yaz_oid_std(), CLASS_RECSYN, m_backend_type, odr_encode()); } + if (m_backend_elementset) + { + Z_ElementSetNames *esn = + mk_esn_from_schema( + odr_encode(), + *m_backend_elementset ? m_backend_elementset : 0); + sr->smallSetElementSetNames = esn; + sr->mediumSetElementSetNames = esn; + } } else if (apdu->which == Z_APDU_presentRequest) { @@ -2790,8 +2800,8 @@ Z_APDU *Yaz_Proxy::handle_syntax_validation(Z_APDU *apdu) &addinfo, &stylesheet_name, &m_schema, &m_backend_type, &m_backend_charset, &m_usemarcon_ini_stage1, - &m_usemarcon_ini_stage2 - ); + &m_usemarcon_ini_stage2, + &m_backend_elementset); if (stylesheet_name) { m_parent->low_socket_close(); @@ -2839,6 +2849,18 @@ Z_APDU *Yaz_Proxy::handle_syntax_validation(Z_APDU *apdu) CLASS_RECSYN, m_backend_type, odr_encode()); } + if (m_backend_elementset) + { + Z_ElementSetNames *esn = + mk_esn_from_schema( + odr_encode(), + *m_backend_elementset ? m_backend_elementset : 0); + Z_RecordComposition *comp = (Z_RecordComposition *) + odr_malloc(odr_encode(), sizeof(Z_RecordComposition)); + comp->which = Z_RecordComp_simple; + comp->u.simple = esn; + pr->recordComposition = comp; + } } return apdu; }