summaryrefslogtreecommitdiff
path: root/servers.c
diff options
context:
space:
mode:
Diffstat (limited to 'servers.c')
-rw-r--r--servers.c50
1 files changed, 49 insertions, 1 deletions
diff --git a/servers.c b/servers.c
index 22e431d..94bbaf4 100644
--- a/servers.c
+++ b/servers.c
@@ -1,8 +1,56 @@
#include "servers.h"
#include "conf.h"
+#include <gio/gio.h>
+
GSList *servers = NULL;
+gboolean server_sync(struct server *server) {
+ GError *error = NULL;
+ GSocketConnectable *addr;
+ GSocketAddressEnumerator *enumerator;
+ GSocketAddress *sockaddr;
+ GSocketConnection *conn = NULL;
+ GSocketClient *client;
+ GTimer *timer = g_timer_new();
+
+ addr = g_network_address_new(server->host, server->port);
+ enumerator = g_socket_connectable_enumerate(addr);
+ g_object_unref(addr);
+
+ client = g_socket_client_new();
+
+ while(conn == NULL && (sockaddr = g_socket_address_enumerator_next(enumerator, NULL, &error))) {
+ conn = g_socket_client_connect(client, (GSocketConnectable*)sockaddr, NULL, &error);
+ g_object_unref(sockaddr);
+ }
+
+ if(conn == NULL) {
+ g_warning(error->message);
+ g_error_free(error);
+ return FALSE;
+ }
+
+ GSocket *socket = g_socket_connection_get_socket(conn);
+
+ g_debug("connected");
+
+ g_socket_send(socket, "ping\n", 5, NULL, NULL);
+ gchar buffer[0x400];
+ g_socket_receive(socket, buffer, 0x400, NULL, NULL);
+ if(buffer[4] == '\n') {
+ buffer[4] = '\0';
+ g_debug("got response: %s", buffer);
+ g_debug("time: %f ms", g_timer_elapsed(timer, NULL) * 1000);
+ }
+
+ g_timer_destroy(timer);
+
+ g_socket_close(socket, NULL);
+
+ return TRUE;
+}
+
gboolean server_add(const gchar *host, const guint16 port) {
struct server *server = g_new0(struct server, 1);
@@ -35,7 +83,7 @@ void servers_init() {
gsize length;
gchar **s = conf_get_string_list("audist", "servers", &length);
for(int i = 0; i < length; i++) {
- server_add(s[i], 0);
+ server_add(s[i], 7681);
g_debug(" server %d: %s", i, s[i]);
}
}