diff --git a/matter/src/cert/mod.rs b/matter/src/cert/mod.rs index 7af1867..621b28d 100644 --- a/matter/src/cert/mod.rs +++ b/matter/src/cert/mod.rs @@ -29,7 +29,7 @@ use num_derive::FromPrimitive; pub use self::asn1_writer::ASN1Writer; use self::printer::CertPrinter; -pub const MAX_CERT_TLV_LEN: usize = 300; // TODO +pub const MAX_CERT_TLV_LEN: usize = 1024; // TODO // As per https://datatracker.ietf.org/doc/html/rfc5280 diff --git a/matter/src/data_model/objects/encoder.rs b/matter/src/data_model/objects/encoder.rs index b4066e6..d068ce7 100644 --- a/matter/src/data_model/objects/encoder.rs +++ b/matter/src/data_model/objects/encoder.rs @@ -368,10 +368,16 @@ impl<'a, 'b, 'c> CmdDataEncoder<'a, 'b, 'c> { match handler.invoke(transaction, &cmd, &data, encoder) { Ok(()) => cmd.success(&tracker), - Err(error) => cmd.status(error.into()), + Err(error) => { + error!("Error invoking command: {}", error); + cmd.status(error.into()) + } } } - Err(status) => Some(status), + Err(status) => { + error!("Error invoking command: {:?}", status); + Some(status) + } }; if let Some(status) = status { diff --git a/matter/src/interaction_model/core.rs b/matter/src/interaction_model/core.rs index 371f8e8..1e9827b 100644 --- a/matter/src/interaction_model/core.rs +++ b/matter/src/interaction_model/core.rs @@ -470,6 +470,8 @@ impl<'a> InvReq<'a> { } pub fn complete(self, tx: &mut Packet, _transaction: &mut Transaction) -> Result { + let suppress = self.suppress_response.unwrap_or_default(); + let mut tw = TLVWriter::new(tx.get_writebuf()?); if self.inv_requests.is_some() { @@ -478,7 +480,12 @@ impl<'a> InvReq<'a> { tw.end_container()?; - Ok(true) + Ok(if suppress { + error!("Supress response is set, is this the expected handling?"); + false + } else { + true + }) } } diff --git a/matter/src/transport/exchange.rs b/matter/src/transport/exchange.rs index 333eab3..a25baba 100644 --- a/matter/src/transport/exchange.rs +++ b/matter/src/transport/exchange.rs @@ -25,6 +25,7 @@ use crate::error::Error; use crate::interaction_model::core::{ResumeReadReq, ResumeSubscribeReq}; use crate::secure_channel; use crate::secure_channel::case::CaseSession; +use crate::tlv::print_tlv_list; use crate::utils::epoch::Epoch; use crate::utils::rand::Rand; @@ -204,13 +205,14 @@ impl Exchange { return Ok(false); } - trace!("payload: {:x?}", tx.as_mut_slice()); + trace!("payload: {:x?}", tx.as_slice()); info!( - "{} with proto id: {} opcode: {}", + "{} with proto id: {} opcode: {}, tlv:\n", "Sending".blue(), tx.get_proto_id(), tx.get_proto_opcode(), ); + print_tlv_list(tx.as_slice()); tx.proto.exch_id = self.id; if self.role == Role::Initiator {