X-Git-Url: http://git.indexdata.com/?p=yazpp-moved-to-github.git;a=blobdiff_plain;f=src%2Fyaz-my-server.cpp;h=70e9fb4084f130cbac2a85c6de93c78b9c35d51b;hp=38a3bc780d7f94591f8347cac7ce993ba52d326f;hb=d508100e993ab5c9a415bd1826b939875dcfe91c;hpb=19db153df3124f15689496768049bb73c3011a69 diff --git a/src/yaz-my-server.cpp b/src/yaz-my-server.cpp index 38a3bc7..70e9fb4 100644 --- a/src/yaz-my-server.cpp +++ b/src/yaz-my-server.cpp @@ -2,64 +2,60 @@ * Copyright (c) 1998-2001, Index Data. * See the file LICENSE for details. * - * $Id: yaz-my-server.cpp,v 1.9 2001-11-06 17:08:05 adam Exp $ + * $Id: yaz-my-server.cpp,v 1.21 2007-04-12 15:00:33 adam Exp $ */ +#include #include +#include #include -#include -#include -#include +#include +#include +#include +#include + +using namespace yazpp_1; class MyILL : public Yaz_Facility_ILL { public: void ill_service (Z_ExtendedServicesRequest *req, - Z_ItemOrder *io, - Z_ExtendedServicesResponse *res); + 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); + Z_IUUpdate *io, + Z_ExtendedServicesResponse *res); void update_service0 (Z_ExtendedServicesRequest *req, - Z_IU0Update *io, - Z_ExtendedServicesResponse *res); + Z_IU0Update *io, + Z_ExtendedServicesResponse *res); }; class MyRetrieval : public Yaz_Facility_Retrieval, Yaz_USMARC { public: int sr_init (Z_InitRequest *initRequest, - Z_InitResponse *initResponse); + Z_InitResponse *initResponse); void sr_search (Z_SearchRequest *searchRequest, - Z_SearchResponse *searchResponse); + Z_SearchResponse *searchResponse); void sr_present (Z_PresentRequest *presentRequest, - Z_PresentResponse *presentResponse); + Z_PresentResponse *presentResponse); void sr_record (const char *resultSetName, - int position, - int *format, - Z_RecordComposition *comp, - Z_NamePlusRecord *namePlusRecord, - Z_Records *records); + int position, + int *format, + Z_RecordComposition *comp, + Z_NamePlusRecord *namePlusRecord, + 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 { +class MyServer : public Z_Server { public: ~MyServer(); - MyServer(IYaz_PDU_Observable *the_PDU_Observable); - IYaz_PDU_Observer* sessionNotify(IYaz_PDU_Observable *the_PDU_Observable, - int fd); + MyServer(IPDU_Observable *the_PDU_Observable); + IPDU_Observer* sessionNotify(IPDU_Observable *the_PDU_Observable, + int fd); void failNotify(); void timeoutNotify(); void connectNotify(); @@ -68,115 +64,87 @@ private: MyRetrieval m_retrieval; MyILL m_ill; MyUpdate m_update; -#if HAVE_YAZ_URSULA_H - MyUrsula m_ursula; -#endif int m_no; }; void MyILL::ill_service (Z_ExtendedServicesRequest *req, - Z_ItemOrder *io, - Z_ExtendedServicesResponse *res) + Z_ItemOrder *io, + Z_ExtendedServicesResponse *res) { - yaz_log (LOG_LOG, "MyServer::ill_service"); + yaz_log (YLOG_LOG, "MyServer::ill_service"); } void MyUpdate::update_service (Z_ExtendedServicesRequest *req, - Z_IUUpdate *io, - Z_ExtendedServicesResponse *res) + Z_IUUpdate *io, + Z_ExtendedServicesResponse *res) { - yaz_log (LOG_LOG, "MyServer::update_service (v1.1)"); + yaz_log (YLOG_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) + Z_IU0Update *io, + 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; - } + yaz_log (YLOG_LOG, "MyServer::update_service (v1.0)"); } -#endif int MyRetrieval::sr_init (Z_InitRequest *initRequest, - Z_InitResponse *initResponse) + Z_InitResponse *initResponse) { - yaz_log (LOG_LOG, "MyServer::sr_init"); + yaz_log (YLOG_LOG, "MyServer::sr_init"); return 1; } void MyRetrieval::sr_search (Z_SearchRequest *searchRequest, - Z_SearchResponse *searchResponse) + Z_SearchResponse *searchResponse) { - yaz_log (LOG_LOG, "MyServer::recv_Z_search"); + yaz_log (YLOG_LOG, "MyServer::recv_Z_search"); if (searchRequest->query->which == Z_Query_type_1) { - Z_RPNStructure *s = searchRequest->query->u.type_1->RPNStructure; - if (s->which == Z_RPNStructure_simple && - s->u.simple->which == Z_Operand_APT && - s->u.simple->u.attributesPlusTerm->term->which == Z_Term_general) - { - Odr_oct *term = s->u.simple->u.attributesPlusTerm->term->u.general; - char *str = (char *) odr_malloc (odr_encode(), term->len+1); - if (term->len) - memcpy (str, term->buf, term->len); - str[term->len] = '\0'; - *searchResponse->resultCount = atoi(str); - } + Z_RPNStructure *s = searchRequest->query->u.type_1->RPNStructure; + if (s->which == Z_RPNStructure_simple && + s->u.simple->which == Z_Operand_APT && + s->u.simple->u.attributesPlusTerm->term->which == Z_Term_general) + { + Odr_oct *term = s->u.simple->u.attributesPlusTerm->term->u.general; + char *str = (char *) odr_malloc (odr_encode(), term->len+1); + if (term->len) + memcpy (str, term->buf, term->len); + str[term->len] = '\0'; + *searchResponse->resultCount = atoi(str); + } } } void MyRetrieval::sr_present (Z_PresentRequest *presentRequest, - Z_PresentResponse *presentResponse) + Z_PresentResponse *presentResponse) { - yaz_log (LOG_LOG, "MyServer::recv_Z_present"); + yaz_log (YLOG_LOG, "MyServer::recv_Z_present"); } void MyRetrieval::sr_record (const char *resultSetName, - int position, - int *format, - Z_RecordComposition *comp, - Z_NamePlusRecord *namePlusRecord, - Z_Records *records) + int position, + int *format, + Z_RecordComposition *comp, + Z_NamePlusRecord *namePlusRecord, + Z_Records *records) { - yaz_log (LOG_LOG, "MyServer::recv_Z_record"); + yaz_log (YLOG_LOG, "MyServer::recv_Z_record"); const char *rec = get_record(position); - create_databaseRecord (odr_encode(), namePlusRecord, 0, VAL_USMARC, rec, - strlen(rec)); + if (rec) + create_databaseRecord(odr_encode(), namePlusRecord, 0, + OID_STR_USMARC, rec, strlen(rec)); + else + create_surrogateDiagnostics(odr_encode(), namePlusRecord, 0, + YAZ_BIB1_PRESENT_REQUEST_OUT_OF_RANGE, 0); } MyServer::~MyServer() { } -IYaz_PDU_Observer *MyServer::sessionNotify( - IYaz_PDU_Observable *the_PDU_Observable, int fd) +IPDU_Observer *MyServer::sessionNotify( + IPDU_Observable *the_PDU_Observable, int fd) { MyServer *new_server; m_no++; @@ -185,30 +153,26 @@ IYaz_PDU_Observer *MyServer::sessionNotify( 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()); return new_server; } -MyServer::MyServer(IYaz_PDU_Observable *the_PDU_Observable) : - Yaz_Z_Server (the_PDU_Observable) +MyServer::MyServer(IPDU_Observable *the_PDU_Observable) : + Z_Server (the_PDU_Observable) { m_no = 0; } void MyServer::timeoutNotify() { - yaz_log (LOG_LOG, "connection timed out"); + yaz_log (YLOG_LOG, "connection timed out"); delete this; } void MyServer::failNotify() { - yaz_log (LOG_LOG, "connection closed by client"); + yaz_log (YLOG_LOG, "connection closed by client"); delete this; } @@ -216,7 +180,7 @@ void MyServer::connectNotify() { } -void usage(char *prog) +void usage(const char *prog) { fprintf (stderr, "%s: [-a log] [-v level] [-T] @:port\n", prog); exit (1); @@ -227,56 +191,64 @@ int main(int argc, char **argv) int thread_flag = 0; char *arg; char *prog = *argv; - char *addr = "tcp:@:9999"; + const char *addr = "tcp:@:9999"; char *apdu_log = 0; - Yaz_SocketManager mySocketManager; + SocketManager mySocketManager; - Yaz_PDU_Assoc *my_PDU_Assoc = 0; + PDU_Assoc *my_PDU_Assoc = 0; MyServer *z = 0; int ret; while ((ret = options("a:v:T", argv, argc, &arg)) != -2) { - switch (ret) - { - case 0: - addr = xstrdup(arg); - break; - case 'a': - apdu_log = xstrdup(arg); - break; - case 'v': - yaz_log_init_level (yaz_log_mask_str(arg)); - break; - case 'T': - thread_flag = 1; - break; - default: - usage(prog); - return 1; - } + switch (ret) + { + case 0: + addr = xstrdup(arg); + break; + case 'a': + apdu_log = xstrdup(arg); + break; + case 'v': + yaz_log_init_level (yaz_log_mask_str(arg)); + break; + case 'T': + thread_flag = 1; + break; + default: + usage(prog); + return 1; + } } #if YAZ_POSIX_THREADS if (thread_flag) - my_PDU_Assoc = new Yaz_PDU_AssocThread(&mySocketManager); + my_PDU_Assoc = new PDU_AssocThread(&mySocketManager); else - my_PDU_Assoc = new Yaz_PDU_Assoc(&mySocketManager); + my_PDU_Assoc = new PDU_Assoc(&mySocketManager); #else - my_PDU_Assoc = new Yaz_PDU_Assoc(&mySocketManager); + my_PDU_Assoc = new PDU_Assoc(&mySocketManager); #endif z = new MyServer(my_PDU_Assoc); z->server(addr); if (apdu_log) { - yaz_log (LOG_LOG, "set_APDU_log %s", apdu_log); - z->set_APDU_log(apdu_log); + yaz_log (YLOG_LOG, "set_APDU_log %s", apdu_log); + z->set_APDU_log(apdu_log); } while (mySocketManager.processEvent() > 0) - ; + ; delete z; return 0; } +/* + * Local variables: + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + * vim: shiftwidth=4 tabstop=8 expandtab + */ +