From f6330825a306e2f87b0ec322ff798b17ad4fce5d Mon Sep 17 00:00:00 2001 From: conglin Date: Wed, 11 Jun 2025 21:15:49 +0000 Subject: [PATCH] Move json util code to common So that it can be shared by CE CDM extraction tool later. Test: m wv_factory_extraction_tool Bug: 414642286 Change-Id: I6dba70227ce2789dd3686ebbf6ed3a0dbf68dc00 --- .../tools/factory_upload_tool/Android.bp | 1 + .../aosp/src/WidevineProvisioner.cpp | 46 +------------- .../common/include/json_utils.h | 19 ++++++ .../common/src/json_utils.cpp | 63 +++++++++++++++++++ 4 files changed, 84 insertions(+), 45 deletions(-) create mode 100644 libwvdrmengine/tools/factory_upload_tool/common/include/json_utils.h create mode 100644 libwvdrmengine/tools/factory_upload_tool/common/src/json_utils.cpp diff --git a/libwvdrmengine/tools/factory_upload_tool/Android.bp b/libwvdrmengine/tools/factory_upload_tool/Android.bp index ce8adbfa..1bc86162 100644 --- a/libwvdrmengine/tools/factory_upload_tool/Android.bp +++ b/libwvdrmengine/tools/factory_upload_tool/Android.bp @@ -35,6 +35,7 @@ cc_binary { "aosp/src/properties_android.cpp", "aosp/src/BccParser.cpp", "aosp/src/WidevineProvisioner.cpp", + "common/src/json_utils.cpp", "common/src/WidevineOemcryptoInterface.cpp", ], include_dirs: [ diff --git a/libwvdrmengine/tools/factory_upload_tool/aosp/src/WidevineProvisioner.cpp b/libwvdrmengine/tools/factory_upload_tool/aosp/src/WidevineProvisioner.cpp index b0181990..f95be63d 100644 --- a/libwvdrmengine/tools/factory_upload_tool/aosp/src/WidevineProvisioner.cpp +++ b/libwvdrmengine/tools/factory_upload_tool/aosp/src/WidevineProvisioner.cpp @@ -20,6 +20,7 @@ #include #include "WidevineOemcryptoInterface.h" +#include "json_utils.h" #include "log.h" #include "properties.h" #include "string_conversions.h" @@ -32,51 +33,6 @@ const std::vector> kAuthorizedEekRoots = { 0x62, 0xDC, 0x3E, 0x61, 0xAB, 0x57, 0x48, 0x7D, 0x75, 0x37, 0x29, 0xAD, 0x76, 0x80, 0x32, 0xD2, 0xB3, 0xCB, 0x63, 0x58, 0xD9}, }; - -std::string EscapeJson(const std::string& input) { - std::string result; - for (std::string::const_iterator c = input.begin(); c != input.end(); ++c) { - switch (*c) { - case '\"': - result += "\\\""; - break; - case '\\': - result += "\\\\"; - break; - case '\b': - result += "\\b"; - break; - case '\f': - result += "\\f"; - break; - case '\n': - result += "\\n"; - break; - case '\r': - result += "\\r"; - break; - case '\t': - result += "\\t"; - break; - default: - result += *c; - break; - } - } - return result; -} - -std::string StringMapToJson( - const std::map& string_map) { - std::string json = "{"; - for (const auto& value_pair : string_map) { - json.append("\"" + value_pair.first + "\": " + "\"" + value_pair.second + - "\","); - } - json.resize(json.size() - 1); // Remove the last comma. - json.append("}"); - return json; -} } // namespace WidevineProvisioner::WidevineProvisioner() { diff --git a/libwvdrmengine/tools/factory_upload_tool/common/include/json_utils.h b/libwvdrmengine/tools/factory_upload_tool/common/include/json_utils.h new file mode 100644 index 00000000..1a473e07 --- /dev/null +++ b/libwvdrmengine/tools/factory_upload_tool/common/include/json_utils.h @@ -0,0 +1,19 @@ +// Copyright 2025 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine License +// Agreement. + +#ifndef WIDEVINE_JSON_UTILS_H_ +#define WIDEVINE_JSON_UTILS_H_ + +#include +#include + +namespace widevine { + +std::string EscapeJson(const std::string& input); +std::string StringMapToJson( + const std::map& string_map); + +} // namespace widevine + +#endif // WIDEVINE_JSON_UTILS_H_ diff --git a/libwvdrmengine/tools/factory_upload_tool/common/src/json_utils.cpp b/libwvdrmengine/tools/factory_upload_tool/common/src/json_utils.cpp new file mode 100644 index 00000000..7cb8a669 --- /dev/null +++ b/libwvdrmengine/tools/factory_upload_tool/common/src/json_utils.cpp @@ -0,0 +1,63 @@ +// Copyright 2025 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine License +// Agreement. + +#include "json_utils.h" + +#include + +namespace widevine { + +std::string EscapeJson(const std::string& input) { + std::string result; + for (const char& c : input) { + switch (c) { + case '\"': + result += "\\\""; + break; + case '\\': + result += "\\\\"; + break; + case '\b': + result += "\\b"; + break; + case '\f': + result += "\\f"; + break; + case '\n': + result += "\\n"; + break; + case '\r': + result += "\\r"; + break; + case '\t': + result += "\\t"; + break; + default: + result += c; + break; + } + } + return result; +} + +std::string StringMapToJson( + const std::map& string_map) { + if (string_map.empty()) { + return "{}"; + } + std::ostringstream json_stream; + json_stream << "{"; + bool is_first_element = true; + for (const auto& pair : string_map) { + if (!is_first_element) { + json_stream << ","; + } + json_stream << "\"" << pair.first << "\": \"" << pair.second << "\""; + is_first_element = false; + } + json_stream << "}"; + return json_stream.str(); +} + +} // namespace widevine