Use ResultSetId for lookup in result set cache
[yazpp-moved-to-github.git] / include / yaz++ / yaz-z-server.h
index 969a8f6..f91970c 100644 (file)
@@ -2,13 +2,33 @@
  * Copyright (c) 2000-2001, Index Data.
  * See the file LICENSE for details.
  * 
- * $Id: yaz-z-server.h,v 1.3 2001-03-27 14:47:45 adam Exp $
+ * $Id: yaz-z-server.h,v 1.11 2002-04-24 12:21:03 adam Exp $
  */
 
 #include <yaz++/yaz-z-assoc.h>
+#if HAVE_YAZ_URSULA_H
+#include <yaz/zes-ursula.h>
+#endif
 
 class Yaz_Z_Server;
 
+class YAZ_EXPORT Yaz_Z_ServerUtility {
+ public:
+    void create_databaseRecord (ODR odr, Z_NamePlusRecord *rec,
+                               const char *dbname, int format,
+                               const void *buf, int len);
+    void create_surrogateDiagnostics(ODR odr, Z_NamePlusRecord *rec,
+                                    const char *dbname, int error,
+                                    char *const addinfo);
+    
+    Z_Records *create_nonSurrogateDiagnostics (ODR odr, int error,
+                                              const char *addinfo);
+
+    void Yaz_Z_ServerUtility::create_diagnostics (
+        ODR odr, int error, const char *addinfo,
+        Z_DiagRec ***dreca, int *num);
+};
+
 class YAZ_EXPORT IYaz_Server_Facility {
  public:
     virtual int init(Yaz_Z_Server *server,
@@ -18,33 +38,56 @@ class YAZ_EXPORT IYaz_Server_Facility {
 };
 
 
-class YAZ_EXPORT Yaz_Facility_ILL : public IYaz_Server_Facility {
+#if HAVE_YAZ_URSULA_H
+class YAZ_EXPORT Yaz_Facility_Ursula : public IYaz_Server_Facility {
  public:
+//    virtual void ursula_service (Z_ExtendedServicesRequest *req,
+//                              Z_UrsPDU *u,
+//                              Z_ExtendedServicesResponse *res) = 0;
+    virtual void ursula_service (Z_ExtendedServicesRequest *req,
+                        Z_UrsPDU *u_req,
+                        Z_ExtendedServicesResponse *res,
+                        Z_UrsPDU *u_res) =0;
+
     int init(Yaz_Z_Server *server,
             Z_InitRequest *initRequest,
             Z_InitResponse *initResponse);
     int recv(Yaz_Z_Server *server, Z_APDU *apdu);
+};
+#endif
 
-    virtual int ill_init (Z_InitRequest *initRequest,
-                         Z_InitResponse *initResponse) = 0;
+class YAZ_EXPORT Yaz_Facility_ILL : public IYaz_Server_Facility {
+ public:
+    virtual void ill_service (Z_ExtendedServicesRequest *req,
+                             Z_ItemOrder *io,
+                             Z_ExtendedServicesResponse *res) = 0;
 
-    void create_databaseRecord (Z_NamePlusRecord *rec,
-                               const char *dbname, int format,
-                               const void *buf, int len);
-    void create_surrogateDiagnostics(Z_NamePlusRecord *rec,
-                                    const char *dbname, int error,
-                                    char *const addinfo);
-    virtual ODR odr_encode();
- private:
-    ODR m_odr;
+    int init(Yaz_Z_Server *server,
+            Z_InitRequest *initRequest,
+            Z_InitResponse *initResponse);
+    int recv(Yaz_Z_Server *server, Z_APDU *apdu);
 };
 
-class YAZ_EXPORT Yaz_Facility_Retrieval : public IYaz_Server_Facility {
+class YAZ_EXPORT Yaz_Facility_Update : public IYaz_Server_Facility {
  public:
+    virtual void update_service (Z_ExtendedServicesRequest *req,
+                                Z_IUUpdate *io,
+                                Z_ExtendedServicesResponse *res) = 0;
+
+    virtual void update_service0 (Z_ExtendedServicesRequest *req,
+                                Z_IU0Update *io,
+                                Z_ExtendedServicesResponse *res) = 0;
+
     int init(Yaz_Z_Server *server,
             Z_InitRequest *initRequest,
             Z_InitResponse *initResponse);
     int recv(Yaz_Z_Server *server, Z_APDU *apdu);
+};
+
+
+class YAZ_EXPORT Yaz_Facility_Retrieval : public IYaz_Server_Facility,
+    public Yaz_Z_ServerUtility {
+ public:
 
     virtual int sr_init (Z_InitRequest *initRequest,
                         Z_InitResponse *initResponse) = 0;
@@ -58,30 +101,31 @@ class YAZ_EXPORT Yaz_Facility_Retrieval : public IYaz_Server_Facility {
                                Z_RecordComposition *comp,
                                Z_NamePlusRecord *namePlusRecord,
                                Z_Records *diagnostics) = 0;
-    void create_databaseRecord (Z_NamePlusRecord *rec,
-                               const char *dbname, int format,
-                               const void *buf, int len);
-    void create_surrogateDiagnostics(Z_NamePlusRecord *rec,
-                                    const char *dbname, int error,
-                                    char *const addinfo);
-    virtual ODR odr_encode();
+    int init(Yaz_Z_Server *server,
+            Z_InitRequest *initRequest,
+            Z_InitResponse *initResponse);
+    int recv(Yaz_Z_Server *server, Z_APDU *apdu);
+
+    ODR odr_encode();
+    ODR odr_decode();
  private:
-    Z_Records *pack_records (const char *resultSetName,
+    Z_Records *pack_records (Yaz_Z_Server *s,
+                            const char *resultSetName,
                             int start, int num,
                             Z_RecordComposition *comp,
                             int *next, int *pres,
                             int *oid);
 
-    Z_Records *create_nonSurrogateDiagnostics (int error,
-                                              const char *addinfo);
-    
-    void fetch_via_piggyback (Z_SearchRequest *searchRequest,
+    void fetch_via_piggyback (Yaz_Z_Server *s,
+                             Z_SearchRequest *searchRequest,
                              Z_SearchResponse *searchResponse);
-    void fetch_via_present (Z_PresentRequest *req, Z_PresentResponse *res);
+    void fetch_via_present (Yaz_Z_Server *s,
+                           Z_PresentRequest *req, Z_PresentResponse *res);
 
     int m_preferredMessageSize;
     int m_maximumRecordSize;
-    ODR m_odr;
+    ODR m_odr_encode;
+    ODR m_odr_decode;
 };
 
 class YAZ_EXPORT Yaz_Z_Server_Facility_Info {
@@ -91,6 +135,8 @@ class YAZ_EXPORT Yaz_Z_Server_Facility_Info {
     Yaz_Z_Server_Facility_Info *m_next;
 };
 
+
+
 class YAZ_EXPORT Yaz_Z_Server : public Yaz_Z_Assoc {
 public:
     Yaz_Z_Server(IYaz_PDU_Observable *the_PDU_Observable);
@@ -98,6 +144,8 @@ public:
     virtual void recv_Z_PDU(Z_APDU *apdu);
     void facility_add(IYaz_Server_Facility *facility, const char *name);
     void facility_reset ();
+
+
  private:
     Yaz_Z_Server_Facility_Info *m_facilities;
 };