summaryrefslogtreecommitdiff
path: root/src/lib/libssl/d1_both.c
diff options
context:
space:
mode:
authorbeck <>2017-01-22 07:16:39 +0000
committerbeck <>2017-01-22 07:16:39 +0000
commit2204d5a39055900d89c6f7fbdcc3bb37ec8070db (patch)
treec03f505a3f0822dbc7a4d9523cfde19318c0d121 /src/lib/libssl/d1_both.c
parent334c9196a27db4244daba48e4ba2118985c535ed (diff)
downloadopenbsd-2204d5a39055900d89c6f7fbdcc3bb37ec8070db.tar.gz
openbsd-2204d5a39055900d89c6f7fbdcc3bb37ec8070db.tar.bz2
openbsd-2204d5a39055900d89c6f7fbdcc3bb37ec8070db.zip
Move most of DTLS1_STATE to internal.
ok jsing@
Diffstat (limited to 'src/lib/libssl/d1_both.c')
-rw-r--r--src/lib/libssl/d1_both.c116
1 files changed, 58 insertions, 58 deletions
diff --git a/src/lib/libssl/d1_both.c b/src/lib/libssl/d1_both.c
index 7f9d5af4ce..d83df1c9a0 100644
--- a/src/lib/libssl/d1_both.c
+++ b/src/lib/libssl/d1_both.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: d1_both.c,v 1.40 2016/12/06 13:38:11 jsing Exp $ */ 1/* $OpenBSD: d1_both.c,v 1.41 2017/01/22 07:16:38 beck Exp $ */
2/* 2/*
3 * DTLS implementation written by Nagendra Modadugu 3 * DTLS implementation written by Nagendra Modadugu
4 * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. 4 * (nagendra@cs.stanford.edu) for the OpenSSL project 2005.
@@ -232,9 +232,9 @@ dtls1_do_write(SSL *s, int type)
232 unsigned int len, frag_off, mac_size, blocksize; 232 unsigned int len, frag_off, mac_size, blocksize;
233 233
234 /* AHA! Figure out the MTU, and stick to the right size */ 234 /* AHA! Figure out the MTU, and stick to the right size */
235 if (s->d1->mtu < dtls1_min_mtu() && 235 if (D1I(s)->mtu < dtls1_min_mtu() &&
236 !(SSL_get_options(s) & SSL_OP_NO_QUERY_MTU)) { 236 !(SSL_get_options(s) & SSL_OP_NO_QUERY_MTU)) {
237 s->d1->mtu = BIO_ctrl(SSL_get_wbio(s), 237 D1I(s)->mtu = BIO_ctrl(SSL_get_wbio(s),
238 BIO_CTRL_DGRAM_QUERY_MTU, 0, NULL); 238 BIO_CTRL_DGRAM_QUERY_MTU, 0, NULL);
239 239
240 /* 240 /*
@@ -242,20 +242,20 @@ dtls1_do_write(SSL *s, int type)
242 * doesn't know the MTU (ie., the initial write), so just 242 * doesn't know the MTU (ie., the initial write), so just
243 * make sure we have a reasonable number 243 * make sure we have a reasonable number
244 */ 244 */
245 if (s->d1->mtu < dtls1_min_mtu()) { 245 if (D1I(s)->mtu < dtls1_min_mtu()) {
246 s->d1->mtu = 0; 246 D1I(s)->mtu = 0;
247 s->d1->mtu = dtls1_guess_mtu(s->d1->mtu); 247 D1I(s)->mtu = dtls1_guess_mtu(D1I(s)->mtu);
248 BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SET_MTU, 248 BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SET_MTU,
249 s->d1->mtu, NULL); 249 D1I(s)->mtu, NULL);
250 } 250 }
251 } 251 }
252 252
253 OPENSSL_assert(s->d1->mtu >= dtls1_min_mtu()); 253 OPENSSL_assert(D1I(s)->mtu >= dtls1_min_mtu());
254 /* should have something reasonable now */ 254 /* should have something reasonable now */
255 255
256 if (s->init_off == 0 && type == SSL3_RT_HANDSHAKE) 256 if (s->init_off == 0 && type == SSL3_RT_HANDSHAKE)
257 OPENSSL_assert(s->init_num == 257 OPENSSL_assert(s->init_num ==
258 (int)s->d1->w_msg_hdr.msg_len + DTLS1_HM_HEADER_LENGTH); 258 (int)D1I(s)->w_msg_hdr.msg_len + DTLS1_HM_HEADER_LENGTH);
259 259
260 if (s->write_hash) 260 if (s->write_hash)
261 mac_size = EVP_MD_CTX_size(s->write_hash); 261 mac_size = EVP_MD_CTX_size(s->write_hash);
@@ -270,7 +270,7 @@ dtls1_do_write(SSL *s, int type)
270 270
271 frag_off = 0; 271 frag_off = 0;
272 while (s->init_num) { 272 while (s->init_num) {
273 curr_mtu = s->d1->mtu - BIO_wpending(SSL_get_wbio(s)) - 273 curr_mtu = D1I(s)->mtu - BIO_wpending(SSL_get_wbio(s)) -
274 DTLS1_RT_HEADER_LENGTH - mac_size - blocksize; 274 DTLS1_RT_HEADER_LENGTH - mac_size - blocksize;
275 275
276 if (curr_mtu <= DTLS1_HM_HEADER_LENGTH) { 276 if (curr_mtu <= DTLS1_HM_HEADER_LENGTH) {
@@ -278,7 +278,7 @@ dtls1_do_write(SSL *s, int type)
278 ret = BIO_flush(SSL_get_wbio(s)); 278 ret = BIO_flush(SSL_get_wbio(s));
279 if (ret <= 0) 279 if (ret <= 0)
280 return ret; 280 return ret;
281 curr_mtu = s->d1->mtu - DTLS1_RT_HEADER_LENGTH - 281 curr_mtu = D1I(s)->mtu - DTLS1_RT_HEADER_LENGTH -
282 mac_size - blocksize; 282 mac_size - blocksize;
283 } 283 }
284 284
@@ -322,7 +322,7 @@ dtls1_do_write(SSL *s, int type)
322 */ 322 */
323 if (BIO_ctrl(SSL_get_wbio(s), 323 if (BIO_ctrl(SSL_get_wbio(s),
324 BIO_CTRL_DGRAM_MTU_EXCEEDED, 0, NULL) > 0) 324 BIO_CTRL_DGRAM_MTU_EXCEEDED, 0, NULL) > 0)
325 s->d1->mtu = BIO_ctrl(SSL_get_wbio(s), 325 D1I(s)->mtu = BIO_ctrl(SSL_get_wbio(s),
326 BIO_CTRL_DGRAM_QUERY_MTU, 0, NULL); 326 BIO_CTRL_DGRAM_QUERY_MTU, 0, NULL);
327 else 327 else
328 return (-1); 328 return (-1);
@@ -336,14 +336,14 @@ dtls1_do_write(SSL *s, int type)
336 OPENSSL_assert(len == (unsigned int)ret); 336 OPENSSL_assert(len == (unsigned int)ret);
337 337
338 if (type == SSL3_RT_HANDSHAKE && 338 if (type == SSL3_RT_HANDSHAKE &&
339 !s->d1->retransmitting) { 339 !D1I(s)->retransmitting) {
340 /* 340 /*
341 * Should not be done for 'Hello Request's, 341 * Should not be done for 'Hello Request's,
342 * but in that case we'll ignore the result 342 * but in that case we'll ignore the result
343 * anyway 343 * anyway
344 */ 344 */
345 unsigned char *p = (unsigned char *)&s->init_buf->data[s->init_off]; 345 unsigned char *p = (unsigned char *)&s->init_buf->data[s->init_off];
346 const struct hm_header_st *msg_hdr = &s->d1->w_msg_hdr; 346 const struct hm_header_st *msg_hdr = &D1I(s)->w_msg_hdr;
347 int xlen; 347 int xlen;
348 348
349 if (frag_off == 0) { 349 if (frag_off == 0) {
@@ -420,7 +420,7 @@ dtls1_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok)
420 return s->init_num; 420 return s->init_num;
421 } 421 }
422 422
423 msg_hdr = &s->d1->r_msg_hdr; 423 msg_hdr = &D1I(s)->r_msg_hdr;
424 memset(msg_hdr, 0x00, sizeof(struct hm_header_st)); 424 memset(msg_hdr, 0x00, sizeof(struct hm_header_st));
425 425
426again: 426again:
@@ -452,8 +452,8 @@ again:
452 memset(msg_hdr, 0x00, sizeof(struct hm_header_st)); 452 memset(msg_hdr, 0x00, sizeof(struct hm_header_st));
453 453
454 /* Don't change sequence numbers while listening */ 454 /* Don't change sequence numbers while listening */
455 if (!s->d1->listen) 455 if (!D1I(s)->listen)
456 s->d1->handshake_read_seq++; 456 D1I(s)->handshake_read_seq++;
457 457
458 s->init_msg = s->init_buf->data + DTLS1_HM_HEADER_LENGTH; 458 s->init_msg = s->init_buf->data + DTLS1_HM_HEADER_LENGTH;
459 return s->init_num; 459 return s->init_num;
@@ -487,7 +487,7 @@ dtls1_preprocess_fragment(SSL *s, struct hm_header_st *msg_hdr, int max)
487 return SSL_AD_ILLEGAL_PARAMETER; 487 return SSL_AD_ILLEGAL_PARAMETER;
488 } 488 }
489 489
490 if ( s->d1->r_msg_hdr.frag_off == 0) /* first fragment */ 490 if ( D1I(s)->r_msg_hdr.frag_off == 0) /* first fragment */
491 { 491 {
492 /* 492 /*
493 * msg_len is limited to 2^24, but is effectively checked 493 * msg_len is limited to 2^24, but is effectively checked
@@ -500,11 +500,11 @@ dtls1_preprocess_fragment(SSL *s, struct hm_header_st *msg_hdr, int max)
500 } 500 }
501 501
502 s->s3->tmp.message_size = msg_len; 502 s->s3->tmp.message_size = msg_len;
503 s->d1->r_msg_hdr.msg_len = msg_len; 503 D1I(s)->r_msg_hdr.msg_len = msg_len;
504 s->s3->tmp.message_type = msg_hdr->type; 504 s->s3->tmp.message_type = msg_hdr->type;
505 s->d1->r_msg_hdr.type = msg_hdr->type; 505 D1I(s)->r_msg_hdr.type = msg_hdr->type;
506 s->d1->r_msg_hdr.seq = msg_hdr->seq; 506 D1I(s)->r_msg_hdr.seq = msg_hdr->seq;
507 } else if (msg_len != s->d1->r_msg_hdr.msg_len) { 507 } else if (msg_len != D1I(s)->r_msg_hdr.msg_len) {
508 /* 508 /*
509 * They must be playing with us! BTW, failure to enforce 509 * They must be playing with us! BTW, failure to enforce
510 * upper limit would open possibility for buffer overrun. 510 * upper limit would open possibility for buffer overrun.
@@ -531,7 +531,7 @@ dtls1_retrieve_buffered_fragment(SSL *s, long max, int *ok)
531 int al; 531 int al;
532 532
533 *ok = 0; 533 *ok = 0;
534 item = pqueue_peek(s->d1->buffered_messages); 534 item = pqueue_peek(D1I(s)->buffered_messages);
535 if (item == NULL) 535 if (item == NULL)
536 return 0; 536 return 0;
537 537
@@ -541,9 +541,9 @@ dtls1_retrieve_buffered_fragment(SSL *s, long max, int *ok)
541 if (frag->reassembly != NULL) 541 if (frag->reassembly != NULL)
542 return 0; 542 return 0;
543 543
544 if (s->d1->handshake_read_seq == frag->msg_header.seq) { 544 if (D1I(s)->handshake_read_seq == frag->msg_header.seq) {
545 unsigned long frag_len = frag->msg_header.frag_len; 545 unsigned long frag_len = frag->msg_header.frag_len;
546 pqueue_pop(s->d1->buffered_messages); 546 pqueue_pop(D1I(s)->buffered_messages);
547 547
548 al = dtls1_preprocess_fragment(s, &frag->msg_header, max); 548 al = dtls1_preprocess_fragment(s, &frag->msg_header, max);
549 549
@@ -608,7 +608,7 @@ dtls1_reassemble_fragment(SSL *s, struct hm_header_st* msg_hdr, int *ok)
608 memset(seq64be, 0, sizeof(seq64be)); 608 memset(seq64be, 0, sizeof(seq64be));
609 seq64be[6] = (unsigned char)(msg_hdr->seq >> 8); 609 seq64be[6] = (unsigned char)(msg_hdr->seq >> 8);
610 seq64be[7] = (unsigned char)msg_hdr->seq; 610 seq64be[7] = (unsigned char)msg_hdr->seq;
611 item = pqueue_find(s->d1->buffered_messages, seq64be); 611 item = pqueue_find(D1I(s)->buffered_messages, seq64be);
612 612
613 if (item == NULL) { 613 if (item == NULL) {
614 frag = dtls1_hm_fragment_new(msg_hdr->msg_len, 1); 614 frag = dtls1_hm_fragment_new(msg_hdr->msg_len, 1);
@@ -673,7 +673,7 @@ dtls1_reassemble_fragment(SSL *s, struct hm_header_st* msg_hdr, int *ok)
673 goto err; 673 goto err;
674 } 674 }
675 675
676 pqueue_insert(s->d1->buffered_messages, item); 676 pqueue_insert(D1I(s)->buffered_messages, item);
677 } 677 }
678 678
679 return DTLS1_HM_FRAGMENT_RETRY; 679 return DTLS1_HM_FRAGMENT_RETRY;
@@ -702,7 +702,7 @@ dtls1_process_out_of_seq_message(SSL *s, struct hm_header_st* msg_hdr, int *ok)
702 memset(seq64be, 0, sizeof(seq64be)); 702 memset(seq64be, 0, sizeof(seq64be));
703 seq64be[6] = (unsigned char) (msg_hdr->seq >> 8); 703 seq64be[6] = (unsigned char) (msg_hdr->seq >> 8);
704 seq64be[7] = (unsigned char) msg_hdr->seq; 704 seq64be[7] = (unsigned char) msg_hdr->seq;
705 item = pqueue_find(s->d1->buffered_messages, seq64be); 705 item = pqueue_find(D1I(s)->buffered_messages, seq64be);
706 706
707 /* 707 /*
708 * If we already have an entry and this one is a fragment, 708 * If we already have an entry and this one is a fragment,
@@ -717,9 +717,9 @@ dtls1_process_out_of_seq_message(SSL *s, struct hm_header_st* msg_hdr, int *ok)
717 * a FINISHED before the SERVER_HELLO, which then must be a stale 717 * a FINISHED before the SERVER_HELLO, which then must be a stale
718 * retransmit. 718 * retransmit.
719 */ 719 */
720 if (msg_hdr->seq <= s->d1->handshake_read_seq || 720 if (msg_hdr->seq <= D1I(s)->handshake_read_seq ||
721 msg_hdr->seq > s->d1->handshake_read_seq + 10 || item != NULL || 721 msg_hdr->seq > D1I(s)->handshake_read_seq + 10 || item != NULL ||
722 (s->d1->handshake_read_seq == 0 && 722 (D1I(s)->handshake_read_seq == 0 &&
723 msg_hdr->type == SSL3_MT_FINISHED)) { 723 msg_hdr->type == SSL3_MT_FINISHED)) {
724 unsigned char devnull [256]; 724 unsigned char devnull [256];
725 725
@@ -760,7 +760,7 @@ dtls1_process_out_of_seq_message(SSL *s, struct hm_header_st* msg_hdr, int *ok)
760 if (item == NULL) 760 if (item == NULL)
761 goto err; 761 goto err;
762 762
763 pqueue_insert(s->d1->buffered_messages, item); 763 pqueue_insert(D1I(s)->buffered_messages, item);
764 } 764 }
765 765
766 return DTLS1_HM_FRAGMENT_RETRY; 766 return DTLS1_HM_FRAGMENT_RETRY;
@@ -814,8 +814,8 @@ again:
814 * While listening, we accept seq 1 (ClientHello with cookie) 814 * While listening, we accept seq 1 (ClientHello with cookie)
815 * although we're still expecting seq 0 (ClientHello) 815 * although we're still expecting seq 0 (ClientHello)
816 */ 816 */
817 if (msg_hdr.seq != s->d1->handshake_read_seq && 817 if (msg_hdr.seq != D1I(s)->handshake_read_seq &&
818 !(s->d1->listen && msg_hdr.seq == 1)) 818 !(D1I(s)->listen && msg_hdr.seq == 1))
819 return dtls1_process_out_of_seq_message(s, &msg_hdr, ok); 819 return dtls1_process_out_of_seq_message(s, &msg_hdr, ok);
820 820
821 len = msg_hdr.msg_len; 821 len = msg_hdr.msg_len;
@@ -825,7 +825,7 @@ again:
825 if (frag_len && frag_len < len) 825 if (frag_len && frag_len < len)
826 return dtls1_reassemble_fragment(s, &msg_hdr, ok); 826 return dtls1_reassemble_fragment(s, &msg_hdr, ok);
827 827
828 if (!s->server && s->d1->r_msg_hdr.frag_off == 0 && 828 if (!s->server && D1I(s)->r_msg_hdr.frag_off == 0 &&
829 wire[0] == SSL3_MT_HELLO_REQUEST) { 829 wire[0] == SSL3_MT_HELLO_REQUEST) {
830 /* 830 /*
831 * The server may always send 'Hello Request' messages -- 831 * The server may always send 'Hello Request' messages --
@@ -918,13 +918,13 @@ dtls1_send_change_cipher_spec(SSL *s, int a, int b)
918 if (s->state == a) { 918 if (s->state == a) {
919 p = (unsigned char *)s->init_buf->data; 919 p = (unsigned char *)s->init_buf->data;
920 *p++=SSL3_MT_CCS; 920 *p++=SSL3_MT_CCS;
921 s->d1->handshake_write_seq = s->d1->next_handshake_write_seq; 921 D1I(s)->handshake_write_seq = D1I(s)->next_handshake_write_seq;
922 s->init_num = DTLS1_CCS_HEADER_LENGTH; 922 s->init_num = DTLS1_CCS_HEADER_LENGTH;
923 923
924 s->init_off = 0; 924 s->init_off = 0;
925 925
926 dtls1_set_message_header_int(s, SSL3_MT_CCS, 0, 926 dtls1_set_message_header_int(s, SSL3_MT_CCS, 0,
927 s->d1->handshake_write_seq, 0, 0); 927 D1I(s)->handshake_write_seq, 0, 0);
928 928
929 /* buffer the message to handle re-xmits */ 929 /* buffer the message to handle re-xmits */
930 dtls1_buffer_message(s, 1); 930 dtls1_buffer_message(s, 1);
@@ -1031,26 +1031,26 @@ dtls1_buffer_message(SSL *s, int is_ccs)
1031 memcpy(frag->fragment, s->init_buf->data, s->init_num); 1031 memcpy(frag->fragment, s->init_buf->data, s->init_num);
1032 1032
1033 if (is_ccs) { 1033 if (is_ccs) {
1034 OPENSSL_assert(s->d1->w_msg_hdr.msg_len + 1034 OPENSSL_assert(D1I(s)->w_msg_hdr.msg_len +
1035 ((s->version == DTLS1_VERSION) ? 1035 ((s->version == DTLS1_VERSION) ?
1036 DTLS1_CCS_HEADER_LENGTH : 3) == (unsigned int)s->init_num); 1036 DTLS1_CCS_HEADER_LENGTH : 3) == (unsigned int)s->init_num);
1037 } else { 1037 } else {
1038 OPENSSL_assert(s->d1->w_msg_hdr.msg_len + 1038 OPENSSL_assert(D1I(s)->w_msg_hdr.msg_len +
1039 DTLS1_HM_HEADER_LENGTH == (unsigned int)s->init_num); 1039 DTLS1_HM_HEADER_LENGTH == (unsigned int)s->init_num);
1040 } 1040 }
1041 1041
1042 frag->msg_header.msg_len = s->d1->w_msg_hdr.msg_len; 1042 frag->msg_header.msg_len = D1I(s)->w_msg_hdr.msg_len;
1043 frag->msg_header.seq = s->d1->w_msg_hdr.seq; 1043 frag->msg_header.seq = D1I(s)->w_msg_hdr.seq;
1044 frag->msg_header.type = s->d1->w_msg_hdr.type; 1044 frag->msg_header.type = D1I(s)->w_msg_hdr.type;
1045 frag->msg_header.frag_off = 0; 1045 frag->msg_header.frag_off = 0;
1046 frag->msg_header.frag_len = s->d1->w_msg_hdr.msg_len; 1046 frag->msg_header.frag_len = D1I(s)->w_msg_hdr.msg_len;
1047 frag->msg_header.is_ccs = is_ccs; 1047 frag->msg_header.is_ccs = is_ccs;
1048 1048
1049 /* save current state*/ 1049 /* save current state*/
1050 frag->msg_header.saved_retransmit_state.enc_write_ctx = s->enc_write_ctx; 1050 frag->msg_header.saved_retransmit_state.enc_write_ctx = s->enc_write_ctx;
1051 frag->msg_header.saved_retransmit_state.write_hash = s->write_hash; 1051 frag->msg_header.saved_retransmit_state.write_hash = s->write_hash;
1052 frag->msg_header.saved_retransmit_state.session = s->session; 1052 frag->msg_header.saved_retransmit_state.session = s->session;
1053 frag->msg_header.saved_retransmit_state.epoch = s->d1->w_epoch; 1053 frag->msg_header.saved_retransmit_state.epoch = D1I(s)->w_epoch;
1054 1054
1055 memset(seq64be, 0, sizeof(seq64be)); 1055 memset(seq64be, 0, sizeof(seq64be));
1056 seq64be[6] = (unsigned char)(dtls1_get_queue_priority( 1056 seq64be[6] = (unsigned char)(dtls1_get_queue_priority(
@@ -1120,21 +1120,21 @@ dtls1_retransmit_message(SSL *s, unsigned short seq, unsigned long frag_off,
1120 saved_state.enc_write_ctx = s->enc_write_ctx; 1120 saved_state.enc_write_ctx = s->enc_write_ctx;
1121 saved_state.write_hash = s->write_hash; 1121 saved_state.write_hash = s->write_hash;
1122 saved_state.session = s->session; 1122 saved_state.session = s->session;
1123 saved_state.epoch = s->d1->w_epoch; 1123 saved_state.epoch = D1I(s)->w_epoch;
1124 1124
1125 s->d1->retransmitting = 1; 1125 D1I(s)->retransmitting = 1;
1126 1126
1127 /* restore state in which the message was originally sent */ 1127 /* restore state in which the message was originally sent */
1128 s->enc_write_ctx = frag->msg_header.saved_retransmit_state.enc_write_ctx; 1128 s->enc_write_ctx = frag->msg_header.saved_retransmit_state.enc_write_ctx;
1129 s->write_hash = frag->msg_header.saved_retransmit_state.write_hash; 1129 s->write_hash = frag->msg_header.saved_retransmit_state.write_hash;
1130 s->session = frag->msg_header.saved_retransmit_state.session; 1130 s->session = frag->msg_header.saved_retransmit_state.session;
1131 s->d1->w_epoch = frag->msg_header.saved_retransmit_state.epoch; 1131 D1I(s)->w_epoch = frag->msg_header.saved_retransmit_state.epoch;
1132 1132
1133 if (frag->msg_header.saved_retransmit_state.epoch == 1133 if (frag->msg_header.saved_retransmit_state.epoch ==
1134 saved_state.epoch - 1) { 1134 saved_state.epoch - 1) {
1135 memcpy(save_write_sequence, s->s3->write_sequence, 1135 memcpy(save_write_sequence, s->s3->write_sequence,
1136 sizeof(s->s3->write_sequence)); 1136 sizeof(s->s3->write_sequence));
1137 memcpy(s->s3->write_sequence, s->d1->last_write_sequence, 1137 memcpy(s->s3->write_sequence, D1I(s)->last_write_sequence,
1138 sizeof(s->s3->write_sequence)); 1138 sizeof(s->s3->write_sequence));
1139 } 1139 }
1140 1140
@@ -1145,17 +1145,17 @@ dtls1_retransmit_message(SSL *s, unsigned short seq, unsigned long frag_off,
1145 s->enc_write_ctx = saved_state.enc_write_ctx; 1145 s->enc_write_ctx = saved_state.enc_write_ctx;
1146 s->write_hash = saved_state.write_hash; 1146 s->write_hash = saved_state.write_hash;
1147 s->session = saved_state.session; 1147 s->session = saved_state.session;
1148 s->d1->w_epoch = saved_state.epoch; 1148 D1I(s)->w_epoch = saved_state.epoch;
1149 1149
1150 if (frag->msg_header.saved_retransmit_state.epoch == 1150 if (frag->msg_header.saved_retransmit_state.epoch ==
1151 saved_state.epoch - 1) { 1151 saved_state.epoch - 1) {
1152 memcpy(s->d1->last_write_sequence, s->s3->write_sequence, 1152 memcpy(D1I(s)->last_write_sequence, s->s3->write_sequence,
1153 sizeof(s->s3->write_sequence)); 1153 sizeof(s->s3->write_sequence));
1154 memcpy(s->s3->write_sequence, save_write_sequence, 1154 memcpy(s->s3->write_sequence, save_write_sequence,
1155 sizeof(s->s3->write_sequence)); 1155 sizeof(s->s3->write_sequence));
1156 } 1156 }
1157 1157
1158 s->d1->retransmitting = 0; 1158 D1I(s)->retransmitting = 0;
1159 1159
1160 (void)BIO_flush(SSL_get_wbio(s)); 1160 (void)BIO_flush(SSL_get_wbio(s));
1161 return ret; 1161 return ret;
@@ -1179,12 +1179,12 @@ dtls1_set_message_header(SSL *s, unsigned char *p, unsigned char mt,
1179 unsigned long len, unsigned long frag_off, unsigned long frag_len) 1179 unsigned long len, unsigned long frag_off, unsigned long frag_len)
1180{ 1180{
1181 /* Don't change sequence numbers while listening */ 1181 /* Don't change sequence numbers while listening */
1182 if (frag_off == 0 && !s->d1->listen) { 1182 if (frag_off == 0 && !D1I(s)->listen) {
1183 s->d1->handshake_write_seq = s->d1->next_handshake_write_seq; 1183 D1I(s)->handshake_write_seq = D1I(s)->next_handshake_write_seq;
1184 s->d1->next_handshake_write_seq++; 1184 D1I(s)->next_handshake_write_seq++;
1185 } 1185 }
1186 1186
1187 dtls1_set_message_header_int(s, mt, len, s->d1->handshake_write_seq, 1187 dtls1_set_message_header_int(s, mt, len, D1I(s)->handshake_write_seq,
1188 frag_off, frag_len); 1188 frag_off, frag_len);
1189 1189
1190 return p += DTLS1_HM_HEADER_LENGTH; 1190 return p += DTLS1_HM_HEADER_LENGTH;
@@ -1195,7 +1195,7 @@ static void
1195dtls1_set_message_header_int(SSL *s, unsigned char mt, unsigned long len, 1195dtls1_set_message_header_int(SSL *s, unsigned char mt, unsigned long len,
1196 unsigned short seq_num, unsigned long frag_off, unsigned long frag_len) 1196 unsigned short seq_num, unsigned long frag_off, unsigned long frag_len)
1197{ 1197{
1198 struct hm_header_st *msg_hdr = &s->d1->w_msg_hdr; 1198 struct hm_header_st *msg_hdr = &D1I(s)->w_msg_hdr;
1199 1199
1200 msg_hdr->type = mt; 1200 msg_hdr->type = mt;
1201 msg_hdr->msg_len = len; 1201 msg_hdr->msg_len = len;
@@ -1207,7 +1207,7 @@ dtls1_set_message_header_int(SSL *s, unsigned char mt, unsigned long len,
1207static void 1207static void
1208dtls1_fix_message_header(SSL *s, unsigned long frag_off, unsigned long frag_len) 1208dtls1_fix_message_header(SSL *s, unsigned long frag_off, unsigned long frag_len)
1209{ 1209{
1210 struct hm_header_st *msg_hdr = &s->d1->w_msg_hdr; 1210 struct hm_header_st *msg_hdr = &D1I(s)->w_msg_hdr;
1211 1211
1212 msg_hdr->frag_off = frag_off; 1212 msg_hdr->frag_off = frag_off;
1213 msg_hdr->frag_len = frag_len; 1213 msg_hdr->frag_len = frag_len;
@@ -1216,7 +1216,7 @@ dtls1_fix_message_header(SSL *s, unsigned long frag_off, unsigned long frag_len)
1216static unsigned char * 1216static unsigned char *
1217dtls1_write_message_header(SSL *s, unsigned char *p) 1217dtls1_write_message_header(SSL *s, unsigned char *p)
1218{ 1218{
1219 struct hm_header_st *msg_hdr = &s->d1->w_msg_hdr; 1219 struct hm_header_st *msg_hdr = &D1I(s)->w_msg_hdr;
1220 1220
1221 *p++ = msg_hdr->type; 1221 *p++ = msg_hdr->type;
1222 l2n3(msg_hdr->msg_len, p); 1222 l2n3(msg_hdr->msg_len, p);