Add define for TAC in launcher_env.h
[platform/core/dotnet/launcher.git] / NativeLauncher / util / plugin_manager.cc
1 /*
2  * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  * Licensed under the Apache License, Version 2.0 (the License);
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an AS IS BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 #include <dlfcn.h>
17
18 #include "plugin_manager.h"
19 #include "utils.h"
20 #include "log.h"
21
22 static PluginFunc* __pluginFunc = NULL;
23 static void* __pluginLib;
24
25 int initializePluginManager(const char* mode)
26 {
27         if (isFileExist(PLUGIN_PATH)) {
28                 __pluginLib = dlopen(PLUGIN_PATH, RTLD_NOW | RTLD_LOCAL | RTLD_NODELETE);
29                 if (__pluginLib) {
30                         __pluginFunc = (PluginFunc*)calloc(sizeof(PluginFunc), 1);
31                         if (!__pluginFunc) {
32                                 _ERR("fail to allocate memory for plugin function structure");
33                                 return -1;
34                         }
35                         __pluginFunc->initialize = (plugin_initialize_ptr)dlsym(__pluginLib, "plugin_initialize");
36                         __pluginFunc->preload = (plugin_preload_ptr)dlsym(__pluginLib, "plugin_preload");
37                         __pluginFunc->has_log_control = (plugin_has_log_control_ptr)dlsym(__pluginLib, "plugin_has_log_control");
38                         __pluginFunc->set_app_info = (plugin_set_app_info_ptr)dlsym(__pluginLib, "plugin_set_app_info");
39                         __pluginFunc->set_coreclr_info = (plugin_set_coreclr_info_ptr)dlsym(__pluginLib, "plugin_set_coreclr_info");
40                         __pluginFunc->get_dll_path = (plugin_get_dll_path_ptr)dlsym(__pluginLib, "plugin_get_dll_path");
41                         __pluginFunc->get_tpa = (plugin_get_tpa_ptr)dlsym(__pluginLib, "plugin_get_tpa");
42                         __pluginFunc->before_execute = (plugin_before_execute_ptr)dlsym(__pluginLib, "plugin_before_execute");
43                         __pluginFunc->finalize  = (plugin_finalize_ptr)dlsym(__pluginLib, "plugin_finalize");
44                 }
45
46                 if (__pluginFunc->initialize)
47                         __pluginFunc->initialize(mode);
48         }
49
50         _INFO("Plugin manager initialize success");
51
52         return 0;
53 }
54
55 void finalizePluginManager()
56 {
57         _INFO("Plugin manager finalize called");
58         if (__pluginFunc) {
59                 free(__pluginFunc);
60                 __pluginFunc = NULL;
61         }
62
63         if (__pluginLib) {
64                 dlclose(__pluginLib);
65                 __pluginLib = NULL;
66         }
67 }
68
69 void pluginPreload()
70 {
71         if (__pluginFunc && __pluginFunc->preload) {
72                 __pluginFunc->preload();
73         }
74 }
75
76 bool pluginHasLogControl()
77 {
78         if (__pluginFunc && __pluginFunc->has_log_control) {
79                 return __pluginFunc->has_log_control();
80         } else {
81                 return false;
82         }
83 }
84
85 void pluginSetAppInfo(const char* appId, const char* managedAssemblyPath)
86 {
87         if (__pluginFunc && __pluginFunc->set_app_info) {
88                 __pluginFunc->set_app_info(appId, managedAssemblyPath);
89         }
90 }
91
92 void pluginSetCoreclrInfo(void* hostHandle, unsigned int domainId, coreclr_create_delegate_ptr delegateFunc)
93 {
94         if (__pluginFunc && __pluginFunc->set_coreclr_info) {
95                 __pluginFunc->set_coreclr_info(hostHandle, domainId, delegateFunc);
96         }
97 }
98
99 char* pluginGetDllPath()
100 {
101         if (__pluginFunc && __pluginFunc->get_dll_path) {
102                 return __pluginFunc->get_dll_path();
103         } else {
104                 return NULL;
105         }
106 }
107
108 char* pluginGetTPA()
109 {
110         if (__pluginFunc && __pluginFunc->get_tpa) {
111                 return __pluginFunc->get_tpa();
112         } else {
113                 return NULL;
114         }
115 }
116
117 void pluginBeforeExecute()
118 {
119         if (__pluginFunc && __pluginFunc->before_execute) {
120                 __pluginFunc->before_execute();
121         }
122 }
123
124 void pluginFinalize()
125 {
126         if (__pluginFunc && __pluginFunc->finalize) {
127                 __pluginFunc->finalize();
128         }
129 }
130