//****************************************************************************** // RCF - Remote Call Framework // Copyright (c) 2005 - 2007. All rights reserved. // Consult your license for conditions of use. // Developed by Jarl Lindrud. // Contact: jlindrud@hotmail.com . //****************************************************************************** #ifndef INCLUDE_RCF_FILTERSERVICE_HPP #define INCLUDE_RCF_FILTERSERVICE_HPP #include #include #include #include #include namespace RCF { class Session; /// Service enabling RcfServer to supply its transports with filters, e.g. for compression and encryption. class FilterService : public I_Service, public I_FilterFactoryLookupProvider, boost::noncopyable { public: /// Constructor. FilterService(); /// Adds a filter factory to the service. /// \param filterFactoryPtr Filter factory to add. void addFilterFactory(FilterFactoryPtr filterFactoryPtr); /// Adds a filter factory to the service. /// \param filterFactoryPtr Filter factory to add. void addFilterFactory( FilterFactoryPtr filterFactoryPtr, const std::vector &filterIds); /// Remotely accessible (via I_RequestTransportFilters), allows clients to request transport and payload filters, /// for their communication with the server. /// \param filterIds Vector of integers indicating the desired sequence of filters. /// \return true if successful, false otherwise. If true, then subsequent communication between server and client will be filtered as requested. boost::int32_t requestTransportFilters(const std::vector &filterIds); boost::int32_t queryForTransportFilters(const std::vector &filterIds); /// Returns a filter factory for the given filter id. /// \param filterId Filter id. /// \return Filter factory for given filter id (null if filter id is not recognized). FilterFactoryPtr getFilterFactoryPtr(int filterId); private: void setTransportFilters( RcfSession &session, boost::shared_ptr > filters); void onServiceAdded(RcfServer &server); void onServiceRemoved(RcfServer &server); typedef std::map FilterFactoryMap; // TODO: synchronization and documentation FilterFactoryMap mFilterFactoryMap; ReadWriteMutex mFilterFactoryMapMutex; }; typedef boost::shared_ptr FilterServicePtr; } // namespace RCF #endif // ! INCLUDE_RCF_FILTERSERVICE_HPP