00001
00025 #ifndef _PURPLE_SSLCONN_H_
00026 #define _PURPLE_SSLCONN_H_
00027
00028 #include "proxy.h"
00029
00030 #define PURPLE_SSL_DEFAULT_PORT 443
00031
00032 typedef enum
00033 {
00034 PURPLE_SSL_HANDSHAKE_FAILED = 1,
00035 PURPLE_SSL_CONNECT_FAILED = 2
00036 } PurpleSslErrorType;
00037
00038 typedef struct _PurpleSslConnection PurpleSslConnection;
00039
00040 typedef void (*PurpleSslInputFunction)(gpointer, PurpleSslConnection *,
00041 PurpleInputCondition);
00042 typedef void (*PurpleSslErrorFunction)(PurpleSslConnection *, PurpleSslErrorType,
00043 gpointer);
00044
00045 struct _PurpleSslConnection
00046 {
00048 char *host;
00050 int port;
00052 void *connect_cb_data;
00054 PurpleSslInputFunction connect_cb;
00056 PurpleSslErrorFunction error_cb;
00058 void *recv_cb_data;
00060 PurpleSslInputFunction recv_cb;
00061
00063 int fd;
00066 int inpa;
00068 PurpleProxyConnectData *connect_data;
00069
00071 void *private_data;
00072 };
00073
00080 typedef struct
00081 {
00085 gboolean (*init)(void);
00087 void (*uninit)(void);
00090 void (*connectfunc)(PurpleSslConnection *gsc);
00095 void (*close)(PurpleSslConnection *gsc);
00102 size_t (*read)(PurpleSslConnection *gsc, void *data, size_t len);
00109 size_t (*write)(PurpleSslConnection *gsc, const void *data, size_t len);
00110
00111 void (*_purple_reserved1)(void);
00112 void (*_purple_reserved2)(void);
00113 void (*_purple_reserved3)(void);
00114 void (*_purple_reserved4)(void);
00115 } PurpleSslOps;
00116
00117 #ifdef __cplusplus
00118 extern "C" {
00119 #endif
00120
00121
00123
00131 gboolean purple_ssl_is_supported(void);
00132
00150 PurpleSslConnection *purple_ssl_connect(PurpleAccount *account, const char *host,
00151 int port, PurpleSslInputFunction func,
00152 PurpleSslErrorFunction error_func,
00153 void *data);
00154
00166 PurpleSslConnection *purple_ssl_connect_fd(PurpleAccount *account, int fd,
00167 PurpleSslInputFunction func,
00168 PurpleSslErrorFunction error_func,
00169 void *data);
00170
00179 void purple_ssl_input_add(PurpleSslConnection *gsc, PurpleSslInputFunction func,
00180 void *data);
00181
00187 void purple_ssl_close(PurpleSslConnection *gsc);
00188
00198 size_t purple_ssl_read(PurpleSslConnection *gsc, void *buffer, size_t len);
00199
00209 size_t purple_ssl_write(PurpleSslConnection *gsc, const void *buffer, size_t len);
00210
00213
00215
00223 void purple_ssl_set_ops(PurpleSslOps *ops);
00224
00230 PurpleSslOps *purple_ssl_get_ops(void);
00231
00235 void purple_ssl_init(void);
00236
00240 void purple_ssl_uninit(void);
00241
00244 #ifdef __cplusplus
00245 }
00246 #endif
00247
00248 #endif