mirror of
https://github.com/MarekZegare4/MeshCore-Solo.git
synced 2026-11-02 19:02:00 +00:00
support for CMD_SEND_TXT_MSG and new TXT_TYPE_CLI_COMMAND
This commit is contained in:
@@ -1119,16 +1119,16 @@ void MyMesh::handleCmdFrame(size_t len) {
|
|||||||
uint8_t *pub_key_prefix = &cmd_frame[i];
|
uint8_t *pub_key_prefix = &cmd_frame[i];
|
||||||
i += 6;
|
i += 6;
|
||||||
ContactInfo *recipient = lookupContactByPubKey(pub_key_prefix, 6);
|
ContactInfo *recipient = lookupContactByPubKey(pub_key_prefix, 6);
|
||||||
if (recipient && (txt_type == TXT_TYPE_PLAIN || txt_type == TXT_TYPE_CLI_DATA)) {
|
if (recipient && (txt_type == TXT_TYPE_PLAIN || txt_type == TXT_TYPE_CLI_DATA || txt_type == TXT_TYPE_CLI_COMMAND)) {
|
||||||
char *text = (char *)&cmd_frame[i];
|
char *text = (char *)&cmd_frame[i];
|
||||||
int tlen = len - i;
|
int tlen = len - i;
|
||||||
uint32_t est_timeout;
|
uint32_t est_timeout;
|
||||||
text[tlen] = 0; // ensure null
|
text[tlen] = 0; // ensure null
|
||||||
int result;
|
int result;
|
||||||
uint32_t expected_ack;
|
uint32_t expected_ack;
|
||||||
if (txt_type == TXT_TYPE_CLI_DATA) {
|
if (txt_type == TXT_TYPE_CLI_DATA || txt_type == TXT_TYPE_CLI_COMMAND) {
|
||||||
msg_timestamp = getRTCClock()->getCurrentTimeUnique(); // Use node's RTC instead of app timestamp to avoid tripping replay protection
|
msg_timestamp = getRTCClock()->getCurrentTimeUnique(); // Use node's RTC instead of app timestamp to avoid tripping replay protection
|
||||||
result = sendCommandData(*recipient, msg_timestamp, attempt, text, est_timeout);
|
result = sendCommandData(*recipient, msg_timestamp, attempt, txt_type, text, est_timeout);
|
||||||
expected_ack = 0; // no Ack expected
|
expected_ack = 0; // no Ack expected
|
||||||
} else {
|
} else {
|
||||||
result = sendMessage(*recipient, msg_timestamp, attempt, text, expected_ack, est_timeout);
|
result = sendMessage(*recipient, msg_timestamp, attempt, text, expected_ack, est_timeout);
|
||||||
|
|||||||
@@ -489,13 +489,13 @@ int BaseChatMesh::sendMessage(const ContactInfo& recipient, uint32_t timestamp,
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
int BaseChatMesh::sendCommandData(const ContactInfo& recipient, uint32_t timestamp, uint8_t attempt, const char* text, uint32_t& est_timeout) {
|
int BaseChatMesh::sendCommandData(const ContactInfo& recipient, uint32_t timestamp, uint8_t attempt, uint8_t txt_type, const char* text, uint32_t& est_timeout) {
|
||||||
int text_len = strlen(text);
|
int text_len = strlen(text);
|
||||||
if (text_len > MAX_TEXT_LEN) return MSG_SEND_FAILED;
|
if (text_len > MAX_TEXT_LEN) return MSG_SEND_FAILED;
|
||||||
|
|
||||||
uint8_t temp[5+MAX_TEXT_LEN+1];
|
uint8_t temp[5+MAX_TEXT_LEN+1];
|
||||||
memcpy(temp, ×tamp, 4); // mostly an extra blob to help make packet_hash unique
|
memcpy(temp, ×tamp, 4); // mostly an extra blob to help make packet_hash unique
|
||||||
temp[4] = (attempt & 3) | (TXT_TYPE_CLI_DATA << 2);
|
temp[4] = (attempt & 3) | (txt_type << 2);
|
||||||
memcpy(&temp[5], text, text_len + 1);
|
memcpy(&temp[5], text, text_len + 1);
|
||||||
|
|
||||||
auto pkt = createDatagram(PAYLOAD_TYPE_TXT_MSG, recipient.id, recipient.getSharedSecret(self_id), temp, 5 + text_len);
|
auto pkt = createDatagram(PAYLOAD_TYPE_TXT_MSG, recipient.id, recipient.getSharedSecret(self_id), temp, 5 + text_len);
|
||||||
|
|||||||
@@ -157,7 +157,7 @@ public:
|
|||||||
mesh::Packet* createSelfAdvert(const char* name);
|
mesh::Packet* createSelfAdvert(const char* name);
|
||||||
mesh::Packet* createSelfAdvert(const char* name, double lat, double lon);
|
mesh::Packet* createSelfAdvert(const char* name, double lat, double lon);
|
||||||
int sendMessage(const ContactInfo& recipient, uint32_t timestamp, uint8_t attempt, const char* text, uint32_t& expected_ack, uint32_t& est_timeout);
|
int sendMessage(const ContactInfo& recipient, uint32_t timestamp, uint8_t attempt, const char* text, uint32_t& expected_ack, uint32_t& est_timeout);
|
||||||
int sendCommandData(const ContactInfo& recipient, uint32_t timestamp, uint8_t attempt, const char* text, uint32_t& est_timeout);
|
int sendCommandData(const ContactInfo& recipient, uint32_t timestamp, uint8_t attempt, uint8_t txt_type, const char* text, uint32_t& est_timeout);
|
||||||
bool sendGroupMessage(uint32_t timestamp, mesh::GroupChannel& channel, const char* sender_name, const char* text, int text_len);
|
bool sendGroupMessage(uint32_t timestamp, mesh::GroupChannel& channel, const char* sender_name, const char* text, int text_len);
|
||||||
bool sendGroupData(mesh::GroupChannel& channel, uint8_t* path, uint8_t path_len, uint16_t data_type, const uint8_t* data, int data_len);
|
bool sendGroupData(mesh::GroupChannel& channel, uint8_t* path, uint8_t path_len, uint16_t data_type, const uint8_t* data, int data_len);
|
||||||
int sendLogin(const ContactInfo& recipient, const char* password, uint32_t& est_timeout);
|
int sendLogin(const ContactInfo& recipient, const char* password, uint32_t& est_timeout);
|
||||||
|
|||||||
Reference in New Issue
Block a user