Coalesce entries in send_out_buf
This commit is contained in:
+23
-12
@@ -455,20 +455,34 @@ class get_op_writer_t: public msgr_op_writer_t
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void send_out_buf(size_t n)
|
||||||
|
{
|
||||||
|
if (cl->send_list.size() > 0)
|
||||||
|
{
|
||||||
|
iovec& last = cl->send_list.back();
|
||||||
|
if (last.iov_base+last.iov_len == cl->ssl_out_buf+cl->ssl_out_buf_size)
|
||||||
|
{
|
||||||
|
last.iov_len += n;
|
||||||
|
cl->ssl_out_buf_size += n;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cl->send_list.push_back((iovec){ .iov_base = cl->ssl_out_buf+cl->ssl_out_buf_size, .iov_len = n });
|
||||||
|
cl->ssl_out_buf_size += n;
|
||||||
|
}
|
||||||
|
|
||||||
void copy_ssl()
|
void copy_ssl()
|
||||||
{
|
{
|
||||||
size_t prev_size = cl->ssl_out_buf_size;
|
size_t n = 0;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
ssl_extend_buf();
|
ssl_extend_buf();
|
||||||
int r = BIO_read(cl->read_from_ssl, cl->ssl_out_buf+cl->ssl_out_buf_size, cl->ssl_out_buf_cap-cl->ssl_out_buf_size);
|
int r = BIO_read(cl->read_from_ssl, cl->ssl_out_buf+cl->ssl_out_buf_size, cl->ssl_out_buf_cap-cl->ssl_out_buf_size);
|
||||||
if (r > 0)
|
if (r > 0)
|
||||||
cl->ssl_out_buf_size += r;
|
n += r;
|
||||||
} while (cl->ssl_out_buf_size >= cl->ssl_out_buf_cap);
|
} while (cl->ssl_out_buf_size+n >= cl->ssl_out_buf_cap);
|
||||||
if (cl->ssl_out_buf_size > prev_size)
|
if (n > 0)
|
||||||
{
|
send_out_buf(n);
|
||||||
cl->send_list.push_back((iovec){ .iov_base = cl->ssl_out_buf+prev_size, .iov_len = cl->ssl_out_buf_size-prev_size });
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@@ -555,8 +569,7 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
if (cl->write_csum_state && !(flags & WR_NO_CSUM))
|
if (cl->write_csum_state && !(flags & WR_NO_CSUM))
|
||||||
XXH3_64bits_update(cl->write_csum_state, src+from, n);
|
XXH3_64bits_update(cl->write_csum_state, src+from, n);
|
||||||
cl->send_list.push_back((iovec){ .iov_base = cl->ssl_out_buf+cl->ssl_out_buf_size, .iov_len = n });
|
send_out_buf(n);
|
||||||
cl->ssl_out_buf_size += n;
|
|
||||||
cl->write_op_pos += n;
|
cl->write_op_pos += n;
|
||||||
from += n;
|
from += n;
|
||||||
if (from < src_len)
|
if (from < src_len)
|
||||||
@@ -611,9 +624,7 @@ public:
|
|||||||
// Tag is 16 bytes
|
// Tag is 16 bytes
|
||||||
ssl_extend_buf(16);
|
ssl_extend_buf(16);
|
||||||
gcm_op_writer_t::write_tag_to(msgr, cl, cl->ssl_out_buf+cl->ssl_out_buf_size);
|
gcm_op_writer_t::write_tag_to(msgr, cl, cl->ssl_out_buf+cl->ssl_out_buf_size);
|
||||||
// FIXME coalesce entries in ssl_out_buf
|
send_out_buf(16);
|
||||||
cl->send_list.push_back((iovec){ .iov_base = cl->ssl_out_buf+cl->ssl_out_buf_size, .iov_len = 16 });
|
|
||||||
cl->ssl_out_buf_size += 16;
|
|
||||||
gcm_op_writer_t::free_ctx(msgr, cl);
|
gcm_op_writer_t::free_ctx(msgr, cl);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
Reference in New Issue
Block a user