1 /*
2 * Copyright (c) 2025 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "comm_log.h"
17 #include "softbus_init_common.h"
18
19 #ifdef __aarch64__
20 #define SOFTBUS_SERVER_PLUGIN_PATH_NAME "/system/lib64/libdsoftbus_server_plugin.z.so"
21 #else
22 #define SOFTBUS_SERVER_PLUGIN_PATH_NAME "/system/lib/libdsoftbus_server_plugin.z.so"
23 #endif
24
25 #ifdef __aarch64__
26 #define SOFTBUS_CLIENT_PLUGIN_PATH_NAME "/system/lib64/platformsdk/libdsoftbus_client_plugin.z.so"
27 #else
28 #define SOFTBUS_CLIENT_PLUGIN_PATH_NAME "/system/lib/platformsdk/libdsoftbus_client_plugin.z.so"
29 #endif
30
31 #ifdef __aarch64__
32 #define SOFTBUS_SERVER_PATH_NAME "/system/lib64/libsoftbus_server.z.so"
33 #else
34 #define SOFTBUS_SERVER_PATH_NAME "/system/lib/libsoftbus_server.z.so"
35 #endif
36
37 #ifdef __aarch64__
38 #define SOFTBUS_CLIENT_PATH_NAME "/system/lib64/platformsdk/libsoftbus_client.z.so"
39 #else
40 #define SOFTBUS_CLIENT_PATH_NAME "/system/lib/platformsdk/libsoftbus_client.z.so"
41 #endif
42
43 bool g_softbusServerPluginLoaded = false;
44 bool g_softbusClientPluginLoaded = false;
45
46 void *g_soHandle[SOFTBUS_HANDLE_BUTT];
47 const char *g_soName[SOFTBUS_HANDLE_BUTT] = {
48 SOFTBUS_SERVER_PLUGIN_PATH_NAME,
49 SOFTBUS_CLIENT_PLUGIN_PATH_NAME,
50 SOFTBUS_SERVER_PATH_NAME,
51 SOFTBUS_CLIENT_PATH_NAME
52 };
53
SoftbusServerPluginLoadedFlagGet(void)54 bool SoftbusServerPluginLoadedFlagGet(void)
55 {
56 return (g_soHandle[SOFTBUS_HANDLE_SERVER_PLUGIN] != NULL);
57 }
58
SoftbusClientPluginLoadedFlagGet(void)59 bool SoftbusClientPluginLoadedFlagGet(void)
60 {
61 return (g_soHandle[SOFTBUS_HANDLE_CLIENT_PLUGIN] != NULL);
62 }
63
SoftBusDlopen(SoftBusHandleType type,void ** dllHandle)64 int32_t SoftBusDlopen(SoftBusHandleType type, void **dllHandle)
65 {
66 if (type >= SOFTBUS_HANDLE_BUTT || dllHandle == NULL) {
67 return SOFTBUS_INVALID_PARAM;
68 }
69
70 if (g_soHandle[type] != NULL) {
71 *dllHandle = g_soHandle[type];
72 return SOFTBUS_OK;
73 }
74
75 *dllHandle = dlopen(g_soName[type], RTLD_NOW | RTLD_NODELETE | RTLD_GLOBAL);
76 if (*dllHandle == NULL) {
77 COMM_LOGE(COMM_SVC, "dlopen %{public}s Load lib failed.", g_soName[type]);
78 return SOFTBUS_NETWORK_DLOPEN_FAILED;
79 }
80
81 g_soHandle[type] = *dllHandle;
82
83 return SOFTBUS_OK;
84 }
85
SoftBusDlsym(const void * DllHandle,const char * funcName,void ** funcHandle)86 int32_t SoftBusDlsym(const void *DllHandle, const char *funcName, void **funcHandle)
87 {
88 if (DllHandle == NULL || funcName == NULL || funcHandle == NULL) {
89 return SOFTBUS_NETWORK_DLSYM_FAILED;
90 }
91
92 *funcHandle = dlsym((void *)DllHandle, funcName);
93 if (*funcHandle == NULL) {
94 COMM_LOGE(COMM_SVC, "Load symbol %{public}s failed.", funcName);
95 return SOFTBUS_NETWORK_DLSYM_FAILED;
96 }
97
98 return SOFTBUS_OK;
99 }
100
SoftBusDlclose(SoftBusHandleType type)101 void SoftBusDlclose(SoftBusHandleType type)
102 {
103 if (type >= SOFTBUS_HANDLE_BUTT || g_soHandle[type] == NULL) {
104 return;
105 }
106
107 dlclose((void *)g_soHandle[type]);
108 g_soHandle[type] = NULL;
109 return;
110 }
111
LnnCheckFuncPointer(void * func)112 int32_t LnnCheckFuncPointer(void *func)
113 {
114 if (func == NULL) {
115 COMM_LOGE(COMM_TEST, "func not register.");
116 return SOFTBUS_FUNC_NOT_REGISTER;
117 }
118 return SOFTBUS_OK;
119 }
120
ConnCheckFuncPointer(void * func)121 int32_t ConnCheckFuncPointer(void *func)
122 {
123 if (func == NULL) {
124 COMM_LOGE(COMM_TEST, "func not register.");
125 return SOFTBUS_FUNC_NOT_REGISTER;
126 }
127 return SOFTBUS_OK;
128 }
129
DiscCheckFuncPointer(void * func)130 int32_t DiscCheckFuncPointer(void *func)
131 {
132 if (func == NULL) {
133 COMM_LOGE(COMM_TEST, "func not register.");
134 return SOFTBUS_FUNC_NOT_REGISTER;
135 }
136 return SOFTBUS_OK;
137 }
138
TransCheckFuncPointer(void * func)139 int32_t TransCheckFuncPointer(void *func)
140 {
141 if (func == NULL) {
142 COMM_LOGE(COMM_TEST, "func not register.");
143 return SOFTBUS_FUNC_NOT_REGISTER;
144 }
145 return SOFTBUS_OK;
146 }
147
AuthCheckFuncPointer(void * func)148 int32_t AuthCheckFuncPointer(void *func)
149 {
150 if (func == NULL) {
151 COMM_LOGE(COMM_TEST, "func not register.");
152 return SOFTBUS_FUNC_NOT_REGISTER;
153 }
154 return SOFTBUS_OK;
155 }
156
AdapterCheckFuncPointer(void * func)157 int32_t AdapterCheckFuncPointer(void *func)
158 {
159 if (func == NULL) {
160 COMM_LOGE(COMM_TEST, "func not register.");
161 return SOFTBUS_FUNC_NOT_REGISTER;
162 }
163 return SOFTBUS_OK;
164 }