src/sslconn.h

branch
cpw.khc.msnp14
changeset 20472
6a6d2ef151e6
parent 13912
463b4fa9f067
parent 20469
b2836a24d81e
child 20473
91e1b3a49d10
equal deleted inserted replaced
13912:463b4fa9f067 20472:6a6d2ef151e6
1 /**
2 * @file sslconn.h SSL API
3 * @ingroup core
4 *
5 * gaim
6 *
7 * Gaim is the legal property of its developers, whose names are too numerous
8 * to list here. Please refer to the COPYRIGHT file distributed with this
9 * source distribution.
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
15 *
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24 */
25 #ifndef _GAIM_SSLCONN_H_
26 #define _GAIM_SSLCONN_H_
27
28 #include "proxy.h"
29
30 #define GAIM_SSL_DEFAULT_PORT 443
31
32 typedef enum
33 {
34 GAIM_SSL_HANDSHAKE_FAILED = 1,
35 GAIM_SSL_CONNECT_FAILED = 2
36 } GaimSslErrorType;
37
38 typedef struct _GaimSslConnection GaimSslConnection;
39
40 typedef void (*GaimSslInputFunction)(gpointer, GaimSslConnection *,
41 GaimInputCondition);
42 typedef void (*GaimSslErrorFunction)(GaimSslConnection *, GaimSslErrorType,
43 gpointer);
44
45 struct _GaimSslConnection
46 {
47 char *host;
48 int port;
49 void *connect_cb_data;
50 GaimSslInputFunction connect_cb;
51 GaimSslErrorFunction error_cb;
52 void *recv_cb_data;
53 GaimSslInputFunction recv_cb;
54
55 int fd;
56 int inpa;
57
58 void *private_data;
59 };
60
61 /**
62 * SSL implementation operations structure.
63 *
64 * Every SSL implementation must provide one of these and register it.
65 */
66 typedef struct
67 {
68 gboolean (*init)(void);
69 void (*uninit)(void);
70 GaimInputFunction connect_cb;
71 void (*close)(GaimSslConnection *gsc);
72 size_t (*read)(GaimSslConnection *gsc, void *data, size_t len);
73 size_t (*write)(GaimSslConnection *gsc, const void *data, size_t len);
74
75 } GaimSslOps;
76
77 #ifdef __cplusplus
78 extern "C" {
79 #endif
80
81 /**************************************************************************/
82 /** @name SSL API */
83 /**************************************************************************/
84 /*@{*/
85
86 /**
87 * Returns whether or not SSL is currently supported.
88 *
89 * @return TRUE if SSL is supported, or FALSE otherwise.
90 */
91 gboolean gaim_ssl_is_supported(void);
92
93 /**
94 * Makes a SSL connection to the specified host and port.
95 *
96 * @param account The account making the connection.
97 * @param host The destination host.
98 * @param port The destination port.
99 * @param func The SSL input handler function.
100 * @param error_func The SSL error handler function.
101 * @param data User-defined data.
102 *
103 * @return The SSL connection handle.
104 */
105 GaimSslConnection *gaim_ssl_connect(GaimAccount *account, const char *host,
106 int port, GaimSslInputFunction func,
107 GaimSslErrorFunction error_func,
108 void *data);
109
110 /**
111 * Makes a SSL connection using an already open file descriptor.
112 *
113 * @param account The account making the connection.
114 * @param fd The file descriptor.
115 * @param func The SSL input handler function.
116 * @param error_func The SSL error handler function.
117 * @param data User-defined data.
118 *
119 * @return The SSL connection handle.
120 */
121 GaimSslConnection *gaim_ssl_connect_fd(GaimAccount *account, int fd,
122 GaimSslInputFunction func,
123 GaimSslErrorFunction error_func,
124 void *data);
125
126 /**
127 * Adds an input watcher for the specified SSL connection.
128 *
129 * @param gsc The SSL connection handle.
130 * @param func The callback function.
131 * @param data User-defined data.
132 */
133 void gaim_ssl_input_add(GaimSslConnection *gsc, GaimSslInputFunction func,
134 void *data);
135
136 /**
137 * Closes a SSL connection.
138 *
139 * @param gsc The SSL connection to close.
140 */
141 void gaim_ssl_close(GaimSslConnection *gsc);
142
143 /**
144 * Reads data from an SSL connection.
145 *
146 * @param gsc The SSL connection handle.
147 * @param buffer The destination buffer.
148 * @param len The maximum number of bytes to read.
149 *
150 * @return The number of bytes read.
151 */
152 size_t gaim_ssl_read(GaimSslConnection *gsc, void *buffer, size_t len);
153
154 /**
155 * Writes data to an SSL connection.
156 *
157 * @param gsc The SSL connection handle.
158 * @param buffer The buffer to write.
159 * @param len The length of the data to write.
160 *
161 * @return The number of bytes written.
162 */
163 size_t gaim_ssl_write(GaimSslConnection *gsc, const void *buffer, size_t len);
164
165 /*@}*/
166
167 /**************************************************************************/
168 /** @name Subsystem API */
169 /**************************************************************************/
170 /*@{*/
171
172 /**
173 * Sets the current SSL operations structure.
174 *
175 * @param ops The SSL operations structure to assign.
176 */
177 void gaim_ssl_set_ops(GaimSslOps *ops);
178
179 /**
180 * Returns the current SSL operations structure.
181 *
182 * @return The SSL operations structure.
183 */
184 GaimSslOps *gaim_ssl_get_ops(void);
185
186 /**
187 * Initializes the SSL subsystem.
188 */
189 void gaim_ssl_init(void);
190
191 /**
192 * Uninitializes the SSL subsystem.
193 */
194 void gaim_ssl_uninit(void);
195
196 /*@}*/
197
198 #ifdef __cplusplus
199 }
200 #endif
201
202 #endif /* _GAIM_SSLCONN_H_ */

mercurial