Remove private extended service URSULA
[yazpp-moved-to-github.git] / include / yaz++ / z-server.h
1 /*
2  * Copyright (c) 2000-2001, Index Data.
3  * See the file LICENSE for details.
4  * 
5  * $Id: z-server.h,v 1.2 2002-10-28 12:16:09 adam Exp $
6  */
7
8 #include <yaz++/z-assoc.h>
9
10 class Yaz_Z_Server;
11
12 class YAZ_EXPORT Yaz_Z_ServerUtility {
13  public:
14     void create_databaseRecord (ODR odr, Z_NamePlusRecord *rec,
15                                 const char *dbname, int format,
16                                 const void *buf, int len);
17     void create_surrogateDiagnostics(ODR odr, Z_NamePlusRecord *rec,
18                                      const char *dbname, int error,
19                                      char *const addinfo);
20     
21     Z_Records *create_nonSurrogateDiagnostics (ODR odr, int error,
22                                                const char *addinfo);
23
24     void Yaz_Z_ServerUtility::create_diagnostics (
25         ODR odr, int error, const char *addinfo,
26         Z_DiagRec ***dreca, int *num);
27 };
28
29 class YAZ_EXPORT IYaz_Server_Facility {
30  public:
31     virtual int init(Yaz_Z_Server *server,
32                      Z_InitRequest *initRequest,
33                      Z_InitResponse *initResponse) = 0;
34     virtual int recv(Yaz_Z_Server *server, Z_APDU *apdu) = 0;
35 };
36
37 class YAZ_EXPORT Yaz_Facility_ILL : public IYaz_Server_Facility {
38  public:
39     virtual void ill_service (Z_ExtendedServicesRequest *req,
40                               Z_ItemOrder *io,
41                               Z_ExtendedServicesResponse *res) = 0;
42
43     int init(Yaz_Z_Server *server,
44              Z_InitRequest *initRequest,
45              Z_InitResponse *initResponse);
46     int recv(Yaz_Z_Server *server, Z_APDU *apdu);
47 };
48
49 class YAZ_EXPORT Yaz_Facility_Update : public IYaz_Server_Facility {
50  public:
51     virtual void update_service (Z_ExtendedServicesRequest *req,
52                                  Z_IUUpdate *io,
53                                  Z_ExtendedServicesResponse *res) = 0;
54
55     virtual void update_service0 (Z_ExtendedServicesRequest *req,
56                                  Z_IU0Update *io,
57                                  Z_ExtendedServicesResponse *res) = 0;
58
59     int init(Yaz_Z_Server *server,
60              Z_InitRequest *initRequest,
61              Z_InitResponse *initResponse);
62     int recv(Yaz_Z_Server *server, Z_APDU *apdu);
63 };
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 };