From 25cc118890d9c40910745c81e532407730032a38 Mon Sep 17 00:00:00 2001 From: orignal Date: Thu, 15 Jan 2015 16:42:28 -0500 Subject: [PATCH] I2PControl method --- I2PControl.cpp | 22 +++++++++++++++++++++- I2PControl.h | 16 +++++++++++++++- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/I2PControl.cpp b/I2PControl.cpp index fdf81c30..5e58bb63 100644 --- a/I2PControl.cpp +++ b/I2PControl.cpp @@ -17,12 +17,13 @@ namespace i2p namespace client { I2PControlService::I2PControlService (int port): - m_IsRunning (false), m_Thread (nullptr), + m_Password (I2P_CONTROL_DEFAULT_PASSWORD), m_IsRunning (false), m_Thread (nullptr), m_Acceptor (m_Service, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port)), m_ShutdownTimer (m_Service) { m_MethodHandlers[I2P_CONTROL_METHOD_AUTHENTICATE] = &I2PControlService::AuthenticateHandler; m_MethodHandlers[I2P_CONTROL_METHOD_ECHO] = &I2PControlService::EchoHandler; + m_MethodHandlers[I2P_CONTROL_METHOD_I2PCONTROL] = &I2PControlService::I2PControlHandler; m_MethodHandlers[I2P_CONTROL_METHOD_ROUTER_INFO] = &I2PControlService::RouterInfoHandler; m_MethodHandlers[I2P_CONTROL_METHOD_ROUTER_MANAGER] = &I2PControlService::RouterManagerHandler; m_MethodHandlers[I2P_CONTROL_METHOD_NETWORK_SETTING] = &I2PControlService::NetworkSettingHandler; @@ -195,6 +196,8 @@ namespace client const std::string& api = params.at (I2P_CONTROL_PARAM_API); const std::string& password = params.at (I2P_CONTROL_PARAM_PASSWORD); LogPrint (eLogDebug, "I2PControl Authenticate API=", api, " Password=", password); + if (password != m_Password) + LogPrint (eLogError, "I2PControl Authenticate Invalid password ", password, " expected ", m_Password); results[I2P_CONTROL_PARAM_API] = api; results[I2P_CONTROL_PARAM_TOKEN] = boost::lexical_cast(i2p::util::GetSecondsSinceEpoch ()); } @@ -206,6 +209,23 @@ namespace client results[I2P_CONTROL_PARAM_RESULT] = echo; } + +// I2PControl + + void I2PControlService::I2PControlHandler (const std::map& params, std::map& results) + { + LogPrint (eLogDebug, "I2PControl I2PControl"); + for (auto& it: params) + { + LogPrint (eLogDebug, it.first); + auto it1 = m_I2PControlHandlers.find (it.first); + if (it1 != m_I2PControlHandlers.end ()) + (this->*(it1->second))(it.second); + else + LogPrint (eLogError, "I2PControl NetworkSetting unknown request ", it.first); + } + } + // RouterInfo void I2PControlService::RouterInfoHandler (const std::map& params, std::map& results) diff --git a/I2PControl.h b/I2PControl.h index 142742f5..59aff07b 100644 --- a/I2PControl.h +++ b/I2PControl.h @@ -16,6 +16,8 @@ namespace client const size_t I2P_CONTROL_MAX_REQUEST_SIZE = 1024; typedef std::array I2PControlBuffer; + const char I2P_CONTROL_DEFAULT_PASSWORD[] = "itoopie"; + const char I2P_CONTROL_PROPERTY_ID[] = "id"; const char I2P_CONTROL_PROPERTY_METHOD[] = "method"; const char I2P_CONTROL_PROPERTY_PARAMS[] = "params"; @@ -23,7 +25,8 @@ namespace client // methods const char I2P_CONTROL_METHOD_AUTHENTICATE[] = "Authenticate"; - const char I2P_CONTROL_METHOD_ECHO[] = "Echo"; + const char I2P_CONTROL_METHOD_ECHO[] = "Echo"; + const char I2P_CONTROL_METHOD_I2PCONTROL[] = "I2PControl"; const char I2P_CONTROL_METHOD_ROUTER_INFO[] = "RouterInfo"; const char I2P_CONTROL_METHOD_ROUTER_MANAGER[] = "RouterManager"; const char I2P_CONTROL_METHOD_NETWORK_SETTING[] = "NetworkSetting"; @@ -35,6 +38,11 @@ namespace client const char I2P_CONTROL_PARAM_ECHO[] = "Echo"; const char I2P_CONTROL_PARAM_RESULT[] = "Result"; + // I2PControl + const char I2P_CONTROL_I2PCONTROL_ADDRESS[] = "i2pcontrol.address"; + const char I2P_CONTROL_I2PCONTROL_PASSWORD[] = "i2pcontrol.password"; + const char I2P_CONTROL_I2PCONTROL_PORT[] = "i2pcontrol.port"; + // RouterInfo requests const char I2P_CONTROL_ROUTER_INFO_NETDB_KNOWNPEERS[] = "i2p.router.netdb.knownpeers"; const char I2P_CONTROL_ROUTER_INFO_NETDB_ACTIVEPEERS[] = "i2p.router.netdb.activepeers"; @@ -75,10 +83,14 @@ namespace client void AuthenticateHandler (const std::map& params, std::map& results); void EchoHandler (const std::map& params, std::map& results); + void I2PControlHandler (const std::map& params, std::map& results); void RouterInfoHandler (const std::map& params, std::map& results); void RouterManagerHandler (const std::map& params, std::map& results); void NetworkSettingHandler (const std::map& params, std::map& results); + // I2PControl + typedef void (I2PControlService::*I2PControlRequestHandler)(const std::string& value); + // RouterInfo typedef void (I2PControlService::*RouterInfoRequestHandler)(std::map& results); void NetDbKnownPeersHandler (std::map& results); @@ -95,6 +107,7 @@ namespace client private: + std::string m_Password; bool m_IsRunning; std::thread * m_Thread; @@ -103,6 +116,7 @@ namespace client boost::asio::deadline_timer m_ShutdownTimer; std::map m_MethodHandlers; + std::map m_I2PControlHandlers; std::map m_RouterInfoHandlers; std::map m_RouterManagerHandlers; std::map m_NetworkSettingHandlers;