Browse Source

Fixed TlsTransport::TimeoutCallback() for GnuTLS

Paul-Louis Ageneau 2 years ago
parent
commit
b0def28f95
1 changed files with 6 additions and 0 deletions
  1. 6 0
      src/impl/tlstransport.cpp

+ 6 - 0
src/impl/tlstransport.cpp

@@ -266,6 +266,12 @@ ssize_t TlsTransport::ReadCallback(gnutls_transport_ptr_t ptr, void *data, size_
 int TlsTransport::TimeoutCallback(gnutls_transport_ptr_t ptr, unsigned int ms) {
 int TlsTransport::TimeoutCallback(gnutls_transport_ptr_t ptr, unsigned int ms) {
 	TlsTransport *t = static_cast<TlsTransport *>(ptr);
 	TlsTransport *t = static_cast<TlsTransport *>(ptr);
 	try {
 	try {
+		message_ptr &message = t->mIncomingMessage;
+		size_t &position = t->mIncomingMessagePosition;
+
+		if(message && position < message->size())
+			return 1;
+
 		bool isReadable = t->mIncomingQueue.wait(
 		bool isReadable = t->mIncomingQueue.wait(
 		    ms != GNUTLS_INDEFINITE_TIMEOUT ? std::make_optional(milliseconds(ms)) : nullopt);
 		    ms != GNUTLS_INDEFINITE_TIMEOUT ? std::make_optional(milliseconds(ms)) : nullopt);
 		return isReadable ? 1 : 0;
 		return isReadable ? 1 : 0;