return 0;
}
- d1->rcvd_messages = pqueue_new();
- d1->sent_messages = pqueue_new();
-
- if (s->server) {
+ if (s->server)
d1->cookie_len = sizeof(s->d1->cookie);
- }
d1->link_mtu = 0;
d1->mtu = 0;
d1->hello_verify_request = SSL_HVR_NONE;
- if (d1->rcvd_messages == NULL || d1->sent_messages == NULL) {
- pqueue_free(d1->rcvd_messages);
- pqueue_free(d1->sent_messages);
- OPENSSL_free(d1);
- ssl3_free(ssl);
- return 0;
- }
-
s->d1 = d1;
if (!ssl->method->ssl_clear(ssl))
{
pitem *item = NULL;
hm_fragment *frag = NULL;
+ pqueue *rcvd_messages = &s->d1->rcvd_messages;
- while ((item = pqueue_pop(s->d1->rcvd_messages)) != NULL) {
+ while ((item = pqueue_pop(rcvd_messages)) != NULL) {
frag = (hm_fragment *)item->data;
dtls1_hm_fragment_free(frag);
pitem_free(item);
void dtls1_clear_sent_buffer(SSL_CONNECTION *s)
{
pitem *item = NULL;
+ pqueue *sent_messages = &s->d1->sent_messages;
- while ((item = pqueue_pop(s->d1->sent_messages)) != NULL) {
+ while ((item = pqueue_pop(sent_messages)) != NULL) {
dtls_sent_msg *sent_msg = (dtls_sent_msg *)item->data;
if (sent_msg->record_type == SSL3_RT_CHANGE_CIPHER_SPEC
if (s == NULL)
return;
- if (s->d1 != NULL) {
+ if (s->d1 != NULL)
dtls1_clear_queues(s);
- pqueue_free(s->d1->rcvd_messages);
- pqueue_free(s->d1->sent_messages);
- }
DTLS_RECORD_LAYER_free(&s->rlayer);
-
ssl3_free(ssl);
-
OPENSSL_free(s->d1);
s->d1 = NULL;
}
int dtls1_clear(SSL *ssl)
{
- pqueue *rcvd_messages;
- pqueue *sent_messages;
size_t mtu;
size_t link_mtu;
if (s->d1) {
DTLS_timer_cb timer_cb = s->d1->timer_cb;
- rcvd_messages = s->d1->rcvd_messages;
- sent_messages = s->d1->sent_messages;
mtu = s->d1->mtu;
link_mtu = s->d1->link_mtu;
s->d1->mtu = mtu;
s->d1->link_mtu = link_mtu;
}
-
- s->d1->rcvd_messages = rcvd_messages;
- s->d1->sent_messages = sent_messages;
}
if (!ssl3_clear(ssl))
hm_fragment *frag;
int ret;
int chretran = 0;
+ pqueue *rcvd_messages = &s->d1->rcvd_messages;
- iter = pqueue_iterator(s->d1->rcvd_messages);
+ iter = pqueue_iterator(rcvd_messages);
do {
item = pqueue_next(&iter);
if (item == NULL)
* It is safe to pop this message from the queue even though
* we have an active iterator
*/
- pqueue_pop(s->d1->rcvd_messages);
+ pqueue_pop(rcvd_messages);
dtls1_hm_fragment_free(frag);
pitem_free(item);
item = NULL;
* We have fragments for both a ClientHello without
* cookie and one with. Ditch the one without.
*/
- pqueue_pop(s->d1->rcvd_messages);
+ pqueue_pop(rcvd_messages);
dtls1_hm_fragment_free(frag);
pitem_free(item);
item = next;
if (s->d1->handshake_read_seq == frag->msg_header.seq || chretran) {
size_t frag_len = frag->msg_header.frag_len;
- pqueue_pop(s->d1->rcvd_messages);
+
+ pqueue_pop(rcvd_messages);
/* Calls SSLfatal() as required */
ret = dtls1_preprocess_fragment(s, &frag->msg_header);
memset(seq64be, 0, sizeof(seq64be));
seq64be[6] = (unsigned char)(msg_hdr->seq >> 8);
seq64be[7] = (unsigned char)msg_hdr->seq;
- item = pqueue_find(s->d1->rcvd_messages, seq64be);
+ item = pqueue_find(&s->d1->rcvd_messages, seq64be);
if (item == NULL) {
frag = dtls1_hm_fragment_new(msg_hdr->msg_len, 1);
if (item == NULL)
goto err;
- item = pqueue_insert(s->d1->rcvd_messages, item);
+ item = pqueue_insert(&s->d1->rcvd_messages, item);
/*
* pqueue_insert fails iff a duplicate item is inserted. However,
* |item| cannot be a duplicate. If it were, |pqueue_find|, above,
memset(seq64be, 0, sizeof(seq64be));
seq64be[6] = (unsigned char)(msg_hdr->seq >> 8);
seq64be[7] = (unsigned char)msg_hdr->seq;
- item = pqueue_find(s->d1->rcvd_messages, seq64be);
+ item = pqueue_find(&s->d1->rcvd_messages, seq64be);
/*
* If we already have an entry and this one is a fragment, don't discard
if (item == NULL)
goto err;
- item = pqueue_insert(s->d1->rcvd_messages, item);
+ item = pqueue_insert(&s->d1->rcvd_messages, item);
/*
* pqueue_insert fails iff a duplicate item is inserted. However,
* |item| cannot be a duplicate. If it were, |pqueue_find|, above,
int dtls1_retransmit_sent_messages(SSL_CONNECTION *s)
{
- piterator iter = pqueue_iterator(s->d1->sent_messages);
+ piterator iter = pqueue_iterator(&s->d1->sent_messages);
pitem *item;
int found = 0;
return 0;
}
- pqueue_insert(s->d1->sent_messages, item);
+ pqueue_insert(&s->d1->sent_messages, item);
return 1;
}
seq64be[6] = (unsigned char)(seq >> 8);
seq64be[7] = (unsigned char)seq;
- item = pqueue_find(s->d1->sent_messages, seq64be);
+ item = pqueue_find(&s->d1->sent_messages, seq64be);
if (item == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
*found = 0;