* Copyright (c) 1998-2001, Index Data.
* See the file LICENSE for details.
*
- * $Log: yaz-my-server.cpp,v $
- * Revision 1.2 2001-03-29 15:14:26 adam
- * Minor updates.
- *
- * Revision 1.1 2001/03/27 14:47:45 adam
- * New server facility scheme.
- *
- * Revision 1.15 2001/03/26 14:43:49 adam
- * New threaded PDU association.
- *
- * Revision 1.14 2000/11/01 14:22:59 adam
- * Added fd parameter for method IYaz_PDU_Observer::clone.
- *
- * Revision 1.13 2000/10/11 11:58:16 adam
- * Moved header files to include/yaz++. Switched to libtool and automake.
- * Configure script creates yaz++-config script.
- *
- * Revision 1.12 2000/09/21 21:43:20 adam
- * Better high-level server API.
- *
- * Revision 1.11 2000/09/12 16:23:49 adam
- * Updated server example.
- *
- * Revision 1.10 2000/09/12 16:04:17 adam
- * Added comstack method for Yaz_PDU_Assoc..
- *
- * Revision 1.9 2000/09/12 12:09:53 adam
- * More work on high-level server.
- *
- * Revision 1.8 2000/09/08 10:23:42 adam
- * Added skeleton of yaz-z-server.
- *
- * Revision 1.7 1999/12/06 13:52:45 adam
- * Modified for new location of YAZ header files. Experimental threaded
- * operation.
- *
- * Revision 1.6 1999/04/21 12:09:01 adam
- * Many improvements. Modified to proxy server to work with "sessions"
- * based on cookies.
- *
- * Revision 1.5 1999/04/09 11:46:57 adam
- * Added object Yaz_Z_Assoc. Much more functional client.
- *
- * Revision 1.4 1999/03/23 14:17:57 adam
- * More work on timeout handling. Work on yaz-client.
- *
- * Revision 1.3 1999/02/02 14:01:22 adam
- * First WIN32 port of YAZ++.
- *
- * Revision 1.2 1999/01/28 13:08:47 adam
- * Yaz_PDU_Assoc better encapsulated. Memory leak fix in
- * yaz-socket-manager.cc.
- *
- * Revision 1.1.1.1 1999/01/28 09:41:07 adam
- * First implementation of YAZ++.
- *
+ * $Id: yaz-my-server.cpp,v 1.8 2001-11-04 22:36:21 adam Exp $
*/
#include <yaz/log.h>
class MyILL : public Yaz_Facility_ILL {
public:
- int ill_init (Z_InitRequest *initRequest,
- Z_InitResponse *initResponse);
+ void ill_service (Z_ExtendedServicesRequest *req,
+ Z_ItemOrder *io,
+ Z_ExtendedServicesResponse *res);
};
+class MyUpdate : public Yaz_Facility_Update {
+public:
+ void update_service (Z_ExtendedServicesRequest *req,
+ Z_IUUpdate *io,
+ Z_ExtendedServicesResponse *res);
+ void update_service0 (Z_ExtendedServicesRequest *req,
+ Z_IU0Update *io,
+ Z_ExtendedServicesResponse *res);
+};
+
+
class MyRetrieval : public Yaz_Facility_Retrieval, Yaz_USMARC {
public:
int sr_init (Z_InitRequest *initRequest,
Z_Records *records);
};
+#if HAVE_YAZ_URSULA_H
+class MyUrsula : public Yaz_Facility_Ursula {
+public:
+ void ursula_service (Z_ExtendedServicesRequest *req,
+ Z_UrsPDU *u,
+ Z_ExtendedServicesResponse *res);
+};
+#endif
+
class MyServer : public Yaz_Z_Server {
public:
~MyServer();
void connectNotify();
private:
- MyRetrieval *m_retrieval;
- MyILL *m_ill;
+ MyRetrieval m_retrieval;
+ MyILL m_ill;
+ MyUpdate m_update;
+#if HAVE_YAZ_URSULA_H
+ MyUrsula m_ursula;
+#endif
int m_no;
};
-int MyILL::ill_init (Z_InitRequest *initRequest,
- Z_InitResponse *initResponse)
+void MyILL::ill_service (Z_ExtendedServicesRequest *req,
+ Z_ItemOrder *io,
+ Z_ExtendedServicesResponse *res)
{
- yaz_log (LOG_LOG, "MyILL::ill_init");
- return 1;
+ yaz_log (LOG_LOG, "MyServer::ill_service");
+}
+
+void MyUpdate::update_service (Z_ExtendedServicesRequest *req,
+ Z_IUUpdate *io,
+ Z_ExtendedServicesResponse *res)
+{
+ yaz_log (LOG_LOG, "MyServer::update_service (v1.1)");
+}
+
+void MyUpdate::update_service0 (Z_ExtendedServicesRequest *req,
+ Z_IU0Update *io,
+ Z_ExtendedServicesResponse *res)
+{
+ yaz_log (LOG_LOG, "MyServer::update_service (v1.0)");
+}
+
+#if HAVE_YAZ_URSULA_H
+void MyUrsula::ursula_service (Z_ExtendedServicesRequest *req,
+ Z_UrsPDU *u,
+ Z_ExtendedServicesResponse *res)
+{
+ yaz_log (LOG_LOG, "MyServer::ursula_service");
+ switch (u->which)
+ {
+ case Z_UrsPDU_request:
+ yaz_log(LOG_LOG, "request");
+ if (u->u.request->libraryNo)
+ yaz_log (LOG_LOG, "libraryNo: %s", u->u.request->libraryNo);
+ break;
+ case Z_UrsPDU_update:
+ yaz_log(LOG_LOG, "request");
+ break;
+ case Z_UrsPDU_reservation:
+ yaz_log(LOG_LOG, "request");
+ break;
+ case Z_UrsPDU_renewal:
+ yaz_log(LOG_LOG, "request");
+ break;
+ default:
+ yaz_log(LOG_LOG, "unknown");
+ break;
+ }
}
+#endif
int MyRetrieval::sr_init (Z_InitRequest *initRequest,
Z_InitResponse *initResponse)
{
yaz_log (LOG_LOG, "MyServer::recv_Z_record");
const char *rec = get_record(position);
- create_databaseRecord (namePlusRecord, 0, VAL_USMARC, rec,
+ create_databaseRecord (odr_encode(), namePlusRecord, 0, VAL_USMARC, rec,
strlen(rec));
}
MyServer::~MyServer()
{
- delete m_ill;
- delete m_retrieval;
}
IYaz_PDU_Observer *MyServer::sessionNotify(
m_no++;
new_server = new MyServer(the_PDU_Observable);
new_server->timeout(900);
- new_server->m_retrieval = new MyRetrieval;
- new_server->m_ill = new MyILL;
- new_server->facility_add(new_server->m_retrieval, "my sr");
- new_server->facility_add(new_server->m_ill, "my ill");
+ new_server->facility_add(&new_server->m_retrieval, "my sr");
+ new_server->facility_add(&new_server->m_ill, "my ill");
+ new_server->facility_add(&new_server->m_update, "my update");
+#if HAVE_YAZ_URSULA_H
+ new_server->facility_add(&new_server->m_ursula, "my ursula");
+#endif
new_server->set_APDU_log(get_APDU_log());
Yaz_Z_Server (the_PDU_Observable)
{
m_no = 0;
- m_ill = 0;
- m_retrieval = 0;
}
void MyServer::timeoutNotify()
{
}
-
void usage(char *prog)
{
fprintf (stderr, "%s: [-a log] [-v level] [-T] @:port\n", prog);