PR: 1929
[openssl.git] / ssl / dtls1.h
index a267ae4..884bbd3 100644 (file)
@@ -68,6 +68,7 @@ extern "C" {
 #endif
 
 #define DTLS1_VERSION                  0xFEFF
 #endif
 
 #define DTLS1_VERSION                  0xFEFF
+#define DTLS1_BAD_VER                  0x0100
 
 #if 0
 /* this alert description is not specified anywhere... */
 
 #if 0
 /* this alert description is not specified anywhere... */
@@ -105,7 +106,7 @@ typedef struct dtls1_bitmap_st
 struct dtls1_retransmit_state
        {
        EVP_CIPHER_CTX *enc_write_ctx;  /* cryptographic state */
 struct dtls1_retransmit_state
        {
        EVP_CIPHER_CTX *enc_write_ctx;  /* cryptographic state */
-       const EVP_MD *write_hash;               /* used for mac generation */
+       EVP_MD_CTX *write_hash;                 /* used for mac generation */
 #ifndef OPENSSL_NO_COMP
        COMP_CTX *compress;                             /* compression */
 #else
 #ifndef OPENSSL_NO_COMP
        COMP_CTX *compress;                             /* compression */
 #else
@@ -196,13 +197,26 @@ typedef struct dtls1_state_st
        /* Buffered (sent) handshake records */
        pqueue sent_messages;
 
        /* Buffered (sent) handshake records */
        pqueue sent_messages;
 
-       unsigned int mtu; /* max wire packet size */
+       /* Buffered application records.
+        * Only for records between CCS and Finished
+        * to prevent either protocol violation or
+        * unnecessary message loss.
+        */
+       record_pqueue buffered_app_data;
+
+       unsigned int mtu; /* max DTLS packet size */
 
        struct hm_header_st w_msg_hdr;
        struct hm_header_st r_msg_hdr;
 
        struct dtls1_timeout_st timeout;
 
        struct hm_header_st w_msg_hdr;
        struct hm_header_st r_msg_hdr;
 
        struct dtls1_timeout_st timeout;
-       
+
+       /* Indicates when the last handshake msg sent will timeout */
+       struct timeval next_timeout;
+
+       /* Timeout duration */
+       unsigned short timeout_duration;
+
        /* storage for Alert/Handshake protocol data received but not
         * yet processed by ssl3_read_bytes: */
        unsigned char alert_fragment[DTLS1_AL_HEADER_LENGTH];
        /* storage for Alert/Handshake protocol data received but not
         * yet processed by ssl3_read_bytes: */
        unsigned char alert_fragment[DTLS1_AL_HEADER_LENGTH];