2 * Copyright (c) 2000-2001, Index Data.
3 * See the file LICENSE for details.
5 * $Id: z-server.h,v 1.1 2002-10-09 12:50:26 adam Exp $
8 #include <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,
27 void Yaz_Z_ServerUtility::create_diagnostics (
28 ODR odr, int error, const char *addinfo,
29 Z_DiagRec ***dreca, int *num);
32 class YAZ_EXPORT IYaz_Server_Facility {
34 virtual int init(Yaz_Z_Server *server,
35 Z_InitRequest *initRequest,
36 Z_InitResponse *initResponse) = 0;
37 virtual int recv(Yaz_Z_Server *server, Z_APDU *apdu) = 0;
42 class YAZ_EXPORT Yaz_Facility_Ursula : public IYaz_Server_Facility {
44 // virtual void ursula_service (Z_ExtendedServicesRequest *req,
46 // Z_ExtendedServicesResponse *res) = 0;
47 virtual void ursula_service (Z_ExtendedServicesRequest *req,
49 Z_ExtendedServicesResponse *res,
52 int init(Yaz_Z_Server *server,
53 Z_InitRequest *initRequest,
54 Z_InitResponse *initResponse);
55 int recv(Yaz_Z_Server *server, Z_APDU *apdu);
59 class YAZ_EXPORT Yaz_Facility_ILL : public IYaz_Server_Facility {
61 virtual void ill_service (Z_ExtendedServicesRequest *req,
63 Z_ExtendedServicesResponse *res) = 0;
65 int init(Yaz_Z_Server *server,
66 Z_InitRequest *initRequest,
67 Z_InitResponse *initResponse);
68 int recv(Yaz_Z_Server *server, Z_APDU *apdu);
71 class YAZ_EXPORT Yaz_Facility_Update : public IYaz_Server_Facility {
73 virtual void update_service (Z_ExtendedServicesRequest *req,
75 Z_ExtendedServicesResponse *res) = 0;
77 virtual void update_service0 (Z_ExtendedServicesRequest *req,
79 Z_ExtendedServicesResponse *res) = 0;
81 int init(Yaz_Z_Server *server,
82 Z_InitRequest *initRequest,
83 Z_InitResponse *initResponse);
84 int recv(Yaz_Z_Server *server, Z_APDU *apdu);
88 class YAZ_EXPORT Yaz_Facility_Retrieval : public IYaz_Server_Facility,
89 public Yaz_Z_ServerUtility {
92 virtual int sr_init (Z_InitRequest *initRequest,
93 Z_InitResponse *initResponse) = 0;
94 virtual void sr_search (Z_SearchRequest *searchRequest,
95 Z_SearchResponse *searchResponse) = 0;
96 virtual void sr_present (Z_PresentRequest *presentRequest,
97 Z_PresentResponse *presentResponse) = 0;
98 virtual void sr_record (const char *resultSetName,
101 Z_RecordComposition *comp,
102 Z_NamePlusRecord *namePlusRecord,
103 Z_Records *diagnostics) = 0;
104 int init(Yaz_Z_Server *server,
105 Z_InitRequest *initRequest,
106 Z_InitResponse *initResponse);
107 int recv(Yaz_Z_Server *server, Z_APDU *apdu);
112 Z_Records *pack_records (Yaz_Z_Server *s,
113 const char *resultSetName,
115 Z_RecordComposition *comp,
116 int *next, int *pres,
119 void fetch_via_piggyback (Yaz_Z_Server *s,
120 Z_SearchRequest *searchRequest,
121 Z_SearchResponse *searchResponse);
122 void fetch_via_present (Yaz_Z_Server *s,
123 Z_PresentRequest *req, Z_PresentResponse *res);
125 int m_preferredMessageSize;
126 int m_maximumRecordSize;
131 class YAZ_EXPORT Yaz_Z_Server_Facility_Info {
132 friend class Yaz_Z_Server;
133 IYaz_Server_Facility *m_facility;
135 Yaz_Z_Server_Facility_Info *m_next;
140 class YAZ_EXPORT Yaz_Z_Server : public Yaz_Z_Assoc {
142 Yaz_Z_Server(IYaz_PDU_Observable *the_PDU_Observable);
143 virtual ~Yaz_Z_Server();
144 virtual void recv_Z_PDU(Z_APDU *apdu);
145 void facility_add(IYaz_Server_Facility *facility, const char *name);
146 void facility_reset ();
150 Yaz_Z_Server_Facility_Info *m_facilities;
153 class YAZ_EXPORT Yaz_USMARC {
155 const char *get_record(int position);