Fix for bug #948. Other problem is that frontend session was terminated
[metaproxy-moved-to-github.git] / src / filter_multi.cpp
index 98fb1ef..ff69a5b 100644 (file)
@@ -1,5 +1,5 @@
-/* $Id: filter_multi.cpp,v 1.22 2006-07-06 13:55:42 adam Exp $
-   Copyright (c) 2005-2006, Index Data.
+/* $Id: filter_multi.cpp,v 1.26 2007-03-07 22:50:12 adam Exp $
+   Copyright (c) 2005-2007, Index Data.
 
    See the LICENSE file for details
  */
@@ -336,7 +336,7 @@ void yf::Multi::Frontend::init(mp::Package &package, Z_GDU *gdu)
 
     std::list<std::string> targets;
 
-    mp::util::get_vhost_otherinfo(&req->otherInfo, false, targets);
+    mp::util::get_vhost_otherinfo(req->otherInfo, targets);
 
     if (targets.size() < 1)
     {
@@ -718,12 +718,19 @@ void yf::Multi::Frontend::present(mp::Package &package, Z_APDU *apdu_req)
             Z_GDU *gdu = p->response().get();
             Z_APDU *b_apdu = gdu->u.z3950;
             Z_PresentResponse *b_resp = b_apdu->u.presentResponse;
-            
-            nprl->records[i] =  b_resp->records->
-                u.databaseOrSurDiagnostics->records[jit->m_inside_pos];
+
+            nprl->records[i] = (Z_NamePlusRecord*)
+                odr_malloc(odr, sizeof(Z_NamePlusRecord));
+            int inside_pos = jit->m_inside_pos;
+            if (inside_pos >= b_resp->records->
+                u.databaseOrSurDiagnostics->num_records)
+                break;
+           *nprl->records[i] = *b_resp->records->
+                u.databaseOrSurDiagnostics->records[inside_pos];
             nprl->records[i]->databaseName =
                     odr_strdup(odr, jit->m_backend->m_vhost.c_str());
         }
+        nprl->num_records = i; // usually same as jobs.size();
         *f_resp->nextResultSetPosition = start + i;
         *f_resp->numberOfRecordsReturned = i;
     }