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