X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=include%2Fyazproxy%2Fproxy.h;h=264aac52b81d0be31c43ad72a0ffa1219a29e7c6;hb=c6ca4f0f79d5ea0ca391d420bcb6dd6b4d7935d2;hp=a26a6d00dfde3d66930ed6bd04a1f9fb06150206;hpb=645fcfb030d718ce708a396309fb8d69bd8d7afb;p=yazproxy-moved-to-github.git diff --git a/include/yazproxy/proxy.h b/include/yazproxy/proxy.h index a26a6d0..264aac5 100644 --- a/include/yazproxy/proxy.h +++ b/include/yazproxy/proxy.h @@ -1,14 +1,14 @@ -/* $Id: proxy.h,v 1.3 2004-04-11 12:25:01 adam Exp $ - Copyright (c) 1998-2004, Index Data. +/* $Id: proxy.h,v 1.12 2005-02-11 15:19:08 adam Exp $ + Copyright (c) 1998-2005, Index Data. This file is part of the yaz-proxy. -Zebra is free software; you can redistribute it and/or modify it under +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 Software Foundation; either version 2, or (at your option) any later version. -Zebra is distributed in the hope that it will be useful, but WITHOUT ANY +YAZ proxy is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -19,21 +19,15 @@ Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#if HAVE_GETTIMEOFDAY -#include -#endif +#ifndef YAZ_PROXY_H_INCLUDED +#define YAZ_PROXY_H_INCLUDED + #include #include #include #include #include #include -#if HAVE_XSLT -#include -#include -#include -#include -#endif class Yaz_Proxy; @@ -45,6 +39,8 @@ class Yaz_Proxy; #define PROXY_LOG_REQ_SERVER 8 struct Yaz_RecordCache_Entry; +class Yaz_ProxyConfigP; +class Yaz_usemarcon; class YAZ_EXPORT Yaz_ProxyConfig { public: @@ -64,7 +60,10 @@ public: int *keepalive_limit_bw, int *keepalive_limit_pdu, int *pre_init, - const char **cql2rpn); + const char **cql2rpn, + const char **authentication, + const char **negotiation_charset, + const char **negotiation_lang); void get_generic_info(int *log_mask, int *max_clients); @@ -74,43 +73,27 @@ public: int *max_clients, int *keepalive_limit_bw, int *keepalive_limit_pdu, int *pre_init, - const char **cql2rpn); + const char **cql2rpn, + const char **authentication, + const char **negotiation_charset, + const char **negotiation_lang); + const char *check_mime_type(const char *path); int check_query(ODR odr, const char *name, Z_Query *query, char **addinfo); int check_syntax(ODR odr, const char *name, Odr_oid *syntax, Z_RecordComposition *comp, - char **addinfo, char **stylesheet, char **schema); - char *get_explain(ODR odr, const char *name, const char *db, - int *len); -private: + char **addinfo, char **stylesheet, char **schema, + char **backend_type, char **backend_charset, + char **usemarcon_ini_stage1, char **usemarcon_ini_stage2); + + int check_authentication(const char *user, const char *group, + const char *password); + char *get_explain_doc(ODR odr, const char *name, const char *db, + int *len); + const char *get_explain_name(const char *db, const char **backend_db); + private: void operator=(const Yaz_ProxyConfig &conf); - int mycmp(const char *hay, const char *item, size_t len); -#if HAVE_XSLT - int check_schema(xmlNodePtr ptr, Z_RecordComposition *comp, - const char *schema_identifier); - xmlDocPtr m_docPtr; - xmlNodePtr m_proxyPtr; - void return_target_info(xmlNodePtr ptr, const char **url, - int *limit_bw, int *limit_pdu, int *limit_req, - int *target_idletime, int *client_idletime, - int *keepalive_limit_bw, int *keepalive_limit_pdu, - int *pre_init, const char **cql2rpn); - void return_limit(xmlNodePtr ptr, - int *limit_bw, int *limit_pdu, int *limit_req); - int check_type_1(ODR odr, xmlNodePtr ptr, Z_RPNQuery *query, - char **addinfo); - xmlNodePtr find_target_node(const char *name, const char *db); - xmlNodePtr find_target_db(xmlNodePtr ptr, const char *db); - const char *get_text(xmlNodePtr ptr); - int check_type_1_attributes(ODR odr, xmlNodePtr ptr, - Z_AttributeList *attrs, - char **addinfo); - int check_type_1_structure(ODR odr, xmlNodePtr ptr, Z_RPNStructure *q, - char **addinfo); -#endif - int m_copy; - int match_list(int v, const char *m); - int atoi_l(const char **cp); + class Yaz_ProxyConfigP *m_cp; }; class YAZ_EXPORT Yaz_RecordCache { @@ -189,11 +172,14 @@ class YAZ_EXPORT Yaz_Proxy : public Yaz_Z_Assoc { private: char *get_cookie(Z_OtherInformation **otherInfo); char *get_proxy(Z_OtherInformation **otherInfo); + void get_charset_and_lang_negotiation(Z_OtherInformation **otherInfo, + char **charstes, char **langs, int *selected); Yaz_ProxyClient *get_client(Z_APDU *apdu, const char *cookie, const char *proxy_host); + void srw_get_client(const char *db, const char **backend_db); Z_APDU *result_set_optimize(Z_APDU *apdu); void shutdown(); - + void releaseClient(); Yaz_ProxyClient *m_client; IYaz_PDU_Observable *m_PDU_Observable; Yaz_ProxyClient *m_clientPool; @@ -208,6 +194,8 @@ class YAZ_EXPORT Yaz_Proxy : public Yaz_Z_Assoc { char *m_proxyTarget; char *m_default_target; char *m_proxy_authentication; + char *m_proxy_negotiation_charset; + char *m_proxy_negotiation_lang; long m_seed; char *m_optimize; int m_session_no; // sequence for each client session @@ -223,6 +211,7 @@ class YAZ_EXPORT Yaz_Proxy : public Yaz_Z_Assoc { Z_GDU *m_bw_hold_PDU; int m_max_record_retrieve; void handle_max_record_retrieve(Z_APDU *apdu); + int handle_authentication(Z_APDU *apdu); void display_diagrecs(Z_DiagRec **pp, int num); Z_Records *create_nonSurrogateDiagnostics(ODR o, int error, const char *addinfo); @@ -231,22 +220,25 @@ class YAZ_EXPORT Yaz_Proxy : public Yaz_Z_Assoc { Z_APDU *handle_query_transformation(Z_APDU *apdu); Z_APDU *handle_syntax_validation(Z_APDU *apdu); + + void handle_charset_lang_negotiation(Z_APDU *apdu); + const char *load_balance(const char **url); int m_reconfig_flag; Yaz_ProxyConfig *check_reconfigure(); int m_request_no; int m_invalid_session; int m_marcxml_flag; -#if HAVE_XSLT - xsltStylesheetPtr m_stylesheet_xsp; -#else - void *m_stylesheet_xsp; -#endif + void *m_stylesheet_xsp; // Really libxslt's xsltStylesheetPtr int m_stylesheet_offset; Z_APDU *m_stylesheet_apdu; Z_NamePlusRecordList *m_stylesheet_nprl; char *m_schema; - void convert_to_marcxml(Z_NamePlusRecordList *p); + char *m_backend_type; + char *m_backend_charset; + int m_frontend_type; + void convert_to_frontend_type(Z_NamePlusRecordList *p); + void convert_to_marcxml(Z_NamePlusRecordList *p, const char *charset); int convert_xsl(Z_NamePlusRecordList *p, Z_APDU *apdu); void convert_xsl_delay(); Z_APDU *m_initRequest_apdu; @@ -254,6 +246,11 @@ class YAZ_EXPORT Yaz_Proxy : public Yaz_Z_Assoc { int m_initRequest_maximumRecordSize; Z_Options *m_initRequest_options; Z_ProtocolVersion *m_initRequest_version; + char **m_initRequest_oi_negotiation_charsets; + int m_initRequest_oi_negotiation_num_charsets; + char **m_initRequest_oi_negotiation_langs; + int m_initRequest_oi_negotiation_num_langs; + int m_initRequest_oi_negotiation_selected; NMEM m_initRequest_mem; Z_APDU *m_apdu_invalid_session; NMEM m_mem_invalid_session; @@ -268,6 +265,7 @@ class YAZ_EXPORT Yaz_Proxy : public Yaz_Z_Assoc { Z_APDU *m_s2z_present_apdu; char *m_s2z_stylesheet; char *m_soap_ns; + int file_access(Z_HTTP_Request *hreq); int send_to_srw_client_error(int error, const char *add); int send_to_srw_client_ok(int hits, Z_Records *records, int start); int send_http_response(int code); @@ -279,9 +277,7 @@ class YAZ_EXPORT Yaz_Proxy : public Yaz_Z_Assoc { int m_http_keepalive; const char *m_http_version; Yaz_cql2rpn m_cql2rpn; -#if HAVE_GETTIMEOFDAY - struct timeval m_time_tv; -#endif + void *m_time_tv; void logtime(); Z_ElementSetNames *mk_esn_from_schema(ODR o, const char *schema); Z_ReferenceId *m_referenceId; @@ -290,6 +286,9 @@ class YAZ_EXPORT Yaz_Proxy : public Yaz_Z_Assoc { int m_lo_fd[NO_SPARE_SOLARIS_FD]; void low_socket_open(); void low_socket_close(); + char *m_usemarcon_ini_stage1; + char *m_usemarcon_ini_stage2; + Yaz_usemarcon *m_usemarcon; public: Yaz_Proxy(IYaz_PDU_Observable *the_PDU_Observable, Yaz_Proxy *parent = 0); @@ -307,6 +306,7 @@ class YAZ_EXPORT Yaz_Proxy : public Yaz_Z_Assoc { const char *option(const char *name, const char *value); void set_default_target(const char *target); void set_proxy_authentication (const char *auth); + void set_proxy_negotiation (const char *charset, const char *lang); char *get_proxy_target() { return m_proxyTarget; }; char *get_session_str() { return m_session_str; }; void set_max_clients(int m) { m_max_clients = m; }; @@ -322,3 +322,4 @@ class YAZ_EXPORT Yaz_Proxy : public Yaz_Z_Assoc { int handle_init_response_for_invalid_session(Z_APDU *apdu); }; +#endif