summaryrefslogtreecommitdiff
path: root/src/lib/libssl/d1_lib.c
diff options
context:
space:
mode:
authorjsing <>2014-04-14 14:16:33 +0000
committerjsing <>2014-04-14 14:16:33 +0000
commit95692a60ee0169e369d59f82504e36ff376e13ba (patch)
treed3a4c41549109f6de6427907f10589c02eec0d25 /src/lib/libssl/d1_lib.c
parent72c1bd17672378115dcd5254ed88828e45357e7f (diff)
downloadopenbsd-95692a60ee0169e369d59f82504e36ff376e13ba.tar.gz
openbsd-95692a60ee0169e369d59f82504e36ff376e13ba.tar.bz2
openbsd-95692a60ee0169e369d59f82504e36ff376e13ba.zip
First pass at applying KNF to the OpenSSL code, which almost makes it
readable. This pass is whitespace only and can readily be verified using tr and md5.
Diffstat (limited to 'src/lib/libssl/d1_lib.c')
-rw-r--r--src/lib/libssl/d1_lib.c364
1 files changed, 180 insertions, 184 deletions
diff --git a/src/lib/libssl/d1_lib.c b/src/lib/libssl/d1_lib.c
index 750f83e04a..3da7c36545 100644
--- a/src/lib/libssl/d1_lib.c
+++ b/src/lib/libssl/d1_lib.c
@@ -70,8 +70,8 @@ static void get_current_time(struct timeval *t);
70const char dtls1_version_str[]="DTLSv1" OPENSSL_VERSION_PTEXT; 70const char dtls1_version_str[]="DTLSv1" OPENSSL_VERSION_PTEXT;
71int dtls1_listen(SSL *s, struct sockaddr *client); 71int dtls1_listen(SSL *s, struct sockaddr *client);
72 72
73SSL3_ENC_METHOD DTLSv1_enc_data={ 73SSL3_ENC_METHOD DTLSv1_enc_data = {
74 dtls1_enc, 74 dtls1_enc,
75 tls1_mac, 75 tls1_mac,
76 tls1_setup_key_block, 76 tls1_setup_key_block,
77 tls1_generate_master_secret, 77 tls1_generate_master_secret,
@@ -79,137 +79,139 @@ SSL3_ENC_METHOD DTLSv1_enc_data={
79 tls1_final_finish_mac, 79 tls1_final_finish_mac,
80 TLS1_FINISH_MAC_LENGTH, 80 TLS1_FINISH_MAC_LENGTH,
81 tls1_cert_verify_mac, 81 tls1_cert_verify_mac,
82 TLS_MD_CLIENT_FINISH_CONST,TLS_MD_CLIENT_FINISH_CONST_SIZE, 82 TLS_MD_CLIENT_FINISH_CONST, TLS_MD_CLIENT_FINISH_CONST_SIZE,
83 TLS_MD_SERVER_FINISH_CONST,TLS_MD_SERVER_FINISH_CONST_SIZE, 83 TLS_MD_SERVER_FINISH_CONST, TLS_MD_SERVER_FINISH_CONST_SIZE,
84 tls1_alert_code, 84 tls1_alert_code,
85 tls1_export_keying_material, 85 tls1_export_keying_material,
86 }; 86};
87 87
88long dtls1_default_timeout(void) 88long
89 { 89dtls1_default_timeout(void)
90{
90 /* 2 hours, the 24 hours mentioned in the DTLSv1 spec 91 /* 2 hours, the 24 hours mentioned in the DTLSv1 spec
91 * is way too long for http, the cache would over fill */ 92 * is way too long for http, the cache would over fill */
92 return(60*60*2); 93 return (60*60*2);
93 } 94}
94 95
95int dtls1_new(SSL *s) 96int
96 { 97dtls1_new(SSL *s)
98{
97 DTLS1_STATE *d1; 99 DTLS1_STATE *d1;
98 100
99 if (!ssl3_new(s)) return(0); 101 if (!ssl3_new(s))
100 if ((d1=OPENSSL_malloc(sizeof *d1)) == NULL) return (0); 102 return (0);
101 memset(d1,0, sizeof *d1); 103 if ((d1 = OPENSSL_malloc(sizeof *d1)) == NULL) return (0);
104 memset(d1, 0, sizeof *d1);
102 105
103 /* d1->handshake_epoch=0; */ 106 /* d1->handshake_epoch=0; */
104 107
105 d1->unprocessed_rcds.q=pqueue_new(); 108 d1->unprocessed_rcds.q = pqueue_new();
106 d1->processed_rcds.q=pqueue_new(); 109 d1->processed_rcds.q = pqueue_new();
107 d1->buffered_messages = pqueue_new(); 110 d1->buffered_messages = pqueue_new();
108 d1->sent_messages=pqueue_new(); 111 d1->sent_messages = pqueue_new();
109 d1->buffered_app_data.q=pqueue_new(); 112 d1->buffered_app_data.q = pqueue_new();
110 113
111 if ( s->server) 114 if (s->server) {
112 {
113 d1->cookie_len = sizeof(s->d1->cookie); 115 d1->cookie_len = sizeof(s->d1->cookie);
114 } 116 }
115 117
116 if( ! d1->unprocessed_rcds.q || ! d1->processed_rcds.q 118 if (!d1->unprocessed_rcds.q || !d1->processed_rcds.q ||
117 || ! d1->buffered_messages || ! d1->sent_messages || ! d1->buffered_app_data.q) 119 !d1->buffered_messages || !d1->sent_messages ||
118 { 120 !d1->buffered_app_data.q) {
119 if ( d1->unprocessed_rcds.q) pqueue_free(d1->unprocessed_rcds.q); 121 if (d1->unprocessed_rcds.q)
120 if ( d1->processed_rcds.q) pqueue_free(d1->processed_rcds.q); 122 pqueue_free(d1->unprocessed_rcds.q);
121 if ( d1->buffered_messages) pqueue_free(d1->buffered_messages); 123 if (d1->processed_rcds.q)
122 if ( d1->sent_messages) pqueue_free(d1->sent_messages); 124 pqueue_free(d1->processed_rcds.q);
123 if ( d1->buffered_app_data.q) pqueue_free(d1->buffered_app_data.q); 125 if (d1->buffered_messages)
126 pqueue_free(d1->buffered_messages);
127 if (d1->sent_messages)
128 pqueue_free(d1->sent_messages);
129 if (d1->buffered_app_data.q)
130 pqueue_free(d1->buffered_app_data.q);
124 OPENSSL_free(d1); 131 OPENSSL_free(d1);
125 return (0); 132 return (0);
126 } 133 }
127 134
128 s->d1=d1; 135 s->d1 = d1;
129 s->method->ssl_clear(s); 136 s->method->ssl_clear(s);
130 return(1); 137 return (1);
131 } 138}
132 139
133static void dtls1_clear_queues(SSL *s) 140static void
134 { 141dtls1_clear_queues(SSL *s)
135 pitem *item = NULL; 142{
136 hm_fragment *frag = NULL; 143 pitem *item = NULL;
144 hm_fragment *frag = NULL;
137 DTLS1_RECORD_DATA *rdata; 145 DTLS1_RECORD_DATA *rdata;
138 146
139 while( (item = pqueue_pop(s->d1->unprocessed_rcds.q)) != NULL) 147 while ((item = pqueue_pop(s->d1->unprocessed_rcds.q)) != NULL) {
140 {
141 rdata = (DTLS1_RECORD_DATA *) item->data; 148 rdata = (DTLS1_RECORD_DATA *) item->data;
142 if (rdata->rbuf.buf) 149 if (rdata->rbuf.buf) {
143 {
144 OPENSSL_free(rdata->rbuf.buf); 150 OPENSSL_free(rdata->rbuf.buf);
145 } 151 }
146 OPENSSL_free(item->data); 152 OPENSSL_free(item->data);
147 pitem_free(item); 153 pitem_free(item);
148 } 154 }
149 155
150 while( (item = pqueue_pop(s->d1->processed_rcds.q)) != NULL) 156 while ((item = pqueue_pop(s->d1->processed_rcds.q)) != NULL) {
151 {
152 rdata = (DTLS1_RECORD_DATA *) item->data; 157 rdata = (DTLS1_RECORD_DATA *) item->data;
153 if (rdata->rbuf.buf) 158 if (rdata->rbuf.buf) {
154 {
155 OPENSSL_free(rdata->rbuf.buf); 159 OPENSSL_free(rdata->rbuf.buf);
156 } 160 }
157 OPENSSL_free(item->data); 161 OPENSSL_free(item->data);
158 pitem_free(item); 162 pitem_free(item);
159 } 163 }
160 164
161 while( (item = pqueue_pop(s->d1->buffered_messages)) != NULL) 165 while ((item = pqueue_pop(s->d1->buffered_messages)) != NULL) {
162 {
163 frag = (hm_fragment *)item->data;
164 OPENSSL_free(frag->fragment);
165 OPENSSL_free(frag);
166 pitem_free(item);
167 }
168
169 while ( (item = pqueue_pop(s->d1->sent_messages)) != NULL)
170 {
171 frag = (hm_fragment *)item->data;
172 OPENSSL_free(frag->fragment);
173 OPENSSL_free(frag);
174 pitem_free(item);
175 }
176
177 while ( (item = pqueue_pop(s->d1->buffered_app_data.q)) != NULL)
178 {
179 frag = (hm_fragment *)item->data; 166 frag = (hm_fragment *)item->data;
180 OPENSSL_free(frag->fragment); 167 OPENSSL_free(frag->fragment);
181 OPENSSL_free(frag); 168 OPENSSL_free(frag);
182 pitem_free(item); 169 pitem_free(item);
183 }
184 } 170 }
185 171
186void dtls1_free(SSL *s) 172 while ((item = pqueue_pop(s->d1->sent_messages)) != NULL) {
187 { 173 frag = (hm_fragment *)item->data;
174 OPENSSL_free(frag->fragment);
175 OPENSSL_free(frag);
176 pitem_free(item);
177 }
178
179 while ((item = pqueue_pop(s->d1->buffered_app_data.q)) != NULL) {
180 frag = (hm_fragment *)item->data;
181 OPENSSL_free(frag->fragment);
182 OPENSSL_free(frag);
183 pitem_free(item);
184 }
185}
186
187void
188dtls1_free(SSL *s)
189{
188 ssl3_free(s); 190 ssl3_free(s);
189 191
190 dtls1_clear_queues(s); 192 dtls1_clear_queues(s);
191 193
192 pqueue_free(s->d1->unprocessed_rcds.q); 194 pqueue_free(s->d1->unprocessed_rcds.q);
193 pqueue_free(s->d1->processed_rcds.q); 195 pqueue_free(s->d1->processed_rcds.q);
194 pqueue_free(s->d1->buffered_messages); 196 pqueue_free(s->d1->buffered_messages);
195 pqueue_free(s->d1->sent_messages); 197 pqueue_free(s->d1->sent_messages);
196 pqueue_free(s->d1->buffered_app_data.q); 198 pqueue_free(s->d1->buffered_app_data.q);
197 199
198 OPENSSL_free(s->d1); 200 OPENSSL_free(s->d1);
199 s->d1 = NULL; 201 s->d1 = NULL;
200 } 202}
201 203
202void dtls1_clear(SSL *s) 204void
203 { 205dtls1_clear(SSL *s)
204 pqueue unprocessed_rcds; 206{
205 pqueue processed_rcds; 207 pqueue unprocessed_rcds;
206 pqueue buffered_messages; 208 pqueue processed_rcds;
209 pqueue buffered_messages;
207 pqueue sent_messages; 210 pqueue sent_messages;
208 pqueue buffered_app_data; 211 pqueue buffered_app_data;
209 unsigned int mtu; 212 unsigned int mtu;
210 213
211 if (s->d1) 214 if (s->d1) {
212 {
213 unprocessed_rcds = s->d1->unprocessed_rcds.q; 215 unprocessed_rcds = s->d1->unprocessed_rcds.q;
214 processed_rcds = s->d1->processed_rcds.q; 216 processed_rcds = s->d1->processed_rcds.q;
215 buffered_messages = s->d1->buffered_messages; 217 buffered_messages = s->d1->buffered_messages;
@@ -221,41 +223,38 @@ void dtls1_clear(SSL *s)
221 223
222 memset(s->d1, 0, sizeof(*(s->d1))); 224 memset(s->d1, 0, sizeof(*(s->d1)));
223 225
224 if (s->server) 226 if (s->server) {
225 {
226 s->d1->cookie_len = sizeof(s->d1->cookie); 227 s->d1->cookie_len = sizeof(s->d1->cookie);
227 } 228 }
228 229
229 if (SSL_get_options(s) & SSL_OP_NO_QUERY_MTU) 230 if (SSL_get_options(s) & SSL_OP_NO_QUERY_MTU) {
230 {
231 s->d1->mtu = mtu; 231 s->d1->mtu = mtu;
232 } 232 }
233 233
234 s->d1->unprocessed_rcds.q = unprocessed_rcds; 234 s->d1->unprocessed_rcds.q = unprocessed_rcds;
235 s->d1->processed_rcds.q = processed_rcds; 235 s->d1->processed_rcds.q = processed_rcds;
236 s->d1->buffered_messages = buffered_messages; 236 s->d1->buffered_messages = buffered_messages;
237 s->d1->sent_messages = sent_messages; 237 s->d1->sent_messages = sent_messages;
238 s->d1->buffered_app_data.q = buffered_app_data; 238 s->d1->buffered_app_data.q = buffered_app_data;
239 } 239 }
240 240
241 ssl3_clear(s); 241 ssl3_clear(s);
242 if (s->options & SSL_OP_CISCO_ANYCONNECT) 242 if (s->options & SSL_OP_CISCO_ANYCONNECT)
243 s->version=DTLS1_BAD_VER; 243 s->version = DTLS1_BAD_VER;
244 else 244 else
245 s->version=DTLS1_VERSION; 245 s->version = DTLS1_VERSION;
246 } 246}
247 247
248long dtls1_ctrl(SSL *s, int cmd, long larg, void *parg) 248long
249 { 249dtls1_ctrl(SSL *s, int cmd, long larg, void *parg)
250 int ret=0; 250{
251 int ret = 0;
251 252
252 switch (cmd) 253 switch (cmd) {
253 {
254 case DTLS_CTRL_GET_TIMEOUT: 254 case DTLS_CTRL_GET_TIMEOUT:
255 if (dtls1_get_timeout(s, (struct timeval*) parg) != NULL) 255 if (dtls1_get_timeout(s, (struct timeval*) parg) != NULL) {
256 {
257 ret = 1; 256 ret = 1;
258 } 257 }
259 break; 258 break;
260 case DTLS_CTRL_HANDLE_TIMEOUT: 259 case DTLS_CTRL_HANDLE_TIMEOUT:
261 ret = dtls1_handle_timeout(s); 260 ret = dtls1_handle_timeout(s);
@@ -267,9 +266,9 @@ long dtls1_ctrl(SSL *s, int cmd, long larg, void *parg)
267 default: 266 default:
268 ret = ssl3_ctrl(s, cmd, larg, parg); 267 ret = ssl3_ctrl(s, cmd, larg, parg);
269 break; 268 break;
270 }
271 return(ret);
272 } 269 }
270 return (ret);
271}
273 272
274/* 273/*
275 * As it's impossible to use stream ciphers in "datagram" mode, this 274 * As it's impossible to use stream ciphers in "datagram" mode, this
@@ -278,53 +277,51 @@ long dtls1_ctrl(SSL *s, int cmd, long larg, void *parg)
278 * to explicitly list their SSL_* codes. Currently RC4 is the only one 277 * to explicitly list their SSL_* codes. Currently RC4 is the only one
279 * available, but if new ones emerge, they will have to be added... 278 * available, but if new ones emerge, they will have to be added...
280 */ 279 */
281const SSL_CIPHER *dtls1_get_cipher(unsigned int u) 280const SSL_CIPHER
282 { 281*dtls1_get_cipher(unsigned int u)
282{
283 const SSL_CIPHER *ciph = ssl3_get_cipher(u); 283 const SSL_CIPHER *ciph = ssl3_get_cipher(u);
284 284
285 if (ciph != NULL) 285 if (ciph != NULL) {
286 {
287 if (ciph->algorithm_enc == SSL_RC4) 286 if (ciph->algorithm_enc == SSL_RC4)
288 return NULL; 287 return NULL;
289 } 288 }
290 289
291 return ciph; 290 return ciph;
292 } 291}
293 292
294void dtls1_start_timer(SSL *s) 293void
295 { 294dtls1_start_timer(SSL *s)
295{
296#ifndef OPENSSL_NO_SCTP 296#ifndef OPENSSL_NO_SCTP
297 /* Disable timer for SCTP */ 297 /* Disable timer for SCTP */
298 if (BIO_dgram_is_sctp(SSL_get_wbio(s))) 298 if (BIO_dgram_is_sctp(SSL_get_wbio(s))) {
299 {
300 memset(&(s->d1->next_timeout), 0, sizeof(struct timeval)); 299 memset(&(s->d1->next_timeout), 0, sizeof(struct timeval));
301 return; 300 return;
302 } 301 }
303#endif 302#endif
304 303
305 /* If timer is not set, initialize duration with 1 second */ 304 /* If timer is not set, initialize duration with 1 second */
306 if (s->d1->next_timeout.tv_sec == 0 && s->d1->next_timeout.tv_usec == 0) 305 if (s->d1->next_timeout.tv_sec == 0 && s->d1->next_timeout.tv_usec == 0) {
307 {
308 s->d1->timeout_duration = 1; 306 s->d1->timeout_duration = 1;
309 } 307 }
310 308
311 /* Set timeout to current time */ 309 /* Set timeout to current time */
312 get_current_time(&(s->d1->next_timeout)); 310 get_current_time(&(s->d1->next_timeout));
313 311
314 /* Add duration to current time */ 312 /* Add duration to current time */
315 s->d1->next_timeout.tv_sec += s->d1->timeout_duration; 313 s->d1->next_timeout.tv_sec += s->d1->timeout_duration;
316 BIO_ctrl(SSL_get_rbio(s), BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT, 0, &(s->d1->next_timeout)); 314 BIO_ctrl(SSL_get_rbio(s), BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT, 0, &(s->d1->next_timeout));
317 } 315}
318 316
319struct timeval* dtls1_get_timeout(SSL *s, struct timeval* timeleft) 317struct timeval*
320 { 318dtls1_get_timeout(SSL *s, struct timeval* timeleft) {
321 struct timeval timenow; 319 struct timeval timenow;
322 320
323 /* If no timeout is set, just return NULL */ 321 /* If no timeout is set, just return NULL */
324 if (s->d1->next_timeout.tv_sec == 0 && s->d1->next_timeout.tv_usec == 0) 322 if (s->d1->next_timeout.tv_sec == 0 && s->d1->next_timeout.tv_usec == 0) {
325 {
326 return NULL; 323 return NULL;
327 } 324 }
328 325
329 /* Get current time */ 326 /* Get current time */
330 get_current_time(&timenow); 327 get_current_time(&timenow);
@@ -332,65 +329,63 @@ struct timeval* dtls1_get_timeout(SSL *s, struct timeval* timeleft)
332 /* If timer already expired, set remaining time to 0 */ 329 /* If timer already expired, set remaining time to 0 */
333 if (s->d1->next_timeout.tv_sec < timenow.tv_sec || 330 if (s->d1->next_timeout.tv_sec < timenow.tv_sec ||
334 (s->d1->next_timeout.tv_sec == timenow.tv_sec && 331 (s->d1->next_timeout.tv_sec == timenow.tv_sec &&
335 s->d1->next_timeout.tv_usec <= timenow.tv_usec)) 332 s->d1->next_timeout.tv_usec <= timenow.tv_usec)) {
336 {
337 memset(timeleft, 0, sizeof(struct timeval)); 333 memset(timeleft, 0, sizeof(struct timeval));
338 return timeleft; 334 return timeleft;
339 } 335 }
340 336
341 /* Calculate time left until timer expires */ 337 /* Calculate time left until timer expires */
342 memcpy(timeleft, &(s->d1->next_timeout), sizeof(struct timeval)); 338 memcpy(timeleft, &(s->d1->next_timeout), sizeof(struct timeval));
343 timeleft->tv_sec -= timenow.tv_sec; 339 timeleft->tv_sec -= timenow.tv_sec;
344 timeleft->tv_usec -= timenow.tv_usec; 340 timeleft->tv_usec -= timenow.tv_usec;
345 if (timeleft->tv_usec < 0) 341 if (timeleft->tv_usec < 0) {
346 {
347 timeleft->tv_sec--; 342 timeleft->tv_sec--;
348 timeleft->tv_usec += 1000000; 343 timeleft->tv_usec += 1000000;
349 } 344 }
350 345
351 /* If remaining time is less than 15 ms, set it to 0 346 /* If remaining time is less than 15 ms, set it to 0
352 * to prevent issues because of small devergences with 347 * to prevent issues because of small devergences with
353 * socket timeouts. 348 * socket timeouts.
354 */ 349 */
355 if (timeleft->tv_sec == 0 && timeleft->tv_usec < 15000) 350 if (timeleft->tv_sec == 0 && timeleft->tv_usec < 15000) {
356 {
357 memset(timeleft, 0, sizeof(struct timeval)); 351 memset(timeleft, 0, sizeof(struct timeval));
358 } 352 }
359 353
360 354
361 return timeleft; 355 return timeleft;
362 } 356}
363 357
364int dtls1_is_timer_expired(SSL *s) 358int
365 { 359dtls1_is_timer_expired(SSL *s)
360{
366 struct timeval timeleft; 361 struct timeval timeleft;
367 362
368 /* Get time left until timeout, return false if no timer running */ 363 /* Get time left until timeout, return false if no timer running */
369 if (dtls1_get_timeout(s, &timeleft) == NULL) 364 if (dtls1_get_timeout(s, &timeleft) == NULL) {
370 {
371 return 0; 365 return 0;
372 } 366 }
373 367
374 /* Return false if timer is not expired yet */ 368 /* Return false if timer is not expired yet */
375 if (timeleft.tv_sec > 0 || timeleft.tv_usec > 0) 369 if (timeleft.tv_sec > 0 || timeleft.tv_usec > 0) {
376 {
377 return 0; 370 return 0;
378 } 371 }
379 372
380 /* Timer expired, so return true */ 373 /* Timer expired, so return true */
381 return 1; 374 return 1;
382 } 375}
383 376
384void dtls1_double_timeout(SSL *s) 377void
385 { 378dtls1_double_timeout(SSL *s)
379{
386 s->d1->timeout_duration *= 2; 380 s->d1->timeout_duration *= 2;
387 if (s->d1->timeout_duration > 60) 381 if (s->d1->timeout_duration > 60)
388 s->d1->timeout_duration = 60; 382 s->d1->timeout_duration = 60;
389 dtls1_start_timer(s); 383 dtls1_start_timer(s);
390 } 384}
391 385
392void dtls1_stop_timer(SSL *s) 386void
393 { 387dtls1_stop_timer(SSL *s)
388{
394 /* Reset everything */ 389 /* Reset everything */
395 memset(&(s->d1->timeout), 0, sizeof(struct dtls1_timeout_st)); 390 memset(&(s->d1->timeout), 0, sizeof(struct dtls1_timeout_st));
396 memset(&(s->d1->next_timeout), 0, sizeof(struct timeval)); 391 memset(&(s->d1->next_timeout), 0, sizeof(struct timeval));
@@ -398,35 +393,35 @@ void dtls1_stop_timer(SSL *s)
398 BIO_ctrl(SSL_get_rbio(s), BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT, 0, &(s->d1->next_timeout)); 393 BIO_ctrl(SSL_get_rbio(s), BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT, 0, &(s->d1->next_timeout));
399 /* Clear retransmission buffer */ 394 /* Clear retransmission buffer */
400 dtls1_clear_record_buffer(s); 395 dtls1_clear_record_buffer(s);
401 } 396}
402 397
403int dtls1_check_timeout_num(SSL *s) 398int
404 { 399dtls1_check_timeout_num(SSL *s)
400{
405 s->d1->timeout.num_alerts++; 401 s->d1->timeout.num_alerts++;
406 402
407 /* Reduce MTU after 2 unsuccessful retransmissions */ 403 /* Reduce MTU after 2 unsuccessful retransmissions */
408 if (s->d1->timeout.num_alerts > 2) 404 if (s->d1->timeout.num_alerts > 2) {
409 { 405 s->d1->mtu = BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_GET_FALLBACK_MTU, 0, NULL);
410 s->d1->mtu = BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_GET_FALLBACK_MTU, 0, NULL);
411 }
412 406
413 if (s->d1->timeout.num_alerts > DTLS1_TMO_ALERT_COUNT) 407 }
414 { 408
409 if (s->d1->timeout.num_alerts > DTLS1_TMO_ALERT_COUNT) {
415 /* fail the connection, enough alerts have been sent */ 410 /* fail the connection, enough alerts have been sent */
416 SSLerr(SSL_F_DTLS1_CHECK_TIMEOUT_NUM,SSL_R_READ_TIMEOUT_EXPIRED); 411 SSLerr(SSL_F_DTLS1_CHECK_TIMEOUT_NUM, SSL_R_READ_TIMEOUT_EXPIRED);
417 return -1; 412 return -1;
418 } 413 }
419 414
420 return 0; 415 return 0;
421 } 416}
422 417
423int dtls1_handle_timeout(SSL *s) 418int
424 { 419dtls1_handle_timeout(SSL *s)
420{
425 /* if no timer is expired, don't do anything */ 421 /* if no timer is expired, don't do anything */
426 if (!dtls1_is_timer_expired(s)) 422 if (!dtls1_is_timer_expired(s)) {
427 {
428 return 0; 423 return 0;
429 } 424 }
430 425
431 dtls1_double_timeout(s); 426 dtls1_double_timeout(s);
432 427
@@ -434,38 +429,39 @@ int dtls1_handle_timeout(SSL *s)
434 return -1; 429 return -1;
435 430
436 s->d1->timeout.read_timeouts++; 431 s->d1->timeout.read_timeouts++;
437 if (s->d1->timeout.read_timeouts > DTLS1_TMO_READ_COUNT) 432 if (s->d1->timeout.read_timeouts > DTLS1_TMO_READ_COUNT) {
438 {
439 s->d1->timeout.read_timeouts = 1; 433 s->d1->timeout.read_timeouts = 1;
440 } 434 }
441 435
442#ifndef OPENSSL_NO_HEARTBEATS 436#ifndef OPENSSL_NO_HEARTBEATS
443 if (s->tlsext_hb_pending) 437 if (s->tlsext_hb_pending) {
444 {
445 s->tlsext_hb_pending = 0; 438 s->tlsext_hb_pending = 0;
446 return dtls1_heartbeat(s); 439 return dtls1_heartbeat(s);
447 } 440 }
448#endif 441#endif
449 442
450 dtls1_start_timer(s); 443 dtls1_start_timer(s);
451 return dtls1_retransmit_buffered_messages(s); 444 return dtls1_retransmit_buffered_messages(s);
452 } 445}
453 446
454static void get_current_time(struct timeval *t) 447static void
448get_current_time(struct timeval *t)
455{ 449{
456 gettimeofday(t, NULL); 450 gettimeofday(t, NULL);
457} 451}
458 452
459int dtls1_listen(SSL *s, struct sockaddr *client) 453int
460 { 454dtls1_listen(SSL *s, struct sockaddr *client)
455{
461 int ret; 456 int ret;
462 457
463 SSL_set_options(s, SSL_OP_COOKIE_EXCHANGE); 458 SSL_set_options(s, SSL_OP_COOKIE_EXCHANGE);
464 s->d1->listen = 1; 459 s->d1->listen = 1;
465 460
466 ret = SSL_accept(s); 461 ret = SSL_accept(s);
467 if (ret <= 0) return ret; 462 if (ret <= 0)
468 463 return ret;
469 (void) BIO_dgram_get_peer(SSL_get_rbio(s), client); 464
465 (void)BIO_dgram_get_peer(SSL_get_rbio(s), client);
470 return 1; 466 return 1;
471 } 467}