From 651ebc75e6dae751bdebffe018701618afcc49df Mon Sep 17 00:00:00 2001 From: Jon Bergli Heier Date: Mon, 30 Aug 2010 22:12:45 +0200 Subject: Added separate http and command ports in server struct. --- server_communication.c | 77 ++++++++++++++++++-------------------------------- 1 file changed, 28 insertions(+), 49 deletions(-) (limited to 'server_communication.c') 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 #include -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; -- cgit v1.2.3