Commit 40f37188 authored by Matt Caswell's avatar Matt Caswell
Browse files

Introduce a DTLS_RECORD_LAYER type for DTLS record layer state

parent bb4203d9
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -132,6 +132,12 @@ int dtls1_new(SSL *s)
    }
    memset(d1, 0, sizeof *d1);
    
    if(!DTLS_RECORD_LAYER_new(&s->rlayer)) {
        OPENSSL_free(d1);
        ssl3_free(s);
        return 0;
    }

    /* d1->handshake_epoch=0; */

    d1->unprocessed_rcds.q = pqueue_new();
@@ -218,6 +224,8 @@ static void dtls1_clear_queues(SSL *s)

void dtls1_free(SSL *s)
{
    DTLS_RECORD_LAYER_free(&s->rlayer);

    ssl3_free(s);

    dtls1_clear_queues(s);
@@ -242,6 +250,8 @@ void dtls1_clear(SSL *s)
    unsigned int mtu;
    unsigned int link_mtu;

    DTLS_RECORD_LAYER_clear(&s->rlayer);

    if (s->d1) {
        unprocessed_rcds = s->d1->unprocessed_rcds.q;
        processed_rcds = s->d1->processed_rcds.q;
+29 −0
Original line number Diff line number Diff line
@@ -122,6 +122,35 @@
#include <openssl/pqueue.h>
#include <openssl/rand.h>


int DTLS_RECORD_LAYER_new(RECORD_LAYER *rl)
{
    DTLS_RECORD_LAYER *d;
    
    if ((d = OPENSSL_malloc(sizeof *d)) == NULL) {
        return (0);
    }

    rl->d = d;
    DTLS_RECORD_LAYER_clear(rl);

    return 1;
}

void DTLS_RECORD_LAYER_free(RECORD_LAYER *rl)
{
    OPENSSL_free(rl->d);
    rl->d = NULL;
}

void DTLS_RECORD_LAYER_clear(RECORD_LAYER *rl)
{
    DTLS_RECORD_LAYER *d;
    
    d = rl->d;
    memset(d, 0, sizeof *d);
}

/* mod 128 saturating subtract of two 64-bit values in big-endian order */
static int satsub64be(const unsigned char *v1, const unsigned char *v2)
{
+10 −0
Original line number Diff line number Diff line
@@ -142,6 +142,11 @@ typedef struct dtls1_record_data_st {
#  endif
} DTLS1_RECORD_DATA;

typedef struct dtls_record_layer_st {
    /* Temporary member to be removed by subsequent commits */
    int dummy;
} DTLS_RECORD_LAYER;

typedef struct record_layer_st {
    /* The parent SSL structure */
    SSL *s;
@@ -187,6 +192,8 @@ typedef struct record_layer_st {

    unsigned char read_sequence[8];
    unsigned char write_sequence[8];
    
    DTLS_RECORD_LAYER *d;
} RECORD_LAYER;


@@ -223,6 +230,9 @@ __owur int ssl3_write_bytes(SSL *s, int type, const void *buf, int len);
__owur int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
                         unsigned int len, int create_empty_fragment);
__owur int ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek);
int DTLS_RECORD_LAYER_new(RECORD_LAYER *rl);
void DTLS_RECORD_LAYER_free(RECORD_LAYER *rl);
void DTLS_RECORD_LAYER_clear(RECORD_LAYER *rl);
__owur int dtls1_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek);
int dtls1_write_bytes(SSL *s, int type, const void *buf, int len);
__owur int do_dtls1_write(SSL *s, int type, const unsigned char *buf,