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: 10 additions & 7 deletions Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ src_libbitcoin_network_la_SOURCES = \
src/channels/channel.cpp \
src/channels/channel_http.cpp \
src/channels/channel_peer.cpp \
src/channels/channel_rpc.cpp \
src/channels/channel_ws.cpp \
src/config/address.cpp \
src/config/authority.cpp \
Expand Down Expand Up @@ -331,6 +330,10 @@ include_bitcoin_network_impl_async_races_HEADERS = \
include/bitcoin/network/impl/async/races/race_unity.ipp \
include/bitcoin/network/impl/async/races/race_volume.ipp

include_bitcoin_network_impl_channelsdir = ${includedir}/bitcoin/network/impl/channels
include_bitcoin_network_impl_channels_HEADERS = \
include/bitcoin/network/impl/channels/channel_rpc.ipp

include_bitcoin_network_impl_messagesdir = ${includedir}/bitcoin/network/impl/messages
include_bitcoin_network_impl_messages_HEADERS = \
include/bitcoin/network/impl/messages/json_body.ipp
Expand All @@ -340,12 +343,12 @@ include_bitcoin_network_impl_messages_rpc_HEADERS = \
include/bitcoin/network/impl/messages/rpc/broadcaster.ipp \
include/bitcoin/network/impl/messages/rpc/dispatcher.ipp

include_bitcoin_network_interfacedir = ${includedir}/bitcoin/network/interface
include_bitcoin_network_interface_HEADERS = \
include/bitcoin/network/interface/http.hpp \
include/bitcoin/network/interface/interface.hpp \
include/bitcoin/network/interface/peer_broadcast.hpp \
include/bitcoin/network/interface/peer_dispatch.hpp
include_bitcoin_network_interfacesdir = ${includedir}/bitcoin/network/interfaces
include_bitcoin_network_interfaces_HEADERS = \
include/bitcoin/network/interfaces/http.hpp \
include/bitcoin/network/interfaces/interfaces.hpp \
include/bitcoin/network/interfaces/peer_broadcast.hpp \
include/bitcoin/network/interfaces/peer_dispatch.hpp

include_bitcoin_network_logdir = ${includedir}/bitcoin/network/log
include_bitcoin_network_log_HEADERS = \
Expand Down
1 change: 0 additions & 1 deletion builds/cmake/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,6 @@ add_library( ${CANONICAL_LIB_NAME}
"../../src/channels/channel.cpp"
"../../src/channels/channel_http.cpp"
"../../src/channels/channel_peer.cpp"
"../../src/channels/channel_rpc.cpp"
"../../src/channels/channel_ws.cpp"
"../../src/config/address.cpp"
"../../src/config/authority.cpp"
Expand Down
10 changes: 5 additions & 5 deletions builds/msvc/vs2022/libbitcoin-network/libbitcoin-network.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,6 @@
<ClCompile Include="..\..\..\..\src\channels\channel.cpp" />
<ClCompile Include="..\..\..\..\src\channels\channel_http.cpp" />
<ClCompile Include="..\..\..\..\src\channels\channel_peer.cpp" />
<ClCompile Include="..\..\..\..\src\channels\channel_rpc.cpp" />
<ClCompile Include="..\..\..\..\src\channels\channel_ws.cpp" />
<ClCompile Include="..\..\..\..\src\config\address.cpp">
<ObjectFileName>$(IntDir)src_config_address.obj</ObjectFileName>
Expand Down Expand Up @@ -252,10 +251,10 @@
<ClInclude Include="..\..\..\..\include\bitcoin\network\config\utilities.hpp" />
<ClInclude Include="..\..\..\..\include\bitcoin\network\define.hpp" />
<ClInclude Include="..\..\..\..\include\bitcoin\network\error.hpp" />
<ClInclude Include="..\..\..\..\include\bitcoin\network\interface\http.hpp" />
<ClInclude Include="..\..\..\..\include\bitcoin\network\interface\interface.hpp" />
<ClInclude Include="..\..\..\..\include\bitcoin\network\interface\peer_broadcast.hpp" />
<ClInclude Include="..\..\..\..\include\bitcoin\network\interface\peer_dispatch.hpp" />
<ClInclude Include="..\..\..\..\include\bitcoin\network\interfaces\http.hpp" />
<ClInclude Include="..\..\..\..\include\bitcoin\network\interfaces\interfaces.hpp" />
<ClInclude Include="..\..\..\..\include\bitcoin\network\interfaces\peer_broadcast.hpp" />
<ClInclude Include="..\..\..\..\include\bitcoin\network\interfaces\peer_dispatch.hpp" />
<ClInclude Include="..\..\..\..\include\bitcoin\network\log\capture.hpp" />
<ClInclude Include="..\..\..\..\include\bitcoin\network\log\levels.hpp" />
<ClInclude Include="..\..\..\..\include\bitcoin\network\log\log.hpp" />
Expand Down Expand Up @@ -378,6 +377,7 @@
<None Include="..\..\..\..\include\bitcoin\network\impl\async\races\race_volume.ipp" />
<None Include="..\..\..\..\include\bitcoin\network\impl\async\subscriber.ipp" />
<None Include="..\..\..\..\include\bitcoin\network\impl\async\unsubscriber.ipp" />
<None Include="..\..\..\..\include\bitcoin\network\impl\channels\channel_rpc.ipp" />
<None Include="..\..\..\..\include\bitcoin\network\impl\messages\json_body.ipp" />
<None Include="..\..\..\..\include\bitcoin\network\impl\messages\rpc\broadcaster.ipp" />
<None Include="..\..\..\..\include\bitcoin\network\impl\messages\rpc\dispatcher.ipp" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,15 +35,18 @@
<UniqueIdentifier>{564EB540-D6B6-425C-0000-0000000000C1}</UniqueIdentifier>
</Filter>
<Filter Include="include\bitcoin\network\impl\async\races">
<UniqueIdentifier>{564EB540-D6B6-425C-0000-0000000000E1}</UniqueIdentifier>
<UniqueIdentifier>{564EB540-D6B6-425C-0000-0000000000F1}</UniqueIdentifier>
</Filter>
<Filter Include="include\bitcoin\network\impl\messages">
<Filter Include="include\bitcoin\network\impl\channels">
<UniqueIdentifier>{564EB540-D6B6-425C-0000-0000000000D1}</UniqueIdentifier>
</Filter>
<Filter Include="include\bitcoin\network\impl\messages">
<UniqueIdentifier>{564EB540-D6B6-425C-0000-0000000000E1}</UniqueIdentifier>
</Filter>
<Filter Include="include\bitcoin\network\impl\messages\rpc">
<UniqueIdentifier>{564EB540-D6B6-425C-0000-0000000000F1}</UniqueIdentifier>
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000002}</UniqueIdentifier>
</Filter>
<Filter Include="include\bitcoin\network\interface">
<Filter Include="include\bitcoin\network\interfaces">
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000006}</UniqueIdentifier>
</Filter>
<Filter Include="include\bitcoin\network\log">
Expand All @@ -53,25 +56,25 @@
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000008}</UniqueIdentifier>
</Filter>
<Filter Include="include\bitcoin\network\messages\http">
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000002}</UniqueIdentifier>
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000003}</UniqueIdentifier>
</Filter>
<Filter Include="include\bitcoin\network\messages\http\enums">
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000005}</UniqueIdentifier>
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000006}</UniqueIdentifier>
</Filter>
<Filter Include="include\bitcoin\network\messages\peer">
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000003}</UniqueIdentifier>
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000004}</UniqueIdentifier>
</Filter>
<Filter Include="include\bitcoin\network\messages\peer\detail">
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000006}</UniqueIdentifier>
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000007}</UniqueIdentifier>
</Filter>
<Filter Include="include\bitcoin\network\messages\peer\enums">
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000007}</UniqueIdentifier>
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000008}</UniqueIdentifier>
</Filter>
<Filter Include="include\bitcoin\network\messages\rpc">
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000004}</UniqueIdentifier>
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000005}</UniqueIdentifier>
</Filter>
<Filter Include="include\bitcoin\network\messages\rpc\enums">
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000008}</UniqueIdentifier>
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000009}</UniqueIdentifier>
</Filter>
<Filter Include="include\bitcoin\network\net">
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000009}</UniqueIdentifier>
Expand All @@ -83,7 +86,7 @@
<UniqueIdentifier>{564EB540-D6B6-425C-0000-0000000000A1}</UniqueIdentifier>
</Filter>
<Filter Include="resource">
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000009}</UniqueIdentifier>
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000010}</UniqueIdentifier>
</Filter>
<Filter Include="src">
<UniqueIdentifier>{564EB540-D6B6-425C-0000-000000000000}</UniqueIdentifier>
Expand Down Expand Up @@ -147,9 +150,6 @@
<ClCompile Include="..\..\..\..\src\channels\channel_peer.cpp">
<Filter>src\channels</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\src\channels\channel_rpc.cpp">
<Filter>src\channels</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\src\channels\channel_ws.cpp">
<Filter>src\channels</Filter>
</ClCompile>
Expand Down Expand Up @@ -506,17 +506,17 @@
<ClInclude Include="..\..\..\..\include\bitcoin\network\error.hpp">
<Filter>include\bitcoin\network</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\include\bitcoin\network\interface\http.hpp">
<Filter>include\bitcoin\network\interface</Filter>
<ClInclude Include="..\..\..\..\include\bitcoin\network\interfaces\http.hpp">
<Filter>include\bitcoin\network\interfaces</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\include\bitcoin\network\interface\interface.hpp">
<Filter>include\bitcoin\network\interface</Filter>
<ClInclude Include="..\..\..\..\include\bitcoin\network\interfaces\interfaces.hpp">
<Filter>include\bitcoin\network\interfaces</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\include\bitcoin\network\interface\peer_broadcast.hpp">
<Filter>include\bitcoin\network\interface</Filter>
<ClInclude Include="..\..\..\..\include\bitcoin\network\interfaces\peer_broadcast.hpp">
<Filter>include\bitcoin\network\interfaces</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\include\bitcoin\network\interface\peer_dispatch.hpp">
<Filter>include\bitcoin\network\interface</Filter>
<ClInclude Include="..\..\..\..\include\bitcoin\network\interfaces\peer_dispatch.hpp">
<Filter>include\bitcoin\network\interfaces</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\include\bitcoin\network\log\capture.hpp">
<Filter>include\bitcoin\network\log</Filter>
Expand Down Expand Up @@ -880,6 +880,9 @@
<None Include="..\..\..\..\include\bitcoin\network\impl\async\unsubscriber.ipp">
<Filter>include\bitcoin\network\impl\async</Filter>
</None>
<None Include="..\..\..\..\include\bitcoin\network\impl\channels\channel_rpc.ipp">
<Filter>include\bitcoin\network\impl\channels</Filter>
</None>
<None Include="..\..\..\..\include\bitcoin\network\impl\messages\json_body.ipp">
<Filter>include\bitcoin\network\impl\messages</Filter>
</None>
Expand Down
8 changes: 4 additions & 4 deletions include/bitcoin/network.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,10 @@
#include <bitcoin/network/config/config.hpp>
#include <bitcoin/network/config/endpoint.hpp>
#include <bitcoin/network/config/utilities.hpp>
#include <bitcoin/network/interface/http.hpp>
#include <bitcoin/network/interface/interface.hpp>
#include <bitcoin/network/interface/peer_broadcast.hpp>
#include <bitcoin/network/interface/peer_dispatch.hpp>
#include <bitcoin/network/interfaces/http.hpp>
#include <bitcoin/network/interfaces/interfaces.hpp>
#include <bitcoin/network/interfaces/peer_broadcast.hpp>
#include <bitcoin/network/interfaces/peer_dispatch.hpp>
#include <bitcoin/network/log/capture.hpp>
#include <bitcoin/network/log/levels.hpp>
#include <bitcoin/network/log/log.hpp>
Expand Down
4 changes: 2 additions & 2 deletions include/bitcoin/network/channels/channel_http.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
#include <bitcoin/network/async/async.hpp>
#include <bitcoin/network/channels/channel.hpp>
#include <bitcoin/network/define.hpp>
#include <bitcoin/network/interface/interface.hpp>
#include <bitcoin/network/interfaces/interfaces.hpp>
#include <bitcoin/network/log/log.hpp>
#include <bitcoin/network/messages/messages.hpp>
#include <bitcoin/network/net/net.hpp>
Expand Down Expand Up @@ -77,7 +77,7 @@ class BCT_API channel_http
/// Stranded handler invoked from stop().
void stopping(const code& ec) NOEXCEPT override;

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

/// Dispatch request to subscribers by verb type.
Expand Down
2 changes: 1 addition & 1 deletion include/bitcoin/network/channels/channel_peer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
#include <memory>
#include <bitcoin/network/channels/channel.hpp>
#include <bitcoin/network/define.hpp>
#include <bitcoin/network/interface/interface.hpp>
#include <bitcoin/network/interfaces/interfaces.hpp>
#include <bitcoin/network/log/log.hpp>
#include <bitcoin/network/memory.hpp>
#include <bitcoin/network/messages/messages.hpp>
Expand Down
43 changes: 24 additions & 19 deletions include/bitcoin/network/channels/channel_rpc.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,28 +22,25 @@
#include <memory>
#include <bitcoin/network/channels/channel.hpp>
#include <bitcoin/network/define.hpp>
#include <bitcoin/network/interface/interface.hpp>
#include <bitcoin/network/log/log.hpp>
#include <bitcoin/network/messages/messages.hpp>
#include <bitcoin/network/net/net.hpp>

namespace libbitcoin {
namespace network {

/// Read rpc-request and send rpc-response.
class BCT_API channel_rpc
/// Read rpc-request and send rpc-response, dispatch to Interface.
template <typename Interface>
class channel_rpc
: public channel
{
public:
typedef std::shared_ptr<channel_rpc> ptr;

// TODO: implement in node.
using interface = rpc::interface::http;
using dispatcher = rpc::dispatcher<interface>;
using dispatcher = rpc::dispatcher<Interface>;

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

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

/// Resume reading from the socket (requires strand).
void resume() NOEXCEPT override;
inline void resume() NOEXCEPT override;

/// Must call after successful message handling if no stop.
virtual void receive() NOEXCEPT;
virtual inline void receive() NOEXCEPT;

protected:
/// Stranded handler invoked from stop().
void stopping(const code& ec) NOEXCEPT override;
inline void stopping(const code& ec) NOEXCEPT override;

/// Read request buffer (not thread safe).
virtual http::flat_buffer& request_buffer() NOEXCEPT;
/// Read request buffer (requires strand).
virtual inline http::flat_buffer& request_buffer() NOEXCEPT;

/// Dispatch request to subscribers by requested method.
virtual void dispatch(const rpc::request_cptr& request) NOEXCEPT;
/// Override to dispatch request to subscribers by requested method.
virtual inline void dispatch(const rpc::request_cptr& request) NOEXCEPT;

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

/// Handlers.
virtual void handle_receive(const code& ec, size_t bytes,
virtual inline void handle_receive(const code& ec, size_t bytes,
const rpc::request_cptr& request) NOEXCEPT;
virtual void handle_send(const code& ec, size_t bytes,
virtual inline void handle_send(const code& ec, size_t bytes,
const rpc::response_cptr& response,
const result_handler& handler) NOEXCEPT;

Expand All @@ -108,4 +105,12 @@ class BCT_API channel_rpc
} // namespace network
} // namespace libbitcoin

#define TEMPLATE template <typename Interface>
#define CLASS channel_rpc<Interface>

#include <bitcoin/network/impl/channels/channel_rpc.ipp>

#undef CLASS
#undef TEMPLATE

#endif
Loading
Loading