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;
49 typedef boost::shared_ptr<Certificate> CertificatePtr;
51 class Win32Certificate;
52 typedef boost::shared_ptr<Win32Certificate> Win32CertificatePtr;
54 class X509Certificate;
55 typedef boost::shared_ptr<X509Certificate> X509CertificatePtr;
64 virtual CertificateImplementationType _getType();
66 Win32CertificatePtr _downcastToWin32Certificate(CertificatePtr certPtr);
67 X509CertificatePtr _downcastToX509Certificate(CertificatePtr certPtr);
78 typedef boost::shared_ptr<Certificate> CertificatePtr;
82 typedef boost::shared_ptr<Filter> FilterPtr;
84 class RCF_EXPORT Filter
90 virtual void resetState();
96 const ByteBuffer &byteBuffer,
97 std::size_t bytesRequested) = 0;
99 virtual void write(
const std::vector<ByteBuffer> &byteBuffers) = 0;
101 virtual void onReadCompleted(
const ByteBuffer &byteBuffer) = 0;
103 virtual void onWriteCompleted(std::size_t bytesTransferred) = 0;
105 virtual int getFilterId()
const = 0;
107 void setPreFilter(Filter &preFilter);
108 void setPostFilter(Filter &postFilter);
110 virtual std::size_t getFrameSize()
117 Filter &getPreFilter();
118 Filter &getPostFilter();
121 Filter *mpPostFilter;
124 class RCF_EXPORT IdentityFilter :
public Filter
127 void read(
const ByteBuffer &byteBuffer, std::size_t bytesRequested);
128 void write(
const std::vector<ByteBuffer> &byteBuffers);
129 void onReadCompleted(
const ByteBuffer &byteBuffer);
130 void onWriteCompleted(std::size_t bytesTransferred);
132 virtual int getFilterId()
const;
135 typedef boost::shared_ptr<Filter> FilterPtr;
136 typedef std::vector<FilterPtr> VectorFilter;
137 typedef boost::shared_ptr< std::vector<FilterPtr> > VectorFilterPtr;
144 virtual ~FilterFactory()
147 virtual FilterPtr createFilter(RcfServer & server) = 0;
149 virtual int getFilterId() = 0;
152 typedef boost::shared_ptr<FilterFactory> FilterFactoryPtr;
154 RCF_EXPORT
void connectFilters(
const std::vector<FilterPtr> &filters);
156 RCF_EXPORT
bool filterData(
157 const std::vector<ByteBuffer> &unfilteredData,
158 std::vector<ByteBuffer> &filteredData,
159 const std::vector<FilterPtr> &filters);
161 RCF_EXPORT
bool unfilterData(
162 const ByteBuffer &filteredByteBuffer,
163 std::vector<ByteBuffer> &unfilteredByteBuffers,
164 std::size_t unfilteredDataLen,
165 const std::vector<FilterPtr> &filters);
167 RCF_EXPORT
bool unfilterData(
168 const ByteBuffer &filteredByteBuffer,
169 ByteBuffer &unfilteredByteBuffer,
170 std::size_t unfilteredDataLen,
171 const std::vector<FilterPtr> &filters);
175 #endif // ! INCLUDE_RCF_FILTER_HPP