• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 }