Commit 295c3f41 authored by Matt Caswell's avatar Matt Caswell
Browse files

Move s->rstate to s->rlayer.rstate

parent 7a7048af
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -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);
@@ -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;
            }
        }
@@ -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;
            }
+5 −0
Original line number Diff line number Diff line
@@ -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 */
@@ -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);
@@ -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,
+56 −4
Original line number Diff line number Diff line
@@ -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;
}

@@ -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;
@@ -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)
{
    /*
@@ -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);
@@ -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)
+12 −10
Original line number Diff line number Diff line
@@ -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)
@@ -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) {
@@ -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,
@@ -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);
@@ -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);

@@ -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) {
@@ -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);
+2 −2
Original line number Diff line number Diff line
@@ -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