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