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

Method send_subscribe

implementation/routing/src/routing_manager_client.cpp:553–606  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

551}
552
553void routing_manager_client::send_subscribe(client_t _client, service_t _service, instance_t _instance, eventgroup_t _eventgroup,
554 major_version_t _major, event_t _event,
555 const std::shared_ptr<debounce_filter_impl_t>& _filter) {
556
557 if (_event == ANY_EVENT) {
558 auto const sec_client = get_sec_client();
559 if (!is_subscribe_to_any_event_allowed(&sec_client, _client, _service, _instance, _eventgroup, false)) {
560 VSOMEIP_WARNING << "vSomeIP Security: Client 0x" << hex4(_client) << " : routing_manager_proxy::subscribe: "
561 << " isn't allowed to subscribe to service/instance/event " << hex4(_service) << "/" << hex4(_instance)
562 << "/ANY_EVENT which violates the security policy ~> Skip subscribe!";
563 return;
564 }
565 } else {
566 auto const sec_client = get_sec_client();
567 if (VSOMEIP_SEC_OK
568 != configuration_->get_security()->is_client_allowed_to_access_member(&sec_client, _service, _instance, _event)) {
569 VSOMEIP_WARNING << "vSomeIP Security: Client 0x" << hex4(_client) << " : routing_manager_proxy::subscribe: "
570 << " isn't allowed to subscribe to service/instance/event " << hex4(_service) << "/" << hex4(_instance) << "/"
571 << hex4(_event);
572 return;
573 }
574 }
575
576 protocol::subscribe_command its_command;
577 its_command.set_client(_client);
578 its_command.set_service(_service);
579 its_command.set_instance(_instance);
580 its_command.set_eventgroup(_eventgroup);
581 its_command.set_major(_major);
582 its_command.set_event(_event);
583 its_command.set_pending_id(PENDING_SUBSCRIPTION_ID);
584 its_command.set_filter(_filter);
585
586 std::vector<byte_t> its_buffer;
587 its_command.serialize(its_buffer);
588
589 client_t its_target_client = find_local_client(_service, _instance);
590 if (its_target_client != VSOMEIP_ROUTING_CLIENT) {
591 auto its_target = ep_mgr_->find_or_create_local_client(its_target_client);
592 if (its_target) {
593 its_target->send(&its_buffer[0], uint32_t(its_buffer.size()));
594 } else {
595 VSOMEIP_WARNING_P << "No target available to send subscription. Client=0x" << hex4(_client) << " service=" << hex4(_service)
596 << "." << hex4(_instance) << "." << hex2(_major) << " event=" << hex4(_event);
597 }
598 } else {
599 std::scoped_lock its_sender_lock{sender_mutex_};
600 if (sender_) {
601 sender_->send(&its_buffer[0], uint32_t(its_buffer.size()));
602 } else {
603 VSOMEIP_ERROR_P << "Failed due to a missing sender";
604 }
605 }
606}
607
608void routing_manager_client::send_subscribe_nack(client_t _subscriber, service_t _service, instance_t _instance, eventgroup_t _eventgroup,
609 event_t _event, remote_subscription_id_t _id) {

Callers

nothing calls this directly

Calls 15

hex4Function · 0.85
hex2Function · 0.85
get_securityMethod · 0.80
set_filterMethod · 0.80
set_clientMethod · 0.45
set_serviceMethod · 0.45
set_instanceMethod · 0.45
set_eventgroupMethod · 0.45
set_majorMethod · 0.45
set_eventMethod · 0.45
set_pending_idMethod · 0.45

Tested by

no test coverage detected