1 // Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved
2 // Use of this source code is governed by an apache-2.0 license that can be
3 // found in the LICENSE file.
8 #include "common/app2ext_dynamic_service.h"
14 const std::string& disable_pkg_sym_name = "app2ext_usr_disable_external_pkg";
15 const std::string& enable_pkg_sym_name = "app2ext_usr_enable_external_pkg";
16 const std::string& get_image_path_sym_name = "app2ext_usr_get_image_path";
17 const std::string& init_sym_name = "app2ext_init";
18 const std::string& deinit_sym_name = "app2ext_deinit";
19 const std::string& LIBNAME = "/usr/lib/libapp2ext.so.0";
23 namespace common_installer {
25 App2ExtDynamicService::App2ExtDynamicService()
27 dl_handle = dlopen(LIBNAME.c_str(), RTLD_LAZY);
29 LOG(WARNING) << "Cannot open handle: " << dlerror();
34 App2ExtDynamicService::~App2ExtDynamicService() {
35 if (!app2ext_handler && dl_handle)
39 bool App2ExtDynamicService::EnableExternalPkgForUsr(const char* appname,
41 int ret = CallMethod<int>(-1, enable_pkg_sym_name.c_str(), appname, uid);
43 LOG(ERROR) << enable_pkg_sym_name << " failed with error code: "
49 bool App2ExtDynamicService::DisableExternalPkgForUsr(const char* appname,
51 int ret = CallMethod<int>(-1, disable_pkg_sym_name.c_str(), appname, uid);
53 LOG(ERROR) << disable_pkg_sym_name << " failed with error code: "
59 std::string App2ExtDynamicService::GetExternalImagePath(const char* pkgid,
61 char* image_path = CallMethod<char*>(nullptr, get_image_path_sym_name.c_str(),
65 result = std::string(image_path);
71 app2ext_handle* App2ExtDynamicService::InitLibrary() {
72 return CallMethod<app2ext_handle*>(NULL, init_sym_name.c_str(),
76 void App2ExtDynamicService::DeinitLibrary(app2ext_handle* handle) {
78 CallMethod<int>(-1, deinit_sym_name.c_str(), handle);
81 bool App2ExtDynamicService::ProperlyLoaded() {
82 return dl_handle != NULL;
85 std::shared_ptr<app2ext_handle> App2ExtDynamicService::getInterfaceHandle() {
86 if (!app2ext_handler && ProperlyLoaded()) {
87 app2ext_handler = std::shared_ptr<app2ext_handle>(InitLibrary(),
88 std::bind(&App2ExtDynamicService::DeinitLibrary,
89 this, std::placeholders::_1));
91 LOG(ERROR) "app2ext_init() failed.";
93 return app2ext_handler;
96 } // namespace common_installer