Replace the incoming message buffer with a ring buffer.
It has size 7. There's no need for a priority queue structure, especially one
that's O(N^2) anyway.
Change-Id: I7609794aac1925c9bbf3015744cae266dcb79bff
Reviewed-on: https://boringssl-review.googlesource.com/8437
Reviewed-by: Adam Langley <agl@google.com>
diff --git a/ssl/internal.h b/ssl/internal.h
index 64a63d8..369bdcc 100644
--- a/ssl/internal.h
+++ b/ssl/internal.h
@@ -145,7 +145,6 @@
#include <openssl/base.h>
#include <openssl/aead.h>
-#include <openssl/pqueue.h>
#include <openssl/ssl.h>
#include <openssl/stack.h>
@@ -645,6 +644,9 @@
* in a handshake message for |ssl|. */
size_t ssl_max_handshake_message_len(const SSL *ssl);
+/* dtls_clear_incoming_messages releases all buffered incoming messages. */
+void dtls_clear_incoming_messages(SSL *ssl);
+
typedef struct dtls_outgoing_message_st {
uint8_t *data;
uint32_t len;
@@ -922,12 +924,11 @@
/* save last sequence number for retransmissions */
uint8_t last_write_sequence[8];
- /* buffered_messages is a priority queue of incoming handshake messages that
- * have yet to be processed.
- *
- * TODO(davidben): This data structure may as well be a ring buffer of fixed
- * size. */
- pqueue buffered_messages;
+ /* incoming_messages is a ring buffer of incoming handshake messages that have
+ * yet to be processed. The front of the ring buffer is message number
+ * |handshake_read_seq|, at position |handshake_read_seq| %
+ * |SSL_MAX_HANDSHAKE_FLIGHT|. */
+ hm_fragment *incoming_messages[SSL_MAX_HANDSHAKE_FLIGHT];
/* outgoing_messages is the queue of outgoing messages from the last handshake
* flight. */
@@ -1095,7 +1096,6 @@
int dtls1_is_timer_expired(SSL *ssl);
void dtls1_double_timeout(SSL *ssl);
unsigned int dtls1_min_mtu(void);
-void dtls1_hm_fragment_free(hm_fragment *frag);
int dtls1_new(SSL *ssl);
int dtls1_accept(SSL *ssl);