diff -r 1d7bfb35d82f -r 6687499c0b4f libpurple/sslconn.h --- a/libpurple/sslconn.h Mon Apr 27 05:20:40 2020 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,242 +0,0 @@ -/* purple - * - * Purple 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., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - */ - -#ifndef PURPLE_SSLCONN_H -#define PURPLE_SSLCONN_H -/** - * SECTION:sslconn - * @section_id: libpurple-sslconn - * @short_description: sslconn.h - * @title: SSL API - */ - -#include -#include "proxy.h" - -#define PURPLE_SSL_DEFAULT_PORT 443 - -typedef struct _PurpleSslConnection PurpleSslConnection; - -typedef void (*PurpleSslInputFunction)(gpointer data, PurpleSslConnection *connection, - PurpleInputCondition cond); -typedef void (*PurpleSslErrorFunction)(PurpleSslConnection *connection, PurpleSslErrorType err, - gpointer data); - -/** - * PurpleSslConnection: - * @host: Hostname to which the SSL connection will be made - * @port: Port to connect to - * @connect_cb_data: Data to pass to @connect_cb - * @connect_cb: Callback triggered once the SSL handshake is complete - * @error_cb: Callback triggered if there is an error during connection - * @recv_cb_data: Data passed to @recv_cb - * @recv_cb: User-defined callback executed when the SSL connection - * receives data - * @fd: File descriptor used to refer to the socket - * @inpa: Glib event source ID; used to refer to the received data - * callback in the glib eventloop - * @connect_data: Data related to the underlying TCP connection - * @conn: The underlying #GTlsConnection - * @cancellable: A cancellable to call when cancelled - * @private_data: Internal connection data managed by the SSL backend - * (GnuTLS/LibNSS/whatever) - */ -struct _PurpleSslConnection -{ - char *host; - int port; - void *connect_cb_data; - PurpleSslInputFunction connect_cb; - PurpleSslErrorFunction error_cb; - void *recv_cb_data; - PurpleSslInputFunction recv_cb; - - int fd; - guint inpa; - PurpleProxyConnectData *connect_data; - - GTlsConnection *conn; - GCancellable *cancellable; - - void *private_data; -}; - -G_BEGIN_DECLS - -/**************************************************************************/ -/* SSL API */ -/**************************************************************************/ - -/** - * purple_ssl_connect: (skip) - * @account: The account making the connection. - * @host: The destination host. - * @port: The destination port. - * @func: The SSL input handler function. - * @error_func: The SSL error handler function. This function - * should NOT call purple_ssl_close(). In - * the event of an error the #PurpleSslConnection will be - * destroyed for you. - * @data: User-defined data. - * - * Makes a SSL connection to the specified host and port. The caller - * should keep track of the returned value and use it to cancel the - * connection, if needed. - * - * Returns: The SSL connection handle. - */ -PurpleSslConnection *purple_ssl_connect(PurpleAccount *account, const char *host, - int port, PurpleSslInputFunction func, - PurpleSslErrorFunction error_func, - void *data); - -/** - * purple_ssl_connect_with_ssl_cn: (skip) - * @account: The account making the connection. - * @host: The destination host. - * @port: The destination port. - * @func: The SSL input handler function. - * @error_func: The SSL error handler function. This function - * should NOT call purple_ssl_close(). In - * the event of an error the #PurpleSslConnection will be - * destroyed for you. - * @ssl_host: The hostname of the other peer (to verify the CN) - * @data: User-defined data. - * - * Makes a SSL connection to the specified host and port, using the separate - * name to verify with the certificate. The caller should keep track of the - * returned value and use it to cancel the connection, if needed. - * - * Returns: The SSL connection handle. - */ -PurpleSslConnection *purple_ssl_connect_with_ssl_cn(PurpleAccount *account, const char *host, - int port, PurpleSslInputFunction func, - PurpleSslErrorFunction error_func, - const char *ssl_host, - void *data); - -/** - * purple_ssl_connect_with_host_fd: (skip) - * @account: The account making the connection. - * @fd: The file descriptor. - * @func: The SSL input handler function. - * @error_func: The SSL error handler function. - * @host: The hostname of the other peer (to verify the CN) - * @data: User-defined data. - * - * Makes a SSL connection using an already open file descriptor. - * - * Returns: The SSL connection handle. - */ -PurpleSslConnection *purple_ssl_connect_with_host_fd(PurpleAccount *account, int fd, - PurpleSslInputFunction func, - PurpleSslErrorFunction error_func, - const char *host, - void *data); - -/** - * purple_ssl_input_add: (skip) - * @gsc: The SSL connection handle. - * @func: The callback function. - * @data: User-defined data. - * - * Adds an input watcher for the specified SSL connection. - * Once the SSL handshake is complete, use this to watch for actual data across it. - */ -void purple_ssl_input_add(PurpleSslConnection *gsc, PurpleSslInputFunction func, - void *data); - -/** - * purple_ssl_input_remove: (skip) - * @gsc: The SSL connection handle. - * - * Removes an input watcher, added with purple_ssl_input_add(). - * - * If there is no input watcher set, does nothing. - */ -void -purple_ssl_input_remove(PurpleSslConnection *gsc); - -/** - * purple_ssl_close: (skip) - * @gsc: The SSL connection to close. - * - * Closes a SSL connection. - */ -void purple_ssl_close(PurpleSslConnection *gsc); - -/** - * purple_ssl_read: (skip) - * @gsc: The SSL connection handle. - * @buffer: The destination buffer. - * @len: The maximum number of bytes to read. - * - * Reads data from an SSL connection. - * - * Returns: The number of bytes read. - */ -size_t purple_ssl_read(PurpleSslConnection *gsc, void *buffer, size_t len); - -/** - * purple_ssl_write: (skip) - * @gsc: The SSL connection handle. - * @buffer: The buffer to write. - * @len: The length of the data to write. - * - * Writes data to an SSL connection. - * - * Returns: The number of bytes written. - */ -size_t purple_ssl_write(PurpleSslConnection *gsc, const void *buffer, size_t len); - -/** - * purple_ssl_get_peer_certificates: (skip) - * @gsc: The SSL connection handle - * - * Obtains the peer's presented certificates - * - * Returns: (element-type GTlsCertificate): The peer certificate chain, in the - * order of certificate, issuer, issuer's issuer, etc. %NULL if no - * certificates have been provided. - */ -GList * purple_ssl_get_peer_certificates(PurpleSslConnection *gsc); - -/**************************************************************************/ -/* Subsystem API */ -/**************************************************************************/ - -/** - * purple_ssl_init: - * - * Initializes the SSL subsystem. - */ -void purple_ssl_init(void); - -/** - * purple_ssl_uninit: - * - * Uninitializes the SSL subsystem. - */ -void purple_ssl_uninit(void); - -G_END_DECLS - -#endif /* PURPLE_SSLCONN_H */