* CMD_SEND_PATH_DISCOVERY_REQ: now force the sendRequest() to use flood mode
This commit is contained in:
@@ -49,7 +49,7 @@
|
|||||||
// NOTE: CMD range 44..49 parked, potentially for WiFi operations
|
// NOTE: CMD range 44..49 parked, potentially for WiFi operations
|
||||||
#define CMD_SEND_BINARY_REQ 50
|
#define CMD_SEND_BINARY_REQ 50
|
||||||
#define CMD_FACTORY_RESET 51
|
#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_OK 0
|
||||||
#define RESP_CODE_ERR 1
|
#define RESP_CODE_ERR 1
|
||||||
@@ -98,7 +98,7 @@
|
|||||||
#define PUSH_CODE_NEW_ADVERT 0x8A
|
#define PUSH_CODE_NEW_ADVERT 0x8A
|
||||||
#define PUSH_CODE_TELEMETRY_RESPONSE 0x8B
|
#define PUSH_CODE_TELEMETRY_RESPONSE 0x8B
|
||||||
#define PUSH_CODE_BINARY_RESPONSE 0x8C
|
#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_UNSUPPORTED_CMD 1
|
||||||
#define ERR_CODE_NOT_FOUND 2
|
#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);
|
MESH_DEBUG_PRINTLN("onContactPathRecv, invalid path sizes: %d, %d", in_path_len, out_path_len);
|
||||||
} else {
|
} else {
|
||||||
int i = 0;
|
int i = 0;
|
||||||
out_frame[i++] = PUSH_CODE_DISCOVERY_RESPONSE;
|
out_frame[i++] = PUSH_CODE_PATH_DISCOVERY_RESPONSE;
|
||||||
out_frame[i++] = 0; // reserved
|
out_frame[i++] = 0; // reserved
|
||||||
memcpy(&out_frame[i], contact.id.pub_key, 6);
|
memcpy(&out_frame[i], contact.id.pub_key, 6);
|
||||||
i += 6; // pub_key_prefix
|
i += 6; // pub_key_prefix
|
||||||
@@ -1204,7 +1204,7 @@ void MyMesh::handleCmdFrame(size_t len) {
|
|||||||
} else {
|
} else {
|
||||||
writeErrFrame(ERR_CODE_NOT_FOUND); // contact not found
|
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];
|
uint8_t *pub_key = &cmd_frame[2];
|
||||||
ContactInfo *recipient = lookupContactByPubKey(pub_key, PUB_KEY_SIZE);
|
ContactInfo *recipient = lookupContactByPubKey(pub_key, PUB_KEY_SIZE);
|
||||||
if (recipient) {
|
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)
|
req_data[1] = ~(TELEM_PERM_BASE); // NEW: inverse permissions mask (ie. we only want BASE telemetry)
|
||||||
memset(&req_data[2], 0, 3); // reserved
|
memset(&req_data[2], 0, 3); // reserved
|
||||||
getRNG()->random(&req_data[5], 4); // random blob to help make packet-hash unique
|
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);
|
int result = sendRequest(*recipient, req_data, sizeof(req_data), tag, est_timeout);
|
||||||
|
recipient->out_path_len = save;
|
||||||
if (result == MSG_SEND_FAILED) {
|
if (result == MSG_SEND_FAILED) {
|
||||||
writeErrFrame(ERR_CODE_TABLE_FULL);
|
writeErrFrame(ERR_CODE_TABLE_FULL);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user