source: lib/ssl_client.h @ e774815

Last change on this file since e774815 was e046390, checked in by Wilmer van der Gaast <wilmer@…>, at 2009-10-10T23:25:54Z

Make purple use BitlBee's event handling API. Since the APIs never really
diverged too much this is fairly transparent. I did rename and redefine
GAIM_INPUT_* variables to really make it work without adding another stupid
layer in between.

One problem left, the new libpurple input API doesn't care about return
values. Fixing that in the next CL.

  • Property mode set to 100644
File size: 3.6 KB
RevLine 
[b7d3cc34]1  /********************************************************************\
2  * BitlBee -- An IRC to other IM-networks gateway                     *
3  *                                                                    *
4  * Copyright 2002-2004 Wilmer van der Gaast and others                *
5  \********************************************************************/
6
7/* SSL module                                                           */
8
9/*
10  This program is free software; you can redistribute it and/or modify
11  it under the terms of the GNU General Public License as published by
12  the Free Software Foundation; either version 2 of the License, or
13  (at your option) any later version.
14
15  This program is distributed in the hope that it will be useful,
16  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  GNU General Public License for more details.
19
20  You should have received a copy of the GNU General Public License with
21  the Debian GNU/Linux distribution in /usr/share/common-licenses/GPL;
22  if not, write to the Free Software Foundation, Inc., 59 Temple Place,
23  Suite 330, Boston, MA  02111-1307  USA
24*/
25
[0aaca60]26/* ssl_client makes it easier to open SSL connections to servers. (It
27   doesn't offer SSL server functionality yet, but it could be useful
28   to add it later.) Different ssl_client modules are available, and
29   ssl_client tries to make them all behave the same. It's very simple
30   and basic, it just imitates the proxy_connect() function from the
31   Gaim libs and passes the socket to the program once the handshake
32   is completed. */
33
[b7d3cc34]34#include <glib.h>
35#include "proxy.h"
36
[0aaca60]37/* Some generic error codes. Especially SSL_AGAIN is important if you
38   want to do asynchronous I/O. */
[701acdd4]39#define SSL_OK            0
40#define SSL_NOHANDSHAKE   1
41#define SSL_AGAIN         2
42
43extern int ssl_errno;
44
[0aaca60]45/* This is what your callback function should look like. */
[ba9edaa]46typedef gboolean (*ssl_input_function)(gpointer, void*, b_input_condition);
[b7d3cc34]47
[0aaca60]48
49/* Connect to host:port, call the given function when the connection is
50   ready to be used for SSL traffic. This is all done asynchronously, no
51   blocking I/O! (Except for the DNS lookups, for now...) */
[3d64e5b]52G_MODULE_EXPORT void *ssl_connect( char *host, int port, ssl_input_function func, gpointer data );
[0aaca60]53
[42127dc]54/* Start an SSL session on an existing fd. Useful for STARTTLS functionality,
55   for example in Jabber. */
56G_MODULE_EXPORT void *ssl_starttls( int fd, ssl_input_function func, gpointer data );
57
[0aaca60]58/* Obviously you need special read/write functions to read data. */
[b7d3cc34]59G_MODULE_EXPORT int ssl_read( void *conn, char *buf, int len );
60G_MODULE_EXPORT int ssl_write( void *conn, const char *buf, int len );
[0aaca60]61
[8a2221a7]62/* See ssl_openssl.c for an explanation. */
63G_MODULE_EXPORT int ssl_pending( void *conn );
64
[0aaca60]65/* Abort the SSL connection and disconnect the socket. Do not use close()
66   directly, both the SSL library and the peer will be unhappy! */
[b7d3cc34]67G_MODULE_EXPORT void ssl_disconnect( void *conn_ );
[0aaca60]68
69/* Get the fd for this connection, you will usually need it for event
70   handling. */
[b7d3cc34]71G_MODULE_EXPORT int ssl_getfd( void *conn );
[0aaca60]72
[e046390]73/* This function returns B_EV_IO_READ/WRITE. With SSL connections it's
[0aaca60]74   possible that something has to be read while actually were trying to
75   write something (think about key exchange/refresh/etc). So when an
76   SSL operation returned SSL_AGAIN, *always* use this function when
77   adding an event handler to the queue. (And it should perform exactly
78   the same action as the handler that just received the SSL_AGAIN.) */
[ba9edaa]79G_MODULE_EXPORT b_input_condition ssl_getdirection( void *conn );
Note: See TracBrowser for help on using the repository browser.