More work ILL-service.
[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.5 2001-04-03 14:37:19 adam Exp $
6  */
7
8 #include <yaz++/yaz-z-assoc.h>
9
10 class Yaz_Z_Server;
11
12 class YAZ_EXPORT IYaz_Server_Facility {
13  public:
14     virtual int init(Yaz_Z_Server *server,
15                      Z_InitRequest *initRequest,
16                      Z_InitResponse *initResponse) = 0;
17     virtual int recv(Yaz_Z_Server *server, Z_APDU *apdu) = 0;
18 };
19
20
21 class YAZ_EXPORT Yaz_Facility_ILL : public IYaz_Server_Facility {
22  public:
23     virtual int ill_init (Z_InitRequest *initRequest,
24                           Z_InitResponse *initResponse) = 0;
25
26     virtual void ill_service (Z_ExtendedServicesRequest *req,
27         Z_ItemOrder *io, Z_ExtendedServicesResponse *res) = 0;
28
29     int init(Yaz_Z_Server *server,
30              Z_InitRequest *initRequest,
31              Z_InitResponse *initResponse);
32     int recv(Yaz_Z_Server *server, Z_APDU *apdu);
33
34
35     void create_databaseRecord (Z_NamePlusRecord *rec,
36                                 const char *dbname, int format,
37                                 const void *buf, int len);
38     void create_surrogateDiagnostics(Z_NamePlusRecord *rec,
39                                      const char *dbname, int error,
40                                      char *const addinfo);
41     virtual ODR odr_encode();
42  private:
43     ODR m_odr;
44 };
45
46 class YAZ_EXPORT Yaz_Facility_Retrieval : public IYaz_Server_Facility {
47  public:
48
49     virtual int sr_init (Z_InitRequest *initRequest,
50                          Z_InitResponse *initResponse) = 0;
51     virtual void sr_search (Z_SearchRequest *searchRequest,
52                             Z_SearchResponse *searchResponse) = 0;
53     virtual void sr_present (Z_PresentRequest *presentRequest,
54                              Z_PresentResponse *presentResponse) = 0;
55     virtual void sr_record (const char *resultSetName,
56                             int position,
57                             int *format,
58                                 Z_RecordComposition *comp,
59                                 Z_NamePlusRecord *namePlusRecord,
60                                 Z_Records *diagnostics) = 0;
61     int init(Yaz_Z_Server *server,
62              Z_InitRequest *initRequest,
63              Z_InitResponse *initResponse);
64     int recv(Yaz_Z_Server *server, Z_APDU *apdu);
65
66     void create_databaseRecord (Z_NamePlusRecord *rec,
67                                 const char *dbname, int format,
68                                 const void *buf, int len);
69     void create_surrogateDiagnostics(Z_NamePlusRecord *rec,
70                                      const char *dbname, int error,
71                                      char *const addinfo);
72     
73     Z_Records *create_nonSurrogateDiagnostics (int error,
74                                                const char *addinfo);
75     virtual ODR odr_encode();
76  private:
77     Z_Records *pack_records (const char *resultSetName,
78                              int start, int num,
79                              Z_RecordComposition *comp,
80                              int *next, int *pres,
81                              int *oid);
82
83     void fetch_via_piggyback (Z_SearchRequest *searchRequest,
84                               Z_SearchResponse *searchResponse);
85     void fetch_via_present (Z_PresentRequest *req, Z_PresentResponse *res);
86
87     int m_preferredMessageSize;
88     int m_maximumRecordSize;
89     ODR m_odr;
90 };
91
92 class YAZ_EXPORT Yaz_Z_Server_Facility_Info {
93     friend class Yaz_Z_Server;
94     IYaz_Server_Facility *m_facility;
95     char *m_name;
96     Yaz_Z_Server_Facility_Info *m_next;
97 };
98
99 class YAZ_EXPORT Yaz_Z_Server : public Yaz_Z_Assoc {
100 public:
101     Yaz_Z_Server(IYaz_PDU_Observable *the_PDU_Observable);
102     virtual ~Yaz_Z_Server();
103     virtual void recv_Z_PDU(Z_APDU *apdu);
104     void facility_add(IYaz_Server_Facility *facility, const char *name);
105     void facility_reset ();
106  private:
107     Yaz_Z_Server_Facility_Info *m_facilities;
108 };
109
110 class YAZ_EXPORT Yaz_USMARC {
111  public:
112     const char *get_record(int position);
113 };