diff options
author | Jonathan Bastien-Filiatrault <joe@x2a.org> | 2009-08-03 21:42:21 -0400 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2011-02-17 22:43:19 +0100 |
commit | 9146c8b33956ba1f84fb94f3110f5758080d379b (patch) | |
tree | 777fb619997619d3aa1ff558334dcf8b5f84097e | |
parent | d36efeead48027dc8ea4f05dac89c1ea65f45d6a (diff) | |
download | gnutls-9146c8b33956ba1f84fb94f3110f5758080d379b.tar.gz |
Add structures for the buffered outgoing flight.
Signed-off-by: Nikos Mavrogiannopoulos <nmav@gnutls.org>
-rw-r--r-- | lib/gnutls_int.h | 25 | ||||
-rw-r--r-- | lib/gnutls_state.c | 3 |
2 files changed, 28 insertions, 0 deletions
diff --git a/lib/gnutls_int.h b/lib/gnutls_int.h index 7a54723224..eb84130334 100644 --- a/lib/gnutls_int.h +++ b/lib/gnutls_int.h @@ -526,6 +526,27 @@ typedef struct int free_rsa_params; } internal_params_st; +struct dtls_hsk_retransmit_buffer; +typedef struct dtls_hsk_retransmit_buffer dtls_hsk_retransmit_buffer; + +/* This is a linked list used to buffer the next flight of outgoing + handshake messages. Messages are queued whole; they are fragmented + dynamically on transmit. */ +struct dtls_hsk_retransmit_buffer +{ + dtls_hsk_retransmit_buffer *next; + + /* The actual handshake message */ + gnutls_datum_t msg; + + /* Record layer epoch of message */ + uint16_t epoch; + + /* Handshake layer type and sequence of message */ + gnutls_handshake_description_t type; + uint16_t sequence; +}; + /* DTLS session state */ typedef struct @@ -540,6 +561,10 @@ typedef struct uint16_t hsk_write_seq; uint16_t hsk_read_seq; uint16_t hsk_mtu; + + /* Head of the next outgoing flight. */ + dtls_hsk_retransmit_buffer *retransmit; + dtls_hsk_retransmit_buffer **retransmit_end; } dtls_st; diff --git a/lib/gnutls_state.c b/lib/gnutls_state.c index 743975db26..afdbb02009 100644 --- a/lib/gnutls_state.c +++ b/lib/gnutls_state.c @@ -391,6 +391,9 @@ gnutls_init_dtls (gnutls_session_t * session, (*session)->internals.dtls.hsk_mtu = DTLS_DEFAULT_MTU; (*session)->internals.transport = GNUTLS_DGRAM; + /* Initialize pointer used to enqueue messages for retransmit. */ + (*session)->internals.dtls.retransmit_end = &(*session)->internals.dtls.retransmit; + return 0; } |