已合并
add coap ability #11145
wangJE创建于 2025年10月23日
add coap ability #11145
已合并
共 5 个文件变更+123-27
| @@ -21,6 +21,7 @@ | |||
| 21 | 21 | ||
| 22 | 22 | ||
| 23 | 23 | ||
| 24 | + | ||
| 24 | 25 | ||
| 25 | 26 | ||
| 26 | 27 | ||
| @@ -45,6 +46,7 @@ static DiscCoapInfo *g_publishMgr = NULL; | |||
| 45 | static DiscCoapInfo *g_subscribeMgr = NULL; | 46 | static DiscCoapInfo *g_subscribeMgr = NULL; |
| 46 | static int CoapPubInfoDump(int fd); | 47 | static int CoapPubInfoDump(int fd); |
| 47 | static int CoapSubInfoDump(int fd); | 48 | static int CoapSubInfoDump(int fd); |
| 49 | +static bool UpdateFilter(bool isSubscribe); | ||
| 48 | 50 | ||
| 49 | static int32_t RegisterAllCapBitmap(uint32_t capBitmapNum, const uint32_t inCapBitmap[], DiscCoapInfo *info, | 51 | static int32_t RegisterAllCapBitmap(uint32_t capBitmapNum, const uint32_t inCapBitmap[], DiscCoapInfo *info, |
| 50 | uint32_t count) | 52 | uint32_t count) |
| @@ -107,6 +109,17 @@ static int32_t UnregisterAllCapBitmap(uint32_t capBitmapNum, const uint32_t inCa | |||
| 107 | return SOFTBUS_OK; | 109 | return SOFTBUS_OK; |
| 108 | } | 110 | } |
| 109 | 111 | ||
| 112 | +static void AggregateAllCap(uint32_t *outCapBitmap, uint32_t outCapBitmapNum, const uint32_t leftCapBitmap[], | ||
| 113 | + const uint32_t rightCapBitmap[], uint32_t capBitmapNum) | ||
| 114 | +{ | ||
| 115 | + DISC_CHECK_AND_RETURN_LOGE(outCapBitmapNum >= capBitmapNum, | ||
| 116 | + DISC_COAP, "invalid mapnum=%{public}u", outCapBitmapNum); | ||
| 117 | + for (uint32_t i = 0; i < capBitmapNum; i++) { | ||
| 118 | + outCapBitmap[i] = leftCapBitmap[i] | rightCapBitmap[i]; | ||
| 119 | + DISC_LOGD(DISC_COAP, "register all cap bitmap=%{public}u", outCapBitmap[i]); | ||
| 120 | + } | ||
| 121 | +} | ||
| 122 | + | ||
| 110 | static void SetDiscCoapOption(DiscCoapOption *discCoapOption, DiscOption *option, uint32_t allCap) | 123 | static void SetDiscCoapOption(DiscCoapOption *discCoapOption, DiscOption *option, uint32_t allCap) |
| 111 | { | 124 | { |
| 112 | DISC_CHECK_AND_RETURN_LOGE(discCoapOption != NULL, DISC_COAP, "discCoapOption is nullptr"); | 125 | DISC_CHECK_AND_RETURN_LOGE(discCoapOption != NULL, DISC_COAP, "discCoapOption is nullptr"); |
| @@ -245,7 +258,7 @@ static int32_t RegisterInfoToDfinder(const PublishOption *option, bool isActive) | |||
| 245 | DISC_LOGE(DISC_COAP, "merge publish capability failed. isActive=%{public}s", isActive ? "active" : "passive"); | 258 | DISC_LOGE(DISC_COAP, "merge publish capability failed. isActive=%{public}s", isActive ? "active" : "passive"); |
| 246 | return SOFTBUS_DISCOVER_COAP_START_PUBLISH_FAIL; | 259 | return SOFTBUS_DISCOVER_COAP_START_PUBLISH_FAIL; |
| 247 | } | 260 | } |
| 248 | - if (g_publishMgr->isUpdate && DiscCoapRegisterCapability(CAPABILITY_NUM, g_publishMgr->allCap) != SOFTBUS_OK) { | 261 | + if (!UpdateFilter(false)) { |
| 249 | SoftbusReportDiscFault(SOFTBUS_HISYSEVT_DISC_MEDIUM_COAP, SOFTBUS_HISYSEVT_DISCOVER_COAP_REGISTER_CAP_FAIL); | 262 | SoftbusReportDiscFault(SOFTBUS_HISYSEVT_DISC_MEDIUM_COAP, SOFTBUS_HISYSEVT_DISCOVER_COAP_REGISTER_CAP_FAIL); |
| 250 | DISC_LOGE(DISC_COAP, "register all capability to dfinder failed."); | 263 | DISC_LOGE(DISC_COAP, "register all capability to dfinder failed."); |
| 251 | return SOFTBUS_DISCOVER_COAP_START_PUBLISH_FAIL; | 264 | return SOFTBUS_DISCOVER_COAP_START_PUBLISH_FAIL; |
| @@ -277,6 +290,10 @@ static int32_t Publish(const PublishOption *option, bool isActive) | |||
| 277 | DISC_LOGE(DISC_COAP, "register info to dfinder failed."); | 290 | DISC_LOGE(DISC_COAP, "register info to dfinder failed."); |
| 278 | goto PUB_FAIL; | 291 | goto PUB_FAIL; |
| 279 | } | 292 | } |
| 293 | + | ||
| 294 | + DiscCoapUpdateAbilityPacked(option->capabilityBitmap[0], (const char *)option->capabilityData, | ||
| 295 | + option->dataLen, true, true); | ||
| 296 | + | ||
| 280 | if (isActive) { | 297 | if (isActive) { |
| 281 | DiscCoapOption discCoapOption; | 298 | DiscCoapOption discCoapOption; |
| 282 | DiscOption discOption = { | 299 | DiscOption discOption = { |
| @@ -341,14 +358,15 @@ static int32_t UnPublish(const PublishOption *option, bool isActive) | |||
| 341 | SoftbusReportDiscFault(SOFTBUS_HISYSEVT_DISC_MEDIUM_COAP, SOFTBUS_HISYSEVT_DISCOVER_COAP_CANCEL_CAP_FAIL); | 358 | SoftbusReportDiscFault(SOFTBUS_HISYSEVT_DISC_MEDIUM_COAP, SOFTBUS_HISYSEVT_DISCOVER_COAP_CANCEL_CAP_FAIL); |
| 342 | return SOFTBUS_DISCOVER_COAP_CANCEL_CAP_FAIL; | 359 | return SOFTBUS_DISCOVER_COAP_CANCEL_CAP_FAIL; |
| 343 | } | 360 | } |
| 344 | - if (g_publishMgr->isUpdate) { | 361 | +#ifdef DSOFTBUS_FEATURE_DISC_SHARE_COAP |
| 345 | - if (DiscCoapRegisterCapability(CAPABILITY_NUM, g_publishMgr->allCap) != SOFTBUS_OK) { | 362 | + DiscCoapUpdateAbilityPacked(option->capabilityBitmap[0], (const char *)option->capabilityData, |
| 346 | - (void)SoftBusMutexUnlock(&(g_publishMgr->lock)); | 363 | + option->dataLen, true, false); |
| 347 | - DISC_LOGE(DISC_COAP, "register all capability to dfinder failed."); | 364 | +#endif /* DSOFTBUS_FEATURE_DISC_SHARE_COAP */ |
| 348 | - SoftbusReportDiscFault(SOFTBUS_HISYSEVT_DISC_MEDIUM_COAP, | 365 | + if (!UpdateFilter(false)) { |
| 349 | - SOFTBUS_HISYSEVT_DISCOVER_COAP_REGISTER_CAP_FAIL); | 366 | + (void)SoftBusMutexUnlock(&(g_publishMgr->lock)); |
| 350 | - return SOFTBUS_DISCOVER_COAP_REGISTER_CAP_FAIL; | 367 | + SoftbusReportDiscFault(SOFTBUS_HISYSEVT_DISC_MEDIUM_COAP, |
| 351 | - } | 368 | + SOFTBUS_HISYSEVT_DISCOVER_COAP_REGISTER_CAP_FAIL); |
| 369 | + return SOFTBUS_DISCOVER_COAP_REGISTER_CAP_FAIL; | ||
| 352 | } | 370 | } |
| 353 | uint32_t curCap = option->capabilityBitmap[0]; | 371 | uint32_t curCap = option->capabilityBitmap[0]; |
| 354 | if (DiscCoapRegisterServiceData(option, g_publishMgr->allCap[0]) != SOFTBUS_OK) { | 372 | if (DiscCoapRegisterServiceData(option, g_publishMgr->allCap[0]) != SOFTBUS_OK) { |
| @@ -388,37 +406,87 @@ static int32_t CoapStopScan(const PublishOption *option) | |||
| 388 | return ret; | 406 | return ret; |
| 389 | } | 407 | } |
| 390 | 408 | ||
| 391 | -static bool UpdateFilter(void) | 409 | +static void GetPubCapability(uint32_t *capability, uint32_t capLen, bool *isNeedUpdate) |
| 392 | { | 410 | { |
| 393 | - if (!g_subscribeMgr->isUpdate) { | 411 | + DISC_CHECK_AND_RETURN_LOGE(SoftBusMutexLock(&(g_publishMgr->lock)) == SOFTBUS_OK, |
| 394 | - return true; | 412 | + DISC_COAP, "mutex lock failed."); |
| 413 | + if (memcpy_s(capability, capLen * sizeof(uint32_t), | ||
| 414 | + g_publishMgr->allCap, sizeof(g_publishMgr->allCap)) == EOK) { | ||
| 415 | + *isNeedUpdate = g_publishMgr->isUpdate; | ||
| 416 | + } else { | ||
| 417 | + DISC_LOGE(DISC_COAP, "cpy pub allCap failed"); | ||
| 395 | } | 418 | } |
| 396 | - int32_t ret = DiscCoapSetFilterCapability(CAPABILITY_NUM, g_subscribeMgr->allCap); | 419 | + (void)SoftBusMutexUnlock(&(g_publishMgr->lock)); |
| 397 | - if (ret != SOFTBUS_OK) { | 420 | +} |
| 398 | - DfxRecordSetFilterEnd(g_subscribeMgr->allCap[0], ret); | 421 | + |
| 422 | +static void GetSubscribeCapability(uint32_t *capability, uint32_t capLen, bool *isNeedUpdate) | ||
| 423 | +{ | ||
| 424 | + DISC_CHECK_AND_RETURN_LOGE(SoftBusMutexLock(&(g_subscribeMgr->lock)) == SOFTBUS_OK, | ||
| 425 | + DISC_COAP, "mutex lock failed."); | ||
| 426 | + if (memcpy_s(capability, capLen * sizeof(uint32_t), | ||
| 427 | + g_subscribeMgr->allCap, sizeof(g_subscribeMgr->allCap)) == EOK) { | ||
| 428 | + *isNeedUpdate = g_subscribeMgr->isUpdate; | ||
| 429 | + } else { | ||
| 430 | + DISC_LOGE(DISC_COAP, "cpy pub allCap failed"); | ||
| 431 | + } | ||
| 432 | + (void)SoftBusMutexUnlock(&(g_subscribeMgr->lock)); | ||
| 433 | +} | ||
| 434 | + | ||
| 435 | +static bool UpdateFilter(bool isSubscribe) | ||
| 436 | +{ | ||
| 437 | + uint32_t pubCap[CAPABILITY_NUM] = {0}; | ||
| 438 | + uint32_t subCap[CAPABILITY_NUM] = {0}; | ||
| 439 | + bool pubIsNeedUpdate = false; | ||
| 440 | + bool subIsNeedUpdate = false; | ||
| 441 | + if (isSubscribe) { | ||
| 442 | + subIsNeedUpdate = g_subscribeMgr->isUpdate; | ||
| 443 | + (void)memcpy_s(subCap, sizeof(subCap), g_subscribeMgr->allCap, sizeof(g_subscribeMgr->allCap)); | ||
| 444 | + GetPubCapability(pubCap, CAPABILITY_NUM, &pubIsNeedUpdate); | ||
| 445 | + } else { | ||
| 446 | + pubIsNeedUpdate = g_publishMgr->isUpdate; | ||
| 447 | + (void)memcpy_s(pubCap, sizeof(pubCap), g_publishMgr->allCap, sizeof(g_publishMgr->allCap)); | ||
| 448 | + GetSubscribeCapability(subCap, CAPABILITY_NUM, &subIsNeedUpdate); | ||
| 449 | + } | ||
| 450 | + DISC_CHECK_AND_RETURN_RET_LOGW(pubIsNeedUpdate || subIsNeedUpdate, true, DISC_COAP, "no need update"); | ||
| 451 | + uint32_t allCap[CAPABILITY_NUM] = {0}; | ||
| 452 | + AggregateAllCap(allCap, CAPABILITY_NUM, pubCap, subCap, CAPABILITY_NUM); | ||
| 453 | + int32_t ret = DiscCoapSetFilterCapability(CAPABILITY_NUM, allCap); | ||
| 454 | + if (ret != SOFTBUS_OK || DiscCoapRegisterCapability(CAPABILITY_NUM, allCap) != SOFTBUS_OK) { | ||
| 455 | + DfxRecordSetFilterEnd(allCap[0], ret); | ||
| 399 | DISC_LOGE(DISC_COAP, "set all filter capability to dfinder failed."); | 456 | DISC_LOGE(DISC_COAP, "set all filter capability to dfinder failed."); |
| 400 | SoftbusReportDiscFault(SOFTBUS_HISYSEVT_DISC_MEDIUM_COAP, SOFTBUS_HISYSEVT_DISCOVER_COAP_SET_FILTER_CAP_FAIL); | 457 | SoftbusReportDiscFault(SOFTBUS_HISYSEVT_DISC_MEDIUM_COAP, SOFTBUS_HISYSEVT_DISCOVER_COAP_SET_FILTER_CAP_FAIL); |
| 401 | return false; | 458 | return false; |
| 402 | } | 459 | } |
| 403 | - DfxRecordSetFilterEnd(g_subscribeMgr->allCap[0], SOFTBUS_OK); | 460 | + DfxRecordSetFilterEnd(allCap[0], SOFTBUS_OK); |
| 404 | return true; | 461 | return true; |
| 405 | } | 462 | } |
| 406 | 463 | ||
| 464 | +static int32_t CoapUpdateSubscribeCapBitmap(const SubscribeOption *option, bool isActive) | ||
| 465 | +{ | ||
| 466 | + if (RegisterAllCapBitmap(CAPABILITY_NUM, option->capabilityBitmap, g_subscribeMgr, MAX_CAP_NUM) != SOFTBUS_OK) { | ||
| 467 | + DISC_LOGE(DISC_COAP, "merge discovery capability failed. isActive=%{public}s", isActive ? "active" : "passive"); | ||
| 468 | + SoftbusReportDiscFault(SOFTBUS_HISYSEVT_DISC_MEDIUM_COAP, SOFTBUS_HISYSEVT_DISCOVER_COAP_MERGE_CAP_FAIL); | ||
| 469 | + return SOFTBUS_DISCOVER_COAP_MERGE_CAP_FAIL; | ||
| 470 | + } | ||
| 471 | + | ||
| 472 | + DiscCoapUpdateAbilityPacked(option->capabilityBitmap[0], (const char *)option->capabilityData, | ||
| 473 | + option->dataLen, false, true); | ||
| 474 | + | ||
| 475 | + if (!UpdateFilter(true)) { | ||
| 476 | + return SOFTBUS_DISCOVER_COAP_SET_FILTER_CAP_FAIL; | ||
| 477 | + } | ||
| 478 | + return SOFTBUS_OK; | ||
| 479 | +} | ||
| 480 | + | ||
| 407 | static int32_t Discovery(const SubscribeOption *option, bool isActive) | 481 | static int32_t Discovery(const SubscribeOption *option, bool isActive) |
| 408 | { | 482 | { |
| 409 | DISC_CHECK_AND_RETURN_RET_LOGE(CheckParam(NULL, option, false), SOFTBUS_INVALID_PARAM, DISC_COAP, "invalid param"); | 483 | DISC_CHECK_AND_RETURN_RET_LOGE(CheckParam(NULL, option, false), SOFTBUS_INVALID_PARAM, DISC_COAP, "invalid param"); |
| 410 | DISC_CHECK_AND_RETURN_RET_LOGE(SoftBusMutexLock(&(g_subscribeMgr->lock)) == 0, SOFTBUS_LOCK_ERR, DISC_COAP, | 484 | DISC_CHECK_AND_RETURN_RET_LOGE(SoftBusMutexLock(&(g_subscribeMgr->lock)) == 0, SOFTBUS_LOCK_ERR, DISC_COAP, |
| 411 | "discovery mutex lock failed. isActive=%{public}s", isActive ? "active" : "passive"); | 485 | "discovery mutex lock failed. isActive=%{public}s", isActive ? "active" : "passive"); |
| 412 | - | 486 | + int32_t ret = CoapUpdateSubscribeCapBitmap(option, isActive); |
| 413 | - if (RegisterAllCapBitmap(CAPABILITY_NUM, option->capabilityBitmap, g_subscribeMgr, MAX_CAP_NUM) != SOFTBUS_OK) { | 487 | + if (ret != SOFTBUS_OK) { |
| 414 | (void)SoftBusMutexUnlock(&(g_subscribeMgr->lock)); | 488 | (void)SoftBusMutexUnlock(&(g_subscribeMgr->lock)); |
| 415 | - DISC_LOGE(DISC_COAP, "merge discovery capability failed. isActive=%{public}s", isActive ? "active" : "passive"); | 489 | + return ret; |
| 416 | - SoftbusReportDiscFault(SOFTBUS_HISYSEVT_DISC_MEDIUM_COAP, SOFTBUS_HISYSEVT_DISCOVER_COAP_MERGE_CAP_FAIL); | ||
| 417 | - return SOFTBUS_DISCOVER_COAP_MERGE_CAP_FAIL; | ||
| 418 | - } | ||
| 419 | - if (!UpdateFilter()) { | ||
| 420 | - (void)SoftBusMutexUnlock(&(g_subscribeMgr->lock)); | ||
| 421 | - return SOFTBUS_DISCOVER_COAP_SET_FILTER_CAP_FAIL; | ||
| 422 | } | 490 | } |
| 423 | if (!isActive) { | 491 | if (!isActive) { |
| 424 | (void)SoftBusMutexUnlock(&(g_subscribeMgr->lock)); | 492 | (void)SoftBusMutexUnlock(&(g_subscribeMgr->lock)); |
| @@ -436,6 +504,14 @@ static int32_t Discovery(const SubscribeOption *option, bool isActive) | |||
| 436 | .isPublish = false, | 504 | .isPublish = false, |
| 437 | .option.subscribeOption = *option, | 505 | .option.subscribeOption = *option, |
| 438 | }; | 506 | }; |
| 507 | + | ||
| 508 | + uint32_t curCap = option->capabilityBitmap[0]; | ||
| 509 | + if (DiscCoapRegisterCapabilityData(option->capabilityData, option->dataLen, curCap) != SOFTBUS_OK) { | ||
| 510 | + DISC_LOGW(DISC_COAP, "register capability data to dfinder failed."); | ||
| 511 | + (void)SoftBusMutexUnlock(&(g_subscribeMgr->lock)); | ||
| 512 | + return SOFTBUS_DISCOVER_COAP_START_PUBLISH_FAIL; | ||
| 513 | + } | ||
| 514 | + | ||
| 439 | SetDiscCoapOption(&discCoapOption, &discOption, g_subscribeMgr->allCap[0]); | 515 | SetDiscCoapOption(&discCoapOption, &discOption, g_subscribeMgr->allCap[0]); |
| 440 | if (DiscCoapStartDiscovery(&discCoapOption) != SOFTBUS_OK) { | 516 | if (DiscCoapStartDiscovery(&discCoapOption) != SOFTBUS_OK) { |
| 441 | (void)SoftBusMutexUnlock(&(g_subscribeMgr->lock)); | 517 | (void)SoftBusMutexUnlock(&(g_subscribeMgr->lock)); |
| @@ -488,7 +564,11 @@ static int32_t StopDisc(const SubscribeOption *option, bool isActive) | |||
| 488 | SoftbusReportDiscFault(SOFTBUS_HISYSEVT_DISC_MEDIUM_COAP, SOFTBUS_HISYSEVT_DISCOVER_COAP_CANCEL_CAP_FAIL); | 564 | SoftbusReportDiscFault(SOFTBUS_HISYSEVT_DISC_MEDIUM_COAP, SOFTBUS_HISYSEVT_DISCOVER_COAP_CANCEL_CAP_FAIL); |
| 489 | return SOFTBUS_DISCOVER_COAP_CANCEL_CAP_FAIL; | 565 | return SOFTBUS_DISCOVER_COAP_CANCEL_CAP_FAIL; |
| 490 | } | 566 | } |
| 491 | - if (!UpdateFilter()) { | 567 | +#ifdef DSOFTBUS_FEATURE_DISC_SHARE_COAP |
| 568 | + DiscCoapUpdateAbilityPacked(option->capabilityBitmap[0], (const char *)option->capabilityData, | ||
| 569 | + option->dataLen, false, false); | ||
| 570 | + | ||
| 571 | + if (!UpdateFilter(true)) { | ||
| 492 | (void)SoftBusMutexUnlock(&(g_subscribeMgr->lock)); | 572 | (void)SoftBusMutexUnlock(&(g_subscribeMgr->lock)); |
| 493 | return SOFTBUS_DISCOVER_COAP_SET_FILTER_CAP_FAIL; | 573 | return SOFTBUS_DISCOVER_COAP_SET_FILTER_CAP_FAIL; |
| 494 | } | 574 | } |
| @@ -50,6 +50,9 @@ typedef int32_t (*DiscCoapProcessDeviceInfoFunc)(const NSTACKX_DeviceInfo *nstac | |||
| 50 | 50 | ||
| 51 | typedef int32_t (*DiscCoapAssembleCapDataFunc)( | 51 | typedef int32_t (*DiscCoapAssembleCapDataFunc)( |
| 52 | uint32_t capability, const char *capabilityData, uint32_t dataLen, char *outData, uint32_t outLen); | 52 | uint32_t capability, const char *capabilityData, uint32_t dataLen, char *outData, uint32_t outLen); |
| 53 | +typedef void (*DiscCoapUpdateAbilityFunc)(uint32_t capability, const char *capabilityData, uint32_t dataLen, | ||
| 54 | + bool isPublish, bool isStart); | ||
| 55 | + | ||
| 53 | 56 | ||
| 54 | typedef int32_t (*DiscFillBtypeFunc)(uint32_t capability, uint32_t allCap, NSTACKX_DiscoverySettings *discSet); | 57 | typedef int32_t (*DiscFillBtypeFunc)(uint32_t capability, uint32_t allCap, NSTACKX_DiscoverySettings *discSet); |
| 55 | 58 | ||
| @@ -147,6 +150,7 @@ typedef struct TagDiscEnhanceFuncList { | |||
| 147 | 150 | ||
| 148 | DiscCoapProcessDeviceInfoFunc discCoapProcessDeviceInfo; | 151 | DiscCoapProcessDeviceInfoFunc discCoapProcessDeviceInfo; |
| 149 | 152 | ||
| 153 | + DiscCoapUpdateAbilityFunc discCoapUpdateAbility; | ||
| 150 | DiscCoapAssembleCapDataFunc discCoapAssembleCapData; | 154 | DiscCoapAssembleCapDataFunc discCoapAssembleCapData; |
| 151 | 155 | ||
| 152 | DiscFillBtypeFunc discFillBtype; | 156 | DiscFillBtypeFunc discFillBtype; |
| @@ -52,6 +52,8 @@ int32_t DiscCoapProcessDeviceInfoPacked(const NSTACKX_DeviceInfo *nstackxInfo, D | |||
| 52 | 52 | ||
| 53 | int32_t DiscCoapAssembleCapDataPacked(uint32_t capability, const char *capabilityData, uint32_t dataLen, char *outData, | 53 | int32_t DiscCoapAssembleCapDataPacked(uint32_t capability, const char *capabilityData, uint32_t dataLen, char *outData, |
| 54 | uint32_t outLen); | 54 | uint32_t outLen); |
| 55 | +void DiscCoapUpdateAbilityPacked(uint32_t capability, const char *capabilityData, uint32_t dataLen, | ||
| 56 | + bool isPublish, bool isStart); | ||
| 55 | 57 | ||
| 56 | 58 | ||
| 57 | 59 | ||
| @@ -46,6 +46,7 @@ static void DiscFeatureRegisterEnhanceFunc(void *soHandle) | |||
| 46 | g_discEnhanceFuncList.discCoapProcessDeviceInfo = dlsym(soHandle, "DiscCoapProcessDeviceInfo"); | 46 | g_discEnhanceFuncList.discCoapProcessDeviceInfo = dlsym(soHandle, "DiscCoapProcessDeviceInfo"); |
| 47 | 47 | ||
| 48 | g_discEnhanceFuncList.discCoapAssembleCapData = dlsym(soHandle, "DiscCoapAssembleCapData"); | 48 | g_discEnhanceFuncList.discCoapAssembleCapData = dlsym(soHandle, "DiscCoapAssembleCapData"); |
| 49 | + g_discEnhanceFuncList.discCoapUpdateAbility = dlsym(soHandle, "DiscCoapUpdateAbility"); | ||
| 49 | 50 | ||
| 50 | g_discEnhanceFuncList.discFillBtype = dlsym(soHandle, "DiscFillBtype"); | 51 | g_discEnhanceFuncList.discFillBtype = dlsym(soHandle, "DiscFillBtype"); |
| 51 | g_discEnhanceFuncList.discCoapAssembleBdata = dlsym(soHandle, "DiscCoapAssembleBdata"); | 52 | g_discEnhanceFuncList.discCoapAssembleBdata = dlsym(soHandle, "DiscCoapAssembleBdata"); |
| @@ -77,7 +78,6 @@ int32_t DiscRegisterEnhanceFunc(void *soHandle) | |||
| 77 | g_discEnhanceFuncList.discCoapReportNotification = dlsym(soHandle, "DiscCoapReportNotification"); | 78 | g_discEnhanceFuncList.discCoapReportNotification = dlsym(soHandle, "DiscCoapReportNotification"); |
| 78 | g_discEnhanceFuncList.pcCollaborationManagerDeinit = dlsym(soHandle, "PcCollaborationManagerDeinit"); | 79 | g_discEnhanceFuncList.pcCollaborationManagerDeinit = dlsym(soHandle, "PcCollaborationManagerDeinit"); |
| 79 | g_discEnhanceFuncList.pcCollaborationEventDeinit = dlsym(soHandle, "DiscPcCollaborationEventDeInit"); | 80 | g_discEnhanceFuncList.pcCollaborationEventDeinit = dlsym(soHandle, "DiscPcCollaborationEventDeInit"); |
| 80 | - | ||
| 81 | g_discEnhanceFuncList.discUsbDeinit = dlsym(soHandle, "DiscUsbDeinit"); | 81 | g_discEnhanceFuncList.discUsbDeinit = dlsym(soHandle, "DiscUsbDeinit"); |
| 82 | g_discEnhanceFuncList.discUsbInit = dlsym(soHandle, "DiscUsbInit"); | 82 | g_discEnhanceFuncList.discUsbInit = dlsym(soHandle, "DiscUsbInit"); |
| 83 | g_discEnhanceFuncList.discOopBleInit = dlsym(soHandle, "DiscOopBleInit"); | 83 | g_discEnhanceFuncList.discOopBleInit = dlsym(soHandle, "DiscOopBleInit"); |
| @@ -122,6 +122,16 @@ int32_t DiscCoapAssembleCapDataPacked(uint32_t capability, const char *capabilit | |||
| 122 | } | 122 | } |
| 123 | return pfnDiscEnhanceFuncList->discCoapAssembleCapData(capability, capabilityData, dataLen, outData, outLen); | 123 | return pfnDiscEnhanceFuncList->discCoapAssembleCapData(capability, capabilityData, dataLen, outData, outLen); |
| 124 | } | 124 | } |
| 125 | + | ||
| 126 | +void DiscCoapUpdateAbilityPacked(uint32_t capability, const char *capabilityData, uint32_t dataLen, | ||
| 127 | + bool isPublish, bool isStart) | ||
| 128 | +{ | ||
| 129 | + DiscEnhanceFuncList *pfnDiscEnhanceFuncList = DiscEnhanceFuncListGet(); | ||
| 130 | + if (DiscCheckFuncPointer((void *)pfnDiscEnhanceFuncList->discCoapUpdateAbility) != SOFTBUS_OK) { | ||
| 131 | + return; | ||
| 132 | + } | ||
| 133 | + return pfnDiscEnhanceFuncList->discCoapUpdateAbility(capability, capabilityData, dataLen, isPublish, isStart); | ||
| 134 | +} | ||
| 125 | 135 | ||
| 126 | 136 | ||
| 127 | int32_t DiscFillBtypePacked(uint32_t capability, uint32_t allCap, NSTACKX_DiscoverySettings *discSet) | 137 | int32_t DiscFillBtypePacked(uint32_t capability, uint32_t allCap, NSTACKX_DiscoverySettings *discSet) |