diff --git a/Reseed.cpp b/Reseed.cpp index fbc59472..b02839ec 100644 --- a/Reseed.cpp +++ b/Reseed.cpp @@ -500,17 +500,22 @@ namespace data if (u.port_ == 80) u.port_ = 443; TlsSession session (u.host_, u.port_); - // send request - std::stringstream ss; - ss << "GET " << u.path_ << " HTTP/1.1\r\nHost: " << u.host_ - << "\r\nAccept: */*\r\n" << "User-Agent: Wget/1.11.4\r\n" << "Connection: close\r\n\r\n"; - session.Send ((uint8_t *)ss.str ().c_str (), ss.str ().length ()); - - // read response - std::stringstream rs; - while (session.Receive (rs)) - ; - return i2p::util::http::GetHttpContent (rs); + if (session.IsEstablished ()) + { + // send request + std::stringstream ss; + ss << "GET " << u.path_ << " HTTP/1.1\r\nHost: " << u.host_ + << "\r\nAccept: */*\r\n" << "User-Agent: Wget/1.11.4\r\n" << "Connection: close\r\n\r\n"; + session.Send ((uint8_t *)ss.str ().c_str (), ss.str ().length ()); + + // read response + std::stringstream rs; + while (session.Receive (rs)) + ; + return i2p::util::http::GetHttpContent (rs); + } + else + return ""; } //------------------------------------------------------------- @@ -622,13 +627,11 @@ namespace data TlsSession::TlsSession (const std::string& host, int port): - m_Cipher (nullptr) + m_IsEstablished (false), m_Cipher (nullptr) { m_Site.connect(host, boost::lexical_cast(port)); if (m_Site.good ()) - { Handshake (); - } else LogPrint (eLogError, "Can't connect to ", host, ":", port); } @@ -693,7 +696,9 @@ namespace data LogPrint (eLogError, "Unexpected handshake type ", (int)serverHello[0]); uint8_t sessionIDLen = serverHello[38]; // 6 + 32 char * cipherSuite = serverHello + 39 + sessionIDLen; - if (cipherSuite[1] != 0x3D && cipherSuite[1] != 0x35 && cipherSuite[1] != 0x05) + if (cipherSuite[1] == 0x3D || cipherSuite[1] == 0x35 || cipherSuite[1] == 0x05) + m_IsEstablished = true; + else LogPrint (eLogError, "Unsupported cipher ", (int)cipherSuite[0], ",", (int)cipherSuite[1]); // read Certificate m_Site.read ((char *)&type, 1); diff --git a/Reseed.h b/Reseed.h index d26561dd..3c92d066 100644 --- a/Reseed.h +++ b/Reseed.h @@ -69,6 +69,7 @@ namespace data ~TlsSession (); void Send (const uint8_t * buf, size_t len); bool Receive (std::ostream& rs); + bool IsEstablished () const { return m_IsEstablished; }; private: @@ -82,6 +83,7 @@ namespace data private: + bool m_IsEstablished; boost::asio::ip::tcp::iostream m_Site; CryptoPP::SHA256 m_FinishedHash; uint8_t m_MasterSecret[64]; // actual size is 48, but must be multiple of 32