Skip to content

Commit a020315

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 06ab9f7 commit a020315

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

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

101101
#define PUBLIC_GROUP_PSK "izOH6cXN6mrJ5e26oRXNcg=="
@@ -779,8 +779,8 @@ void MyMesh::onTraceRecv(mesh::Packet *packet, uint32_t tag, uint32_t auth_code,
779779
}
780780
}
781781

782-
uint32_t MyMesh::calcFloodTimeoutMillisFor(uint32_t pkt_airtime_millis) const {
783-
return SEND_TIMEOUT_BASE_MILLIS + (FLOOD_SEND_TIMEOUT_FACTOR * pkt_airtime_millis);
782+
uint32_t MyMesh::calcFloodTimeoutMillisFor(uint32_t pkt_airtime_millis, uint8_t attempt) const {
783+
return (SEND_TIMEOUT_BASE_MILLIS + (FLOOD_SEND_TIMEOUT_FACTOR * pkt_airtime_millis)) * (attempt + 1);
784784
}
785785
uint32_t MyMesh::calcDirectTimeoutMillisFor(uint32_t pkt_airtime_millis, uint8_t path_len) const {
786786
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
@@ -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
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
@@ -388,7 +388,7 @@ int BaseChatMesh::sendMessage(const ContactInfo& recipient, uint32_t timestamp,
388388
int rc;
389389
if (recipient.out_path_len == OUT_PATH_UNKNOWN) {
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 == OUT_PATH_UNKNOWN) {
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)