Skip to content

Commit 191b513

Browse files
committed
Be more patient: increase companion timeouts
And use attempt to progressively wait longer. Currently we only wait 3-4 hops of airtime. When destination is 10-20 hops away we send 3 flood messages before the first one will have a chance of arriving.
1 parent fb726e4 commit 191b513

5 files changed

Lines changed: 12 additions & 12 deletions

File tree

examples/companion_radio/MyMesh.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,10 @@
9696

9797
#define MAX_CHANNEL_DATA_LENGTH (MAX_FRAME_SIZE - 9)
9898

99-
#define SEND_TIMEOUT_BASE_MILLIS 500
100-
#define FLOOD_SEND_TIMEOUT_FACTOR 16.0f
101-
#define DIRECT_SEND_PERHOP_FACTOR 6.0f
102-
#define DIRECT_SEND_PERHOP_EXTRA_MILLIS 250
99+
#define SEND_TIMEOUT_BASE_MILLIS 1000
100+
#define FLOOD_SEND_TIMEOUT_FACTOR 32.0f
101+
#define DIRECT_SEND_PERHOP_FACTOR 10.0f
102+
#define DIRECT_SEND_PERHOP_EXTRA_MILLIS 500
103103
#define LAZY_CONTACTS_WRITE_DELAY 5000
104104

105105
#define PUBLIC_GROUP_PSK "izOH6cXN6mrJ5e26oRXNcg=="
@@ -823,8 +823,8 @@ void MyMesh::onTraceRecv(mesh::Packet *packet, uint32_t tag, uint32_t auth_code,
823823
}
824824
}
825825

826-
uint32_t MyMesh::calcFloodTimeoutMillisFor(uint32_t pkt_airtime_millis) const {
827-
return SEND_TIMEOUT_BASE_MILLIS + (FLOOD_SEND_TIMEOUT_FACTOR * pkt_airtime_millis);
826+
uint32_t MyMesh::calcFloodTimeoutMillisFor(uint32_t pkt_airtime_millis, uint8_t attempt) const {
827+
return (SEND_TIMEOUT_BASE_MILLIS + (FLOOD_SEND_TIMEOUT_FACTOR * pkt_airtime_millis)) * (attempt + 1);
828828
}
829829
uint32_t MyMesh::calcDirectTimeoutMillisFor(uint32_t pkt_airtime_millis, uint8_t path_len) const {
830830
uint8_t path_hash_count = path_len & 63;

examples/companion_radio/MyMesh.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ class MyMesh : public BaseChatMesh, public DataStoreHost {
148148
void onTraceRecv(mesh::Packet *packet, uint32_t tag, uint32_t auth_code, uint8_t flags,
149149
const uint8_t *path_snrs, const uint8_t *path_hashes, uint8_t path_len) override;
150150

151-
uint32_t calcFloodTimeoutMillisFor(uint32_t pkt_airtime_millis) const override;
151+
uint32_t calcFloodTimeoutMillisFor(uint32_t pkt_airtime_millis, uint8_t attempt = 0) const override;
152152
uint32_t calcDirectTimeoutMillisFor(uint32_t pkt_airtime_millis, uint8_t path_len) const override;
153153
void onSendTimeout() override;
154154

examples/simple_secure_chat/main.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -262,8 +262,8 @@ class MyMesh : public BaseChatMesh, ContactVisitor {
262262
// not supported
263263
}
264264

265-
uint32_t calcFloodTimeoutMillisFor(uint32_t pkt_airtime_millis) const override {
266-
return SEND_TIMEOUT_BASE_MILLIS + (FLOOD_SEND_TIMEOUT_FACTOR * pkt_airtime_millis);
265+
uint32_t calcFloodTimeoutMillisFor(uint32_t pkt_airtime_millis, uint8_t attempt = 0) const override {
266+
return (SEND_TIMEOUT_BASE_MILLIS + (FLOOD_SEND_TIMEOUT_FACTOR * pkt_airtime_millis)) * (attempt + 1);
267267
}
268268
uint32_t calcDirectTimeoutMillisFor(uint32_t pkt_airtime_millis, uint8_t path_len) const override {
269269
uint8_t path_hash_count = path_len & 63;

src/helpers/BaseChatMesh.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,7 @@ int BaseChatMesh::sendMessage(const ContactInfo& recipient, uint32_t timestamp,
424424
int rc;
425425
if (recipient.out_path_len == OUT_PATH_UNKNOWN) {
426426
sendFloodScoped(recipient, pkt);
427-
txt_send_timeout = futureMillis(est_timeout = calcFloodTimeoutMillisFor(t));
427+
txt_send_timeout = futureMillis(est_timeout = calcFloodTimeoutMillisFor(t, attempt));
428428
rc = MSG_SEND_SENT_FLOOD;
429429
} else {
430430
sendDirect(pkt, recipient.out_path, recipient.out_path_len);
@@ -450,7 +450,7 @@ int BaseChatMesh::sendCommandData(const ContactInfo& recipient, uint32_t timest
450450
int rc;
451451
if (recipient.out_path_len == OUT_PATH_UNKNOWN) {
452452
sendFloodScoped(recipient, pkt);
453-
txt_send_timeout = futureMillis(est_timeout = calcFloodTimeoutMillisFor(t));
453+
txt_send_timeout = futureMillis(est_timeout = calcFloodTimeoutMillisFor(t, attempt));
454454
rc = MSG_SEND_SENT_FLOOD;
455455
} else {
456456
sendDirect(pkt, recipient.out_path, recipient.out_path_len);

src/helpers/BaseChatMesh.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ class BaseChatMesh : public mesh::Mesh {
107107
virtual void onMessageRecv(const ContactInfo& contact, mesh::Packet* pkt, uint32_t sender_timestamp, const char *text) = 0;
108108
virtual void onCommandDataRecv(const ContactInfo& contact, mesh::Packet* pkt, uint32_t sender_timestamp, const char *text) = 0;
109109
virtual void onSignedMessageRecv(const ContactInfo& contact, mesh::Packet* pkt, uint32_t sender_timestamp, const uint8_t *sender_prefix, const char *text) = 0;
110-
virtual uint32_t calcFloodTimeoutMillisFor(uint32_t pkt_airtime_millis) const = 0;
110+
virtual uint32_t calcFloodTimeoutMillisFor(uint32_t pkt_airtime_millis, uint8_t attempt = 0) const = 0;
111111
virtual uint32_t calcDirectTimeoutMillisFor(uint32_t pkt_airtime_millis, uint8_t path_len) const = 0;
112112
virtual void onSendTimeout() = 0;
113113
virtual void onChannelMessageRecv(const mesh::GroupChannel& channel, mesh::Packet* pkt, uint32_t timestamp, const char *text) = 0;

0 commit comments

Comments
 (0)