| 3867 | return services_; |
| 3868 | } |
| 3869 | bool routing_manager_impl::offer_service_base(client_t _client, service_t _service, instance_t _instance, major_version_t _major, |
| 3870 | minor_version_t _minor) { |
| 3871 | (void)_client; |
| 3872 | |
| 3873 | // Remote route (incoming only) |
| 3874 | auto its_info = find_service(_service, _instance); |
| 3875 | if (its_info) { |
| 3876 | if (!its_info->is_local()) { |
| 3877 | return false; |
| 3878 | } else if (its_info->get_major() == _major && its_info->get_minor() == _minor) { |
| 3879 | its_info->set_ttl(DEFAULT_TTL); |
| 3880 | } else { |
| 3881 | VSOMEIP_ERROR_P << "Service property mismatch (" << hex4(_client) << "): [" << hex4(_service) << "." << hex4(_instance) << ":" |
| 3882 | << static_cast<std::uint32_t>(its_info->get_major()) << "." << its_info->get_minor() |
| 3883 | << "] passed: " << static_cast<std::uint32_t>(_major) << ":" << _minor; |
| 3884 | return false; |
| 3885 | } |
| 3886 | } else { |
| 3887 | its_info = create_service_info(_service, _instance, _major, _minor, DEFAULT_TTL, true); |
| 3888 | } |
| 3889 | { |
| 3890 | std::scoped_lock its_lock(events_mutex_); |
| 3891 | // Set major version for all registered events of this service and instance |
| 3892 | const auto search = events_.find(service_instance_t{_service, _instance}); |
| 3893 | |
| 3894 | if (search != events_.end()) { |
| 3895 | for (const auto& [event_id, event_ptr] : search->second) { |
| 3896 | event_ptr->set_version(_major); |
| 3897 | } |
| 3898 | } |
| 3899 | } |
| 3900 | return true; |
| 3901 | } |
| 3902 | |
| 3903 | std::shared_ptr<serviceinfo> routing_manager_impl::create_service_info(service_t _service, instance_t _instance, major_version_t _major, |
| 3904 | minor_version_t _minor, ttl_t _ttl, bool _is_local_service) { |