00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __PION_CONFIGSERVICE_HEADER__
00021 #define __PION_CONFIGSERVICE_HEADER__
00022
00023 #include <pion/PionConfig.hpp>
00024 #include "PlatformService.hpp"
00025
00026
00027 namespace pion {
00028 namespace plugins {
00029
00030
00034 class ConfigService
00035 : public pion::server::PlatformService
00036 {
00037 public:
00038
00040 class MissingUIDirectoryException : public PionException {
00041 public:
00042 MissingUIDirectoryException()
00043 : PionException("The ConfigService configuration is missing a UIDirectory parameter") {}
00044 };
00045
00046
00048 ConfigService(void) : PlatformService("pion.ConfigService"), m_config_logger(PION_GET_LOGGER("config")) {}
00049
00051 virtual ~ConfigService() {}
00052
00060 virtual void setConfig(const pion::platform::Vocabulary& v,
00061 const xmlNodePtr config_ptr);
00062
00069 virtual void operator()(pion::net::HTTPRequestPtr& request,
00070 pion::net::TCPConnectionPtr& tcp_conn);
00071
00072 protected:
00073
00074
00075 virtual void handleBadRequest(pion::net::HTTPRequestPtr& request, pion::net::TCPConnectionPtr& tcp_conn, const std::string& error_msg);
00076
00077
00078 virtual void handleForbiddenRequest(pion::net::HTTPRequestPtr& request, pion::net::TCPConnectionPtr& tcp_conn, const std::string& error_msg);
00079
00080
00081 virtual void handleNotFoundRequest(pion::net::HTTPRequestPtr& request, pion::net::TCPConnectionPtr& tcp_conn);
00082
00083
00084 virtual void handleMethodNotAllowed(pion::net::HTTPRequestPtr& request, pion::net::TCPConnectionPtr& tcp_conn, const std::string& allowed_methods);
00085
00086
00087 void logRequestIfPotentialConfigChange(pion::net::HTTPRequestPtr& request, unsigned int status);
00088
00089 private:
00090
00092 PionLogger m_config_logger;
00093
00095 static const std::string UI_DIRECTORY_ELEMENT_NAME;
00096
00098 std::string m_ui_directory;
00099 };
00100
00101
00102 }
00103 }
00104
00105 #endif