summaryrefslogtreecommitdiff
path: root/server_communication.c
diff options
context:
space:
mode:
Diffstat (limited to 'server_communication.c')
-rw-r--r--server_communication.c77
1 files changed, 28 insertions, 49 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;