src/sslconn.c

Thu, 17 Aug 2006 07:44:52 +0000

author
Mark Doliner <markdoliner@pidgin.im>
date
Thu, 17 Aug 2006 07:44:52 +0000
changeset 14225
35fa1f6160b4
parent 14222
71d8761db708
child 14228
2c0faf176ab3
permissions
-rw-r--r--

[gaim-migrate @ 16811]
Split the DNS query stuff out into it's own file. Eventually
we should move the dnssrv code into this same file. Maybe
even share some code?

Also the first steps toward cancelable DNS queries.

6703
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1 /**
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2 * @file sslconn.c SSL API
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
3 * @ingroup core
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
4 *
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
5 * gaim
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
6 *
8046
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 7863
diff changeset
7 * Gaim is the legal property of its developers, whose names are too numerous
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 7863
diff changeset
8 * to list here. Please refer to the COPYRIGHT file distributed with this
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 7863
diff changeset
9 * source distribution.
6703
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
10 *
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
11 * This program is free software; you can redistribute it and/or modify
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
12 * it under the terms of the GNU General Public License as published by
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
13 * the Free Software Foundation; either version 2 of the License, or
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
14 * (at your option) any later version.
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
15 *
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
16 * This program is distributed in the hope that it will be useful,
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
19 * GNU General Public License for more details.
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
20 *
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
21 * You should have received a copy of the GNU General Public License
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
22 * along with this program; if not, write to the Free Software
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
24 */
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
25 #include "internal.h"
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
26
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
27 #include "debug.h"
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
28 #include "sslconn.h"
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
29
6738
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
30 static gboolean _ssl_initialized = FALSE;
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
31 static GaimSslOps *_ssl_ops = NULL;
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
32
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
33 static gboolean
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
34 ssl_init(void)
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
35 {
7018
c441ecf99639 [gaim-migrate @ 7581]
Christian Hammond <chipx86@chipx86.com>
parents: 7016
diff changeset
36 GaimPlugin *plugin;
7863
98ef7c137ea5 [gaim-migrate @ 8517]
Bill Tompkins <obobo@users.sourceforge.net>
parents: 7355
diff changeset
37 GaimSslOps *ops;
6738
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
38
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
39 if (_ssl_initialized)
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
40 return FALSE;
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
41
7024
45d9d705e258 [gaim-migrate @ 7587]
Christian Hammond <chipx86@chipx86.com>
parents: 7018
diff changeset
42 plugin = gaim_plugins_find_with_id("core-ssl");
7018
c441ecf99639 [gaim-migrate @ 7581]
Christian Hammond <chipx86@chipx86.com>
parents: 7016
diff changeset
43
c441ecf99639 [gaim-migrate @ 7581]
Christian Hammond <chipx86@chipx86.com>
parents: 7016
diff changeset
44 if (plugin != NULL && !gaim_plugin_is_loaded(plugin))
c441ecf99639 [gaim-migrate @ 7581]
Christian Hammond <chipx86@chipx86.com>
parents: 7016
diff changeset
45 gaim_plugin_load(plugin);
c441ecf99639 [gaim-migrate @ 7581]
Christian Hammond <chipx86@chipx86.com>
parents: 7016
diff changeset
46
7863
98ef7c137ea5 [gaim-migrate @ 8517]
Bill Tompkins <obobo@users.sourceforge.net>
parents: 7355
diff changeset
47 ops = gaim_ssl_get_ops();
14222
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
48 if ((ops == NULL) || (ops->init == NULL) || (ops->uninit == NULL) ||
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
49 (ops->connect == NULL) || (ops->close == NULL) ||
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
50 (ops->read == NULL) || (ops->write == NULL))
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
51 {
7863
98ef7c137ea5 [gaim-migrate @ 8517]
Bill Tompkins <obobo@users.sourceforge.net>
parents: 7355
diff changeset
52 return FALSE;
14222
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
53 }
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
54
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
55 return ops->init();
6703
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
56 }
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
57
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
58 gboolean
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
59 gaim_ssl_is_supported(void)
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
60 {
6738
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
61 #ifdef HAVE_SSL
7355
2067ad89849d [gaim-migrate @ 7946]
Nathan Walp <nwalp@pidgin.im>
parents: 7274
diff changeset
62 ssl_init();
6738
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
63 return (gaim_ssl_get_ops() != NULL);
6703
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
64 #else
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
65 return FALSE;
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
66 #endif
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
67 }
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
68
14222
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
69 static void
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
70 gaim_ssl_connect_cb(gpointer data, gint source, const gchar *error_message)
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
71 {
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
72 GaimSslConnection *gsc;
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
73 GaimSslOps *ops;
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
74
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
75 gsc = data;
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
76 gsc->connect_info = NULL;
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
77
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
78 if (source < 0)
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
79 {
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
80 if (gsc->error_cb != NULL)
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
81 gsc->error_cb(gsc, GAIM_SSL_CONNECT_FAILED, gsc->connect_cb_data);
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
82
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
83 gaim_ssl_close(gsc);
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
84 return;
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
85 }
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
86
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
87 gsc->fd = source;
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
88
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
89 ops = gaim_ssl_get_ops();
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
90 ops->connect(gsc);
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
91 }
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
92
6703
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
93 GaimSslConnection *
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
94 gaim_ssl_connect(GaimAccount *account, const char *host, int port,
7274
42ec5f56e32a [gaim-migrate @ 7851]
Christian Hammond <chipx86@chipx86.com>
parents: 7024
diff changeset
95 GaimSslInputFunction func, GaimSslErrorFunction error_func,
42ec5f56e32a [gaim-migrate @ 7851]
Christian Hammond <chipx86@chipx86.com>
parents: 7024
diff changeset
96 void *data)
6703
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
97 {
6738
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
98 GaimSslConnection *gsc;
6703
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
99
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
100 g_return_val_if_fail(host != NULL, NULL);
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
101 g_return_val_if_fail(port != 0 && port != -1, NULL);
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
102 g_return_val_if_fail(func != NULL, NULL);
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
103 g_return_val_if_fail(gaim_ssl_is_supported(), NULL);
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
104
6738
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
105 if (!_ssl_initialized)
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
106 {
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
107 if (!ssl_init())
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
108 return NULL;
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
109 }
6703
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
110
6738
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
111 gsc = g_new0(GaimSslConnection, 1);
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
112
14222
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
113 gsc->fd = -1;
7274
42ec5f56e32a [gaim-migrate @ 7851]
Christian Hammond <chipx86@chipx86.com>
parents: 7024
diff changeset
114 gsc->host = g_strdup(host);
42ec5f56e32a [gaim-migrate @ 7851]
Christian Hammond <chipx86@chipx86.com>
parents: 7024
diff changeset
115 gsc->port = port;
42ec5f56e32a [gaim-migrate @ 7851]
Christian Hammond <chipx86@chipx86.com>
parents: 7024
diff changeset
116 gsc->connect_cb_data = data;
42ec5f56e32a [gaim-migrate @ 7851]
Christian Hammond <chipx86@chipx86.com>
parents: 7024
diff changeset
117 gsc->connect_cb = func;
42ec5f56e32a [gaim-migrate @ 7851]
Christian Hammond <chipx86@chipx86.com>
parents: 7024
diff changeset
118 gsc->error_cb = error_func;
6738
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
119
14222
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
120 gsc->connect_info = gaim_proxy_connect(account, host, port, gaim_ssl_connect_cb, gsc);
6703
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
121
14222
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
122 if (gsc->connect_info == NULL)
6703
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
123 {
6738
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
124 g_free(gsc->host);
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
125 g_free(gsc);
6703
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
126
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
127 return NULL;
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
128 }
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
129
6738
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
130 return (GaimSslConnection *)gsc;
6703
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
131 }
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
132
6764
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6762
diff changeset
133 static void
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6762
diff changeset
134 recv_cb(gpointer data, gint source, GaimInputCondition cond)
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6762
diff changeset
135 {
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6762
diff changeset
136 GaimSslConnection *gsc = data;
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6762
diff changeset
137
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6762
diff changeset
138 gsc->recv_cb(gsc->recv_cb_data, gsc, cond);
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6762
diff changeset
139 }
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6762
diff changeset
140
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6762
diff changeset
141 void
7274
42ec5f56e32a [gaim-migrate @ 7851]
Christian Hammond <chipx86@chipx86.com>
parents: 7024
diff changeset
142 gaim_ssl_input_add(GaimSslConnection *gsc, GaimSslInputFunction func,
42ec5f56e32a [gaim-migrate @ 7851]
Christian Hammond <chipx86@chipx86.com>
parents: 7024
diff changeset
143 void *data)
6764
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6762
diff changeset
144 {
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6762
diff changeset
145 g_return_if_fail(func != NULL);
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6762
diff changeset
146 g_return_if_fail(gaim_ssl_is_supported());
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6762
diff changeset
147
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6762
diff changeset
148 gsc->recv_cb_data = data;
7274
42ec5f56e32a [gaim-migrate @ 7851]
Christian Hammond <chipx86@chipx86.com>
parents: 7024
diff changeset
149 gsc->recv_cb = func;
42ec5f56e32a [gaim-migrate @ 7851]
Christian Hammond <chipx86@chipx86.com>
parents: 7024
diff changeset
150
6764
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6762
diff changeset
151 gsc->inpa = gaim_input_add(gsc->fd, GAIM_INPUT_READ, recv_cb, gsc);
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6762
diff changeset
152 }
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6762
diff changeset
153
6762
2349053f14aa [gaim-migrate @ 7294]
Christian Hammond <chipx86@chipx86.com>
parents: 6745
diff changeset
154 GaimSslConnection *
2349053f14aa [gaim-migrate @ 7294]
Christian Hammond <chipx86@chipx86.com>
parents: 6745
diff changeset
155 gaim_ssl_connect_fd(GaimAccount *account, int fd,
7274
42ec5f56e32a [gaim-migrate @ 7851]
Christian Hammond <chipx86@chipx86.com>
parents: 7024
diff changeset
156 GaimSslInputFunction func,
42ec5f56e32a [gaim-migrate @ 7851]
Christian Hammond <chipx86@chipx86.com>
parents: 7024
diff changeset
157 GaimSslErrorFunction error_func, void *data)
6762
2349053f14aa [gaim-migrate @ 7294]
Christian Hammond <chipx86@chipx86.com>
parents: 6745
diff changeset
158 {
2349053f14aa [gaim-migrate @ 7294]
Christian Hammond <chipx86@chipx86.com>
parents: 6745
diff changeset
159 GaimSslConnection *gsc;
2349053f14aa [gaim-migrate @ 7294]
Christian Hammond <chipx86@chipx86.com>
parents: 6745
diff changeset
160 GaimSslOps *ops;
2349053f14aa [gaim-migrate @ 7294]
Christian Hammond <chipx86@chipx86.com>
parents: 6745
diff changeset
161
14048
b577c53406c0 [gaim-migrate @ 16556]
Mark Doliner <markdoliner@pidgin.im>
parents: 13664
diff changeset
162 g_return_val_if_fail(fd != -1, NULL);
6762
2349053f14aa [gaim-migrate @ 7294]
Christian Hammond <chipx86@chipx86.com>
parents: 6745
diff changeset
163 g_return_val_if_fail(func != NULL, NULL);
2349053f14aa [gaim-migrate @ 7294]
Christian Hammond <chipx86@chipx86.com>
parents: 6745
diff changeset
164 g_return_val_if_fail(gaim_ssl_is_supported(), NULL);
2349053f14aa [gaim-migrate @ 7294]
Christian Hammond <chipx86@chipx86.com>
parents: 6745
diff changeset
165
2349053f14aa [gaim-migrate @ 7294]
Christian Hammond <chipx86@chipx86.com>
parents: 6745
diff changeset
166 if (!_ssl_initialized)
2349053f14aa [gaim-migrate @ 7294]
Christian Hammond <chipx86@chipx86.com>
parents: 6745
diff changeset
167 {
2349053f14aa [gaim-migrate @ 7294]
Christian Hammond <chipx86@chipx86.com>
parents: 6745
diff changeset
168 if (!ssl_init())
2349053f14aa [gaim-migrate @ 7294]
Christian Hammond <chipx86@chipx86.com>
parents: 6745
diff changeset
169 return NULL;
2349053f14aa [gaim-migrate @ 7294]
Christian Hammond <chipx86@chipx86.com>
parents: 6745
diff changeset
170 }
2349053f14aa [gaim-migrate @ 7294]
Christian Hammond <chipx86@chipx86.com>
parents: 6745
diff changeset
171
2349053f14aa [gaim-migrate @ 7294]
Christian Hammond <chipx86@chipx86.com>
parents: 6745
diff changeset
172 gsc = g_new0(GaimSslConnection, 1);
2349053f14aa [gaim-migrate @ 7294]
Christian Hammond <chipx86@chipx86.com>
parents: 6745
diff changeset
173
7274
42ec5f56e32a [gaim-migrate @ 7851]
Christian Hammond <chipx86@chipx86.com>
parents: 7024
diff changeset
174 gsc->connect_cb_data = data;
42ec5f56e32a [gaim-migrate @ 7851]
Christian Hammond <chipx86@chipx86.com>
parents: 7024
diff changeset
175 gsc->connect_cb = func;
42ec5f56e32a [gaim-migrate @ 7851]
Christian Hammond <chipx86@chipx86.com>
parents: 7024
diff changeset
176 gsc->error_cb = error_func;
14222
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
177 gsc->fd = fd;
6762
2349053f14aa [gaim-migrate @ 7294]
Christian Hammond <chipx86@chipx86.com>
parents: 6745
diff changeset
178
14222
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
179 ops = gaim_ssl_get_ops();
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
180 ops->connect(gsc);
6762
2349053f14aa [gaim-migrate @ 7294]
Christian Hammond <chipx86@chipx86.com>
parents: 6745
diff changeset
181
2349053f14aa [gaim-migrate @ 7294]
Christian Hammond <chipx86@chipx86.com>
parents: 6745
diff changeset
182 return (GaimSslConnection *)gsc;
2349053f14aa [gaim-migrate @ 7294]
Christian Hammond <chipx86@chipx86.com>
parents: 6745
diff changeset
183 }
2349053f14aa [gaim-migrate @ 7294]
Christian Hammond <chipx86@chipx86.com>
parents: 6745
diff changeset
184
6703
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
185 void
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
186 gaim_ssl_close(GaimSslConnection *gsc)
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
187 {
6738
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
188 GaimSslOps *ops;
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
189
6703
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
190 g_return_if_fail(gsc != NULL);
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
191
6738
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
192 ops = gaim_ssl_get_ops();
14222
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
193 (ops->close)(gsc);
6738
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
194
14222
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
195 if (gsc->connect_info != NULL)
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
196 gaim_proxy_connect_cancel(gsc->connect_info);
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
197
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
198 if (gsc->inpa > 0)
6738
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
199 gaim_input_remove(gsc->inpa);
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
200
14222
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
201 if (gsc->fd >= 0)
6738
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
202 close(gsc->fd);
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
203
14048
b577c53406c0 [gaim-migrate @ 16556]
Mark Doliner <markdoliner@pidgin.im>
parents: 13664
diff changeset
204 g_free(gsc->host);
6738
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
205 g_free(gsc);
6703
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
206 }
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
207
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
208 size_t
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
209 gaim_ssl_read(GaimSslConnection *gsc, void *data, size_t len)
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
210 {
6738
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
211 GaimSslOps *ops;
6703
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
212
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
213 g_return_val_if_fail(gsc != NULL, 0);
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
214 g_return_val_if_fail(data != NULL, 0);
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
215 g_return_val_if_fail(len > 0, 0);
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
216
6738
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
217 ops = gaim_ssl_get_ops();
14222
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
218 return (ops->read)(gsc, data, len);
6703
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
219 }
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
220
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
221 size_t
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
222 gaim_ssl_write(GaimSslConnection *gsc, const void *data, size_t len)
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
223 {
6738
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
224 GaimSslOps *ops;
6703
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
225
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
226 g_return_val_if_fail(gsc != NULL, 0);
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
227 g_return_val_if_fail(data != NULL, 0);
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
228 g_return_val_if_fail(len > 0, 0);
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
229
6738
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
230 ops = gaim_ssl_get_ops();
14222
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
231 return (ops->write)(gsc, data, len);
6738
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
232 }
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
233
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
234 void
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
235 gaim_ssl_set_ops(GaimSslOps *ops)
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
236 {
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
237 _ssl_ops = ops;
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
238 }
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
239
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
240 GaimSslOps *
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
241 gaim_ssl_get_ops(void)
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
242 {
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
243 return _ssl_ops;
6703
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
244 }
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
245
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
246 void
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
247 gaim_ssl_init(void)
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
248 {
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
249 }
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
250
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
251 void
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
252 gaim_ssl_uninit(void)
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
253 {
6738
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
254 GaimSslOps *ops;
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
255
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
256 if (!_ssl_initialized)
6703
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
257 return;
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
258
6738
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
259 ops = gaim_ssl_get_ops();
14222
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
260 ops->uninit();
6738
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
261
aa797bcc69dd [gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents: 6735
diff changeset
262 _ssl_initialized = FALSE;
6703
6f9d558270c9 [gaim-migrate @ 7229]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
263 }

mercurial