nrf52840dk_dynamic_apps_and_policies/
app_id_assigner_name_metadata.rs1use kernel::process::{Process, ProcessBinary, ShortId};
22use kernel::process_checker::Compress;
23
24pub struct AppIdAssignerNameMetadata {}
25
26impl AppIdAssignerNameMetadata {
27 pub fn new() -> Self {
28 Self {}
29 }
30}
31
32impl kernel::process_checker::Compress for AppIdAssignerNameMetadata {
33 fn to_short_id(&self, process: &ProcessBinary) -> ShortId {
34 let metadata = process.credential.get().map_or(0xF, |accepted_credential| {
37 accepted_credential
38 .metadata
39 .map_or(0xF, |metadata| metadata.metadata) as u32
40 });
41
42 let name = process.header.get_package_name().unwrap_or("");
43 let sum = kernel::utilities::helpers::crc32_posix(name.as_bytes());
44
45 let sid = ((metadata & 0xF) << 28) | (sum & 0xFFFFFFF);
47
48 core::num::NonZeroU32::new(sid).into()
49 }
50}
51
52impl kernel::process_checker::AppUniqueness for AppIdAssignerNameMetadata {
54 fn different_identifier(&self, process_a: &ProcessBinary, process_b: &ProcessBinary) -> bool {
55 self.to_short_id(process_a) != self.to_short_id(process_b)
56 }
57
58 fn different_identifier_process(
59 &self,
60 process_a: &ProcessBinary,
61 process_b: &dyn Process,
62 ) -> bool {
63 self.to_short_id(process_a) != process_b.short_app_id()
64 }
65
66 fn different_identifier_processes(
67 &self,
68 process_a: &dyn Process,
69 process_b: &dyn Process,
70 ) -> bool {
71 process_a.short_app_id() != process_b.short_app_id()
72 }
73}