Mercurial > pidgin.yaz
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 |