From 21ce9443f0cbb340b1c8138db6775d70a7a1e603 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Blin?= <sebastien.blin@savoirfairelinux.com> Date: Wed, 10 Aug 2022 12:24:52 -0400 Subject: [PATCH] tls_session: place timeout on request, not connection This allow to cancel the request if the connection is too long (ipv6 un-resolvable for example) Change-Id: I24757dd7a9893c36a86eccdc46271d5453205de5 --- src/security/tls_session.cpp | 43 +++++++++++++++++------------------- 1 file changed, 20 insertions(+), 23 deletions(-) diff --git a/src/security/tls_session.cpp b/src/security/tls_session.cpp index 8a75585a2f..e0b5e28a64 100644 --- a/src/security/tls_session.cpp +++ b/src/security/tls_session.cpp @@ -771,29 +771,26 @@ TlsSession::TlsSessionImpl::sendOcspRequest(const std::string& uri, request->set_header_field(restinio::http_field_t::content_type, "application/ocsp-request"); request->set_body(std::move(body)); request->set_connection_type(restinio::http_connection_header_t::close); - request->add_on_state_change_callback( - [this, cb = std::move(cb), timeout](const http::Request::State state, - const http::Response response) { - JAMI_DBG("HTTP OCSP Request state=%i status_code=%i", - (unsigned int) state, - response.status_code); - if (state == http::Request::State::SENDING) { - auto request = response.request.lock(); - request->get_connection()->timeout(timeout, [request](const asio::error_code& ec) { - if (ec and ec != asio::error::operation_aborted) - JAMI_ERR("HTTP OCSP Request timeout with error: %s", ec.message().c_str()); - request->cancel(); - }); - } - if (state != http::Request::State::DONE) - return; - if (cb) - cb(response); - if (auto request = response.request.lock()) { - std::lock_guard<std::mutex> lock(requestsMtx_); - requests_.erase(request); - } - }); + request->timeout(timeout, [this, request](const asio::error_code& ec) { + if (ec and ec != asio::error::operation_aborted) + JAMI_ERR("HTTP OCSP Request timeout with error: %s", ec.message().c_str()); + request->cancel(); + }); + request->add_on_state_change_callback([this, + cb = std::move(cb)](const http::Request::State state, + const http::Response response) { + JAMI_DBG("HTTP OCSP Request state=%i status_code=%i", + (unsigned int) state, + response.status_code); + if (state != http::Request::State::DONE) + return; + if (cb) + cb(response); + if (auto request = response.request.lock()) { + std::lock_guard<std::mutex> lock(requestsMtx_); + requests_.erase(request); + } + }); { std::lock_guard<std::mutex> lock(requestsMtx_); requests_.emplace(request); -- GitLab