libchromeos: Implement chromeos::Stream-based BIO for OpenSSL
In order to implement a TLS/SSL stream, OpenSSL requires BIO-based
abstraction around our Stream classes. This change adds limited support
for chromeos::Stream interface for OpenSSL's BIO framework.
A new function chromeos::BIO_new_stream() can be used to create a BIO*
that has a reference to underlying chromeos::Stream and then using
BIO_read() and BIO_write() will end up calling Stream::ReadNonBlocking()
and Stream::WriteNonBlocking().
This functionality is going to be used in a follow-up CL that implements
a TLS stream on a socket.
BUG=brillo:191
TEST=`FEATURES=test emerge-link libchromeos`
Change-Id: I59965961bf4f1906c4a6b4ce581d7846f7f38047
Reviewed-on: https://chromium-review.googlesource.com/269802
Reviewed-by: Alex Vakulenko <avakulenko@chromium.org>
Commit-Queue: Alex Vakulenko <avakulenko@chromium.org>
Tested-by: Alex Vakulenko <avakulenko@chromium.org>
diff --git a/libchromeos.gypi b/libchromeos.gypi
index e9be8e9..b227a73 100644
--- a/libchromeos.gypi
+++ b/libchromeos.gypi
@@ -126,11 +126,25 @@
'dependencies': [
'libchromeos-core-<(libbase_ver)',
],
+ 'variables': {
+ 'exported_deps': [
+ 'openssl',
+ ],
+ 'deps': ['<@(exported_deps)'],
+ },
+ 'all_dependent_settings': {
+ 'variables': {
+ 'deps': [
+ '<@(exported_deps)',
+ ],
+ },
+ },
'sources': [
'chromeos/streams/file_stream.cc',
'chromeos/streams/input_stream_set.cc',
'chromeos/streams/memory_containers.cc',
'chromeos/streams/memory_stream.cc',
+ 'chromeos/streams/openssl_stream_bio.cc',
'chromeos/streams/stream.cc',
'chromeos/streams/stream_errors.cc',
'chromeos/streams/stream_utils.cc',
@@ -315,6 +329,7 @@
'chromeos/streams/input_stream_set_unittest.cc',
'chromeos/streams/memory_containers_unittest.cc',
'chromeos/streams/memory_stream_unittest.cc',
+ 'chromeos/streams/openssl_stream_bio_unittests.cc',
'chromeos/streams/stream_unittest.cc',
'chromeos/streams/stream_utils_unittest.cc',
'chromeos/strings/string_utils_unittest.cc',