Skip to content

Commit 3b9b94c

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 e6e87fb commit 3b9b94c

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
@@ -91,10 +91,10 @@
9191
#define RESP_CODE_AUTOADD_CONFIG 25
9292
#define RESP_ALLOWED_REPEAT_FREQ 26
9393

94-
#define SEND_TIMEOUT_BASE_MILLIS 500
95-
#define FLOOD_SEND_TIMEOUT_FACTOR 16.0f
96-
#define DIRECT_SEND_PERHOP_FACTOR 6.0f
97-
#define DIRECT_SEND_PERHOP_EXTRA_MILLIS 250
94+
#define SEND_TIMEOUT_BASE_MILLIS 1000
95+
#define FLOOD_SEND_TIMEOUT_FACTOR 32.0f
96+
#define DIRECT_SEND_PERHOP_FACTOR 10.0f
97+
#define DIRECT_SEND_PERHOP_EXTRA_MILLIS 500
9898
#define LAZY_CONTACTS_WRITE_DELAY 5000
9999

100100
#define PUBLIC_GROUP_PSK "izOH6cXN6mrJ5e26oRXNcg=="
@@ -781,8 +781,8 @@ void MyMesh::onTraceRecv(mesh::Packet *packet, uint32_t tag, uint32_t auth_code,
781781
}
782782
}
783783

784-
uint32_t MyMesh::calcFloodTimeoutMillisFor(uint32_t pkt_airtime_millis) const {
785-
return SEND_TIMEOUT_BASE_MILLIS + (FLOOD_SEND_TIMEOUT_FACTOR * pkt_airtime_millis);
784+
uint32_t MyMesh::calcFloodTimeoutMillisFor(uint32_t pkt_airtime_millis, uint8_t attempt) const {
785+
return (SEND_TIMEOUT_BASE_MILLIS + (FLOOD_SEND_TIMEOUT_FACTOR * pkt_airtime_millis)) * (attempt + 1);
786786
}
787787
uint32_t MyMesh::calcDirectTimeoutMillisFor(uint32_t pkt_airtime_millis, uint8_t path_len) const {
788788
return SEND_TIMEOUT_BASE_MILLIS +

examples/companion_radio/MyMesh.h

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

148-
uint32_t calcFloodTimeoutMillisFor(uint32_t pkt_airtime_millis) const override;
148+
uint32_t calcFloodTimeoutMillisFor(uint32_t pkt_airtime_millis, uint8_t attempt = 0) const override;
149149
uint32_t calcDirectTimeoutMillisFor(uint32_t pkt_airtime_millis, uint8_t path_len) const override;
150150
void onSendTimeout() override;
151151

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
return SEND_TIMEOUT_BASE_MILLIS +

src/helpers/BaseChatMesh.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,7 @@ int BaseChatMesh::sendMessage(const ContactInfo& recipient, uint32_t timestamp,
388388
int rc;
389389
if (recipient.out_path_len < 0) {
390390
sendFloodScoped(recipient, pkt);
391-
txt_send_timeout = futureMillis(est_timeout = calcFloodTimeoutMillisFor(t));
391+
txt_send_timeout = futureMillis(est_timeout = calcFloodTimeoutMillisFor(t, attempt));
392392
rc = MSG_SEND_SENT_FLOOD;
393393
} else {
394394
sendDirect(pkt, recipient.out_path, recipient.out_path_len);
@@ -414,7 +414,7 @@ int BaseChatMesh::sendCommandData(const ContactInfo& recipient, uint32_t timest
414414
int rc;
415415
if (recipient.out_path_len < 0) {
416416
sendFloodScoped(recipient, pkt);
417-
txt_send_timeout = futureMillis(est_timeout = calcFloodTimeoutMillisFor(t));
417+
txt_send_timeout = futureMillis(est_timeout = calcFloodTimeoutMillisFor(t, attempt));
418418
rc = MSG_SEND_SENT_FLOOD;
419419
} else {
420420
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
@@ -106,7 +106,7 @@ class BaseChatMesh : public mesh::Mesh {
106106
virtual void onMessageRecv(const ContactInfo& contact, mesh::Packet* pkt, uint32_t sender_timestamp, const char *text) = 0;
107107
virtual void onCommandDataRecv(const ContactInfo& contact, mesh::Packet* pkt, uint32_t sender_timestamp, const char *text) = 0;
108108
virtual void onSignedMessageRecv(const ContactInfo& contact, mesh::Packet* pkt, uint32_t sender_timestamp, const uint8_t *sender_prefix, const char *text) = 0;
109-
virtual uint32_t calcFloodTimeoutMillisFor(uint32_t pkt_airtime_millis) const = 0;
109+
virtual uint32_t calcFloodTimeoutMillisFor(uint32_t pkt_airtime_millis, uint8_t attempt = 0) const = 0;
110110
virtual uint32_t calcDirectTimeoutMillisFor(uint32_t pkt_airtime_millis, uint8_t path_len) const = 0;
111111
virtual void onSendTimeout() = 0;
112112
virtual void onChannelMessageRecv(const mesh::GroupChannel& channel, mesh::Packet* pkt, uint32_t timestamp, const char *text) = 0;

0 commit comments

Comments
 (0)