added m_target member to keep track of target information. This is to
[metaproxy-moved-to-github.git] / src / package.hpp
1 /* $Id: package.hpp,v 1.20 2006-08-30 08:44:29 marc Exp $
2    Copyright (c) 2005-2006, Index Data.
3
4    See the LICENSE file for details
5  */
6
7 #ifndef YP2_PACKAGE_HPP
8 #define YP2_PACKAGE_HPP
9
10 #include <iosfwd>
11 #include <stdexcept>
12 #include <yazpp/gdu.h>
13
14 #include "router.hpp"
15 #include "filter.hpp"
16 #include "session.hpp"
17
18 namespace metaproxy_1
19 {
20     class Origin;
21     class Package;
22 }
23
24
25 namespace std 
26 {
27     std::ostream& operator<<(std::ostream& os, metaproxy_1::Origin& o);
28     std::ostream& operator<<(std::ostream& os, metaproxy_1::Package& p);
29 }
30
31 namespace metaproxy_1 {
32     
33     class Origin {
34         friend std::ostream& 
35         std::operator<<(std::ostream& os,  metaproxy_1::Origin& o);
36
37         enum origin_t {
38             API,
39             UNIX,
40             TCPIP
41         } type;
42         std::string address; // UNIX+TCPIP
43         int port;            // TCPIP only
44     public:
45         Origin() : type(API) {};
46
47     };
48
49     class Package {
50     public:
51         Package();
52
53         ~Package();
54         
55         Package(metaproxy_1::Session &session, 
56                 const metaproxy_1::Origin &origin);
57         
58         Package(metaproxy_1::Session &session, 
59                 const metaproxy_1::Origin &origin,
60                 const metaproxy_1::Origin &target);
61
62         Package & copy_filter(const Package &p);
63
64         /// send Package to it's next Filter defined in Router
65         void move();
66
67         /// send Package to other route
68         void move(std::string route);
69         
70         /// access session - left val in assignment
71         metaproxy_1::Session & session();
72         
73         /// get function - right val in assignment
74         int data() const;
75
76         /// set function - left val in assignment
77         int & data();
78         
79         /// set function - can be chained
80         Package & data(const int & data);
81         
82         /// get function - right val in assignment
83         Origin origin() const;
84         
85         /// set function - left val in assignment
86         Origin & origin();
87         
88         /// set function - can be chained
89         Package & origin(const Origin & origin);
90
91         /// get function - right val in assignment
92         Origin target() const;
93         
94         /// set function - left val in assignment
95         Origin & target();
96         
97         /// set function - can be chained
98         Package & target(const Origin & target);
99
100         Package & router(const Router &router);
101
102         yazpp_1::GDU &request();
103
104         yazpp_1::GDU &response();
105                 
106         /// get function - right val in assignment
107         Session session() const;
108         
109     private:
110         Session m_session;
111         Origin m_origin;
112         Origin m_target;
113
114         RoutePos *m_route_pos;
115
116         int m_data;
117         
118         yazpp_1::GDU m_request_gdu;
119         yazpp_1::GDU m_response_gdu;
120     };
121 }
122
123
124
125 #endif
126 /*
127  * Local variables:
128  * c-basic-offset: 4
129  * indent-tabs-mode: nil
130  * c-file-style: "stroustrup"
131  * End:
132  * vim: shiftwidth=4 tabstop=8 expandtab
133  */