From 6830943604763677fa2c94bd3d630f45a4df7069 Mon Sep 17 00:00:00 2001 From: Thadeu Lima de Souza Cascardo Date: Tue, 7 Jul 2009 14:25:18 -0300 Subject: [PATCH] Add function to create client connection channel. --- popproxy.c | 51 +++++++++++++++++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/popproxy.c b/popproxy.c index 3a12f71..39d837c 100644 --- a/popproxy.c +++ b/popproxy.c @@ -72,6 +72,31 @@ server_conn_new (char *server, char *port) return ssl_conn; } +static HCConn * +client_conn_new (int fd) +{ + HCConn *conn; + HCConn *pop_conn; + int r; + conn = hc_conn_new (NULL, NULL); + r = hc_conn_set_driver_channel (conn, fd); + if (r != 0) + { + hc_conn_close (conn); + close (fd); + return NULL; + } + pop_conn = hc_conn_new (NULL, NULL); + r = hc_conn_set_driver_pop (pop_conn, conn); + if (r != 0) + { + hc_conn_close (pop_conn); + hc_conn_close (conn); + return NULL; + } + return pop_conn; +} + static void push_other (HCConn *conn, HCEvent event, gpointer data) { @@ -93,11 +118,9 @@ push_other (HCConn *conn, HCEvent event, gpointer data) static void new_client (int fd, struct sockaddr *addr, socklen_t saddr, gpointer data) { - HCConn *conn; - HCConn *pop_conn; + HCConn *client_conn; HCConn *server_conn; struct pop_address *address = data; - int r; if (fd < 0) { g_critical ("Server has received an error event."); @@ -113,27 +136,15 @@ new_client (int fd, struct sockaddr *addr, socklen_t saddr, gpointer data) { return; } - - conn = hc_conn_new (NULL, NULL); - r = hc_conn_set_driver_channel (conn, fd); - if (r != 0) + client_conn = client_conn_new (fd); + if (client_conn == NULL) { hc_conn_close (server_conn); - hc_conn_close (conn); - close (fd); return; } - pop_conn = hc_conn_new (NULL, NULL); - r = hc_conn_set_driver_pop (pop_conn, conn); - if (r != 0) - { - hc_conn_close (server_conn); - hc_conn_close (pop_conn); - hc_conn_close (conn); - return; - } - hc_conn_set_callback (pop_conn, push_other, server_conn); - hc_conn_set_callback (server_conn, push_other, pop_conn); + + hc_conn_set_callback (client_conn, push_other, server_conn); + hc_conn_set_callback (server_conn, push_other, client_conn); } -- 2.20.1