mirror of
https://github.com/meshcore-dev/MeshCore.git
synced 2026-04-20 22:13:47 +00:00
* fix for duplicate msgId's in repeater CLI view
This commit is contained in:
parent
d69d2be722
commit
932d845922
1 changed files with 10 additions and 6 deletions
|
|
@ -266,14 +266,14 @@ protected:
|
|||
MESH_DEBUG_PRINTLN("onPeerDataRecv: possible replay attack detected");
|
||||
}
|
||||
} else if (type == PAYLOAD_TYPE_TXT_MSG && len > 5) { // a CLI command
|
||||
uint32_t timestamp;
|
||||
memcpy(×tamp, data, 4); // timestamp (by sender's RTC clock - which could be wrong)
|
||||
uint32_t sender_timestamp;
|
||||
memcpy(&sender_timestamp, data, 4); // timestamp (by sender's RTC clock - which could be wrong)
|
||||
uint flags = data[4]; // message attempt number, and other flags
|
||||
|
||||
if (flags != 0) {
|
||||
MESH_DEBUG_PRINTLN("onPeerDataRecv: unsupported CLI text received: flags=%02x", (uint32_t)flags);
|
||||
} else if (timestamp > client->last_timestamp) { // prevent replay attacks
|
||||
client->last_timestamp = timestamp;
|
||||
} else if (sender_timestamp > client->last_timestamp) { // prevent replay attacks
|
||||
client->last_timestamp = sender_timestamp;
|
||||
|
||||
// len can be > original length, but 'text' will be padded with zeroes
|
||||
data[len] = 0; // need to make a C string again, with null terminator
|
||||
|
|
@ -291,10 +291,14 @@ protected:
|
|||
}
|
||||
|
||||
uint8_t temp[166];
|
||||
handleCommand(timestamp, (const char *) &data[5], (char *) &temp[5]);
|
||||
handleCommand(sender_timestamp, (const char *) &data[5], (char *) &temp[5]);
|
||||
int text_len = strlen((char *) &temp[5]);
|
||||
if (text_len > 0) {
|
||||
uint32_t timestamp = getRTCClock()->getCurrentTime();
|
||||
if (timestamp == sender_timestamp) {
|
||||
// WORKAROUND: the two timestamps need to be different, in the CLI view
|
||||
timestamp++;
|
||||
}
|
||||
memcpy(temp, ×tamp, 4); // mostly an extra blob to help make packet_hash unique
|
||||
temp[4] = 0;
|
||||
|
||||
|
|
@ -388,7 +392,7 @@ public:
|
|||
} else if (memcmp(command, "clock sync", 10) == 0) {
|
||||
uint32_t curr = getRTCClock()->getCurrentTime();
|
||||
if (sender_timestamp > curr) {
|
||||
getRTCClock()->setCurrentTime(sender_timestamp);
|
||||
getRTCClock()->setCurrentTime(sender_timestamp + 1);
|
||||
strcpy(reply, "OK - clock set");
|
||||
} else {
|
||||
strcpy(reply, "ERR: clock cannot go backwards");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue