Skip to content

Commit d659287

Browse files
authored
Merge pull request #31 from PLeVasseur/feature/fix-client-id-usage
[#31] Remove usage of client_id now since 1 app
2 parents 1eb59ec + 3220527 commit d659287

5 files changed

Lines changed: 44 additions & 50 deletions

File tree

up-transport-vsomeip/src/lib.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,17 @@ impl UPTransportVsomeip {
208208
config_path: Option<&Path>,
209209
runtime_config: Option<RuntimeConfig>,
210210
) -> Result<Self, UStatus> {
211+
let check_ue_version_major: Result<u8, _> = uri.ue_version_major.try_into();
212+
if check_ue_version_major.is_err() {
213+
return Err(UStatus::fail_with_code(
214+
UCode::INVALID_ARGUMENT,
215+
format!(
216+
"uri's ue_version_major doesn't fit allotted 8 bits: uri.ue_version_major: {}",
217+
uri.ue_version_major
218+
),
219+
));
220+
}
221+
211222
uri.verify_rpc_response().map_err(|e| {
212223
UStatus::fail_with_code(
213224
UCode::INVALID_ARGUMENT,

up-transport-vsomeip/src/message_conversions.rs

Lines changed: 13 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -158,8 +158,7 @@ where {
158158
UP_CLIENT_VSOMEIP_FN_TAG_CONVERT_UMSG_TO_VSOMEIP_MSG,
159159
app_request_id, req_id.to_hyphenated_string(),
160160
);
161-
162-
rpc_correlation_registry.insert_ue_request_correlation(app_request_id, req_id)?;
161+
rpc_correlation_registry.insert_ue_request_correlation(app_request_id, req_id, source)?;
163162

164163
vsomeip_msg
165164
.get_message_base_pinned()
@@ -284,6 +283,7 @@ pub struct VsomeipMessageToUMessage;
284283
impl VsomeipMessageToUMessage {
285284
pub async fn convert_vsomeip_msg_to_umsg(
286285
authority_name: &AuthorityName,
286+
self_uuri: &UUri,
287287
mechatronics_authority_name: &AuthorityName,
288288
rpc_correlation_registry: Arc<dyn RpcCorrelationRegistry>,
289289
vsomeip_message: &mut UniquePtr<MessageWrapper>,
@@ -304,6 +304,7 @@ impl VsomeipMessageToUMessage {
304304
message_type_e::MT_REQUEST => {
305305
Self::convert_vsomeip_mt_request_to_umsg(
306306
authority_name,
307+
self_uuri,
307308
mechatronics_authority_name,
308309
&rpc_correlation_registry,
309310
vsomeip_message,
@@ -321,7 +322,6 @@ impl VsomeipMessageToUMessage {
321322
}
322323
message_type_e::MT_RESPONSE => {
323324
Self::convert_vsomeip_mt_response_to_umsg(
324-
authority_name,
325325
mechatronics_authority_name,
326326
&rpc_correlation_registry,
327327
vsomeip_message,
@@ -331,7 +331,6 @@ impl VsomeipMessageToUMessage {
331331
}
332332
message_type_e::MT_ERROR => {
333333
Self::convert_vsomeip_mt_error_to_umsg(
334-
authority_name,
335334
mechatronics_authority_name,
336335
&rpc_correlation_registry,
337336
vsomeip_message,
@@ -351,14 +350,14 @@ impl VsomeipMessageToUMessage {
351350

352351
async fn convert_vsomeip_mt_request_to_umsg(
353352
authority_name: &AuthorityName,
353+
self_uuri: &UUri,
354354
mechatronics_authority_name: &AuthorityName,
355355
rpc_correlation_registry: &Arc<dyn RpcCorrelationRegistry>,
356356
vsomeip_message: &mut UniquePtr<MessageWrapper>,
357357
payload_bytes: Vec<u8>,
358358
) -> Result<UMessage, UStatus> {
359359
let request_id = vsomeip_message.get_message_base_pinned().get_request();
360360
let service_id = vsomeip_message.get_message_base_pinned().get_service();
361-
let client_id = vsomeip_message.get_message_base_pinned().get_client();
362361
let method_id = vsomeip_message.get_message_base_pinned().get_method();
363362
let interface_version = vsomeip_message
364363
.get_message_base_pinned()
@@ -380,9 +379,9 @@ impl VsomeipMessageToUMessage {
380379

381380
let source = UUri::try_from_parts(
382381
mechatronics_authority_name,
383-
client_id as u32, // TODO: Need to address this by adding instance_id in MSB
384-
1, // TODO: I don't see a way to get this
385-
0, // set to 0 as this is the resource_id of "me"
382+
self_uuri.ue_id,
383+
self_uuri.ue_version_major.try_into().unwrap(), // we have checked this fits prior
384+
0, // set to 0 as this is the resource_id of "intended for me"
386385
)
387386
.map_err(|e| {
388387
UStatus::fail_with_code(
@@ -428,33 +427,19 @@ impl VsomeipMessageToUMessage {
428427
}
429428

430429
async fn convert_vsomeip_mt_response_to_umsg(
431-
authority_name: &AuthorityName,
432430
mechatronics_authority_name: &AuthorityName,
433431
rpc_correlation_registry: &Arc<dyn RpcCorrelationRegistry>,
434432
vsomeip_message: &mut UniquePtr<MessageWrapper>,
435433
payload_bytes: Vec<u8>,
436434
) -> Result<UMessage, UStatus> {
437435
let request_id = vsomeip_message.get_message_base_pinned().get_request();
438436
let service_id = vsomeip_message.get_message_base_pinned().get_service();
439-
let client_id = vsomeip_message.get_message_base_pinned().get_client();
440437
let method_id = vsomeip_message.get_message_base_pinned().get_method();
441438
let interface_version = vsomeip_message
442439
.get_message_base_pinned()
443440
.get_interface_version();
444441

445442
trace!("MT_RESPONSE type");
446-
let sink = UUri::try_from_parts(
447-
authority_name,
448-
client_id as u32, // TODO: Need to address this by adding instance_id in MSB
449-
1, // TODO: I don't see a way to get this
450-
0, // set to 0 as this is the resource_id of "me"
451-
)
452-
.map_err(|e| {
453-
UStatus::fail_with_code(
454-
UCode::INVALID_ARGUMENT,
455-
format!("Unable to build sink UUri for MT_RESPONSE type: {e:?}"),
456-
)
457-
})?;
458443

459444
let source = UUri::try_from_parts(
460445
mechatronics_authority_name,
@@ -474,7 +459,9 @@ impl VsomeipMessageToUMessage {
474459
UP_CLIENT_VSOMEIP_FN_TAG_CONVERT_VSOMEIP_MSG_TO_UMSG,
475460
request_id
476461
);
477-
let req_id = rpc_correlation_registry.remove_ue_request_correlation(request_id)?;
462+
let (req_id, sink) = rpc_correlation_registry.remove_ue_request_correlation(request_id)?;
463+
464+
trace!("source: {source:?}; sink: {sink:?}");
478465

479466
let umsg_res = UMessageBuilder::response(sink, req_id, source)
480467
.with_comm_status(UCode::OK)
@@ -494,33 +481,19 @@ impl VsomeipMessageToUMessage {
494481
}
495482

496483
async fn convert_vsomeip_mt_error_to_umsg(
497-
authority_name: &AuthorityName,
498484
mechatronics_authority_name: &AuthorityName,
499485
rpc_correlation_registry: &Arc<dyn RpcCorrelationRegistry>,
500486
vsomeip_message: &mut UniquePtr<MessageWrapper>,
501487
payload_bytes: Vec<u8>,
502488
) -> Result<UMessage, UStatus> {
503489
let request_id = vsomeip_message.get_message_base_pinned().get_request();
504490
let service_id = vsomeip_message.get_message_base_pinned().get_service();
505-
let client_id = vsomeip_message.get_message_base_pinned().get_client();
506491
let method_id = vsomeip_message.get_message_base_pinned().get_method();
507492
let interface_version = vsomeip_message
508493
.get_message_base_pinned()
509494
.get_interface_version();
510495

511496
trace!("MT_ERROR type");
512-
let sink = UUri::try_from_parts(
513-
authority_name,
514-
client_id as u32, // TODO: Need to address this by adding instance_id in MSB
515-
1, // TODO: I don't see a way to get this
516-
0, // set to 0 as this is the resource_id of "me"
517-
)
518-
.map_err(|e| {
519-
UStatus::fail_with_code(
520-
UCode::INVALID_ARGUMENT,
521-
format!("Unable to build sink UUri for MT_ERROR type: {e:?}"),
522-
)
523-
})?;
524497

525498
let source = UUri::try_from_parts(
526499
mechatronics_authority_name,
@@ -540,11 +513,13 @@ impl VsomeipMessageToUMessage {
540513
UP_CLIENT_VSOMEIP_FN_TAG_CONVERT_VSOMEIP_MSG_TO_UMSG,
541514
request_id
542515
);
543-
let req_id = rpc_correlation_registry.remove_ue_request_correlation(request_id)?;
516+
let (req_id, sink) = rpc_correlation_registry.remove_ue_request_correlation(request_id)?;
544517
let comm_status = Self::vsomeip_err_code_to_ucode(
545518
vsomeip_message.get_message_base_pinned().get_return_code(),
546519
);
547520

521+
trace!("source: {source:?}; sink: {sink:?}");
522+
548523
let umsg_res = UMessageBuilder::response(sink, req_id, source)
549524
.with_comm_status(comm_status)
550525
.build_with_payload(payload_bytes, UPayloadFormat::UPAYLOAD_FORMAT_UNSPECIFIED);

up-transport-vsomeip/src/storage.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -129,15 +129,19 @@ impl RpcCorrelationRegistry for UPTransportVsomeipStorage {
129129
&self,
130130
someip_request_id: SomeIpRequestId,
131131
uprotocol_req_id: &UProtocolReqId,
132+
source_uri: &UUri,
132133
) -> Result<(), UStatus> {
133-
self.rpc_correlation
134-
.insert_ue_request_correlation(someip_request_id, uprotocol_req_id)
134+
self.rpc_correlation.insert_ue_request_correlation(
135+
someip_request_id,
136+
uprotocol_req_id,
137+
source_uri,
138+
)
135139
}
136140

137141
fn remove_ue_request_correlation(
138142
&self,
139143
someip_request_id: SomeIpRequestId,
140-
) -> Result<UProtocolReqId, UStatus> {
144+
) -> Result<(UProtocolReqId, UUri), UStatus> {
141145
self.rpc_correlation
142146
.remove_ue_request_correlation(someip_request_id)
143147
}

up-transport-vsomeip/src/storage/rpc_correlation.rs

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,9 @@ use log::trace;
1616
use std::collections::hash_map::Entry;
1717
use std::collections::HashMap;
1818
use std::sync::RwLock;
19-
use up_rust::{UCode, UStatus};
19+
use up_rust::{UCode, UStatus, UUri};
2020

21-
// TODO: Should attach the received Request in full so that when we're shutting down
22-
// the transport we can emit messages back to clients noting the error
23-
type UeRequestCorrelation = HashMap<SomeIpRequestId, UProtocolReqId>;
21+
type UeRequestCorrelation = HashMap<SomeIpRequestId, (UProtocolReqId, UUri)>;
2422
type MeRequestCorrelation = HashMap<UProtocolReqId, SomeIpRequestId>;
2523
type ClientIdSessionIdTracking = HashMap<ClientId, SessionId>;
2624

@@ -34,13 +32,14 @@ pub trait RpcCorrelationRegistry: Send + Sync {
3432
&self,
3533
someip_request_id: SomeIpRequestId,
3634
uprotocol_req_id: &UProtocolReqId,
35+
source_uri: &UUri,
3736
) -> Result<(), UStatus>;
3837

3938
/// Remove a uE [UProtocolReqId] based on an mE [SomeIpRequestId] for correlation
4039
fn remove_ue_request_correlation(
4140
&self,
4241
someip_request_id: SomeIpRequestId,
43-
) -> Result<UProtocolReqId, UStatus>;
42+
) -> Result<(UProtocolReqId, UUri), UStatus>;
4443

4544
/// Insert a uE [UProtocolReqId] and mE [SomeIpRequestId] for later correlation
4645
fn insert_me_request_correlation(
@@ -88,6 +87,7 @@ impl InMemoryRpcCorrelationRegistry {
8887
&self,
8988
someip_request_id: SomeIpRequestId,
9089
uprotocol_req_id: &UProtocolReqId,
90+
source_uri: &UUri,
9191
) -> Result<(), UStatus> {
9292
let mut ue_request_correlation = self.ue_request_correlation.write().unwrap();
9393
match ue_request_correlation.entry(someip_request_id) {
@@ -101,7 +101,7 @@ impl InMemoryRpcCorrelationRegistry {
101101
trace!("(app_request_id, req_id) inserted for later correlation in UE_REQUEST_CORRELATION: ({}, {})",
102102
someip_request_id, uprotocol_req_id.to_hyphenated_string(),
103103
);
104-
vac.insert(uprotocol_req_id.clone());
104+
vac.insert((uprotocol_req_id.clone(), source_uri.clone()));
105105
Ok(())
106106
}
107107
}
@@ -111,10 +111,12 @@ impl InMemoryRpcCorrelationRegistry {
111111
pub fn remove_ue_request_correlation(
112112
&self,
113113
someip_request_id: SomeIpRequestId,
114-
) -> Result<UProtocolReqId, UStatus> {
114+
) -> Result<(UProtocolReqId, UUri), UStatus> {
115115
let mut ue_request_correlation = self.ue_request_correlation.write().unwrap();
116116

117-
let Some(uprotocol_req_id) = ue_request_correlation.remove(&someip_request_id) else {
117+
let Some((uprotocol_req_id, source_uri)) =
118+
ue_request_correlation.remove(&someip_request_id)
119+
else {
118120
return Err(UStatus::fail_with_code(
119121
UCode::NOT_FOUND,
120122
format!(
@@ -124,7 +126,7 @@ impl InMemoryRpcCorrelationRegistry {
124126
));
125127
};
126128

127-
Ok(uprotocol_req_id)
129+
Ok((uprotocol_req_id, source_uri))
128130
}
129131

130132
/// Insert a uE [UProtocolReqId] and mE [SomeIpRequestId] for later correlation

vsomeip-proc-macro/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,10 @@ pub fn generate_message_handler_extern_c_fns(input: TokenStream) -> TokenStream
103103
let remote_authority_name = transport_storage.get_remote_authority();
104104

105105
let transport_storage_clone = transport_storage.clone();
106+
let uri = transport_storage.get_uri();
106107
let res = VsomeipMessageToUMessage::convert_vsomeip_msg_to_umsg(
107108
&authority_name,
109+
&uri,
108110
&remote_authority_name,
109111
transport_storage_clone,
110112
&mut vsomeip_msg_wrapper,

0 commit comments

Comments
 (0)