2 * Copyright (c) 2000-2001, Index Data.
3 * See the file LICENSE for details.
5 * $Id: yaz-z-server.h,v 1.7 2001-04-05 13:09:44 adam 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;
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);
51 class YAZ_EXPORT Yaz_Facility_ILL : public IYaz_Server_Facility {
53 virtual int ill_init (Z_InitRequest *initRequest,
54 Z_InitResponse *initResponse) = 0;
56 virtual void ill_service (Z_ExtendedServicesRequest *req,
58 Z_ExtendedServicesResponse *res) = 0;
60 int init(Yaz_Z_Server *server,
61 Z_InitRequest *initRequest,
62 Z_InitResponse *initResponse);
63 int recv(Yaz_Z_Server *server, Z_APDU *apdu);
66 class YAZ_EXPORT Yaz_Facility_Retrieval : public IYaz_Server_Facility,
67 public Yaz_Z_ServerUtility {
70 virtual int sr_init (Z_InitRequest *initRequest,
71 Z_InitResponse *initResponse) = 0;
72 virtual void sr_search (Z_SearchRequest *searchRequest,
73 Z_SearchResponse *searchResponse) = 0;
74 virtual void sr_present (Z_PresentRequest *presentRequest,
75 Z_PresentResponse *presentResponse) = 0;
76 virtual void sr_record (const char *resultSetName,
79 Z_RecordComposition *comp,
80 Z_NamePlusRecord *namePlusRecord,
81 Z_Records *diagnostics) = 0;
82 int init(Yaz_Z_Server *server,
83 Z_InitRequest *initRequest,
84 Z_InitResponse *initResponse);
85 int recv(Yaz_Z_Server *server, Z_APDU *apdu);
90 Z_Records *pack_records (Yaz_Z_Server *s,
91 const char *resultSetName,
93 Z_RecordComposition *comp,
97 void fetch_via_piggyback (Yaz_Z_Server *s,
98 Z_SearchRequest *searchRequest,
99 Z_SearchResponse *searchResponse);
100 void fetch_via_present (Yaz_Z_Server *s,
101 Z_PresentRequest *req, Z_PresentResponse *res);
103 int m_preferredMessageSize;
104 int m_maximumRecordSize;
109 class YAZ_EXPORT Yaz_Z_Server_Facility_Info {
110 friend class Yaz_Z_Server;
111 IYaz_Server_Facility *m_facility;
113 Yaz_Z_Server_Facility_Info *m_next;
118 class YAZ_EXPORT Yaz_Z_Server : public Yaz_Z_Assoc {
120 Yaz_Z_Server(IYaz_PDU_Observable *the_PDU_Observable);
121 virtual ~Yaz_Z_Server();
122 virtual void recv_Z_PDU(Z_APDU *apdu);
123 void facility_add(IYaz_Server_Facility *facility, const char *name);
124 void facility_reset ();
128 Yaz_Z_Server_Facility_Info *m_facilities;
131 class YAZ_EXPORT Yaz_USMARC {
133 const char *get_record(int position);