1*20733378SAndroid Build Coastguard Worker #include "libcxx_aconfigd.hpp"
2*20733378SAndroid Build Coastguard Worker
3*20733378SAndroid Build Coastguard Worker #include <stdexcept>
4*20733378SAndroid Build Coastguard Worker
5*20733378SAndroid Build Coastguard Worker #include "com_android_aconfig_new_storage.h"
6*20733378SAndroid Build Coastguard Worker #include "include/aconfigd.h"
7*20733378SAndroid Build Coastguard Worker #include "lib.rs.h"
8*20733378SAndroid Build Coastguard Worker #include "rust/cxx.h"
9*20733378SAndroid Build Coastguard Worker
10*20733378SAndroid Build Coastguard Worker namespace aconfigdwrapper {
11*20733378SAndroid Build Coastguard Worker
12*20733378SAndroid Build Coastguard Worker class CppAconfigd::impl {
13*20733378SAndroid Build Coastguard Worker friend CppAconfigd;
14*20733378SAndroid Build Coastguard Worker
15*20733378SAndroid Build Coastguard Worker public:
impl(const std::string & root_dir,const std::string & storage_records)16*20733378SAndroid Build Coastguard Worker impl(const std::string& root_dir, const std::string& storage_records)
17*20733378SAndroid Build Coastguard Worker : m_aconfigd(std::make_unique<android::aconfigd::Aconfigd>(
18*20733378SAndroid Build Coastguard Worker root_dir, storage_records))
19*20733378SAndroid Build Coastguard Worker
20*20733378SAndroid Build Coastguard Worker {}
21*20733378SAndroid Build Coastguard Worker
22*20733378SAndroid Build Coastguard Worker private:
23*20733378SAndroid Build Coastguard Worker std::unique_ptr<android::aconfigd::Aconfigd> m_aconfigd;
24*20733378SAndroid Build Coastguard Worker };
25*20733378SAndroid Build Coastguard Worker
CppAconfigd(const std::string & str1,const std::string & str2)26*20733378SAndroid Build Coastguard Worker CppAconfigd::CppAconfigd(const std::string& str1, const std::string& str2)
27*20733378SAndroid Build Coastguard Worker : impl(new class CppAconfigd::impl(str1, str2)) {}
28*20733378SAndroid Build Coastguard Worker
initialize_platform_storage() const29*20733378SAndroid Build Coastguard Worker CppVoidResult CppAconfigd::initialize_platform_storage() const {
30*20733378SAndroid Build Coastguard Worker auto init_result = impl->m_aconfigd->InitializePlatformStorage();
31*20733378SAndroid Build Coastguard Worker
32*20733378SAndroid Build Coastguard Worker CppVoidResult result;
33*20733378SAndroid Build Coastguard Worker if (!init_result.ok()) {
34*20733378SAndroid Build Coastguard Worker result.error_message = init_result.error().message();
35*20733378SAndroid Build Coastguard Worker result.status = CppResultStatus::Err;
36*20733378SAndroid Build Coastguard Worker } else {
37*20733378SAndroid Build Coastguard Worker result.status = CppResultStatus::Ok;
38*20733378SAndroid Build Coastguard Worker }
39*20733378SAndroid Build Coastguard Worker return result;
40*20733378SAndroid Build Coastguard Worker }
41*20733378SAndroid Build Coastguard Worker
initialize_mainline_storage() const42*20733378SAndroid Build Coastguard Worker CppVoidResult CppAconfigd::initialize_mainline_storage() const {
43*20733378SAndroid Build Coastguard Worker auto init_result = impl->m_aconfigd->InitializeMainlineStorage();
44*20733378SAndroid Build Coastguard Worker
45*20733378SAndroid Build Coastguard Worker CppVoidResult result;
46*20733378SAndroid Build Coastguard Worker if (!init_result.ok()) {
47*20733378SAndroid Build Coastguard Worker result.error_message = init_result.error().message();
48*20733378SAndroid Build Coastguard Worker result.status = CppResultStatus::Err;
49*20733378SAndroid Build Coastguard Worker } else {
50*20733378SAndroid Build Coastguard Worker result.status = CppResultStatus::Ok;
51*20733378SAndroid Build Coastguard Worker }
52*20733378SAndroid Build Coastguard Worker return result;
53*20733378SAndroid Build Coastguard Worker }
54*20733378SAndroid Build Coastguard Worker
initialize_in_memory_storage_records() const55*20733378SAndroid Build Coastguard Worker CppVoidResult CppAconfigd::initialize_in_memory_storage_records() const {
56*20733378SAndroid Build Coastguard Worker auto init_result = impl->m_aconfigd->InitializeInMemoryStorageRecords();
57*20733378SAndroid Build Coastguard Worker
58*20733378SAndroid Build Coastguard Worker CppVoidResult result;
59*20733378SAndroid Build Coastguard Worker if (!init_result.ok()) {
60*20733378SAndroid Build Coastguard Worker result.error_message = init_result.error().message();
61*20733378SAndroid Build Coastguard Worker result.status = CppResultStatus::Err;
62*20733378SAndroid Build Coastguard Worker } else {
63*20733378SAndroid Build Coastguard Worker result.status = CppResultStatus::Ok;
64*20733378SAndroid Build Coastguard Worker }
65*20733378SAndroid Build Coastguard Worker return result;
66*20733378SAndroid Build Coastguard Worker }
67*20733378SAndroid Build Coastguard Worker
handle_socket_request(const std::string & messages_string) const68*20733378SAndroid Build Coastguard Worker CppStringResult CppAconfigd::handle_socket_request(
69*20733378SAndroid Build Coastguard Worker const std::string& messages_string) const {
70*20733378SAndroid Build Coastguard Worker auto request_messages = android::aconfigd::StorageRequestMessages{};
71*20733378SAndroid Build Coastguard Worker request_messages.ParseFromString(messages_string);
72*20733378SAndroid Build Coastguard Worker
73*20733378SAndroid Build Coastguard Worker auto return_messages = android::aconfigd::StorageReturnMessages();
74*20733378SAndroid Build Coastguard Worker for (auto& request : request_messages.msgs()) {
75*20733378SAndroid Build Coastguard Worker auto* return_msg = return_messages.add_msgs();
76*20733378SAndroid Build Coastguard Worker auto result = impl->m_aconfigd->HandleSocketRequest(request, *return_msg);
77*20733378SAndroid Build Coastguard Worker if (!result.ok()) {
78*20733378SAndroid Build Coastguard Worker auto* errmsg = return_msg->mutable_error_message();
79*20733378SAndroid Build Coastguard Worker *errmsg = result.error().message();
80*20733378SAndroid Build Coastguard Worker }
81*20733378SAndroid Build Coastguard Worker }
82*20733378SAndroid Build Coastguard Worker
83*20733378SAndroid Build Coastguard Worker auto content = std::string();
84*20733378SAndroid Build Coastguard Worker return_messages.SerializeToString(&content);
85*20733378SAndroid Build Coastguard Worker
86*20733378SAndroid Build Coastguard Worker CppStringResult result;
87*20733378SAndroid Build Coastguard Worker result.data = std::make_unique<std::string>(content);
88*20733378SAndroid Build Coastguard Worker result.status = CppResultStatus::Ok;
89*20733378SAndroid Build Coastguard Worker return result;
90*20733378SAndroid Build Coastguard Worker }
91*20733378SAndroid Build Coastguard Worker
new_cpp_aconfigd(const std::string & str1,const std::string & str2)92*20733378SAndroid Build Coastguard Worker std::unique_ptr<CppAconfigd> new_cpp_aconfigd(const std::string& str1,
93*20733378SAndroid Build Coastguard Worker const std::string& str2) {
94*20733378SAndroid Build Coastguard Worker return std::make_unique<CppAconfigd>(str1, str2);
95*20733378SAndroid Build Coastguard Worker }
96*20733378SAndroid Build Coastguard Worker
97*20733378SAndroid Build Coastguard Worker } // namespace aconfigdwrapper
98