2 * Copyright (c) 2000-2001, Index Data.
3 * See the file LICENSE for details.
5 * $Id: z-server.h,v 1.4 2003-12-16 14:17:01 adam Exp $
8 #include <yaz++/z-assoc.h>
12 class YAZ_EXPORT Yaz_Z_ServerUtility {
14 void create_databaseRecord (ODR odr, Z_NamePlusRecord *rec,
15 const char *dbname, int format,
16 const void *buf, int len);
17 void create_surrogateDiagnostics(ODR odr, Z_NamePlusRecord *rec,
18 const char *dbname, int error,
21 Z_Records *create_nonSurrogateDiagnostics (ODR odr, int error,
24 void Yaz_Z_ServerUtility::create_diagnostics (
25 ODR odr, int error, const char *addinfo,
26 Z_DiagRec ***dreca, int *num);
29 class YAZ_EXPORT IYaz_Server_Facility {
31 virtual int init(Yaz_Z_Server *server,
32 Z_InitRequest *initRequest,
33 Z_InitResponse *initResponse) = 0;
34 virtual int recv(Yaz_Z_Server *server, Z_APDU *apdu) = 0;
37 class YAZ_EXPORT Yaz_Facility_ILL : public IYaz_Server_Facility {
39 virtual void ill_service (Z_ExtendedServicesRequest *req,
41 Z_ExtendedServicesResponse *res) = 0;
43 int init(Yaz_Z_Server *server,
44 Z_InitRequest *initRequest,
45 Z_InitResponse *initResponse);
46 int recv(Yaz_Z_Server *server, Z_APDU *apdu);
49 class YAZ_EXPORT Yaz_Facility_Update : public IYaz_Server_Facility {
51 virtual void update_service (Z_ExtendedServicesRequest *req,
53 Z_ExtendedServicesResponse *res) = 0;
55 virtual void update_service0 (Z_ExtendedServicesRequest *req,
57 Z_ExtendedServicesResponse *res) = 0;
59 int init(Yaz_Z_Server *server,
60 Z_InitRequest *initRequest,
61 Z_InitResponse *initResponse);
62 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 void recv_Z_PDU(Z_APDU *apdu, int len);
123 virtual void recv_GDU(Z_GDU *apdu, int len);
124 void facility_add(IYaz_Server_Facility *facility, const char *name);
125 void facility_reset ();
129 Yaz_Z_Server_Facility_Info *m_facilities;
132 class YAZ_EXPORT Yaz_USMARC {
134 const char *get_record(int position);