Commit af9752e5 authored by Matt Caswell's avatar Matt Caswell
Browse files

Create RECORD_LAYER_clear function.

parent a0682a5e
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -166,6 +166,7 @@ typedef struct record_layer_st {
#define RECORD_LAYER_get_rrec(rl)               (&(rl)->rrec)
#define RECORD_LAYER_get_wrec(rl)               (&(rl)->wrec)

void RECORD_LAYER_clear(RECORD_LAYER *rl);
__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);
+27 −0
Original line number Diff line number Diff line
@@ -132,6 +132,33 @@
# define EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK 0
#endif

void RECORD_LAYER_clear(RECORD_LAYER *rl)
{
    unsigned char *rp, *wp;
    size_t rlen, wlen;
    int read_ahead;
    SSL *s;

    s = rl->s;
    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 (RECORD_LAYER));
    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
     * previously get reset by SSL_clear...so I'll keep it that way..but is
     * that right?
     */
    rl->read_ahead = read_ahead;
    rl->s = s;
}

int ssl3_read_n(SSL *s, int n, int max, int extend)
{
    /*
+1 −21
Original line number Diff line number Diff line
@@ -189,10 +189,6 @@ SSL3_ENC_METHOD ssl3_undef_enc_method = {

int SSL_clear(SSL *s)
{
    unsigned char *rp, *wp;
    size_t rlen, wlen;
    int read_ahead;

    if (s->method == NULL) {
        SSLerr(SSL_F_SSL_CLEAR, SSL_R_NO_METHOD_SPECIFIED);
        return (0);
@@ -245,23 +241,7 @@ int SSL_clear(SSL *s)
    } else
        s->method->ssl_clear(s);

    read_ahead = RECORD_LAYER_get_read_ahead(&s->rlayer);
    rp = SSL3_BUFFER_get_buf(RECORD_LAYER_get_rbuf(&s->rlayer));
    rlen = SSL3_BUFFER_get_len(RECORD_LAYER_get_rbuf(&s->rlayer));
    wp = SSL3_BUFFER_get_buf(RECORD_LAYER_get_wbuf(&s->rlayer));
    wlen = SSL3_BUFFER_get_len(RECORD_LAYER_get_wbuf(&s->rlayer));
    memset(&s->rlayer, 0, sizeof s->rlayer);
    SSL3_BUFFER_set_buf(RECORD_LAYER_get_rbuf(&s->rlayer), rp);
    SSL3_BUFFER_set_len(RECORD_LAYER_get_rbuf(&s->rlayer), rlen);
    SSL3_BUFFER_set_buf(RECORD_LAYER_get_wbuf(&s->rlayer), wp);
    SSL3_BUFFER_set_len(RECORD_LAYER_get_wbuf(&s->rlayer), wlen);

    /* Do I need to do this? 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?
     */
    RECORD_LAYER_set_read_ahead(&s->rlayer, read_ahead);
    RECORD_LAYER_set_ssl(&s->rlayer, s);
    RECORD_LAYER_clear(&s->rlayer);

    return (1);
}