added output streaming operators
[metaproxy-moved-to-github.git] / src / package.hpp
1 /* $Id: package.hpp,v 1.19 2006-08-30 08:35:03 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, const 
56                 metaproxy_1::Origin &origin);
57
58         Package & copy_filter(const Package &p);
59
60         /// send Package to it's next Filter defined in Router
61         void move();
62
63         /// send Package to other route
64         void move(std::string route);
65         
66         /// access session - left val in assignment
67         metaproxy_1::Session & session();
68         
69         /// get function - right val in assignment
70         int data() const;
71
72         /// set function - left val in assignment
73         int & data();
74         
75         /// set function - can be chained
76         Package & data(const int & data);
77         
78         /// get function - right val in assignment
79         Origin origin() const;
80         
81         /// set function - left val in assignment
82         Origin & origin();
83         
84         /// set function - can be chained
85         Package & origin(const Origin & origin);
86
87         Package & router(const Router &router);
88
89         yazpp_1::GDU &request();
90
91         yazpp_1::GDU &response();
92                 
93         /// get function - right val in assignment
94         Session session() const;
95         
96     private:
97         Session m_session;
98         Origin m_origin;
99
100         RoutePos *m_route_pos;
101
102         int m_data;
103         
104         yazpp_1::GDU m_request_gdu;
105         yazpp_1::GDU m_response_gdu;
106     };
107 }
108
109
110
111 #endif
112 /*
113  * Local variables:
114  * c-basic-offset: 4
115  * indent-tabs-mode: nil
116  * c-file-style: "stroustrup"
117  * End:
118  * vim: shiftwidth=4 tabstop=8 expandtab
119  */