]> pilppa.org Git - familiar-h63xx-build.git/blob - org.handhelds.familiar/packages/libetpan/libetpan-0.36/gnutls.patch
OE tree imported from monotone branch org.openembedded.oz354fam083 at revision 8b12e3...
[familiar-h63xx-build.git] / org.handhelds.familiar / packages / libetpan / libetpan-0.36 / gnutls.patch
1
2 #
3 # Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
4 #
5
6 --- libetpan/src/Makefile.in~gnutls     2005-03-10 10:11:30.000000000 +0100
7 +++ libetpan/src/Makefile.in    2005-03-11 21:43:10.975597607 +0100
8 @@ -15,7 +15,7 @@
9  
10  VERSINFO    = @API_VERSION@
11  CC          = @CC@
12 -LDFLAGS     = @LIBS@ @SSLLIBS@ @LDFLAGS@ @DBLIB@
13 +LDFLAGS     = @LIBS@ @SSLLIBS@ @LDFLAGS@ @DBLIB@ @GNUTLSLIBS@
14  
15  SUBLIBS = data-types/libdata-types.la \
16         low-level/liblow-level.la \
17 --- libetpan/src/data-types/mailstream_ssl.c~gnutls     2005-03-10 10:11:30.000000000 +0100
18 +++ libetpan/src/data-types/mailstream_ssl.c    2005-03-11 21:44:56.373673788 +0100
19 @@ -61,7 +61,12 @@
20  /* mailstream_low, ssl */
21  
22  #ifdef USE_SSL
23 +#ifndef USE_GNUTLS
24  #include <openssl/ssl.h>
25 +#else
26 +#include <errno.h>
27 +#include <gnutls/openssl.h>
28 +#endif
29  #ifdef LIBETPAN_REENTRANT
30  #include <pthread.h>
31  #endif
32 @@ -85,9 +90,9 @@
33  #ifdef USE_SSL
34  static int mailstream_low_ssl_close(mailstream_low * s);
35  static ssize_t mailstream_low_ssl_read(mailstream_low * s,
36 -                                      void * buf, size_t count);
37 +                       void * buf, size_t count);
38  static ssize_t mailstream_low_ssl_write(mailstream_low * s,
39 -                                       const void * buf, size_t count);
40 +                    const void * buf, size_t count);
41  static void mailstream_low_ssl_free(mailstream_low * s);
42  static int mailstream_low_ssl_get_fd(mailstream_low * s);
43  
44 @@ -113,10 +118,10 @@
45    SSL_CTX * tmp_ctx;
46    int fd_flags;
47    int old_fd_flags;
48 -  
49 +
50  #ifdef LIBETPAN_REENTRANT
51    pthread_mutex_lock(&ssl_lock);
52 -#endif  
53 +#endif
54    if (!ssl_init_done) {
55      SSL_library_init();
56      ssl_init_done = 1;
57 @@ -124,35 +129,37 @@
58  #ifdef LIBETPAN_REENTRANT
59    pthread_mutex_unlock(&ssl_lock);
60  #endif
61 -  
62 +
63    tmp_ctx = SSL_CTX_new(TLSv1_client_method());
64    if (tmp_ctx == NULL)
65      goto err;
66 -  
67 +
68    ssl_conn = (SSL *) SSL_new(tmp_ctx);
69    if (ssl_conn == NULL)
70      goto free_ctx;
71 -  
72 +
73    if (SSL_set_fd(ssl_conn, fd) == 0)
74      goto free_ssl_conn;
75 -  
76 +
77 +#ifndef USE_GNUTLS
78    SSL_set_read_ahead(ssl_conn, 1);
79 -  
80 +#endif
81 +
82    r = SSL_connect(ssl_conn);
83    if (r <= 0)
84      goto free_ssl_conn;
85 -  
86 +
87    fd_flags = fcntl(fd, F_GETFL, 0);
88    old_fd_flags = fd_flags;
89    fd_flags |= O_NDELAY;
90    r = fcntl(fd, F_SETFL, fd_flags);
91    if (r < 0)
92      goto free_ssl_conn;
93 -  
94 +
95    ssl_data = malloc(sizeof(* ssl_data));
96    if (ssl_data == NULL)
97      goto reset_fd_flags;
98 -  
99 +
100    ssl_data->fd = fd;
101    ssl_data->ssl_conn = ssl_conn;
102    ssl_data->ssl_ctx = tmp_ctx;
103 @@ -241,52 +248,101 @@
104  }
105  
106  static ssize_t mailstream_low_ssl_read(mailstream_low * s,
107 -                                      void * buf, size_t count)
108 +                       void * buf, size_t count)
109  {
110    struct mailstream_ssl_data * ssl_data;
111    int r;
112  
113    ssl_data = (struct mailstream_ssl_data *) s->data;
114 -  
115 +
116    while (1) {
117      int ssl_r;
118      fd_set fds_read;
119 +#ifndef USE_GNUTLS
120      struct timeval timeout;
121 -    
122 +#else
123 +    fd_set fds_excp;
124 +
125 +    {
126 +        struct timeval timeout2;
127 +        timeout2 = mailstream_network_delay;
128 +
129 +        FD_ZERO(&fds_read);
130 +        FD_SET(ssl_data->fd, &fds_read);
131 +        FD_ZERO(&fds_excp);
132 +        FD_SET(ssl_data->fd, &fds_excp);
133 +        r = select(ssl_data->fd + 1, &fds_read, NULL, &fds_excp, &timeout2);
134 +        if (r==0) {
135 +            return -1;
136 +        }
137 +        if (FD_ISSET(ssl_data->fd, &fds_excp))
138 +            return -1;
139 +        if (!FD_ISSET(ssl_data->fd, &fds_read))
140 +            return 0;
141 +    }
142 +#endif
143      r = SSL_read(ssl_data->ssl_conn, buf, count);
144 -    if (r > 0)
145 +    if (r > 0) {
146        return r;
147 -    
148 +    }
149 +#ifdef USE_GNUTLS
150 +    if (errno!=EAGAIN&&errno!=EWOULDBLOCK) {
151 +        return r;
152 +    }
153 +#else
154      ssl_r = SSL_get_error(ssl_data->ssl_conn, r);
155      switch (ssl_r) {
156      case SSL_ERROR_NONE:
157        return r;
158 -      
159 +
160      case SSL_ERROR_ZERO_RETURN:
161        return r;
162 -      
163 +
164      case SSL_ERROR_WANT_READ:
165        timeout = mailstream_network_delay;
166 -      
167 +
168        FD_ZERO(&fds_read);
169        FD_SET(ssl_data->fd, &fds_read);
170        r = select(ssl_data->fd + 1, &fds_read, NULL, NULL, &timeout);
171        if (r == 0)
172          return -1;
173        break;
174 -      
175 +
176      default:
177        return r;
178      }
179 +#endif
180    }
181  }
182  
183  static ssize_t mailstream_low_ssl_write(mailstream_low * s,
184 -                                       const void * buf, size_t count)
185 +                    const void * buf, size_t count)
186  {
187    struct mailstream_ssl_data * ssl_data;
188  
189    ssl_data = (struct mailstream_ssl_data *) s->data;
190 +#ifdef USE_GNUTLS
191 +  {
192 +    fd_set fds_write;
193 +    fd_set fds_excp;
194 +    struct timeval timeout;
195 +    int r;
196 +
197 +    timeout = mailstream_network_delay;
198 +
199 +    FD_ZERO(&fds_write);
200 +    FD_SET(ssl_data->fd, &fds_write);
201 +    FD_ZERO(&fds_excp);
202 +    FD_SET(ssl_data->fd, &fds_excp);
203 +    r = select(ssl_data->fd + 1, NULL, &fds_write, &fds_excp, &timeout);
204 +    if (r == 0)
205 +      return -1;
206 +    if (FD_ISSET(ssl_data->fd, &fds_excp))
207 +      return -1;
208 +    if (!FD_ISSET(ssl_data->fd, &fds_write))
209 +      return 0;
210 +  }
211 +#endif
212    return SSL_write(ssl_data->ssl_conn, buf, count);
213  }
214  #endif