comparison plugins/ssl/ssl-gnutls.c @ 14161:694aae55ab6d

[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 <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Thu, 17 Aug 2006 05:47:58 +0000
parents 7d513e44201b
children
comparison
equal deleted inserted replaced
14160:c8ebbc0110f4 14161:694aae55ab6d
98 98
99 } 99 }
100 100
101 101
102 static void 102 static void
103 ssl_gnutls_connect_cb(gpointer data, gint source, GaimInputCondition cond) 103 ssl_gnutls_connect(GaimSslConnection *gsc)
104 { 104 {
105 GaimSslConnection *gsc = (GaimSslConnection *)data;
106 GaimSslGnutlsData *gnutls_data; 105 GaimSslGnutlsData *gnutls_data;
107 static const int cert_type_priority[2] = { GNUTLS_CRT_X509, 0 }; 106 static const int cert_type_priority[2] = { GNUTLS_CRT_X509, 0 };
108 107
109 /*
110 * TODO: Uh, this needs to somehow check to make sure that gsc is
111 * still valid before actually doing anything.
112 */
113
114 if(source < 0) {
115 if(gsc->error_cb != NULL)
116 gsc->error_cb(gsc, GAIM_SSL_CONNECT_FAILED, gsc->connect_cb_data);
117
118 gaim_ssl_close(gsc);
119 return;
120 }
121
122 gsc->fd = source;
123
124 gnutls_data = g_new0(GaimSslGnutlsData, 1); 108 gnutls_data = g_new0(GaimSslGnutlsData, 1);
125 gsc->private_data = gnutls_data; 109 gsc->private_data = gnutls_data;
126 110
127 gnutls_init(&gnutls_data->session, GNUTLS_CLIENT); 111 gnutls_init(&gnutls_data->session, GNUTLS_CLIENT);
128 gnutls_set_default_priority(gnutls_data->session); 112 gnutls_set_default_priority(gnutls_data->session);
131 cert_type_priority); 115 cert_type_priority);
132 116
133 gnutls_credentials_set(gnutls_data->session, GNUTLS_CRD_CERTIFICATE, 117 gnutls_credentials_set(gnutls_data->session, GNUTLS_CRD_CERTIFICATE,
134 xcred); 118 xcred);
135 119
136 gnutls_transport_set_ptr(gnutls_data->session, GINT_TO_POINTER(source)); 120 gnutls_transport_set_ptr(gnutls_data->session, GINT_TO_POINTER(gsc->fd));
137 121
138 gnutls_data->handshake_handler = gaim_input_add(gsc->fd, 122 gnutls_data->handshake_handler = gaim_input_add(gsc->fd,
139 GAIM_INPUT_READ, ssl_gnutls_handshake_cb, gsc); 123 GAIM_INPUT_READ, ssl_gnutls_handshake_cb, gsc);
140 124
141 ssl_gnutls_handshake_cb(gsc, gsc->fd, GAIM_INPUT_READ); 125 ssl_gnutls_handshake_cb(gsc, gsc->fd, GAIM_INPUT_READ);
202 186
203 static GaimSslOps ssl_ops = 187 static GaimSslOps ssl_ops =
204 { 188 {
205 ssl_gnutls_init, 189 ssl_gnutls_init,
206 ssl_gnutls_uninit, 190 ssl_gnutls_uninit,
207 ssl_gnutls_connect_cb, 191 ssl_gnutls_connect,
208 ssl_gnutls_close, 192 ssl_gnutls_close,
209 ssl_gnutls_read, 193 ssl_gnutls_read,
210 ssl_gnutls_write 194 ssl_gnutls_write
211 }; 195 };
212 196