From 2221eb832f2a780aa64aa09c1ec414a6a5abc5d9 Mon Sep 17 00:00:00 2001 From: DeFiDude <59237470+DeFiDude@users.noreply.github.com> Date: Tue, 24 Mar 2026 17:06:43 -0600 Subject: [PATCH] Route large LXMF messages through Resource transfer over link MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- src/reticulum/LXMFManager.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/reticulum/LXMFManager.cpp b/src/reticulum/LXMFManager.cpp index 3d7f9d6..0f0c4c0 100644 --- a/src/reticulum/LXMFManager.cpp +++ b/src/reticulum/LXMFManager.cpp @@ -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"); + } } }