4.9 KiB
Swarm Mode Technical Design
1. Overview
Swarm mode is a shared media-recovery transport used by both voice and image sessions when the original sender path stops responding after some fragments have already propagated through the mesh.
It adds a lightweight swarm discovery plane on top of the existing direct raw-data transfer plane:
- Discovery plane (raw custom control payloads):
MediaSwarmRequestMediaSwarmAvailability
- Transfer plane (direct raw binary):
- existing
VoiceFetchRequest/ImageFetchRequest - existing
VoicePacket/ImagePacket
- existing
Swarm mode does not broadcast media payloads. It fans out raw control requests to reachable peers, collects raw availability responses, and then fetches media from the best responder.
2. Problem It Solves
Without swarm mode, media fetch is limited to the original sender's direct raw path. If that sender goes offline, moves, or stops responding, a receiver can be left with a partial session even when other peers already hold useful fragments.
Swarm mode lets the receiver discover alternate peers and fetch the missing subset directly from them.
3. Control Messages
3.1 Media Swarm Request (binary)
[magic=0x6d][kind=0x01][mediaType:1B][sessionId:4B][requesterKey6:6B][missingCount:1B][missingIndices...]
Fields:
mediaType—voiceorimagesessionId— 8 hex charsrequesterKey6— 12 hex chars identifying the requesting devicemissingCount—0means the requester needs all fragmentsmissingIndices— exact missing fragment indices whenmissingCount > 0
Example:
6d 01 02 de ad be ef aa bb cc dd ee ff 03 00 02 09
3.2 Media Swarm Availability (binary)
[magic=0x6d][kind=0x02][mediaType:1B][sessionId:4B][requesterKey6:6B][responderKey6:6B][availableCount:1B][availableIndices...]
Fields:
mediaType—voiceorimagesessionId— 8 hex charsrequesterKey6— copied from the swarm requestresponderKey6— 12 hex chars identifying the responding peeravailableCount—0means the responder can satisfy the full requestavailableIndices— exact fragment indices held whenavailableCount > 0
Example:
6d 02 02 de ad be ef aa bb cc dd ee ff 11 22 33 44 55 66 02 02 09
4. Requester Behavior
When a voice or image session is incomplete:
- Prefer the original sender if its direct raw route is healthy.
- If the original sender path is unavailable or not responding, send a raw swarm request to reachable peers with the exact missing fragment indices.
- Wait up to 10 seconds for raw availability responses.
- Rank responders by overlap with the current missing set.
- Skip the original sender when choosing alternate peers.
- Send a direct binary fetch request to the best responder for only the missing subset that responder advertised.
Actual media transfer uses the same cmdSendRawData / pushRawData path as the
swarm control messages.
5. Responder Behavior
A peer that receives a swarm request:
- checks whether it has fragments for the requested media session
- replies only if it has at least one requested fragment
- advertises only fragments it actually holds
- may reply from:
- its outgoing cache, or
- a partially/fully received incoming session
This enables torrent-like relay behavior without requiring the peer to be the original sender.
6. Visibility and Routing
- Swarm control payloads are carried by
cmdSendRawDataand received throughpushRawData. - They are intercepted by the app and must not be surfaced in chat.
- Discovery is a direct raw fan-out to reachable peers, not a public-channel broadcast.
- Media packets themselves remain direct-route raw packets.
7. Constraints
- No firmware changes are required.
- Swarm mode only helps if at least one peer has already received some useful fragments.
- Peers can only relay fragments they actually have.
- Alternate peers still need a valid direct raw route back to the requester.
- Swarm mode improves recovery from sender-path failure, but it does not change the underlying raw-packet size, airtime, or hop constraints.
8. High-Level Sequence
sequenceDiagram
participant S as Original Sender
participant P as Peer With Fragments
participant N as Reachable Peers
participant R as Requester
S->>R: Direct raw fragments (partial)
Note over S,R: Original sender path stops responding
R->>N: Raw swarm requests with exact missing fragments
P->>R: Raw swarm availability response
R->>P: Direct binary fetch request for missing subset
P->>R: Direct raw fragments
R->>R: Reassemble completed session
9. Integration Points
- Voice-specific behavior is summarized in
docs/voice-mode-technical.md. - Image-specific behavior is summarized in
docs/image-mode-technical.md. - This document is the shared source of truth for swarm discovery and fallback semantics.