pass bytes_transferred to AsyncSend callback

This commit is contained in:
orignal
2026-07-23 11:24:10 -04:00
parent a2e82fc23a
commit 92ec218a8d
5 changed files with 9 additions and 13 deletions
+1 -1
View File
@@ -962,7 +962,7 @@ namespace stream
else
{
if (handler)
handler(boost::system::error_code ());
handler(boost::system::error_code (), 0);
return;
}
Send (std::move (buffer));
+4 -4
View File
@@ -122,9 +122,9 @@ namespace stream
};
#ifdef __cpp_lib_move_only_function // with C++23
typedef std::move_only_function<void (const boost::system::error_code& ecode)> SendHandler;
typedef std::move_only_function<void (const boost::system::error_code& ecode, size_t bytes_transferred)> SendHandler;
#else
typedef std::function<void (const boost::system::error_code& ecode)> SendHandler;
typedef std::function<void (const boost::system::error_code& ecode, size_t bytes_transferred)> SendHandler;
#endif
struct SendBuffer
@@ -148,11 +148,11 @@ namespace stream
~SendBuffer ()
{
delete[] buf;
if (handler) handler(boost::system::error_code ());
if (handler) handler(boost::system::error_code (), len);
}
size_t GetRemainingSize () const { return len - offset; };
const uint8_t * GetRemaningBuffer () const { return buf + offset; };
void Cancel () { if (handler) handler (boost::asio::error::make_error_code (boost::asio::error::operation_aborted)); handler = nullptr; };
void Cancel () { if (handler) handler (boost::asio::error::make_error_code (boost::asio::error::operation_aborted), offset); handler = nullptr; };
};
class SendBufferQueue
+2 -6
View File
@@ -44,7 +44,7 @@ namespace client
if (received > 0) // we have some data
handler (boost::system::error_code (), received);
else if (bufs.size () > 0) // wait for incoming data
m_Stream->AsyncReceive (*boost::asio::buffer_sequence_begin (bufs), handler);
m_Stream->AsyncReceive (*boost::asio::buffer_sequence_begin (bufs), std::move (handler));
else
handler (boost::system::error_code (), 0);
}
@@ -66,11 +66,7 @@ namespace client
{
#ifdef __cpp_lib_move_only_function // with C++23
// we can save handler with SendBuffer
auto sendBuffer = std::make_shared<i2p::stream::SendBuffer>(bufsToSend, sent,
[handler = std::move (handler), sent](const boost::system::error_code& ecode) mutable
{
handler (ecode, sent);
});
auto sendBuffer = std::make_shared<i2p::stream::SendBuffer>(bufsToSend, sent, std::move (handler));
#else
// we can't save handler with SendBuffer due to lack of std::move_only_function
auto sendBuffer = std::make_shared<i2p::stream::SendBuffer>(bufsToSend, sent, nullptr);
+1 -1
View File
@@ -255,7 +255,7 @@ namespace client
if (m_Stream)
{
m_Stream->AsyncSend (buf, len,
[s = shared_from_this ()](const boost::system::error_code& ecode)
[s = shared_from_this ()](const boost::system::error_code& ecode, size_t bytes_transferred)
{
if (!ecode)
s->Receive ();
+1 -1
View File
@@ -398,7 +398,7 @@ namespace torrents
void PeerConnection::WriteToStream (const uint8_t * buf, size_t len)
{
m_Stream->AsyncSend (buf, len,
[s = shared_from_this ()](const boost::system::error_code& ecode)
[s = shared_from_this ()](const boost::system::error_code& ecode, size_t bytes_transferred)
{
if (ecode) s->Terminate ();
});