Commit 7a7048af authored by Matt Caswell's avatar Matt Caswell
Browse files

Move s->packet and s->packet_length into s->rlayer

parent 24a90afd
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -193,8 +193,8 @@ static int dtls1_copy_record(SSL *s, pitem *item)

    SSL3_BUFFER_release(&s->rlayer.rbuf);

    s->packet = rdata->packet;
    s->packet_length = rdata->packet_length;
    s->rlayer.packet = rdata->packet;
    s->rlayer.packet_length = rdata->packet_length;
    memcpy(&s->rlayer.rbuf, &(rdata->rbuf), sizeof(SSL3_BUFFER));
    memcpy(&s->rlayer.rrec, &(rdata->rrec), sizeof(SSL3_RECORD));

@@ -226,8 +226,8 @@ dtls1_buffer_record(SSL *s, record_pqueue *queue, unsigned char *priority)
        return -1;
    }

    rdata->packet = s->packet;
    rdata->packet_length = s->packet_length;
    rdata->packet = s->rlayer.packet;
    rdata->packet_length = s->rlayer.packet_length;
    memcpy(&(rdata->rbuf), &s->rlayer.rbuf, sizeof(SSL3_BUFFER));
    memcpy(&(rdata->rrec), &s->rlayer.rrec, sizeof(SSL3_RECORD));

@@ -243,8 +243,8 @@ dtls1_buffer_record(SSL *s, record_pqueue *queue, unsigned char *priority)
    }
#endif

    s->packet = NULL;
    s->packet_length = 0;
    s->rlayer.packet = NULL;
    s->rlayer.packet_length = 0;
    memset(&s->rlayer.rbuf, 0, sizeof(SSL3_BUFFER));
    memset(&s->rlayer.rrec, 0, sizeof(SSL3_RECORD));

+10 −0
Original line number Diff line number Diff line
@@ -148,6 +148,11 @@ 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;

} RECORD_LAYER;


@@ -161,6 +166,9 @@ typedef struct record_layer_st {
#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_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))

void RECORD_LAYER_init(RECORD_LAYER *rl, SSL *s);
void RECORD_LAYER_clear(RECORD_LAYER *rl);
@@ -193,6 +201,8 @@ void dtls1_reset_seq_numbers(SSL *s, int rw);
#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)

__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,
+8 −7
Original line number Diff line number Diff line
@@ -94,19 +94,20 @@ int ssl23_read_bytes(SSL *s, int n)
    unsigned char *p;
    int j;

    if (s->packet_length < (unsigned int)n) {
        p = s->packet;
    if (RECORD_LAYER_get_packet_length(&s->rlayer) < (unsigned int)n) {
        p = RECORD_LAYER_get_packet(&s->rlayer);

        for (;;) {
            s->rwstate = SSL_READING;
            j = BIO_read(s->rbio, (char *)&(p[s->packet_length]),
                         n - s->packet_length);
            j = BIO_read(s->rbio,
                (char *)&(p[RECORD_LAYER_get_packet_length(&s->rlayer)]),
                n - RECORD_LAYER_get_packet_length(&s->rlayer));
            if (j <= 0)
                return (j);
            s->rwstate = SSL_NOTHING;
            s->packet_length += j;
            if (s->packet_length >= (unsigned int)n)
                return (s->packet_length);
            RECORD_LAYER_add_packet_length(&s->rlayer, j);
            if (RECORD_LAYER_get_packet_length(&s->rlayer) >= (unsigned int)n)
                return (RECORD_LAYER_get_packet_length(&s->rlayer));
        }
    }
    return (n);
+10 −10
Original line number Diff line number Diff line
@@ -187,7 +187,7 @@ int RECORD_LAYER_write_pending(RECORD_LAYER *rl)

int RECORD_LAYER_set_data(RECORD_LAYER *rl, const unsigned char *buf, int len)
{
    rl->s->packet_length = len;
    rl->packet_length = len;
    if(len != 0) {
        rl->s->rstate = SSL_ST_READ_HEADER;
        if (!SSL3_BUFFER_is_initialised(&rl->rbuf))
@@ -195,7 +195,7 @@ int RECORD_LAYER_set_data(RECORD_LAYER *rl, const unsigned char *buf, int len)
                return 0;
    }

    rl->s->packet = SSL3_BUFFER_get_buf(&rl->rbuf);
    rl->packet = SSL3_BUFFER_get_buf(&rl->rbuf);
    SSL3_BUFFER_set_data(&rl->rbuf, buf, len);

    return 1;
@@ -261,8 +261,8 @@ int ssl3_read_n(SSL *s, int n, int max, int extend)
                rb->offset = align;
            }
        }
        s->packet = rb->buf + rb->offset;
        s->packet_length = 0;
        s->rlayer.packet = rb->buf + rb->offset;
        s->rlayer.packet_length = 0;
        /* ... now we can act as if 'extend' was set */
    }

@@ -280,7 +280,7 @@ int ssl3_read_n(SSL *s, int n, int max, int extend)

    /* if there is enough in the buffer from a previous read, take some */
    if (left >= n) {
        s->packet_length += n;
        s->rlayer.packet_length += n;
        rb->left = left - n;
        rb->offset += n;
        return (n);
@@ -288,15 +288,15 @@ int ssl3_read_n(SSL *s, int n, int max, int extend)

    /* else we need to read more data */

    len = s->packet_length;
    len = s->rlayer.packet_length;
    pkt = rb->buf + align;
    /*
     * Move any available bytes to front of buffer: 'len' bytes already
     * pointed to by 'packet', 'left' extra ones at the end
     */
    if (s->packet != pkt) {     /* len > 0 */
        memmove(pkt, s->packet, len + left);
        s->packet = pkt;
    if (s->rlayer.packet != pkt) {     /* len > 0 */
        memmove(pkt, s->rlayer.packet, len + left);
        s->rlayer.packet = pkt;
        rb->offset = len + align;
    }

@@ -354,7 +354,7 @@ int ssl3_read_n(SSL *s, int n, int max, int extend)
    /* done reading, now the book-keeping */
    rb->offset += n;
    rb->left = left - n;
    s->packet_length += n;
    s->rlayer.packet_length += n;
    s->rwstate = SSL_NOTHING;
    return (n);
}
+1 −1
Original line number Diff line number Diff line
@@ -160,7 +160,7 @@ int ssl3_setup_read_buffer(SSL *s)
        b->len = len;
    }

    s->packet = &(b->buf[0]);
    RECORD_LAYER_set_packet(&s->rlayer, &(b->buf[0]));
    return 1;

 err:
Loading