BIO_ADDR *peeraddr = NULL;
struct in_addr ina = {0};
BIO *tmpbio = NULL;
+ QTEST_DATA *bdata = NULL;
+
+ bdata = OPENSSL_zalloc(sizeof(QTEST_DATA));
+ if (bdata == NULL)
+ return 0;
*qtserv = NULL;
if (*cssl == NULL) {
*fault = OPENSSL_zalloc(sizeof(**fault));
if (*fault == NULL)
goto err;
+ bdata->fault = *fault;
}
#ifndef OPENSSL_NO_SSL_TRACE
if (!TEST_ptr(pktsplitbio))
goto err;
cbio = BIO_push(pktsplitbio, cbio);
+ BIO_set_data(pktsplitbio, bdata);
pktsplitbio = BIO_new(bio_f_pkt_split_dgram_filter());
if (!TEST_ptr(pktsplitbio))
goto err;
sbio = BIO_push(pktsplitbio, sbio);
+ BIO_set_data(pktsplitbio, bdata);
}
if ((flags & QTEST_FLAG_NOISE) != 0) {
if (!TEST_ptr(fisbio))
goto err;
- BIO_set_data(fisbio, fault == NULL ? NULL : *fault);
+ BIO_set_data(fisbio, bdata);
if (!BIO_up_ref(sbio))
goto err;
keyfile)))
goto err;
+ bdata->short_conn_id_len = ossl_quic_tserver_get_short_header_conn_id_len(*qtserv);
/* Ownership of fisbio and sbio is now held by *qtserv */
sbio = NULL;
fisbio = NULL;
ossl_quic_tserver_free(*qtserv);
if (fault != NULL)
OPENSSL_free(*fault);
+ OPENSSL_free(bdata);
BIO_free(tmpbio);
if (tracebio != NULL)
*tracebio = NULL;
size_t num_msg, uint64_t flags,
size_t *num_processed)
{
- QTEST_FAULT *fault;
BIO *next = BIO_next(b);
ossl_ssize_t ret = 0;
size_t i = 0, tmpnump;
QUIC_PKT_HDR hdr;
PACKET pkt;
unsigned char *tmpdata;
+ QTEST_DATA *bdata = NULL;
if (next == NULL)
return 0;
- fault = BIO_get_data(b);
- if (fault == NULL
- || (fault->pciphercb == NULL && fault->datagramcb == NULL))
+ bdata = BIO_get_data(b);
+ if (bdata == NULL || bdata->fault == NULL
+ || (bdata->fault->pciphercb == NULL && bdata->fault->datagramcb == NULL))
return BIO_sendmmsg(next, msg, stride, num_msg, flags, num_processed);
if (num_msg == 0) {
}
for (i = 0; i < num_msg; ++i) {
- fault->msg = BIO_MSG_N(msg, stride, i);
+ bdata->fault->msg = BIO_MSG_N(msg, stride, i);
/* Take a copy of the data so that callbacks can modify it */
- tmpdata = OPENSSL_malloc(fault->msg.data_len + GROWTH_ALLOWANCE);
+ tmpdata = OPENSSL_malloc(bdata->fault->msg.data_len + GROWTH_ALLOWANCE);
if (tmpdata == NULL)
return 0;
- memcpy(tmpdata, fault->msg.data, fault->msg.data_len);
- fault->msg.data = tmpdata;
- fault->msgalloc = fault->msg.data_len + GROWTH_ALLOWANCE;
+ memcpy(tmpdata, bdata->fault->msg.data, bdata->fault->msg.data_len);
+ bdata->fault->msg.data = tmpdata;
+ bdata->fault->msgalloc = bdata->fault->msg.data_len + GROWTH_ALLOWANCE;
- if (fault->pciphercb != NULL) {
- if (!PACKET_buf_init(&pkt, fault->msg.data, fault->msg.data_len))
+ if (bdata->fault->pciphercb != NULL) {
+ if (!PACKET_buf_init(&pkt, bdata->fault->msg.data, bdata->fault->msg.data_len))
return 0;
do {
if (!ossl_quic_wire_decode_pkt_hdr(&pkt,
- /*
- * TODO(QUIC SERVER):
- * Needs to be set to the actual short header CID length
- * when testing the server implementation.
- */
- 0,
- 1,
- 0, &hdr, NULL, NULL))
+ bdata->short_conn_id_len,
+ 1, 0, &hdr, NULL, NULL))
goto out;
/*
* hdr.data is const - but its our buffer so casting away the
* const is safe
*/
- if (!fault->pciphercb(fault, &hdr, (unsigned char *)hdr.data,
- hdr.len, fault->pciphercbarg))
+ if (!bdata->fault->pciphercb(bdata->fault, &hdr,
+ (unsigned char *)hdr.data, hdr.len,
+ bdata->fault->pciphercbarg))
goto out;
/*
} while (PACKET_remaining(&pkt) > 0);
}
- if (fault->datagramcb != NULL
- && !fault->datagramcb(fault, &fault->msg, stride,
- fault->datagramcbarg))
+ if (bdata->fault->datagramcb != NULL
+ && !bdata->fault->datagramcb(bdata->fault, &bdata->fault->msg, stride,
+ bdata->fault->datagramcbarg))
goto out;
- if (!BIO_sendmmsg(next, &fault->msg, stride, 1, flags, &tmpnump)) {
+ if (!BIO_sendmmsg(next, &bdata->fault->msg, stride, 1, flags, &tmpnump)) {
*num_processed = i;
goto out;
}
- OPENSSL_free(fault->msg.data);
- fault->msg.data = NULL;
- fault->msgalloc = 0;
+ OPENSSL_free(bdata->fault->msg.data);
+ bdata->fault->msg.data = NULL;
+ bdata->fault->msgalloc = 0;
}
*num_processed = i;
out:
ret = i > 0;
- OPENSSL_free(fault->msg.data);
- fault->msg.data = NULL;
+ OPENSSL_free(bdata->fault->msg.data);
+ bdata->fault->msg.data = NULL;
return ret;
}
return BIO_ctrl(next, cmd, larg, parg);
}
+static int pcipher_destroy(BIO *b)
+{
+ OPENSSL_free(BIO_get_data(b));
+ return 1;
+}
+
BIO_METHOD *qtest_get_bio_method(void)
{
BIO_METHOD *tmp;
return NULL;
if (!TEST_true(BIO_meth_set_sendmmsg(tmp, pcipher_sendmmsg))
- || !TEST_true(BIO_meth_set_ctrl(tmp, pcipher_ctrl)))
+ || !TEST_true(BIO_meth_set_ctrl(tmp, pcipher_ctrl))
+ || !TEST_true(BIO_meth_set_destroy(tmp, pcipher_destroy)))
goto err;
pcipherbiometh = tmp;