1 /*
2 * Copyright (c) 2021 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 "softbus_disc_server.h"
17
18 #include "disc_client_proxy.h"
19 #include "softbus_def.h"
20 #include "softbus_error_code.h"
21 #include "softbus_log.h"
22 #include "softbus_hisysevt_discreporter.h"
23
24 static IServerDiscInnerCallback g_discInnerCb = {
25 .OnServerDeviceFound = ClientIpcOnDeviceFound,
26 };
27
28 static bool g_isCallLnn = true;
29
DiscServerInit(void)30 NO_SANITIZE("cfi") int32_t DiscServerInit(void)
31 {
32 int32_t ret = DiscMgrInit();
33 if (ret != SOFTBUS_OK) {
34 SoftBusLog(SOFTBUS_LOG_DISC, SOFTBUS_LOG_ERROR, "DiscServerInit failed");
35 return ret;
36 }
37 return SOFTBUS_OK;
38 }
39
DiscServerDeinit(void)40 NO_SANITIZE("cfi") void DiscServerDeinit(void)
41 {
42 DiscMgrDeinit();
43 }
44
DiscServerDeathCallback(const char * pkgName)45 NO_SANITIZE("cfi") void DiscServerDeathCallback(const char *pkgName)
46 {
47 DiscMgrDeathCallback(pkgName);
48 }
49
ConvertDiscType(const ExchangeMedium * discType)50 static SoftBusDiscMedium ConvertDiscType(const ExchangeMedium *discType)
51 {
52 switch (*discType) {
53 case BLE:
54 return SOFTBUS_HISYSEVT_DISC_MEDIUM_BLE;
55 case COAP:
56 return SOFTBUS_HISYSEVT_DISC_MEDIUM_COAP;
57 default:
58 return SOFTBUS_HISYSEVT_DISC_MEDIUM_BUTT;
59 }
60 }
61
PublishErroCodeProcess(int32_t erroCode)62 static int32_t PublishErroCodeProcess(int32_t erroCode)
63 {
64 if (erroCode == SOFTBUS_DISCOVER_MANAGER_INVALID_MEDIUM) {
65 return PUBLISH_FAIL_REASON_NOT_SUPPORT_MEDIUM;
66 }
67 return PUBLISH_FAIL_REASON_INTERNAL;
68 }
69
DiscoveryErroCodeProcess(int32_t erroCode)70 static int32_t DiscoveryErroCodeProcess(int32_t erroCode)
71 {
72 if (erroCode == SOFTBUS_DISCOVER_MANAGER_INVALID_MEDIUM) {
73 return DISCOVERY_FAIL_REASON_NOT_SUPPORT_MEDIUM;
74 }
75 return DISCOVERY_FAIL_REASON_INTERNAL;
76 }
77
DiscIpcPublishService(const char * packageName,const PublishInfo * info)78 NO_SANITIZE("cfi") int32_t DiscIpcPublishService(const char *packageName, const PublishInfo *info)
79 {
80 int32_t ret = DiscPublishService(packageName, info);
81 if (ret != SOFTBUS_OK) {
82 SoftBusLog(SOFTBUS_LOG_DISC, SOFTBUS_LOG_ERROR, "ServerPublishService failed");
83 SoftbusReportDiscFault(ConvertDiscType(&info->medium), ret);
84 (void)ClientIpcOnPublishFail(packageName, info->publishId, PublishErroCodeProcess(ret));
85 return ret;
86 }
87 SoftBusLog(SOFTBUS_LOG_DISC, SOFTBUS_LOG_INFO, "ServerPublishService success!");
88 (void)ClientIpcOnPublishSuccess(packageName, info->publishId);
89 return SOFTBUS_OK;
90 }
91
DiscIpcUnPublishService(const char * packageName,int32_t publishId)92 NO_SANITIZE("cfi") int32_t DiscIpcUnPublishService(const char *packageName, int32_t publishId)
93 {
94 int32_t ret = DiscUnPublishService(packageName, publishId);
95 if (ret != SOFTBUS_OK) {
96 SoftBusLog(SOFTBUS_LOG_DISC, SOFTBUS_LOG_ERROR, "ServerUnPublishService failed");
97 return ret;
98 }
99 SoftBusLog(SOFTBUS_LOG_DISC, SOFTBUS_LOG_INFO, "ServerUnPublishService success!");
100 return SOFTBUS_OK;
101 }
102
DiscIpcStartDiscovery(const char * packageName,const SubscribeInfo * info)103 NO_SANITIZE("cfi") int32_t DiscIpcStartDiscovery(const char *packageName, const SubscribeInfo *info)
104 {
105 SetCallLnnStatus(false);
106 int32_t ret = DiscStartDiscovery(packageName, info, &g_discInnerCb);
107 if (ret != SOFTBUS_OK) {
108 SoftBusLog(SOFTBUS_LOG_DISC, SOFTBUS_LOG_ERROR, "ServerStartDiscovery failed");
109 SoftbusReportDiscFault(ConvertDiscType(&info->medium), ret);
110 (void)ClientIpcOnDiscoverFailed(packageName, info->subscribeId, DiscoveryErroCodeProcess(ret));
111 return ret;
112 }
113 SoftBusLog(SOFTBUS_LOG_DISC, SOFTBUS_LOG_INFO, "ServerStartDiscovery success!");
114 (void)ClientIpcDiscoverySuccess(packageName, info->subscribeId);
115 return SOFTBUS_OK;
116 }
117
DiscIpcStopDiscovery(const char * packageName,int32_t subscribeId)118 NO_SANITIZE("cfi") int32_t DiscIpcStopDiscovery(const char *packageName, int32_t subscribeId)
119 {
120 int32_t ret = DiscStopDiscovery(packageName, subscribeId);
121 if (ret != SOFTBUS_OK) {
122 SoftBusLog(SOFTBUS_LOG_DISC, SOFTBUS_LOG_ERROR, "ServerStopDiscovery failed");
123 return ret;
124 }
125 SoftBusLog(SOFTBUS_LOG_DISC, SOFTBUS_LOG_INFO, "ServerStopDiscovery success!");
126 return SOFTBUS_OK;
127 }
128
SetCallLnnStatus(bool flag)129 NO_SANITIZE("cfi") void SetCallLnnStatus(bool flag)
130 {
131 g_isCallLnn = flag;
132 }
133
GetCallLnnStatus(void)134 NO_SANITIZE("cfi") bool GetCallLnnStatus(void)
135 {
136 return g_isCallLnn;
137 }