From 777abaef01e4cc6f1e223815d599acad7783d21b Mon Sep 17 00:00:00 2001 From: "John W. Bruce" Date: Tue, 15 Jan 2019 16:53:22 -0800 Subject: [PATCH] Add some platform abstractions. (This is a merge of http://go/wvgerrit/70303) This adds a platform.h file to abstract some of the differences between Windows and POSIX platforms. This includes ntohl, setenv, and ssize_t. Bug: 122953649 Test: Android Unit Tests Change-Id: I3235f3f284b53d24d7365ff3f4a06dcd9b403697 --- .../cdm/core/include/device_files.h | 3 +- libwvdrmengine/cdm/core/src/buffer_reader.cpp | 1 + .../cdm/core/src/crypto_session.cpp | 2 +- .../cdm/core/src/initialization_data.cpp | 2 +- libwvdrmengine/cdm/core/src/license.cpp | 2 +- .../cdm/core/test/buffer_reader_test.cpp | 1 - .../cdm/core/test/crypto_session_unittest.cpp | 2 +- .../cdm/core/test/generic_crypto_unittest.cpp | 2 +- .../test/initialization_data_unittest.cpp | 2 +- libwvdrmengine/cdm/core/test/test_base.cpp | 1 + libwvdrmengine/cdm/util/include/file_store.h | 3 +- libwvdrmengine/cdm/util/include/platform.h | 33 +++++++++++++++++++ libwvdrmengine/cdm/util/src/platform.cpp | 21 ++++++++++++ .../cdm/util/src/string_conversions.cpp | 2 +- .../ref/src/oemcrypto_engine_ref.cpp | 1 - .../ref/src/oemcrypto_keybox_ref.cpp | 5 +-- .../oemcrypto/ref/src/oemcrypto_session.cpp | 2 +- libwvdrmengine/oemcrypto/ref/src/wvcrc.cpp | 2 +- .../oemcrypto/test/oec_session_util.cpp | 2 +- .../oemcrypto/test/oemcrypto_test.cpp | 3 +- libwvdrmengine/oemcrypto/test/wvcrc.cpp | 2 +- 21 files changed, 74 insertions(+), 20 deletions(-) create mode 100644 libwvdrmengine/cdm/util/include/platform.h create mode 100644 libwvdrmengine/cdm/util/src/platform.cpp diff --git a/libwvdrmengine/cdm/core/include/device_files.h b/libwvdrmengine/cdm/core/include/device_files.h index cf780d9c..fc1732e2 100644 --- a/libwvdrmengine/cdm/core/include/device_files.h +++ b/libwvdrmengine/cdm/core/include/device_files.h @@ -5,14 +5,13 @@ #ifndef WVCDM_CORE_DEVICE_FILES_H_ #define WVCDM_CORE_DEVICE_FILES_H_ -#include - #include #include #include #include "device_files.pb.h" #include "disallow_copy_and_assign.h" +#include "platform.h" #include "wv_cdm_types.h" #if defined(UNIT_TEST) diff --git a/libwvdrmengine/cdm/core/src/buffer_reader.cpp b/libwvdrmengine/cdm/core/src/buffer_reader.cpp index 3a5530eb..0b5492b3 100644 --- a/libwvdrmengine/cdm/core/src/buffer_reader.cpp +++ b/libwvdrmengine/cdm/core/src/buffer_reader.cpp @@ -5,6 +5,7 @@ #include "buffer_reader.h" #include "log.h" +#include "platform.h" namespace wvcdm { diff --git a/libwvdrmengine/cdm/core/src/crypto_session.cpp b/libwvdrmengine/cdm/core/src/crypto_session.cpp index 32d08e2d..d3c6acfe 100644 --- a/libwvdrmengine/cdm/core/src/crypto_session.cpp +++ b/libwvdrmengine/cdm/core/src/crypto_session.cpp @@ -7,7 +7,6 @@ #include "crypto_session.h" -#include // needed for ntoh() #include #include #include @@ -20,6 +19,7 @@ #include "openssl/asn1.h" #include "openssl/sha.h" #include "openssl/x509v3.h" +#include "platform.h" #include "properties.h" #include "pst_report.h" #include "string_conversions.h" diff --git a/libwvdrmengine/cdm/core/src/initialization_data.cpp b/libwvdrmengine/cdm/core/src/initialization_data.cpp index 8ddbf450..1c52741f 100644 --- a/libwvdrmengine/cdm/core/src/initialization_data.cpp +++ b/libwvdrmengine/cdm/core/src/initialization_data.cpp @@ -4,7 +4,6 @@ #include "initialization_data.h" -#include #include #include @@ -12,6 +11,7 @@ #include "cdm_engine.h" #include "jsmn.h" #include "log.h" +#include "platform.h" #include "properties.h" #include "string_conversions.h" #include "wv_cdm_constants.h" diff --git a/libwvdrmengine/cdm/core/src/license.cpp b/libwvdrmengine/cdm/core/src/license.cpp index c3665e58..2eb06449 100644 --- a/libwvdrmengine/cdm/core/src/license.cpp +++ b/libwvdrmengine/cdm/core/src/license.cpp @@ -4,7 +4,6 @@ #include "license.h" -#include #include #include @@ -15,6 +14,7 @@ #include "crypto_session.h" #include "device_files.h" #include "log.h" +#include "platform.h" #include "policy_engine.h" #include "privacy_crypto.h" #include "properties.h" diff --git a/libwvdrmengine/cdm/core/test/buffer_reader_test.cpp b/libwvdrmengine/cdm/core/test/buffer_reader_test.cpp index e3707ba5..e54e1805 100644 --- a/libwvdrmengine/cdm/core/test/buffer_reader_test.cpp +++ b/libwvdrmengine/cdm/core/test/buffer_reader_test.cpp @@ -4,7 +4,6 @@ #include #include -#include #include #include "buffer_reader.h" diff --git a/libwvdrmengine/cdm/core/test/crypto_session_unittest.cpp b/libwvdrmengine/cdm/core/test/crypto_session_unittest.cpp index c7262c33..463cc87c 100644 --- a/libwvdrmengine/cdm/core/test/crypto_session_unittest.cpp +++ b/libwvdrmengine/cdm/core/test/crypto_session_unittest.cpp @@ -2,7 +2,6 @@ // source code may only be used and distributed under the Widevine Master // License Agreement. -#include #include #include @@ -13,6 +12,7 @@ #include "key_session.h" #include "license_protocol.pb.h" #include "log.h" +#include "platform.h" #include "metrics.pb.h" #include "metrics_collections.h" #include "test_base.h" diff --git a/libwvdrmengine/cdm/core/test/generic_crypto_unittest.cpp b/libwvdrmengine/cdm/core/test/generic_crypto_unittest.cpp index e992761b..1d88de66 100644 --- a/libwvdrmengine/cdm/core/test/generic_crypto_unittest.cpp +++ b/libwvdrmengine/cdm/core/test/generic_crypto_unittest.cpp @@ -7,7 +7,6 @@ // This is because we need a valid RSA certificate, and will attempt to connect // to the provisioning server to request one if we don't. -#include #include #include #include @@ -19,6 +18,7 @@ #include "oec_session_util.h" #include "oemcrypto_session_tests_helper.h" #include "oemcrypto_types.h" +#include "platform.h" #include "properties.h" #include "string_conversions.h" #include "test_base.h" diff --git a/libwvdrmengine/cdm/core/test/initialization_data_unittest.cpp b/libwvdrmengine/cdm/core/test/initialization_data_unittest.cpp index 48cffd97..b67d6d95 100644 --- a/libwvdrmengine/cdm/core/test/initialization_data_unittest.cpp +++ b/libwvdrmengine/cdm/core/test/initialization_data_unittest.cpp @@ -2,13 +2,13 @@ // source code may only be used and distributed under the Widevine Master // License Agreement. -#include #include #include #include "file_store.h" #include "initialization_data.h" #include "license_protocol.pb.h" +#include "platform.h" #include "string_conversions.h" #include "wv_cdm_constants.h" diff --git a/libwvdrmengine/cdm/core/test/test_base.cpp b/libwvdrmengine/cdm/core/test/test_base.cpp index 349cec5c..3ec00250 100644 --- a/libwvdrmengine/cdm/core/test/test_base.cpp +++ b/libwvdrmengine/cdm/core/test/test_base.cpp @@ -21,6 +21,7 @@ #include "log.h" #include "oec_device_features.h" #include "oec_test_data.h" +#include "platform.h" #include "properties.h" #include "test_printers.h" #include "url_request.h" diff --git a/libwvdrmengine/cdm/util/include/file_store.h b/libwvdrmengine/cdm/util/include/file_store.h index 75ad36c1..39c49d79 100644 --- a/libwvdrmengine/cdm/util/include/file_store.h +++ b/libwvdrmengine/cdm/util/include/file_store.h @@ -7,12 +7,13 @@ #ifndef WVCDM_UTIL_FILE_STORE_H_ #define WVCDM_UTIL_FILE_STORE_H_ -#include +#include #include #include #include #include "disallow_copy_and_assign.h" +#include "platform.h" #include "util_common.h" namespace wvcdm { diff --git a/libwvdrmengine/cdm/util/include/platform.h b/libwvdrmengine/cdm/util/include/platform.h new file mode 100644 index 00000000..ad2325da --- /dev/null +++ b/libwvdrmengine/cdm/util/include/platform.h @@ -0,0 +1,33 @@ +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. +// +// Platform - Abstracts some utilities between platforms. +// +#ifndef WVCDM_UTIL_PLATFORM_H_ +#define WVCDM_UTIL_PLATFORM_H_ + +#include "util_common.h" + +#ifdef _WIN32 +# include +# include +# include // For htonl and ntohl. +# define __PRETTY_FUNCTION__ __FUNCTION__ +# undef NO_ERROR +# undef GetCurrentTime +# undef DeleteFile + +using ssize_t = SSIZE_T; + +inline void sleep(int seconds) { + Sleep(seconds * 1000); +} +CORE_UTIL_EXPORT int setenv(const char* key, const char* value, int overwrite); +#else +# include +# include +# include +#endif + +#endif // WVCDM_UTIL_PLATFORM_H_ diff --git a/libwvdrmengine/cdm/util/src/platform.cpp b/libwvdrmengine/cdm/util/src/platform.cpp new file mode 100644 index 00000000..820a4871 --- /dev/null +++ b/libwvdrmengine/cdm/util/src/platform.cpp @@ -0,0 +1,21 @@ +// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. + +#include "platform.h" + +#include "stdlib.h" + +#ifdef _WIN32 + +int setenv(const char* key, const char* value, int overwrite) { + if (!overwrite) { + size_t size; + errno_t err = getenv_s(&size, nullptr, 0, key); + if (err != 0 || size != 0) + return err; // Return 0 if it exists, but don't change. + } + return _putenv_s(key, value); +} + +#endif diff --git a/libwvdrmengine/cdm/util/src/string_conversions.cpp b/libwvdrmengine/cdm/util/src/string_conversions.cpp index d3a561d6..db92f084 100644 --- a/libwvdrmengine/cdm/util/src/string_conversions.cpp +++ b/libwvdrmengine/cdm/util/src/string_conversions.cpp @@ -4,7 +4,6 @@ #include "string_conversions.h" -#include #include #include #include @@ -13,6 +12,7 @@ #include #include "log.h" +#include "platform.h" namespace wvcdm { diff --git a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_engine_ref.cpp b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_engine_ref.cpp index 843d9665..aa2c0448 100644 --- a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_engine_ref.cpp +++ b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_engine_ref.cpp @@ -6,7 +6,6 @@ // #include "oemcrypto_engine_ref.h" -#include #include #include #include diff --git a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_keybox_ref.cpp b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_keybox_ref.cpp index 0118e177..d7ec6355 100644 --- a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_keybox_ref.cpp +++ b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_keybox_ref.cpp @@ -6,13 +6,14 @@ // #include "oemcrypto_keybox_ref.h" -#include // needed for ntoh() #include -#include + +#include #include #include "log.h" #include "oemcrypto_types.h" +#include "platform.h" #include "wvcrc32.h" namespace wvoec_ref { diff --git a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_session.cpp b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_session.cpp index 78cdceb3..7a4ee20b 100644 --- a/libwvdrmengine/oemcrypto/ref/src/oemcrypto_session.cpp +++ b/libwvdrmengine/oemcrypto/ref/src/oemcrypto_session.cpp @@ -6,7 +6,6 @@ // #include "oemcrypto_session.h" -#include #include #include #include @@ -30,6 +29,7 @@ #include "oemcrypto_key_ref.h" #include "oemcrypto_rsa_key_shared.h" #include "oemcrypto_types.h" +#include "platform.h" #include "disallow_copy_and_assign.h" #include "string_conversions.h" #include "wvcrc32.h" diff --git a/libwvdrmengine/oemcrypto/ref/src/wvcrc.cpp b/libwvdrmengine/oemcrypto/ref/src/wvcrc.cpp index e9f97839..b3d0454e 100644 --- a/libwvdrmengine/oemcrypto/ref/src/wvcrc.cpp +++ b/libwvdrmengine/oemcrypto/ref/src/wvcrc.cpp @@ -4,7 +4,7 @@ // // Compute CRC32 Checksum. Needed for verification of WV Keybox. // -#include +#include "platform.h" #include "wvcrc32.h" namespace wvoec_ref { diff --git a/libwvdrmengine/oemcrypto/test/oec_session_util.cpp b/libwvdrmengine/oemcrypto/test/oec_session_util.cpp index cb6e8846..6d8babd3 100644 --- a/libwvdrmengine/oemcrypto/test/oec_session_util.cpp +++ b/libwvdrmengine/oemcrypto/test/oec_session_util.cpp @@ -7,7 +7,6 @@ #include "oec_session_util.h" -#include // needed for ntoh() #include #include #include @@ -32,6 +31,7 @@ #include "oec_device_features.h" #include "oec_test_data.h" #include "oemcrypto_types.h" +#include "platform.h" #include "string_conversions.h" using namespace std; diff --git a/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp b/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp index 39cb1032..f1210ffd 100644 --- a/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp +++ b/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp @@ -4,9 +4,7 @@ // // OEMCrypto unit tests // -#include // needed for ntoh() #include -#include #include #include #include @@ -35,6 +33,7 @@ #include "oec_test_data.h" #include "oemcrypto_session_tests_helper.h" #include "oemcrypto_types.h" +#include "platform.h" #include "string_conversions.h" #include "wvcrc32.h" diff --git a/libwvdrmengine/oemcrypto/test/wvcrc.cpp b/libwvdrmengine/oemcrypto/test/wvcrc.cpp index 2c178f62..3336c77c 100644 --- a/libwvdrmengine/oemcrypto/test/wvcrc.cpp +++ b/libwvdrmengine/oemcrypto/test/wvcrc.cpp @@ -4,7 +4,7 @@ // // Compute CRC32 Checksum. Needed for verification of WV Keybox. // -#include +#include "platform.h" #include "wvcrc32.h" namespace wvoec {