summaryrefslogtreecommitdiff
path: root/implementation/service_discovery/include/service_discovery_impl.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'implementation/service_discovery/include/service_discovery_impl.hpp')
-rw-r--r--implementation/service_discovery/include/service_discovery_impl.hpp49
1 files changed, 21 insertions, 28 deletions
diff --git a/implementation/service_discovery/include/service_discovery_impl.hpp b/implementation/service_discovery/include/service_discovery_impl.hpp
index c4e3835..b2270e1 100644
--- a/implementation/service_discovery/include/service_discovery_impl.hpp
+++ b/implementation/service_discovery/include/service_discovery_impl.hpp
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2018 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+// Copyright (C) 2014-2021 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
@@ -44,11 +44,7 @@ class serviceentry_impl;
class service_discovery_host;
class subscription;
-typedef std::map<service_t,
- std::map<instance_t,
- std::shared_ptr<request>
- >
- > requests_t;
+using requests_t = std::map<service_t, std::map<instance_t, std::shared_ptr<request>>>;
struct entry_data_t {
std::shared_ptr<entry_impl> entry_;
@@ -63,7 +59,7 @@ public:
const std::shared_ptr<configuration>& _configuration);
virtual ~service_discovery_impl();
- boost::asio::io_service & get_io();
+ boost::asio::io_context &get_io();
void init();
void start();
@@ -86,14 +82,15 @@ public:
void on_message(const byte_t *_data, length_t _length,
const boost::asio::ip::address &_sender,
- const boost::asio::ip::address &_destination);
+ bool _is_multicast);
void on_endpoint_connected(
service_t _service, instance_t _instance,
const std::shared_ptr<endpoint> &_endpoint);
void offer_service(const std::shared_ptr<serviceinfo> &_info);
- void stop_offer_service(const std::shared_ptr<serviceinfo> &_info);
+ bool stop_offer_service(const std::shared_ptr<serviceinfo> &_info, bool _send);
+ bool send_collected_stop_offers(const std::vector<std::shared_ptr<serviceinfo>> &_infos);
void set_diagnosis_mode(const bool _activate);
@@ -103,16 +100,19 @@ public:
void update_remote_subscription(
const std::shared_ptr<remote_subscription> &_subscription);
- void register_sd_acceptance_handler(sd_acceptance_handler_t _handler);
+ void register_sd_acceptance_handler(const sd_acceptance_handler_t &_handler);
void register_reboot_notification_handler(
- reboot_notification_handler_t _handler);
+ const reboot_notification_handler_t &_handler);
private:
std::pair<session_t, bool> get_session(const boost::asio::ip::address &_address);
void increment_session(const boost::asio::ip::address &_address);
bool is_reboot(const boost::asio::ip::address &_sender,
- const boost::asio::ip::address &_destination,
- bool _reboot_flag, session_t _session);
+ bool _is_multicast, bool _reboot_flag, session_t _session);
+
+ bool check_session_id_sequence(const boost::asio::ip::address &_sender,
+ const bool _is_multicast, const session_t &_session,
+ session_t &_missing_session);
void insert_find_entries(std::vector<std::shared_ptr<message_impl> > &_messages,
const requests_t &_requests);
@@ -120,12 +120,6 @@ private:
const services_t &_services, bool _ignore_phase);
void insert_offer_service(std::vector<std::shared_ptr<message_impl> > &_messages,
const std::shared_ptr<const serviceinfo> &_info);
- enum remote_offer_type_e : std::uint8_t {
- RELIABLE_UNRELIABLE,
- RELIABLE,
- UNRELIABLE,
- UNKNOWN = 0xff
- };
entry_data_t create_eventgroup_entry(
service_t _service, instance_t _instance, eventgroup_t _eventgroup,
@@ -138,7 +132,7 @@ private:
const std::shared_ptr<endpoint_definition> &_target,
const std::set<client_t> &_clients);
- typedef std::set<std::pair<bool, std::uint16_t>> expired_ports_t;
+ using expired_ports_t = std::set<std::pair<bool, std::uint16_t>>;
struct sd_acceptance_state_t {
explicit sd_acceptance_state_t(expired_ports_t& _expired_ports)
: expired_ports_(_expired_ports),
@@ -178,7 +172,7 @@ private:
const std::vector<std::shared_ptr<option_impl> > &_options,
std::shared_ptr<remote_subscription_ack> &_acknowledgement,
const boost::asio::ip::address &_sender,
- const boost::asio::ip::address &_destination,
+ bool _is_multicast,
bool _is_stop_subscribe_subscribe, bool _force_initial_events,
const sd_acceptance_state_t& _sd_ac_state);
void handle_eventgroup_subscription(service_t _service,
@@ -215,7 +209,7 @@ private:
instance_t _instance,
const std::shared_ptr<endpoint_definition>& its_endpoint);
- void start_ttl_timer();
+ void start_ttl_timer(int _shift = 0);
void stop_ttl_timer();
void check_ttl(const boost::system::error_code &_error);
@@ -310,13 +304,13 @@ private:
void on_last_msg_received_timer_expired(const boost::system::error_code &_error);
void stop_last_msg_received_timer();
- remote_offer_type_e get_remote_offer_type(
+ reliability_type_e get_remote_offer_type(
service_t _service, instance_t _instance) const;
- remote_offer_type_e get_remote_offer_type(
+ reliability_type_e get_remote_offer_type(
const std::shared_ptr<subscription> &_subscription) const;
bool update_remote_offer_type(service_t _service, instance_t _instance,
- remote_offer_type_e _offer_type,
+ reliability_type_e _offer_type,
const boost::asio::ip::address &_reliable_address,
std::uint16_t _reliable_port,
const boost::asio::ip::address &_unreliable_address,
@@ -362,7 +356,7 @@ private:
const std::shared_ptr<subscription>& _subscription);
private:
- boost::asio::io_service &io_;
+ boost::asio::io_context &io_;
service_discovery_host *host_;
std::shared_ptr<configuration> configuration_;
@@ -463,7 +457,7 @@ private:
std::chrono::milliseconds last_msg_received_timer_timeout_;
mutable std::mutex remote_offer_types_mutex_;
- std::map<std::pair<service_t, instance_t>, remote_offer_type_e> remote_offer_types_;
+ std::map<std::pair<service_t, instance_t>, reliability_type_e> remote_offer_types_;
std::map<boost::asio::ip::address,
std::map<std::pair<bool, std::uint16_t>,
std::set<std::pair<service_t, instance_t>>>> remote_offers_by_ip_;
@@ -479,4 +473,3 @@ private:
} // namespace vsomeip_v3
#endif // VSOMEIP_V3_SD_SERVICE_DISCOVERY_IMPL_
-