Hi Zhenhua,

> +static void g_at_server_send_result(GAtServer *server, GAtServerResult
>  result) +{
> +     char buf[1024];
> +
> +     if (server->v250.is_v1)
> +             sprintf(buf, "%s", server_result_to_string(result));
> +     else
> +             sprintf(buf, "%u", (unsigned int)result);
> +
> +     send_result_common(server, buf);
> +}

Please get rid of this function, it serves no purpose and is utterly 
confusing.  If you would put the contents at the else clause of 
g_at_server_send_final then the same thing will be accomplished.

> +
> +void g_at_server_send_final(GAtServer *server, GAtServerResult result)
> +{
> +     char *line = server->read_line;
> +     unsigned int pos = server->read_pos;
> +     unsigned int len = strlen(line);
> +
> +     /* Continue only if the result is OK and we have further commands */
> +     if (result == G_AT_SERVER_RESULT_OK && pos < len)
> +             server_parse_line(server);
> +     else if (result == G_AT_SERVER_RESULT_EXT_ERROR)
> +             ;       /* Skip */

Nobody should ever call this function with EXT_ERROR

> +     else
> +             g_at_server_send_result(server, result);
> +}
> +
> +void g_at_server_send_ext_final(GAtServer *server, const char *result)
> +{
> +     send_result_common(server, result);

Why don't we do the same server_parse_line magic here?

> +}
> +
> +void g_at_server_send_intermediate(GAtServer *server, const char *result)
> +{
> +     send_result_common(server, result);
> +}
> +
> +void g_at_server_send_unsolicited(GAtServer *server, const char *result)
> +{
> +     send_result_common(server, result);
> +}
> +
> +void g_at_server_send_info_text(GAtServer *server, GSList *text)
> +{
> +     char buf[MAX_TEXT_SIZE];
> +     char t = server->v250.s3;
> +     char r = server->v250.s4;
> +     unsigned int len;
> +     GSList *l = text;
> +     char *line;
> +
> +     if (!text)
> +             return;
> +
> +     while (l) {
> +             line = l->data;
> +             if (!line)
> +                     return;
> +
> +             len = snprintf(buf, sizeof(buf), "%c%c%s", t, r, line);
> +             send_common(server, buf, MIN(len, sizeof(buf)-1));
> +
> +             l = l->next;
> +     }

Using a for loop is more compact here.

> +
> +     len = snprintf(buf, sizeof(buf), "%c%c", t, r);
> +     send_common(server, buf, len);
> +}
> +
>  static inline gboolean is_extended_command_prefix(const char c)
>  {
>       switch (c) {
> @@ -205,7 +277,7 @@ static void at_command_notify(GAtServer *server, char
>  *command, node = g_hash_table_lookup(server->command_list, prefix);
> 
>       if (node == NULL) {
> -             g_at_server_send_final(server, G_AT_SERVER_RESULT_ERROR);
> +             g_at_server_send_result(server, G_AT_SERVER_RESULT_ERROR);

Leave it as is

>               return;
>       }
> 
> @@ -301,7 +373,7 @@ next:
>       return;
> 
>  error:
> -     g_at_server_send_final(server, G_AT_SERVER_RESULT_ERROR);
> +     g_at_server_send_result(server, G_AT_SERVER_RESULT_ERROR);

Leave it as is

>  }
> 
>  static int get_basic_prefix_size(const char *buf)
> @@ -427,7 +499,7 @@ done:
>       return;
> 
>  error:
> -     g_at_server_send_final(server, G_AT_SERVER_RESULT_ERROR);
> +     g_at_server_send_result(server, G_AT_SERVER_RESULT_ERROR);

And again,

>  }
> 
>  static void server_parse_line(GAtServer *server)
> @@ -437,7 +509,7 @@ static void server_parse_line(GAtServer *server)
>       unsigned int len = strlen(line);
> 
>       if (len == 0) {
> -             g_at_server_send_final(server, G_AT_SERVER_RESULT_OK);
> +             g_at_server_send_result(server, G_AT_SERVER_RESULT_OK);

And again

>               return;
>       }
> 
> @@ -620,7 +692,7 @@ static void new_bytes(GAtServer *p)
>                        * According to section 5.2.4 and 5.6 of V250,
>                        * Empty commands must be OK by the DCE
>                        */
> -                     g_at_server_send_final(p, G_AT_SERVER_RESULT_OK);
> +                     g_at_server_send_result(p, G_AT_SERVER_RESULT_OK);

And here

>                       ring_buffer_drain(p->read_buf, p->read_so_far);
>                       break;
> 
> @@ -634,14 +706,14 @@ static void new_bytes(GAtServer *p)
> 
>                               server_parse_line(p);
>                       } else
> -                             g_at_server_send_final(p,
> +                             g_at_server_send_result(p,
>                                               G_AT_SERVER_RESULT_ERROR);

And here

>                       break;
>               }
> 
>               case PARSER_RESULT_REPEAT_LAST:
>                       /* TODO */
> -                     g_at_server_send_final(p, G_AT_SERVER_RESULT_OK);
> +                     g_at_server_send_result(p, G_AT_SERVER_RESULT_OK);

And again here

>                       ring_buffer_drain(p->read_buf, p->read_so_far);
>                       break;
> 
> diff --git a/gatchat/gatserver.h b/gatchat/gatserver.h
> index 2ae19ca..a508be6 100644
> --- a/gatchat/gatserver.h
> +++ b/gatchat/gatserver.h
> @@ -87,6 +87,23 @@ gboolean g_at_server_register(GAtServer *server, char
>  *prefix, GDestroyNotify destroy_notify);
>  gboolean g_at_server_unregister(GAtServer *server, const char *prefix);
> 
> +/* Send a final result code. E.g. G_AT_SERVER_RESULT_NO_DIALTONE */
> +void g_at_server_send_final(GAtServer *server, GAtServerResult result);
> +
> +/* Send an extended final result code. E.g. +CME ERROR: SIM failure. */
> +void g_at_server_send_ext_final(GAtServer *server, const char *result);
> +
> +/* Send an intermediate result code to report the progress. E.g. CONNECT
>  */ +void g_at_server_send_intermediate(GAtServer *server, const char
>  *result); +
> +/* Send an unsolicited result code. E.g. RING */
> +void g_at_server_send_unsolicited(GAtServer *server, const char *result);
> +
> +/* Send an information text. The text could contain multiple lines. Each
> + * line, including line terminators, should not exceed 2048 characters.
> + */
> +void g_at_server_send_info_text(GAtServer *server, GSList *text);
> +
>  #ifdef __cplusplus
>  }
>  #endif
> 

Regards,
-Denis
_______________________________________________
ofono mailing list
[email protected]
http://lists.ofono.org/listinfo/ofono

Reply via email to