/* * Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */#include<stdio.h>#include<errno.h>#define USE_SOCKETS#include"../ssl_locl.h"#include<openssl/evp.h>#include<openssl/buffer.h>#include"record_locl.h"intDTLS_RECORD_LAYER_new(RECORD_LAYER*rl){DTLS_RECORD_LAYER*d;if((d=OPENSSL_malloc(sizeof(*d)))==NULL)return(0);rl->d=d;d->unprocessed_rcds.q=pqueue_new();d->processed_rcds.q=pqueue_new();d->buffered_app_data.q=pqueue_new();if(d->unprocessed_rcds.q==NULL||d->processed_rcds.q==NULL||d->buffered_app_data.q==NULL){pqueue_free(d->unprocessed_rcds.q);pqueue_free(d->processed_rcds.q);pqueue_free(d->buffered_app_data.q);OPENSSL_free(d);rl->d=NULL;return(0);}return1;}voidDTLS_RECORD_LAYER_free(RECORD_LAYER*rl){DTLS_RECORD_LAYER_clear(rl);pqueue_free(rl->d->unprocessed_rcds.q);pqueue_free(rl->d->processed_rcds.q);pqueue_free(rl->d->buffered_app_data.q);OPENSSL_free(rl->d);rl->d=NULL;}voidDTLS_RECORD_LAYER_clear(RECORD_LAYER*rl){DTLS_RECORD_LAYER*d;pitem*item=NULL;DTLS1_RECORD_DATA*rdata;pqueue*unprocessed_rcds;pqueue*processed_rcds;pqueue*buffered_app_data;d=rl->d;while((item=pqueue_pop(d->unprocessed_rcds.q))!=NULL){rdata=(DTLS1_RECORD_DATA*)item->data;OPENSSL_free(rdata->rbuf.buf);OPENSSL_free(item->data);pitem_free(item);}while((item=pqueue_pop(d->processed_rcds.q))!=NULL){rdata=(DTLS1_RECORD_DATA*)item->data;OPENSSL_free(rdata->rbuf.buf);OPENSSL_free(item->data);pitem_free(item);}while((item=pqueue_pop(d->buffered_app_data.q))!=NULL){rdata=(DTLS1_RECORD_DATA*)item->data;OPENSSL_free(rdata->rbuf.buf);OPENSSL_free(item->data);pitem_free(item);}unprocessed_rcds=d->unprocessed_rcds.q;processed_rcds=d->processed_rcds.q;buffered_app_data=d->buffered_app_data.q;