From cee1b8a64a80c7a7fbe5cd79e1328ecde5294bb5 Mon Sep 17 00:00:00 2001 From: erlend1 Date: Mon, 30 Nov 2015 16:44:32 +0200 Subject: [PATCH] Configurable addresses from master --- BOB.cpp | 4 ++-- BOB.h | 2 +- ClientContext.cpp | 13 +++++++------ ClientContext.h | 1 + Daemon.cpp | 4 ++-- HTTPProxy.cpp | 4 ++-- HTTPProxy.h | 2 +- HTTPServer.cpp | 4 ++-- HTTPServer.h | 2 +- I2PControl.cpp | 4 ++-- I2PControl.h | 2 +- I2PService.h | 8 ++++---- I2PTunnel.cpp | 5 ++--- I2PTunnel.h | 2 +- README.md | 15 +++++++++++---- SAM.cpp | 6 +++--- SAM.h | 2 +- SOCKS.cpp | 4 ++-- SOCKS.h | 2 +- 19 files changed, 47 insertions(+), 39 deletions(-) diff --git a/BOB.cpp b/BOB.cpp index 15df456e..38777092 100644 --- a/BOB.cpp +++ b/BOB.cpp @@ -524,9 +524,9 @@ namespace client SendReplyError ("malformed"); } - BOBCommandChannel::BOBCommandChannel (int port): + BOBCommandChannel::BOBCommandChannel (const std::string& address, int port): m_IsRunning (false), m_Thread (nullptr), - m_Acceptor (m_Service, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port)) + m_Acceptor (m_Service, boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string(address), port)) { // command -> handler m_CommandHandlers[BOB_COMMAND_ZAP] = &BOBCommandSession::ZapCommandHandler; diff --git a/BOB.h b/BOB.h index ddc64707..b73e390e 100644 --- a/BOB.h +++ b/BOB.h @@ -199,7 +199,7 @@ namespace client { public: - BOBCommandChannel (int port); + BOBCommandChannel (const std::string& address, int port); ~BOBCommandChannel (); void Start (); diff --git a/ClientContext.cpp b/ClientContext.cpp index 84ffb538..557deb38 100644 --- a/ClientContext.cpp +++ b/ClientContext.cpp @@ -41,10 +41,10 @@ namespace client std::string proxyKeys = i2p::util::config::GetArg("-proxykeys", ""); if (proxyKeys.length () > 0) localDestination = LoadLocalDestination (proxyKeys, false); - m_HttpProxy = new i2p::proxy::HTTPProxy(i2p::util::config::GetArg("-httpproxyport", 4446), localDestination); + m_HttpProxy = new i2p::proxy::HTTPProxy(i2p::util::config::GetArg("-httpproxyaddress", "127.0.0.1"), i2p::util::config::GetArg("-httpproxyport", 4446), localDestination); m_HttpProxy->Start(); LogPrint("HTTP Proxy started"); - m_SocksProxy = new i2p::proxy::SOCKSProxy(i2p::util::config::GetArg("-socksproxyport", 4447), localDestination); + m_SocksProxy = new i2p::proxy::SOCKSProxy(i2p::util::config::GetArg("-socksproxyaddress", "127.0.0.1"), i2p::util::config::GetArg("-socksproxyport", 4447), localDestination); m_SocksProxy->Start(); LogPrint("SOCKS Proxy Started"); @@ -57,7 +57,7 @@ namespace client if (ircKeys.length () > 0) localDestination = LoadLocalDestination (ircKeys, false); auto ircPort = i2p::util::config::GetArg("-ircport", 6668); - auto ircTunnel = new I2PClientTunnel (ircDestination, ircPort, localDestination); + auto ircTunnel = new I2PClientTunnel (ircDestination, i2p::util::config::GetArg("-ircaddress", "127.0.0.1"), ircPort, localDestination); ircTunnel->Start (); m_ClientTunnels.insert (std::make_pair(ircPort, std::unique_ptr(ircTunnel))); LogPrint("IRC tunnel started"); @@ -78,7 +78,7 @@ namespace client int samPort = i2p::util::config::GetArg("-samport", 0); if (samPort) { - m_SamBridge = new SAMBridge (samPort); + m_SamBridge = new SAMBridge (i2p::util::config::GetArg("-samaddress", "127.0.0.1"), samPort); m_SamBridge->Start (); LogPrint("SAM bridge started"); } @@ -87,7 +87,7 @@ namespace client int bobPort = i2p::util::config::GetArg("-bobport", 0); if (bobPort) { - m_BOBCommandChannel = new BOBCommandChannel (bobPort); + m_BOBCommandChannel = new BOBCommandChannel (i2p::util::config::GetArg("-bobaddress", "127.0.0.1"), bobPort); m_BOBCommandChannel->Start (); LogPrint("BOB command channel started"); } @@ -268,12 +268,13 @@ namespace client int port = section.second.get (I2P_CLIENT_TUNNEL_PORT); // optional params std::string keys = section.second.get (I2P_CLIENT_TUNNEL_KEYS, ""); + std::string address = section.second.get (I2P_CLIENT_TUNNEL_ADDRESS, "127.0.0.1"); int destinationPort = section.second.get (I2P_CLIENT_TUNNEL_DESTINATION_PORT, 0); std::shared_ptr localDestination = nullptr; if (keys.length () > 0) localDestination = LoadLocalDestination (keys, false); - auto clientTunnel = new I2PClientTunnel (dest, port, localDestination, destinationPort); + auto clientTunnel = new I2PClientTunnel (dest, address, port, localDestination, destinationPort); if (m_ClientTunnels.insert (std::make_pair (port, std::unique_ptr(clientTunnel))).second) clientTunnel->Start (); else diff --git a/ClientContext.h b/ClientContext.h index 842ee918..6684ea0e 100644 --- a/ClientContext.h +++ b/ClientContext.h @@ -21,6 +21,7 @@ namespace client const char I2P_TUNNELS_SECTION_TYPE_SERVER[] = "server"; const char I2P_TUNNELS_SECTION_TYPE_HTTP[] = "http"; const char I2P_CLIENT_TUNNEL_PORT[] = "port"; + const char I2P_CLIENT_TUNNEL_ADDRESS[] = "address"; const char I2P_CLIENT_TUNNEL_DESTINATION[] = "destination"; const char I2P_CLIENT_TUNNEL_KEYS[] = "keys"; const char I2P_CLIENT_TUNNEL_DESTINATION_PORT[] = "destinationport"; diff --git a/Daemon.cpp b/Daemon.cpp index d0f254e2..f698e90b 100644 --- a/Daemon.cpp +++ b/Daemon.cpp @@ -116,7 +116,7 @@ namespace i2p StartLog (""); // write to stdout } - d.httpServer = std::unique_ptr(new i2p::util::HTTPServer(i2p::util::config::GetArg("-httpport", 7070))); + d.httpServer = std::unique_ptr(new i2p::util::HTTPServer(i2p::util::config::GetArg("-httpaddress", "127.0.0.1"), i2p::util::config::GetArg("-httpport", 7070))); d.httpServer->Start(); LogPrint("HTTP Server started"); i2p::data::netdb.Start(); @@ -135,7 +135,7 @@ namespace i2p int i2pcontrolPort = i2p::util::config::GetArg("-i2pcontrolport", 0); if (i2pcontrolPort) { - d.m_I2PControlService = std::unique_ptr(new i2p::client::I2PControlService (i2pcontrolPort)); + d.m_I2PControlService = std::unique_ptr(new i2p::client::I2PControlService (i2p::util::config::GetArg("-i2pcontroladdress", "127.0.0.1"), i2pcontrolPort)); d.m_I2PControlService->Start (); LogPrint("I2PControl started"); } diff --git a/HTTPProxy.cpp b/HTTPProxy.cpp index 8e0ef9ad..12d2c765 100644 --- a/HTTPProxy.cpp +++ b/HTTPProxy.cpp @@ -285,8 +285,8 @@ namespace proxy } } - HTTPProxyServer::HTTPProxyServer(int port, std::shared_ptr localDestination): - TCPIPAcceptor(port, localDestination ? localDestination : i2p::client::context.GetSharedLocalDestination ()) + HTTPProxyServer::HTTPProxyServer(const std::string& address, int port, std::shared_ptr localDestination): + TCPIPAcceptor(address, port, localDestination ? localDestination : i2p::client::context.GetSharedLocalDestination ()) { } diff --git a/HTTPProxy.h b/HTTPProxy.h index 6c0d0a6f..b5ed77b9 100644 --- a/HTTPProxy.h +++ b/HTTPProxy.h @@ -16,7 +16,7 @@ namespace proxy { public: - HTTPProxyServer(int port, std::shared_ptr localDestination = nullptr); + HTTPProxyServer(const std::string& address, int port, std::shared_ptr localDestination = nullptr); ~HTTPProxyServer() {}; protected: diff --git a/HTTPServer.cpp b/HTTPServer.cpp index 1b5d1939..7121d17b 100644 --- a/HTTPServer.cpp +++ b/HTTPServer.cpp @@ -1059,9 +1059,9 @@ namespace util std::bind (&HTTPConnection::HandleWriteReply, shared_from_this (), std::placeholders::_1)); } - HTTPServer::HTTPServer (int port): + HTTPServer::HTTPServer (const std::string& address, int port): m_Thread (nullptr), m_Work (m_Service), - m_Acceptor (m_Service, boost::asio::ip::tcp::endpoint (boost::asio::ip::tcp::v4 (), port)) + m_Acceptor (m_Service, boost::asio::ip::tcp::endpoint (boost::asio::ip::address::from_string(address), port)) { } diff --git a/HTTPServer.h b/HTTPServer.h index 98383644..b4349c5b 100644 --- a/HTTPServer.h +++ b/HTTPServer.h @@ -106,7 +106,7 @@ namespace util { public: - HTTPServer (int port); + HTTPServer (const std::string& address, int port); virtual ~HTTPServer (); void Start (); diff --git a/I2PControl.cpp b/I2PControl.cpp index f050b297..d04b91d1 100644 --- a/I2PControl.cpp +++ b/I2PControl.cpp @@ -24,9 +24,9 @@ namespace i2p { namespace client { - I2PControlService::I2PControlService (int port): + I2PControlService::I2PControlService (const std::string& address, int port): 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_Acceptor (m_Service, boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string(address), port)), m_SSLContext (m_Service, boost::asio::ssl::context::sslv23), m_ShutdownTimer (m_Service) { diff --git a/I2PControl.h b/I2PControl.h index fd6bffbe..565281ac 100644 --- a/I2PControl.h +++ b/I2PControl.h @@ -78,7 +78,7 @@ namespace client typedef boost::asio::ssl::stream ssl_socket; public: - I2PControlService (int port); + I2PControlService (const std::string& address, int port); ~I2PControlService (); void Start (); diff --git a/I2PService.h b/I2PService.h index afac4ea4..9d91b086 100644 --- a/I2PService.h +++ b/I2PService.h @@ -81,13 +81,13 @@ namespace client class TCPIPAcceptor: public I2PService { public: - TCPIPAcceptor (int port, std::shared_ptr localDestination = nullptr) : + TCPIPAcceptor (const std::string& address, int port, std::shared_ptr localDestination = nullptr) : I2PService(localDestination), - m_Acceptor (GetService (), boost::asio::ip::tcp::endpoint (boost::asio::ip::tcp::v4 (), port)), + m_Acceptor (GetService (), boost::asio::ip::tcp::endpoint (boost::asio::ip::address::from_string(address), port)), m_Timer (GetService ()) {} - TCPIPAcceptor (int port, i2p::data::SigningKeyType kt) : + TCPIPAcceptor (const std::string& address, int port, i2p::data::SigningKeyType kt) : I2PService(kt), - m_Acceptor (GetService (), boost::asio::ip::tcp::endpoint (boost::asio::ip::tcp::v4 (), port)), + m_Acceptor (GetService (), boost::asio::ip::tcp::endpoint (boost::asio::ip::address::from_string(address), port)), m_Timer (GetService ()) {} virtual ~TCPIPAcceptor () { TCPIPAcceptor::Stop(); } //If you override this make sure you call it from the children diff --git a/I2PTunnel.cpp b/I2PTunnel.cpp index dd2c31df..09edafc5 100644 --- a/I2PTunnel.cpp +++ b/I2PTunnel.cpp @@ -256,9 +256,8 @@ namespace client Done(shared_from_this()); } - I2PClientTunnel::I2PClientTunnel (const std::string& destination, int port, std::shared_ptr localDestination, int destinationPort): - TCPIPAcceptor (port,localDestination), m_Destination (destination), m_DestinationIdentHash (nullptr), m_DestinationPort (destinationPort) - {} + I2PClientTunnel::I2PClientTunnel (const std::string& destination, const std::string& address, int port, std::shared_ptr localDestination, int destinationPort): + TCPIPAcceptor (address, port, localDestination), m_Destination (destination), m_DestinationIdentHash (nullptr), m_DestinationPort (destinationPort) {} void I2PClientTunnel::Start () { diff --git a/I2PTunnel.h b/I2PTunnel.h index 2071b89d..0ca3d674 100644 --- a/I2PTunnel.h +++ b/I2PTunnel.h @@ -86,7 +86,7 @@ namespace client public: - I2PClientTunnel (const std::string& destination, int port, std::shared_ptr localDestination, int destinationPort = 0); + I2PClientTunnel (const std::string& destination, const std::string& address, int port, std::shared_ptr localDestination, int destinationPort = 0); ~I2PClientTunnel () {} void Start (); diff --git a/README.md b/README.md index d3b2e711..141e2f8c 100644 --- a/README.md +++ b/README.md @@ -72,25 +72,32 @@ Cmdline options * --host= - The external IP (deprecated). * --port= - The port to listen on -* --httpport= - The http port to listen on +* --httpaddress= - The address to listen on (HTTP server) +* --httpport= - The port to listen on (HTTP server) * --log= - Enable or disable logging to file. 1 for yes, 0 for no. * --daemon= - Enable or disable daemon mode. 1 for yes, 0 for no. * --service= - 1 if uses system folders (/var/run/i2pd.pid, /var/log/i2pd.log, /var/lib/i2pd). * --v6= - 1 if supports communication through ipv6, off by default * --floodfill= - 1 if router is floodfill, off by default * --bandwidth= - L if bandwidth is limited to 32Kbs/sec, O if not. Always O if floodfill, otherwise L by default. -* --httpproxyport= - The port to listen on (HTTP Proxy) -* --socksproxyport= - The port to listen on (SOCKS Proxy) +* --httpproxyaddress= - The address to listen on (HTTP Proxy) +* --httpproxyport= - The port to listen on (HTTP Proxy) 4446 by default +* --socksproxyaddress= - The address to listen on (SOCKS Proxy) +* --socksproxyport= - The port to listen on (SOCKS Proxy). 4447 by default * --proxykeys= - optional keys file for proxy's local destination -* --ircport= - The local port of IRC tunnel to listen on. 6668 by default +* --ircaddress= - The address to listen on (IRC tunnel) +* --ircport= - The port listen on (IRC tunnel). 6668 by default * --ircdest= - I2P destination address of IRC server. For example irc.postman.i2p * --irckeys= - optional keys file for tunnel's local destination * --eepkeys= - File name containing destination keys, for example privKeys.dat. The file will be created if it does not already exist (issue #110). * --eephost= - Address incoming trafic forward to. 127.0.0.1 by default * --eepport= - Port incoming trafic forward to. 80 by default +* --samaddress= - The address to listen on (SAM bridge) * --samport= - Port of SAM bridge. Usually 7656. SAM is off if not specified +* --bobaddress= - The address to listen on (BOB command channel) * --bobport= - Port of BOB command channel. Usually 2827. BOB is off if not specified +* --i2pcontroladdress= - The address to listen on (I2P control service) * --i2pcontrolport= - Port of I2P control service. Usually 7650. I2PControl is off if not specified * --tunnelscfg= - Tunnels Config file (default: ~/.i2pd/tunnels.cfg or /var/lib/i2pd/tunnels.cfg) * --conf= - Config file (default: ~/.i2pd/i2p.conf or /var/lib/i2pd/i2p.conf) diff --git a/SAM.cpp b/SAM.cpp index ee8b514a..0c0cb714 100644 --- a/SAM.cpp +++ b/SAM.cpp @@ -686,10 +686,10 @@ namespace client sockets.clear (); } - SAMBridge::SAMBridge (int port): + SAMBridge::SAMBridge (const std::string& address, int port): m_IsRunning (false), m_Thread (nullptr), - m_Acceptor (m_Service, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port)), - m_DatagramEndpoint (boost::asio::ip::udp::v4 (), port-1), m_DatagramSocket (m_Service, m_DatagramEndpoint) + m_Acceptor (m_Service, boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string(address), port)), + m_DatagramEndpoint (boost::asio::ip::address::from_string(address), port-1), m_DatagramSocket (m_Service, m_DatagramEndpoint) { } diff --git a/SAM.h b/SAM.h index 4baa01d4..e82e8b7d 100644 --- a/SAM.h +++ b/SAM.h @@ -146,7 +146,7 @@ namespace client { public: - SAMBridge (int port); + SAMBridge (const std::string& address, int port); ~SAMBridge (); void Start (); diff --git a/SOCKS.cpp b/SOCKS.cpp index 8cf85bbd..d82cd0f4 100644 --- a/SOCKS.cpp +++ b/SOCKS.cpp @@ -560,8 +560,8 @@ namespace proxy } } - SOCKSServer::SOCKSServer(int port, std::shared_ptr localDestination) : - TCPIPAcceptor (port, localDestination ? localDestination : i2p::client::context.GetSharedLocalDestination ()) + SOCKSServer::SOCKSServer(const std::string& address, int port, std::shared_ptr localDestination) : + TCPIPAcceptor (address, port, localDestination ? localDestination : i2p::client::context.GetSharedLocalDestination ()) { } diff --git a/SOCKS.h b/SOCKS.h index 7854ce3a..cc2cfa24 100644 --- a/SOCKS.h +++ b/SOCKS.h @@ -15,7 +15,7 @@ namespace proxy { public: - SOCKSServer(int port, std::shared_ptr localDestination = nullptr); + SOCKSServer(const std::string& address, int port, std::shared_ptr localDestination = nullptr); ~SOCKSServer() {}; protected: