Minor changes.
[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.4 2001-04-02 13:39:34 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     
68     Z_Records *create_nonSurrogateDiagnostics (int error,
69                                                const char *addinfo);
70     
71
72     virtual ODR odr_encode();
73
74  private:
75     Z_Records *pack_records (const char *resultSetName,
76                              int start, int num,
77                              Z_RecordComposition *comp,
78                              int *next, int *pres,
79                              int *oid);
80
81     void fetch_via_piggyback (Z_SearchRequest *searchRequest,
82                               Z_SearchResponse *searchResponse);
83     void fetch_via_present (Z_PresentRequest *req, Z_PresentResponse *res);
84
85     int m_preferredMessageSize;
86     int m_maximumRecordSize;
87     ODR m_odr;
88 };
89
90 class YAZ_EXPORT Yaz_Z_Server_Facility_Info {
91     friend class Yaz_Z_Server;
92     IYaz_Server_Facility *m_facility;
93     char *m_name;
94     Yaz_Z_Server_Facility_Info *m_next;
95 };
96
97 class YAZ_EXPORT Yaz_Z_Server : public Yaz_Z_Assoc {
98 public:
99     Yaz_Z_Server(IYaz_PDU_Observable *the_PDU_Observable);
100     virtual ~Yaz_Z_Server();
101     virtual void recv_Z_PDU(Z_APDU *apdu);
102     void facility_add(IYaz_Server_Facility *facility, const char *name);
103     void facility_reset ();
104  private:
105     Yaz_Z_Server_Facility_Info *m_facilities;
106 };
107
108 class YAZ_EXPORT Yaz_USMARC {
109  public:
110     const char *get_record(int position);
111 };