X-Git-Url: http://sru.miketaylor.org.uk/?a=blobdiff_plain;f=src%2Fpackage.cpp;h=f5fa411dd10542ab40aa54e9a514856c39821d7e;hb=f1593e31882800fcfc3dad7d3ec42e709754128d;hp=3f994913dc36e9638def69883863d29bb2e567a2;hpb=63ea8aedbfd7dc56ab28dbc82c38b4458dcecb68;p=metaproxy-moved-to-github.git diff --git a/src/package.cpp b/src/package.cpp index 3f99491..f5fa411 100644 --- a/src/package.cpp +++ b/src/package.cpp @@ -1,105 +1,138 @@ -/* $Id: package.cpp,v 1.2 2006-01-04 11:19:04 adam Exp $ - Copyright (c) 2005, Index Data. +/* This file is part of Metaproxy. + Copyright (C) 2005-2011 Index Data -%LICENSE% - */ +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 +Software Foundation; either version 2, or (at your option) any later +version. + +Metaproxy 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 "config.hpp" +#include +#include +#include + +#include -#include "package.hpp" +namespace mp = metaproxy_1; + +mp::Package::Package() + : m_route_pos(0) +{ +} -yp2::Package::Package() - : m_filter(0), m_router(0), m_data(0) +mp::Package::~Package() { + delete m_route_pos; } -yp2::Package::Package(yp2::Session &session, yp2::Origin &origin) +mp::Package::Package(mp::Session &session, const mp::Origin &origin) : m_session(session), m_origin(origin), - m_filter(0), m_router(0), m_data(0) + m_route_pos(0) { } -yp2::Package & yp2::Package::copy_filter(const Package &p) + +mp::Package & mp::Package::copy_filter(const Package &p) { - m_router = p.m_router; - m_filter = p.m_filter; + delete m_route_pos; + m_route_pos = p.m_route_pos->clone(); return *this; } -void yp2::Package::move() +void mp::Package::move() { - m_filter = m_router->move(m_filter, this); - if (m_filter) - m_filter->process(*this); + if (m_route_pos) + { + const filter::Base *next_filter = m_route_pos->move(0); + if (next_filter) + next_filter->process(*this); + } } -yp2::Session & yp2::Package::session() +void mp::Package::move(std::string route) { - return m_session; + if (m_route_pos) + { + const char *r_cstr = route.length() ? route.c_str() : 0; + const filter::Base *next_filter = m_route_pos->move(r_cstr); + if (next_filter) + next_filter->process(*this); + } } -int yp2::Package::data() const +mp::Session & mp::Package::session() { - return m_data; + return m_session; } -int & yp2::Package::data() +mp::Origin mp::Package::origin() const { - return m_data; + return m_origin; } -yp2::Package & yp2::Package::data(const int & data) +mp::Package & mp::Package::router(const mp::Router &router) { - m_data = data; + m_route_pos = router.createpos(); return *this; } -yp2::Origin yp2::Package::origin() const +yazpp_1::GDU &mp::Package::request() { - return m_origin; + return m_request_gdu; } - -yp2::Origin & yp2::Package::origin() + + +yazpp_1::GDU &mp::Package::response() { - return m_origin; + return m_response_gdu; } -yp2::Package & yp2::Package::origin(const Origin & origin) +mp::Session mp::Package::session() const { - m_origin = origin; - return *this; + return m_session; } -yp2::Package & yp2::Package::router(const yp2::Router &router) +std::ostream& std::operator<<(std::ostream& os, const mp::Package& p) { - m_filter = 0; - m_router = &router; - return *this; + os << p.origin() << " "; + os << p.session().id(); + return os; } -yazpp_1::GDU &yp2::Package::request() +void mp::Package::log(const char *module, int level, const char *fmt, ...) const { - return m_request_gdu; -} + char buf[4096]; + va_list ap; + va_start(ap, fmt); + yaz_vsnprintf(buf, sizeof(buf)-30, fmt, ap); -yazpp_1::GDU &yp2::Package::response() -{ - return m_response_gdu; -} + std::ostringstream os; -yp2::Session yp2::Package::session() const -{ - return m_session; + os << module << " " << *this << " " << buf; + + va_end(ap); + yaz_log(level, "%s", os.str().c_str()); } /* * Local variables: * c-basic-offset: 4 + * c-file-style: "Stroustrup" * indent-tabs-mode: nil - * c-file-style: "stroustrup" * End: * vim: shiftwidth=4 tabstop=8 expandtab */ +