Added default constructor for Package class
[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         Package() 
30            :  m_filter(0), m_router(0), m_data(0)  {}
31         
32         Package(yp2::Session &session, yp2::Origin &origin) 
33             : m_session(session), m_origin(origin),
34               m_filter(0), m_router(0), m_data(0)  {}
35
36         Package & copy_filter(const Package &p) {
37             m_router = p.m_router;
38             m_filter = p.m_filter;
39             return *this;
40         }
41
42         /// send Package to it's next Filter defined in Router
43         void move() {
44             m_filter = m_router->move(m_filter, this);
45             if (m_filter)
46                 m_filter->process(*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         /// get function - right val in assignment
102         Session session() const {
103             return m_session;
104         }
105         
106     private:
107         Session m_session;
108         Origin m_origin;
109         
110         const Filter *m_filter;
111         const Router *m_router;
112         unsigned int m_data;
113         
114         yazpp_1::GDU m_request_gdu;
115         yazpp_1::GDU m_response_gdu;
116     };
117 }
118
119 #endif
120 /*
121  * Local variables:
122  * c-basic-offset: 4
123  * indent-tabs-mode: nil
124  * End:
125  * vim: shiftwidth=4 tabstop=8 expandtab
126  */