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