Remove DTLS processed_rcds queue.
authorjsing <jsing@openbsd.org>
Wed, 21 Jul 2021 08:42:14 +0000 (08:42 +0000)
committerjsing <jsing@openbsd.org>
Wed, 21 Jul 2021 08:42:14 +0000 (08:42 +0000)
commit6065f753ed0b0a4f4b255c5caab79530daca354e
tree249ae4b6fe20886d8ebb16e1b21a6ffee2b35edc
parent90aa0eb26c5358023c0966291159d0931e8f59a8
Remove DTLS processed_rcds queue.

When DTLS handshake records are received from the next epoch, we will
potentially queue them on the unprocessed_rcds queue - this is usually
a Finished message that has been received without the ChangeCipherSuite
(CCS) message (which may have been dropped or reordered).

After the epoch increments (due to the CCS being received), the current
code processes all records on the unprocessed queue and immediate queues
them on the processed queue, which dtls1_get_record() then pulls from.
This form of processing only adds more complexity and another queue.

Instead, once the epoch increments, pull a single record from the
unprocessed queue and process it, allowing the contents to be consumed
by the caller. We repeat this process until the unprocessed queue is
empty, at which point we go back to consuming messages from the wire.

ok inoguchi@ tb@
lib/libssl/d1_lib.c
lib/libssl/d1_pkt.c
lib/libssl/dtls_locl.h