diff options
-rw-r--r-- | server_communication.c | 77 | ||||
-rw-r--r-- | servers.c | 15 | ||||
-rw-r--r-- | servers.h | 6 |
3 files changed, 43 insertions, 55 deletions
diff --git a/server_communication.c b/server_communication.c index ffe6942..e8ab7b8 100644 --- a/server_communication.c +++ b/server_communication.c @@ -4,7 +4,12 @@ #include <gio/gio.h> #include <string.h> -static GSocket *server_connect(struct server *server) { +enum connection_type { + SERVER_CONNECTION_TYPE_HTTP, + SERVER_CONNECTION_TYPE_COMMAND, +}; + +static GSocket *server_connect(struct server *server, const enum connection_type type) { GError *error = NULL, *conn_error = NULL; GSocketConnectable *addr; GSocketAddressEnumerator *enumerator; @@ -12,7 +17,17 @@ static GSocket *server_connect(struct server *server) { GSocketConnection *conn = NULL; GSocketClient *client; - addr = g_network_address_new(server->host, server->port); + guint16 port; + switch(type) { + case SERVER_CONNECTION_TYPE_HTTP: + port = server->http_port; + break; + case SERVER_CONNECTION_TYPE_COMMAND: + port = server->command_port; + break; + } + + addr = g_network_address_new(server->host, port); enumerator = g_socket_connectable_enumerate(addr); g_object_unref(addr); @@ -47,9 +62,17 @@ static GSocket *server_connect(struct server *server) { return socket; } +static GSocket *server_connect_http(struct server *server) { + return server_connect(server, SERVER_CONNECTION_TYPE_HTTP); +} + +static GSocket *server_connect_command(struct server *server) { + return server_connect(server, SERVER_CONNECTION_TYPE_COMMAND); +} + gboolean server_ping(struct server *server) { GTimer *timer = g_timer_new(); - GSocket *socket = server_connect(server); + GSocket *socket = server_connect_command(server); if(socket == NULL) { return FALSE; @@ -72,7 +95,7 @@ gboolean server_ping(struct server *server) { } static gchar **server_get_stringlist(struct server *server, const gchar *cmd) { - GSocket *socket = server_connect(server); + GSocket *socket = server_connect_command(server); if(socket == NULL) { return NULL; @@ -111,54 +134,10 @@ gchar **server_list(struct server *server, const gchar *directory) { return data; } -/* TODO: remove temporary function */ -static GSocket *server_connect_port(struct server *server, gushort port) { - GError *error = NULL, *conn_error = NULL; - GSocketConnectable *addr; - GSocketAddressEnumerator *enumerator; - GSocketAddress *sockaddr; - GSocketConnection *conn = NULL; - GSocketClient *client; - - addr = g_network_address_new(server->host, 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, &conn_error); - g_object_unref(sockaddr); - } - - if(sockaddr == NULL) { - if(error != NULL) { - g_warning(error->message); - g_error_free(error); - } else { - g_warning("server_connect: no connectable addresses found for host %s", - server->host); - } - return NULL; - } - - if(conn == NULL) { - g_warning(conn_error->message); - g_error_free(conn_error); - return NULL; - } - - GSocket *socket = g_socket_connection_get_socket(conn); - - g_debug("connected"); - - return socket; -} - gboolean server_get(struct server *server, const gchar *type, const gchar *localfile, const gchar *remotefile) { GError *error = NULL; - GSocket *socket = server_connect_port(server, 8000); + GSocket *socket = server_connect_http(server); if(socket == NULL) { return FALSE; @@ -5,7 +5,8 @@ GSList *servers = NULL; -gboolean server_add(const gchar *host, const guint16 port) { +gboolean server_add(const gchar *host, const guint16 http_port, + const guint16 command_port) { struct server *server = g_new0(struct server, 1); if(server == NULL) { @@ -14,7 +15,8 @@ gboolean server_add(const gchar *host, const guint16 port) { } server->host = g_strdup(host); - server->port = port; + server->http_port = http_port; + server->command_port = command_port; servers = g_slist_prepend(servers, server); @@ -37,8 +39,13 @@ 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], 7681); - g_debug(" server %d: %s", i, s[i]); + gchar *section = g_strdup_printf("server/%s", s[i]); + guint16 http_port = conf_get_int(section, "http_port"); + guint16 command_port = conf_get_int(section, "command_port"); + g_free(section); + + server_add(s[i], http_port, command_port); + g_debug(" server %d: %s (%d, %d)", i, s[i], http_port, command_port); } } @@ -5,12 +5,14 @@ struct server { gchar *host; - guint16 port; + guint16 http_port; + guint16 command_port; }; extern GSList *servers; -gboolean server_add(const gchar *host, const guint16 port); +gboolean server_add(const gchar *host, const guint16 http_port, + const guint16 command_port); gboolean server_remove(struct server *server); void servers_init(); void servers_free(); |