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