Working on ursula things
[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.8 2001-04-11 12:33:42 heikki 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     virtual void ursula_service (Z_ExtendedServicesRequest *req,
44                          Z_UrsPDU *u_req,
45                          Z_ExtendedServicesResponse *res,
46                          Z_UrsPDU *u_res) =0;
47
48     int init(Yaz_Z_Server *server,
49              Z_InitRequest *initRequest,
50              Z_InitResponse *initResponse);
51     int recv(Yaz_Z_Server *server, Z_APDU *apdu);
52 };
53 #endif
54
55 class YAZ_EXPORT Yaz_Facility_ILL : public IYaz_Server_Facility {
56  public:
57     virtual int ill_init (Z_InitRequest *initRequest,
58                           Z_InitResponse *initResponse) = 0;
59
60     virtual void ill_service (Z_ExtendedServicesRequest *req,
61                               Z_ItemOrder *io,
62                               Z_ExtendedServicesResponse *res) = 0;
63
64     int init(Yaz_Z_Server *server,
65              Z_InitRequest *initRequest,
66              Z_InitResponse *initResponse);
67     int recv(Yaz_Z_Server *server, Z_APDU *apdu);
68 };
69
70 class YAZ_EXPORT Yaz_Facility_Retrieval : public IYaz_Server_Facility,
71     public Yaz_Z_ServerUtility {
72  public:
73
74     virtual int sr_init (Z_InitRequest *initRequest,
75                          Z_InitResponse *initResponse) = 0;
76     virtual void sr_search (Z_SearchRequest *searchRequest,
77                             Z_SearchResponse *searchResponse) = 0;
78     virtual void sr_present (Z_PresentRequest *presentRequest,
79                              Z_PresentResponse *presentResponse) = 0;
80     virtual void sr_record (const char *resultSetName,
81                             int position,
82                             int *format,
83                                 Z_RecordComposition *comp,
84                                 Z_NamePlusRecord *namePlusRecord,
85                                 Z_Records *diagnostics) = 0;
86     int init(Yaz_Z_Server *server,
87              Z_InitRequest *initRequest,
88              Z_InitResponse *initResponse);
89     int recv(Yaz_Z_Server *server, Z_APDU *apdu);
90
91     ODR odr_encode();
92     ODR odr_decode();
93  private:
94     Z_Records *pack_records (Yaz_Z_Server *s,
95                              const char *resultSetName,
96                              int start, int num,
97                              Z_RecordComposition *comp,
98                              int *next, int *pres,
99                              int *oid);
100
101     void fetch_via_piggyback (Yaz_Z_Server *s,
102                               Z_SearchRequest *searchRequest,
103                               Z_SearchResponse *searchResponse);
104     void fetch_via_present (Yaz_Z_Server *s,
105                             Z_PresentRequest *req, Z_PresentResponse *res);
106
107     int m_preferredMessageSize;
108     int m_maximumRecordSize;
109     ODR m_odr_encode;
110     ODR m_odr_decode;
111 };
112
113 class YAZ_EXPORT Yaz_Z_Server_Facility_Info {
114     friend class Yaz_Z_Server;
115     IYaz_Server_Facility *m_facility;
116     char *m_name;
117     Yaz_Z_Server_Facility_Info *m_next;
118 };
119
120
121
122 class YAZ_EXPORT Yaz_Z_Server : public Yaz_Z_Assoc {
123 public:
124     Yaz_Z_Server(IYaz_PDU_Observable *the_PDU_Observable);
125     virtual ~Yaz_Z_Server();
126     virtual void recv_Z_PDU(Z_APDU *apdu);
127     void facility_add(IYaz_Server_Facility *facility, const char *name);
128     void facility_reset ();
129
130
131  private:
132     Yaz_Z_Server_Facility_Info *m_facilities;
133 };
134
135 class YAZ_EXPORT Yaz_USMARC {
136  public:
137     const char *get_record(int position);
138 };