From 5befe1f019e1c3351492c99cc6f59686fbcf257f Mon Sep 17 00:00:00 2001 From: orignal Date: Thu, 24 Mar 2016 20:04:45 -0400 Subject: [PATCH 1/5] select appropritae address --- Transports.cpp | 52 +++++++++++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/Transports.cpp b/Transports.cpp index 2127b646..518d167b 100644 --- a/Transports.cpp +++ b/Transports.cpp @@ -376,20 +376,24 @@ namespace transport auto& peer = it1->second; if (!ecode && peer.router) { - auto address = (*it).endpoint ().address (); - LogPrint (eLogDebug, "Transports: ", (*it).host_name (), " has been resolved to ", address); - if (address.is_v4 () || context.SupportsV6 ()) - { - auto addr = peer.router->GetNTCPAddress (); // TODO: take one we requested - if (addr) + while (it != boost::asio::ip::tcp::resolver::iterator()) + { + auto address = (*it).endpoint ().address (); + LogPrint (eLogDebug, "Transports: ", (*it).host_name (), " has been resolved to ", address); + if (address.is_v4 () || context.SupportsV6 ()) { - auto s = std::make_shared (*m_NTCPServer, peer.router); - m_NTCPServer->Connect (address, addr->port, s); - return; - } + auto addr = peer.router->GetNTCPAddress (); // TODO: take one we requested + if (addr) + { + auto s = std::make_shared (*m_NTCPServer, peer.router); + m_NTCPServer->Connect (address, addr->port, s); + return; + } + break; + } + else + LogPrint (eLogInfo, "Transports: NTCP ", address, " is not supported"); } - else - LogPrint (eLogInfo, "Can't connect to NTCP ", address, " ipv6 is not supported"); } LogPrint (eLogError, "Transports: Unable to resolve NTCP address: ", ecode.message ()); std::unique_lock l(m_PeersMutex); @@ -414,19 +418,23 @@ namespace transport auto& peer = it1->second; if (!ecode && peer.router) { - auto address = (*it).endpoint ().address (); - LogPrint (eLogDebug, "Transports: ", (*it).host_name (), " has been resolved to ", address); - if (address.is_v4 () || context.SupportsV6 ()) - { - auto addr = peer.router->GetSSUAddress (); // TODO: take one we requested - if (addr) + while (it != boost::asio::ip::tcp::resolver::iterator()) + { + auto address = (*it).endpoint ().address (); + LogPrint (eLogDebug, "Transports: ", (*it).host_name (), " has been resolved to ", address); + if (address.is_v4 () || context.SupportsV6 ()) { - m_SSUServer->CreateSession (peer.router, address, addr->port); - return; + auto addr = peer.router->GetSSUAddress (); // TODO: take one we requested + if (addr) + { + m_SSUServer->CreateSession (peer.router, address, addr->port); + return; + } + break; } + else + LogPrint (eLogInfo, "Transports: SSU ", address, " is not supported"); } - else - LogPrint (eLogInfo, "Can't connect to SSU ", address, " ipv6 is not supported"); } LogPrint (eLogError, "Transports: Unable to resolve SSU address: ", ecode.message ()); std::unique_lock l(m_PeersMutex); From 34223b8d4fb2b9e125fddf84293e9866e72b5a3f Mon Sep 17 00:00:00 2001 From: orignal Date: Thu, 24 Mar 2016 20:14:58 -0400 Subject: [PATCH 2/5] select appropritae address --- Transports.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Transports.cpp b/Transports.cpp index 518d167b..275c6f90 100644 --- a/Transports.cpp +++ b/Transports.cpp @@ -393,6 +393,7 @@ namespace transport } else LogPrint (eLogInfo, "Transports: NTCP ", address, " is not supported"); + it++; } } LogPrint (eLogError, "Transports: Unable to resolve NTCP address: ", ecode.message ()); @@ -434,6 +435,7 @@ namespace transport } else LogPrint (eLogInfo, "Transports: SSU ", address, " is not supported"); + it++; } } LogPrint (eLogError, "Transports: Unable to resolve SSU address: ", ecode.message ()); From 6699bd47b58885d9f4ef2215788e967f9bf4fa28 Mon Sep 17 00:00:00 2001 From: 0niichan Date: Fri, 25 Mar 2016 22:48:58 +0700 Subject: [PATCH 3/5] Fixed b64 textarea in the webconsole --- HTTPServer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HTTPServer.cpp b/HTTPServer.cpp index 9ffa0599..67ddf362 100644 --- a/HTTPServer.cpp +++ b/HTTPServer.cpp @@ -534,7 +534,7 @@ namespace util auto dest = i2p::client::context.FindLocalDestination (ident); if (dest) { - s << "Base64:
\r\n
\r\n
\r\n"; s << "LeaseSets: " << dest->GetNumRemoteLeaseSets () << "
\r\n"; auto pool = dest->GetTunnelPool (); From 3afb1922bb5ecc790df4bca6167f8b4a947096b1 Mon Sep 17 00:00:00 2001 From: orignal Date: Fri, 25 Mar 2016 16:04:44 -0400 Subject: [PATCH 4/5] Update family.md --- docs/family.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/family.md b/docs/family.md index 0f307143..8ef76b7a 100644 --- a/docs/family.md +++ b/docs/family.md @@ -8,11 +8,11 @@ New family ----------- You must create family self-signed certificate and key. The only key type supposted is prime256v1. -Use the following list of commands: -openssl ecparam -name prime256v1 -genkey -out .key -openssl req -new -key .key -out .csr -touch v3.ext -openssl x509 -req -days 3650 -in .csr -signkey .key -out .crt -extfile v3.ext +Use the following list of commands: +openssl ecparam -name prime256v1 -genkey -out .key +openssl req -new -key .key -out .csr +touch v3.ext +openssl x509 -req -days 3650 -in .csr -signkey .key -out .crt -extfile v3.ext specify .family.i2p.net for CN. From 56699a9f8974374ef72ccd3a94d478fd702e707e Mon Sep 17 00:00:00 2001 From: xcps Date: Sat, 26 Mar 2016 02:45:37 -0400 Subject: [PATCH 5/5] check if i2p address to call jump service --- HTTPProxy.cpp | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/HTTPProxy.cpp b/HTTPProxy.cpp index 6e835d21..c252614b 100644 --- a/HTTPProxy.cpp +++ b/HTTPProxy.cpp @@ -39,6 +39,7 @@ namespace proxy void HTTPRequestFailed(/*std::string message*/); void RedirectToJumpService(); void ExtractRequest(); + bool IsI2PAddress(); bool ValidateHTTPRequest(); void HandleJumpServices(); bool CreateHTTPRequest(uint8_t *http_buff, std::size_t len); @@ -176,6 +177,16 @@ namespace proxy m_path.erase(addressHelperPos); } + bool HTTPProxyHandler::IsI2PAddress() + { + auto pos = m_address.rfind (".i2p"); + if (pos != std::string::npos && (pos+4) == m_address.length ()) + { + return true; + } + return false; + } + bool HTTPProxyHandler::CreateHTTPRequest(uint8_t *http_buff, std::size_t len) { ExtractRequest(); //TODO: parse earlier @@ -183,10 +194,14 @@ namespace proxy HandleJumpServices(); i2p::data::IdentHash identHash; - if (!i2p::client::context.GetAddressBook ().GetIdentHash (m_address, identHash)){ - RedirectToJumpService(); - return false; + if (IsI2PAddress ()) + { + if (!i2p::client::context.GetAddressBook ().GetIdentHash (m_address, identHash)){ + RedirectToJumpService(); + return false; + } } + m_request = m_method; m_request.push_back(' ');