]> pilppa.org Git - familiar-h63xx-build.git/blob - org.handhelds.familiar/packages/gnutls/gnutls-1.0.25/gnutls-openssl.patch
OE tree imported from monotone branch org.openembedded.oz354fam083 at revision 8b12e3...
[familiar-h63xx-build.git] / org.handhelds.familiar / packages / gnutls / gnutls-1.0.25 / gnutls-openssl.patch
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
3 @@ -31,7 +31,6 @@
4  
5  static int last_error = 0;
6  
7 -
8  /* Library initialisation functions */
9  
10  int SSL_library_init(void)
11 @@ -219,12 +218,17 @@
12  
13      ssl->rfd = (gnutls_transport_ptr)-1;
14      ssl->wfd = (gnutls_transport_ptr)-1;
15 +    
16 +    ssl->ssl_peek_buffer = NULL;
17 +    ssl->ssl_peek_buffer_size = ssl->ssl_peek_avail = 0;
18  
19      return ssl;
20  }
21  
22  void SSL_free(SSL *ssl)
23  {
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);
28      free(ssl);
29 @@ -245,6 +249,7 @@
30  int SSL_set_fd(SSL *ssl, int fd)
31  {
32      gnutls_transport_set_ptr (ssl->gnutls_state, (gnutls_transport_ptr)fd);
33 +    ssl->rfd = ssl->wfd = fd;
34      return 1;
35  }
36  
37 @@ -268,6 +273,16 @@
38      return 1;
39  }
40  
41 +int SSL_get_rfd(SSL *ssl)
42 +{
43 +    return ssl->rfd;
44 +}
45 +
46 +int SSL_get_wfd(SSL *ssl)
47 +{
48 +    return ssl->wfd;
49 +}
50 +
51  void SSL_set_bio(SSL *ssl, BIO *rbio, BIO *wbio)
52  {
53      gnutls_transport_set_ptr2 (ssl->gnutls_state, rbio->fd, wbio->fd);
54 @@ -280,6 +295,9 @@
55  
56  int SSL_pending(SSL *ssl)
57  {
58 +    if (ssl->ssl_peek_avail)
59 +       return ssl->ssl_peek_avail;
60 +
61      return gnutls_record_check_pending(ssl->gnutls_state);
62  }
63  
64 @@ -430,10 +448,49 @@
65      return 1;
66  }
67  
68 +int SSL_peek(SSL *ssl, void *buf, int len)
69 +{
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;
73 +    }
74 +    
75 +    if (ssl->ssl_peek_avail == 0) {
76 +
77 +       int ret;
78 +
79 +       ret = gnutls_record_recv(ssl->gnutls_state, ssl->ssl_peek_buffer, len);
80 +       ssl->last_error = ret;
81 +
82 +       if (ret > 0)
83 +           ssl->ssl_peek_avail += ret;
84 +    }
85 +
86 +    if (len > ssl->ssl_peek_avail)
87 +       len = ssl->ssl_peek_avail;
88 +
89 +    memcpy (buf, ssl->ssl_peek_buffer, len);
90 +
91 +    return len;
92 +}
93 +
94  int SSL_read(SSL *ssl, void *buf, int len)
95  {
96      int ret;
97  
98 +    if (ssl->ssl_peek_avail) {
99 +       int n = (ssl->ssl_peek_avail > len) ? len : ssl->ssl_peek_avail;
100 +
101 +       memcpy (buf, ssl->ssl_peek_buffer, n);
102 +       
103 +       if (ssl->ssl_peek_avail > n)
104 +           memmove (ssl->ssl_peek_buffer, ssl->ssl_peek_buffer + n, ssl->ssl_peek_avail - n);
105 +
106 +       ssl->ssl_peek_avail -= n;
107 +
108 +       return n;
109 +    }
110 +
111      ret = gnutls_record_recv(ssl->gnutls_state, buf, len);
112      ssl->last_error = ret;
113  
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
116 @@ -139,6 +139,10 @@
117      
118      gnutls_transport_ptr rfd;
119      gnutls_transport_ptr wfd;
120 +
121 +    char *ssl_peek_buffer;
122 +    size_t ssl_peek_buffer_size;
123 +    size_t ssl_peek_avail;
124  } SSL;
125  
126  typedef struct