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