已合并
remove aggrate capability #11210
wangJE创建于 2025年11月5日
remove aggrate capability #11210
已合并
共 2 个文件变更+33-26
| @@ -168,6 +168,24 @@ int32_t ReportDiscoveredDevice(const CoapCtxType *coapCtx, const DeviceInfo *dev | |||
| 168 | 168 | ||
| 169 | } | 169 | } |
| 170 | 170 | ||
| 171 | +static bool MatchLocalFilter(const DeviceInfo *deviceInfo) | ||
S | |||
| 172 | +{ | ||
| 173 | + if (deviceInfo->businessType != NSTACKX_BUSINESS_TYPE_STRATEGY) { | ||
| 174 | + return false; | ||
| 175 | + } | ||
| 176 | + | ||
| 177 | + DeviceInfo *localDev = GetLocalDeviceInfo(); | ||
| 178 | + if (localDev == NULL || localDev->capabilityBitmapNum == 0) { | ||
| 179 | + return false; | ||
| 180 | + } | ||
| 181 | + for (uint32_t i = 0; ((i < localDev->capabilityBitmapNum) && (i < deviceInfo->capabilityBitmapNum)); i++) { | ||
| 182 | + if ((localDev->capabilityBitmap[i] & (deviceInfo->capabilityBitmap[i])) != 0) { | ||
| 183 | + return true; | ||
| 184 | + } | ||
| 185 | + } | ||
| 186 | + return false; | ||
| 187 | +} | ||
| 188 | + | ||
| 171 | bool MatchDeviceFilter(const DeviceInfo *deviceInfo) | 189 | bool MatchDeviceFilter(const DeviceInfo *deviceInfo) |
| 172 | { | 190 | { |
| 173 | uint32_t i, ret; | 191 | uint32_t i, ret; |
| @@ -182,7 +200,7 @@ bool MatchDeviceFilter(const DeviceInfo *deviceInfo) | |||
| 182 | return true; | 200 | return true; |
| 183 | } | 201 | } |
| 184 | } | 202 | } |
| 185 | - return false; | 203 | + return MatchLocalFilter(deviceInfo); |
| 186 | } | 204 | } |
| 187 | 205 | ||
| 188 | static int32_t SetServiceDataFromDeviceInfo(cJSON *item, const DeviceInfo *deviceInfo) | 206 | static int32_t SetServiceDataFromDeviceInfo(cJSON *item, const DeviceInfo *deviceInfo) |
| @@ -113,17 +113,6 @@ static int32_t UnregisterAllCapBitmap(uint32_t capBitmapNum, const uint32_t inCa | |||
| 113 | return SOFTBUS_OK; | 113 | return SOFTBUS_OK; |
| 114 | } | 114 | } |
| 115 | 115 | ||
| 116 | -static void AggregateAllCap(uint32_t *outCapBitmap, uint32_t outCapBitmapNum, const uint32_t leftCapBitmap[], | ||
| 117 | - const uint32_t rightCapBitmap[], uint32_t capBitmapNum) | ||
| 118 | -{ | ||
| 119 | - DISC_CHECK_AND_RETURN_LOGE(outCapBitmapNum >= capBitmapNum, | ||
| 120 | - DISC_COAP, "invalid mapnum=%{public}u", outCapBitmapNum); | ||
| 121 | - for (uint32_t i = 0; i < capBitmapNum; i++) { | ||
| 122 | - outCapBitmap[i] = leftCapBitmap[i] | rightCapBitmap[i]; | ||
| 123 | - DISC_LOGD(DISC_COAP, "register all cap bitmap=%{public}u", outCapBitmap[i]); | ||
| 124 | - } | ||
| 125 | -} | ||
| 126 | - | ||
| 127 | static void SetDiscCoapOption(DiscCoapOption *discCoapOption, DiscOption *option, uint32_t allCap) | 116 | static void SetDiscCoapOption(DiscCoapOption *discCoapOption, DiscOption *option, uint32_t allCap) |
| 128 | { | 117 | { |
| 129 | DISC_CHECK_AND_RETURN_LOGE(discCoapOption != NULL, DISC_COAP, "discCoapOption is nullptr"); | 118 | DISC_CHECK_AND_RETURN_LOGE(discCoapOption != NULL, DISC_COAP, "discCoapOption is nullptr"); |
| @@ -261,7 +250,8 @@ static int32_t RegisterInfoToDfinder(const PublishOption *option, bool isActive) | |||
| 261 | DISC_LOGE(DISC_COAP, "merge publish capability failed. isActive=%{public}s", isActive ? "active" : "passive"); | 250 | DISC_LOGE(DISC_COAP, "merge publish capability failed. isActive=%{public}s", isActive ? "active" : "passive"); |
| 262 | return SOFTBUS_DISCOVER_COAP_START_PUBLISH_FAIL; | 251 | return SOFTBUS_DISCOVER_COAP_START_PUBLISH_FAIL; |
| 263 | } | 252 | } |
| 264 | - if (!UpdateFilter()) { | 253 | + if (g_discCoapMgr.publishInfo.isUpdate && |
| 254 | + DiscCoapRegisterCapability(CAPABILITY_NUM, g_discCoapMgr.publishInfo.allCap) != SOFTBUS_OK) { | ||
| 265 | SoftbusReportDiscFault(SOFTBUS_HISYSEVT_DISC_MEDIUM_COAP, SOFTBUS_HISYSEVT_DISCOVER_COAP_REGISTER_CAP_FAIL); | 255 | SoftbusReportDiscFault(SOFTBUS_HISYSEVT_DISC_MEDIUM_COAP, SOFTBUS_HISYSEVT_DISCOVER_COAP_REGISTER_CAP_FAIL); |
| 266 | DISC_LOGE(DISC_COAP, "register all capability to dfinder failed."); | 256 | DISC_LOGE(DISC_COAP, "register all capability to dfinder failed."); |
| 267 | return SOFTBUS_DISCOVER_COAP_START_PUBLISH_FAIL; | 257 | return SOFTBUS_DISCOVER_COAP_START_PUBLISH_FAIL; |
| @@ -366,11 +356,13 @@ static int32_t UnPublish(const PublishOption *option, bool isActive) | |||
| 366 | DiscCoapUpdateAbilityPacked(option->capabilityBitmap[0], (const char *)option->capabilityData, | 356 | DiscCoapUpdateAbilityPacked(option->capabilityBitmap[0], (const char *)option->capabilityData, |
| 367 | option->dataLen, true, false); | 357 | option->dataLen, true, false); |
| 368 | 358 | ||
| 369 | - if (!UpdateFilter()) { | 359 | + if (g_discCoapMgr.publishInfo.isUpdate) { |
| 370 | - (void)SoftBusMutexUnlock(&(g_discCoapMgr.lock)); | 360 | + if (DiscCoapRegisterCapability(CAPABILITY_NUM, g_discCoapMgr.publishInfo.allCap) != SOFTBUS_OK) { |
| 371 | - SoftbusReportDiscFault(SOFTBUS_HISYSEVT_DISC_MEDIUM_COAP, | 361 | + (void)SoftBusMutexUnlock(&(g_discCoapMgr.lock)); |
| 372 | - SOFTBUS_HISYSEVT_DISCOVER_COAP_REGISTER_CAP_FAIL); | 362 | + SoftbusReportDiscFault(SOFTBUS_HISYSEVT_DISC_MEDIUM_COAP, |
| 373 | - return SOFTBUS_DISCOVER_COAP_REGISTER_CAP_FAIL; | 363 | + SOFTBUS_HISYSEVT_DISCOVER_COAP_REGISTER_CAP_FAIL); |
| 364 | + return SOFTBUS_DISCOVER_COAP_REGISTER_CAP_FAIL; | ||
| 365 | + } | ||
| 374 | } | 366 | } |
| 375 | uint32_t curCap = option->capabilityBitmap[0]; | 367 | uint32_t curCap = option->capabilityBitmap[0]; |
| 376 | if (DiscCoapRegisterServiceData(option, g_discCoapMgr.publishInfo.allCap[0]) != SOFTBUS_OK) { | 368 | if (DiscCoapRegisterServiceData(option, g_discCoapMgr.publishInfo.allCap[0]) != SOFTBUS_OK) { |
| @@ -412,20 +404,17 @@ static int32_t CoapStopScan(const PublishOption *option) | |||
| 412 | 404 | ||
| 413 | static bool UpdateFilter(void) | 405 | static bool UpdateFilter(void) |
| 414 | { | 406 | { |
| 415 | - if (!g_discCoapMgr.publishInfo.isUpdate && !g_discCoapMgr.subscribeInfo.isUpdate) { | 407 | + if (!g_discCoapMgr.subscribeInfo.isUpdate) { |
| 416 | return true; | 408 | return true; |
| 417 | } | 409 | } |
| 418 | - uint32_t allCap[CAPABILITY_NUM] = {0}; | 410 | + int32_t ret = DiscCoapSetFilterCapability(CAPABILITY_NUM, g_discCoapMgr.subscribeInfo.allCap); |
| 419 | - AggregateAllCap(allCap, CAPABILITY_NUM, g_discCoapMgr.subscribeInfo.allCap, | 411 | + if (ret != SOFTBUS_OK) { |
| 420 | - g_discCoapMgr.publishInfo.allCap, CAPABILITY_NUM); | 412 | + DfxRecordSetFilterEnd(g_discCoapMgr.subscribeInfo.allCap[0], ret); |
| 421 | - int32_t ret = DiscCoapSetFilterCapability(CAPABILITY_NUM, allCap); | ||
| 422 | - if (ret != SOFTBUS_OK || DiscCoapRegisterCapability(CAPABILITY_NUM, allCap) != SOFTBUS_OK) { | ||
| 423 | - DfxRecordSetFilterEnd(allCap[0], ret); | ||
| 424 | DISC_LOGE(DISC_COAP, "set all filter capability to dfinder failed."); | 413 | DISC_LOGE(DISC_COAP, "set all filter capability to dfinder failed."); |
| 425 | SoftbusReportDiscFault(SOFTBUS_HISYSEVT_DISC_MEDIUM_COAP, SOFTBUS_HISYSEVT_DISCOVER_COAP_SET_FILTER_CAP_FAIL); | 414 | SoftbusReportDiscFault(SOFTBUS_HISYSEVT_DISC_MEDIUM_COAP, SOFTBUS_HISYSEVT_DISCOVER_COAP_SET_FILTER_CAP_FAIL); |
| 426 | return false; | 415 | return false; |
| 427 | } | 416 | } |
| 428 | - DfxRecordSetFilterEnd(allCap[0], SOFTBUS_OK); | 417 | + DfxRecordSetFilterEnd(g_discCoapMgr.subscribeInfo.allCap[0], SOFTBUS_OK); |
| 429 | return true; | 418 | return true; |
| 430 | } | 419 | } |
| 431 | 420 | ||
LGTM