Loading ssl/record/d1_pkt.c +3 −3 Original line number Diff line number Diff line Loading @@ -450,7 +450,7 @@ int dtls1_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek) goto start; /* get new packet if necessary */ if ((rr->length == 0) || (s->rstate == SSL_ST_READ_BODY)) { if ((rr->length == 0) || (s->rlayer.rstate == SSL_ST_READ_BODY)) { ret = dtls1_get_record(s); if (ret <= 0) { ret = dtls1_read_failed(s, ret); Loading Loading @@ -522,7 +522,7 @@ int dtls1_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek) rr->length -= n; rr->off += n; if (rr->length == 0) { s->rstate = SSL_ST_READ_HEADER; s->rlayer.rstate = SSL_ST_READ_HEADER; rr->off = 0; } } Loading Loading @@ -629,7 +629,7 @@ int dtls1_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek) */ FIX ME #endif s->rstate = SSL_ST_READ_HEADER; s->rlayer.rstate = SSL_ST_READ_HEADER; rr->length = 0; goto start; } Loading ssl/record/rec_layer.h +5 −0 Original line number Diff line number Diff line Loading @@ -140,6 +140,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 */ Loading Loading @@ -176,6 +178,7 @@ 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); __owur int ssl3_pending(const SSL *s); __owur int ssl23_read_bytes(SSL *s, int n); __owur int ssl23_write_bytes(SSL *s); Loading Loading @@ -203,6 +206,8 @@ void dtls1_reset_seq_numbers(SSL *s, int rw); #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, Loading ssl/record/s3_pkt.c +56 −4 Original line number Diff line number Diff line Loading @@ -163,6 +163,7 @@ void RECORD_LAYER_clear(RECORD_LAYER *rl) * that right? */ rl->read_ahead = read_ahead; rl->rstate = SSL_ST_READ_HEADER; rl->s = s; } Loading @@ -189,7 +190,7 @@ int RECORD_LAYER_set_data(RECORD_LAYER *rl, const unsigned char *buf, int len) { rl->packet_length = len; if(len != 0) { rl->s->rstate = SSL_ST_READ_HEADER; rl->rstate = SSL_ST_READ_HEADER; if (!SSL3_BUFFER_is_initialised(&rl->rbuf)) if (!ssl3_setup_read_buffer(rl->s)) return 0; Loading @@ -201,15 +202,66 @@ int RECORD_LAYER_set_data(RECORD_LAYER *rl, const unsigned char *buf, int len) return 1; } void RECORD_LAYER_dup(RECORD_LAYER *dst, RECORD_LAYER *src) { /* * Currently only called from SSL_dup...which only seems to expect the * rstate to be duplicated and nothing else from the RECORD_LAYER??? */ dst->rstate = src->rstate; } int ssl3_pending(const SSL *s) { if (s->rstate == SSL_ST_READ_BODY) if (s->rlayer.rstate == SSL_ST_READ_BODY) return 0; return (SSL3_RECORD_get_type(&s->rlayer.rrec) == SSL3_RT_APPLICATION_DATA) ? SSL3_RECORD_get_length(&s->rlayer.rrec) : 0; } const char *SSL_rstate_string_long(const SSL *s) { const char *str; switch (s->rlayer.rstate) { case SSL_ST_READ_HEADER: str = "read header"; break; case SSL_ST_READ_BODY: str = "read body"; break; case SSL_ST_READ_DONE: str = "read done"; break; default: str = "unknown"; break; } return (str); } const char *SSL_rstate_string(const SSL *s) { const char *str; switch (s->rlayer.rstate) { case SSL_ST_READ_HEADER: str = "RH"; break; case SSL_ST_READ_BODY: str = "RB"; break; case SSL_ST_READ_DONE: str = "RD"; break; default: str = "unknown"; break; } return (str); } int ssl3_read_n(SSL *s, int n, int max, int extend) { /* Loading Loading @@ -965,7 +1017,7 @@ int ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek) rr = &s->rlayer.rrec; /* get new packet if necessary */ if ((rr->length == 0) || (s->rstate == SSL_ST_READ_BODY)) { if ((rr->length == 0) || (s->rlayer.rstate == SSL_ST_READ_BODY)) { ret = ssl3_get_record(s); if (ret <= 0) return (ret); Loading Loading @@ -1017,7 +1069,7 @@ int ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek) rr->length -= n; rr->off += n; if (rr->length == 0) { s->rstate = SSL_ST_READ_HEADER; s->rlayer.rstate = SSL_ST_READ_HEADER; rr->off = 0; if (s->mode & SSL_MODE_RELEASE_BUFFERS && SSL3_BUFFER_get_left(&s->rlayer.rbuf) == 0) Loading ssl/record/ssl3_record.c +12 −10 Original line number Diff line number Diff line Loading @@ -207,13 +207,13 @@ int ssl3_get_record(SSL *s) again: /* check if we have the header */ if ((s->rstate != SSL_ST_READ_BODY) || if ((RECORD_LAYER_get_rstate(&s->rlayer) != SSL_ST_READ_BODY) || (RECORD_LAYER_get_packet_length(&s->rlayer) < SSL3_RT_HEADER_LENGTH)) { n = ssl3_read_n(s, SSL3_RT_HEADER_LENGTH, SSL3_BUFFER_get_len(&s->rlayer.rbuf), 0); if (n <= 0) return (n); /* error or non-blocking */ s->rstate = SSL_ST_READ_BODY; RECORD_LAYER_set_rstate(&s->rlayer, SSL_ST_READ_BODY); p = RECORD_LAYER_get_packet(&s->rlayer); if (s->msg_callback) Loading Loading @@ -255,10 +255,10 @@ int ssl3_get_record(SSL *s) goto f_err; } /* now s->rstate == SSL_ST_READ_BODY */ /* now s->rlayer.rstate == SSL_ST_READ_BODY */ } /* s->rstate == SSL_ST_READ_BODY, get and decode the data */ /* s->rlayer.rstate == SSL_ST_READ_BODY, get and decode the data */ if (rr->length > RECORD_LAYER_get_packet_length(&s->rlayer) - SSL3_RT_HEADER_LENGTH) { Loading @@ -273,7 +273,8 @@ int ssl3_get_record(SSL *s) */ } s->rstate = SSL_ST_READ_HEADER; /* set state for later operations */ /* set state for later operations */ RECORD_LAYER_set_rstate(&s->rlayer, SSL_ST_READ_HEADER); /* * At this point, s->packet_length == SSL3_RT_HEADER_LNGTH + rr->length, Loading Loading @@ -1399,7 +1400,7 @@ int dtls1_get_record(SSL *s) /* get something from the wire */ again: /* check if we have the header */ if ((s->rstate != SSL_ST_READ_BODY) || if ((RECORD_LAYER_get_rstate(&s->rlayer) != SSL_ST_READ_BODY) || (RECORD_LAYER_get_packet_length(&s->rlayer) < DTLS1_RT_HEADER_LENGTH)) { n = ssl3_read_n(s, DTLS1_RT_HEADER_LENGTH, SSL3_BUFFER_get_len(&s->rlayer.rbuf), 0); Loading @@ -1413,7 +1414,7 @@ int dtls1_get_record(SSL *s) goto again; } s->rstate = SSL_ST_READ_BODY; RECORD_LAYER_set_rstate(&s->rlayer, SSL_ST_READ_BODY); p = RECORD_LAYER_get_packet(&s->rlayer); Loading Loading @@ -1459,10 +1460,10 @@ int dtls1_get_record(SSL *s) goto again; } /* now s->rstate == SSL_ST_READ_BODY */ /* now s->rlayer.rstate == SSL_ST_READ_BODY */ } /* s->rstate == SSL_ST_READ_BODY, get and decode the data */ /* s->rlayer.rstate == SSL_ST_READ_BODY, get and decode the data */ if (rr->length > RECORD_LAYER_get_packet_length(&s->rlayer) - DTLS1_RT_HEADER_LENGTH) { Loading @@ -1481,7 +1482,8 @@ int dtls1_get_record(SSL *s) * DTLS1_RT_HEADER_LENGTH + rr->length */ } s->rstate = SSL_ST_READ_HEADER; /* set state for later operations */ /* set state for later operations */ RECORD_LAYER_set_rstate(&s->rlayer, SSL_ST_READ_HEADER); /* match epochs. NULL means the packet is dropped on the floor */ bitmap = dtls1_get_bitmap(s, rr, &is_next_epoch); Loading ssl/ssl.h +2 −2 Original line number Diff line number Diff line Loading @@ -999,8 +999,8 @@ extern "C" { # define SSL_in_accept_init(a) (SSL_state(a)&SSL_ST_ACCEPT) /* * The following 2 states are kept in ssl->rstate when reads fail, you should * not need these * The following 3 states are kept in ssl->rlayer.rstate when reads fail, you * should not need these */ # define SSL_ST_READ_HEADER 0xF0 # define SSL_ST_READ_BODY 0xF1 Loading Loading
ssl/record/d1_pkt.c +3 −3 Original line number Diff line number Diff line Loading @@ -450,7 +450,7 @@ int dtls1_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek) goto start; /* get new packet if necessary */ if ((rr->length == 0) || (s->rstate == SSL_ST_READ_BODY)) { if ((rr->length == 0) || (s->rlayer.rstate == SSL_ST_READ_BODY)) { ret = dtls1_get_record(s); if (ret <= 0) { ret = dtls1_read_failed(s, ret); Loading Loading @@ -522,7 +522,7 @@ int dtls1_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek) rr->length -= n; rr->off += n; if (rr->length == 0) { s->rstate = SSL_ST_READ_HEADER; s->rlayer.rstate = SSL_ST_READ_HEADER; rr->off = 0; } } Loading Loading @@ -629,7 +629,7 @@ int dtls1_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek) */ FIX ME #endif s->rstate = SSL_ST_READ_HEADER; s->rlayer.rstate = SSL_ST_READ_HEADER; rr->length = 0; goto start; } Loading
ssl/record/rec_layer.h +5 −0 Original line number Diff line number Diff line Loading @@ -140,6 +140,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 */ Loading Loading @@ -176,6 +178,7 @@ 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); __owur int ssl3_pending(const SSL *s); __owur int ssl23_read_bytes(SSL *s, int n); __owur int ssl23_write_bytes(SSL *s); Loading Loading @@ -203,6 +206,8 @@ void dtls1_reset_seq_numbers(SSL *s, int rw); #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, Loading
ssl/record/s3_pkt.c +56 −4 Original line number Diff line number Diff line Loading @@ -163,6 +163,7 @@ void RECORD_LAYER_clear(RECORD_LAYER *rl) * that right? */ rl->read_ahead = read_ahead; rl->rstate = SSL_ST_READ_HEADER; rl->s = s; } Loading @@ -189,7 +190,7 @@ int RECORD_LAYER_set_data(RECORD_LAYER *rl, const unsigned char *buf, int len) { rl->packet_length = len; if(len != 0) { rl->s->rstate = SSL_ST_READ_HEADER; rl->rstate = SSL_ST_READ_HEADER; if (!SSL3_BUFFER_is_initialised(&rl->rbuf)) if (!ssl3_setup_read_buffer(rl->s)) return 0; Loading @@ -201,15 +202,66 @@ int RECORD_LAYER_set_data(RECORD_LAYER *rl, const unsigned char *buf, int len) return 1; } void RECORD_LAYER_dup(RECORD_LAYER *dst, RECORD_LAYER *src) { /* * Currently only called from SSL_dup...which only seems to expect the * rstate to be duplicated and nothing else from the RECORD_LAYER??? */ dst->rstate = src->rstate; } int ssl3_pending(const SSL *s) { if (s->rstate == SSL_ST_READ_BODY) if (s->rlayer.rstate == SSL_ST_READ_BODY) return 0; return (SSL3_RECORD_get_type(&s->rlayer.rrec) == SSL3_RT_APPLICATION_DATA) ? SSL3_RECORD_get_length(&s->rlayer.rrec) : 0; } const char *SSL_rstate_string_long(const SSL *s) { const char *str; switch (s->rlayer.rstate) { case SSL_ST_READ_HEADER: str = "read header"; break; case SSL_ST_READ_BODY: str = "read body"; break; case SSL_ST_READ_DONE: str = "read done"; break; default: str = "unknown"; break; } return (str); } const char *SSL_rstate_string(const SSL *s) { const char *str; switch (s->rlayer.rstate) { case SSL_ST_READ_HEADER: str = "RH"; break; case SSL_ST_READ_BODY: str = "RB"; break; case SSL_ST_READ_DONE: str = "RD"; break; default: str = "unknown"; break; } return (str); } int ssl3_read_n(SSL *s, int n, int max, int extend) { /* Loading Loading @@ -965,7 +1017,7 @@ int ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek) rr = &s->rlayer.rrec; /* get new packet if necessary */ if ((rr->length == 0) || (s->rstate == SSL_ST_READ_BODY)) { if ((rr->length == 0) || (s->rlayer.rstate == SSL_ST_READ_BODY)) { ret = ssl3_get_record(s); if (ret <= 0) return (ret); Loading Loading @@ -1017,7 +1069,7 @@ int ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek) rr->length -= n; rr->off += n; if (rr->length == 0) { s->rstate = SSL_ST_READ_HEADER; s->rlayer.rstate = SSL_ST_READ_HEADER; rr->off = 0; if (s->mode & SSL_MODE_RELEASE_BUFFERS && SSL3_BUFFER_get_left(&s->rlayer.rbuf) == 0) Loading
ssl/record/ssl3_record.c +12 −10 Original line number Diff line number Diff line Loading @@ -207,13 +207,13 @@ int ssl3_get_record(SSL *s) again: /* check if we have the header */ if ((s->rstate != SSL_ST_READ_BODY) || if ((RECORD_LAYER_get_rstate(&s->rlayer) != SSL_ST_READ_BODY) || (RECORD_LAYER_get_packet_length(&s->rlayer) < SSL3_RT_HEADER_LENGTH)) { n = ssl3_read_n(s, SSL3_RT_HEADER_LENGTH, SSL3_BUFFER_get_len(&s->rlayer.rbuf), 0); if (n <= 0) return (n); /* error or non-blocking */ s->rstate = SSL_ST_READ_BODY; RECORD_LAYER_set_rstate(&s->rlayer, SSL_ST_READ_BODY); p = RECORD_LAYER_get_packet(&s->rlayer); if (s->msg_callback) Loading Loading @@ -255,10 +255,10 @@ int ssl3_get_record(SSL *s) goto f_err; } /* now s->rstate == SSL_ST_READ_BODY */ /* now s->rlayer.rstate == SSL_ST_READ_BODY */ } /* s->rstate == SSL_ST_READ_BODY, get and decode the data */ /* s->rlayer.rstate == SSL_ST_READ_BODY, get and decode the data */ if (rr->length > RECORD_LAYER_get_packet_length(&s->rlayer) - SSL3_RT_HEADER_LENGTH) { Loading @@ -273,7 +273,8 @@ int ssl3_get_record(SSL *s) */ } s->rstate = SSL_ST_READ_HEADER; /* set state for later operations */ /* set state for later operations */ RECORD_LAYER_set_rstate(&s->rlayer, SSL_ST_READ_HEADER); /* * At this point, s->packet_length == SSL3_RT_HEADER_LNGTH + rr->length, Loading Loading @@ -1399,7 +1400,7 @@ int dtls1_get_record(SSL *s) /* get something from the wire */ again: /* check if we have the header */ if ((s->rstate != SSL_ST_READ_BODY) || if ((RECORD_LAYER_get_rstate(&s->rlayer) != SSL_ST_READ_BODY) || (RECORD_LAYER_get_packet_length(&s->rlayer) < DTLS1_RT_HEADER_LENGTH)) { n = ssl3_read_n(s, DTLS1_RT_HEADER_LENGTH, SSL3_BUFFER_get_len(&s->rlayer.rbuf), 0); Loading @@ -1413,7 +1414,7 @@ int dtls1_get_record(SSL *s) goto again; } s->rstate = SSL_ST_READ_BODY; RECORD_LAYER_set_rstate(&s->rlayer, SSL_ST_READ_BODY); p = RECORD_LAYER_get_packet(&s->rlayer); Loading Loading @@ -1459,10 +1460,10 @@ int dtls1_get_record(SSL *s) goto again; } /* now s->rstate == SSL_ST_READ_BODY */ /* now s->rlayer.rstate == SSL_ST_READ_BODY */ } /* s->rstate == SSL_ST_READ_BODY, get and decode the data */ /* s->rlayer.rstate == SSL_ST_READ_BODY, get and decode the data */ if (rr->length > RECORD_LAYER_get_packet_length(&s->rlayer) - DTLS1_RT_HEADER_LENGTH) { Loading @@ -1481,7 +1482,8 @@ int dtls1_get_record(SSL *s) * DTLS1_RT_HEADER_LENGTH + rr->length */ } s->rstate = SSL_ST_READ_HEADER; /* set state for later operations */ /* set state for later operations */ RECORD_LAYER_set_rstate(&s->rlayer, SSL_ST_READ_HEADER); /* match epochs. NULL means the packet is dropped on the floor */ bitmap = dtls1_get_bitmap(s, rr, &is_next_epoch); Loading
ssl/ssl.h +2 −2 Original line number Diff line number Diff line Loading @@ -999,8 +999,8 @@ extern "C" { # define SSL_in_accept_init(a) (SSL_state(a)&SSL_ST_ACCEPT) /* * The following 2 states are kept in ssl->rstate when reads fail, you should * not need these * The following 3 states are kept in ssl->rlayer.rstate when reads fail, you * should not need these */ # define SSL_ST_READ_HEADER 0xF0 # define SSL_ST_READ_BODY 0xF1 Loading