Bump year in copyright msg in source
[metaproxy-moved-to-github.git] / src / filter_z3950_client.cpp
index 70f7703..9bcbfc4 100644 (file)
@@ -1,5 +1,5 @@
 /* This file is part of Metaproxy.
-   Copyright (C) 2005-2008 Index Data
+   Copyright (C) 2005-2009 Index Data
 
 Metaproxy 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
@@ -274,7 +274,7 @@ yf::Z3950Client::Assoc *yf::Z3950Client::Rep::get_assoc(Package &package)
                 package.response() = odr.create_initResponse(
                     apdu,
                     YAZ_BIB1_INIT_NEGOTIATION_OPTION_REQUIRED,
-                    "z3950_client: No virtal host given");
+                    "z3950_client: No vhost given");
                 
                 package.session().close();
                 return 0;
@@ -304,17 +304,32 @@ yf::Z3950Client::Assoc *yf::Z3950Client::Rep::get_assoc(Package &package)
 
     while (max_sockets)
     {
+        int no_not_in_use = 0;
         int number = 0;
         it = m_clients.begin();
         for (; it != m_clients.end(); it++)
         {
             yf::Z3950Client::Assoc *as = it->second;
             if (!strcmp(as->get_hostname(), host.c_str()))
+            {
                 number++;
+                if (!as->m_in_use)
+                    no_not_in_use++;
+            }
         }
-        yaz_log(YLOG_LOG, "Found %d connections for %s", number, host.c_str());
+        yaz_log(YLOG_LOG, "Found %d/%d connections for %s", number, max_sockets,
+                host.c_str());
         if (number < max_sockets)
             break;
+        if (no_not_in_use == 0) // all in use..
+        {
+            mp::odr odr;
+            
+            package.response() = odr.create_initResponse(
+                apdu, YAZ_BIB1_TEMPORARY_SYSTEM_ERROR, "max sessions");
+            package.session().close();
+            return 0;
+        }
         boost::xtime xt;
         xtime_get(&xt, boost::TIME_UTC);