void RECORD_LAYER_init(RECORD_LAYER *rl, SSL *s)
{
rl->s = s;
+ RECORD_LAYER_set_first_record(&s->rlayer, 1);
SSL3_RECORD_clear(rl->rrec, SSL_MAX_PIPELINES);
}
rl->wpend_buf = NULL;
SSL3_BUFFER_clear(&rl->rbuf);
- for(pipes = 0; pipes < rl->numwpipes; pipes++)
+ for (pipes = 0; pipes < rl->numwpipes; pipes++)
SSL3_BUFFER_clear(&rl->wbuf[pipes]);
rl->numwpipes = 0;
rl->numrpipes = 0;
RECORD_LAYER_reset_read_sequence(rl);
RECORD_LAYER_reset_write_sequence(rl);
-
+
if (rl->d)
DTLS_RECORD_LAYER_clear(rl);
}
else
packlen *= 4;
- wb->buf = OPENSSL_malloc(packlen);
- if (wb->buf == NULL) {
+ if (!ssl3_setup_write_buffer(s, 1, packlen)) {
SSLerr(SSL_F_SSL3_WRITE_BYTES, ERR_R_MALLOC_FAILURE);
return -1;
}
- wb->len = packlen;
} else if (tot == len) { /* done? */
- OPENSSL_free(wb->buf); /* free jumbo buffer */
- wb->buf = NULL;
+ /* free jumbo buffer */
+ ssl3_release_write_buffer(s);
return tot;
}
n = (len - tot);
for (;;) {
if (n < 4 * max_send_fragment) {
- OPENSSL_free(wb->buf); /* free jumbo buffer */
- wb->buf = NULL;
+ /* free jumbo buffer */
+ ssl3_release_write_buffer(s);
break;
}
sizeof(mb_param), &mb_param);
if (packlen <= 0 || packlen > (int)wb->len) { /* never happens */
- OPENSSL_free(wb->buf); /* free jumbo buffer */
- wb->buf = NULL;
+ /* free jumbo buffer */
+ ssl3_release_write_buffer(s);
break;
}
i = ssl3_write_pending(s, type, &buf[tot], nw);
if (i <= 0) {
if (i < 0 && (!s->wbio || !BIO_should_retry(s->wbio))) {
- OPENSSL_free(wb->buf);
- wb->buf = NULL;
+ /* free jumbo buffer */
+ ssl3_release_write_buffer(s);
}
s->rlayer.wnum = tot;
return i;
}
if (i == (int)n) {
- OPENSSL_free(wb->buf); /* free jumbo buffer */
- wb->buf = NULL;
+ /* free jumbo buffer */
+ ssl3_release_write_buffer(s);
return tot + i;
}
n -= i;
}
if (s->rlayer.numwpipes < numpipes)
- if (!ssl3_setup_write_buffer(s, numpipes))
+ if (!ssl3_setup_write_buffer(s, numpipes, 0))
return -1;
if (totlen == 0 && !create_empty_fragment)
goto f_err;
}
- if(s->method->version == TLS_ANY_VERSION
+ if (s->method->version == TLS_ANY_VERSION
&& (s->server || rr->type != SSL3_RT_ALERT)) {
/*
* If we've got this far and still haven't decided on what version