ekg2
|
00001 #ifndef __EKG_JABBER_SSL_H 00002 #define __EKG_JABBER_SSL_H 00003 00004 #include <ekg2-config.h> 00005 00006 #ifdef JABBER_HAVE_GNUTLS 00007 # define JABBER_HAVE_SSL 1 00008 # undef JABBER_HAVE_OPENSSL /* na wszelki wypadek */ 00009 #else 00010 #ifdef JABBER_HAVE_OPENSSL 00011 # define JABBER_HAVE_SSL 1 00012 # warning "You want to use OpenSSL library as ssl transport layer for jabber, it have bugs and is not well tested.. It's better if you use gnutls" 00013 #endif 00014 #endif 00015 00016 #ifdef JABBER_HAVE_SSL 00017 00018 #ifdef JABBER_HAVE_GNUTLS /* HAVE_GNUTLS */ 00019 # include <gnutls/gnutls.h> 00020 00021 00022 # define SSL_SESSION gnutls_session 00023 00024 static int __attribute__((unused)) SSL_SET_FD(SSL_SESSION session, long int fd) { 00025 gnutls_transport_set_ptr(session, (gnutls_transport_ptr)(fd)); 00026 return 1; /* always success */ 00027 } 00028 00029 # define SSL_INIT(session) gnutls_init((&session), GNUTLS_CLIENT) 00030 # define SSL_DEINIT(session) gnutls_deinit(session) 00031 # define SSL_HELLO(session) gnutls_handshake(session) 00032 # define SSL_BYE(session) gnutls_bye(session, GNUTLS_SHUT_RDWR) 00033 # define SSL_GLOBAL_INIT() gnutls_global_init() 00034 # define SSL_GLOBAL_DEINIT() gnutls_global_deinit() 00035 # define SSL_ERROR(retcode) gnutls_strerror(retcode) 00036 # define SSL_E_AGAIN(ret) ((ret == GNUTLS_E_INTERRUPTED) || (ret == GNUTLS_E_AGAIN)) 00037 00038 # define SSL_SEND(session, str, len) gnutls_record_send(session, str, len) 00039 # define SSL_RECV(session, buf, size) gnutls_record_recv(session, buf, size) 00040 00041 # define SSL_GET_FD(session, fd) (long int) gnutls_transport_get_ptr(session) 00042 # define SSL_WRITE_DIRECTION(session, ret) gnutls_record_get_direction(session) 00043 00044 #else /* HAVE_OPENSSL */ 00045 # include <openssl/ssl.h> 00046 # include <openssl/err.h> 00047 00048 extern SSL_CTX *jabberSslCtx; /* jabber.c */ 00049 00050 # define SSL_SESSION SSL * 00051 00052 # define SSL_INIT(session) !(session = SSL_new(jabberSslCtx)) 00053 00054 # define SSL_HELLO(session) SSL_connect(session) 00055 # define SSL_BYE(session) SSL_shutdown(session) 00056 # define SSL_DEINIT(session) SSL_free(session) 00057 # define SSL_GLOBAL_INIT() SSL_library_init(); jabberSslCtx = SSL_CTX_new(SSLv23_client_method()) 00058 # define SSL_GLOBAL_DEINIT() SSL_CTX_free(jabberSslCtx) 00059 # define SSL_ERROR(retcode) ERR_error_string(retcode, NULL) /* retcode need be value from SSL_get_error(session, res) */ 00060 # define SSL_E_AGAIN(ret) ((ret == SSL_ERROR_WANT_READ || ret == SSL_ERROR_WANT_WRITE)) 00061 00062 # define SSL_SEND(session, str, len) SSL_write(session, str, len) 00063 # define SSL_RECV(session, buf, size) SSL_read(session, buf, size) 00064 00065 # define SSL_SET_FD(session, fd) SSL_set_fd(session, fd) 00066 # define SSL_GET_FD(session, fd) fd 00067 # define SSL_WRITE_DIRECTION(session, ret) (ret != SSL_ERROR_WANT_READ) 00068 00069 #endif /* ... */ 00070 00071 #endif /* JABBER_HAVE_SSL */ 00072 #endif /* __EKG_JABBER_SSL_H */ 00073