28322a9efa83ab00ebe6393761c80e407965ff4f
[metaproxy-moved-to-github.git] / src / package.cpp
1 /* $Id: package.cpp,v 1.19 2007-05-09 21:23:09 adam Exp $
2    Copyright (c) 2005-2007, Index Data.
3
4 This file is part of Metaproxy.
5
6 Metaproxy is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 2, or (at your option) any later
9 version.
10
11 Metaproxy is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with Metaproxy; see the file LICENSE.  If not, write to the
18 Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
19 02111-1307, USA.
20  */
21
22 #include "config.hpp"
23 #include "package.hpp"
24
25 #include <iostream>
26
27 namespace mp = metaproxy_1;
28
29 mp::Package::Package() 
30     : m_route_pos(0)
31 {
32 }
33
34 mp::Package::~Package()
35 {
36     delete m_route_pos;
37 }
38
39 mp::Package::Package(mp::Session &session, const mp::Origin &origin) 
40     : m_session(session), m_origin(origin),
41       m_route_pos(0)
42 {
43 }
44
45
46 mp::Package & mp::Package::copy_filter(const Package &p)
47 {
48     delete m_route_pos;
49     m_route_pos = p.m_route_pos->clone();
50     return *this;
51 }
52
53
54 void mp::Package::move()
55 {
56     if (m_route_pos)
57     {
58         const filter::Base *next_filter = m_route_pos->move(0);
59         if (next_filter)
60             next_filter->process(*this);
61     }
62 }
63
64 void mp::Package::move(std::string route)
65 {
66     if (m_route_pos)
67     {
68         const char *r_cstr = route.length() ? route.c_str() : 0;
69         const filter::Base *next_filter = m_route_pos->move(r_cstr);
70         if (next_filter)
71             next_filter->process(*this);
72     }
73 }
74
75
76 mp::Session & mp::Package::session()
77 {
78     return m_session;
79 }
80
81 mp::Origin mp::Package::origin() const 
82 {
83     return m_origin;
84 }
85         
86 mp::Origin & mp::Package::origin()
87 {
88     return m_origin;
89 }
90
91 mp::Package & mp::Package::origin(const Origin & origin)
92 {
93     m_origin = origin;
94     return *this;
95 }
96
97 mp::Package & mp::Package::router(const mp::Router &router)
98 {
99     m_route_pos = router.createpos();
100     return *this;
101 }
102
103 yazpp_1::GDU &mp::Package::request()
104 {
105     return m_request_gdu;
106 }
107
108
109 yazpp_1::GDU &mp::Package::response()
110 {
111     return m_response_gdu;
112 }
113
114 mp::Session mp::Package::session() const
115 {
116     return m_session;
117 }
118
119 std::ostream& std::operator<<(std::ostream& os,  mp::Package& p)
120 {
121     os << p.origin() << " ";
122     os << p.session().id();
123     return os;
124 }
125
126                 
127 /*
128  * Local variables:
129  * c-basic-offset: 4
130  * indent-tabs-mode: nil
131  * c-file-style: "stroustrup"
132  * End:
133  * vim: shiftwidth=4 tabstop=8 expandtab
134  */