---
gatchat/gatserver.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++
gatchat/gatserver.h | 6 ++++++
2 files changed, 53 insertions(+), 0 deletions(-)
diff --git a/gatchat/gatserver.c b/gatchat/gatserver.c
index bea51f5..c49e5f8 100644
--- a/gatchat/gatserver.c
+++ b/gatchat/gatserver.c
@@ -987,3 +987,50 @@ gboolean g_at_server_set_debug(GAtServer *server, GAtDebugFunc func,
return TRUE;
}
+
+guint g_at_server_register(GAtServer *server, const char *prefix,
+ GAtServerCommandType type,
+ GAtServerNotifyFunc notify,
+ gpointer user_data,
+ GDestroyNotify destroy_notify)
+{
+ struct at_command *node;
+
+ if (server == NULL || server->command_list == NULL)
+ return 0;
+
+ if (notify == NULL)
+ return 0;
+
+ if (prefix == NULL || strlen(prefix) == 0)
+ return 0;
+
+ node = g_hash_table_lookup(server->command_list, prefix);
+
+ if (node) {
+ g_hash_table_remove(server->command_list, prefix);
+
+ if (node->destroy_notify)
+ node->destroy_notify(node->user_data);
+
+ g_free(node->prefix);
+
+ g_free(node);
+ }
+
+ node = g_try_new0(struct at_command, 1);
+
+ if (!node)
+ return 0;
+
+ node->id = server->next_command_id++;
+ node->prefix = g_strdup(prefix);
+ node->type = type;
+ node->notify = notify;
+ node->user_data = user_data;
+ node->destroy_notify = destroy_notify;
+
+ g_hash_table_insert(server->command_list, node->prefix, node);
+
+ return node->id;
+}
diff --git a/gatchat/gatserver.h b/gatchat/gatserver.h
index 5db9321..59cdf25 100644
--- a/gatchat/gatserver.h
+++ b/gatchat/gatserver.h
@@ -80,6 +80,12 @@ gboolean g_at_server_set_debug(GAtServer *server,
GAtDebugFunc func,
gpointer user);
+guint g_at_server_register(GAtServer *server, const char *prefix,
+ GAtServerCommandType type,
+ GAtServerNotifyFunc notify,
+ gpointer user_data,
+ GDestroyNotify destroy_notify);
+
#ifdef __cplusplus
}
#endif
--
1.6.6.1