URSULA / Z-ruth service.
[yazpp-moved-to-github.git] / include / yaz++ / yaz-z-server.h
index 6d48de4..3f399c1 100644 (file)
@@ -2,13 +2,27 @@
  * Copyright (c) 2000-2001, Index Data.
  * See the file LICENSE for details.
  * 
- * $Id: yaz-z-server.h,v 1.5 2001-04-03 14:37:19 adam Exp $
+ * $Id: yaz-z-server.h,v 1.6 2001-04-04 14:02:49 adam Exp $
  */
 
 #include <yaz++/yaz-z-assoc.h>
+#include <yaz/zes-ursula.h>
 
 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);
+};
+
 class YAZ_EXPORT IYaz_Server_Facility {
  public:
     virtual int init(Yaz_Z_Server *server,
@@ -18,32 +32,36 @@ class YAZ_EXPORT IYaz_Server_Facility {
 };
 
 
+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;
+
+    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_ILL : public IYaz_Server_Facility {
  public:
     virtual int ill_init (Z_InitRequest *initRequest,
                          Z_InitResponse *initResponse) = 0;
 
     virtual void ill_service (Z_ExtendedServicesRequest *req,
-        Z_ItemOrder *io, Z_ExtendedServicesResponse *res) = 0;
+                             Z_ItemOrder *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);
-
-
-    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;
 };
 
-class YAZ_EXPORT Yaz_Facility_Retrieval : public IYaz_Server_Facility {
+class YAZ_EXPORT Yaz_Facility_Retrieval : public IYaz_Server_Facility,
+    public Yaz_Z_ServerUtility {
  public:
 
     virtual int sr_init (Z_InitRequest *initRequest,
@@ -63,30 +81,26 @@ class YAZ_EXPORT Yaz_Facility_Retrieval : public IYaz_Server_Facility {
             Z_InitResponse *initResponse);
     int recv(Yaz_Z_Server *server, Z_APDU *apdu);
 
-    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);
-    
-    Z_Records *create_nonSurrogateDiagnostics (int error,
-                                              const char *addinfo);
-    virtual ODR odr_encode();
+    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);
 
-    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 {
@@ -96,6 +110,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);
@@ -103,6 +119,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;
 };