@@ -630,7 +630,7 @@ bool SARA_R5::processURCEvent(const char *event)
630
630
}
631
631
}
632
632
{ // URC: +UUFTPCR (FTP Command Result)
633
- SARA_R5_ftp_command_opcode_t ftpCmd;
633
+ int ftpCmd;
634
634
int ftpResult;
635
635
int scanNum;
636
636
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,
4466
4466
4467
4467
SARA_R5_error_t SARA_R5::mqttPublishTextMsg (const String& topic, const char * const msg, uint8_t qos, bool retain)
4468
4468
{
4469
- if (topic.isEmpty () || msg == nullptr )
4469
+ if (topic.length () < 1 || msg == nullptr )
4470
4470
{
4471
4471
return SARA_R5_ERROR_INVALID;
4472
4472
}
4473
4473
4474
4474
SARA_R5_error_t err;
4475
4475
4476
+ char sanitized_msg[MAX_MQTT_DIRECT_MSG_LEN + 1 ];
4477
+ memset (sanitized_msg, 0 , sizeof (sanitized_msg));
4478
+
4476
4479
// Check the message length and truncate if necessary.
4477
4480
size_t msg_len = strnlen (msg, MAX_MQTT_DIRECT_MSG_LEN);
4478
4481
if (msg_len > MAX_MQTT_DIRECT_MSG_LEN)
4479
4482
{
4480
4483
msg_len = MAX_MQTT_DIRECT_MSG_LEN;
4481
4484
}
4482
4485
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
+ }
4484
4497
4485
4498
char *command = sara_r5_calloc_char (strlen (SARA_R5_MQTT_COMMAND) + 20 + topic.length () + msg_len);
4486
4499
if (command == nullptr )
4487
4500
{
4488
4501
return SARA_R5_ERROR_OUT_OF_MEMORY;
4489
4502
}
4490
4503
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 );
4492
4505
4493
4506
sendCommand (command, true );
4494
4507
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 *
4513
4526
*
4514
4527
* +UUMQTTC: 9,1
4515
4528
*/
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)
4517
4530
{
4518
4531
return SARA_R5_ERROR_INVALID;
4519
4532
}
@@ -4541,7 +4554,7 @@ SARA_R5_error_t SARA_R5::mqttPublishBinaryMsg(const String& topic, const char *
4541
4554
4542
4555
SARA_R5_error_t SARA_R5::mqttPublishFromFile (const String& topic, const String& filename, uint8_t qos, bool retain)
4543
4556
{
4544
- if (topic.isEmpty () || filename.isEmpty () )
4557
+ if (topic.length () < 1 || filename.length () < 1 )
4545
4558
{
4546
4559
return SARA_R5_ERROR_INVALID;
4547
4560
}
@@ -5570,7 +5583,7 @@ SARA_R5_error_t SARA_R5::getFileContents(String filename, char *contents)
5570
5583
SARA_R5_error_t SARA_R5::getFileBlock (const String& filename, char * buffer, size_t offset, size_t requested_length, size_t & bytes_read)
5571
5584
{
5572
5585
bytes_read = 0 ;
5573
- if (filename.isEmpty () || buffer == nullptr || requested_length < 1 )
5586
+ if (filename.length () < 1 || buffer == nullptr || requested_length < 1 )
5574
5587
{
5575
5588
return SARA_R5_ERROR_UNEXPECTED_PARAM;
5576
5589
}
@@ -5589,10 +5602,6 @@ SARA_R5_error_t SARA_R5::getFileBlock(const String& filename, char* buffer, size
5589
5602
size_t cmd_len = filename.length () + 32 ;
5590
5603
char * cmd = sara_r5_calloc_char (cmd_len);
5591
5604
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
- }
5596
5605
sendCommand (cmd, false );
5597
5606
5598
5607
int ich;
@@ -5620,20 +5629,12 @@ SARA_R5_error_t SARA_R5::getFileBlock(const String& filename, char* buffer, size
5620
5629
}
5621
5630
5622
5631
cmd[bytes_read] = 0 ;
5623
- if (_printDebug == true )
5624
- {
5625
- _debugPort->printf (" getFileBlock: header: [%s]\r\n " , cmd);
5626
- }
5627
5632
cmd[bytes_read - 2 ] = 0 ;
5628
5633
5629
5634
// Example response:
5630
5635
// +URDBLOCK: "wombat.bin",64000,"<data starts here>... "<cr><lf>
5631
5636
size_t data_length = strtoul (&cmd[comma_idx], nullptr , 10 );
5632
5637
free (cmd);
5633
- if (_printDebug == true )
5634
- {
5635
- _debugPort->printf (" getFileBlock: reading %zu bytes\r\n " , data_length);
5636
- }
5637
5638
5638
5639
bytes_read = 0 ;
5639
5640
size_t bytes_remaining = data_length;
@@ -5645,11 +5646,6 @@ SARA_R5_error_t SARA_R5::getFileBlock(const String& filename, char* buffer, size
5645
5646
bytes_remaining -= rc;
5646
5647
}
5647
5648
5648
- if (_printDebug == true )
5649
- {
5650
- _debugPort->printf (" getFileBlock: read %zu bytes\r\n " , bytes_read);
5651
- }
5652
-
5653
5649
return SARA_R5_ERROR_SUCCESS;
5654
5650
}
5655
5651
0 commit comments