Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Add impl of basic host Signed-off-by: Bogdan Vaneev <warchantua@gmail.com> * Fix Signed-off-by: Bogdan Vaneev <warchantua@gmail.com> * Fix tests Signed-off-by: Bogdan Vaneev <warchantua@gmail.com> * Fix Signed-off-by: Bogdan Vaneev <warchantua@gmail.com>
- Loading branch information
Showing
19 changed files
with
476 additions
and
114 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,4 @@ | ||
# Copyright Soramitsu Co., Ltd. All Rights Reserved. | ||
# SPDX-License-Identifier: Apache-2.0 | ||
|
||
add_subdirectory(basic_host) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
# Copyright Soramitsu Co., Ltd. All Rights Reserved. | ||
# SPDX-License-Identifier: Apache-2.0 | ||
|
||
add_library(libp2p_basic_host | ||
basic_host.cpp | ||
) | ||
target_link_libraries(libp2p_basic_host | ||
outcome | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,116 @@ | ||
/** | ||
* Copyright Soramitsu Co., Ltd. All Rights Reserved. | ||
* SPDX-License-Identifier: Apache-2.0 | ||
*/ | ||
|
||
#include "libp2p/host/basic_host/basic_host.hpp" | ||
|
||
namespace libp2p::host { | ||
|
||
BasicHost::BasicHost(std::shared_ptr<peer::IdentityManager> idmgr, | ||
std::unique_ptr<network::Network> network, | ||
std::unique_ptr<peer::PeerRepository> repo) | ||
: idmgr_(std::move(idmgr)), | ||
network_(std::move(network)), | ||
repo_(std::move(repo)) { | ||
BOOST_ASSERT(idmgr_ != nullptr); | ||
BOOST_ASSERT(network_ != nullptr); | ||
BOOST_ASSERT(repo_ != nullptr); | ||
} | ||
|
||
std::string_view BasicHost::getLibp2pVersion() const { | ||
return "0.0.0"; | ||
} | ||
|
||
std::string_view BasicHost::getLibp2pClientVersion() const { | ||
return "kagome"; | ||
} | ||
|
||
peer::PeerId BasicHost::getId() const { | ||
return idmgr_->getId(); | ||
} | ||
|
||
peer::PeerInfo BasicHost::getPeerInfo() const { | ||
return {getId(), getObservedAddresses()}; | ||
} | ||
|
||
std::vector<multi::Multiaddress> BasicHost::getAddresses() const { | ||
return network_->getListener().getListenAddresses(); | ||
} | ||
|
||
std::vector<multi::Multiaddress> BasicHost::getAddressesInterfaces() const { | ||
return network_->getListener().getListenAddressesInterfaces(); | ||
} | ||
|
||
std::vector<multi::Multiaddress> BasicHost::getObservedAddresses() const { | ||
auto r = repo_->getAddressRepository().getAddresses(getId()); | ||
if (r) { | ||
return r.value(); | ||
} | ||
|
||
// we don't know our addresses | ||
return {}; | ||
} | ||
|
||
void BasicHost::setProtocolHandler( | ||
const peer::Protocol &proto, | ||
const std::function<connection::Stream::Handler> &handler) { | ||
network_->getListener().getRouter().setProtocolHandler(proto, handler); | ||
} | ||
|
||
void BasicHost::setProtocolHandler( | ||
const peer::Protocol &proto, | ||
const std::function<connection::Stream::Handler> &handler, | ||
const std::function<bool(const peer::Protocol &)> &predicate) { | ||
network_->getListener().getRouter().setProtocolHandler(proto, handler, | ||
predicate); | ||
} | ||
|
||
void BasicHost::newStream(const peer::PeerInfo &p, | ||
const peer::Protocol &protocol, | ||
const Host::StreamResultHandler &handler) { | ||
network_->getDialer().newStream(p, protocol, handler); | ||
} | ||
|
||
outcome::result<void> BasicHost::listen(const multi::Multiaddress &ma) { | ||
return network_->getListener().listen(ma); | ||
} | ||
|
||
outcome::result<void> BasicHost::closeListener( | ||
const multi::Multiaddress &ma) { | ||
return network_->getListener().closeListener(ma); | ||
} | ||
|
||
outcome::result<void> BasicHost::removeListener( | ||
const multi::Multiaddress &ma) { | ||
return network_->getListener().removeListener(ma); | ||
} | ||
|
||
void BasicHost::start() { | ||
network_->getListener().stop(); | ||
} | ||
|
||
void BasicHost::stop() { | ||
network_->getListener().start(); | ||
} | ||
|
||
network::Network &BasicHost::getNetwork() { | ||
return *network_; | ||
} | ||
|
||
peer::PeerRepository &BasicHost::getPeerRepository() { | ||
return *repo_; | ||
} | ||
|
||
network::Router &BasicHost::getRouter() { | ||
return network_->getListener().getRouter(); | ||
} | ||
|
||
event::Bus &BasicHost::getBus() { | ||
return bus_; | ||
} | ||
|
||
void BasicHost::connect(const peer::PeerInfo &p) { | ||
network_->getDialer().dial(p, [](auto && /* ignored */) {}); | ||
} | ||
} // namespace libp2p::host |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
/** | ||
* Copyright Soramitsu Co., Ltd. All Rights Reserved. | ||
* SPDX-License-Identifier: Apache-2.0 | ||
*/ | ||
|
||
#ifndef KAGOME_BASIC_HOST_HPP | ||
#define KAGOME_BASIC_HOST_HPP | ||
|
||
#include "libp2p/event/bus.hpp" | ||
#include "libp2p/host/host.hpp" | ||
#include "libp2p/peer/identity_manager.hpp" | ||
|
||
namespace libp2p::host { | ||
|
||
/** | ||
* @brief Basic host is a Host, which: | ||
* - has identity | ||
* - has access to a network | ||
* - has event bus | ||
* - has peer repository | ||
*/ | ||
class BasicHost : public Host { | ||
public: | ||
~BasicHost() override = default; | ||
|
||
BasicHost(std::shared_ptr<peer::IdentityManager> idmgr, | ||
std::unique_ptr<network::Network> network, | ||
std::unique_ptr<peer::PeerRepository> repo); | ||
|
||
std::string_view getLibp2pVersion() const override; | ||
|
||
std::string_view getLibp2pClientVersion() const override; | ||
|
||
peer::PeerId getId() const override; | ||
|
||
peer::PeerInfo getPeerInfo() const override; | ||
|
||
std::vector<multi::Multiaddress> getAddresses() const override; | ||
|
||
std::vector<multi::Multiaddress> getAddressesInterfaces() const override; | ||
|
||
std::vector<multi::Multiaddress> getObservedAddresses() const override; | ||
|
||
void connect(const peer::PeerInfo &p) override; | ||
|
||
void setProtocolHandler( | ||
const peer::Protocol &proto, | ||
const std::function<connection::Stream::Handler> &handler) override; | ||
|
||
void setProtocolHandler( | ||
const peer::Protocol &proto, | ||
const std::function<connection::Stream::Handler> &handler, | ||
const std::function<bool(const peer::Protocol &)> &predicate) override; | ||
|
||
void newStream(const peer::PeerInfo &p, const peer::Protocol &protocol, | ||
const StreamResultHandler &handler) override; | ||
|
||
outcome::result<void> listen(const multi::Multiaddress &ma) override; | ||
|
||
outcome::result<void> closeListener(const multi::Multiaddress &ma) override; | ||
|
||
outcome::result<void> removeListener( | ||
const multi::Multiaddress &ma) override; | ||
|
||
void start() override; | ||
|
||
void stop() override; | ||
|
||
network::Network &getNetwork() override; | ||
|
||
peer::PeerRepository &getPeerRepository() override; | ||
|
||
network::Router &getRouter() override; | ||
|
||
event::Bus &getBus() override; | ||
|
||
private: | ||
std::shared_ptr<peer::IdentityManager> idmgr_; | ||
std::unique_ptr<network::Network> network_; | ||
std::unique_ptr<peer::PeerRepository> repo_; | ||
|
||
event::Bus bus_; | ||
}; | ||
|
||
} // namespace libp2p::host | ||
|
||
#endif // KAGOME_BASIC_HOST_HPP |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.