mirror of https://github.com/aria2/aria2
parent
33bb7254a5
commit
e7e80e5ec6
|
@ -35,6 +35,7 @@
|
||||||
|
|
||||||
#include "WinTLSSession.h"
|
#include "WinTLSSession.h"
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
#include "LogFactory.h"
|
#include "LogFactory.h"
|
||||||
|
@ -133,7 +134,8 @@ WinTLSSession::WinTLSSession(WinTLSContext* ctx)
|
||||||
cred_(ctx->getCredHandle()),
|
cred_(ctx->getCredHandle()),
|
||||||
writeBuffered_(0),
|
writeBuffered_(0),
|
||||||
state_(st_constructed),
|
state_(st_constructed),
|
||||||
status_(SEC_E_OK)
|
status_(SEC_E_OK),
|
||||||
|
eof_(false)
|
||||||
{
|
{
|
||||||
memset(&handle_, 0, sizeof(handle_));
|
memset(&handle_, 0, sizeof(handle_));
|
||||||
}
|
}
|
||||||
|
@ -442,6 +444,20 @@ ssize_t WinTLSSession::readData(void* data, size_t len)
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(eof_) {
|
||||||
|
if(decBuf_.size()) {
|
||||||
|
A2_LOG_DEBUG("WinTLS: Sending out decrypted buffer after EOF");
|
||||||
|
auto nread = decBuf_.size();
|
||||||
|
assert(nread < len);
|
||||||
|
memcpy(data, decBuf_.data(), nread);
|
||||||
|
decBuf_.clear();
|
||||||
|
return nread;
|
||||||
|
}
|
||||||
|
A2_LOG_DEBUG("WinTLS: EOF was already seen");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (state_ == st_handshake_write || state_ == st_handshake_write_last ||
|
if (state_ == st_handshake_write || state_ == st_handshake_write_last ||
|
||||||
state_ == st_handshake_read) {
|
state_ == st_handshake_read) {
|
||||||
// Renegotiating
|
// Renegotiating
|
||||||
|
@ -469,6 +485,8 @@ ssize_t WinTLSSession::readData(void* data, size_t len)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (read == 0) {
|
if (read == 0) {
|
||||||
|
A2_LOG_DEBUG("WinTLS: EOF sensed");
|
||||||
|
eof_ = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (read < 0) {
|
if (read < 0) {
|
||||||
|
|
|
@ -207,6 +207,9 @@ private:
|
||||||
|
|
||||||
SECURITY_STATUS status_;
|
SECURITY_STATUS status_;
|
||||||
std::unique_ptr<SecPkgContext_StreamSizes> streamSizes_;
|
std::unique_ptr<SecPkgContext_StreamSizes> streamSizes_;
|
||||||
|
|
||||||
|
// true on EOF
|
||||||
|
bool eof_;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace aria2
|
} // namespace aria2
|
||||||
|
|
Loading…
Reference in New Issue