Merge branch 'org.openembedded.dev' of git://git.openembedded.net/openembedded into...
[vuplus_openembedded] / packages / gnutls / gnutls-2.4.2 / gnutls-openssl.patch
1 Index: gnutls-1.6.0/libextra/gnutls_openssl.c
2 ===================================================================
3 --- gnutls-1.6.0.orig/libextra/gnutls_openssl.c 2006-08-13 22:34:09.000000000 +0200
4 +++ gnutls-1.6.0/libextra/gnutls_openssl.c      2006-12-12 15:07:59.002227000 +0100
5 @@ -256,12 +256,17 @@
6    ssl->rfd = (gnutls_transport_ptr_t) - 1;
7    ssl->wfd = (gnutls_transport_ptr_t) - 1;
8  
9 +  ssl->ssl_peek_buffer = NULL;
10 +  ssl->ssl_peek_buffer_size = ssl->ssl_peek_avail = 0;
11 +
12    return ssl;
13  }
14  
15  void
16  SSL_free (SSL * ssl)
17  {
18 +  if (ssl->ssl_peek_buffer)
19 +    free(ssl->ssl_peek_buffer);
20    gnutls_certificate_free_credentials (ssl->gnutls_cred);
21    gnutls_deinit (ssl->gnutls_state);
22    free (ssl);
23 @@ -285,6 +290,7 @@
24  SSL_set_fd (SSL * ssl, int fd)
25  {
26    gnutls_transport_set_ptr (ssl->gnutls_state, GNUTLS_INT_TO_POINTER (fd));
27 +  ssl->rfd = ssl->wfd = fd;
28    return 1;
29  }
30  
31 @@ -310,6 +316,17 @@
32    return 1;
33  }
34  
35 +int SSL_get_rfd(SSL *ssl)
36 +{
37 +  return ssl->rfd;
38 +}
39 +
40 +int SSL_get_wfd(SSL *ssl)
41 +{
42 +  return ssl->wfd;
43 +}
44 +
45 +
46  void
47  SSL_set_bio (SSL * ssl, BIO * rbio, BIO * wbio)
48  {
49 @@ -325,6 +342,8 @@
50  int
51  SSL_pending (SSL * ssl)
52  {
53 +  if (ssl->ssl_peek_avail)
54 +    return ssl->ssl_peek_avail;
55    return gnutls_record_check_pending (ssl->gnutls_state);
56  }
57  
58 @@ -480,11 +499,50 @@
59    return 1;
60  }
61  
62 +int SSL_peek(SSL *ssl, void *buf, int len)
63 +{
64 +  if (len > ssl->ssl_peek_buffer_size) {
65 +    ssl->ssl_peek_buffer = realloc (ssl->ssl_peek_buffer, len);
66 +    ssl->ssl_peek_buffer_size = len;
67 +  }
68 +
69 +  if (ssl->ssl_peek_avail == 0) {
70 +
71 +    int ret;
72 +    
73 +    ret = gnutls_record_recv(ssl->gnutls_state, ssl->ssl_peek_buffer, len);
74 +    ssl->last_error = ret;
75 +    
76 +    if (ret > 0)
77 +      ssl->ssl_peek_avail += ret;
78 +  }
79 +
80 +  if (len > ssl->ssl_peek_avail)
81 +    len = ssl->ssl_peek_avail;
82 +
83 +  memcpy (buf, ssl->ssl_peek_buffer, len);
84 +
85 +  return len;
86 +}
87 +
88  int
89  SSL_read (SSL * ssl, void *buf, int len)
90  {
91    int ret;
92  
93 +  if (ssl->ssl_peek_avail) {
94 +    int n = (ssl->ssl_peek_avail > len) ? len : ssl->ssl_peek_avail;
95 +
96 +    memcpy (buf, ssl->ssl_peek_buffer, n);
97 +
98 +    if (ssl->ssl_peek_avail > n)
99 +      memmove (ssl->ssl_peek_buffer, ssl->ssl_peek_buffer + n, ssl->ssl_peek_avail - n);
100 +
101 +    ssl->ssl_peek_avail -= n;
102 +
103 +    return n;
104 +  }
105 +
106    ret = gnutls_record_recv (ssl->gnutls_state, buf, len);
107    ssl->last_error = ret;
108  
109 Index: gnutls-1.6.0/includes/gnutls/openssl.h
110 ===================================================================
111 --- gnutls-1.6.0.orig/includes/gnutls/openssl.h 2006-03-08 11:44:58.000000000 +0100
112 +++ gnutls-1.6.0/includes/gnutls/openssl.h      2006-12-12 15:07:26.032227000 +0100
113 @@ -164,6 +164,11 @@
114  
115      gnutls_transport_ptr_t rfd;
116      gnutls_transport_ptr_t wfd;
117 +
118 +    char *ssl_peek_buffer;
119 +    size_t ssl_peek_buffer_size;
120 +    size_t ssl_peek_avail;
121 +
122    };
123  
124  #define rbio gnutls_state