X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;f=popproxy.c;h=27f8a00dc7f6a3c936068ab910daa8a1b8f707d4;hb=34b1d8c1867c8287d8cfd6cc5d807ea2e9e3f70e;hp=6aaf804b829538b5c3f6c81cd22773a4a979b765;hpb=dff33f5dcf96800863b162a320bcf5dc0bb15b92;p=cascardo%2Frnetproxy.git diff --git a/popproxy.c b/popproxy.c index 6aaf804..27f8a00 100644 --- a/popproxy.c +++ b/popproxy.c @@ -19,38 +19,44 @@ */ #include -#include #include #include #include #include +#include +#include #include "log.h" #include "nethook.h" #include "null.h" #include "ssl.h" #include "pop.h" +#include "iochannel.h" +#include "tcp_connect.h" + #define CONFFILE SYSCONFDIR "/popproxy.conf" struct pop_address { char *server; - int port; + char *port; }; -void new_client (GServer* server, GConn* conn, gpointer data) +void new_client (int fd, struct sockaddr* addr, socklen_t saddr, gpointer data) { + HCConn *conn; net_hook_t* hook; struct pop_address *address = data; - if (conn == NULL) + if (fd < 0) { g_critical ("Server has received an error event."); return; } - g_message ("Received connection from %s.", conn->hostname); + g_message ("Received connection from %s.", + inet_ntoa (((struct sockaddr_in *) addr)->sin_addr)); + conn = hc_conn_new (fd, NULL, NULL); hook = ssl_hook_new (conn, address->server, address->port); pop_hook_new (hook); - gnet_conn_read (conn); } static gchar* configfile; @@ -67,16 +73,15 @@ int main (int argc, char** argv) GOptionContext* opt_ctx; GKeyFile *keyfile; - GInetAddr* inetaddr; GError *error; + int server_fd; gchar* conf_address; - gint port; + gchar* port; gchar *server_address; - gint server_port; + gchar *server_port; struct pop_address pop_address; gnutls_global_init (); - gnet_init (); pop_log_init (); configfile = CONFFILE; @@ -110,10 +115,10 @@ int main (int argc, char** argv) g_error_free (error); } error = NULL; - port = g_key_file_get_integer (keyfile, "global", "port", &error); - if (port == 0 && error != NULL) + port = g_key_file_get_string (keyfile, "global", "port", &error); + if (port == NULL && error != NULL) { - port = 110; + port = g_strdup ("110"); g_error_free (error); } error = NULL; @@ -125,36 +130,38 @@ 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) + server_port = g_key_file_get_string (keyfile, "global", "server_port", + &error); + if (server_port == NULL && error != NULL) { - port = 995; + server_port = g_strdup ("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, &pop_address) == NULL) + server_fd = hc_tcp_server (port); + if (server_fd < 0) { fprintf (stderr, "Could not create server.\n"); exit (1); } + hc_server_add_watch (server_fd, new_client, &pop_address); - g_message ("Listening at %s:%d.", conf_address, port); + g_message ("Listening at %s:%s.", conf_address, port); daemon (0, 0); g_free (conf_address); + g_free (port); g_main_loop_run (g_main_loop_new (g_main_context_default (), TRUE)); gnutls_global_deinit (); g_free (server_address); + g_free (server_port); return 0;