diff --git a/components/net/cpp/include/ftl/net/universe.hpp b/components/net/cpp/include/ftl/net/universe.hpp index 6cc631a06ac509b96f615aa046c51bf5b55ded81..193d29ace1148489d34dd24aa3b325b38508766c 100644 --- a/components/net/cpp/include/ftl/net/universe.hpp +++ b/components/net/cpp/include/ftl/net/universe.hpp @@ -85,6 +85,9 @@ class Universe : public ftl::Configurable { * @param addr URI giving protocol, interface and port */ Peer *connect(const std::string &addr); + + bool isConnected(const ftl::URI &uri); + bool isConnected(const std::string &s); size_t numberOfPeers() const { return peers_.size(); } diff --git a/components/net/cpp/src/universe.cpp b/components/net/cpp/src/universe.cpp index 7a6b3404eebb2db338bd1243ae4c7ceb00a077e3..4fdba608f62ea64ef4cd16c547ecaa018034c8f6 100644 --- a/components/net/cpp/src/universe.cpp +++ b/components/net/cpp/src/universe.cpp @@ -148,15 +148,26 @@ bool Universe::listen(const string &addr) { return l->isListening(); } +bool Universe::isConnected(const ftl::URI &uri) { + UNIQUE_LOCK(net_mutex_,lk); + return (peer_by_uri_.find(uri.getBaseURI()) != peer_by_uri_.end()); +} + +bool Universe::isConnected(const std::string &s) { + ftl::URI uri(s); + return isConnected(uri); +} + Peer *Universe::connect(const string &addr) { + ftl::URI u(addr); + // Check if already connected or if self { UNIQUE_LOCK(net_mutex_,lk); - if (peer_by_uri_.find(addr) != peer_by_uri_.end()) { - return peer_by_uri_[addr]; + if (peer_by_uri_.find(u.getBaseURI()) != peer_by_uri_.end()) { + return peer_by_uri_.at(u.getBaseURI()); } - ftl::URI u(addr); if (u.getHost() == "localhost" || u.getHost() == "127.0.0.1") { for (const auto *l : listeners_) { if (l->port() == u.getPort()) { @@ -173,7 +184,7 @@ Peer *Universe::connect(const string &addr) { if (p->status() != Peer::kInvalid) { UNIQUE_LOCK(net_mutex_,lk); peers_.push_back(p); - peer_by_uri_[addr] = p; + peer_by_uri_[u.getBaseURI()] = p; } _installBindings(p); diff --git a/components/streams/src/feed.cpp b/components/streams/src/feed.cpp index 47c388ca3d64ad4e14e620da7ef4fa3a6eb5c745..a06e43b04663f072e3bee641a162af0704360e85 100644 --- a/components/streams/src/feed.cpp +++ b/components/streams/src/feed.cpp @@ -600,8 +600,13 @@ bool Feed::sourceAvailable(const std::string &uri) { bool Feed::sourceActive(const std::string &suri) { ftl::URI uri(suri); - SHARED_LOCK(mtx_, lk); - return fsid_lookup_.count(uri.getBaseURI()) > 0; + + if (uri.getScheme() == ftl::URI::SCHEME_TCP || uri.getScheme() == ftl::URI::SCHEME_WS) { + return net_->isConnected(uri); + } else { + SHARED_LOCK(mtx_, lk); + return fsid_lookup_.count(uri.getBaseURI()) > 0; + } } std::string Feed::getName(const std::string &puri) {