Skip to content

Commit 40fb8fa

Browse files
authored
Fix Matter resumption final ack (#21673)
1 parent 9ac4712 commit 40fb8fa

File tree

6 files changed

+857
-833
lines changed

6 files changed

+857
-833
lines changed

lib/libesp32/berry_matter/src/embedded/Matter_Commissioning.be

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,7 @@ class Matter_Commisioning_Context
349349
# Check that it's a resumption
350350
if is_resumption
351351
# Resumption p.169
352+
log("MTR: Sigma1 Resumption", 3)
352353
var s1rk_salt = sigma1.initiatorRandom + sigma1.resumptionID
353354
var s1rk_info = bytes().fromstring("Sigma1_Resume")
354355
var s1rk = crypto.HKDF_SHA256().derive(session_resumption.shared_secret, s1rk_salt, s1rk_info, 16)
@@ -696,7 +697,8 @@ class Matter_Commisioning_Context
696697
# placeholder, nothing to run for now
697698
def parse_StatusReport(msg)
698699
var session = msg.session
699-
log("MTR: >Status "+msg.raw[msg.app_payload_idx..].tohex(), 3)
700+
var status_msg = msg.raw[msg.app_payload_idx..].tohex()
701+
log(f"MTR: >Status {status_msg}", (status_msg != "0000000000000000") ? 3 : 4)
700702
return false # we don't explicitly ack the message
701703
end
702704

lib/libesp32/berry_matter/src/embedded/Matter_Message.be

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ class Matter_Frame
215215
raw.add(self.x_flags, 1)
216216
# opcode (mandatory)
217217
raw.add(self.opcode, 1)
218-
raw.add(self.exchange_id & 0xFFFF, 2)
218+
raw.add((self.exchange_id != nil) ? self.exchange_id & 0xFFFF : 0, 2)
219219
raw.add(self.protocol_id, 2)
220220
if self.x_flag_a raw.add(self.ack_message_counter, 4) end
221221
# finally payload

lib/libesp32/berry_matter/src/embedded/Matter_MessageHandler.be

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ class Matter_MessageHandler
5050
def send_simple_ack(frame, reliable)
5151
if frame.x_flag_r # nothing to respond, check if we need a standalone ack
5252
var resp = frame.build_standalone_ack(reliable)
53+
# special case, the local_session_id is not the one from the session
54+
resp.local_session_id = frame.local_session_id
5355
resp.encode_frame()
5456
if tasmota.loglevel(4)
5557
log(format("MTR: <Ack (%6i) ack=%i id=%i %s", resp.session.local_session_id, resp.ack_message_counter, resp.message_counter, reliable ? '{reliable}' : ''), 4)
@@ -125,7 +127,8 @@ class Matter_MessageHandler
125127
var op_name = matter.get_opcode_name(frame.opcode)
126128
if !op_name op_name = format("0x%02X", frame.opcode) end
127129
if tasmota.loglevel(3)
128-
log(format("MTR: >Received (%6i) %s rid=%i exch=%i from [%s]:%i", session.local_session_id, op_name, frame.message_counter, frame.exchange_id, addr, port), 3)
130+
log(format("MTR: >Received (%6i) %s from [%s]:%i", session.local_session_id, op_name, addr, port), 3)
131+
# log(format("MTR: >Received (%6i) %s rid=%i exch=%i from [%s]:%i", session.local_session_id, op_name, frame.message_counter, frame.exchange_id, addr, port), 3)
129132
end
130133
else
131134
if tasmota.loglevel(4)

0 commit comments

Comments
 (0)