# HG changeset patch # User Mark Doliner # Date 1155793678 0 # Node ID 694aae55ab6d04085d324fd18c01cc410d0e701b # Parent c8ebbc0110f413efd0566df5bf7aa4ee7578d51d [gaim-migrate @ 16809] gaim_ssl_connect's are now cancelable (without crashing, anyway) This was relatively easy, because the PRPLs already keep a reference to the GaimSslConnection. I just needed to update the core ssl code to keep track of the GaimProxyConnectInfo, and to call gaim_proxy_connect_cancel() when gaim_ssl_close() is called committer: Tailor Script diff -r c8ebbc0110f4 -r 694aae55ab6d plugins/ssl/ssl-gnutls.c --- a/plugins/ssl/ssl-gnutls.c Thu Aug 17 05:47:10 2006 +0000 +++ b/plugins/ssl/ssl-gnutls.c Thu Aug 17 05:47:58 2006 +0000 @@ -100,27 +100,11 @@ static void -ssl_gnutls_connect_cb(gpointer data, gint source, GaimInputCondition cond) +ssl_gnutls_connect(GaimSslConnection *gsc) { - GaimSslConnection *gsc = (GaimSslConnection *)data; GaimSslGnutlsData *gnutls_data; static const int cert_type_priority[2] = { GNUTLS_CRT_X509, 0 }; - /* - * TODO: Uh, this needs to somehow check to make sure that gsc is - * still valid before actually doing anything. - */ - - if(source < 0) { - if(gsc->error_cb != NULL) - gsc->error_cb(gsc, GAIM_SSL_CONNECT_FAILED, gsc->connect_cb_data); - - gaim_ssl_close(gsc); - return; - } - - gsc->fd = source; - gnutls_data = g_new0(GaimSslGnutlsData, 1); gsc->private_data = gnutls_data; @@ -133,7 +117,7 @@ gnutls_credentials_set(gnutls_data->session, GNUTLS_CRD_CERTIFICATE, xcred); - gnutls_transport_set_ptr(gnutls_data->session, GINT_TO_POINTER(source)); + gnutls_transport_set_ptr(gnutls_data->session, GINT_TO_POINTER(gsc->fd)); gnutls_data->handshake_handler = gaim_input_add(gsc->fd, GAIM_INPUT_READ, ssl_gnutls_handshake_cb, gsc); @@ -204,7 +188,7 @@ { ssl_gnutls_init, ssl_gnutls_uninit, - ssl_gnutls_connect_cb, + ssl_gnutls_connect, ssl_gnutls_close, ssl_gnutls_read, ssl_gnutls_write