sync with vnailla dev

This commit is contained in:
liquidraver
2026-05-22 14:42:12 +02:00
parent 895bbbc633
commit 6b624a69e5
7 changed files with 70 additions and 66 deletions
+12 -10
View File
@@ -52,19 +52,19 @@ mesh::Packet *BaseChatMesh::createSelfAdvert(const char *name, double lat, doubl
return createAdvert(self_id, app_data, app_data_len);
}
void BaseChatMesh::sendAckTo(const ContactInfo &dest, uint32_t ack_hash)
void BaseChatMesh::sendAckTo(const ContactInfo &dest, const uint8_t *ack_hash, uint8_t ack_len)
{
if (dest.out_path_len == OUT_PATH_UNKNOWN) {
mesh::Packet *ack = createAck(ack_hash);
mesh::Packet *ack = createAck(ack_hash, ack_len);
if (ack) sendFloodScoped(dest, ack, TXT_ACK_DELAY);
} else {
uint32_t d = TXT_ACK_DELAY;
if (getExtraAckTransmitCount() > 0) {
mesh::Packet *a1 = createMultiAck(ack_hash, 1);
mesh::Packet *a1 = createMultiAck(ack_hash, ack_len, 1);
if (a1) sendDirect(a1, dest.out_path, dest.out_path_len, d);
d += 300;
}
mesh::Packet *a2 = createAck(ack_hash);
mesh::Packet *a2 = createAck(ack_hash, ack_len);
if (a2) sendDirect(a2, dest.out_path, dest.out_path_len, d);
}
}
@@ -254,16 +254,18 @@ void BaseChatMesh::onPeerDataRecv(mesh::Packet *packet, uint8_t type, int sender
from.lastmod = getRTCClock()->getCurrentTime();
onMessageRecv(from, packet, timestamp, (const char *)&data[5]);
uint32_t ack_hash;
mesh::Utils::sha256((uint8_t *)&ack_hash, 4, data, 5 + strlen((char *)&data[5]),
from.id.pub_key, PUB_KEY_SIZE);
int text_len = strlen((char *)&data[5]);
uint8_t ack_hash[6];
mesh::Utils::sha256(ack_hash, 4, data, 5 + text_len, from.id.pub_key, PUB_KEY_SIZE);
ack_hash[4] = data[5 + text_len + 1]; // attempt byte (makes hash unique across retries)
getRNG()->random(&ack_hash[5], 1); // random byte (makes hash unique per delivery node)
if (packet->isRouteFlood()) {
mesh::Packet *path = createPathReturn(from.id, secret, packet->path, packet->path_len,
PAYLOAD_TYPE_ACK, (uint8_t *)&ack_hash, 4);
PAYLOAD_TYPE_ACK, ack_hash, 6);
if (path) sendFloodScoped(from, path, TXT_ACK_DELAY);
} else {
sendAckTo(from, ack_hash);
sendAckTo(from, ack_hash, 6);
}
} else if (flags == TXT_TYPE_CLI_DATA) {
onCommandDataRecv(from, packet, timestamp, (const char *)&data[5]);
@@ -288,7 +290,7 @@ void BaseChatMesh::onPeerDataRecv(mesh::Packet *packet, uint8_t type, int sender
PAYLOAD_TYPE_ACK, (uint8_t *)&ack_hash, 4);
if (path) sendFloodScoped(from, path, TXT_ACK_DELAY);
} else {
sendAckTo(from, ack_hash);
sendAckTo(from, (uint8_t *)&ack_hash, 4);
}
}
} else if (type == PAYLOAD_TYPE_REQ && len > 4) {