• 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 "lnn_connection_fsm_process.h"
17 
18 #include <securec.h>
19 
20 #include "anonymizer.h"
21 #include "auth_hichain.h"
22 #include "auth_interface.h"
23 #include "auth_pre_link.h"
24 #include "auth_deviceprofile.h"
25 #include "bus_center_event.h"
26 #include "bus_center_manager.h"
27 #include "lnn_async_callback_utils.h"
28 #include "lnn_connection_addr_utils.h"
29 #include "lnn_connection_fsm.h"
30 #include "lnn_connId_callback_manager.h"
31 #include "lnn_decision_db.h"
32 #include "lnn_devicename_info.h"
33 #include "lnn_device_info.h"
34 
35 #include "lnn_distributed_net_ledger.h"
36 #include "lnn_event.h"
37 #include "lnn_heartbeat_ctrl.h"
38 #include "lnn_heartbeat_utils.h"
39 
40 #include "lnn_local_net_ledger.h"
41 #include "lnn_log.h"
42 #include "lnn_net_builder.h"
43 #include "lnn_net_builder_init.h"
44 #include "lnn_sync_item_info.h"
45 #include "softbus_adapter_bt_common.h"
46 #include "lnn_feature_capability.h"
47 #include "lnn_deviceinfo_to_profile.h"
48 #include "softbus_adapter_mem.h"
49 #include "softbus_adapter_socket.h"
50 #include "softbus_adapter_timer.h"
51 #include "softbus_error_code.h"
52 #include "softbus_utils.h"
53 #include "lnn_async_callback_utils.h"
54 #include "trans_channel_manager.h"
55 
CheckInterfaceCommonArgs(const LnnConnectionFsm * connFsm,bool needCheckDead)56 bool CheckInterfaceCommonArgs(const LnnConnectionFsm *connFsm, bool needCheckDead)
57 {
58     if (connFsm == NULL) {
59         LNN_LOGE(LNN_BUILDER, "connection fsm is null");
60         return false;
61     }
62     if (needCheckDead && connFsm->isDead) {
63         LNN_LOGE(LNN_BUILDER, "connection fsm is already dead. [id=%{public}u]", connFsm->id);
64         return false;
65     }
66     return true;
67 }
68 
NotifyJoinResult(LnnConnectionFsm * connFsm,const char * networkId,int32_t retCode)69 void NotifyJoinResult(LnnConnectionFsm *connFsm, const char *networkId, int32_t retCode)
70 {
71     if (connFsm == NULL) {
72         LNN_LOGE(LNN_BUILDER, "connection fsm is null");
73         return;
74     }
75     LnnConntionInfo *connInfo = &connFsm->connInfo;
76     if ((connInfo->flag & LNN_CONN_INFO_FLAG_JOIN_REQUEST) != 0) {
77         LnnNotifyJoinResult(&connInfo->addr, networkId, retCode);
78         connInfo->flag &= ~LNN_CONN_INFO_FLAG_JOIN_ACTIVE;
79         return;
80     }
81     NodeInfo *nodeInfo = connInfo->nodeInfo;
82     if (retCode == SOFTBUS_OK && nodeInfo != NULL) {
83         if (connInfo->addr.type == CONNECTION_ADDR_WLAN || connInfo->addr.type == CONNECTION_ADDR_NCM) {
84             int32_t ifIdx = (connInfo->addr.type == CONNECTION_ADDR_NCM) ? USB_IF : WLAN_IF;
85             if (connInfo->addr.info.ip.port != nodeInfo->connectInfo.ifInfo[ifIdx].authPort) {
86                 LNN_LOGI(LNN_BUILDER, "before port =%{public}d, after port=%{public}d",
87                     connInfo->addr.info.ip.port, nodeInfo->connectInfo.ifInfo[ifIdx].authPort);
88                 connInfo->addr.info.ip.port = nodeInfo->connectInfo.ifInfo[ifIdx].authPort;
89             }
90         }
91         LnnNotifyJoinResult(&connInfo->addr, networkId, retCode);
92     }
93     connInfo->flag &= ~LNN_CONN_INFO_FLAG_JOIN_ACTIVE;
94 }
95 
FreeUnhandledMessage(int32_t msgType,void * para)96 void FreeUnhandledMessage(int32_t msgType, void *para)
97 {
98     LNN_LOGI(LNN_BUILDER, "free unhandled msg. msgType=%{public}d", msgType);
99     if (para != NULL) {
100         SoftBusFree(para);
101     }
102 }
103 
ReportDeviceOnlineEvt(const char * udid,NodeBasicInfo * peerDevInfo)104 void ReportDeviceOnlineEvt(const char *udid, NodeBasicInfo *peerDevInfo)
105 {
106     if (peerDevInfo == NULL) {
107         LNN_LOGE(LNN_BUILDER, "peer deviceinfo is null");
108         return;
109     }
110     LNN_LOGI(LNN_BUILDER, "report device online evt enter");
111     int32_t infoNum = 0;
112     NodeBasicInfo *basic = NULL;
113     NodeInfo nodeInfo;
114     (void)memset_s(&nodeInfo, sizeof(NodeInfo), 0, sizeof(NodeInfo));
115     OnlineDeviceInfo info;
116     (void)memset_s(&info, sizeof(OnlineDeviceInfo), 0, sizeof(OnlineDeviceInfo));
117     if (LnnGetAllOnlineNodeInfo(&basic, &infoNum) != SOFTBUS_OK) {
118         LNN_LOGE(LNN_BUILDER, "get online node fail");
119         return;
120     }
121     if (basic == NULL || infoNum == 0) {
122         LNN_LOGI(LNN_BUILDER, "report online evt get none online node");
123         return;
124     }
125     info.onlineDevNum = (uint32_t)infoNum;
126     for (int32_t i = 0; i < infoNum; i++) {
127         if (LnnGetRemoteNodeInfoById(basic[i].networkId, CATEGORY_NETWORK_ID, &nodeInfo) != SOFTBUS_OK) {
128             continue;
129         }
130         if (LnnHasDiscoveryType(&nodeInfo, DISCOVERY_TYPE_WIFI)) {
131             info.wifiOnlineDevNum++;
132         }
133         if (LnnHasDiscoveryType(&nodeInfo, DISCOVERY_TYPE_BLE) || LnnHasDiscoveryType(&nodeInfo, DISCOVERY_TYPE_BR)) {
134             info.btOnlineDevNum++;
135         }
136     }
137     SoftBusFree(basic);
138     info.peerDevType = peerDevInfo->deviceTypeId;
139     if (LnnGetRemoteStrInfo(peerDevInfo->networkId, STRING_KEY_DEV_NAME, info.peerDevName,
140         SOFTBUS_HISYSEVT_NAME_LEN) != SOFTBUS_OK) {
141         LNN_LOGE(LNN_BUILDER, "get remote device name fail");
142     }
143     if (LnnGetRemoteStrInfo(peerDevInfo->networkId, STRING_KEY_HICE_VERSION, info.peerSoftBusVer,
144         SOFTBUS_HISYSEVT_NAME_LEN) != SOFTBUS_OK) {
145         LNN_LOGE(LNN_BUILDER, "get remote softbus version fail");
146     }
147     info.insertFileResult = true;
148     if (SoftBusReportDevOnlineEvt(&info, udid) != SOFTBUS_OK) {
149         LNN_LOGE(LNN_BUILDER, "report device online evt fail");
150     }
151 }