void AsyncSSLSocket::setReadCB(ReadCallback *callback) {
#ifdef SSL_MODE_MOVE_BUFFER_OWNERSHIP
// turn on the buffer movable in openssl
- if (ssl_ != nullptr && !isBufferMovable_ &&
+ if (bufferMovableEnabled_ && ssl_ != nullptr && !isBufferMovable_ &&
callback != nullptr && callback->isBufferMovable()) {
SSL_set_mode(ssl_, SSL_get_mode(ssl_) | SSL_MODE_MOVE_BUFFER_OWNERSHIP);
isBufferMovable_ = true;
AsyncSocket::setReadCB(callback);
}
+void AsyncSSLSocket::setBufferMovableEnabled(bool enabled) {
+ bufferMovableEnabled_ = enabled;
+}
+
void AsyncSSLSocket::prepareReadBuffer(void** buf, size_t* buflen) noexcept {
CHECK(readCallback_);
if (isBufferMovable_) {
void setReadCB(ReadCallback* callback) override;
+ /**
+ * Tries to enable the buffer movable experimental feature in openssl.
+ * This is not guaranteed to succeed in case openssl does not have
+ * the experimental feature built in.
+ */
+ void setBufferMovableEnabled(bool enabled);
+
/**
* Returns the peer certificate, or nullptr if no peer certificate received.
*/
bool parseClientHello_{false};
bool cacheAddrOnFailure_{false};
+ bool bufferMovableEnabled_{false};
std::unique_ptr<ssl::ClientHelloInfo> clientHelloInfo_;
// Time taken to complete the ssl handshake.