From 8d0a17bc396d1a759b739a9c23f8a19fcdb7834c Mon Sep 17 00:00:00 2001 From: Scott Powell Date: Thu, 30 Jan 2025 20:09:00 +1100 Subject: [PATCH] * Room server: no more "[posted]" replies from server --- examples/simple_room_server/main.cpp | 34 ++++++++++++++++------------ 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/examples/simple_room_server/main.cpp b/examples/simple_room_server/main.cpp index de4419b7..377d22b2 100644 --- a/examples/simple_room_server/main.cpp +++ b/examples/simple_room_server/main.cpp @@ -19,7 +19,7 @@ /* ------------------------------ Config -------------------------------- */ -#define FIRMWARE_VER_TEXT "v3 (build: 30 Jan 2025)" +#define FIRMWARE_VER_TEXT "v3 (build: 31 Jan 2025)" #ifndef LORA_FREQ #define LORA_FREQ 915.0 @@ -184,7 +184,7 @@ class MyMesh : public mesh::Mesh { client->pending_ack = 0; } - void addPost(ClientInfo* client, const char* postData, char reply[]) { + void addPost(ClientInfo* client, const char* postData) { // TODO: suggested postData format: /<descrption> posts[next_post_idx].author = client->id; // add to cyclic queue strncpy(posts[next_post_idx].text, postData, MAX_POST_TEXT_LEN); @@ -194,7 +194,6 @@ class MyMesh : public mesh::Mesh { // TODO: only post at maximum of ONE PER SECOND, so that post_timestamps are UNIQUE!! next_post_idx = (next_post_idx + 1) % MAX_UNSYNCED_POSTS; - strcpy(reply, "[Posted]"); next_push = futureMillis(PUSH_NOTIFY_DELAY_MILLIS); } @@ -362,24 +361,31 @@ protected: uint32_t ack_hash; // calc truncated hash of the message timestamp + text + sender pub_key, to prove to sender that we got it mesh::Utils::sha256((uint8_t *) &ack_hash, 4, data, 5 + strlen((char *)&data[5]), client->id.pub_key, PUB_KEY_SIZE); - mesh::Packet* ack = createAck(ack_hash); - if (ack) { - if (client->out_path_len < 0) { - sendFlood(ack); - } else { - sendDirect(ack, client->out_path, client->out_path_len); - } - } - uint8_t temp[166]; + bool send_ack; if (flags == TXT_TYPE_CLI_DATA) { if (client->is_admin) { handleAdminCommand(sender_timestamp, (const char *) &data[5], (char *) &temp[5]); + send_ack = true; } else { - strcpy((char *) &temp[5], "auth-err"); + temp[5] = 0; // no reply + send_ack = false; // and no ACK... user shoudn't be sending these } } else { // TXT_TYPE_PLAIN - addPost(client, (const char *) &data[5], (char *) &temp[5]); + addPost(client, (const char *) &data[5]); + temp[5] = 0; // no reply (ACK is enough) + send_ack = true; + } + + if (send_ack) { + mesh::Packet* ack = createAck(ack_hash); + if (ack) { + if (client->out_path_len < 0) { + sendFlood(ack); + } else { + sendDirect(ack, client->out_path, client->out_path_len); + } + } } int text_len = strlen((char *) &temp[5]);