1 --- gnutls-1.3.5/libextra/gnutls_openssl.c.orig 2006-04-28 20:01:40.000000000 +0100
2 +++ gnutls-1.3.5/libextra/gnutls_openssl.c 2006-04-28 20:10:33.000000000 +0100
4 ssl->rfd = (gnutls_transport_ptr_t) - 1;
5 ssl->wfd = (gnutls_transport_ptr_t) - 1;
7 + ssl->ssl_peek_buffer = NULL;
8 + ssl->ssl_peek_buffer_size = ssl->ssl_peek_avail = 0;
16 + if (ssl->ssl_peek_buffer)
17 + free(ssl->ssl_peek_buffer);
18 gnutls_certificate_free_credentials (ssl->gnutls_cred);
19 gnutls_deinit (ssl->gnutls_state);
22 SSL_set_fd (SSL * ssl, int fd)
24 gnutls_transport_set_ptr (ssl->gnutls_state, (gnutls_transport_ptr_t) fd);
25 + ssl->rfd = ssl->wfd = fd;
33 +int SSL_get_rfd(SSL *ssl)
38 +int SSL_get_wfd(SSL *ssl)
45 SSL_set_bio (SSL * ssl, BIO * rbio, BIO * wbio)
49 SSL_pending (SSL * ssl)
51 + if (ssl->ssl_peek_avail)
52 + return ssl->ssl_peek_avail;
53 return gnutls_record_check_pending (ssl->gnutls_state);
60 +int SSL_peek(SSL *ssl, void *buf, int len)
62 + if (len > ssl->ssl_peek_buffer_size) {
63 + ssl->ssl_peek_buffer = realloc (ssl->ssl_peek_buffer, len);
64 + ssl->ssl_peek_buffer_size = len;
67 + if (ssl->ssl_peek_avail == 0) {
71 + ret = gnutls_record_recv(ssl->gnutls_state, ssl->ssl_peek_buffer, len);
72 + ssl->last_error = ret;
75 + ssl->ssl_peek_avail += ret;
78 + if (len > ssl->ssl_peek_avail)
79 + len = ssl->ssl_peek_avail;
81 + memcpy (buf, ssl->ssl_peek_buffer, len);
87 SSL_read (SSL * ssl, void *buf, int len)
91 + if (ssl->ssl_peek_avail) {
92 + int n = (ssl->ssl_peek_avail > len) ? len : ssl->ssl_peek_avail;
94 + memcpy (buf, ssl->ssl_peek_buffer, n);
96 + if (ssl->ssl_peek_avail > n)
97 + memmove (ssl->ssl_peek_buffer, ssl->ssl_peek_buffer + n, ssl->ssl_peek_avail - n);
99 + ssl->ssl_peek_avail -= n;
104 ret = gnutls_record_recv (ssl->gnutls_state, buf, len);
105 ssl->last_error = ret;
107 --- gnutls-1.3.5/includes/gnutls/openssl.h.orig 2006-04-28 20:10:55.000000000 +0100
108 +++ gnutls-1.3.5/includes/gnutls/openssl.h 2006-04-28 20:11:52.000000000 +0100
111 gnutls_transport_ptr_t rfd;
112 gnutls_transport_ptr_t wfd;
114 + char *ssl_peek_buffer;
115 + size_t ssl_peek_buffer_size;
116 + size_t ssl_peek_avail;
120 #define rbio gnutls_state