---
 gatchat/gatserver.c |   10 ++++++++++
 1 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/gatchat/gatserver.c b/gatchat/gatserver.c
index 5f21766..ce78857 100644
--- a/gatchat/gatserver.c
+++ b/gatchat/gatserver.c
@@ -119,6 +119,7 @@ struct _GAtServer {
        GAtServerResult last_result;            /* Last command's result code */
        gboolean final_called;                  /* Is send_final called */
        gboolean wait_final;                    /* Wait for final result code */
+       gboolean parse_ready;                   /* Ready to parse next line */
 };
 
 static void g_at_server_wakeup_writer(GAtServer *server);
@@ -199,6 +200,8 @@ static void g_at_server_send_flush(GAtServer *server, 
GAtServerResult result)
                sprintf(buf, "%u", (unsigned int)result);
 
        send_result_common(server, buf);
+
+       server->parse_ready = TRUE;
 }
 
 void g_at_server_send_final(GAtServer *server, GAtServerResult result)
@@ -223,6 +226,7 @@ void g_at_server_send_ext_final(GAtServer *server, const 
char *result)
 
        server->final_called = TRUE;
        server->wait_final = FALSE;
+       server->parse_ready = TRUE;
 }
 
 void g_at_server_send_intermediate(GAtServer *server, const char *result)
@@ -721,6 +725,7 @@ static void new_bytes(GAtServer *p)
                        p->last_line = extract_line(p);
                        if (p->last_line) {
                                p->cur_pos = 0;
+                               p->parse_ready = FALSE;
 
                                server_parse_line(p);
                        } else
@@ -777,6 +782,10 @@ static gboolean received_data(GIOChannel *channel, 
GIOCondition cond,
                g_at_util_debug_chat(TRUE, (char *)buf, rbytes,
                                        server->debugf, server->debug_data);
 
+               /* Ignore incoming bytes when processing a command line */
+               if (!server->parse_ready)
+                       continue;
+
                read_count++;
 
                total_read += rbytes;
@@ -963,6 +972,7 @@ GAtServer *g_at_server_new(GIOChannel *io)
        server->ref_count = 1;
        v250_settings_create(&server->v250);
        server->channel = io;
+       server->parse_ready = 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

Reply via email to