Every sent handshake message is inserted into a sent queue until it  
has been acknowledged. When a timeout occurs, all messages in the sent  
queue will be repeated. When inserting a message into the queue, its  
sequence number bitwise ORed with the current epoch will used as the  
index. When a retransmission is necessary, the messages in the queue  
are looked up only by the sequence number as index, so nothing will be  
found and the retransmission fails. Removing the epoch when generating  
the index solves this issue.


--- ssl/d1_both.c       2007-10-17 23:17:49.000000000 +0200
+++ ssl/d1_both.c       2009-01-28 13:57:57.000000000 +0100
@@ -1004,7 +1004,7 @@
        frag->msg_header.is_ccs = is_ccs;

        pq_64bit_init(&seq64);
-       pq_64bit_assign_word(&seq64, epoch<<16 | frag->msg_header.seq);
+       pq_64bit_assign_word(&seq64, frag->msg_header.seq);

        item = pitem_new(seq64, frag);
        pq_64bit_free(&seq64);


______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
Development Mailing List                       openssl-dev@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to