Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 12 additions & 5 deletions include/bitcoin/network/channels/channel_peer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,20 +58,26 @@ class BCT_API channel_peer
inline void send(const Message& message, result_handler&& handler) NOEXCEPT
{
BC_ASSERT(stranded());
using namespace messages::peer;

// TODO: move to serializer.
const auto magic = settings().identifier;
const auto version = negotiated_version();
const auto ptr = messages::peer::serialize(message, magic, version);
const auto payload = serialize(message, magic, version);

LOGX("Sent " << heading::get_command(*payload) << " to ["
<< endpoint() << "] (" << system::floored_subtract(payload->size(),
heading::command_size) << " bytes)");

using namespace std::placeholders;
count_handler complete = std::bind(&channel_peer::handle_send,
shared_from_base<channel_peer>(), _1, _2, ptr, std::move(handler));
shared_from_base<channel_peer>(), _1, _2, payload,
std::move(handler));

if (!ptr)
if (!payload)
complete(error::bad_alloc, {});
else
write({ ptr->data(), ptr->size() }, std::move(complete));
write({ payload->data(), payload->size() }, std::move(complete));
}

/// Construct a p2p channel to encapsulate and communicate on the socket.
Expand Down Expand Up @@ -138,7 +144,8 @@ class BCT_API channel_peer

private:
void log_message(const std::string_view& name, size_t size) const NOEXCEPT;
void handle_send(const code& ec, size_t size, const system::chunk_cptr&,
void handle_send(const code& ec, size_t size,
const system::chunk_cptr& payload,
const result_handler& handler) NOEXCEPT;

// Only passes static member get_area(), so safe to use statically.
Expand Down
12 changes: 11 additions & 1 deletion src/channels/channel_peer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -317,11 +317,21 @@ void channel_peer::handle_read_payload(const code& ec, size_t payload_size,
}

void channel_peer::handle_send(const code& ec, size_t,
const system::chunk_cptr&, const result_handler& handler) NOEXCEPT
const system::chunk_cptr& payload, const result_handler& handler) NOEXCEPT
{
if (ec)
stop(ec);

if (ec &&
ec != error::peer_disconnect &&
ec != error::operation_canceled &&
ec != error::connect_failed)
{
LOGF("Send failure " << heading::get_command(*payload) << " to ["
<< endpoint() << "] (" << system::floored_subtract(payload->size(),
heading::command_size) << " bytes) " << ec.message());
}

handler(ec);
}

Expand Down
9 changes: 2 additions & 7 deletions src/net/proxy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -283,7 +283,7 @@ void proxy::do_write(const asio::const_buffer& payload,
total_ = ceilinged_add(total_.load(), payload.size());
backlog_ = ceilinged_add(backlog_.load(), payload.size());

LOGX("Queue for [" << endpoint() << "]: " << queue_.size()
LOGV("Queue for [" << endpoint() << "]: " << queue_.size()
<< " (" << backlog_.load() << " of " << total_.load() << " bytes)");

// Start the loop if it wasn't already started.
Expand Down Expand Up @@ -322,7 +322,7 @@ void proxy::handle_write(const code& ec, size_t bytes,
backlog_ = floored_subtract(backlog_.load(), queue_.front().first.size());
queue_.pop_front();

LOGX("Dequeue for [" << endpoint() << "]: " << queue_.size()
LOGV("Dequeue for [" << endpoint() << "]: " << queue_.size()
<< " (" << backlog_.load() << " backlog)");

// All handlers must be invoked, so continue regardless of error state.
Expand All @@ -346,11 +346,6 @@ void proxy::handle_write(const code& ec, size_t bytes,
return;
}

// BUGBUG: payload changed from data_chunk_ptr to const_buffer.
// TODO: messages dependency, move to channel.
////LOGX("Sent " << heading::get_command(*payload) << " to ["
//// << endpoint() << "] (" << payload->size() << " bytes)");

handler(ec, bytes);
}

Expand Down
Loading