connectionmanager: remove connecton if TLS negotiation fails
If a TLS handshake was failing, the device information was not
correctly removed, causing a connection to be detected and further
communications to fail.
So, while monitoring, some connections were stuck in "Connecting TLS".
Moreover, remove waitForReady because it's unused
Change-Id: I8350d7f8731311ab46db78fb26328edc0dcb31dc
diff --git a/include/tls_session.h b/include/tls_session.h
index d0adb63..4483787 100644
--- a/include/tls_session.h
+++ b/include/tls_session.h
@@ -133,8 +133,6 @@
int maxPayload() const override;
- void waitForReady(const duration& timeout = {});
-
/// Synchronous writing.
/// Return a positive number for number of bytes write, or 0 and \a ec set in case of error.
std::size_t write(const ValueType* data, std::size_t size, std::error_code& ec) override;
diff --git a/src/connectionmanager.cpp b/src/connectionmanager.cpp
index 68f40b1..7c3c8d2 100644
--- a/src/connectionmanager.cpp
+++ b/src/connectionmanager.cpp
@@ -1185,6 +1185,13 @@
vid);
dinfo->executePendingOperations(vid, nullptr);
}
+
+ std::unique_lock<std::mutex> lk(dinfo->mtx_);
+ dinfo->info.erase(vid);
+
+ if (dinfo->empty()) {
+ infos_.removeDeviceInfo(dinfo->deviceId);
+ }
} else {
// The socket is ready, store it
if (isDhtRequest) {
diff --git a/src/peer_connection.cpp b/src/peer_connection.cpp
index 1c8ae3e..3fbd820 100644
--- a/src/peer_connection.cpp
+++ b/src/peer_connection.cpp
@@ -382,15 +382,6 @@
return pimpl_->tls->peerCertificate();
}
-void
-TlsSocketEndpoint::waitForReady(const std::chrono::milliseconds& timeout)
-{
- if (!pimpl_->tls) {
- return;
- }
- pimpl_->tls->waitForReady(timeout);
-}
-
int
TlsSocketEndpoint::waitForData(std::chrono::milliseconds timeout, std::error_code& ec) const
{
diff --git a/src/peer_connection.h b/src/peer_connection.h
index c6f0197..7d91d04 100644
--- a/src/peer_connection.h
+++ b/src/peer_connection.h
@@ -123,8 +123,6 @@
}
int waitForData(std::chrono::milliseconds timeout, std::error_code&) const override;
- void waitForReady(const std::chrono::milliseconds& timeout = {});
-
void setOnStateChange(OnStateChangeCb&& cb);
void setOnReady(OnReadyCb&& cb);
diff --git a/src/security/tls_session.cpp b/src/security/tls_session.cpp
index de0347f..1d7b24d 100644
--- a/src/security/tls_session.cpp
+++ b/src/security/tls_session.cpp
@@ -1737,24 +1737,6 @@
return 0;
}
-void
-TlsSession::waitForReady(const duration& timeout)
-{
- auto ready = [this]() -> bool {
- auto state = pimpl_->state_.load();
- return state == TlsSessionState::ESTABLISHED or state == TlsSessionState::SHUTDOWN;
- };
- std::unique_lock<std::mutex> lk(pimpl_->stateMutex_);
- if (timeout == duration::zero())
- pimpl_->stateCondition_.wait(lk, ready);
- else
- pimpl_->stateCondition_.wait_for(lk, timeout, ready);
-
- if (!ready())
- throw std::logic_error("Invalid state in TlsSession::waitForReady: "
- + std::to_string((int) pimpl_->state_.load()));
-}
-
int
TlsSession::waitForData(std::chrono::milliseconds timeout, std::error_code& ec) const
{