Browse Source

Fixed TLS receive logic for OpenSSL

Paul-Louis Ageneau 4 years ago
parent
commit
d516ed4a32
1 changed files with 9 additions and 6 deletions
  1. 9 6
      src/impl/tlstransport.cpp

+ 9 - 6
src/impl/tlstransport.cpp

@@ -412,10 +412,11 @@ void TlsTransport::runRecvLoop() {
 	try {
 		changeState(State::Connecting);
 
+		int ret;
 		while (true) {
 			if (state() == State::Connecting) {
 				// Initiate or continue the handshake
-				int ret = SSL_do_handshake(mSsl);
+				ret = SSL_do_handshake(mSsl);
 				if (!openssl::check(mSsl, ret, "Handshake failed"))
 					break;
 
@@ -428,13 +429,15 @@ void TlsTransport::runRecvLoop() {
 					changeState(State::Connected);
 					postHandshake();
 				}
-			} else {
-				int ret = SSL_read(mSsl, buffer, bufferSize);
-				if (!openssl::check(mSsl, ret))
-					break;
+			}
 
-				if (ret > 0)
+			if (state() == State::Connected) {
+				// Input
+				while ((ret = SSL_read(mSsl, buffer, bufferSize)) > 0)
 					recv(make_message(buffer, buffer + ret));
+
+				if (!openssl::check(mSsl, ret))
+					break;
 			}
 
 			auto next = mIncomingQueue.pop();