ekg2
 All Struktury Danych Pliki Funkcje Zmienne Definicje typów Wyliczenia Wartości wyliczeń Definicje Grupay Strony
jabber-ssl.h
Idź do dokumentacji tego pliku.
1 #ifndef __EKG_JABBER_SSL_H
2 #define __EKG_JABBER_SSL_H
3 
4 #include <ekg2-config.h>
5 
6 #ifdef JABBER_HAVE_GNUTLS
7 # define JABBER_HAVE_SSL 1
8 # undef JABBER_HAVE_OPENSSL /* na wszelki wypadek */
9 #else
10 #ifdef JABBER_HAVE_OPENSSL
11 # define JABBER_HAVE_SSL 1
12 # 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"
13 #endif
14 #endif
15 
16 #ifdef JABBER_HAVE_SSL
17 
18 #ifdef JABBER_HAVE_GNUTLS /* HAVE_GNUTLS */
19 # include <gnutls/gnutls.h>
20 
21 
22 # define SSL_SESSION gnutls_session
23 
24 static int __attribute__((unused)) SSL_SET_FD(SSL_SESSION session, long int fd) {
25  gnutls_transport_set_ptr(session, (gnutls_transport_ptr)(fd));
26  return 1; /* always success */
27 }
28 
29 # define SSL_INIT(session) gnutls_init((&session), GNUTLS_CLIENT)
30 # define SSL_DEINIT(session) gnutls_deinit(session)
31 # define SSL_HELLO(session) gnutls_handshake(session)
32 # define SSL_BYE(session) gnutls_bye(session, GNUTLS_SHUT_RDWR)
33 # define SSL_GLOBAL_INIT() gnutls_global_init()
34 # define SSL_GLOBAL_DEINIT() gnutls_global_deinit()
35 # define SSL_ERROR(retcode) gnutls_strerror(retcode)
36 # define SSL_E_AGAIN(ret) ((ret == GNUTLS_E_INTERRUPTED) || (ret == GNUTLS_E_AGAIN))
37 
38 # define SSL_SEND(session, str, len) gnutls_record_send(session, str, len)
39 # define SSL_RECV(session, buf, size) gnutls_record_recv(session, buf, size)
40 
41 # define SSL_GET_FD(session, fd) (long int) gnutls_transport_get_ptr(session)
42 # define SSL_WRITE_DIRECTION(session, ret) gnutls_record_get_direction(session)
43 
44 #else /* HAVE_OPENSSL */
45 # include <openssl/ssl.h>
46 # include <openssl/err.h>
47 
48 extern SSL_CTX *jabberSslCtx; /* jabber.c */
49 
50 # define SSL_SESSION SSL *
51 
52 # define SSL_INIT(session) !(session = SSL_new(jabberSslCtx))
53 
54 # define SSL_HELLO(session) SSL_connect(session)
55 # define SSL_BYE(session) SSL_shutdown(session)
56 # define SSL_DEINIT(session) SSL_free(session)
57 # define SSL_GLOBAL_INIT() SSL_library_init(); jabberSslCtx = SSL_CTX_new(SSLv23_client_method())
58 # define SSL_GLOBAL_DEINIT() SSL_CTX_free(jabberSslCtx)
59 # define SSL_ERROR(retcode) ERR_error_string(retcode, NULL) /* retcode need be value from SSL_get_error(session, res) */
60 # define SSL_E_AGAIN(ret) ((ret == SSL_ERROR_WANT_READ || ret == SSL_ERROR_WANT_WRITE))
61 
62 # define SSL_SEND(session, str, len) SSL_write(session, str, len)
63 # define SSL_RECV(session, buf, size) SSL_read(session, buf, size)
64 
65 # define SSL_SET_FD(session, fd) SSL_set_fd(session, fd)
66 # define SSL_GET_FD(session, fd) fd
67 # define SSL_WRITE_DIRECTION(session, ret) (ret != SSL_ERROR_WANT_READ)
68 
69 #endif /* ... */
70 
71 #endif /* JABBER_HAVE_SSL */
72 #endif /* __EKG_JABBER_SSL_H */
73