---
gatchat/gatserver.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 51 insertions(+), 0 deletions(-)
diff --git a/gatchat/gatserver.c b/gatchat/gatserver.c
index 1a8ac58..6427ed3 100644
--- a/gatchat/gatserver.c
+++ b/gatchat/gatserver.c
@@ -327,6 +327,56 @@ done:
return res;
}
+static GAtServerResult at_e_cb(GAtServerRequestType type, GAtResult *result,
+ gpointer user_data)
+{
+ GAtServerResult res = G_AT_SERVER_RESULT_ERROR;
+ GAtServer *server = user_data;
+ GSList *text = NULL;
+ char buf[20];
+
+ if (type == G_AT_SERVER_REQUEST_TYPE_SET) {
+ GAtResultIter iter;
+ int val = 0;
+
+ g_at_result_iter_init(&iter, result);
+
+ if (!g_at_result_iter_next(&iter, "E"))
+ goto done;
+
+ if (!g_at_result_iter_next_number(&iter, &val))
+ goto done;
+
+ if (val < 0 || val > 1)
+ goto done;
+
+ server->v250.echo = val;
+
+ res = G_AT_SERVER_RESULT_OK;
+ } else if (type == G_AT_SERVER_REQUEST_TYPE_QUERY) {
+ sprintf(buf, "E: %u", server->v250.echo);
+ text = g_slist_append(NULL, buf);
+ g_at_server_send_info_text(server, text);
+
+ res = G_AT_SERVER_RESULT_OK;
+ } else if (type == G_AT_SERVER_REQUEST_TYPE_SUPPORT) {
+ sprintf(buf, "E: (0-1)");
+ text = g_slist_append(NULL, buf);
+ g_at_server_send_info_text(server, text);
+
+ res = G_AT_SERVER_RESULT_OK;
+ } else if (type == G_AT_SERVER_REQUEST_TYPE_COMMAND_ONLY) {
+ server->v250.echo = 1;
+ res = G_AT_SERVER_RESULT_OK;
+ }
+
+ if (text)
+ g_slist_free(text);
+
+done:
+ return res;
+}
+
static inline gboolean is_extended_command_prefix(const char c)
{
switch (c) {
@@ -987,6 +1037,7 @@ static void basic_command_register(GAtServer *server)
{
g_at_server_register(server, "S3", at_s3_cb, server, NULL);
g_at_server_register(server, "S5", at_s5_cb, server, NULL);
+ g_at_server_register(server, "E", at_e_cb, server, NULL);
}
GAtServer *g_at_server_new(GIOChannel *io)
--
1.6.6.1