xref: /minix3/external/bsd/libevent/dist/include/event2/bufferevent_ssl.h (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1*0a6a1f1dSLionel Sambuc /*	$NetBSD: bufferevent_ssl.h,v 1.1.1.2 2015/01/29 06:38:27 spz Exp $	*/
2*0a6a1f1dSLionel Sambuc /*	$NetBSD: bufferevent_ssl.h,v 1.1.1.2 2015/01/29 06:38:27 spz Exp $	*/
3e985b929SDavid van Moolenbroek /*
4e985b929SDavid van Moolenbroek  * Copyright (c) 2009-2012 Niels Provos and Nick Mathewson
5e985b929SDavid van Moolenbroek  *
6e985b929SDavid van Moolenbroek  * Redistribution and use in source and binary forms, with or without
7e985b929SDavid van Moolenbroek  * modification, are permitted provided that the following conditions
8e985b929SDavid van Moolenbroek  * are met:
9e985b929SDavid van Moolenbroek  * 1. Redistributions of source code must retain the above copyright
10e985b929SDavid van Moolenbroek  *    notice, this list of conditions and the following disclaimer.
11e985b929SDavid van Moolenbroek  * 2. Redistributions in binary form must reproduce the above copyright
12e985b929SDavid van Moolenbroek  *    notice, this list of conditions and the following disclaimer in the
13e985b929SDavid van Moolenbroek  *    documentation and/or other materials provided with the distribution.
14e985b929SDavid van Moolenbroek  * 3. The name of the author may not be used to endorse or promote products
15e985b929SDavid van Moolenbroek  *    derived from this software without specific prior written permission.
16e985b929SDavid van Moolenbroek  *
17e985b929SDavid van Moolenbroek  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18e985b929SDavid van Moolenbroek  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19e985b929SDavid van Moolenbroek  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20e985b929SDavid van Moolenbroek  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21e985b929SDavid van Moolenbroek  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22e985b929SDavid van Moolenbroek  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23e985b929SDavid van Moolenbroek  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24e985b929SDavid van Moolenbroek  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25e985b929SDavid van Moolenbroek  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26e985b929SDavid van Moolenbroek  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27e985b929SDavid van Moolenbroek  */
28e985b929SDavid van Moolenbroek #ifndef _EVENT2_BUFFEREVENT_SSL_H_
29e985b929SDavid van Moolenbroek #define _EVENT2_BUFFEREVENT_SSL_H_
30e985b929SDavid van Moolenbroek 
31e985b929SDavid van Moolenbroek /** @file event2/bufferevent_ssl.h
32e985b929SDavid van Moolenbroek 
33e985b929SDavid van Moolenbroek     OpenSSL support for bufferevents.
34e985b929SDavid van Moolenbroek  */
35e985b929SDavid van Moolenbroek 
36e985b929SDavid van Moolenbroek #include <event2/event-config.h>
37e985b929SDavid van Moolenbroek #include <event2/bufferevent.h>
38e985b929SDavid van Moolenbroek #include <event2/util.h>
39e985b929SDavid van Moolenbroek 
40e985b929SDavid van Moolenbroek #ifdef __cplusplus
41e985b929SDavid van Moolenbroek extern "C" {
42e985b929SDavid van Moolenbroek #endif
43e985b929SDavid van Moolenbroek 
44e985b929SDavid van Moolenbroek /* This is what openssl's SSL objects are underneath. */
45e985b929SDavid van Moolenbroek struct ssl_st;
46e985b929SDavid van Moolenbroek 
47e985b929SDavid van Moolenbroek /**
48e985b929SDavid van Moolenbroek    The state of an SSL object to be used when creating a new
49e985b929SDavid van Moolenbroek    SSL bufferevent.
50e985b929SDavid van Moolenbroek  */
51e985b929SDavid van Moolenbroek enum bufferevent_ssl_state {
52e985b929SDavid van Moolenbroek 	BUFFEREVENT_SSL_OPEN = 0,
53e985b929SDavid van Moolenbroek 	BUFFEREVENT_SSL_CONNECTING = 1,
54e985b929SDavid van Moolenbroek 	BUFFEREVENT_SSL_ACCEPTING = 2
55e985b929SDavid van Moolenbroek };
56e985b929SDavid van Moolenbroek 
57e985b929SDavid van Moolenbroek #if defined(_EVENT_HAVE_OPENSSL) || defined(_EVENT_IN_DOXYGEN)
58e985b929SDavid van Moolenbroek /**
59e985b929SDavid van Moolenbroek    Create a new SSL bufferevent to send its data over another bufferevent.
60e985b929SDavid van Moolenbroek 
61e985b929SDavid van Moolenbroek    @param base An event_base to use to detect reading and writing.  It
62e985b929SDavid van Moolenbroek       must also be the base for the underlying bufferevent.
63e985b929SDavid van Moolenbroek    @param underlying A socket to use for this SSL
64e985b929SDavid van Moolenbroek    @param ssl A SSL* object from openssl.
65e985b929SDavid van Moolenbroek    @param state The current state of the SSL connection
66e985b929SDavid van Moolenbroek    @param options One or more bufferevent_options
67e985b929SDavid van Moolenbroek    @return A new bufferevent on success, or NULL on failure
68e985b929SDavid van Moolenbroek */
69e985b929SDavid van Moolenbroek struct bufferevent *
70e985b929SDavid van Moolenbroek bufferevent_openssl_filter_new(struct event_base *base,
71e985b929SDavid van Moolenbroek     struct bufferevent *underlying,
72e985b929SDavid van Moolenbroek     struct ssl_st *ssl,
73e985b929SDavid van Moolenbroek     enum bufferevent_ssl_state state,
74e985b929SDavid van Moolenbroek     int options);
75e985b929SDavid van Moolenbroek 
76e985b929SDavid van Moolenbroek /**
77e985b929SDavid van Moolenbroek    Create a new SSL bufferevent to send its data over an SSL * on a socket.
78e985b929SDavid van Moolenbroek 
79e985b929SDavid van Moolenbroek    @param base An event_base to use to detect reading and writing
80e985b929SDavid van Moolenbroek    @param fd A socket to use for this SSL
81e985b929SDavid van Moolenbroek    @param ssl A SSL* object from openssl.
82e985b929SDavid van Moolenbroek    @param state The current state of the SSL connection
83e985b929SDavid van Moolenbroek    @param options One or more bufferevent_options
84e985b929SDavid van Moolenbroek    @return A new bufferevent on success, or NULL on failure.
85e985b929SDavid van Moolenbroek */
86e985b929SDavid van Moolenbroek struct bufferevent *
87e985b929SDavid van Moolenbroek bufferevent_openssl_socket_new(struct event_base *base,
88e985b929SDavid van Moolenbroek     evutil_socket_t fd,
89e985b929SDavid van Moolenbroek     struct ssl_st *ssl,
90e985b929SDavid van Moolenbroek     enum bufferevent_ssl_state state,
91e985b929SDavid van Moolenbroek     int options);
92e985b929SDavid van Moolenbroek 
93e985b929SDavid van Moolenbroek /** Return the underlying openssl SSL * object for an SSL bufferevent. */
94e985b929SDavid van Moolenbroek struct ssl_st *
95e985b929SDavid van Moolenbroek bufferevent_openssl_get_ssl(struct bufferevent *bufev);
96e985b929SDavid van Moolenbroek 
97e985b929SDavid van Moolenbroek /** Tells a bufferevent to begin SSL renegotiation. */
98e985b929SDavid van Moolenbroek int bufferevent_ssl_renegotiate(struct bufferevent *bev);
99e985b929SDavid van Moolenbroek 
100e985b929SDavid van Moolenbroek /** Return the most recent OpenSSL error reported on an SSL bufferevent. */
101e985b929SDavid van Moolenbroek unsigned long bufferevent_get_openssl_error(struct bufferevent *bev);
102e985b929SDavid van Moolenbroek 
103e985b929SDavid van Moolenbroek #endif
104e985b929SDavid van Moolenbroek 
105e985b929SDavid van Moolenbroek #ifdef __cplusplus
106e985b929SDavid van Moolenbroek }
107e985b929SDavid van Moolenbroek #endif
108e985b929SDavid van Moolenbroek 
109e985b929SDavid van Moolenbroek #endif /* _EVENT2_BUFFEREVENT_SSL_H_ */
110