X-Git-Url: http://git.indexdata.com/?p=yazproxy-moved-to-github.git;a=blobdiff_plain;f=src%2Fproxyp.h;h=fa3543baa421f2f09eb9500b279cc2b49915ce8f;hp=3485885b6e74751465d11ec1fe2fd9a6fc91fbb7;hb=dfdff5f2d2825a500d3d27200d2ec32ee063a975;hpb=e9a5a9feeb12335c668b73dbb6385908be6806f1 diff --git a/src/proxyp.h b/src/proxyp.h index 3485885..fa3543b 100644 --- a/src/proxyp.h +++ b/src/proxyp.h @@ -1,7 +1,5 @@ -/* $Id: proxyp.h,v 1.3 2005-02-21 14:27:32 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-2009 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,12 +12,11 @@ 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 +*/ -#if HAVE_XSLT +#if YAZ_HAVE_XSLT #include #include #include @@ -28,9 +25,10 @@ Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA #endif #if HAVE_USEMARCON -#include +#include #endif +#include #include #include @@ -42,16 +40,41 @@ class Yaz_usemarcon { ~Yaz_usemarcon(); int convert(const char *stage1, const char *stage2, - const char *input, int input_len, - char **output, int *output_len); + const char *input, int input_len, + char **output, int *output_len); #if HAVE_USEMARCON - CDetails *m_stage1; - CDetails *m_stage2; + Usemarcon *m_stage1; + Usemarcon *m_stage2; #else int dummy; #endif }; +class Yaz_CharsetConverter { +public: + Yaz_CharsetConverter(); + ~Yaz_CharsetConverter(); + void set_target_query_charset(const char *s); + void set_client_query_charset(const char *org); + const char *get_client_query_charset(void); + const char *get_target_query_charset(void); + void convert_type_1(Z_RPNQuery *q, ODR o); + void set_client_charset_selected(int sel); + int get_client_charset_selected(); +private: + void convert_type_1(char *buf_in, int len_in, + char **buf_out, int *len_out, + ODR o); + void convert_type_1(Z_Term *q, ODR o); + void convert_type_1(Z_RPNStructure *q, ODR o); + void convert_type_1(Z_Operand *q, ODR o); + char *m_target_query_charset; + char *m_client_query_charset; + int m_client_charset_selected; + yaz_iconv_t m_ct; + WRBUF m_wrbuf; +}; + class Yaz_ProxyConfig { public: Yaz_ProxyConfig(); @@ -59,91 +82,84 @@ public: int read_xml(const char *fname); int get_target_no(int no, - const char **name, - const char **url, - int *limit_bw, - int *limit_pdu, - int *limit_req, - int *target_idletime, - int *client_idletime, - int *max_clients, - int *keepalive_limit_bw, - int *keepalive_limit_pdu, - int *pre_init, - const char **cql2rpn, - const char **authentication, - const char **negotiation_charset, - const char **negotiation_lang); - - void get_generic_info(int *log_mask, int *max_clients); + const char **name, + const char **url, + int *limit_bw, + int *limit_pdu, + int *limit_req, + int *limit_search, + int *target_idletime, + int *client_idletime, + int *max_sockets, + int *max_clients, + int *keepalive_limit_bw, + int *keepalive_limit_pdu, + int *pre_init, + const char **cql2rpn, + const char **authentication, + const char **negotiation_charset, + const char **negotiation_lang, + const char **query_charset, + const char **default_client_query_charset); + + void get_generic_info(int *log_mask, int *max_clients, + int *max_connect, int *limit_connect, + int *period_connect, + int *msg_threads); + + int get_file_access_info(const char *path); void get_target_info(const char *name, const char **url, - int *limit_bw, int *limit_pdu, int *limit_req, - int *target_idletime, int *client_idletime, - int *max_clients, - int *keepalive_limit_bw, int *keepalive_limit_pdu, - int *pre_init, - const char **cql2rpn, - const char **negotiation_charset, - const char **negotiation_lang); + int *limit_bw, int *limit_pdu, int *limit_req, + int *limit_search, + int *target_idletime, int *client_idletime, + int *max_sockets, + int *max_clients, + int *keepalive_limit_bw, int *keepalive_limit_pdu, + int *pre_init, + const char **cql2rpn, + const char **negotiation_charset, + const char **negotiation_lang, + const char **query_charset, + const char **default_client_query_charset); 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 **backend_type, char **backend_charset, - char **usemarcon_ini_stage1, char **usemarcon_ini_stage2); + Odr_oid *syntax, Z_RecordComposition *comp, + char **addinfo, char **stylesheet, char **schema, + char **backend_type, char **backend_charset, + char **usemarcon_ini_stage1, char **usemarcon_ini_stage2); void target_authentication(const char *name, - ODR odr, - Z_InitRequest *req); + ODR odr, + Z_InitRequest *req); int client_authentication(const char *name, - const char *user, const char *group, - const char *password); + const char *user, const char *group, + const char *password, + const char *peer_IP); + int global_client_authentication(const char *user, const char *group, + const char *password, + const char *peer_IP); char *get_explain_doc(ODR odr, const char *name, const char *db, - int *len); + int *len, int *http_status); const char *get_explain_name(const char *db, const char **backend_db); private: void operator=(const Yaz_ProxyConfig &conf); class Yaz_ProxyConfigP *m_cp; }; -class Yaz_RecordCache { - public: - Yaz_RecordCache (); - ~Yaz_RecordCache (); - void add (ODR o, Z_NamePlusRecordList *npr, int start, int hits); - - int lookup (ODR o, Z_NamePlusRecordList **npr, int start, int num, - Odr_oid *syntax, Z_RecordComposition *comp); - void clear(); - - void copy_searchRequest(Z_SearchRequest *sr); - void copy_presentRequest(Z_PresentRequest *pr); - void set_max_size(int sz); - private: - NMEM m_mem; - Yaz_RecordCache_Entry *m_entries; - Z_SearchRequest *m_searchRequest; - Z_PresentRequest *m_presentRequest; - int match (Yaz_RecordCache_Entry *entry, - Odr_oid *syntax, int offset, - Z_RecordComposition *comp); - int m_max_size; -}; - -class Yaz_ProxyClient : public Yaz_Z_Assoc { +class Yaz_ProxyClient : public yazpp_1::Z_Assoc { friend class Yaz_Proxy; - Yaz_ProxyClient(IYaz_PDU_Observable *the_PDU_Observable, - Yaz_Proxy *parent); + Yaz_ProxyClient(yazpp_1::IPDU_Observable *the_PDU_Observable, + Yaz_Proxy *parent); ~Yaz_ProxyClient(); void recv_GDU(Z_GDU *apdu, int len); void recv_Z_PDU(Z_APDU *apdu, int len); void recv_HTTP_response(Z_HTTP_Response *apdu, int len); - IYaz_PDU_Observer* sessionNotify - (IYaz_PDU_Observable *the_PDU_Observable, int fd); + IPDU_Observer* sessionNotify + (yazpp_1::IPDU_Observable *the_PDU_Observable, int fd); void shutdown(); Yaz_Proxy *m_server; void failNotify(); @@ -155,8 +171,8 @@ class Yaz_ProxyClient : public Yaz_Z_Assoc { Yaz_ProxyClient *m_next; Yaz_ProxyClient **m_prev; int m_init_flag; - Yaz_Z_Query *m_last_query; - Yaz_Z_Databases m_last_databases; + yazpp_1::Yaz_Z_Query *m_last_query; + yazpp_1::Yaz_Z_Databases m_last_databases; char *m_last_resultSetId; int m_last_ok; int m_last_resultCount; @@ -173,9 +189,24 @@ class Yaz_ProxyClient : public Yaz_Z_Assoc { Z_ProtocolVersion *m_initResponse_version; int m_initResponse_preferredMessageSize; int m_initResponse_maximumRecordSize; - Yaz_RecordCache m_cache; + yazpp_1::RecordCache m_cache; void pre_init_client(); int m_target_idletime; Yaz_Proxy *m_root; + char *m_idAuthentication_ber_buf; + int m_idAuthentication_ber_size; + ODR m_idAuthentication_odr; + void set_idAuthentication(Z_APDU *apdu); + bool compare_idAuthentication(Z_APDU *apdu); + bool compare_charset(Z_APDU *apdu); }; +/* + * Local variables: + * c-basic-offset: 4 + * c-file-style: "Stroustrup" + * indent-tabs-mode: nil + * End: + * vim: shiftwidth=4 tabstop=8 expandtab + */ +