MCPcopy Create free account
hub / github.com/COVESA/vsomeip / insert_subscription

Method insert_subscription

implementation/routing/src/routing_manager_impl.cpp:4291–4329  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4289}
4290
4291bool routing_manager_impl::insert_subscription(service_t _service, instance_t _instance, eventgroup_t _eventgroup, event_t _event,
4292 const std::shared_ptr<debounce_filter_impl_t>& _filter, client_t _client,
4293 std::scoped_lock<std::mutex> const& _lck) {
4294
4295 bool is_inserted(false);
4296 if (_event != ANY_EVENT) { // subscribe to specific event
4297 std::shared_ptr<event> its_event = find_event(_service, _instance, _event);
4298 if (its_event) {
4299 is_inserted = its_event->add_subscriber(_eventgroup, _filter, _client, host_->is_routing());
4300 } else {
4301 VSOMEIP_WARNING_P << "(" << hex4(_client) << "): [" << hex4(_service) << "." << hex4(_instance) << "." << hex4(_eventgroup)
4302 << "." << hex4(_event) << "] received subscription for unknown (unrequested /unoffered) event. Creating"
4303 << " placeholder event holding subscription until event is requested/offered.";
4304 is_inserted = create_placeholder_event_and_subscribe(_service, _instance, _eventgroup, _event, _filter, _client, _lck);
4305 }
4306 } else { // subscribe to all events of the eventgroup
4307 std::shared_ptr<eventgroupinfo> its_eventgroup = find_eventgroup(_service, _instance, _eventgroup);
4308 bool create_place_holder(false);
4309 if (its_eventgroup) {
4310 std::set<std::shared_ptr<event>> its_events = its_eventgroup->get_events();
4311 if (!its_events.size()) {
4312 create_place_holder = true;
4313 } else {
4314 for (const auto& e : its_events) {
4315 is_inserted = e->add_subscriber(_eventgroup, _filter, _client, host_->is_routing()) || is_inserted;
4316 }
4317 }
4318 } else {
4319 create_place_holder = true;
4320 }
4321 if (create_place_holder) {
4322 VSOMEIP_WARNING_P << ":(" << hex4(_client) << "): [" << hex4(_service) << "." << hex4(_instance) << "." << hex4(_eventgroup)
4323 << "." << hex4(_event) << "] received subscription for unknown (unrequested /unoffered) eventgroup. Creating"
4324 << " placeholder event holding subscription until event is requested/offered.";
4325 is_inserted = create_placeholder_event_and_subscribe(_service, _instance, _eventgroup, _event, _filter, _client, _lck);
4326 }
4327 }
4328 return is_inserted;
4329}
4330
4331void routing_manager_impl::clear_shadow_subscriptions(void) {
4332 std::scoped_lock its_lock(events_mutex_);

Callers

nothing calls this directly

Calls 5

hex4Function · 0.85
add_subscriberMethod · 0.80
get_eventsMethod · 0.80
is_routingMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected