X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=blobdiff_plain;f=ssl%2Frecord%2Frec_layer_s3.c;h=79d3c21fbe8a88f4d41512876b4260251e6bcd9a;hp=c20af880e31c4e744d5dab1085e58da772f8ed7e;hb=b821df5f5b8dbb9bae109ed01076cb4b393b67e0;hpb=13c9bb3ecec5f847b4c5295249e039d386e2d10e diff --git a/ssl/record/rec_layer_s3.c b/ssl/record/rec_layer_s3.c index c20af880e3..79d3c21fbe 100644 --- a/ssl/record/rec_layer_s3.c +++ b/ssl/record/rec_layer_s3.c @@ -142,35 +142,34 @@ void RECORD_LAYER_init(RECORD_LAYER *rl, SSL *s) void RECORD_LAYER_clear(RECORD_LAYER *rl) { - unsigned char *rp, *wp; - size_t rlen, wlen; - int read_ahead; - SSL *s; - DTLS_RECORD_LAYER *d; - - s = rl->s; - d = rl->d; - read_ahead = rl->read_ahead; - rp = SSL3_BUFFER_get_buf(&rl->rbuf); - rlen = SSL3_BUFFER_get_len(&rl->rbuf); - wp = SSL3_BUFFER_get_buf(&rl->wbuf); - wlen = SSL3_BUFFER_get_len(&rl->wbuf); - memset(rl, 0, sizeof(*rl)); - SSL3_BUFFER_set_buf(&rl->rbuf, rp); - SSL3_BUFFER_set_len(&rl->rbuf, rlen); - SSL3_BUFFER_set_buf(&rl->wbuf, wp); - SSL3_BUFFER_set_len(&rl->wbuf, wlen); - - /* Do I need to do this? As far as I can tell read_ahead did not + rl->rstate = SSL_ST_READ_HEADER; + + /* Do I need to clear read_ahead? As far as I can tell read_ahead did not * previously get reset by SSL_clear...so I'll keep it that way..but is * that right? */ - rl->read_ahead = read_ahead; - rl->rstate = SSL_ST_READ_HEADER; - rl->s = s; - rl->d = d; + + rl->packet = NULL; + rl->packet_length = 0; + rl->wnum = 0; + memset(rl->alert_fragment, 0, sizeof(rl->alert_fragment)); + rl->alert_fragment_len = 0; + memset(rl->handshake_fragment, 0, sizeof(rl->handshake_fragment)); + rl->handshake_fragment_len = 0; + rl->wpend_tot = 0; + rl->wpend_type = 0; + rl->wpend_ret = 0; + rl->wpend_buf = NULL; + + SSL3_BUFFER_clear(&rl->rbuf); + SSL3_BUFFER_clear(&rl->wbuf); + SSL3_RECORD_clear(&rl->rrec); + SSL3_RECORD_clear(&rl->wrec); + + memset(rl->read_sequence, 0, sizeof(rl->read_sequence)); + memset(rl->write_sequence, 0, sizeof(rl->write_sequence)); - if (d) + if (rl->d) DTLS_RECORD_LAYER_clear(rl); } @@ -1124,7 +1123,7 @@ int ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek) goto f_err; } - if(s->version == TLS_ANY_VERSION + if(s->method->version == TLS_ANY_VERSION && (s->server || rr->type != SSL3_RT_ALERT)) { /* * If we've got this far and still haven't decided on what version @@ -1493,12 +1492,19 @@ void ssl3_record_sequence_update(unsigned char *seq) } } +/* + * Returns true if the current rrec was sent in SSLv2 backwards compatible + * format and false otherwise. + */ int RECORD_LAYER_is_sslv2_record(RECORD_LAYER *rl) { return SSL3_RECORD_is_sslv2_record(&rl->rrec); } -int RECORD_LAYER_get_rrec_length(RECORD_LAYER *rl) +/* + * Returns the length in bytes of the current rrec + */ +unsigned int RECORD_LAYER_get_rrec_length(RECORD_LAYER *rl) { return SSL3_RECORD_get_length(&rl->rrec); }