已合并
remove aggrate capability #11210
remove aggrate capability #11210
已合并
wangJE创建于 2025年11月5日
2 个文件变更+33-26
@@ -168,6 +168,24 @@ int32_t ReportDiscoveredDevice(const CoapCtxType *coapCtx, const DeviceInfo *dev
168#endif168#endif
169}169}
170 170 
171+static bool MatchLocalFilter(const DeviceInfo *deviceInfo)
S
Ssongzhengteng2025年11月5日

LGTM

likedislike
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+ 
171bool MatchDeviceFilter(const DeviceInfo *deviceInfo)189bool 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 
188static int32_t SetServiceDataFromDeviceInfo(cJSON *item, const DeviceInfo *deviceInfo)206static 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- 
127static void SetDiscCoapOption(DiscCoapOption *discCoapOption, DiscOption *option, uint32_t allCap)116static 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#endif /* DSOFTBUS_FEATURE_DISC_SHARE_COAP */358#endif /* DSOFTBUS_FEATURE_DISC_SHARE_COAP */
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 
413static bool UpdateFilter(void)405static 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