usecrate::message::{
BinaryMessageParser, ResponseStatus, WeaverHalRequest, WeaverHalResponse, WeaverMessageParser,
}; usecrate::weaver::{connect_to_pinweaver, PinWeaverImpl, Weaver}; usecrate::WeaverTAError; use alloc::rc::Rc; use log::error; use log::info; use log::trace; use std::default::Default; use tipc::{
service_dispatcher, ConnectResult, Deserialize, Handle, Manager, MessageResult, PortCfg,
Serialize, Serializer, Service, TipcError, Uuid,
}; use trusty_std::alloc::TryAllocFrom;
// Port name for clients to connect to const WEAVER_TIPC_PORT: &str = "com.android.trusty.weaver.desktop"; // Max Size of serialized message // This may be able to be reduced since the longest message that we can get is a write which has... // operation, slot id, key length, value length, key, value // 1 + 4 + 4 + 4 + 16 + 16 = 45 const WEAVER_MAX_BUFFER_LENGTH: usize = 4096; const CONNECTION_COUNT: usize = 1;
// Will use BinaryMessageParser (M) for message parsing and pinweaver for weaver implementation (W) struct WeaverHalTA<M: WeaverMessageParser, W: Weaver> {
message_parser: M,
weaver_impl: W,
}
// Create a dispatcher for weaver service type WeaverTA = WeaverHalTA<BinaryMessageParser, PinWeaverImpl>;
service_dispatcher! { enum WeaverDispatcher{ // Handles calls to the android weaver hal
WeaverTA,
}
}
pub(crate) fn start_tipc_service() -> Result<(), WeaverTAError> { let pinweaver = connect_to_pinweaver()?; let weaver_ta = WeaverHalTA::new(BinaryMessageParser::default(), pinweaver);
trace!("Weaver ta created.");
// Configure a new tipc port let port_config = PortCfg::new(WEAVER_TIPC_PORT)
.map_err(|e| {
WeaverTAError::TipcError(
format!("Could not create configuration for '{WEAVER_TIPC_PORT}'"),
e,
)
})?
.allow_ta_connect()
.allow_ns_connect();
letmut dispatcher = WeaverDispatcher::<1>::new()
.map_err(|e| WeaverTAError::TipcError("Could not create dispatcher".to_string(), e))?;
dispatcher.add_service(Rc::new(weaver_ta), port_config).map_err(|e| {
WeaverTAError::TipcError(
format!("Could not add serice to dispatcher for port '{WEAVER_TIPC_PORT}'"),
e,
)
})?;
trace!("Weaver service added to dispatcher.");
Manager::<_, _, 1, CONNECTION_COUNT>::new_with_dispatcher(
dispatcher,
[0u8; WEAVER_MAX_BUFFER_LENGTH],
)
.map_err(|e| {
WeaverTAError::TipcError("Manager for Weaver TA could not be created".to_string(), e)
})?
.run_event_loop()
.map_err(|e| WeaverTAError::TipcError(format!("Could not start event '{WEAVER_TIPC_PORT}'"), e))
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-06-26)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.