Added test_package1
[metaproxy-moved-to-github.git] / src / package.hpp
1
2 #ifndef PACKAGE_HPP
3 #define PACKAGE_HPP
4
5 #include <stdexcept>
6 #include <yaz++/gdu.h>
7
8 #include "router.hpp"
9 #include "filter.hpp"
10 #include "session.hpp"
11
12 namespace yp2 {
13     
14     class Origin {
15         enum origin_t {
16             API,
17             UNIX,
18             TCPIP
19         } type;
20         std::string address; // UNIX+TCPIP
21         int port;            // TCPIP only
22     public:
23         Origin() : type(API) {};
24     };
25     
26     class Package {
27     public:
28         
29         Package(yp2::Session &session, yp2::Origin &origin) 
30             : m_session(session), m_origin(origin),
31               m_filter(0), m_router(0), m_data(0)  {}
32         
33         /// send Package to it's next Filter defined in Router
34         Package & move() {
35             m_filter = m_router->move(m_filter, this);
36             if (m_filter)
37                 return m_filter->process(*this);
38             else
39                 return *this;
40         }
41         
42         /// access session - left val in assignment
43         yp2::Session & session() {
44             return m_session;
45         }
46         
47         /// get function - right val in assignment
48         unsigned int data() const {
49             return m_data;
50         }
51         
52         /// set function - left val in assignment
53         unsigned int & data() {
54             return m_data;
55         }
56         
57         /// set function - can be chained
58         Package & data(const unsigned int & data){
59             m_data = data;
60             return *this;
61         }
62         
63         
64         /// get function - right val in assignment
65         Origin origin() const {
66             return m_origin;
67         }
68         
69         /// set function - left val in assignment
70         Origin & origin() {
71             return m_origin;
72         }
73         
74         /// set function - can be chained
75         Package & origin(const Origin & origin){
76             m_origin = origin;
77             return *this;
78         }
79         
80         Package & router(const Router &router){
81             m_filter = 0;
82             m_router = &router;
83             return *this;
84         }
85                 
86     private:
87         Session m_session;
88         Origin m_origin;
89         
90         const Filter *m_filter;
91         const Router *m_router;
92         unsigned int m_data;
93         
94         yazpp_1::GDU m_request_gdu;
95         yazpp_1::GDU m_response_gdu;
96     };
97 }
98
99 #endif
100 /*
101  * Local variables:
102  * c-basic-offset: 4
103  * indent-tabs-mode: nil
104  * End:
105  * vim: shiftwidth=4 tabstop=8 expandtab
106  */