2 * @brief Declarations for ssl handler.
7 #include "ircd_osdep.h"
20 /** Declare flagset type for ssl flags. */
21 DECLARE_FLAGSET(SSLFlags, SSLFLAG_LAST);
27 #if defined(HAVE_GNUTLS_GNUTLS_H)
28 #include <gnutls/gnutls.h>
30 struct SSLConnection {
31 struct SSLFlags flags;
32 gnutls_session_t session;
33 gnutls_certificate_client_credentials credentials;
37 struct SSLFlags flags;
38 gnutls_priority_t priority;
39 gnutls_certificate_credentials_t credentials;
42 #elif defined(HAVE_OPENSSL_SSL_H)
43 #include <openssl/rand.h>
44 #include <openssl/ssl.h>
45 #include <openssl/err.h>
47 struct SSLConnection {
48 struct SSLFlags flags;
52 struct SSLOutConnection {
53 struct SSLFlags flags;
59 struct SSLFlags flags;
67 struct SSLConnection {
68 struct SSLFlags flags;
73 struct SSLFlags flags;
78 #define ssl_handshake(x) (FlagHas(&(x)->flags, SSLFLAG_HANDSHAKE))
79 #define ssl_wantwrite(x) (FlagHas(&(x)->flags, SSLFLAG_HANDSHAKE_W))
80 #define ssl_wantread(x) (FlagHas(&(x)->flags, SSLFLAG_HANDSHAKE_R))
83 extern void ssl_free_connection(struct SSLConnection *connection);
84 extern void ssl_free_listener(struct SSLListener *listener);
86 extern struct SSLListener *ssl_create_listener();
87 extern struct SSLConnection *ssl_create_connect(int fd, void *data, enum SSLDataType datatype);
89 extern struct SSLConnection *ssl_start_handshake_listener(struct SSLListener *listener, int fd, void *data, enum SSLDataType datatype);
90 extern void ssl_start_handshake_connect(struct SSLConnection *connection);
92 IOResult ssl_recv_decrypt(struct SSLConnection *connection, char *buf, unsigned int buflen, unsigned int *len);
93 IOResult ssl_send_encrypt(struct SSLConnection *connection, struct MsgQ* buf, unsigned int *count_in, unsigned int *count_out);
94 IOResult ssl_send_encrypt_plain(struct SSLConnection *connection, char *buf, int len);
95 extern int ssl_connection_flush(struct SSLConnection *connection);
97 extern const char* ssl_get_cipher(struct SSLConnection *connection);
99 #endif /* INCLUDED_parse_h */