00001 #ifndef __ARC_SERVICE_H__ 00002 #define __ARC_SERVICE_H__ 00003 00004 #include <arc/ArcConfig.h> 00005 #include <arc/Logger.h> 00006 #include <arc/message/MCC.h> 00007 #include <arc/loader/Plugin.h> 00008 #include <arc/message/SecHandler.h> 00009 00010 namespace Arc { 00011 00013 00033 class Service: public MCCInterface 00034 { 00035 protected: 00040 std::map<std::string,std::list<ArcSec::SecHandler*> > sechandlers_; 00041 00043 static Logger logger; 00044 00047 bool valid; 00048 00051 bool ProcessSecHandlers(Message& message,const std::string& label = "") const; 00052 00053 public: 00055 Service(Config*, PluginArgument* arg); 00056 00057 virtual ~Service(void) { }; 00058 00061 virtual void AddSecHandler(Config *cfg,ArcSec::SecHandler* sechandler,const std::string& label = ""); 00062 00068 virtual bool RegistrationCollector(XMLNode &doc); 00069 00073 virtual std::string getID() { return ""; }; 00074 00076 operator bool() const { return valid; }; 00078 bool operator!() const { return !valid; }; 00079 }; 00080 00081 #define ServicePluginKind ("HED:SERVICE") 00082 00083 class ServicePluginArgument: public PluginArgument { 00084 private: 00085 Config* config_; 00086 ChainContext* context_; 00087 public: 00088 ServicePluginArgument(Config* config,ChainContext* context):config_(config),context_(context) { }; 00089 virtual ~ServicePluginArgument(void) { }; 00090 operator Config* (void) { return config_; }; 00091 operator ChainContext* (void) { return context_; }; 00092 }; 00093 00094 } // namespace Arc 00095 00096 #endif /* __ARC_SERVICE_H__ */