Move TLS CCS processing into the state machine
[openssl.git] / ssl / record / record.h
index 99af914b5bb957f84b251e400be32986085598a7..5c8fead869881176e1ceceaa3aa15aacc4ae41f5 100644 (file)
  *
  */
 
+#include <openssl/pqueue.h>
+
 /*****************************************************************************
  *                                                                           *
  * These structures should be considered PRIVATE to the record layer. No     *
@@ -130,45 +132,48 @@ typedef struct ssl3_buffer_st {
 #define SEQ_NUM_SIZE                            8
 
 typedef struct ssl3_record_st {
+    /* Record layer version */
+    /* r */
+    int rec_version;
+
     /* type of record */
-    /*
-     * r
-     */ int type;
+    /* r */
+    int type;
+
     /* How many bytes available */
-    /*
-     * rw
-     */ unsigned int length;
+    /* rw */
+    unsigned int length;
+
     /*
      * How many bytes were available before padding was removed? This is used
      * to implement the MAC check in constant time for CBC records.
      */
-    /*
-     * rw
-     */ unsigned int orig_len;
+    /* rw */
+    unsigned int orig_len;
+
     /* read/write offset into 'buf' */
-    /*
-     * r
-     */ unsigned int off;
+    /* r */
+    unsigned int off;
+
     /* pointer to the record data */
-    /*
-     * rw
-     */ unsigned char *data;
+    /* rw */
+    unsigned char *data;
+
     /* where the decode bytes are */
-    /*
-     * rw
-     */ unsigned char *input;
+    /* rw */
+    unsigned char *input;
+
     /* only used with decompression - malloc()ed */
-    /*
-     * r
-     */ unsigned char *comp;
+    /* r */
+    unsigned char *comp;
+
     /* epoch number, needed by DTLS1 */
-    /*
-     * r
-     */ unsigned long epoch;
+    /* r */
+    unsigned long epoch;
+
     /* sequence number, needed by DTLS1 */
-    /*
-     * r
-     */ unsigned char seq_num[SEQ_NUM_SIZE];
+    /* r */
+    unsigned char seq_num[SEQ_NUM_SIZE];
 } SSL3_RECORD;
 
 typedef struct dtls1_bitmap_st {
@@ -297,6 +302,8 @@ typedef struct record_layer_st {
  *                                                                           *
  *****************************************************************************/
 
+#define MIN_SSL2_RECORD_LEN     9
+
 #define RECORD_LAYER_set_read_ahead(rl, ra)     ((rl)->read_ahead = (ra))
 #define RECORD_LAYER_get_read_ahead(rl)         ((rl)->read_ahead)
 #define RECORD_LAYER_get_packet(rl)             ((rl)->packet)
@@ -318,13 +325,14 @@ void RECORD_LAYER_dup(RECORD_LAYER *dst, RECORD_LAYER *src);
 void RECORD_LAYER_reset_read_sequence(RECORD_LAYER *rl);
 void RECORD_LAYER_reset_write_sequence(RECORD_LAYER *rl);
 int RECORD_LAYER_setup_comp_buffer(RECORD_LAYER *rl);
+int RECORD_LAYER_is_sslv2_record(RECORD_LAYER *rl);
+unsigned int RECORD_LAYER_get_rrec_length(RECORD_LAYER *rl);
 __owur int ssl3_pending(const SSL *s);
-__owur int ssl23_read_bytes(SSL *s, int n);
-__owur int ssl23_write_bytes(SSL *s);
 __owur int ssl3_write_bytes(SSL *s, int type, const void *buf, int len);
 __owur int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
                          unsigned int len, int create_empty_fragment);
-__owur int ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek);
+__owur int ssl3_read_bytes(SSL *s, int type, int *recvd_type,
+                           unsigned char *buf, int len, int peek);
 __owur int ssl3_setup_buffers(SSL *s);
 __owur int ssl3_enc(SSL *s, int send_data);
 __owur int n_ssl3_mac(SSL *ssl, unsigned char *md, int send_data);
@@ -338,7 +346,8 @@ void DTLS_RECORD_LAYER_clear(RECORD_LAYER *rl);
 void DTLS_RECORD_LAYER_set_saved_w_epoch(RECORD_LAYER *rl, unsigned short e);
 void DTLS_RECORD_LAYER_clear(RECORD_LAYER *rl);
 void DTLS_RECORD_LAYER_resync_write(RECORD_LAYER *rl);
-__owur int dtls1_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek);
+__owur int dtls1_read_bytes(SSL *s, int type, int *recvd_type,
+                            unsigned char *buf, int len, int peek);
 __owur int dtls1_write_bytes(SSL *s, int type, const void *buf, int len);
 __owur int do_dtls1_write(SSL *s, int type, const unsigned char *buf,
                    unsigned int len, int create_empty_fragement);