Removed ursula dependancy.
[yazpp-moved-to-github.git] / include / yaz++ / yaz-z-server.h
1 /*
2  * Copyright (c) 2000-2001, Index Data.
3  * See the file LICENSE for details.
4  * 
5  * $Id: yaz-z-server.h,v 1.7 2001-04-05 13:09:44 adam Exp $
6  */
7
8 #include <yaz++/yaz-z-assoc.h>
9 #if HAVE_YAZ_URSULA_H
10 #include <yaz/zes-ursula.h>
11 #endif
12
13 class Yaz_Z_Server;
14
15 class YAZ_EXPORT Yaz_Z_ServerUtility {
16  public:
17     void create_databaseRecord (ODR odr, Z_NamePlusRecord *rec,
18                                 const char *dbname, int format,
19                                 const void *buf, int len);
20     void create_surrogateDiagnostics(ODR odr, Z_NamePlusRecord *rec,
21                                      const char *dbname, int error,
22                                      char *const addinfo);
23     
24     Z_Records *create_nonSurrogateDiagnostics (ODR odr, int error,
25                                                const char *addinfo);
26 };
27
28 class YAZ_EXPORT IYaz_Server_Facility {
29  public:
30     virtual int init(Yaz_Z_Server *server,
31                      Z_InitRequest *initRequest,
32                      Z_InitResponse *initResponse) = 0;
33     virtual int recv(Yaz_Z_Server *server, Z_APDU *apdu) = 0;
34 };
35
36
37 #if HAVE_YAZ_URSULA_H
38 class YAZ_EXPORT Yaz_Facility_Ursula : public IYaz_Server_Facility {
39  public:
40     virtual void ursula_service (Z_ExtendedServicesRequest *req,
41                                  Z_UrsPDU *u,
42                                  Z_ExtendedServicesResponse *res) = 0;
43
44     int init(Yaz_Z_Server *server,
45              Z_InitRequest *initRequest,
46              Z_InitResponse *initResponse);
47     int recv(Yaz_Z_Server *server, Z_APDU *apdu);
48 };
49 #endif
50
51 class YAZ_EXPORT Yaz_Facility_ILL : public IYaz_Server_Facility {
52  public:
53     virtual int ill_init (Z_InitRequest *initRequest,
54                           Z_InitResponse *initResponse) = 0;
55
56     virtual void ill_service (Z_ExtendedServicesRequest *req,
57                               Z_ItemOrder *io,
58                               Z_ExtendedServicesResponse *res) = 0;
59
60     int init(Yaz_Z_Server *server,
61              Z_InitRequest *initRequest,
62              Z_InitResponse *initResponse);
63     int recv(Yaz_Z_Server *server, Z_APDU *apdu);
64 };
65
66 class YAZ_EXPORT Yaz_Facility_Retrieval : public IYaz_Server_Facility,
67     public Yaz_Z_ServerUtility {
68  public:
69
70     virtual int sr_init (Z_InitRequest *initRequest,
71                          Z_InitResponse *initResponse) = 0;
72     virtual void sr_search (Z_SearchRequest *searchRequest,
73                             Z_SearchResponse *searchResponse) = 0;
74     virtual void sr_present (Z_PresentRequest *presentRequest,
75                              Z_PresentResponse *presentResponse) = 0;
76     virtual void sr_record (const char *resultSetName,
77                             int position,
78                             int *format,
79                                 Z_RecordComposition *comp,
80                                 Z_NamePlusRecord *namePlusRecord,
81                                 Z_Records *diagnostics) = 0;
82     int init(Yaz_Z_Server *server,
83              Z_InitRequest *initRequest,
84              Z_InitResponse *initResponse);
85     int recv(Yaz_Z_Server *server, Z_APDU *apdu);
86
87     ODR odr_encode();
88     ODR odr_decode();
89  private:
90     Z_Records *pack_records (Yaz_Z_Server *s,
91                              const char *resultSetName,
92                              int start, int num,
93                              Z_RecordComposition *comp,
94                              int *next, int *pres,
95                              int *oid);
96
97     void fetch_via_piggyback (Yaz_Z_Server *s,
98                               Z_SearchRequest *searchRequest,
99                               Z_SearchResponse *searchResponse);
100     void fetch_via_present (Yaz_Z_Server *s,
101                             Z_PresentRequest *req, Z_PresentResponse *res);
102
103     int m_preferredMessageSize;
104     int m_maximumRecordSize;
105     ODR m_odr_encode;
106     ODR m_odr_decode;
107 };
108
109 class YAZ_EXPORT Yaz_Z_Server_Facility_Info {
110     friend class Yaz_Z_Server;
111     IYaz_Server_Facility *m_facility;
112     char *m_name;
113     Yaz_Z_Server_Facility_Info *m_next;
114 };
115
116
117
118 class YAZ_EXPORT Yaz_Z_Server : public Yaz_Z_Assoc {
119 public:
120     Yaz_Z_Server(IYaz_PDU_Observable *the_PDU_Observable);
121     virtual ~Yaz_Z_Server();
122     virtual void recv_Z_PDU(Z_APDU *apdu);
123     void facility_add(IYaz_Server_Facility *facility, const char *name);
124     void facility_reset ();
125
126
127  private:
128     Yaz_Z_Server_Facility_Info *m_facilities;
129 };
130
131 class YAZ_EXPORT Yaz_USMARC {
132  public:
133     const char *get_record(int position);
134 };