X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;f=popproxy.c;h=e2a58a3083bf7de43ad698c119fde904eef9f6fa;hb=1abeb1f8078fe4c3b5b1059ecb043a48310dd0d6;hp=d2ccbf76f709b0a16c3231c46387e926f36b0f25;hpb=01777ed1b85b510cbec6fba3887c40b6eb9366cb;p=cascardo%2Frnetproxy.git diff --git a/popproxy.c b/popproxy.c index d2ccbf7..e2a58a3 100644 --- a/popproxy.c +++ b/popproxy.c @@ -130,11 +130,34 @@ push_other (HCConn *conn, HCEvent event, gpointer data) } } +static void +ssl_connected (HCConn *client_conn, HCEvent event, gpointer data) +{ + struct pop_address *address = data; + HCConn *server_conn; + if (event != HC_EVENT_CONNECT) + { + g_debug ("Did not get connect event when trying to handshake:" + " got %d", event); + hc_conn_close (client_conn); + return; + } + server_conn = server_conn_new (address->server, address->port, + address->ssl); + if (server_conn == NULL) + { + g_debug ("Failure to create connection to server."); + hc_conn_close (client_conn); + return; + } + hc_conn_set_callback (client_conn, push_other, server_conn); + hc_conn_set_callback (server_conn, push_other, client_conn); +} + static void new_client (int fd, struct sockaddr *addr, socklen_t saddr, gpointer data) { HCConn *client_conn; - HCConn *server_conn; struct pop_address *address = data; if (fd < 0) { @@ -146,21 +169,13 @@ new_client (int fd, struct sockaddr *addr, socklen_t saddr, gpointer data) g_message ("Received connection from %s.", inet_ntoa (((struct sockaddr_in *) addr)->sin_addr)); - server_conn = server_conn_new (address->server, address->port, - address->ssl); - if (server_conn == NULL) - { - return; - } client_conn = client_conn_new (fd); if (client_conn == NULL) { - hc_conn_close (server_conn); return; } - hc_conn_set_callback (client_conn, push_other, server_conn); - hc_conn_set_callback (server_conn, push_other, client_conn); + hc_conn_set_callback (client_conn, ssl_connected, address); }