--- gatchat/gatserver.c | 43 +++++++++++++++++++++++++++---------------- 1 files changed, 27 insertions(+), 16 deletions(-) diff --git a/gatchat/gatserver.c b/gatchat/gatserver.c index b0138d6..7ac6d34 100644 --- a/gatchat/gatserver.c +++ b/gatchat/gatserver.c @@ -33,6 +33,8 @@ #include "gatserver.h" #define BUF_SIZE 4096 +/* + the max length of information text + */ +#define MAX_TEXT_SIZE 2048+4 /* #define WRITE_SCHEDULER_DEBUG 1 */ enum ParserState { @@ -156,35 +158,44 @@ static void send_common(GAtServer *server, const char *buf, unsigned int len) g_at_server_wakeup_writer(server); } -static void g_at_server_send_final(GAtServer *server, GAtServerResult result) +static void send_result_common(GAtServer *server, const char *result) { - struct v250_settings v250 = server->v250; - const char *result_str = server_result_to_string(result); - char buf[1024]; - char t = v250.s3; - char r = v250.s4; + char buf[MAX_TEXT_SIZE]; + char t = server->v250.s3; + char r = server->v250.s4; unsigned int len; - /* Do not emit error if extended error has already been emitted */ - if (result == G_AT_SERVER_RESULT_EXT_ERROR) - return; - - if (v250.quiet) + if (server->v250.quiet) return; - if (result_str == NULL) + if (result == NULL) return; - if (v250.is_v1) - len = snprintf(buf, sizeof(buf), "%c%c%s%c%c", t, r, result_str, + if (server->v250.is_v1) + len = snprintf(buf, sizeof(buf), "%c%c%s%c%c", t, r, result, t, r); else - len = snprintf(buf, sizeof(buf), "%u%c", (unsigned int) result, - t); + len = snprintf(buf, sizeof(buf), "%s%c", result, t); send_common(server, buf, MIN(len, sizeof(buf)-1)); } +static void g_at_server_send_final(GAtServer *server, GAtServerResult result) +{ + char buf[1024]; + + /* Do not emit error if extended error has already been emitted */ + if (result == G_AT_SERVER_RESULT_EXT_ERROR) + return; + + 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); +} + static inline gboolean is_extended_command_prefix(const char c) { switch (c) { -- 1.6.6.1