@@ -630,7 +630,7 @@ bool SARA_R5::processURCEvent(const char *event)
630630 }
631631 }
632632 { // URC: +UUFTPCR (FTP Command Result)
633- SARA_R5_ftp_command_opcode_t ftpCmd;
633+ int ftpCmd;
634634 int ftpResult;
635635 int scanNum;
636636 char *searchPtr = strstr (event, SARA_R5_FTP_COMMAND_URC);
@@ -4466,29 +4466,42 @@ SARA_R5_error_t SARA_R5::readMQTT(int* pQos, String* pTopic, uint8_t *readDest,
44664466
44674467SARA_R5_error_t SARA_R5::mqttPublishTextMsg (const String& topic, const char * const msg, uint8_t qos, bool retain)
44684468{
4469- if (topic.isEmpty () || msg == nullptr )
4469+ if (topic.length () < 1 || msg == nullptr )
44704470 {
44714471 return SARA_R5_ERROR_INVALID;
44724472 }
44734473
44744474 SARA_R5_error_t err;
44754475
4476+ char sanitized_msg[MAX_MQTT_DIRECT_MSG_LEN + 1 ];
4477+ memset (sanitized_msg, 0 , sizeof (sanitized_msg));
4478+
44764479 // Check the message length and truncate if necessary.
44774480 size_t msg_len = strnlen (msg, MAX_MQTT_DIRECT_MSG_LEN);
44784481 if (msg_len > MAX_MQTT_DIRECT_MSG_LEN)
44794482 {
44804483 msg_len = MAX_MQTT_DIRECT_MSG_LEN;
44814484 }
44824485
4483- String str_msg (msg, msg_len);
4486+ strncpy (sanitized_msg, msg, msg_len);
4487+ char * msg_ptr = sanitized_msg;
4488+ while (*msg_ptr != 0 )
4489+ {
4490+ if (*msg_ptr == ' "' )
4491+ {
4492+ *msg_ptr = ' ' ;
4493+ }
4494+
4495+ msg_ptr++;
4496+ }
44844497
44854498 char *command = sara_r5_calloc_char (strlen (SARA_R5_MQTT_COMMAND) + 20 + topic.length () + msg_len);
44864499 if (command == nullptr )
44874500 {
44884501 return SARA_R5_ERROR_OUT_OF_MEMORY;
44894502 }
44904503
4491- sprintf (command, " %s=%d,%u,%u,0,\" %s\" ,\" %s\" " , SARA_R5_MQTT_COMMAND, SARA_R5_MQTT_COMMAND_PUBLISH, qos, (retain ? 1 :0 ), topic.c_str (), str_msg. c_str () );
4504+ sprintf (command, " %s=%d,%u,%u,0,\" %s\" ,\" %s\" " , SARA_R5_MQTT_COMMAND, SARA_R5_MQTT_COMMAND_PUBLISH, qos, (retain ? 1 :0 ), topic.c_str (), sanitized_msg );
44924505
44934506 sendCommand (command, true );
44944507 err = waitForResponse (SARA_R5_RESPONSE_MORE, SARA_R5_RESPONSE_ERROR, SARA_R5_STANDARD_RESPONSE_TIMEOUT);
@@ -4513,7 +4526,7 @@ SARA_R5_error_t SARA_R5::mqttPublishBinaryMsg(const String& topic, const char *
45134526 *
45144527 * +UUMQTTC: 9,1
45154528 */
4516- if (topic.isEmpty () || msg == nullptr || msg_len > MAX_MQTT_DIRECT_MSG_LEN)
4529+ if (topic.length () < 1 || msg == nullptr || msg_len > MAX_MQTT_DIRECT_MSG_LEN)
45174530 {
45184531 return SARA_R5_ERROR_INVALID;
45194532 }
@@ -4541,7 +4554,7 @@ SARA_R5_error_t SARA_R5::mqttPublishBinaryMsg(const String& topic, const char *
45414554
45424555SARA_R5_error_t SARA_R5::mqttPublishFromFile (const String& topic, const String& filename, uint8_t qos, bool retain)
45434556{
4544- if (topic.isEmpty () || filename.isEmpty () )
4557+ if (topic.length () < 1 || filename.length () < 1 )
45454558 {
45464559 return SARA_R5_ERROR_INVALID;
45474560 }
@@ -5570,7 +5583,7 @@ SARA_R5_error_t SARA_R5::getFileContents(String filename, char *contents)
55705583SARA_R5_error_t SARA_R5::getFileBlock (const String& filename, char * buffer, size_t offset, size_t requested_length, size_t & bytes_read)
55715584{
55725585 bytes_read = 0 ;
5573- if (filename.isEmpty () || buffer == nullptr || requested_length < 1 )
5586+ if (filename.length () < 1 || buffer == nullptr || requested_length < 1 )
55745587 {
55755588 return SARA_R5_ERROR_UNEXPECTED_PARAM;
55765589 }
@@ -5589,10 +5602,6 @@ SARA_R5_error_t SARA_R5::getFileBlock(const String& filename, char* buffer, size
55895602 size_t cmd_len = filename.length () + 32 ;
55905603 char * cmd = sara_r5_calloc_char (cmd_len);
55915604 sprintf (cmd, " at+urdblock=\" %s\" ,%zu,%zu\r\n " , filename.c_str (), offset, requested_length);
5592- if (_printDebug == true )
5593- {
5594- _debugPort->printf (" getFileBlock: sending command: %s\r\n " , cmd);
5595- }
55965605 sendCommand (cmd, false );
55975606
55985607 int ich;
@@ -5620,20 +5629,12 @@ SARA_R5_error_t SARA_R5::getFileBlock(const String& filename, char* buffer, size
56205629 }
56215630
56225631 cmd[bytes_read] = 0 ;
5623- if (_printDebug == true )
5624- {
5625- _debugPort->printf (" getFileBlock: header: [%s]\r\n " , cmd);
5626- }
56275632 cmd[bytes_read - 2 ] = 0 ;
56285633
56295634 // Example response:
56305635 // +URDBLOCK: "wombat.bin",64000,"<data starts here>... "<cr><lf>
56315636 size_t data_length = strtoul (&cmd[comma_idx], nullptr , 10 );
56325637 free (cmd);
5633- if (_printDebug == true )
5634- {
5635- _debugPort->printf (" getFileBlock: reading %zu bytes\r\n " , data_length);
5636- }
56375638
56385639 bytes_read = 0 ;
56395640 size_t bytes_remaining = data_length;
@@ -5645,11 +5646,6 @@ SARA_R5_error_t SARA_R5::getFileBlock(const String& filename, char* buffer, size
56455646 bytes_remaining -= rc;
56465647 }
56475648
5648- if (_printDebug == true )
5649- {
5650- _debugPort->printf (" getFileBlock: read %zu bytes\r\n " , bytes_read);
5651- }
5652-
56535649 return SARA_R5_ERROR_SUCCESS;
56545650}
56555651
0 commit comments