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

Method send_error

implementation/routing/src/routing_manager_impl.cpp:2273–2325  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2271}
2272
2273void routing_manager_impl::send_error(return_code_e _return_code, const byte_t* _data, length_t _size, instance_t _instance, bool _reliable,
2274 boardnet_endpoint* const _receiver, const boost::asio::ip::address& _remote_address,
2275 std::uint16_t _remote_port) {
2276
2277 client_t its_client = 0;
2278 service_t its_service = 0;
2279 method_t its_method = 0;
2280 session_t its_session = 0;
2281 major_version_t its_version = 0;
2282
2283 if (_size >= VSOMEIP_CLIENT_POS_MAX)
2284 its_client = bithelper::read_uint16_be(&_data[VSOMEIP_CLIENT_POS_MIN]);
2285 if (_size >= VSOMEIP_SERVICE_POS_MAX)
2286 its_service = bithelper::read_uint16_be(&_data[VSOMEIP_SERVICE_POS_MIN]);
2287 if (_size >= VSOMEIP_METHOD_POS_MAX)
2288 its_method = bithelper::read_uint16_be(&_data[VSOMEIP_METHOD_POS_MIN]);
2289 if (_size >= VSOMEIP_SESSION_POS_MAX)
2290 its_session = bithelper::read_uint16_be(&_data[VSOMEIP_SESSION_POS_MIN]);
2291 if (_size >= VSOMEIP_INTERFACE_VERSION_POS)
2292 its_version = _data[VSOMEIP_INTERFACE_VERSION_POS];
2293
2294 auto error_message = runtime::get()->create_message(_reliable);
2295 error_message->set_client(its_client);
2296 error_message->set_instance(_instance);
2297 error_message->set_interface_version(its_version);
2298 error_message->set_message_type(message_type_e::MT_ERROR);
2299 error_message->set_method(its_method);
2300 error_message->set_return_code(_return_code);
2301 error_message->set_service(its_service);
2302 error_message->set_session(its_session);
2303 {
2304 std::shared_ptr<serializer> its_serializer(get_serializer());
2305 if (its_serializer->serialize(error_message.get())) {
2306 if (_receiver) {
2307 auto its_endpoint_def = std::make_shared<endpoint_definition>(_remote_address, _remote_port, _receiver->is_reliable());
2308 its_endpoint_def->set_remote_port(_receiver->get_local_port());
2309 auto its_endpoint =
2310 ep_mgr_impl_->find_server_endpoint(its_endpoint_def->get_remote_port(), its_endpoint_def->is_reliable());
2311 if (its_endpoint) {
2312 its_endpoint->send_error(its_endpoint_def, its_serializer->get_data(), its_serializer->get_size());
2313 trace::header its_header;
2314 if (its_header.prepare(its_endpoint, true, _instance,
2315 its_endpoint->is_reliable() ? trace::protocol_e::tcp : trace::protocol_e::udp))
2316 tc_->trace(its_header.data_, VSOMEIP_TRACE_HEADER_SIZE, _data, _size);
2317 }
2318 }
2319 its_serializer->reset();
2320 put_serializer(its_serializer);
2321 } else {
2322 VSOMEIP_ERROR << "Failed to serialize error message.";
2323 }
2324 }
2325}
2326
2327std::chrono::steady_clock::time_point routing_manager_impl::expire_subscriptions(bool _force) {
2328

Callers

nothing calls this directly

Calls 15

create_messageMethod · 0.80
set_interface_versionMethod · 0.80
set_message_typeMethod · 0.80
set_methodMethod · 0.80
set_return_codeMethod · 0.80
set_remote_portMethod · 0.80
find_server_endpointMethod · 0.80
set_clientMethod · 0.45
set_instanceMethod · 0.45
set_serviceMethod · 0.45
set_sessionMethod · 0.45
serializeMethod · 0.45

Tested by

no test coverage detected