mirror of
https://github.com/meshtastic/Meshtastic-Android.git
synced 2026-04-08 16:10:41 -04:00
This commit optimizes the mesh handshake protocol by introducing explicit support for `NodeInfoBatch` messages. It updates the configuration flow to handle both primary batched node delivery and legacy single-node delivery for backwards compatibility with older firmware.
Key changes include:
- **Batch Processing Optimization:**
- Added `handleNodeInfoBatch` to the `MeshConfigFlowManager` interface to allow bulk processing of node information, reducing per-item overhead during the initial handshake.
- Updated `MeshConfigFlowManagerImpl` to accumulate batched nodes efficiently using `addAll`.
- Refactored `FromRadioPacketHandlerImpl` to delegate batch processing directly to the manager instead of iterating through individual items.
- **Handshake Protocol Updates:**
- Updated `HandshakeConstants` to distinguish between `BATCH_NODE_INFO_NONCE` (primary Stage 2) and `NODE_INFO_NONCE` (legacy Stage 2).
- Modified `handleConfigComplete` logic to trigger Stage 2 completion for both batched and legacy nonces.
- Ensured `MeshConnectionManager` prioritizes the batch nonce when requesting node information.
- **Testing & Simulation:**
- Created `MeshConfigFlowManagerImplTest` to validate node accumulation, batch handling, and handshake nonce routing.
- Improved `MockInterface` to better simulate real-world packet ordering by delaying live traffic until after the handshake completion coroutine has processed the node database.
- Added verification tests to ensure the connection manager uses the correct batching nonces.
Specific changes:
- Added `handleNodeInfoBatch` implementation to `MeshConfigFlowManagerImpl`.
- Updated documentation in `HandshakeConstants` regarding two-stage mesh handshake protocol.
- Refactored `MockInterface.sendStage2NodeInfoResponse` to handle packet encoding and simulation delays.
- Added unit tests covering edge cases for empty and mixed node info batches.