Fix leak in Package::copy_filter
[metaproxy-moved-to-github.git] / src / package.cpp
1 /* $Id: package.cpp,v 1.10 2006-08-01 13:03:41 adam Exp $
2    Copyright (c) 2005-2006, Index Data.
3
4    See the LICENSE file for details
5  */
6
7 #include "config.hpp"
8
9 #include "package.hpp"
10
11 namespace mp = metaproxy_1;
12
13 mp::Package::Package() 
14     : m_route_pos(0), m_data(0)
15 {
16 }
17
18 mp::Package::~Package()
19 {
20     delete m_route_pos;
21 }
22
23 mp::Package::Package(mp::Session &session, const mp::Origin &origin) 
24     : m_session(session), m_origin(origin),
25       m_route_pos(0), m_data(0)
26 {
27 }
28
29 mp::Package & mp::Package::copy_filter(const Package &p)
30 {
31     delete m_route_pos;
32     m_route_pos = p.m_route_pos->clone();
33     return *this;
34 }
35
36
37 void mp::Package::move()
38 {
39     if (m_route_pos)
40     {
41         const filter::Base *next_filter = m_route_pos->move(0);
42         if (next_filter)
43             next_filter->process(*this);
44     }
45 }
46
47 void mp::Package::move(std::string route)
48 {
49     if (m_route_pos)
50     {
51         const char *r_cstr = route.length() ? route.c_str() : 0;
52         const filter::Base *next_filter = m_route_pos->move(r_cstr);
53         if (next_filter)
54             next_filter->process(*this);
55     }
56 }
57
58
59 mp::Session & mp::Package::session()
60 {
61     return m_session;
62 }
63
64
65 int mp::Package::data() const
66 {
67     return m_data;
68 }
69
70 int & mp::Package::data()
71 {
72     return m_data;
73 }
74         
75 mp::Package & mp::Package::data(const int & data)
76 {
77     m_data = data;
78     return *this;
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 /*
120  * Local variables:
121  * c-basic-offset: 4
122  * indent-tabs-mode: nil
123  * c-file-style: "stroustrup"
124  * End:
125  * vim: shiftwidth=4 tabstop=8 expandtab
126  */