Skip to content

Commit

Permalink
Merge pull request #389 from evoskuil/master
Browse files Browse the repository at this point in the history
Use strong (shared) ref to session objects.
  • Loading branch information
evoskuil committed Apr 23, 2024
2 parents dd2d4e6 + 89e9085 commit ea37742
Show file tree
Hide file tree
Showing 28 changed files with 85 additions and 84 deletions.
5 changes: 3 additions & 2 deletions include/bitcoin/network/net/channel.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,9 @@ class BCT_API channel
DELETE_COPY_MOVE(channel);

/// Attach protocol to channel, caller must start (requires strand).
template <class Protocol, class Session, typename... Args>
typename Protocol::ptr attach(Session& session, Args&&... args) NOEXCEPT
template <class Protocol, class SessionPtr, typename... Args>
typename Protocol::ptr attach(const SessionPtr& session,
Args&&... args) NOEXCEPT
{
BC_ASSERT_MSG(stranded(), "strand");

Expand Down
10 changes: 5 additions & 5 deletions include/bitcoin/network/protocols/protocol.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -118,22 +118,22 @@ class BCT_API protocol
return self->handle_broadcast<Message>(ec, message, id, handler);
};

session_.subscribe<Message>(bouncer, channel_->identifier());
session_->subscribe<Message>(bouncer, channel_->identifier());
}

/// Broadcast a message instance to peers (use BROADCAST).
template <class Message>
void broadcast(const typename Message::cptr& message) NOEXCEPT
{
BC_ASSERT_MSG(stranded(), "strand");
session_.broadcast<Message>(message, channel_->identifier());
session_->broadcast<Message>(message, channel_->identifier());
}

/// Start/Stop.
/// -----------------------------------------------------------------------

/// Construct an instance.
protocol(session& session, const channel::ptr& channel) NOEXCEPT;
protocol(const session::ptr& session, const channel::ptr& channel) NOEXCEPT;

/// Asserts that protocol is stopped.
virtual ~protocol() NOEXCEPT;
Expand Down Expand Up @@ -219,10 +219,10 @@ class BCT_API protocol

// This is mostly thread safe, and used in a thread safe manner.
// pause/resume/paused/attach not invoked, setters limited to handshake.
channel::ptr channel_;
const channel::ptr channel_;

// This is thread safe.
session& session_;
const session::ptr session_;

// This is protected by strand.
bool started_{};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ class BCT_API protocol_address_in_31402
public:
typedef std::shared_ptr<protocol_address_in_31402> ptr;

protocol_address_in_31402(session& session,
protocol_address_in_31402(const session::ptr& session,
const channel::ptr& channel) NOEXCEPT;

/// Start protocol (strand required).
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ class BCT_API protocol_address_out_31402
public:
typedef std::shared_ptr<protocol_address_out_31402> ptr;

protocol_address_out_31402(session& session,
protocol_address_out_31402(const session::ptr& session,
const channel::ptr& channel) NOEXCEPT;

/// Start protocol (strand required).
Expand Down
2 changes: 1 addition & 1 deletion include/bitcoin/network/protocols/protocol_alert_31402.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ class BCT_API protocol_alert_31402
public:
typedef std::shared_ptr<protocol_alert_31402> ptr;

protocol_alert_31402(session& session,
protocol_alert_31402(const session::ptr& session,
const channel::ptr& channel) NOEXCEPT;

/// Start protocol (strand required).
Expand Down
2 changes: 1 addition & 1 deletion include/bitcoin/network/protocols/protocol_ping_31402.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ class BCT_API protocol_ping_31402
public:
typedef std::shared_ptr<protocol_ping_31402> ptr;

protocol_ping_31402(session& session,
protocol_ping_31402(const session::ptr& session,
const channel::ptr& channel) NOEXCEPT;

/// Start protocol (strand required).
Expand Down
2 changes: 1 addition & 1 deletion include/bitcoin/network/protocols/protocol_ping_60001.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ class BCT_API protocol_ping_60001
public:
typedef std::shared_ptr<protocol_ping_60001> ptr;

protocol_ping_60001(session& session,
protocol_ping_60001(const session::ptr& session,
const channel::ptr& channel) NOEXCEPT;

/// Start protocol (strand required).
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ class BCT_API protocol_reject_70002
public:
typedef std::shared_ptr<protocol_reject_70002> ptr;

protocol_reject_70002(session& session,
protocol_reject_70002(const session::ptr& session,
const channel::ptr& channel) NOEXCEPT;

/// Start protocol (strand required).
Expand Down
2 changes: 1 addition & 1 deletion include/bitcoin/network/protocols/protocol_seed_31402.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ class BCT_API protocol_seed_31402
public:
typedef std::shared_ptr<protocol_seed_31402> ptr;

protocol_seed_31402(session& session,
protocol_seed_31402(const session::ptr& session,
const channel::ptr& channel) NOEXCEPT;

/// Perform seeding, stops channel on completion (strand required).
Expand Down
7 changes: 4 additions & 3 deletions include/bitcoin/network/protocols/protocol_version_31402.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,13 @@ class BCT_API protocol_version_31402
typedef std::shared_ptr<protocol_version_31402> ptr;

/// Construct a version protocol instance using configured values.
protocol_version_31402(session& session,
protocol_version_31402(const session::ptr& session,
const channel::ptr& channel) NOEXCEPT;

/// Construct a version protocol instance using parameterized services.
protocol_version_31402(session& session, const channel::ptr& channel,
uint64_t minimum_services, uint64_t maximum_services) NOEXCEPT;
protocol_version_31402(const session::ptr& session,
const channel::ptr& channel, uint64_t minimum_services,
uint64_t maximum_services) NOEXCEPT;

/// Perform the handshake (strand required), handler invoked on completion.
virtual void shake(result_handler&& handler) NOEXCEPT;
Expand Down
8 changes: 4 additions & 4 deletions include/bitcoin/network/protocols/protocol_version_70001.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,13 +39,13 @@ class BCT_API protocol_version_70001
typedef std::shared_ptr<protocol_version_70001> ptr;

/// Construct a version protocol instance using configured values.
protocol_version_70001(session& session,
protocol_version_70001(const session::ptr& session,
const channel::ptr& channel) NOEXCEPT;

/// Construct a version protocol instance using parameterized services.
protocol_version_70001(session& session, const channel::ptr& channel,
uint64_t minimum_services, uint64_t maximum_services,
bool relay) NOEXCEPT;
protocol_version_70001(const session::ptr& session,
const channel::ptr& channel, uint64_t minimum_services,
uint64_t maximum_services, bool relay) NOEXCEPT;

protected:
messages::version version_factory(bool relay=false) const NOEXCEPT override;
Expand Down
8 changes: 4 additions & 4 deletions include/bitcoin/network/protocols/protocol_version_70002.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,13 +39,13 @@ class BCT_API protocol_version_70002
typedef std::shared_ptr<protocol_version_70002> ptr;

/// Construct a version protocol instance using configured values.
protocol_version_70002(session& session,
protocol_version_70002(const session::ptr& session,
const channel::ptr& channel) NOEXCEPT;

/// Construct a version protocol instance using parameterized services.
protocol_version_70002(session& session, const channel::ptr& channel,
uint64_t minimum_services, uint64_t maximum_services,
bool relay) NOEXCEPT;
protocol_version_70002(const session::ptr& session,
const channel::ptr& channel, uint64_t minimum_services,
uint64_t maximum_services, bool relay) NOEXCEPT;

/// Perform the handshake (strand required), handler invoked on completion.
void shake(result_handler&& handle_event) NOEXCEPT override;
Expand Down
2 changes: 2 additions & 0 deletions include/bitcoin/network/sessions/session.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,9 @@ class BCT_API session
: public enable_shared_from_base<session>, public reporter
{
public:
typedef std::shared_ptr<session> ptr;
typedef broadcaster::channel_id channel_id;

DELETE_COPY_MOVE(session);

protected:
Expand Down
13 changes: 7 additions & 6 deletions src/protocols/protocol.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,11 @@ using namespace system;
using namespace messages;
using namespace std::placeholders;

protocol::protocol(session& session, const channel::ptr& channel) NOEXCEPT
protocol::protocol(const session::ptr& session,
const channel::ptr& channel) NOEXCEPT
: channel_(channel),
session_(session),
reporter(session.log)
reporter(session->log)
{
}

Expand Down Expand Up @@ -157,7 +158,7 @@ void protocol::set_negotiated_version(uint32_t value) NOEXCEPT

const network::settings& protocol::settings() const NOEXCEPT
{
return session_.settings();
return session_->settings();
}

address protocol::selfs() const NOEXCEPT
Expand Down Expand Up @@ -187,12 +188,12 @@ uint64_t protocol::identifier() const NOEXCEPT

size_t protocol::address_count() const NOEXCEPT
{
return session_.address_count();
return session_->address_count();
}

void protocol::fetch(address_handler&& handler) NOEXCEPT
{
session_.fetch(
session_->fetch(
BIND(handle_fetch, _1, _2, std::move(handler)));
}

Expand All @@ -207,7 +208,7 @@ void protocol::handle_fetch(const code& ec, const address_cptr& message,
void protocol::save(const address_cptr& message,
count_handler&& handler) NOEXCEPT
{
session_.save(message,
session_->save(message,
BIND(handle_save, _1, _2, std::move(handler)));
}

Expand Down
6 changes: 3 additions & 3 deletions src/protocols/protocol_address_in_31402.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,11 @@ using namespace std::placeholders;
// Bind throws (ok).
BC_PUSH_WARNING(NO_THROW_IN_NOEXCEPT)

protocol_address_in_31402::protocol_address_in_31402(session& session,
const channel::ptr& channel) NOEXCEPT
protocol_address_in_31402::protocol_address_in_31402(
const session::ptr& session, const channel::ptr& channel) NOEXCEPT
: protocol(session, channel),
outbound_(!channel->inbound()),
tracker<protocol_address_in_31402>(session.log)
tracker<protocol_address_in_31402>(session->log)
{
}

Expand Down
6 changes: 3 additions & 3 deletions src/protocols/protocol_address_out_31402.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,10 @@ using namespace std::placeholders;
// Bind throws (ok).
BC_PUSH_WARNING(NO_THROW_IN_NOEXCEPT)

protocol_address_out_31402::protocol_address_out_31402(session& session,
const channel::ptr& channel) NOEXCEPT
protocol_address_out_31402::protocol_address_out_31402(
const session::ptr& session, const channel::ptr& channel) NOEXCEPT
: protocol(session, channel),
tracker<protocol_address_out_31402>(session.log)
tracker<protocol_address_out_31402>(session->log)
{
}

Expand Down
4 changes: 2 additions & 2 deletions src/protocols/protocol_alert_31402.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,10 @@ using namespace messages;
using namespace std::placeholders;

// This captures alert messages. Outp
protocol_alert_31402::protocol_alert_31402(session& session,
protocol_alert_31402::protocol_alert_31402(const session::ptr& session,
const channel::ptr& channel) NOEXCEPT
: protocol(session, channel),
tracker<protocol_alert_31402>(session.log)
tracker<protocol_alert_31402>(session->log)
{
}

Expand Down
8 changes: 4 additions & 4 deletions src/protocols/protocol_ping_31402.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,12 @@ using namespace system;
using namespace messages;
using namespace std::placeholders;

protocol_ping_31402::protocol_ping_31402(session& session,
protocol_ping_31402::protocol_ping_31402(const session::ptr& session,
const channel::ptr& channel) NOEXCEPT
: protocol(session, channel),
timer_(std::make_shared<deadline>(session.log, channel->strand(),
session.settings().channel_heartbeat())),
tracker<protocol_ping_31402>(session.log)
timer_(std::make_shared<deadline>(session->log, channel->strand(),
session->settings().channel_heartbeat())),
tracker<protocol_ping_31402>(session->log)
{
}

Expand Down
4 changes: 2 additions & 2 deletions src/protocols/protocol_ping_60001.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,11 @@ using namespace std::placeholders;
constexpr uint64_t received = zero;
constexpr auto minimum_nonce = add1(received);

protocol_ping_60001::protocol_ping_60001(session& session,
protocol_ping_60001::protocol_ping_60001(const session::ptr& session,
const channel::ptr& channel) NOEXCEPT
: protocol_ping_31402(session, channel),
nonce_(received),
tracker<protocol_ping_60001>(session.log)
tracker<protocol_ping_60001>(session->log)
{
}

Expand Down
4 changes: 2 additions & 2 deletions src/protocols/protocol_reject_70002.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,10 @@ using namespace messages;
using namespace std::placeholders;

// This protocol creates log overflow DOS vector, and is not in widespread use.
protocol_reject_70002::protocol_reject_70002(session& session,
protocol_reject_70002::protocol_reject_70002(const session::ptr& session,
const channel::ptr& channel) NOEXCEPT
: protocol(session, channel),
tracker<protocol_reject_70002>(session.log)
tracker<protocol_reject_70002>(session->log)
{
}

Expand Down
8 changes: 4 additions & 4 deletions src/protocols/protocol_seed_31402.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,12 @@ using namespace std::placeholders;
// Bind throws (ok).
BC_PUSH_WARNING(NO_THROW_IN_NOEXCEPT)

protocol_seed_31402::protocol_seed_31402(session& session,
protocol_seed_31402::protocol_seed_31402(const session::ptr& session,
const channel::ptr& channel) NOEXCEPT
: protocol(session, channel),
timer_(std::make_shared<deadline>(session.log, channel->strand(),
session.settings().channel_germination())),
tracker<protocol_seed_31402>(session.log)
timer_(std::make_shared<deadline>(session->log, channel->strand(),
session->settings().channel_germination())),
tracker<protocol_seed_31402>(session->log)
{
}

Expand Down
20 changes: 10 additions & 10 deletions src/protocols/protocol_version_31402.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,28 +41,28 @@ using namespace messages;
using namespace std::placeholders;

// Require the configured minimum protocol and services by default.
protocol_version_31402::protocol_version_31402(session& session,
protocol_version_31402::protocol_version_31402(const session::ptr& session,
const channel::ptr& channel) NOEXCEPT
: protocol_version_31402(session, channel,
session.settings().services_minimum,
session.settings().services_maximum)
session->settings().services_minimum,
session->settings().services_maximum)
{
}

// Used for seeding (should probably not override these).
protocol_version_31402::protocol_version_31402(session& session,
protocol_version_31402::protocol_version_31402(const session::ptr& session,
const channel::ptr& channel, uint64_t minimum_services,
uint64_t maximum_services) NOEXCEPT
: protocol(session, channel),
inbound_(channel->inbound()),
minimum_version_(session.settings().protocol_minimum),
maximum_version_(session.settings().protocol_maximum),
minimum_version_(session->settings().protocol_minimum),
maximum_version_(session->settings().protocol_maximum),
minimum_services_(minimum_services),
maximum_services_(maximum_services),
invalid_services_(session.settings().invalid_services),
timer_(std::make_shared<deadline>(session.log, channel->strand(),
session.settings().channel_handshake())),
tracker<protocol_version_31402>(session.log)
invalid_services_(session->settings().invalid_services),
timer_(std::make_shared<deadline>(session->log, channel->strand(),
session->settings().channel_handshake())),
tracker<protocol_version_31402>(session->log)
{
}

Expand Down
12 changes: 6 additions & 6 deletions src/protocols/protocol_version_70001.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,22 +35,22 @@ namespace network {
using namespace system;
using namespace bc::network::messages;

protocol_version_70001::protocol_version_70001(session& session,
protocol_version_70001::protocol_version_70001(const session::ptr& session,
const channel::ptr& channel) NOEXCEPT
: protocol_version_70001(session, channel,
session.settings().services_minimum,
session.settings().services_maximum,
session.settings().enable_transaction)
session->settings().services_minimum,
session->settings().services_maximum,
session->settings().enable_transaction)
{
}

protocol_version_70001::protocol_version_70001(session& session,
protocol_version_70001::protocol_version_70001(const session::ptr& session,
const channel::ptr& channel, uint64_t minimum_services,
uint64_t maximum_services, bool relay) NOEXCEPT
: protocol_version_31402(session, channel, minimum_services,
maximum_services),
relay_(relay),
tracker<protocol_version_70001>(session.log)
tracker<protocol_version_70001>(session->log)
{
}

Expand Down

0 comments on commit ea37742

Please sign in to comment.