1 --- clean/gnutls-1.0.23/libextra/gnutls_openssl.c 2004-08-04 22:36:03.000000000 +0100
2 +++ gnutls-1.0.23/libextra/gnutls_openssl.c 2005-01-02 19:50:49.000000000 +0000
5 static int last_error = 0;
8 /* Library initialisation functions */
10 int SSL_library_init(void)
13 ssl->rfd = (gnutls_transport_ptr)-1;
14 ssl->wfd = (gnutls_transport_ptr)-1;
16 + ssl->ssl_peek_buffer = NULL;
17 + ssl->ssl_peek_buffer_size = ssl->ssl_peek_avail = 0;
22 void SSL_free(SSL *ssl)
24 + if (ssl->ssl_peek_buffer)
25 + free(ssl->ssl_peek_buffer);
26 gnutls_certificate_free_credentials(ssl->gnutls_cred);
27 gnutls_deinit(ssl->gnutls_state);
30 int SSL_set_fd(SSL *ssl, int fd)
32 gnutls_transport_set_ptr (ssl->gnutls_state, (gnutls_transport_ptr)fd);
33 + ssl->rfd = ssl->wfd = fd;
41 +int SSL_get_rfd(SSL *ssl)
46 +int SSL_get_wfd(SSL *ssl)
51 void SSL_set_bio(SSL *ssl, BIO *rbio, BIO *wbio)
53 gnutls_transport_set_ptr2 (ssl->gnutls_state, rbio->fd, wbio->fd);
56 int SSL_pending(SSL *ssl)
58 + if (ssl->ssl_peek_avail)
59 + return ssl->ssl_peek_avail;
61 return gnutls_record_check_pending(ssl->gnutls_state);
68 +int SSL_peek(SSL *ssl, void *buf, int len)
70 + if (len > ssl->ssl_peek_buffer_size) {
71 + ssl->ssl_peek_buffer = realloc (ssl->ssl_peek_buffer, len);
72 + ssl->ssl_peek_buffer_size = len;
75 + if (ssl->ssl_peek_avail == 0) {
79 + ret = gnutls_record_recv(ssl->gnutls_state, ssl->ssl_peek_buffer, len);
80 + ssl->last_error = ret;
83 + ssl->ssl_peek_avail += ret;
86 + if (len > ssl->ssl_peek_avail)
87 + len = ssl->ssl_peek_avail;
89 + memcpy (buf, ssl->ssl_peek_buffer, len);
94 int SSL_read(SSL *ssl, void *buf, int len)
98 + if (ssl->ssl_peek_avail) {
99 + int n = (ssl->ssl_peek_avail > len) ? len : ssl->ssl_peek_avail;
101 + memcpy (buf, ssl->ssl_peek_buffer, n);
103 + if (ssl->ssl_peek_avail > n)
104 + memmove (ssl->ssl_peek_buffer, ssl->ssl_peek_buffer + n, ssl->ssl_peek_avail - n);
106 + ssl->ssl_peek_avail -= n;
111 ret = gnutls_record_recv(ssl->gnutls_state, buf, len);
112 ssl->last_error = ret;
114 --- clean/gnutls-1.0.23/includes/gnutls/openssl.h 2004-08-04 22:36:02.000000000 +0100
115 +++ gnutls-1.0.23/includes/gnutls/openssl.h 2005-01-02 19:48:35.000000000 +0000
118 gnutls_transport_ptr rfd;
119 gnutls_transport_ptr wfd;
121 + char *ssl_peek_buffer;
122 + size_t ssl_peek_buffer_size;
123 + size_t ssl_peek_avail;