2 * Copyright (c) 2000-2001, Index Data.
3 * See the file LICENSE for details.
5 * $Id: yaz-z-server.h,v 1.8 2001-04-11 12:33:42 heikki Exp $
8 #include <yaz++/yaz-z-assoc.h>
10 #include <yaz/zes-ursula.h>
15 class YAZ_EXPORT Yaz_Z_ServerUtility {
17 void create_databaseRecord (ODR odr, Z_NamePlusRecord *rec,
18 const char *dbname, int format,
19 const void *buf, int len);
20 void create_surrogateDiagnostics(ODR odr, Z_NamePlusRecord *rec,
21 const char *dbname, int error,
24 Z_Records *create_nonSurrogateDiagnostics (ODR odr, int error,
28 class YAZ_EXPORT IYaz_Server_Facility {
30 virtual int init(Yaz_Z_Server *server,
31 Z_InitRequest *initRequest,
32 Z_InitResponse *initResponse) = 0;
33 virtual int recv(Yaz_Z_Server *server, Z_APDU *apdu) = 0;
38 class YAZ_EXPORT Yaz_Facility_Ursula : public IYaz_Server_Facility {
40 // virtual void ursula_service (Z_ExtendedServicesRequest *req,
42 // Z_ExtendedServicesResponse *res) = 0;
43 virtual void ursula_service (Z_ExtendedServicesRequest *req,
45 Z_ExtendedServicesResponse *res,
48 int init(Yaz_Z_Server *server,
49 Z_InitRequest *initRequest,
50 Z_InitResponse *initResponse);
51 int recv(Yaz_Z_Server *server, Z_APDU *apdu);
55 class YAZ_EXPORT Yaz_Facility_ILL : public IYaz_Server_Facility {
57 virtual int ill_init (Z_InitRequest *initRequest,
58 Z_InitResponse *initResponse) = 0;
60 virtual void ill_service (Z_ExtendedServicesRequest *req,
62 Z_ExtendedServicesResponse *res) = 0;
64 int init(Yaz_Z_Server *server,
65 Z_InitRequest *initRequest,
66 Z_InitResponse *initResponse);
67 int recv(Yaz_Z_Server *server, Z_APDU *apdu);
70 class YAZ_EXPORT Yaz_Facility_Retrieval : public IYaz_Server_Facility,
71 public Yaz_Z_ServerUtility {
74 virtual int sr_init (Z_InitRequest *initRequest,
75 Z_InitResponse *initResponse) = 0;
76 virtual void sr_search (Z_SearchRequest *searchRequest,
77 Z_SearchResponse *searchResponse) = 0;
78 virtual void sr_present (Z_PresentRequest *presentRequest,
79 Z_PresentResponse *presentResponse) = 0;
80 virtual void sr_record (const char *resultSetName,
83 Z_RecordComposition *comp,
84 Z_NamePlusRecord *namePlusRecord,
85 Z_Records *diagnostics) = 0;
86 int init(Yaz_Z_Server *server,
87 Z_InitRequest *initRequest,
88 Z_InitResponse *initResponse);
89 int recv(Yaz_Z_Server *server, Z_APDU *apdu);
94 Z_Records *pack_records (Yaz_Z_Server *s,
95 const char *resultSetName,
97 Z_RecordComposition *comp,
101 void fetch_via_piggyback (Yaz_Z_Server *s,
102 Z_SearchRequest *searchRequest,
103 Z_SearchResponse *searchResponse);
104 void fetch_via_present (Yaz_Z_Server *s,
105 Z_PresentRequest *req, Z_PresentResponse *res);
107 int m_preferredMessageSize;
108 int m_maximumRecordSize;
113 class YAZ_EXPORT Yaz_Z_Server_Facility_Info {
114 friend class Yaz_Z_Server;
115 IYaz_Server_Facility *m_facility;
117 Yaz_Z_Server_Facility_Info *m_next;
122 class YAZ_EXPORT Yaz_Z_Server : public Yaz_Z_Assoc {
124 Yaz_Z_Server(IYaz_PDU_Observable *the_PDU_Observable);
125 virtual ~Yaz_Z_Server();
126 virtual void recv_Z_PDU(Z_APDU *apdu);
127 void facility_add(IYaz_Server_Facility *facility, const char *name);
128 void facility_reset ();
132 Yaz_Z_Server_Facility_Info *m_facilities;
135 class YAZ_EXPORT Yaz_USMARC {
137 const char *get_record(int position);