-/* $Id: filter_backend_test.cpp,v 1.3 2005-10-25 16:01:36 adam Exp $
+/* $Id: filter_backend_test.cpp,v 1.8 2005-10-30 18:51:20 adam Exp $
Copyright (c) 2005, Index Data.
%LICENSE%
#include <boost/thread/mutex.hpp>
+#include "util.hpp"
#include "filter_backend_test.hpp"
#include <yaz/zgdu.h>
namespace yp2 {
namespace filter {
+ class Session_info {
+ int dummy;
+ };
class Backend_test::Rep {
friend class Backend_test;
private:
bool m_support_named_result_sets;
+
+ session_map<Session_info> m_sessions;
};
}
}
-yf::Backend_test::Backend_test() {
- m_p = new Backend_test::Rep;
+yf::Backend_test::Backend_test() : m_p(new Backend_test::Rep) {
m_p->m_support_named_result_sets = false;
}
yf::Backend_test::~Backend_test() {
- delete m_p;
}
void yf::Backend_test::process(Package &package) const
{
Z_APDU *apdu_req = gdu->u.z3950;
Z_APDU *apdu_res = 0;
- ODR odr = odr_createmem(ODR_ENCODE);
- if (apdu_req->which == Z_APDU_initRequest)
+ yp2::odr odr;
+
+ if (apdu_req->which != Z_APDU_initRequest &&
+ !m_p->m_sessions.exist(package.session()))
+ {
+ apdu_res = odr.create_close(Z_Close_protocolError,
+ "no init for filter_backend_test");
+ package.session().close();
+ }
+ else if (apdu_req->which == Z_APDU_initRequest)
{
apdu_res = zget_APDU(odr, Z_APDU_initResponse);
Z_InitRequest *req = apdu_req->u.initRequest;
else
break;
+ Session_info info;
+ m_p->m_sessions.create(info, package.session());
}
else if (apdu_req->which == Z_APDU_searchRequest)
- {
+ {
apdu_res = zget_APDU(odr, Z_APDU_searchResponse);
Z_SearchRequest *req = apdu_req->u.searchRequest;
Z_SearchResponse *resp = apdu_res->u.searchResponse;
-
+
if (!m_p->m_support_named_result_sets &&
strcmp(req->resultSetName, "default"))
{
}
else
{
- apdu_res = zget_APDU(odr, Z_APDU_close);
- *apdu_res->u.close->closeReason = Z_Close_protocolError;
- apdu_res->u.close->diagnosticInformation =
- odr_strdup(odr, "bad APDU in filter_backend_test");
-
+ apdu_res = odr.create_close(Z_Close_protocolError,
+ "bad APDU in filter_backend_test");
package.session().close();
}
if (apdu_res)
package.response() = apdu_res;
- odr_destroy(odr);
}
+ if (package.session().is_closed())
+ m_p->m_sessions.release(package.session());
}