summaryrefslogtreecommitdiff
path: root/control_commands.c
diff options
context:
space:
mode:
Diffstat (limited to 'control_commands.c')
-rw-r--r--control_commands.c25
1 files changed, 19 insertions, 6 deletions
diff --git a/control_commands.c b/control_commands.c
index f5fbc64..61477ac 100644
--- a/control_commands.c
+++ b/control_commands.c
@@ -1,14 +1,27 @@
#include "control_commands.h"
+#include "servers.h"
#include <glib.h>
#include <string.h>
-void control_commands_handle(GSocketConnection *connection, const gchar *cmd) {
- gchar *args = strchr(cmd, ' ');
- if(args != NULL) {
- *args = '\0';
- args++;
+static void list_servers(GSocketConnection *connection, const gchar *cmd) {
+ GSocket *socket = g_socket_connection_get_socket(connection);
+
+ for(GSList *node = servers; node; node = g_slist_next(node)) {
+ struct server *s = node->data;
+ gchar *buffer = g_strdup_printf("%s:%d\n", s->host, s->port);
+ g_socket_send(socket, buffer, strlen(buffer), NULL, NULL);
}
+}
- g_debug("handling command %s with arguments %s", cmd, args);
+void control_commands_handle(GSocketConnection *connection, const gchar *cmd) {
+ if(g_strcmp0(cmd, "servers") == 0) {
+ list_servers(connection, cmd);
+ } else {
+ g_debug("unknown command");
+ gchar *buf = g_strdup_printf("error: unknown command %s\n", cmd);
+ GSocket *socket = g_socket_connection_get_socket(connection);
+ g_socket_send(socket, buf, strlen(buf), NULL, NULL);
+ g_free(buf);
+ }
}