core/sslconn.h

changeset 14253
b63ebf84c42b
parent 14241
7b47f525742a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/sslconn.h	Sat Dec 16 04:59:55 2006 +0000
@@ -0,0 +1,203 @@
+/**
+ * @file sslconn.h SSL API
+ * @ingroup core
+ *
+ * gaim
+ *
+ * Gaim is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+#ifndef _GAIM_SSLCONN_H_
+#define _GAIM_SSLCONN_H_
+
+#include "proxy.h"
+
+#define GAIM_SSL_DEFAULT_PORT 443
+
+typedef enum
+{
+	GAIM_SSL_HANDSHAKE_FAILED = 1,
+	GAIM_SSL_CONNECT_FAILED = 2
+} GaimSslErrorType;
+
+typedef struct _GaimSslConnection GaimSslConnection;
+
+typedef void (*GaimSslInputFunction)(gpointer, GaimSslConnection *,
+									 GaimInputCondition);
+typedef void (*GaimSslErrorFunction)(GaimSslConnection *, GaimSslErrorType,
+									 gpointer);
+
+struct _GaimSslConnection
+{
+	char *host;
+	int port;
+	void *connect_cb_data;
+	GaimSslInputFunction connect_cb;
+	GaimSslErrorFunction error_cb;
+	void *recv_cb_data;
+	GaimSslInputFunction recv_cb;
+
+	int fd;
+	int inpa;
+	GaimProxyConnectInfo *connect_info;
+
+	void *private_data;
+};
+
+/**
+ * SSL implementation operations structure.
+ *
+ * Every SSL implementation must provide all of these and register it.
+ */
+typedef struct
+{
+	gboolean (*init)(void);
+	void (*uninit)(void);
+	void (*connectfunc)(GaimSslConnection *gsc);
+	void (*close)(GaimSslConnection *gsc);
+	size_t (*read)(GaimSslConnection *gsc, void *data, size_t len);
+	size_t (*write)(GaimSslConnection *gsc, const void *data, size_t len);
+
+} GaimSslOps;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**************************************************************************/
+/** @name SSL API                                                         */
+/**************************************************************************/
+/*@{*/
+
+/**
+ * Returns whether or not SSL is currently supported.
+ *
+ * @return TRUE if SSL is supported, or FALSE otherwise.
+ */
+gboolean gaim_ssl_is_supported(void);
+
+/**
+ * Makes a SSL connection to the specified host and port.
+ *
+ * @param account    The account making the connection.
+ * @param host       The destination host.
+ * @param port       The destination port.
+ * @param func       The SSL input handler function.
+ * @param error_func The SSL error handler function.
+ * @param data       User-defined data.
+ *
+ * @return The SSL connection handle.
+ */
+GaimSslConnection *gaim_ssl_connect(GaimAccount *account, const char *host,
+									int port, GaimSslInputFunction func,
+									GaimSslErrorFunction error_func,
+									void *data);
+
+/**
+ * Makes a SSL connection using an already open file descriptor.
+ *
+ * @param account    The account making the connection.
+ * @param fd         The file descriptor.
+ * @param func       The SSL input handler function.
+ * @param error_func The SSL error handler function.
+ * @param data       User-defined data.
+ *
+ * @return The SSL connection handle.
+ */
+GaimSslConnection *gaim_ssl_connect_fd(GaimAccount *account, int fd,
+									   GaimSslInputFunction func,
+									   GaimSslErrorFunction error_func,
+									   void *data);
+
+/**
+ * Adds an input watcher for the specified SSL connection.
+ *
+ * @param gsc   The SSL connection handle.
+ * @param func  The callback function.
+ * @param data  User-defined data.
+ */
+void gaim_ssl_input_add(GaimSslConnection *gsc, GaimSslInputFunction func,
+						void *data);
+
+/**
+ * Closes a SSL connection.
+ *
+ * @param gsc The SSL connection to close.
+ */
+void gaim_ssl_close(GaimSslConnection *gsc);
+
+/**
+ * Reads data from an SSL connection.
+ *
+ * @param gsc    The SSL connection handle.
+ * @param buffer The destination buffer.
+ * @param len    The maximum number of bytes to read.
+ *
+ * @return The number of bytes read.
+ */
+size_t gaim_ssl_read(GaimSslConnection *gsc, void *buffer, size_t len);
+
+/**
+ * Writes data to an SSL connection.
+ *
+ * @param gsc    The SSL connection handle.
+ * @param buffer The buffer to write.
+ * @param len    The length of the data to write.
+ *
+ * @return The number of bytes written.
+ */
+size_t gaim_ssl_write(GaimSslConnection *gsc, const void *buffer, size_t len);
+
+/*@}*/
+
+/**************************************************************************/
+/** @name Subsystem API                                                   */
+/**************************************************************************/
+/*@{*/
+
+/**
+ * Sets the current SSL operations structure.
+ *
+ * @param ops The SSL operations structure to assign.
+ */
+void gaim_ssl_set_ops(GaimSslOps *ops);
+
+/**
+ * Returns the current SSL operations structure.
+ *
+ * @return The SSL operations structure.
+ */
+GaimSslOps *gaim_ssl_get_ops(void);
+
+/**
+ * Initializes the SSL subsystem.
+ */
+void gaim_ssl_init(void);
+
+/**
+ * Uninitializes the SSL subsystem.
+ */
+void gaim_ssl_uninit(void);
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _GAIM_SSLCONN_H_ */

mercurial