Make server port configurable
[cascardo/rnetproxy.git] / popproxy.c
index 3a9a2d3..6aaf804 100644 (file)
 #include "nethook.h"
 #include "null.h"
 #include "ssl.h"
+#include "pop.h"
 
 #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);
 }
 
@@ -63,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 ();
@@ -90,13 +101,44 @@ int main (int argc, char** argv)
       exit (1);
     }
 
-  conf_address = g_key_file_get_string (keyfile, "global", "address", NULL);
-  port = g_key_file_get_integer (keyfile, "global", "port", NULL);
-  server_address = g_key_file_get_string (keyfile, "global", "server", NULL);
+  error = NULL;
+  conf_address = g_key_file_get_string (keyfile, "global", "address",
+                                        &error);
+  if (conf_address == NULL && error != NULL)
+    {
+      conf_address = g_strdup ("0.0.0.0");
+      g_error_free (error);
+    }
+  error = NULL;
+  port = g_key_file_get_integer (keyfile, "global", "port", &error);
+  if (port == 0 && error != NULL)
+    {
+      port = 110;
+      g_error_free (error);
+    }
+  error = NULL;
+  server_address = g_key_file_get_string (keyfile, "global", "server",
+                                          &error);
+  if (server_address == NULL && error != NULL)
+    {
+      server_address = g_strdup ("127.0.0.1");
+      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);
@@ -106,10 +148,14 @@ int main (int argc, char** argv)
 
   daemon (0, 0);
 
+  g_free (conf_address);
+
   g_main_loop_run (g_main_loop_new (g_main_context_default (), TRUE));
 
   gnutls_global_deinit ();
 
+  g_free (server_address);
+
   return 0;
 
 }