bio: use splice! to reduce copy

master
nixo 2020-10-26 21:08:22 +01:00
parent 9df4760370
commit 0c68821bbc
2 changed files with 7 additions and 5 deletions

View File

@ -31,10 +31,12 @@ function bio_write!(client::SSLClient, data)
end end
function bio_read(client::SSLClient) function bio_read(client::SSLClient)
buff = Vector{UInt8}(undef, 64) buff_length = 64
buff = Vector{UInt8}(undef, buff_length)
n = ccall((:BIO_read, libssl), Cint, (Ptr{Cvoid},Ptr{Cvoid},Cint), n = ccall((:BIO_read, libssl), Cint, (Ptr{Cvoid},Ptr{Cvoid},Cint),
client.wbio, buff, length(buff)) client.wbio, buff, buff_length)
n, n > 0 ? buff[1:n] : buff n > 0 && splice!(buff, (n+1):buff_length)
n, buff
end end
bio_test_flags(bio, flags) = bio_test_flags(bio, flags) =

View File

@ -37,7 +37,7 @@ function do_encrypt(client)
status = ccall((:SSL_get_error, libssl), SSL_ERRORS, (Ptr{Cvoid}, Cint), status = ccall((:SSL_get_error, libssl), SSL_ERRORS, (Ptr{Cvoid}, Cint),
client.ssl, n) client.ssl, n)
if n > 0 if n > 0
client.encrypt_buf = client.encrypt_buf[(n+1):end] splice!(client.encrypt_buf, 1:n)
while true while true
(n, buf) = bio_read(client) (n, buf) = bio_read(client)
if n > 0 if n > 0
@ -121,7 +121,7 @@ function do_sock_write(client::SSLClient)
n = write(client.sock, client.write_buf) n = write(client.sock, client.write_buf)
# println("Written to the client: $n") # println("Written to the client: $n")
if n > 0 if n > 0
client.write_buf = client.write_buf[(n+1):end] splice!(client.write_buf, 1:n)
return 0 return 0
else else
return -1 return -1