diff --git a/examples/companion_radio/main.cpp b/examples/companion_radio/main.cpp index a5a1ef96..d666d537 100644 --- a/examples/companion_radio/main.cpp +++ b/examples/companion_radio/main.cpp @@ -396,8 +396,9 @@ public: if (recipient && attempt < 4 && txt_type == TXT_TYPE_PLAIN) { char *text = (char *) &cmd_frame[i]; int tlen = len - i; + uint32_t est_timeout; text[tlen] = 0; // ensure null - int result = sendMessage(*recipient, msg_timestamp, attempt, text, expected_ack_crc); + int result = sendMessage(*recipient, msg_timestamp, attempt, text, expected_ack_crc, est_timeout); // TODO: add expected ACK to table if (result == MSG_SEND_FAILED) { writeErrFrame(); @@ -407,7 +408,8 @@ public: out_frame[0] = RESP_CODE_SENT; out_frame[1] = (result == MSG_SEND_SENT_FLOOD) ? 1 : 0; memcpy(&out_frame[2], &expected_ack_crc, 4); - _serial->writeFrame(out_frame, 6); + memcpy(&out_frame[6], &est_timeout, 4); + _serial->writeFrame(out_frame, 10); } } else { writeErrFrame(); // unknown recipient, or unsuported TXT_TYPE_* diff --git a/examples/simple_secure_chat/main.cpp b/examples/simple_secure_chat/main.cpp index abe564ed..af905869 100644 --- a/examples/simple_secure_chat/main.cpp +++ b/examples/simple_secure_chat/main.cpp @@ -277,7 +277,9 @@ public: if (memcmp(command, "send ", 5) == 0) { if (curr_recipient) { const char *text = &command[5]; - int result = sendMessage(*curr_recipient, getRTCClock()->getCurrentTime(), 0, text, expected_ack_crc); + uint32_t est_timeout; + + int result = sendMessage(*curr_recipient, getRTCClock()->getCurrentTime(), 0, text, expected_ack_crc, est_timeout); if (result == MSG_SEND_FAILED) { Serial.println(" ERROR: unable to send."); } else { diff --git a/src/helpers/BaseChatMesh.cpp b/src/helpers/BaseChatMesh.cpp index 9b231a1e..6f1bf6f7 100644 --- a/src/helpers/BaseChatMesh.cpp +++ b/src/helpers/BaseChatMesh.cpp @@ -201,7 +201,7 @@ mesh::Packet* BaseChatMesh::composeMsgPacket(const ContactInfo& recipient, uint3 return createDatagram(PAYLOAD_TYPE_TXT_MSG, recipient.id, recipient.shared_secret, temp, 5 + text_len); } -int BaseChatMesh::sendMessage(const ContactInfo& recipient, uint32_t timestamp, uint8_t attempt, const char* text, uint32_t& expected_ack) { +int BaseChatMesh::sendMessage(const ContactInfo& recipient, uint32_t timestamp, uint8_t attempt, const char* text, uint32_t& expected_ack, uint32_t& est_timeout) { mesh::Packet* pkt = composeMsgPacket(recipient, timestamp, attempt, text, expected_ack); if (pkt == NULL) return MSG_SEND_FAILED; @@ -210,11 +210,11 @@ int BaseChatMesh::sendMessage(const ContactInfo& recipient, uint32_t timestamp, int rc; if (recipient.out_path_len < 0) { sendFlood(pkt); - txt_send_timeout = futureMillis(calcFloodTimeoutMillisFor(t)); + txt_send_timeout = futureMillis(est_timeout = calcFloodTimeoutMillisFor(t)); rc = MSG_SEND_SENT_FLOOD; } else { sendDirect(pkt, recipient.out_path, recipient.out_path_len); - txt_send_timeout = futureMillis(calcDirectTimeoutMillisFor(t, recipient.out_path_len)); + txt_send_timeout = futureMillis(est_timeout = calcDirectTimeoutMillisFor(t, recipient.out_path_len)); rc = MSG_SEND_SENT_DIRECT; } return rc; diff --git a/src/helpers/BaseChatMesh.h b/src/helpers/BaseChatMesh.h index 9a7b2627..3c696e7a 100644 --- a/src/helpers/BaseChatMesh.h +++ b/src/helpers/BaseChatMesh.h @@ -97,7 +97,7 @@ protected: public: mesh::Packet* createSelfAdvert(const char* name); - int sendMessage(const ContactInfo& recipient, uint32_t timestamp, uint8_t attempt, const char* text, uint32_t& expected_ack); + int sendMessage(const ContactInfo& recipient, uint32_t timestamp, uint8_t attempt, const char* text, uint32_t& expected_ack, uint32_t& est_timeout); void resetPathTo(ContactInfo& recipient); void scanRecentContacts(int last_n, ContactVisitor* visitor); ContactInfo* searchContactsByPrefix(const char* name_prefix);