diff --git a/ClientContext.cpp b/ClientContext.cpp index 4f9f3619..aa8e8c95 100644 --- a/ClientContext.cpp +++ b/ClientContext.cpp @@ -44,8 +44,8 @@ namespace client i2p::stream::StreamingDestination * localDestination = nullptr; std::string ircKeys = i2p::util::config::GetArg("-irckeys", ""); if (ircKeys.length () > 0) - localDestination = i2p::client::LoadLocalDestination (ircKeys, false); - m_IrcTunnel = new i2p::stream::I2PClientTunnel (m_SocksProxy->GetService (), ircDestination, + localDestination = i2p::client::context.LoadLocalDestination (ircKeys, false); + m_IrcTunnel = new I2PClientTunnel (m_SocksProxy->GetService (), ircDestination, i2p::util::config::GetArg("-ircport", 6668), localDestination); m_IrcTunnel->Start (); LogPrint("IRC tunnel started"); @@ -53,8 +53,8 @@ namespace client std::string eepKeys = i2p::util::config::GetArg("-eepkeys", ""); if (eepKeys.length () > 0) // eepkeys file is presented { - auto localDestination = i2p::client::LoadLocalDestination (eepKeys, true); - m_ServerTunnel = new i2p::stream::I2PServerTunnel (m_SocksProxy->GetService (), + auto localDestination = i2p::client::context.LoadLocalDestination (eepKeys, true); + m_ServerTunnel = new I2PServerTunnel (m_SocksProxy->GetService (), i2p::util::config::GetArg("-eephost", "127.0.0.1"), i2p::util::config::GetArg("-eepport", 80), localDestination); m_ServerTunnel->Start (); @@ -63,7 +63,7 @@ namespace client int samPort = i2p::util::config::GetArg("-samport", 0); if (samPort) { - m_SamBridge = new i2p::stream::SAMBridge (samPort); + m_SamBridge = new SAMBridge (samPort); m_SamBridge->Start (); LogPrint("SAM bridge started"); } @@ -195,35 +195,5 @@ namespace client return it->second; return nullptr; } - - i2p::stream::StreamingDestination * GetSharedLocalDestination () - { - return context.GetSharedLocalDestination (); - } - - i2p::stream::StreamingDestination * CreateNewLocalDestination (bool isPublic, i2p::data::SigningKeyType sigType) - { - return context.CreateNewLocalDestination (isPublic, sigType); - } - - i2p::stream::StreamingDestination * CreateNewLocalDestination (const i2p::data::PrivateKeys& keys, bool isPublic) - { - return context.CreateNewLocalDestination (keys, isPublic); - } - - void DeleteLocalDestination (i2p::stream::StreamingDestination * destination) - { - context.DeleteLocalDestination (destination); - } - - i2p::stream::StreamingDestination * FindLocalDestination (const i2p::data::IdentHash& destination) - { - return context.FindLocalDestination (destination); - } - - i2p::stream::StreamingDestination * LoadLocalDestination (const std::string& filename, bool isPublic) - { - return context.LoadLocalDestination (filename, isPublic); - } } } diff --git a/ClientContext.h b/ClientContext.h index 78f188ee..8fbef267 100644 --- a/ClientContext.h +++ b/ClientContext.h @@ -23,8 +23,8 @@ namespace client void Stop (); i2p::stream::StreamingDestination * GetSharedLocalDestination () const { return m_SharedLocalDestination; }; - i2p::stream::StreamingDestination * CreateNewLocalDestination (bool isPublic, i2p::data::SigningKeyType sigType); - i2p::stream::StreamingDestination * CreateNewLocalDestination (const i2p::data::PrivateKeys& keys, bool isPublic); + i2p::stream::StreamingDestination * CreateNewLocalDestination (bool isPublic = true, i2p::data::SigningKeyType sigType = i2p::data::SIGNING_KEY_TYPE_DSA_SHA1); // transient + i2p::stream::StreamingDestination * CreateNewLocalDestination (const i2p::data::PrivateKeys& keys, bool isPublic = true); void DeleteLocalDestination (i2p::stream::StreamingDestination * destination); i2p::stream::StreamingDestination * FindLocalDestination (const i2p::data::IdentHash& destination) const; i2p::stream::StreamingDestination * LoadLocalDestination (const std::string& filename, bool isPublic); @@ -41,9 +41,9 @@ namespace client i2p::proxy::HTTPProxy * m_HttpProxy; i2p::proxy::SOCKSProxy * m_SocksProxy; - i2p::stream::I2PClientTunnel * m_IrcTunnel; - i2p::stream::I2PServerTunnel * m_ServerTunnel; - i2p::stream::SAMBridge * m_SamBridge; + I2PClientTunnel * m_IrcTunnel; + I2PServerTunnel * m_ServerTunnel; + SAMBridge * m_SamBridge; public: // for HTTP @@ -51,13 +51,6 @@ namespace client }; extern ClientContext context; - - i2p::stream::StreamingDestination * GetSharedLocalDestination (); - i2p::stream::StreamingDestination * CreateNewLocalDestination (bool isPublic = true, i2p::data::SigningKeyType sigType = i2p::data::SIGNING_KEY_TYPE_DSA_SHA1); // transient - i2p::stream::StreamingDestination * CreateNewLocalDestination (const i2p::data::PrivateKeys& keys, bool isPublic = true); - void DeleteLocalDestination (i2p::stream::StreamingDestination * destination); - i2p::stream::StreamingDestination * FindLocalDestination (const i2p::data::IdentHash& destination); - i2p::stream::StreamingDestination * LoadLocalDestination (const std::string& filename, bool isPublic); } } diff --git a/HTTPServer.cpp b/HTTPServer.cpp index d20d195a..31b13e63 100644 --- a/HTTPServer.cpp +++ b/HTTPServer.cpp @@ -517,7 +517,7 @@ namespace util if (m_Stream) { m_Stream->Close (); - i2p::client::GetSharedLocalDestination ()->DeleteStream (m_Stream); + i2p::client::context.GetSharedLocalDestination ()->DeleteStream (m_Stream); m_Stream = nullptr; } m_Socket->close (); @@ -793,7 +793,7 @@ namespace util { i2p::data::IdentHash ident; i2p::data::Base32ToByteStream (b32.c_str (), b32.length (), ident, 32); - auto dest = i2p::client::FindLocalDestination (ident); + auto dest = i2p::client::context.FindLocalDestination (ident); if (dest) { s << "LeaseSets: " << dest->GetNumRemoteLeaseSets () << "
"; @@ -859,9 +859,9 @@ namespace util auto leaseSet = i2p::client::context.GetSharedLocalDestination ()->FindLeaseSet (destination); if (!leaseSet || !leaseSet->HasNonExpiredLeases ()) { - i2p::data::netdb.RequestDestination (destination, true, i2p::client::GetSharedLocalDestination ()->GetTunnelPool ()); + i2p::data::netdb.RequestDestination (destination, true, i2p::client::context.GetSharedLocalDestination ()->GetTunnelPool ()); std::this_thread::sleep_for (std::chrono::seconds(10)); // wait for 10 seconds - leaseSet = i2p::client::GetSharedLocalDestination ()->FindLeaseSet (destination); + leaseSet = i2p::client::context.GetSharedLocalDestination ()->FindLeaseSet (destination); if (!leaseSet || !leaseSet->HasNonExpiredLeases ()) // still no LeaseSet { SendReply (leaseSet ? "" + itoopieImage + "
Leases expired" : "" + itoopieImage + "LeaseSet not found", 504); @@ -869,7 +869,7 @@ namespace util } } if (!m_Stream) - m_Stream = i2p::client::GetSharedLocalDestination ()->CreateNewOutgoingStream (*leaseSet); + m_Stream = i2p::client::context.GetSharedLocalDestination ()->CreateNewOutgoingStream (*leaseSet); if (m_Stream) { m_Stream->Send ((uint8_t *)buf, len); diff --git a/I2PTunnel.cpp b/I2PTunnel.cpp index c728b61b..3c8b9234 100644 --- a/I2PTunnel.cpp +++ b/I2PTunnel.cpp @@ -8,7 +8,7 @@ namespace i2p { -namespace stream +namespace client { I2PTunnelConnection::I2PTunnelConnection (I2PTunnel * owner, boost::asio::ip::tcp::socket * socket, const i2p::data::LeaseSet * leaseSet): @@ -20,7 +20,7 @@ namespace stream Receive (); } - I2PTunnelConnection::I2PTunnelConnection (I2PTunnel * owner, Stream * stream, + I2PTunnelConnection::I2PTunnelConnection (I2PTunnel * owner, i2p::stream::Stream * stream, boost::asio::ip::tcp::socket * socket, const boost::asio::ip::tcp::endpoint& target): m_Socket (socket), m_Stream (stream), m_Owner (owner) { @@ -145,9 +145,9 @@ namespace stream } I2PClientTunnel::I2PClientTunnel (boost::asio::io_service& service, const std::string& destination, - int port, StreamingDestination * localDestination): + int port, i2p::stream::StreamingDestination * localDestination): I2PTunnel (service, localDestination ? localDestination : - i2p::client::CreateNewLocalDestination (false, i2p::data::SIGNING_KEY_TYPE_ECDSA_SHA256_P256)), + i2p::client::context.CreateNewLocalDestination (false, i2p::data::SIGNING_KEY_TYPE_ECDSA_SHA256_P256)), m_Acceptor (service, boost::asio::ip::tcp::endpoint (boost::asio::ip::tcp::v4(), port)), m_Timer (service), m_Destination (destination), m_DestinationIdentHash (nullptr), m_RemoteLeaseSet (nullptr) @@ -251,7 +251,7 @@ namespace stream } I2PServerTunnel::I2PServerTunnel (boost::asio::io_service& service, const std::string& address, int port, - StreamingDestination * localDestination): I2PTunnel (service, localDestination), + i2p::stream::StreamingDestination * localDestination): I2PTunnel (service, localDestination), m_Endpoint (boost::asio::ip::address::from_string (address), port) { } diff --git a/I2PTunnel.h b/I2PTunnel.h index ead14a9f..47d7e212 100644 --- a/I2PTunnel.h +++ b/I2PTunnel.h @@ -10,7 +10,7 @@ namespace i2p { -namespace stream +namespace client { const size_t I2P_TUNNEL_CONNECTION_BUFFER_SIZE = 8192; const int I2P_TUNNEL_CONNECTION_MAX_IDLE = 3600; // in seconds @@ -23,7 +23,7 @@ namespace stream I2PTunnelConnection (I2PTunnel * owner, boost::asio::ip::tcp::socket * socket, const i2p::data::LeaseSet * leaseSet); - I2PTunnelConnection (I2PTunnel * owner, Stream * stream, boost::asio::ip::tcp::socket * socket, + I2PTunnelConnection (I2PTunnel * owner, i2p::stream::Stream * stream, boost::asio::ip::tcp::socket * socket, const boost::asio::ip::tcp::endpoint& target); ~I2PTunnelConnection (); @@ -43,7 +43,7 @@ namespace stream uint8_t m_Buffer[I2P_TUNNEL_CONNECTION_BUFFER_SIZE], m_StreamBuffer[I2P_TUNNEL_CONNECTION_BUFFER_SIZE]; boost::asio::ip::tcp::socket * m_Socket; - Stream * m_Stream; + i2p::stream::Stream * m_Stream; I2PTunnel * m_Owner; }; @@ -51,22 +51,22 @@ namespace stream { public: - I2PTunnel (boost::asio::io_service& service, StreamingDestination * localDestination): + I2PTunnel (boost::asio::io_service& service, i2p::stream::StreamingDestination * localDestination): m_Service (service), m_LocalDestination (localDestination) {}; virtual ~I2PTunnel () { ClearConnections (); }; void AddConnection (I2PTunnelConnection * conn); void RemoveConnection (I2PTunnelConnection * conn); void ClearConnections (); - StreamingDestination * GetLocalDestination () { return m_LocalDestination; }; - void SetLocalDestination (StreamingDestination * dest) { m_LocalDestination = dest; }; + i2p::stream::StreamingDestination * GetLocalDestination () { return m_LocalDestination; }; + void SetLocalDestination (i2p::stream::StreamingDestination * dest) { m_LocalDestination = dest; }; boost::asio::io_service& GetService () { return m_Service; }; private: boost::asio::io_service& m_Service; - StreamingDestination * m_LocalDestination; + i2p::stream::StreamingDestination * m_LocalDestination; std::set m_Connections; }; @@ -75,7 +75,7 @@ namespace stream public: I2PClientTunnel (boost::asio::io_service& service, const std::string& destination, int port, - StreamingDestination * localDestination = nullptr); + i2p::stream::StreamingDestination * localDestination = nullptr); ~I2PClientTunnel (); void Start (); @@ -102,7 +102,7 @@ namespace stream public: I2PServerTunnel (boost::asio::io_service& service, const std::string& address, int port, - StreamingDestination * localDestination); + i2p::stream::StreamingDestination * localDestination); void Start (); void Stop (); @@ -110,7 +110,7 @@ namespace stream private: void Accept (); - void HandleAccept (Stream * stream); + void HandleAccept (i2p::stream::Stream * stream); private: diff --git a/SAM.cpp b/SAM.cpp index 216cbcb6..7bc17c2d 100644 --- a/SAM.cpp +++ b/SAM.cpp @@ -11,7 +11,7 @@ namespace i2p { -namespace stream +namespace client { SAMSocket::SAMSocket (SAMBridge& owner): m_Owner (owner), m_Socket (m_Owner.GetService ()), m_Timer (m_Owner.GetService ()), @@ -25,7 +25,8 @@ namespace stream if (m_Stream) { m_Stream->Close (); - m_Session->localDestination->DeleteStream (m_Stream); + if (m_Session && m_Session->localDestination) + m_Session->localDestination->DeleteStream (m_Stream); } } @@ -34,7 +35,8 @@ namespace stream if (m_Stream) { m_Stream->Close (); - m_Session->localDestination->DeleteStream (m_Stream); + if (m_Session && m_Session->localDestination) + m_Session->localDestination->DeleteStream (m_Stream); m_Stream = nullptr; } switch (m_SocketType) @@ -332,7 +334,7 @@ namespace stream void SAMSocket::ProcessDestGenerate () { LogPrint ("SAM dest generate"); - auto localDestination = i2p::client::CreateNewLocalDestination (); + auto localDestination = i2p::client::context.CreateNewLocalDestination (); if (localDestination) { uint8_t buf[1024]; @@ -566,7 +568,7 @@ namespace stream SAMSession * SAMBridge::CreateSession (const std::string& id, const std::string& destination) { - StreamingDestination * localDestination = nullptr; + i2p::stream::StreamingDestination * localDestination = nullptr; if (destination != "") { uint8_t * buf = new uint8_t[destination.length ()]; @@ -574,10 +576,10 @@ namespace stream i2p::data::PrivateKeys keys; keys.FromBuffer (buf, l); delete[] buf; - localDestination = i2p::client::CreateNewLocalDestination (keys); + localDestination = i2p::client::context.CreateNewLocalDestination (keys); } else // transient - localDestination = i2p::client::CreateNewLocalDestination (); + localDestination = i2p::client::context.CreateNewLocalDestination (); if (localDestination) { SAMSession session; diff --git a/SAM.h b/SAM.h index 833d3f90..cd1e8209 100644 --- a/SAM.h +++ b/SAM.h @@ -14,7 +14,7 @@ namespace i2p { -namespace stream +namespace client { const size_t SAM_SOCKET_BUFFER_SIZE = 4096; const int SAM_SOCKET_CONNECTION_MAX_IDLE = 3600; // in seconds @@ -106,13 +106,13 @@ namespace stream SAMSocketType m_SocketType; std::string m_ID; // nickname bool m_IsSilent; - Stream * m_Stream; + i2p::stream::Stream * m_Stream; SAMSession * m_Session; }; struct SAMSession { - StreamingDestination * localDestination; + i2p::stream::StreamingDestination * localDestination; std::list sockets; }; diff --git a/SOCKS.cpp b/SOCKS.cpp index 02115c88..83f8a5d0 100644 --- a/SOCKS.cpp +++ b/SOCKS.cpp @@ -160,7 +160,7 @@ namespace proxy LogPrint("--- sock4a find lease set"); m_ls = i2p::data::netdb.FindLeaseSet(m_dest); if (!m_ls || m_ls->HasNonExpiredLeases()) { - i2p::data::netdb.RequestDestination (m_dest, true, i2p::client::GetSharedLocalDestination ()->GetTunnelPool ()); + i2p::data::netdb.RequestDestination (m_dest, true, i2p::client::context.GetSharedLocalDestination ()->GetTunnelPool ()); m_ls_timer.expires_from_now(boost::posix_time::seconds(socks_leaseset_timeout)); m_ls_timer.async_wait(boost::bind(&SOCKS4AHandler::LeaseSetTimeout, this, boost::asio::placeholders::error)); } else { @@ -224,7 +224,7 @@ namespace proxy void SOCKS4AHandler::SentConnectionSuccess(const boost::system::error_code & ecode) { LogPrint("--- socks4a making connection"); - m_stream = i2p::client::GetSharedLocalDestination ()->CreateNewOutgoingStream(*m_ls); + m_stream = i2p::client::context.GetSharedLocalDestination ()->CreateNewOutgoingStream(*m_ls); m_state = OKAY; LogPrint("--- socks4a state is ", m_state); AsyncSockRead();