diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2011-02-20 14:06:39 +0100 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2011-02-20 14:06:39 +0100 |
commit | 9b385d3e93c6897744417a56da18086daedace56 (patch) | |
tree | 6c98dfe7dccdc7f35a1527fc3580d03b37d60c23 /lib/gnutls_buffers.c | |
parent | c3508e2eef3379fcb0259faf05946157004082c4 (diff) | |
download | gnutls-9b385d3e93c6897744417a56da18086daedace56.tar.gz |
Cleanups in combination of DTLS and TLS buffers.
Diffstat (limited to 'lib/gnutls_buffers.c')
-rw-r--r-- | lib/gnutls_buffers.c | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/lib/gnutls_buffers.c b/lib/gnutls_buffers.c index 9ba73c8c1f..5c6b17b0df 100644 --- a/lib/gnutls_buffers.c +++ b/lib/gnutls_buffers.c @@ -818,6 +818,7 @@ _gnutls_handshake_io_write_flush (gnutls_session_t session) &session->internals.handshake_send_buffer; gnutls_datum_t msg; int ret; + uint16_t epoch; ssize_t total = 0; mbuffer_st *cur; @@ -830,19 +831,24 @@ _gnutls_handshake_io_write_flush (gnutls_session_t session) for (cur = _mbuffer_get_first (send_buffer, &msg); cur != NULL; cur = _mbuffer_get_first (send_buffer, &msg)) { + epoch = cur->epoch; + ret = _gnutls_send_int (session, cur->type, cur->htype, - EPOCH_WRITE_CURRENT, + epoch, msg.data, msg.size, 0); if (ret >= 0) { - _mbuffer_remove_bytes (send_buffer, ret); + total += ret; + + ret = _mbuffer_remove_bytes (send_buffer, ret); + if (ret == 1) + _gnutls_epoch_refcount_dec(session, epoch); _gnutls_write_log ("HWRITE: wrote %d bytes, %d bytes left.\n", ret, (int) send_buffer->byte_length); - total += ret; } else { @@ -872,23 +878,14 @@ _gnutls_handshake_io_cache_int (gnutls_session_t session, if (IS_DTLS(session)) { - record_parameters_st * params; - int ret; - - ret = _gnutls_epoch_get( session, EPOCH_WRITE_CURRENT, ¶ms); - if (ret < 0) - return gnutls_assert_val(ret); - - bufel->epoch = params->epoch; - bufel->htype = htype; bufel->sequence = session->internals.dtls.hsk_write_seq-1; - - _gnutls_epoch_refcount_inc(params); } send_buffer = &session->internals.handshake_send_buffer; + bufel->epoch = (uint16_t)_gnutls_epoch_refcount_inc(session, EPOCH_WRITE_CURRENT); + bufel->htype = htype; if (bufel->htype == GNUTLS_HANDSHAKE_CHANGE_CIPHER_SPEC) bufel->type = GNUTLS_CHANGE_CIPHER_SPEC; |