Fix change state immediately when meet the slash
authorZhenhua Zhang <zhenhua.zhang@intel.com>
Tue, 2 Feb 2010 13:23:22 +0000 (21:23 +0800)
committerDenis Kenzior <denkenz@gmail.com>
Tue, 2 Feb 2010 17:31:23 +0000 (11:31 -0600)
According to V.250 spec section 5.2.4 Repeating a command line, if
the prefix "A/" or "a/" is received, we should execute the last
command immediately. No need to meet \r.

gatchat/gatserver.c

index fe5c3a8..a01ded6 100644 (file)
@@ -35,7 +35,6 @@
 enum ParserState {
        PARSER_STATE_IDLE,
        PARSER_STATE_A,
-       PARSER_STATE_SLASH,
        PARSER_STATE_COMMAND,
        PARSER_STATE_GARBAGE,
 };
@@ -214,22 +213,14 @@ static enum ParserResult server_feed(GAtServer *server,
                                i += 1;
                                res = PARSER_RESULT_GARBAGE;
                                goto out;
-                       } else if (byte == '/')
-                               server->parser_state = PARSER_STATE_SLASH;
-                       else if (byte == 'T' || byte == 't')
-                               server->parser_state = PARSER_STATE_COMMAND;
-                       else
-                               server->parser_state = PARSER_STATE_GARBAGE;
-
-                       break;
-
-               case PARSER_STATE_SLASH:
-                       if (byte == s3) {
+                       } else if (byte == '/') {
                                server->parser_state = PARSER_STATE_IDLE;
-                               i+= 1;
+                               i += 1;
                                res = PARSER_RESULT_REPEAT_LAST;
                                goto out;
-                       } else if (byte != ' ' && byte != '\t')
+                       } else if (byte == 'T' || byte == 't')
+                               server->parser_state = PARSER_STATE_COMMAND;
+                       else
                                server->parser_state = PARSER_STATE_GARBAGE;
 
                        break;
@@ -246,7 +237,6 @@ static enum ParserResult server_feed(GAtServer *server,
                case PARSER_STATE_GARBAGE:
                        if (byte == s3) {
                                server->parser_state = PARSER_STATE_IDLE;
-
                                i += 1;
                                res = PARSER_RESULT_GARBAGE;
                                goto out;