New server facility scheme.
[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.3 2001-03-27 14:47:45 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     int init(Yaz_Z_Server *server,
24              Z_InitRequest *initRequest,
25              Z_InitResponse *initResponse);
26     int recv(Yaz_Z_Server *server, Z_APDU *apdu);
27
28     virtual int ill_init (Z_InitRequest *initRequest,
29                           Z_InitResponse *initResponse) = 0;
30
31     void create_databaseRecord (Z_NamePlusRecord *rec,
32                                 const char *dbname, int format,
33                                 const void *buf, int len);
34     void create_surrogateDiagnostics(Z_NamePlusRecord *rec,
35                                      const char *dbname, int error,
36                                      char *const addinfo);
37     virtual ODR odr_encode();
38  private:
39     ODR m_odr;
40 };
41
42 class YAZ_EXPORT Yaz_Facility_Retrieval : public IYaz_Server_Facility {
43  public:
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     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     void create_databaseRecord (Z_NamePlusRecord *rec,
62                                 const char *dbname, int format,
63                                 const void *buf, int len);
64     void create_surrogateDiagnostics(Z_NamePlusRecord *rec,
65                                      const char *dbname, int error,
66                                      char *const addinfo);
67     virtual ODR odr_encode();
68  private:
69     Z_Records *pack_records (const char *resultSetName,
70                              int start, int num,
71                              Z_RecordComposition *comp,
72                              int *next, int *pres,
73                              int *oid);
74
75     Z_Records *create_nonSurrogateDiagnostics (int error,
76                                                const char *addinfo);
77     
78     void fetch_via_piggyback (Z_SearchRequest *searchRequest,
79                               Z_SearchResponse *searchResponse);
80     void fetch_via_present (Z_PresentRequest *req, Z_PresentResponse *res);
81
82     int m_preferredMessageSize;
83     int m_maximumRecordSize;
84     ODR m_odr;
85 };
86
87 class YAZ_EXPORT Yaz_Z_Server_Facility_Info {
88     friend class Yaz_Z_Server;
89     IYaz_Server_Facility *m_facility;
90     char *m_name;
91     Yaz_Z_Server_Facility_Info *m_next;
92 };
93
94 class YAZ_EXPORT Yaz_Z_Server : public Yaz_Z_Assoc {
95 public:
96     Yaz_Z_Server(IYaz_PDU_Observable *the_PDU_Observable);
97     virtual ~Yaz_Z_Server();
98     virtual void recv_Z_PDU(Z_APDU *apdu);
99     void facility_add(IYaz_Server_Facility *facility, const char *name);
100     void facility_reset ();
101  private:
102     Yaz_Z_Server_Facility_Info *m_facilities;
103 };
104
105 class YAZ_EXPORT Yaz_USMARC {
106  public:
107     const char *get_record(int position);
108 };