19 #ifndef INCLUDE_RCF_FILTER_HPP
20 #define INCLUDE_RCF_FILTER_HPP
25 #include <boost/bind.hpp>
26 #include <boost/function.hpp>
27 #include <boost/shared_ptr.hpp>
29 #include <RCF/ByteBuffer.hpp>
30 #include <RCF/Enums.hpp>
31 #include <RCF/Export.hpp>
36 static const int RcfFilter_Unknown = 0;
37 static const int RcfFilter_Identity = 1;
38 static const int RcfFilter_OpenSsl = 2;
39 static const int RcfFilter_ZlibCompressionStateless = 3;
40 static const int RcfFilter_ZlibCompressionStateful = 4;
41 static const int RcfFilter_SspiNtlm = 5;
42 static const int RcfFilter_SspiKerberos = 6;
43 static const int RcfFilter_SspiNegotiate = 7;
44 static const int RcfFilter_SspiSchannel = 8;
46 static const int RcfFilter_Xor = 101;
50 typedef boost::shared_ptr<Filter> FilterPtr;
52 class RCF_EXPORT Filter
58 virtual void resetState();
64 const ByteBuffer &byteBuffer,
65 std::size_t bytesRequested) = 0;
67 virtual void write(
const std::vector<ByteBuffer> &byteBuffers) = 0;
69 virtual void onReadCompleted(
const ByteBuffer &byteBuffer) = 0;
71 virtual void onWriteCompleted(std::size_t bytesTransferred) = 0;
73 virtual int getFilterId()
const = 0;
75 void setPreFilter(Filter &preFilter);
76 void setPostFilter(Filter &postFilter);
78 virtual std::size_t getFrameSize()
85 Filter &getPreFilter();
86 Filter &getPostFilter();
92 class RCF_EXPORT IdentityFilter :
public Filter
95 void read(
const ByteBuffer &byteBuffer, std::size_t bytesRequested);
96 void write(
const std::vector<ByteBuffer> &byteBuffers);
97 void onReadCompleted(
const ByteBuffer &byteBuffer);
98 void onWriteCompleted(std::size_t bytesTransferred);
100 virtual int getFilterId()
const;
103 typedef boost::shared_ptr<Filter> FilterPtr;
104 typedef std::vector<FilterPtr> VectorFilter;
105 typedef boost::shared_ptr< std::vector<FilterPtr> > VectorFilterPtr;
112 virtual ~FilterFactory()
115 virtual FilterPtr createFilter(RcfServer & server) = 0;
117 virtual int getFilterId() = 0;
120 typedef boost::shared_ptr<FilterFactory> FilterFactoryPtr;
122 RCF_EXPORT
void connectFilters(
const std::vector<FilterPtr> &filters);
124 RCF_EXPORT
bool filterData(
125 const std::vector<ByteBuffer> &unfilteredData,
126 std::vector<ByteBuffer> &filteredData,
127 const std::vector<FilterPtr> &filters);
129 RCF_EXPORT
bool unfilterData(
130 const ByteBuffer &filteredByteBuffer,
131 std::vector<ByteBuffer> &unfilteredByteBuffers,
132 std::size_t unfilteredDataLen,
133 const std::vector<FilterPtr> &filters);
135 RCF_EXPORT
bool unfilterData(
136 const ByteBuffer &filteredByteBuffer,
137 ByteBuffer &unfilteredByteBuffer,
138 std::size_t unfilteredDataLen,
139 const std::vector<FilterPtr> &filters);
143 #endif // ! INCLUDE_RCF_FILTER_HPP