X-Git-Url: http://git.indexdata.com/?p=yazproxy-moved-to-github.git;a=blobdiff_plain;f=include%2Fyazproxy%2Fproxy.h;h=c5021f90cc316877f7723c7aab126a6ea4124bec;hp=69aeb455786f38d733b60b0bbacef12f34ac5e4b;hb=82b0575e71269b113acb2bb7c7541a470ed07c9a;hpb=eebdf6b6a66d6a01aacf871c637059cc5af47cb4 diff --git a/include/yazproxy/proxy.h b/include/yazproxy/proxy.h index 69aeb45..c5021f9 100644 --- a/include/yazproxy/proxy.h +++ b/include/yazproxy/proxy.h @@ -1,7 +1,5 @@ -/* $Id: proxy.h,v 1.26 2005-11-30 11:48:19 adam Exp $ - Copyright (c) 1998-2005, Index Data. - -This file is part of the yaz-proxy. +/* This file is part of YAZ proxy + Copyright (C) 1998-2011 Index Data 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 @@ -14,23 +12,23 @@ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with YAZ proxy; see the file LICENSE. If not, write to the -Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA -02111-1307, USA. - */ +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ #ifndef YAZ_PROXY_H_INCLUDED #define YAZ_PROXY_H_INCLUDED -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include #include -#include -#include +#include +#include #include +#include class Yaz_Proxy; @@ -40,6 +38,7 @@ class Yaz_Proxy; #define PROXY_LOG_APDU_SERVER 2 #define PROXY_LOG_REQ_CLIENT 4 #define PROXY_LOG_REQ_SERVER 8 +#define PROXY_LOG_IP_CLIENT 16 class Yaz_usemarcon; class Yaz_ProxyConfig; @@ -48,7 +47,7 @@ class Yaz_CharsetConverter; enum YAZ_Proxy_MARCXML_mode { none, - marcxml, + marcxml }; class Msg_Thread; @@ -64,11 +63,14 @@ class YAZ_EXPORT Yaz_Proxy : public yazpp_1::Z_Assoc { char *get_proxy(Z_OtherInformation **otherInfo); void get_charset_and_lang_negotiation(Z_OtherInformation **otherInfo, char **charstes, char **langs, int *selected); + void HTTP_Forwarded(Z_GDU *z_gdu); + void connect_stat(bool &block, int &reduce); Yaz_ProxyClient *get_client(Z_APDU *apdu, const char *cookie, - const char *proxy_host); + const char *proxy_host, int *http_code); void srw_get_client(const char *db, const char **backend_db); + int get_number_of_connections(); Z_APDU *result_set_optimize(Z_APDU *apdu); - void releaseClient(); + void releaseClient(); Yaz_ProxyClient *m_client; yazpp_1::IPDU_Observable *m_PDU_Observable; yazpp_1::ISocketObservable *m_socket_observable; @@ -81,15 +83,17 @@ class YAZ_EXPORT Yaz_Proxy : public yazpp_1::Z_Assoc { int m_keepalive_limit_pdu; int m_client_idletime; int m_target_idletime; + int m_max_sockets; int m_debug_mode; char *m_proxyTarget; char *m_default_target; char *m_proxy_negotiation_charset; char *m_proxy_negotiation_lang; + char *m_proxy_negotiation_default_charset; long m_seed; char *m_optimize; int m_session_no; // sequence for each client session - char m_session_str[30]; // session string (time:session_no) + char m_session_str[200]; // session string (time:session_no) Yaz_ProxyConfig *m_config; char *m_config_fname; int m_bytes_sent; @@ -104,12 +108,17 @@ class YAZ_EXPORT Yaz_Proxy : public yazpp_1::Z_Assoc { timeout_xsl } m_timeout_mode; - int m_connect_max; + int m_max_connect; + int m_max_connect_period; + int m_limit_connect; + int m_limit_connect_period; int m_search_max; Yaz_bw m_bw_stat; int m_pdu_max; Yaz_bw m_pdu_stat; int m_max_record_retrieve; + Yaz_bw m_search_stat; + void handle_max_record_retrieve(Z_APDU *apdu); void display_diagrecs(Z_DiagRec **pp, int num); Z_Records *create_nonSurrogateDiagnostics(ODR o, int error, @@ -129,14 +138,14 @@ class YAZ_EXPORT Yaz_Proxy : public yazpp_1::Z_Assoc { int m_request_no; int m_flag_invalid_session; YAZ_Proxy_MARCXML_mode m_marcxml_mode; - void *m_stylesheet_xsp; // Really libxslt's xsltStylesheetPtr + 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; char *m_backend_type; char *m_backend_charset; - int m_frontend_type; + Odr_oid m_frontend_type[OID_SIZE]; void convert_to_frontend_type(Z_NamePlusRecordList *p); void convert_to_marcxml(Z_NamePlusRecordList *p, const char *charset); void convert_records_charset(Z_NamePlusRecordList *p, const char *charset); @@ -170,9 +179,10 @@ class YAZ_EXPORT Yaz_Proxy : public yazpp_1::Z_Assoc { 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); - int send_srw_response(Z_SRW_PDU *srw_pdu); + int send_srw_response(Z_SRW_PDU *srw_pdu, int http_code = 200); int send_srw_search_response(Z_SRW_diagnostic *diagnostics, - int num_diagnostics); + int num_diagnostics, + int http_code = 200); int send_srw_explain_response(Z_SRW_diagnostic *diagnostics, int num_diagnostics); int z_to_srw_diag(ODR o, Z_SRW_searchRetrieveResponse *srw_res, @@ -185,7 +195,7 @@ class YAZ_EXPORT Yaz_Proxy : public yazpp_1::Z_Assoc { Z_ElementSetNames *mk_esn_from_schema(ODR o, const char *schema); Z_ReferenceId *m_referenceId; NMEM m_referenceId_mem; - + #define NO_SPARE_SOLARIS_FD 10 int m_lo_fd[NO_SPARE_SOLARIS_FD]; void low_socket_open(); @@ -195,18 +205,18 @@ class YAZ_EXPORT Yaz_Proxy : public yazpp_1::Z_Assoc { Yaz_usemarcon *m_usemarcon; Yaz_CharsetConverter *m_charset_converter; yazpp_1::GDUQueue m_in_queue; + LimitConnect m_connect; public: Yaz_Proxy(yazpp_1::IPDU_Observable *the_PDU_Observable, yazpp_1::ISocketObservable *the_socket_observable, Yaz_Proxy *parent = 0); ~Yaz_Proxy(); - void inc_ref(); - bool dec_ref(bool main_ptr); - + bool dec_ref(); int handle_authentication(Z_APDU *apdu); + int handle_global_authentication(Z_APDU *apdu); void result_authentication(Z_APDU *apdu, int ret); void handle_init(Z_APDU *apdu); void inc_request_no(); @@ -225,7 +235,8 @@ class YAZ_EXPORT Yaz_Proxy : public yazpp_1::Z_Assoc { void markInvalid(); const char *option(const char *name, const char *value); void set_default_target(const char *target); - void set_proxy_negotiation (const char *charset, const char *lang); + void set_proxy_negotiation(const char *charset, const char *lang, + const char *default_charset); void set_target_charset(const char *charset); char *get_proxy_target() { return m_proxyTarget; }; char *get_session_str() { return m_session_str; }; @@ -242,13 +253,16 @@ class YAZ_EXPORT Yaz_Proxy : public yazpp_1::Z_Assoc { int handle_init_response_for_invalid_session(Z_APDU *apdu); void set_debug_mode(int mode); void send_response_fail_client(const char *addr); + int m_num_msg_threads; Msg_Thread *m_my_thread; + void base64_decode(const char *base64, char *buf, int buf_len); }; #endif /* * Local variables: * c-basic-offset: 4 + * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab