annotate src/sslconn.c @ 13374:14d1892e0932

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