---
gatchat/gatserver.c | 12 +++++++++++-
1 files changed, 11 insertions(+), 1 deletions(-)
diff --git a/gatchat/gatserver.c b/gatchat/gatserver.c
index fdc4180..5d2a036 100644
--- a/gatchat/gatserver.c
+++ b/gatchat/gatserver.c
@@ -118,6 +118,7 @@ struct _GAtServer {
unsigned int read_pos; /* Current read offset */
int notify_source; /* Source of notify callback */
GAtServerResult last_result; /* Result of last command */
+ gboolean is_online; /* Online or offline mode */
};
struct at_notify_node {
@@ -239,6 +240,8 @@ static void g_at_server_send_flush(GAtServer *server)
sprintf(buf, "%u", (unsigned int)result);
send_result_common(server, buf);
+
+ server->is_online = TRUE;
}
inline void g_at_server_send_final(GAtServer *server, GAtServerResult result)
@@ -728,7 +731,7 @@ static void new_bytes(GAtServer *p)
unsigned char *buf = ring_buffer_read_ptr(p->read_buf, p->read_so_far);
enum ParserResult result;
- while (p->channel && (p->read_so_far < len)) {
+ while (p->channel && p->is_online && (p->read_so_far < len)) {
gsize rbytes = MIN(len - p->read_so_far, wrap - p->read_so_far);
result = server_feed(p, (char *)buf, &rbytes);
@@ -764,6 +767,12 @@ static void new_bytes(GAtServer *p)
p->read_pos = 0;
p->last_result = G_AT_SERVER_RESULT_OK;
+ /* Set offline mode so that server won't feed
+ * the next command line until current line is
+ * processed and final result code is flushed.
+ */
+ p->is_online = FALSE;
+
server_parse_line(p);
} else {
g_at_server_send_final(p,
@@ -1013,6 +1022,7 @@ GAtServer *g_at_server_new(GIOChannel *io)
server->ref_count = 1;
v250_settings_create(&server->v250);
server->channel = io;
+ server->is_online = TRUE;
server->command_list = g_hash_table_new_full(g_str_hash, g_str_equal,
g_free,
at_notify_node_destroy);
--
1.6.6.1
_______________________________________________
ofono mailing list
[email protected]
http://lists.ofono.org/listinfo/ofono