2 * Copyright (c) 2000-2001, Index Data.
3 * See the file LICENSE for details.
5 * $Id: z-server.h,v 1.6 2005-06-02 06:40:21 adam Exp $
8 #include <yaz++/z-assoc.h>
14 class YAZ_EXPORT Yaz_Z_ServerUtility {
16 void create_databaseRecord (ODR odr, Z_NamePlusRecord *rec,
17 const char *dbname, int format,
18 const void *buf, int len);
19 void create_surrogateDiagnostics(ODR odr, Z_NamePlusRecord *rec,
20 const char *dbname, int error,
23 Z_Records *create_nonSurrogateDiagnostics (ODR odr, int error,
26 void Yaz_Z_ServerUtility::create_diagnostics (
27 ODR odr, int error, const char *addinfo,
28 Z_DiagRec ***dreca, int *num);
31 class YAZ_EXPORT IYaz_Server_Facility {
33 virtual int init(Yaz_Z_Server *server,
34 Z_InitRequest *initRequest,
35 Z_InitResponse *initResponse) = 0;
36 virtual int recv(Yaz_Z_Server *server, Z_APDU *apdu) = 0;
39 class YAZ_EXPORT Yaz_Facility_ILL : public IYaz_Server_Facility {
41 virtual void ill_service (Z_ExtendedServicesRequest *req,
43 Z_ExtendedServicesResponse *res) = 0;
45 int init(Yaz_Z_Server *server,
46 Z_InitRequest *initRequest,
47 Z_InitResponse *initResponse);
48 int recv(Yaz_Z_Server *server, Z_APDU *apdu);
51 class YAZ_EXPORT Yaz_Facility_Update : public IYaz_Server_Facility {
53 virtual void update_service (Z_ExtendedServicesRequest *req,
55 Z_ExtendedServicesResponse *res) = 0;
57 virtual void update_service0 (Z_ExtendedServicesRequest *req,
59 Z_ExtendedServicesResponse *res) = 0;
61 int init(Yaz_Z_Server *server,
62 Z_InitRequest *initRequest,
63 Z_InitResponse *initResponse);
64 int recv(Yaz_Z_Server *server, Z_APDU *apdu);
68 class YAZ_EXPORT Yaz_Facility_Retrieval : public IYaz_Server_Facility,
69 public Yaz_Z_ServerUtility {
72 virtual int sr_init (Z_InitRequest *initRequest,
73 Z_InitResponse *initResponse) = 0;
74 virtual void sr_search (Z_SearchRequest *searchRequest,
75 Z_SearchResponse *searchResponse) = 0;
76 virtual void sr_present (Z_PresentRequest *presentRequest,
77 Z_PresentResponse *presentResponse) = 0;
78 virtual void sr_record (const char *resultSetName,
81 Z_RecordComposition *comp,
82 Z_NamePlusRecord *namePlusRecord,
83 Z_Records *diagnostics) = 0;
84 int init(Yaz_Z_Server *server,
85 Z_InitRequest *initRequest,
86 Z_InitResponse *initResponse);
87 int recv(Yaz_Z_Server *server, Z_APDU *apdu);
92 Z_Records *pack_records (Yaz_Z_Server *s,
93 const char *resultSetName,
95 Z_RecordComposition *comp,
99 void fetch_via_piggyback (Yaz_Z_Server *s,
100 Z_SearchRequest *searchRequest,
101 Z_SearchResponse *searchResponse);
102 void fetch_via_present (Yaz_Z_Server *s,
103 Z_PresentRequest *req, Z_PresentResponse *res);
105 int m_preferredMessageSize;
106 int m_maximumRecordSize;
111 class YAZ_EXPORT Yaz_Z_Server_Facility_Info {
112 friend class Yaz_Z_Server;
113 IYaz_Server_Facility *m_facility;
115 Yaz_Z_Server_Facility_Info *m_next;
120 class YAZ_EXPORT Yaz_Z_Server : public Yaz_Z_Assoc {
122 Yaz_Z_Server(IYaz_PDU_Observable *the_PDU_Observable);
123 virtual ~Yaz_Z_Server();
124 void recv_Z_PDU(Z_APDU *apdu, int len);
125 virtual void recv_GDU(Z_GDU *apdu, int len);
126 void facility_add(IYaz_Server_Facility *facility, const char *name);
127 void facility_reset ();
131 Yaz_Z_Server_Facility_Info *m_facilities;
134 class YAZ_EXPORT Yaz_USMARC {
136 const char *get_record(size_t position);