Added a hook on top of the SSL layer, allowing to filter data.
[cascardo/rnetproxy.git] / popproxy.c
index 3a9a2d3..23b17ba 100644 (file)
@@ -28,6 +28,7 @@
 #include "nethook.h"
 #include "null.h"
 #include "ssl.h"
+#include "pop.h"
 
 #define CONFFILE SYSCONFDIR "/popproxy.conf"
 
@@ -41,6 +42,7 @@ void new_client (GServer* server, GConn* conn, gpointer data)
     }
   g_message ("Received connection from %s.", conn->hostname);
   hook = ssl_hook_new (conn, data);
+  pop_hook_new (hook);
   gnet_conn_read (conn);
 }
 
@@ -90,9 +92,29 @@ 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);
+    }
 
   inetaddr = gnet_inetaddr_new_nonblock (conf_address, port);
   if (gnet_server_new (inetaddr, port,
@@ -106,10 +128,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;
 
 }