Skip to content

Commit 6802ae8

Browse files
authored
Merge pull request #690 from evoskuil/master
Change channel_rpc to template on Interface.
2 parents 0ca0c43 + 5a79b93 commit 6802ae8

28 files changed

+149
-121
lines changed

Makefile.am

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ src_libbitcoin_network_la_SOURCES = \
4545
src/channels/channel.cpp \
4646
src/channels/channel_http.cpp \
4747
src/channels/channel_peer.cpp \
48-
src/channels/channel_rpc.cpp \
4948
src/channels/channel_ws.cpp \
5049
src/config/address.cpp \
5150
src/config/authority.cpp \
@@ -331,6 +330,10 @@ include_bitcoin_network_impl_async_races_HEADERS = \
331330
include/bitcoin/network/impl/async/races/race_unity.ipp \
332331
include/bitcoin/network/impl/async/races/race_volume.ipp
333332

333+
include_bitcoin_network_impl_channelsdir = ${includedir}/bitcoin/network/impl/channels
334+
include_bitcoin_network_impl_channels_HEADERS = \
335+
include/bitcoin/network/impl/channels/channel_rpc.ipp
336+
334337
include_bitcoin_network_impl_messagesdir = ${includedir}/bitcoin/network/impl/messages
335338
include_bitcoin_network_impl_messages_HEADERS = \
336339
include/bitcoin/network/impl/messages/json_body.ipp
@@ -340,12 +343,12 @@ include_bitcoin_network_impl_messages_rpc_HEADERS = \
340343
include/bitcoin/network/impl/messages/rpc/broadcaster.ipp \
341344
include/bitcoin/network/impl/messages/rpc/dispatcher.ipp
342345

343-
include_bitcoin_network_interfacedir = ${includedir}/bitcoin/network/interface
344-
include_bitcoin_network_interface_HEADERS = \
345-
include/bitcoin/network/interface/http.hpp \
346-
include/bitcoin/network/interface/interface.hpp \
347-
include/bitcoin/network/interface/peer_broadcast.hpp \
348-
include/bitcoin/network/interface/peer_dispatch.hpp
346+
include_bitcoin_network_interfacesdir = ${includedir}/bitcoin/network/interfaces
347+
include_bitcoin_network_interfaces_HEADERS = \
348+
include/bitcoin/network/interfaces/http.hpp \
349+
include/bitcoin/network/interfaces/interfaces.hpp \
350+
include/bitcoin/network/interfaces/peer_broadcast.hpp \
351+
include/bitcoin/network/interfaces/peer_dispatch.hpp
349352

350353
include_bitcoin_network_logdir = ${includedir}/bitcoin/network/log
351354
include_bitcoin_network_log_HEADERS = \

builds/cmake/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,6 @@ add_library( ${CANONICAL_LIB_NAME}
227227
"../../src/channels/channel.cpp"
228228
"../../src/channels/channel_http.cpp"
229229
"../../src/channels/channel_peer.cpp"
230-
"../../src/channels/channel_rpc.cpp"
231230
"../../src/channels/channel_ws.cpp"
232231
"../../src/config/address.cpp"
233232
"../../src/config/authority.cpp"

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,6 @@
127127
<ClCompile Include="..\..\..\..\src\channels\channel.cpp" />
128128
<ClCompile Include="..\..\..\..\src\channels\channel_http.cpp" />
129129
<ClCompile Include="..\..\..\..\src\channels\channel_peer.cpp" />
130-
<ClCompile Include="..\..\..\..\src\channels\channel_rpc.cpp" />
131130
<ClCompile Include="..\..\..\..\src\channels\channel_ws.cpp" />
132131
<ClCompile Include="..\..\..\..\src\config\address.cpp">
133132
<ObjectFileName>$(IntDir)src_config_address.obj</ObjectFileName>
@@ -252,10 +251,10 @@
252251
<ClInclude Include="..\..\..\..\include\bitcoin\network\config\utilities.hpp" />
253252
<ClInclude Include="..\..\..\..\include\bitcoin\network\define.hpp" />
254253
<ClInclude Include="..\..\..\..\include\bitcoin\network\error.hpp" />
255-
<ClInclude Include="..\..\..\..\include\bitcoin\network\interface\http.hpp" />
256-
<ClInclude Include="..\..\..\..\include\bitcoin\network\interface\interface.hpp" />
257-
<ClInclude Include="..\..\..\..\include\bitcoin\network\interface\peer_broadcast.hpp" />
258-
<ClInclude Include="..\..\..\..\include\bitcoin\network\interface\peer_dispatch.hpp" />
254+
<ClInclude Include="..\..\..\..\include\bitcoin\network\interfaces\http.hpp" />
255+
<ClInclude Include="..\..\..\..\include\bitcoin\network\interfaces\interfaces.hpp" />
256+
<ClInclude Include="..\..\..\..\include\bitcoin\network\interfaces\peer_broadcast.hpp" />
257+
<ClInclude Include="..\..\..\..\include\bitcoin\network\interfaces\peer_dispatch.hpp" />
259258
<ClInclude Include="..\..\..\..\include\bitcoin\network\log\capture.hpp" />
260259
<ClInclude Include="..\..\..\..\include\bitcoin\network\log\levels.hpp" />
261260
<ClInclude Include="..\..\..\..\include\bitcoin\network\log\log.hpp" />
@@ -378,6 +377,7 @@
378377
<None Include="..\..\..\..\include\bitcoin\network\impl\async\races\race_volume.ipp" />
379378
<None Include="..\..\..\..\include\bitcoin\network\impl\async\subscriber.ipp" />
380379
<None Include="..\..\..\..\include\bitcoin\network\impl\async\unsubscriber.ipp" />
380+
<None Include="..\..\..\..\include\bitcoin\network\impl\channels\channel_rpc.ipp" />
381381
<None Include="..\..\..\..\include\bitcoin\network\impl\messages\json_body.ipp" />
382382
<None Include="..\..\..\..\include\bitcoin\network\impl\messages\rpc\broadcaster.ipp" />
383383
<None Include="..\..\..\..\include\bitcoin\network\impl\messages\rpc\dispatcher.ipp" />

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

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,18 @@
3535
<UniqueIdentifier>{564EB540-D6B6-425C-0000-0000000000C1}</UniqueIdentifier>
3636
</Filter>
3737
<Filter Include="include\bitcoin\network\impl\async\races">
38-
<UniqueIdentifier>{564EB540-D6B6-425C-0000-0000000000E1}</UniqueIdentifier>
38+
<UniqueIdentifier>{564EB540-D6B6-425C-0000-0000000000F1}</UniqueIdentifier>
3939
</Filter>
40-
<Filter Include="include\bitcoin\network\impl\messages">
40+
<Filter Include="include\bitcoin\network\impl\channels">
4141
<UniqueIdentifier>{564EB540-D6B6-425C-0000-0000000000D1}</UniqueIdentifier>
4242
</Filter>
43+
<Filter Include="include\bitcoin\network\impl\messages">
44+
<UniqueIdentifier>{564EB540-D6B6-425C-0000-0000000000E1}</UniqueIdentifier>
45+
</Filter>
4346
<Filter Include="include\bitcoin\network\impl\messages\rpc">
44-
<UniqueIdentifier>{564EB540-D6B6-425C-0000-0000000000F1}</UniqueIdentifier>
47+
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000002}</UniqueIdentifier>
4548
</Filter>
46-
<Filter Include="include\bitcoin\network\interface">
49+
<Filter Include="include\bitcoin\network\interfaces">
4750
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000006}</UniqueIdentifier>
4851
</Filter>
4952
<Filter Include="include\bitcoin\network\log">
@@ -53,25 +56,25 @@
5356
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000008}</UniqueIdentifier>
5457
</Filter>
5558
<Filter Include="include\bitcoin\network\messages\http">
56-
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000002}</UniqueIdentifier>
59+
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000003}</UniqueIdentifier>
5760
</Filter>
5861
<Filter Include="include\bitcoin\network\messages\http\enums">
59-
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000005}</UniqueIdentifier>
62+
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000006}</UniqueIdentifier>
6063
</Filter>
6164
<Filter Include="include\bitcoin\network\messages\peer">
62-
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000003}</UniqueIdentifier>
65+
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000004}</UniqueIdentifier>
6366
</Filter>
6467
<Filter Include="include\bitcoin\network\messages\peer\detail">
65-
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000006}</UniqueIdentifier>
68+
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000007}</UniqueIdentifier>
6669
</Filter>
6770
<Filter Include="include\bitcoin\network\messages\peer\enums">
68-
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000007}</UniqueIdentifier>
71+
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000008}</UniqueIdentifier>
6972
</Filter>
7073
<Filter Include="include\bitcoin\network\messages\rpc">
71-
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000004}</UniqueIdentifier>
74+
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000005}</UniqueIdentifier>
7275
</Filter>
7376
<Filter Include="include\bitcoin\network\messages\rpc\enums">
74-
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000008}</UniqueIdentifier>
77+
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000009}</UniqueIdentifier>
7578
</Filter>
7679
<Filter Include="include\bitcoin\network\net">
7780
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000009}</UniqueIdentifier>
@@ -83,7 +86,7 @@
8386
<UniqueIdentifier>{564EB540-D6B6-425C-0000-0000000000A1}</UniqueIdentifier>
8487
</Filter>
8588
<Filter Include="resource">
86-
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000009}</UniqueIdentifier>
89+
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000010}</UniqueIdentifier>
8790
</Filter>
8891
<Filter Include="src">
8992
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000000}</UniqueIdentifier>
@@ -147,9 +150,6 @@
147150
<ClCompile Include="..\..\..\..\src\channels\channel_peer.cpp">
148151
<Filter>src\channels</Filter>
149152
</ClCompile>
150-
<ClCompile Include="..\..\..\..\src\channels\channel_rpc.cpp">
151-
<Filter>src\channels</Filter>
152-
</ClCompile>
153153
<ClCompile Include="..\..\..\..\src\channels\channel_ws.cpp">
154154
<Filter>src\channels</Filter>
155155
</ClCompile>
@@ -506,17 +506,17 @@
506506
<ClInclude Include="..\..\..\..\include\bitcoin\network\error.hpp">
507507
<Filter>include\bitcoin\network</Filter>
508508
</ClInclude>
509-
<ClInclude Include="..\..\..\..\include\bitcoin\network\interface\http.hpp">
510-
<Filter>include\bitcoin\network\interface</Filter>
509+
<ClInclude Include="..\..\..\..\include\bitcoin\network\interfaces\http.hpp">
510+
<Filter>include\bitcoin\network\interfaces</Filter>
511511
</ClInclude>
512-
<ClInclude Include="..\..\..\..\include\bitcoin\network\interface\interface.hpp">
513-
<Filter>include\bitcoin\network\interface</Filter>
512+
<ClInclude Include="..\..\..\..\include\bitcoin\network\interfaces\interfaces.hpp">
513+
<Filter>include\bitcoin\network\interfaces</Filter>
514514
</ClInclude>
515-
<ClInclude Include="..\..\..\..\include\bitcoin\network\interface\peer_broadcast.hpp">
516-
<Filter>include\bitcoin\network\interface</Filter>
515+
<ClInclude Include="..\..\..\..\include\bitcoin\network\interfaces\peer_broadcast.hpp">
516+
<Filter>include\bitcoin\network\interfaces</Filter>
517517
</ClInclude>
518-
<ClInclude Include="..\..\..\..\include\bitcoin\network\interface\peer_dispatch.hpp">
519-
<Filter>include\bitcoin\network\interface</Filter>
518+
<ClInclude Include="..\..\..\..\include\bitcoin\network\interfaces\peer_dispatch.hpp">
519+
<Filter>include\bitcoin\network\interfaces</Filter>
520520
</ClInclude>
521521
<ClInclude Include="..\..\..\..\include\bitcoin\network\log\capture.hpp">
522522
<Filter>include\bitcoin\network\log</Filter>
@@ -880,6 +880,9 @@
880880
<None Include="..\..\..\..\include\bitcoin\network\impl\async\unsubscriber.ipp">
881881
<Filter>include\bitcoin\network\impl\async</Filter>
882882
</None>
883+
<None Include="..\..\..\..\include\bitcoin\network\impl\channels\channel_rpc.ipp">
884+
<Filter>include\bitcoin\network\impl\channels</Filter>
885+
</None>
883886
<None Include="..\..\..\..\include\bitcoin\network\impl\messages\json_body.ipp">
884887
<Filter>include\bitcoin\network\impl\messages</Filter>
885888
</None>

include/bitcoin/network.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,10 @@
5050
#include <bitcoin/network/config/config.hpp>
5151
#include <bitcoin/network/config/endpoint.hpp>
5252
#include <bitcoin/network/config/utilities.hpp>
53-
#include <bitcoin/network/interface/http.hpp>
54-
#include <bitcoin/network/interface/interface.hpp>
55-
#include <bitcoin/network/interface/peer_broadcast.hpp>
56-
#include <bitcoin/network/interface/peer_dispatch.hpp>
53+
#include <bitcoin/network/interfaces/http.hpp>
54+
#include <bitcoin/network/interfaces/interfaces.hpp>
55+
#include <bitcoin/network/interfaces/peer_broadcast.hpp>
56+
#include <bitcoin/network/interfaces/peer_dispatch.hpp>
5757
#include <bitcoin/network/log/capture.hpp>
5858
#include <bitcoin/network/log/levels.hpp>
5959
#include <bitcoin/network/log/log.hpp>

include/bitcoin/network/channels/channel_http.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
#include <bitcoin/network/async/async.hpp>
2525
#include <bitcoin/network/channels/channel.hpp>
2626
#include <bitcoin/network/define.hpp>
27-
#include <bitcoin/network/interface/interface.hpp>
27+
#include <bitcoin/network/interfaces/interfaces.hpp>
2828
#include <bitcoin/network/log/log.hpp>
2929
#include <bitcoin/network/messages/messages.hpp>
3030
#include <bitcoin/network/net/net.hpp>
@@ -77,7 +77,7 @@ class BCT_API channel_http
7777
/// Stranded handler invoked from stop().
7878
void stopping(const code& ec) NOEXCEPT override;
7979

80-
/// Read request buffer (not thread safe).
80+
/// Read request buffer (requires strand).
8181
virtual http::flat_buffer& request_buffer() NOEXCEPT;
8282

8383
/// Dispatch request to subscribers by verb type.

include/bitcoin/network/channels/channel_peer.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
#include <memory>
2323
#include <bitcoin/network/channels/channel.hpp>
2424
#include <bitcoin/network/define.hpp>
25-
#include <bitcoin/network/interface/interface.hpp>
25+
#include <bitcoin/network/interfaces/interfaces.hpp>
2626
#include <bitcoin/network/log/log.hpp>
2727
#include <bitcoin/network/memory.hpp>
2828
#include <bitcoin/network/messages/messages.hpp>

include/bitcoin/network/channels/channel_rpc.hpp

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -22,28 +22,25 @@
2222
#include <memory>
2323
#include <bitcoin/network/channels/channel.hpp>
2424
#include <bitcoin/network/define.hpp>
25-
#include <bitcoin/network/interface/interface.hpp>
2625
#include <bitcoin/network/log/log.hpp>
2726
#include <bitcoin/network/messages/messages.hpp>
2827
#include <bitcoin/network/net/net.hpp>
2928

3029
namespace libbitcoin {
3130
namespace network {
3231

33-
/// Read rpc-request and send rpc-response.
34-
class BCT_API channel_rpc
32+
/// Read rpc-request and send rpc-response, dispatch to Interface.
33+
template <typename Interface>
34+
class channel_rpc
3535
: public channel
3636
{
3737
public:
3838
typedef std::shared_ptr<channel_rpc> ptr;
39-
40-
// TODO: implement in node.
41-
using interface = rpc::interface::http;
42-
using dispatcher = rpc::dispatcher<interface>;
39+
using dispatcher = rpc::dispatcher<Interface>;
4340

4441
/// Subscribe to request from client (requires strand).
4542
/// Event handler is always invoked on the channel strand.
46-
template <class Handler>
43+
template <class Void, class Handler>
4744
inline void subscribe(Handler&& handler) NOEXCEPT
4845
{
4946
BC_ASSERT(stranded());
@@ -62,33 +59,33 @@ class BCT_API channel_rpc
6259

6360
/// Serialize and write response to client (requires strand).
6461
/// Completion handler is always invoked on the channel strand.
65-
void send(rpc::response_t&& message, size_t size_hint,
62+
inline void send(rpc::response_t&& message, size_t size_hint,
6663
result_handler&& handler) NOEXCEPT;
6764

6865
/// Resume reading from the socket (requires strand).
69-
void resume() NOEXCEPT override;
66+
inline void resume() NOEXCEPT override;
7067

7168
/// Must call after successful message handling if no stop.
72-
virtual void receive() NOEXCEPT;
69+
virtual inline void receive() NOEXCEPT;
7370

7471
protected:
7572
/// Stranded handler invoked from stop().
76-
void stopping(const code& ec) NOEXCEPT override;
73+
inline void stopping(const code& ec) NOEXCEPT override;
7774

78-
/// Read request buffer (not thread safe).
79-
virtual http::flat_buffer& request_buffer() NOEXCEPT;
75+
/// Read request buffer (requires strand).
76+
virtual inline http::flat_buffer& request_buffer() NOEXCEPT;
8077

81-
/// Dispatch request to subscribers by requested method.
82-
virtual void dispatch(const rpc::request_cptr& request) NOEXCEPT;
78+
/// Override to dispatch request to subscribers by requested method.
79+
virtual inline void dispatch(const rpc::request_cptr& request) NOEXCEPT;
8380

8481
/// Size and assign response_buffer_ (value type is json-rpc::json).
85-
virtual rpc::response_ptr assign_message(rpc::response_t&& message,
82+
virtual inline rpc::response_ptr assign_message(rpc::response_t&& message,
8683
size_t size_hint) NOEXCEPT;
8784

8885
/// Handlers.
89-
virtual void handle_receive(const code& ec, size_t bytes,
86+
virtual inline void handle_receive(const code& ec, size_t bytes,
9087
const rpc::request_cptr& request) NOEXCEPT;
91-
virtual void handle_send(const code& ec, size_t bytes,
88+
virtual inline void handle_send(const code& ec, size_t bytes,
9289
const rpc::response_cptr& response,
9390
const result_handler& handler) NOEXCEPT;
9491

@@ -108,4 +105,12 @@ class BCT_API channel_rpc
108105
} // namespace network
109106
} // namespace libbitcoin
110107

108+
#define TEMPLATE template <typename Interface>
109+
#define CLASS channel_rpc<Interface>
110+
111+
#include <bitcoin/network/impl/channels/channel_rpc.ipp>
112+
113+
#undef CLASS
114+
#undef TEMPLATE
115+
111116
#endif

0 commit comments

Comments
 (0)