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

Method on_message

implementation/routing/src/routing_manager_client.cpp:826–1483  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

824}
825
826void routing_manager_client::on_message(const byte_t* _data, length_t _size, const local_client_data& _peer_data) {
827 protocol::id_e its_id;
828 client_t its_client;
829 service_t its_service;
830 instance_t its_instance;
831 eventgroup_t its_eventgroup;
832 event_t its_event;
833 major_version_t its_major;
834 client_t its_subscriber;
835 remote_subscription_id_t its_pending_id(PENDING_SUBSCRIPTION_ID);
836#ifndef VSOMEIP_DISABLE_SECURITY
837 bool is_internal_policy_update(false);
838#endif // !VSOMEIP_DISABLE_SECURITY
839 std::vector<byte_t> its_buffer(_data, _data + _size);
840 protocol::error_e its_error;
841
842 protocol::command_header its_header{};
843 if (protocol::deserialize(_data, _size, its_header)) {
844 its_id = its_header.id_;
845 its_client = its_header.client_;
846
847 bool is_from_routing = (_peer_data.id_ == VSOMEIP_ROUTING_CLIENT);
848
849 if (configuration_->is_security_enabled() && routing_mode_ == routing_mode_e::UDS_ONLY && !is_from_routing
850 && _peer_data.id_ != its_client) {
851 VSOMEIP_WARNING_P << "Client 0x" << hex4(get_client()) << " received a message with command " << static_cast<int>(its_id)
852 << " from " << hex4(its_client) << " which doesn't match the bound client " << hex4(_peer_data.id_)
853 << " ~> skip message!";
854 return;
855 }
856
857 switch (its_id) {
858 case protocol::id_e::SEND_ID: {
859 protocol::send_command its_send_command(protocol::id_e::SEND_ID);
860 its_send_command.deserialize(its_buffer, its_error);
861 if (its_error == protocol::error_e::ERROR_OK) {
862
863 auto a_deserializer = get_deserializer();
864 a_deserializer->set_data(its_send_command.get_message());
865 std::shared_ptr<message_impl> its_message = a_deserializer->deserialize_message();
866 a_deserializer->reset();
867 put_deserializer(a_deserializer);
868
869 if (its_message) {
870 its_message->set_instance(its_send_command.get_instance());
871 its_message->set_reliable(its_send_command.is_reliable());
872 its_message->set_check_result(its_send_command.get_status());
873 its_message->set_sec_client(_peer_data.sec_client_);
874 its_message->set_env(_peer_data.env_);
875
876 if (!is_from_routing) {
877 if (utility::is_request(its_message->get_message_type())) {
878 if (configuration_->is_security_enabled() && routing_mode_ == routing_mode_e::UDS_ONLY
879 && its_message->get_client() != _peer_data.id_) {
880 VSOMEIP_WARNING << "vSomeIP Security: Client 0x" << hex4(get_client())
881 << " received a request from client 0x" << hex4(its_message->get_client())
882 << " to service/instance/method " << hex4(its_message->get_service()) << "/"
883 << hex4(its_message->get_instance()) << "/" << hex4(its_message->get_method())

Callers

nothing calls this directly

Calls 15

deserializeFunction · 0.85
hex4Function · 0.85
is_security_enabledMethod · 0.80
deserialize_messageMethod · 0.80
get_statusMethod · 0.80
set_sec_clientMethod · 0.80
set_envMethod · 0.80
get_methodMethod · 0.80
get_securityMethod · 0.80
is_security_externalMethod · 0.80
countMethod · 0.80

Tested by

no test coverage detected