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