Skip to content

Commit c64797a

Browse files
authored
Merge pull request #862 from evoskuil/master
Rename attach<>, use shared_from_base<> in multiple inherit, style.
2 parents c658241 + 64969b9 commit c64797a

File tree

10 files changed

+39
-43
lines changed

10 files changed

+39
-43
lines changed

Makefile.am

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,11 +196,11 @@ include_bitcoin_node_protocols_HEADERS = \
196196

197197
include_bitcoin_node_sessionsdir = ${includedir}/bitcoin/node/sessions
198198
include_bitcoin_node_sessions_HEADERS = \
199-
include/bitcoin/node/sessions/attach.hpp \
200199
include/bitcoin/node/sessions/session.hpp \
201200
include/bitcoin/node/sessions/session_inbound.hpp \
202201
include/bitcoin/node/sessions/session_manual.hpp \
203202
include/bitcoin/node/sessions/session_outbound.hpp \
203+
include/bitcoin/node/sessions/session_peer.hpp \
204204
include/bitcoin/node/sessions/session_tcp.hpp \
205205
include/bitcoin/node/sessions/sessions.hpp
206206

builds/msvc/vs2022/libbitcoin-node/libbitcoin-node.vcxproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,11 +200,11 @@
200200
<ClInclude Include="..\..\..\..\include\bitcoin\node\protocols\protocol_transaction_in_106.hpp" />
201201
<ClInclude Include="..\..\..\..\include\bitcoin\node\protocols\protocol_transaction_out_106.hpp" />
202202
<ClInclude Include="..\..\..\..\include\bitcoin\node\protocols\protocols.hpp" />
203-
<ClInclude Include="..\..\..\..\include\bitcoin\node\sessions\attach.hpp" />
204203
<ClInclude Include="..\..\..\..\include\bitcoin\node\sessions\session.hpp" />
205204
<ClInclude Include="..\..\..\..\include\bitcoin\node\sessions\session_inbound.hpp" />
206205
<ClInclude Include="..\..\..\..\include\bitcoin\node\sessions\session_manual.hpp" />
207206
<ClInclude Include="..\..\..\..\include\bitcoin\node\sessions\session_outbound.hpp" />
207+
<ClInclude Include="..\..\..\..\include\bitcoin\node\sessions\session_peer.hpp" />
208208
<ClInclude Include="..\..\..\..\include\bitcoin\node\sessions\session_tcp.hpp" />
209209
<ClInclude Include="..\..\..\..\include\bitcoin\node\sessions\sessions.hpp" />
210210
<ClInclude Include="..\..\..\..\include\bitcoin\node\settings.hpp" />

builds/msvc/vs2022/libbitcoin-node/libbitcoin-node.vcxproj.filters

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -281,9 +281,6 @@
281281
<ClInclude Include="..\..\..\..\include\bitcoin\node\protocols\protocols.hpp">
282282
<Filter>include\bitcoin\node\protocols</Filter>
283283
</ClInclude>
284-
<ClInclude Include="..\..\..\..\include\bitcoin\node\sessions\attach.hpp">
285-
<Filter>include\bitcoin\node\sessions</Filter>
286-
</ClInclude>
287284
<ClInclude Include="..\..\..\..\include\bitcoin\node\sessions\session.hpp">
288285
<Filter>include\bitcoin\node\sessions</Filter>
289286
</ClInclude>
@@ -296,6 +293,9 @@
296293
<ClInclude Include="..\..\..\..\include\bitcoin\node\sessions\session_outbound.hpp">
297294
<Filter>include\bitcoin\node\sessions</Filter>
298295
</ClInclude>
296+
<ClInclude Include="..\..\..\..\include\bitcoin\node\sessions\session_peer.hpp">
297+
<Filter>include\bitcoin\node\sessions</Filter>
298+
</ClInclude>
299299
<ClInclude Include="..\..\..\..\include\bitcoin\node\sessions\session_tcp.hpp">
300300
<Filter>include\bitcoin\node\sessions</Filter>
301301
</ClInclude>

include/bitcoin/node.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,11 @@
5656
#include <bitcoin/node/protocols/protocol_transaction_in_106.hpp>
5757
#include <bitcoin/node/protocols/protocol_transaction_out_106.hpp>
5858
#include <bitcoin/node/protocols/protocols.hpp>
59-
#include <bitcoin/node/sessions/attach.hpp>
6059
#include <bitcoin/node/sessions/session.hpp>
6160
#include <bitcoin/node/sessions/session_inbound.hpp>
6261
#include <bitcoin/node/sessions/session_manual.hpp>
6362
#include <bitcoin/node/sessions/session_outbound.hpp>
63+
#include <bitcoin/node/sessions/session_peer.hpp>
6464
#include <bitcoin/node/sessions/session_tcp.hpp>
6565
#include <bitcoin/node/sessions/sessions.hpp>
6666

include/bitcoin/node/sessions/session.hpp

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -107,14 +107,6 @@ class BCN_API session
107107
virtual bool is_recent() const NOEXCEPT;
108108

109109
protected:
110-
template <class Sibling, class Shared>
111-
std::shared_ptr<Sibling> shared_from_sibling() NOEXCEPT
112-
{
113-
BC_PUSH_WARNING(NO_THROW_IN_NOEXCEPT)
114-
return std::dynamic_pointer_cast<Sibling>(
115-
dynamic_cast<Shared*>(this)->shared_from_this());
116-
BC_POP_WARNING()
117-
}
118110

119111
/// Constructors.
120112
/// -----------------------------------------------------------------------

include/bitcoin/node/sessions/session_inbound.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,17 @@
2121

2222
#include <bitcoin/network.hpp>
2323
#include <bitcoin/node/define.hpp>
24-
#include <bitcoin/node/sessions/attach.hpp>
24+
#include <bitcoin/node/sessions/session_peer.hpp>
2525

2626
namespace libbitcoin {
2727
namespace node {
2828

2929
class session_inbound
30-
: public attach<network::session_inbound>
30+
: public session_peer<network::session_inbound>
3131
{
3232
public:
3333
typedef std::shared_ptr<session_inbound> ptr;
34-
using base = attach<network::session_inbound>;
34+
using base = session_peer<network::session_inbound>;
3535
using base::base;
3636

3737
protected:

include/bitcoin/node/sessions/session_manual.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,17 @@
2121

2222
#include <bitcoin/network.hpp>
2323
#include <bitcoin/node/define.hpp>
24-
#include <bitcoin/node/sessions/attach.hpp>
24+
#include <bitcoin/node/sessions/session_peer.hpp>
2525

2626
namespace libbitcoin {
2727
namespace node {
2828

2929
class session_manual
30-
: public attach<network::session_manual>
30+
: public session_peer<network::session_manual>
3131
{
3232
public:
3333
typedef std::shared_ptr<session_manual> ptr;
34-
using base = attach<network::session_manual>;
34+
using base = session_peer<network::session_manual>;
3535
using base::base;
3636
};
3737

include/bitcoin/node/sessions/session_outbound.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,17 @@
2121

2222
#include <bitcoin/network.hpp>
2323
#include <bitcoin/node/define.hpp>
24-
#include <bitcoin/node/sessions/attach.hpp>
24+
#include <bitcoin/node/sessions/session_peer.hpp>
2525

2626
namespace libbitcoin {
2727
namespace node {
2828

2929
class session_outbound
30-
: public attach<network::session_outbound>
30+
: public session_peer<network::session_outbound>
3131
{
3232
public:
3333
typedef std::shared_ptr<session_outbound> ptr;
34-
using base = attach<network::session_outbound>;
34+
using base = session_peer<network::session_outbound>;
3535
using base::base;
3636
};
3737

include/bitcoin/node/sessions/attach.hpp renamed to include/bitcoin/node/sessions/session_peer.hpp

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
* You should have received a copy of the GNU Affero General Public License
1717
* along with this program. If not, see <http://www.gnu.org/licenses/>.
1818
*/
19-
#ifndef LIBBITCOIN_NODE_SESSIONS_ATTACH_HPP
20-
#define LIBBITCOIN_NODE_SESSIONS_ATTACH_HPP
19+
#ifndef LIBBITCOIN_NODE_SESSIONS_SESSION_PEER_HPP
20+
#define LIBBITCOIN_NODE_SESSIONS_SESSION_PEER_HPP
2121

2222
#include <memory>
2323
#include <utility>
@@ -31,17 +31,16 @@ namespace node {
3131

3232
class full_node;
3333

34-
/// Session base class template for network session attachment.
34+
/// CRTP base class template for network session multiple derivation.
3535
/// node::session does not derive from network::session (siblings).
3636
/// This avoids the diamond inheritance problem between network/node.
37-
/// Protocol contructors are templatized on Session, obtaining session.
3837
template <class Session>
39-
class attach
38+
class session_peer
4039
: public Session, public node::session
4140
{
4241
public:
4342
template <typename... Args>
44-
attach(full_node& node, uint64_t identifier, Args&&... args) NOEXCEPT
43+
session_peer(full_node& node, uint64_t identifier, Args&&... args) NOEXCEPT
4544
: Session(node, identifier, std::forward<Args>(args)...),
4645
node::session(node)
4746
{
@@ -52,8 +51,9 @@ class attach
5251
network::result_handler&& handler) NOEXCEPT override
5352
{
5453
// Set the current top for version protocol, before handshake.
55-
std::dynamic_pointer_cast<network::channel_peer>(channel)->
56-
set_start_height(archive().get_top_confirmed());
54+
const auto top = archive().get_top_confirmed();
55+
const auto peer = std::dynamic_pointer_cast<channel_peer>(channel);
56+
peer->set_start_height(top);
5757

5858
// Attach and execute appropriate version protocol.
5959
Session::attach_handshake(channel, std::move(handler));
@@ -63,24 +63,26 @@ class attach
6363
const network::channel::ptr& channel) NOEXCEPT override
6464
{
6565
using namespace system;
66-
using namespace network::messages::peer;
66+
using namespace network;
67+
using namespace messages::peer;
68+
using base = session_peer<Session>;
69+
70+
// this-> is required for dependent base access in CRTP.
71+
const auto self = this->template shared_from_base<base>();
6772
const auto relay = this->config().network.enable_relay;
6873
const auto delay = this->config().node.delay_inbound;
6974
const auto headers = this->config().node.headers_first;
7075
const auto node_network = to_bool(bit_and<uint64_t>
7176
(
7277
this->config().network.services_maximum,
73-
network::messages::peer::service::node_network
78+
service::node_network
7479
));
7580
const auto node_client_filters = to_bool(bit_and<uint64_t>
7681
(
7782
this->config().network.services_maximum,
78-
network::messages::peer::service::node_client_filters
83+
service::node_client_filters
7984
));
8085

81-
const auto self = session::shared_from_sibling<attach<Session>,
82-
network::session>();
83-
8486
// Attach appropriate alert, reject, ping, and/or address protocols.
8587
Session::attach_protocols(channel);
8688

@@ -97,8 +99,7 @@ class attach
9799
// This allows the node to support bip157 without supporting bip152.
98100
///////////////////////////////////////////////////////////////////////
99101

100-
const auto peer = std::dynamic_pointer_cast<network::channel_peer>(
101-
channel);
102+
const auto peer = std::dynamic_pointer_cast<channel_peer>(channel);
102103

103104
// Node must advertise node_client_filters or no out filters.
104105
if (node_client_filters && blocks_out &&
@@ -165,9 +166,12 @@ class attach
165166
network::channel::ptr create_channel(
166167
const network::socket::ptr& socket) NOEXCEPT override
167168
{
168-
return std::static_pointer_cast<network::channel>(
169-
std::make_shared<node::channel_peer>(this->get_memory(), this->log,
170-
socket, this->config(), this->create_key()));
169+
// this-> is required for dependent base access in CRTP.
170+
const auto channel = std::make_shared<node::channel_peer>(
171+
this->get_memory(), this->log, socket, this->config(),
172+
this->create_key());
173+
174+
return std::static_pointer_cast<network::channel>(channel);
171175
}
172176
};
173177

include/bitcoin/node/sessions/sessions.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@
1919
#ifndef LIBBITCOIN_NODE_SESSIONS_SESSIONS_HPP
2020
#define LIBBITCOIN_NODE_SESSIONS_SESSIONS_HPP
2121

22-
#include <bitcoin/node/sessions/attach.hpp>
2322
#include <bitcoin/node/sessions/session.hpp>
2423
#include <bitcoin/node/sessions/session_inbound.hpp>
2524
#include <bitcoin/node/sessions/session_manual.hpp>
2625
#include <bitcoin/node/sessions/session_outbound.hpp>
26+
#include <bitcoin/node/sessions/session_peer.hpp>
2727
#include <bitcoin/node/sessions/session_tcp.hpp>
2828

2929
#endif

0 commit comments

Comments
 (0)