Rename a few files
[yazpp-moved-to-github.git] / include / yaz++ / proxy.h
index ebc2be8..aafef3c 100644 (file)
@@ -2,7 +2,7 @@
  * Copyright (c) 1998-2004, Index Data.
  * See the file LICENSE for details.
  * 
- * $Id: proxy.h,v 1.27 2004-01-06 21:17:42 adam Exp $
+ * $Id: proxy.h,v 1.41 2004-02-27 00:42:57 adam Exp $
  */
 
 #include <sys/time.h>
@@ -13,6 +13,8 @@
 #if HAVE_XSLT
 #include <libxml/parser.h>
 #include <libxml/tree.h>
+#include <libxslt/xsltutils.h>
+#include <libxslt/transform.h>
 #endif
 
 class Yaz_Proxy;
@@ -59,14 +61,15 @@ public:
     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 **addinfo, char **stylesheet, char **schema);
     char *get_explain(ODR odr, const char *name, const char *db,
                      int *len);
 private:
     void operator=(const Yaz_ProxyConfig &conf);
     int mycmp(const char *hay, const char *item, size_t len);
 #if HAVE_XSLT
-    int check_esn(xmlNodePtr ptr, Z_RecordComposition *comp);
+    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,
@@ -90,7 +93,6 @@ private:
     int m_copy;
     int match_list(int v, const char *m);
     int atoi_l(const char **cp);
-
 };
 
 class YAZ_EXPORT Yaz_RecordCache {
@@ -166,6 +168,10 @@ class YAZ_EXPORT Yaz_ProxyClient : public Yaz_Z_Assoc {
     int m_pdu_recv;
     ODR m_init_odr;
     Z_APDU *m_initResponse;
+    Z_Options *m_initResponse_options;
+    Z_ProtocolVersion *m_initResponse_version;
+    int m_initResponse_preferredMessageSize;
+    int m_initResponse_maximumRecordSize;
     Yaz_RecordCache m_cache;
     void pre_init_client();
     int m_target_idletime;
@@ -237,28 +243,39 @@ class YAZ_EXPORT Yaz_Proxy : public Yaz_Z_Assoc {
     int m_request_no;
     int m_invalid_session;
     int m_marcxml_flag;
-    char *m_stylesheet;
+    xsltStylesheetPtr m_stylesheet_xsp;
+    int m_stylesheet_offset;
+    Z_APDU *m_stylesheet_apdu;
+    Z_NamePlusRecordList *m_stylesheet_nprl;
+    char *m_schema;
     void convert_to_marcxml(Z_NamePlusRecordList *p);
-    void convert_xsl(Z_NamePlusRecordList *p);
+    int convert_xsl(Z_NamePlusRecordList *p, Z_APDU *apdu);
+    void convert_xsl_delay();
     Z_APDU *m_initRequest_apdu;
+    int m_initRequest_preferredMessageSize;
+    int m_initRequest_maximumRecordSize;
+    Z_Options *m_initRequest_options;
+    Z_ProtocolVersion *m_initRequest_version;
     NMEM m_initRequest_mem;
     Z_APDU *m_apdu_invalid_session;
     NMEM m_mem_invalid_session;
-    int send_PDU_convert(Z_APDU *apdu, int *len);
+    int send_PDU_convert(Z_APDU *apdu);
     ODR m_s2z_odr_init;
     ODR m_s2z_odr_search;
     int m_s2z_hit_count;
     int m_s2z_packing;
+    char *m_s2z_database;
     Z_APDU *m_s2z_init_apdu;
     Z_APDU *m_s2z_search_apdu;
     Z_APDU *m_s2z_present_apdu;
+    char *m_s2z_stylesheet;
     char *m_soap_ns;
-    int send_to_srw_client_error(int error);
+    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_explain();
-
+    int send_srw_explain_response(Z_SRW_diagnostic *diagnostics,
+                                 int num_diagnostics);
     int z_to_srw_diag(ODR o, Z_SRW_searchRetrieveResponse *srw_res,
                      Z_DefaultDiagFormat *ddf);
     int m_http_keepalive;
@@ -267,6 +284,12 @@ class YAZ_EXPORT Yaz_Proxy : public Yaz_Z_Assoc {
     struct timeval m_time_tv;
     void logtime();
     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();
+    void low_socket_close();
  public:
     Yaz_Proxy(IYaz_PDU_Observable *the_PDU_Observable,
              Yaz_Proxy *parent = 0);
@@ -280,6 +303,7 @@ class YAZ_EXPORT Yaz_Proxy : public Yaz_Z_Assoc {
     void failNotify();
     void timeoutNotify();
     void connectNotify();
+    void markInvalid();
     const char *option(const char *name, const char *value);
     void set_default_target(const char *target);
     void set_proxy_authentication (const char *auth);