• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2023 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 #ifndef OHOS_DM_MINE_SOFTBUS_LISTENER_H
17 #define OHOS_DM_MINE_SOFTBUS_LISTENER_H
18 
19 #include "softbus_listener.h"
20 
21 using std::vector;
22 using std::string;
23 
24 namespace OHOS {
25 namespace DistributedHardware {
26 
27 #define DM_DEVICE_NUMBER_LEN 11
28 #define DM_HASH_DATA_LEN 16
29 
30 typedef struct {
31     string type;
32     string value;
33 } VertexOptionInfo;
34 
35 typedef struct {
36     char version;
37     char headDataLen;
38     char tlvDataLen;
39     char pkgNameHash[DM_HASH_DATA_LEN];
40     char findMode;
41     char trustFilter;
42 } BroadcastHead;
43 
44 typedef struct {
45     string deviceAlias;
46     int32_t startNumber;
47     int32_t endNumber;
48 } ScopeOptionInfo;
49 
50 typedef struct {
51     char version;
52     char dataLen;
53     bool isExistCredential;
54     char pkgNameHash[DM_HASH_DATA_LEN];
55 } ReturnwaveHead;
56 
57 typedef struct {
58     bool snHashValid;
59     bool typeHashValid;
60     bool udidHashValid;
61     bool aliasHashValid;
62     bool numberValid;
63     char snHash[DM_HASH_DATA_LEN];
64     char typeHash[DM_HASH_DATA_LEN];
65     char udidHash[DM_HASH_DATA_LEN];
66     char aliasHash[DM_HASH_DATA_LEN];
67     char number[DM_DEVICE_NUMBER_LEN];
68 } DevicePolicyInfo;
69 
70 typedef enum {
71     BUSINESS_EXACT_MATCH = 0x01,
72     BUSINESS_PARTIAL_MATCH,
73     BUSINESS_EXACT_NOT_MATCH,
74 } Action;
75 
76 class MineSoftbusListener {
77 public:
78     MineSoftbusListener();
79     ~MineSoftbusListener();
80 
81     int32_t StopRefreshSoftbusLNN(uint16_t subscribeId);
82     int32_t RefreshSoftbusLNN(const string &pkgName, const string &searchJson, const DmSubscribeInfo &subscribeInfo);
83     int32_t RegisterSoftbusLnnOpsCbk(const std::string &pkgName,
84         const std::shared_ptr<ISoftbusDiscoveringCallback> callback);
85     int32_t UnRegisterSoftbusLnnOpsCbk(const std::string &pkgName);
86     static void OnPublishResult(int publishId, PublishResult reason);
87     static void OnPublishDeviceFound(const DeviceInfo *deviceInfo);
88     static void OnRePublish(void);
89     static IDmRadarHelper* GetDmRadarHelperObj();
90     static bool IsDmRadarHelperReady();
91     static bool CloseDmRadarHelperObj(std::string name);
92 private:
93     int32_t InitSoftPublishLNN();
94     int32_t ParseSearchJson(const string &pkgName, const string &searchJsonStr, char *output, size_t *outLen);
95     int32_t ParseSearchAllDevice(const JsonObject &object, const string &pkgName, char *output, size_t *outLen);
96     int32_t ParseSearchScopeDevice(const JsonObject &object, const string &pkgName, char *output, size_t *outLen);
97     int32_t ParseSearchVertexDevice(const JsonObject &object, const string &pkgName, char *output, size_t *outLen);
98     int32_t SetBroadcastHead(const JsonObject &object, const string &pkgName, BroadcastHead &broadcastHead);
99     void AddHeadToBroadcast(const BroadcastHead &broadcastHead, char *output);
100     int32_t ParseScopeDeviceJsonArray(const std::vector<ScopeOptionInfo> &optionInfo, char *output, size_t *outLen);
101     int32_t ParseVertexDeviceJsonArray(const std::vector<VertexOptionInfo> &optionInfo, char *output, size_t *outLen);
102     static int32_t GetSha256Hash(const char *data, size_t len, char *output);
103     int32_t SetBroadcastTrustOptions(const JsonObject &object, BroadcastHead &broadcastHead);
104     int32_t SetBroadcastPkgname(const string &pkgName, BroadcastHead &broadcastHead);
105     int32_t SendBroadcastInfo(const string &pkgName, SubscribeInfo &subscribeInfo, char *output, size_t outputLen);
106     void SetSubscribeInfo(const DmSubscribeInfo &dmSubscribeInfo, SubscribeInfo &subscribeInfo);
107     int32_t PublishDeviceDiscovery(void);
108     static void MatchSearchDealTask(void);
109     static int32_t ParseBroadcastInfo(DeviceInfo &deviceInfo);
110     static bool GetBroadcastData(DeviceInfo &deviceInfo, char *output, size_t outLen);
111     static Action MatchSearchAllDevice(DeviceInfo &deviceInfo, const BroadcastHead &broadcastHead);
112     static void GetScopeDevicePolicyInfo(DevicePolicyInfo &devicePolicyInfo);
113     static Action MatchSearchScopeDevice(DeviceInfo &deviceInfo, char *output,
114         const DevicePolicyInfo &devicePolicyInfo, const BroadcastHead &broadcastHead);
115     static void GetVertexDevicePolicyInfo(DevicePolicyInfo &devicePolicyInfo);
116     static Action MatchSearchVertexDevice(DeviceInfo &deviceInfo, char *output,
117         const DevicePolicyInfo &devicePolicyInfo, const BroadcastHead &broadcastHead);
118     static int32_t SendReturnwave(DeviceInfo &deviceInfo, const BroadcastHead &broadcastHead, Action matchResult);
119     static bool GetDeviceAliasHash(char *output);
120     static bool GetDeviceSnHash(char *output);
121     static bool GetDeviceUdidHash(char *output);
122     static bool GetDeviceTypeHash(char *output);
123     static bool GetDeviceNumber(char *output);
124     static bool CheckDeviceAliasMatch(const DevicePolicyInfo &devicePolicyInfo, const char *data);
125     static bool CheckDeviceNumberMatch(const DevicePolicyInfo &devicePolicyInfo,
126         int32_t startNumber, int32_t endNumber);
127     static bool CheckDeviceSnMatch(const DevicePolicyInfo &devicePolicyInfo, const char *data);
128     static bool CheckDeviceTypeMatch(const DevicePolicyInfo &devicePolicyInfo, const char *data);
129     static bool CheckDeviceUdidMatch(const DevicePolicyInfo &devicePolicyInfo, const char *data);
130     static Action GetMatchResult(const vector<int> &matchItemNum, const vector<int> &matchItemResult);
131     int32_t DmBase64Encode(char *output, size_t outputLen, const char *input, size_t inputLen, size_t &base64OutLen);
132     int32_t DmBase64Decode(char *output, size_t outputLen, const char *input, size_t inputLen, size_t &base64OutLen);
133 };
134 } // namespace DistributedHardware
135 } // namespace OHOS
136 #endif // OHOS_DM_MINE_SOFTBUS_LISTENER_H
137