New threaded PDU association.
[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.2 2001-03-26 14:43:49 adam Exp $
6  */
7
8 #include <yaz++/yaz-z-assoc.h>
9
10 class Yaz_Z_Server;
11
12 class YAZ_EXPORT Yaz_I_Facility {
13  public:
14     virtual const char *get_name(Yaz_Z_Server *server) = 0;
15     virtual int open(Yaz_Z_Server *server,
16                      Z_InitRequest *initRequest,
17                      Z_InitResponse *initResponse) = 0;
18     virtual int recv_PDU(Yaz_Z_Server *server, Z_APDU *apdu) = 0;
19     virtual int close(Yaz_Z_Server *server) = 0;
20 };
21
22 class YAZ_EXPORT Yaz_Facility_Retrieval : public Yaz_I_Facility {
23  public:
24     const char *get_name(Yaz_Z_Server *server);
25     int open(Yaz_Z_Server *server,
26              Z_InitRequest *initRequest,
27              Z_InitResponse *initResponse);
28     int recv_PDU(Yaz_Z_Server *server, Z_APDU *apdu);
29     int close(Yaz_Z_Server *server);
30 };
31
32 class YAZ_EXPORT Yaz_Z_Server : public Yaz_Z_Assoc {
33 public:
34     Yaz_Z_Server(IYaz_PDU_Observable *the_PDU_Observable);
35     virtual void recv_Z_PDU(Z_APDU *apdu);
36     virtual void recv_Z_init (Z_InitRequest *initRequest,
37                               Z_InitResponse *initResponse) = 0;
38     virtual void recv_Z_search (Z_SearchRequest *searchRequest,
39                                 Z_SearchResponse *searchResponse) = 0;
40     virtual void recv_Z_present (Z_PresentRequest *presentRequest,
41                                  Z_PresentResponse *presentResponse) = 0;
42     virtual void recv_Z_record (const char *resultSetName,
43                                 int position,
44                                 int *format,
45                                 Z_RecordComposition *comp,
46                                 Z_NamePlusRecord *namePlusRecord,
47                                 Z_Records *diagnostics) = 0;
48     Z_Records *Yaz_Z_Server::create_nonSurrogateDiagnostics (
49         int error, const char *addinfo);
50     void create_databaseRecord (Z_NamePlusRecord *rec,
51                                 const char *dbname, int format,
52                                 const void *buf, int len);
53     void create_surrogateDiagnostics(Z_NamePlusRecord *rec,
54                                      const char *dbname, int error,
55                                      char *const addinfo);
56  private:
57     Z_Records *pack_records (const char *resultSetName,
58                              int start, int num,
59                              Z_RecordComposition *comp,
60                              int *next, int *pres,
61                              int *oid);
62     void fetch_via_piggyback (Z_SearchRequest *searchRequest,
63                               Z_SearchResponse *searchResponse);
64     void fetch_via_present (Z_PresentRequest *req, Z_PresentResponse *res);
65     int m_preferredMessageSize;
66     int m_maximumRecordSize;
67 };