diff options
author | Hannes Rantzsch <[email protected]> | 2019-02-20 11:09:08 +0100 |
---|---|---|
committer | Hannes Rantzsch <[email protected]> | 2019-04-16 10:47:49 +0200 |
commit | 235471bd84f902db5c44ca4f29388287f0cbb189 (patch) | |
tree | e5c3f56961c5f1a511f3766c135857cb8c20aed8 /src/lib/tls | |
parent | 9136b994ca305c47950ea465955c044137b0f4a3 (diff) |
cleanup async ops
Diffstat (limited to 'src/lib/tls')
-rw-r--r-- | src/lib/tls/asio/asio_async_read_op.h | 10 | ||||
-rw-r--r-- | src/lib/tls/asio/asio_async_write_op.h | 4 | ||||
-rw-r--r-- | src/lib/tls/asio/asio_stream_core.h | 2 |
3 files changed, 7 insertions, 9 deletions
diff --git a/src/lib/tls/asio/asio_async_read_op.h b/src/lib/tls/asio/asio_async_read_op.h index 9535b805a..10add2a7c 100644 --- a/src/lib/tls/asio/asio_async_read_op.h +++ b/src/lib/tls/asio/asio_async_read_op.h @@ -34,12 +34,11 @@ struct AsyncReadOperation ~AsyncReadOperation() = default; AsyncReadOperation(AsyncReadOperation const&) = delete; - void operator()(boost::system::error_code ec, - std::size_t bytes_transferred = ~std::size_t(0)) + void operator()(boost::system::error_code ec, std::size_t bytes_transferred) { std::size_t decodedBytes = 0; - if(bytes_transferred > 0) + if(bytes_transferred > 0 && !ec) { auto read_buffer = boost::asio::buffer(m_core.input_buffer, bytes_transferred); @@ -50,8 +49,7 @@ struct AsyncReadOperation } catch(...) { - m_handler(convertException(), 0); - return; + ec = convertException(); } } @@ -62,7 +60,7 @@ struct AsyncReadOperation return; } - if(m_core.hasReceivedData()) + if(m_core.hasReceivedData() && !ec) { decodedBytes = m_core.copyReceivedData(m_buffers); ec = boost::system::error_code{}; diff --git a/src/lib/tls/asio/asio_async_write_op.h b/src/lib/tls/asio/asio_async_write_op.h index d97cce769..1443d18bd 100644 --- a/src/lib/tls/asio/asio_async_write_op.h +++ b/src/lib/tls/asio/asio_async_write_op.h @@ -33,11 +33,9 @@ struct AsyncWriteOperation ~AsyncWriteOperation() = default; AsyncWriteOperation(AsyncWriteOperation const&) = delete; - void operator()(boost::system::error_code ec, - std::size_t bytes_transferred = ~std::size_t(0)) + void operator()(boost::system::error_code ec, std::size_t bytes_transferred) { m_core.consumeSendBuffer(bytes_transferred); - // TODO: make sure returning 0 in error case is correct here--core has already eaten the data m_handler(ec, ec ? 0 : m_plainBytesTransferred); } diff --git a/src/lib/tls/asio/asio_stream_core.h b/src/lib/tls/asio/asio_stream_core.h index 4ef60a182..ab2c30356 100644 --- a/src/lib/tls/asio/asio_stream_core.h +++ b/src/lib/tls/asio/asio_stream_core.h @@ -49,6 +49,8 @@ struct StreamCore : public Botan::TLS::Callbacks void tls_record_received(uint64_t, const uint8_t data[], size_t size) override { + // TODO: It would be nice to avoid this buffer copy. However, we need to deal with the case that the receive + // buffer provided by the caller is smaller than the decrypted record. auto buffer = m_receive_buffer.dynamicBuffer.prepare(size); auto copySize = boost::asio::buffer_copy(buffer, boost::asio::buffer(data, size)); |