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