Happy new year
[yazproxy-moved-to-github.git] / src / t-server.cpp
index f64999f..b54058c 100644 (file)
@@ -1,9 +1,20 @@
-/*
- * Copyright (c) 1998-2005, Index Data.
- * See the file LICENSE for details.
- * 
- * $Id: t-server.cpp,v 1.2 2005-06-25 15:58:33 adam Exp $
- */
+/* This file is part of YAZ proxy
+   Copyright (C) 1998-2009 Index Data
+
+YAZ proxy is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+YAZ proxy is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+*/
 
 #include <stdlib.h>
 #include <pthread.h>
 #include <yaz/diagbib1.h>
 #include <yaz/options.h>
 #include "msg-thread.h"
-#include <yaz++/z-assoc.h>
-#include <yaz++/pdu-assoc.h>
-#include <yaz++/gdu.h>
-#include <yaz++/socket-manager.h>
+#include <yazpp/z-assoc.h>
+#include <yazpp/pdu-assoc.h>
+#include <yazpp/gdu.h>
+#include <yazpp/gduqueue.h>
+#include <yazpp/socket-manager.h>
+
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
 
 using namespace yazpp_1;
 
-class Mutex {
-public:
-    Mutex();
-    ~Mutex();
-    void lock();
-    void unlock();
-private:
-    pthread_mutex_t m_mutex;
-    
-};
-
-Mutex::Mutex()
-{
-    pthread_mutex_init(&m_mutex, 0);
-}
-
-Mutex::~Mutex()
-{
-    pthread_mutex_destroy(&m_mutex);
-}
-void Mutex::lock()
-{
-    pthread_mutex_lock(&m_mutex);
-}
-void Mutex::unlock()
-{
-    pthread_mutex_unlock(&m_mutex);
-}
-
-
 class MyServer;
 
 class Auth_Msg : public IMsg_Thread {
@@ -90,11 +74,18 @@ IMsg_Thread *Auth_Msg::handle()
         {
         case Z_APDU_initRequest:
             apdu = zget_APDU(odr, Z_APDU_initResponse);
+            ODR_MASK_SET(apdu->u.initResponse->options, Z_Options_triggerResourceCtrl);
+            ODR_MASK_SET(apdu->u.initResponse->options, Z_Options_search);
+            ODR_MASK_SET(apdu->u.initResponse->options, Z_Options_present);
             break;
         case Z_APDU_searchRequest:
+#if HAVE_UNISTD_H
             sleep(5);
+#endif
             apdu = zget_APDU(odr, Z_APDU_searchResponse);
             break;
+        case Z_APDU_triggerResourceControlRequest:
+            break;
         default:
             apdu = zget_APDU(odr, Z_APDU_close);
             m_close_flag = 1;
@@ -148,6 +139,7 @@ void Auth_Msg::result()
     }
     if (m_front->m_delete_flag && m_front->m_no_requests == 0)
         delete m_front;
+    delete this;
 }
 
 MyServer::MyServer(IPDU_Observable *the_PDU_Observable,
@@ -216,14 +208,18 @@ int main(int argc, char **argv)
     int ret;
     const char *addr = "tcp:@:9999";
     char *apdu_log = 0;
+    int no_threads = 1;
 
-    while ((ret = options("a:v:T", argv, argc, &arg)) != -2)
+    while ((ret = options("n:a:v:T", argv, argc, &arg)) != -2)
     {
         switch (ret)
         {
         case 0:
             addr = xstrdup(arg);
             break;
+        case 'n':
+            no_threads = atoi(arg);
+            break;
         case 'a':
             apdu_log = xstrdup(arg);
             break;
@@ -245,7 +241,7 @@ int main(int argc, char **argv)
     
     MyServer *z = 0;
 
-    Msg_Thread *my_thread = new Msg_Thread(&mySocketManager);
+    Msg_Thread *my_thread = new Msg_Thread(&mySocketManager, no_threads);
 
 #if YAZ_POSIX_THREADS
     if (thread_flag)