X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=blobdiff_plain;f=ssl%2Frecord%2Frec_layer.h;h=6bba44d1d8a4486c7b1e76529b62a3eae3d464d6;hp=648fd3cdd55f22b211e2fbd2c65a4b8577127862;hb=bb4203d97e7b3350fe501d90485526a6e5dc1e3e;hpb=af9752e5faff5dd3c82fc2d02d1e7ad457ccb84a diff --git a/ssl/record/rec_layer.h b/ssl/record/rec_layer.h index 648fd3cdd5..6bba44d1d8 100644 --- a/ssl/record/rec_layer.h +++ b/ssl/record/rec_layer.h @@ -132,6 +132,16 @@ typedef struct record_pqueue_st { pqueue q; } record_pqueue; +typedef struct dtls1_record_data_st { + unsigned char *packet; + unsigned int packet_length; + SSL3_BUFFER rbuf; + SSL3_RECORD rrec; +# ifndef OPENSSL_NO_SCTP + struct bio_dgram_sctp_rcvinfo recordinfo; +# endif +} DTLS1_RECORD_DATA; + typedef struct record_layer_st { /* The parent SSL structure */ SSL *s; @@ -140,6 +150,8 @@ typedef struct record_layer_st { * non-blocking reads) */ int read_ahead; + /* where we are when reading */ + int rstate; /* read IO goes into here */ SSL3_BUFFER rbuf; /* write IO goes into here */ @@ -148,6 +160,33 @@ typedef struct record_layer_st { SSL3_RECORD rrec; /* goes out from here */ SSL3_RECORD wrec; + + /* used internally to point at a raw packet */ + unsigned char *packet; + unsigned int packet_length; + + /* number of bytes sent so far */ + unsigned int wnum; + + /* + * storage for Alert/Handshake protocol data received but not yet + * processed by ssl3_read_bytes: + */ + unsigned char alert_fragment[2]; + unsigned int alert_fragment_len; + unsigned char handshake_fragment[4]; + unsigned int handshake_fragment_len; + + /* partial write - check the numbers match */ + /* number bytes written */ + int wpend_tot; + int wpend_type; + /* number of bytes submitted */ + int wpend_ret; + const unsigned char *wpend_buf; + + unsigned char read_sequence[8]; + unsigned char write_sequence[8]; } RECORD_LAYER; @@ -158,15 +197,26 @@ typedef struct record_layer_st { * * *****************************************************************************/ -#define RECORD_LAYER_set_ssl(rl, s) ((rl)->s = (s)) #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_rbuf(rl) (&(rl)->rbuf) -#define RECORD_LAYER_get_wbuf(rl) (&(rl)->wbuf) -#define RECORD_LAYER_get_rrec(rl) (&(rl)->rrec) -#define RECORD_LAYER_get_wrec(rl) (&(rl)->wrec) +#define RECORD_LAYER_setup_comp_buffer(rl) (SSL3_RECORD_setup(&(rl)->rrec)) +#define RECORD_LAYER_get_packet(rl) ((rl)->packet) +#define RECORD_LAYER_get_packet_length(rl) ((rl)->packet_length) +#define RECORD_LAYER_add_packet_length(rl, inc) ((rl)->packet_length += (inc)) +#define RECORD_LAYER_get_read_sequence(rl) ((rl)->read_sequence) +#define RECORD_LAYER_get_write_sequence(rl) ((rl)->write_sequence) +void RECORD_LAYER_init(RECORD_LAYER *rl, SSL *s); void RECORD_LAYER_clear(RECORD_LAYER *rl); +void RECORD_LAYER_release(RECORD_LAYER *rl); +int RECORD_LAYER_read_pending(RECORD_LAYER *rl); +int RECORD_LAYER_write_pending(RECORD_LAYER *rl); +int RECORD_LAYER_set_data(RECORD_LAYER *rl, const unsigned char *buf, int len); +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); +void RECORD_LAYER_set_write_sequence(RECORD_LAYER *rl, const unsigned char *ws); +__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); @@ -182,11 +232,20 @@ void dtls1_reset_seq_numbers(SSL *s, int rw); /***************************************************************************** * * - * The following functions are private to the record layer. They should not * - * be used outside of the record layer. * + * The following macros/functions are private to the record layer. They * + * should not be used outside of the record layer. * * * *****************************************************************************/ +#define RECORD_LAYER_get_rbuf(rl) (&(rl)->rbuf) +#define RECORD_LAYER_get_wbuf(rl) (&(rl)->wbuf) +#define RECORD_LAYER_get_rrec(rl) (&(rl)->rrec) +#define RECORD_LAYER_get_wrec(rl) (&(rl)->wrec) +#define RECORD_LAYER_set_packet(rl, p) ((rl)->packet = (p)) +#define RECORD_LAYER_reset_packet_length(rl) ((rl)->packet_length = 0) +#define RECORD_LAYER_get_rstate(rl) ((rl)->rstate) +#define RECORD_LAYER_set_rstate(rl, st) ((rl)->rstate = (st)) + __owur int ssl3_read_n(SSL *s, int n, int max, int extend); __owur int ssl3_write_pending(SSL *s, int type, const unsigned char *buf, unsigned int len);