From dc3947117e8b181dadf6e498570f8d93a63e12e3 Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Tue, 14 Apr 2026 18:47:53 -0500 Subject: [PATCH] Make new protobuf value consistent --- bin/dmshell_client.py | 4 ++-- src/modules/DMShell.cpp | 11 +++++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/bin/dmshell_client.py b/bin/dmshell_client.py index c955a83ed..816a60b09 100644 --- a/bin/dmshell_client.py +++ b/bin/dmshell_client.py @@ -556,7 +556,7 @@ def send_ack_frame(transport, state: SessionState, replay_from: Optional[int] = state, state.pb2.mesh.RemoteShell.ACK, seq=0, - last_rx_seq=0 if replay_from is None else replay_from, + last_rx_seq=0 if replay_from is None else replay_from - 1, remember=False, ) @@ -675,7 +675,7 @@ def reader_loop(transport, state: SessionState) -> None: #state.prune_sent_frames(shell.ack_seq) if shell.op == state.pb2.mesh.RemoteShell.ACK: #state.event_queue.put("peer requested replay") - replay_from = shell.last_rx_seq if shell.last_rx_seq > 0 else None + replay_from = shell.last_rx_seq + 1 if shell.last_rx_seq > 0 else None if replay_from is not None: #state.event_queue.put(f"peer requested replay from seq={replay_from}") replay_frames_from(transport, state, replay_from) diff --git a/src/modules/DMShell.cpp b/src/modules/DMShell.cpp index 48154f370..b2cf6c0d9 100644 --- a/src/modules/DMShell.cpp +++ b/src/modules/DMShell.cpp @@ -52,7 +52,7 @@ ProcessMessage DMShellModule::handleReceived(const meshtastic_MeshPacket &mp) if (frame.op == meshtastic_RemoteShell_OpCode_ACK) { if (session.active && frame.session_id == session.sessionId && getFrom(&mp) == session.peer && frame.last_rx_seq > 0) { - resendFramesFrom(frame.last_rx_seq); + resendFramesFrom(frame.last_rx_seq + 1); } return ProcessMessage::CONTINUE; } @@ -77,6 +77,13 @@ ProcessMessage DMShellModule::handleReceived(const meshtastic_MeshPacket &mp) } if (!session.active || frame.session_id != session.sessionId || getFrom(&mp) != session.peer) { + if (!session.active) { + LOG_WARN("DMShell: no active session, rejecting op %d from 0x%x", frame.op, mp.from); + } else { + LOG_WARN("DMShell: session ID mismatch (got 0x%x expected 0x%x) or peer mismatch (got 0x%x expected 0x%x), rejecting " + "op %d", + frame.session_id, session.sessionId, mp.from, session.peer, frame.op); + } sendError("invalid_session", getFrom(&mp)); return ProcessMessage::STOP; } @@ -501,7 +508,7 @@ void DMShellModule::sendAck(uint32_t replayFromSeq) .cols = 0, .rows = 0, .flags = 0, - .last_rx_seq = replayFromSeq, + .last_rx_seq = replayFromSeq - 1, }; frame.payload.size = 0; sendFrameToPeer(session.peer, frame, false);