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