#include <glib.h>
#include <gnet.h>
#include <stdio.h>
+#include <stdlib.h>
#include <unistd.h>
+#include <gnutls/gnutls.h>
#include "log.h"
#include "nethook.h"
-#include "proto_detect.h"
+#include "null.h"
+#include "ssl.h"
+#include "pop.h"
-#define CONFFILE SYSCONFDIR "/improxy.conf"
+#define CONFFILE SYSCONFDIR "/popproxy.conf"
void new_client (GServer* server, GConn* conn, gpointer data)
{
return;
}
g_message ("Received connection from %s.", conn->hostname);
- hook = proto_detect_new (conn);
+ hook = ssl_hook_new (conn, data);
+ pop_hook_new (hook);
gnet_conn_read (conn);
}
GOptionContext* opt_ctx;
GKeyFile *keyfile;
GInetAddr* inetaddr;
+ GError *error;
gchar* conf_address;
gint port;
+ gchar *server_address;
+ gnutls_global_init ();
gnet_init ();
- im_log_init ();
+ pop_log_init ();
configfile = CONFFILE;
opt_ctx = g_option_context_new ("");
keyfile = g_key_file_new ();
- g_key_file_load_from_file (keyfile, configfile, G_KEY_FILE_NONE, NULL);
-
- conf_address = g_key_file_get_string (keyfile, "global", "address", NULL);
- port = g_key_file_get_integer (keyfile, "global", "port", NULL);
+ error = NULL;
+ if (g_key_file_load_from_file (keyfile, configfile,
+ G_KEY_FILE_NONE, &error) == FALSE)
+ {
+ fprintf (stderr, "Could not load configuration file %s: %s.\n",
+ configfile, error->message);
+ g_error_free (error);
+ exit (1);
+ }
- g_message ("Listen address is %s:%d.", conf_address, port);
+ 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);
- gnet_server_new (inetaddr, port, new_client, NULL);
+ if (gnet_server_new (inetaddr, port,
+ new_client, server_address) == NULL)
+ {
+ fprintf (stderr, "Could not create server.\n");
+ exit (1);
+ }
+
+ g_message ("Listening at %s:%d.", conf_address, port);
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;
}