mirror of https://github.com/ARMmbed/mbed-os.git
Cellular: Fix ATHandler::read_string to handle delimiter inside string
For example if input buffer includes: +CCLK: "20/04/05,15:38:57+12" read_string return "20/04/05,15:38:57+12" instead of "20/04/05"pull/12763/head
parent
4b3cddff2a
commit
584d54e955
|
|
@ -763,6 +763,31 @@ TEST_F(TestATHandler, test_ATHandler_read_string)
|
|||
EXPECT_TRUE(NSAPI_ERROR_DEVICE_ERROR == at.get_last_error());
|
||||
}
|
||||
|
||||
TEST_F(TestATHandler, test_ATHandler_read_string_with_delimiter)
|
||||
{
|
||||
EventQueue que;
|
||||
FileHandle_stub fh1;
|
||||
filehandle_stub_table = NULL;
|
||||
filehandle_stub_table_pos = 0;
|
||||
|
||||
ATHandler at(&fh1, que, 0, ",");
|
||||
|
||||
char table1[] = "+CCLK:\"20/04/05,15:38:57+12\"\r\nOK\r\n";
|
||||
at.flush();
|
||||
filehandle_stub_table = table1;
|
||||
filehandle_stub_table_pos = 0;
|
||||
mbed_poll_stub::revents_value = POLLIN;
|
||||
mbed_poll_stub::int_value = 1;
|
||||
|
||||
char buf1[64];
|
||||
|
||||
at.clear_error();
|
||||
at.resp_start("+CCLK:");
|
||||
// Device error because empty buffer and attempt to fill_buffer by consume_char('\"')
|
||||
EXPECT_EQ(20, at.read_string(buf1, sizeof(buf1)));
|
||||
EXPECT_STREQ("20/04/05,15:38:57+12", buf1);
|
||||
}
|
||||
|
||||
TEST_F(TestATHandler, test_ATHandler_read_hex_string)
|
||||
{
|
||||
EventQueue que;
|
||||
|
|
@ -852,7 +877,7 @@ TEST_F(TestATHandler, test_ATHandler_read_int)
|
|||
EXPECT_TRUE(-1 == ret);
|
||||
at.clear_error();
|
||||
|
||||
char table[] = "\",\"OK\r\n\0";
|
||||
char table[] = ",OK\r\n\0";
|
||||
filehandle_stub_table = table;
|
||||
filehandle_stub_table_pos = 0;
|
||||
mbed_poll_stub::revents_value = POLLIN;
|
||||
|
|
@ -865,7 +890,7 @@ TEST_F(TestATHandler, test_ATHandler_read_int)
|
|||
at.flush();
|
||||
at.clear_error();
|
||||
|
||||
char table2[] = "\"2,\"OK\r\n\0";
|
||||
char table2[] = "2,OK\r\n\0";
|
||||
filehandle_stub_table = table2;
|
||||
filehandle_stub_table_pos = 0;
|
||||
mbed_poll_stub::revents_value = POLLIN;
|
||||
|
|
|
|||
|
|
@ -512,19 +512,21 @@ ssize_t ATHandler::read_string(char *buf, size_t size, bool read_even_stop_tag)
|
|||
unsigned int len = 0;
|
||||
size_t match_pos = 0;
|
||||
bool delimiter_found = false;
|
||||
bool inside_quotes = false;
|
||||
|
||||
for (; len < (size - 1 + match_pos); len++) {
|
||||
int c = get_char();
|
||||
if (c == -1) {
|
||||
set_error(NSAPI_ERROR_DEVICE_ERROR);
|
||||
return -1;
|
||||
} else if (c == _delimiter) {
|
||||
} else if (c == _delimiter && !inside_quotes) {
|
||||
buf[len] = '\0';
|
||||
delimiter_found = true;
|
||||
break;
|
||||
} else if (c == '\"') {
|
||||
match_pos = 0;
|
||||
len--;
|
||||
inside_quotes = !inside_quotes;
|
||||
continue;
|
||||
} else if (_stop_tag->len && c == _stop_tag->tag[match_pos]) {
|
||||
match_pos++;
|
||||
|
|
|
|||
Loading…
Reference in New Issue