summaryrefslogtreecommitdiff
path: root/implementation/service_discovery
diff options
context:
space:
mode:
Diffstat (limited to 'implementation/service_discovery')
-rw-r--r--implementation/service_discovery/include/service_discovery_host.hpp5
-rw-r--r--implementation/service_discovery/src/service_discovery_impl.cpp7
2 files changed, 10 insertions, 2 deletions
diff --git a/implementation/service_discovery/include/service_discovery_host.hpp b/implementation/service_discovery/include/service_discovery_host.hpp
index 710e4e7..0e1de9e 100644
--- a/implementation/service_discovery/include/service_discovery_host.hpp
+++ b/implementation/service_discovery/include/service_discovery_host.hpp
@@ -44,7 +44,7 @@ public:
virtual bool send_to(const std::shared_ptr<endpoint_definition> &_target,
const byte_t *_data, uint32_t _size, uint16_t _sd_port) = 0;
- virtual std::chrono::milliseconds add_routing_info(service_t _service, instance_t _instance,
+ virtual void add_routing_info(service_t _service, instance_t _instance,
major_version_t _major, minor_version_t _minor, ttl_t _ttl,
const boost::asio::ip::address &_reliable_address,
uint16_t _reliable_port,
@@ -81,6 +81,9 @@ public:
virtual void expire_subscriptions(const boost::asio::ip::address &_address) = 0;
virtual void expire_services(const boost::asio::ip::address &_address) = 0;
+ virtual void on_reboot(const boost::asio::ip::address &_address) = 0;
+
+
virtual bool on_subscribe_accepted(service_t _service, instance_t _instance,
eventgroup_t _eventgroup, std::shared_ptr<endpoint_definition> _target,
const std::chrono::steady_clock::time_point &_expiration) = 0;
diff --git a/implementation/service_discovery/src/service_discovery_impl.cpp b/implementation/service_discovery/src/service_discovery_impl.cpp
index 9fc955d..7318eda 100644
--- a/implementation/service_discovery/src/service_discovery_impl.cpp
+++ b/implementation/service_discovery/src/service_discovery_impl.cpp
@@ -1039,6 +1039,7 @@ void service_discovery_impl::on_message(const byte_t *_data, length_t _length,
its_message->get_reboot_flag(), its_message->get_session())) {
host_->expire_subscriptions(_sender);
host_->expire_services(_sender);
+ host_->on_reboot(_sender);
}
std::chrono::milliseconds expired = stop_ttl_timer();
@@ -1214,10 +1215,14 @@ void service_discovery_impl::process_offerservice_serviceentry(
its_request->set_sent_counter(std::uint8_t(repetitions_max_ + 1));
}
- smallest_ttl_ = host_->add_routing_info(_service, _instance,
+ host_->add_routing_info(_service, _instance,
_major, _minor, _ttl,
_reliable_address, _reliable_port,
_unreliable_address, _unreliable_port);
+ const std::chrono::milliseconds its_precise_ttl(_ttl * 1000);
+ if (its_precise_ttl < smallest_ttl_) {
+ smallest_ttl_ = its_precise_ttl;
+ }
std::lock_guard<std::mutex> its_lock(subscribed_mutex_);
auto found_service = subscribed_.find(_service);