aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamuel Williams <samuel.williams@oriontransfer.co.nz>2024-04-22 20:48:40 +1200
committerSamuel Williams <samuel.williams@oriontransfer.co.nz>2024-04-27 23:59:24 +1200
commitc99d24cee96b775f1d899d70ee49a16d810b2ebb (patch)
tree056dd5bc98f86f1b87ce7037dfb0d20ded9123b8
parent362a69a36f5c437ace2bc9207dcb01d38008198f (diff)
downloadruby-openssl-c99d24cee96b775f1d899d70ee49a16d810b2ebb.tar.gz
Introduce basic support for `close_read` and `close_write`.
-rw-r--r--lib/openssl/ssl.rb11
-rw-r--r--test/openssl/test_ssl.rb24
2 files changed, 35 insertions, 0 deletions
diff --git a/lib/openssl/ssl.rb b/lib/openssl/ssl.rb
index 75a74a3f..0568276a 100644
--- a/lib/openssl/ssl.rb
+++ b/lib/openssl/ssl.rb
@@ -459,6 +459,17 @@ ssbzSibBsu/6iGtCOGEoXJf//////////wIBAg==
nil
end
+ # Close the stream for reading.
+ def close_read
+ # Unsupported and ignored.
+ # Just don't read any more.
+ end
+
+ # Close the stream for writing.
+ def close_write
+ stop
+ end
+
private
def using_anon_cipher?
diff --git a/test/openssl/test_ssl.rb b/test/openssl/test_ssl.rb
index 66d63a98..3df391fa 100644
--- a/test/openssl/test_ssl.rb
+++ b/test/openssl/test_ssl.rb
@@ -117,6 +117,30 @@ class OpenSSL::TestSSL < OpenSSL::SSLTestCase
}
end
+ def test_socket_close_write
+ server_proc = proc do |ctx, ssl|
+ message = ssl.read
+ ssl.write(message)
+ ssl.close_write
+ ensure
+ ssl.close
+ end
+
+ start_server(server_proc: server_proc) do |port|
+ ctx = OpenSSL::SSL::SSLContext.new
+ ssl = OpenSSL::SSL::SSLSocket.open("127.0.0.1", port, context: ctx)
+ ssl.sync_close = true
+ ssl.connect
+
+ message = "abc"*1024
+ ssl.write message
+ ssl.close_write
+ assert_equal message, ssl.read
+ ensure
+ ssl&.close
+ end
+ end
+
def test_add_certificate
ctx_proc = -> ctx {
# Unset values set by start_server