Browse Source

* CMD_SEND_PATH_DISCOVERY_REQ: now force the sendRequest() to use flood mode

Scott Powell 1 year ago
parent
commit
2824fc31a4
1 changed files with 7 additions and 4 deletions
  1. 7 4
      examples/companion_radio/MyMesh.cpp

+ 7 - 4
examples/companion_radio/MyMesh.cpp

@@ -49,7 +49,7 @@
 // NOTE: CMD range 44..49 parked, potentially for WiFi operations
 #define CMD_SEND_BINARY_REQ           50
 #define CMD_FACTORY_RESET             51
-#define CMD_SEND_DISCOVERY_REQ        52
+#define CMD_SEND_PATH_DISCOVERY_REQ   52
 
 #define RESP_CODE_OK                  0
 #define RESP_CODE_ERR                 1
@@ -98,7 +98,7 @@
 #define PUSH_CODE_NEW_ADVERT            0x8A
 #define PUSH_CODE_TELEMETRY_RESPONSE    0x8B
 #define PUSH_CODE_BINARY_RESPONSE       0x8C
-#define PUSH_CODE_DISCOVERY_RESPONSE    0x8D
+#define PUSH_CODE_PATH_DISCOVERY_RESPONSE 0x8D
 
 #define ERR_CODE_UNSUPPORTED_CMD        1
 #define ERR_CODE_NOT_FOUND              2
@@ -544,7 +544,7 @@ bool MyMesh::onContactPathRecv(ContactInfo& contact, uint8_t* in_path, uint8_t i
         MESH_DEBUG_PRINTLN("onContactPathRecv, invalid path sizes: %d, %d", in_path_len, out_path_len);
       } else {
         int i = 0;
-        out_frame[i++] = PUSH_CODE_DISCOVERY_RESPONSE;
+        out_frame[i++] = PUSH_CODE_PATH_DISCOVERY_RESPONSE;
         out_frame[i++] = 0; // reserved
         memcpy(&out_frame[i], contact.id.pub_key, 6);
         i += 6; // pub_key_prefix
@@ -1204,7 +1204,7 @@ void MyMesh::handleCmdFrame(size_t len) {
     } else {
       writeErrFrame(ERR_CODE_NOT_FOUND); // contact not found
     }
-  } else if (cmd_frame[0] == CMD_SEND_DISCOVERY_REQ && cmd_frame[1] == 0 && len >= 2 + PUB_KEY_SIZE) {
+  } else if (cmd_frame[0] == CMD_SEND_PATH_DISCOVERY_REQ && cmd_frame[1] == 0 && len >= 2 + PUB_KEY_SIZE) {
     uint8_t *pub_key = &cmd_frame[2];
     ContactInfo *recipient = lookupContactByPubKey(pub_key, PUB_KEY_SIZE);
     if (recipient) {
@@ -1215,7 +1215,10 @@ void MyMesh::handleCmdFrame(size_t len) {
       req_data[1] = ~(TELEM_PERM_BASE);  // NEW: inverse permissions mask (ie. we only want BASE telemetry)
       memset(&req_data[2], 0, 3);  // reserved
       getRNG()->random(&req_data[5], 4);   // random blob to help make packet-hash unique
+      auto save = recipient->out_path_len;    // temporarily force sendRequest() to flood
+      recipient->out_path_len = -1;
       int result = sendRequest(*recipient, req_data, sizeof(req_data), tag, est_timeout);
+      recipient->out_path_len = save;
       if (result == MSG_SEND_FAILED) {
         writeErrFrame(ERR_CODE_TABLE_FULL);
       } else {