Route large LXMF messages through Resource transfer over link

When link payload exceeds MDU (263 bytes), use Link::start_resource_transfer()
instead of failing. This enables sending files, images, and long messages
(>295 bytes content) via the microReticulum Resource protocol.

Delivery path selection:
1. Link active + payload ≤ MDU → single link packet (existing)
2. Link active + payload > MDU → Resource transfer (NEW)
3. No link → opportunistic (existing, fails for >MDU)
This commit is contained in:
DeFiDude
2026-03-24 17:06:43 -06:00
parent cc8701436e
commit 2221eb832f
+11 -1
View File
@@ -153,11 +153,21 @@ bool LXMFManager::sendDirect(LXMFMessage& msg) {
linkPayload.insert(linkPayload.end(), payload.begin(), payload.end());
RNS::Bytes linkBytes(linkPayload.data(), linkPayload.size());
if (linkBytes.size() <= RNS::Type::Reticulum::MDU) {
Serial.printf("[LXMF] sending via link: %d bytes to %s\n",
// Small enough for single link packet
Serial.printf("[LXMF] sending via link packet: %d bytes to %s\n",
(int)linkBytes.size(), msg.destHash.toHex().substr(0, 8).c_str());
RNS::Packet packet(_outLink, linkBytes);
RNS::PacketReceipt receipt = packet.send();
if (receipt) { sent = true; }
} else {
// Too large for single packet — use Resource transfer
Serial.printf("[LXMF] sending via link resource: %d bytes to %s\n",
(int)linkBytes.size(), msg.destHash.toHex().substr(0, 8).c_str());
if (_outLink.start_resource_transfer(linkBytes)) {
sent = true;
} else {
Serial.println("[LXMF] resource transfer failed to start");
}
}
}