*
*/
+#include <openssl/pqueue.h>
+
/*****************************************************************************
* *
* These structures should be considered PRIVATE to the record layer. No *
int left;
} SSL3_BUFFER;
+#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[8];
+ /* r */
+ unsigned char seq_num[SEQ_NUM_SIZE];
} SSL3_RECORD;
typedef struct dtls1_bitmap_st {
- unsigned long map; /* track 32 packets on 32-bit systems and 64
- * - on 64-bit systems */
+ /* Track 32 packets on 32-bit systems and 64 - on 64-bit systems */
+ unsigned long map;
- unsigned char max_seq_num[8]; /* max record number seen so far, 64-bit
- * value in big-endian encoding */
+ /* Max record number seen so far, 64-bit value in big-endian encoding */
+ unsigned char max_seq_num[SEQ_NUM_SIZE];
} DTLS1_BITMAP;
typedef struct record_pqueue_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)
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);