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