Make server port configurable
authorThadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
Wed, 1 Jul 2009 19:19:03 +0000 (16:19 -0300)
committerThadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
Wed, 1 Jul 2009 19:19:03 +0000 (16:19 -0300)
popproxy.c
ssl.c
ssl.h
ssl_server.c

index 23b17ba..6aaf804 100644 (file)
 
 #define CONFFILE SYSCONFDIR "/popproxy.conf"
 
+struct pop_address
+{
+  char *server;
+  int port;
+};
+
 void new_client (GServer* server, GConn* conn, gpointer data)
 {
   net_hook_t* hook;
+  struct pop_address *address = data;
   if (conn == NULL)
     {
       g_critical ("Server has received an error event.");
       return;
     }
   g_message ("Received connection from %s.", conn->hostname);
-  hook = ssl_hook_new (conn, data);
+  hook = ssl_hook_new (conn, address->server, address->port);
   pop_hook_new (hook);
   gnet_conn_read (conn);
 }
@@ -65,6 +72,8 @@ int main (int argc, char** argv)
   gchar* conf_address;
   gint port;
   gchar *server_address;
+  gint server_port;
+  struct pop_address pop_address;
 
   gnutls_global_init ();
   gnet_init ();
@@ -116,9 +125,20 @@ int main (int argc, char** argv)
       g_error_free (error);
     }
 
+  server_port = g_key_file_get_integer (keyfile, "global", "server_port",
+                                          &error);
+  if (server_port == 0 && error != NULL)
+    {
+      port = 995;
+      g_error_free (error);
+    }
+
+  pop_address.server = server_address;
+  pop_address.port = server_port;
+
   inetaddr = gnet_inetaddr_new_nonblock (conf_address, port);
   if (gnet_server_new (inetaddr, port,
-                       new_client, server_address) == NULL)
+                       new_client, &pop_address) == NULL)
     {
       fprintf (stderr, "Could not create server.\n");
       exit (1);
diff --git a/ssl.c b/ssl.c
index 3bdf1e2..c1bfc88 100644 (file)
--- a/ssl.c
+++ b/ssl.c
@@ -60,7 +60,7 @@ ssl_error (net_hook_t *hook)
 }
 
 net_hook_t *
-ssl_hook_new (GConn *conn, char *server)
+ssl_hook_new (GConn *conn, char *server, int port)
 {
   net_hook_t *hook;
   hook = g_slice_new (net_hook_t);
@@ -72,7 +72,7 @@ ssl_hook_new (GConn *conn, char *server)
   hook->write = ssl_write;
   hook->read = ssl_read;
   hook->data = NULL;
-  hook->peer = ssl_server_hook_new (hook, server);
+  hook->peer = ssl_server_hook_new (hook, server, port);
   gnet_conn_set_callback (hook->conn, nethook_event, hook);
   return hook;
 }
diff --git a/ssl.h b/ssl.h
index 61cc68f..56e577f 100644 (file)
--- a/ssl.h
+++ b/ssl.h
@@ -32,9 +32,9 @@ struct ssl_data
   gboolean handshaking;
 };
 
-net_hook_t* ssl_hook_new (GConn*, char*);
+net_hook_t* ssl_hook_new (GConn*, char*, int);
 void ssl_destroy (net_hook_t*);
 
-net_hook_t * ssl_server_hook_new (net_hook_t *, char *);
+net_hook_t * ssl_server_hook_new (net_hook_t *, char *, int);
 
 #endif
index 4d39e34..d4f79b6 100644 (file)
@@ -163,11 +163,11 @@ ssl_server_error (net_hook_t *hook)
 }
 
 net_hook_t *
-ssl_server_hook_new (net_hook_t *client_hook, char *server)
+ssl_server_hook_new (net_hook_t *client_hook, char *server, int port)
 {
   net_hook_t *hook;
   hook = g_slice_new (net_hook_t);
-  hook->conn = gnet_conn_new (server, 995, nethook_event, hook);
+  hook->conn = gnet_conn_new (server, port, nethook_event, hook);
   hook->peer = client_hook;
   hook->server = TRUE;
   hook->connect = ssl_server_connect;