已合并
add coap ability #11145
add coap ability #11145
已合并
wangJE创建于 2025年10月23日
共 5 个文件变更+123-27
@@ -21,6 +21,7 @@
21#include "disc_event.h"21#include "disc_event.h"
22#include "disc_log.h"22#include "disc_log.h"
23#include "disc_nstackx_adapter.h"23#include "disc_nstackx_adapter.h"
24+#include "g_enhance_disc_func_pack.h"
24#include "softbus_adapter_mem.h"25#include "softbus_adapter_mem.h"
25#include "softbus_adapter_thread.h"26#include "softbus_adapter_thread.h"
26#include "softbus_error_code.h"27#include "softbus_error_code.h"
@@ -45,6 +46,7 @@ static DiscCoapInfo *g_publishMgr = NULL;
45static DiscCoapInfo *g_subscribeMgr = NULL;46static DiscCoapInfo *g_subscribeMgr = NULL;
46static int CoapPubInfoDump(int fd);47static int CoapPubInfoDump(int fd);
47static int CoapSubInfoDump(int fd);48static int CoapSubInfoDump(int fd);
49+static bool UpdateFilter(bool isSubscribe);
48 50 
49static int32_t RegisterAllCapBitmap(uint32_t capBitmapNum, const uint32_t inCapBitmap[], DiscCoapInfo *info,51static 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+ 
110static void SetDiscCoapOption(DiscCoapOption *discCoapOption, DiscOption *option, uint32_t allCap)123static 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+#ifdef DSOFTBUS_FEATURE_DISC_SHARE_COAP
294+ DiscCoapUpdateAbilityPacked(option->capabilityBitmap[0], (const char *)option->capabilityData,
295+ option->dataLen, true, true);
296+#endif /* DSOFTBUS_FEATURE_DISC_SHARE_COAP */
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+#ifdef DSOFTBUS_FEATURE_DISC_SHARE_COAP
472+ DiscCoapUpdateAbilityPacked(option->capabilityBitmap[0], (const char *)option->capabilityData,
473+ option->dataLen, false, true);
474+#endif /* DSOFTBUS_FEATURE_DISC_SHARE_COAP */
475+ if (!UpdateFilter(true)) {
476+ return SOFTBUS_DISCOVER_COAP_SET_FILTER_CAP_FAIL;
477+ }
478+ return SOFTBUS_OK;
479+}
480+ 
407static int32_t Discovery(const SubscribeOption *option, bool isActive)481static 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+#ifdef DSOFTBUS_FEATURE_DISC_SHARE_COAP
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+#endif /* DSOFTBUS_FEATURE_DISC_SHARE_COAP */
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+#endif /* DSOFTBUS_FEATURE_DISC_SHARE_COAP */
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#ifdef DSOFTBUS_FEATURE_DISC_SHARE_COAP50#ifdef DSOFTBUS_FEATURE_DISC_SHARE_COAP
51typedef int32_t (*DiscCoapAssembleCapDataFunc)(51typedef 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#endif /* DSOFTBUS_FEATURE_DISC_SHARE_COAP */56#endif /* DSOFTBUS_FEATURE_DISC_SHARE_COAP */
54typedef int32_t (*DiscFillBtypeFunc)(uint32_t capability, uint32_t allCap, NSTACKX_DiscoverySettings *discSet);57typedef int32_t (*DiscFillBtypeFunc)(uint32_t capability, uint32_t allCap, NSTACKX_DiscoverySettings *discSet);
55#endif58#endif
@@ -147,6 +150,7 @@ typedef struct TagDiscEnhanceFuncList {
147#if !defined(__G_ENHANCE_DISC_FUNC_PACK_INNER_DISC_COAP_VIRTUAL)150#if !defined(__G_ENHANCE_DISC_FUNC_PACK_INNER_DISC_COAP_VIRTUAL)
148 DiscCoapProcessDeviceInfoFunc discCoapProcessDeviceInfo;151 DiscCoapProcessDeviceInfoFunc discCoapProcessDeviceInfo;
149#ifdef DSOFTBUS_FEATURE_DISC_SHARE_COAP152#ifdef DSOFTBUS_FEATURE_DISC_SHARE_COAP
153+ DiscCoapUpdateAbilityFunc discCoapUpdateAbility;
150 DiscCoapAssembleCapDataFunc discCoapAssembleCapData;154 DiscCoapAssembleCapDataFunc discCoapAssembleCapData;
151#endif /* DSOFTBUS_FEATURE_DISC_SHARE_COAP */155#endif /* DSOFTBUS_FEATURE_DISC_SHARE_COAP */
152 DiscFillBtypeFunc discFillBtype;156 DiscFillBtypeFunc discFillBtype;
@@ -52,6 +52,8 @@ int32_t DiscCoapProcessDeviceInfoPacked(const NSTACKX_DeviceInfo *nstackxInfo, D
52#ifdef DSOFTBUS_FEATURE_DISC_SHARE_COAP52#ifdef DSOFTBUS_FEATURE_DISC_SHARE_COAP
53int32_t DiscCoapAssembleCapDataPacked(uint32_t capability, const char *capabilityData, uint32_t dataLen, char *outData,53int32_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#endif57#endif
56#endif58#endif
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#ifdef DSOFTBUS_FEATURE_DISC_SHARE_COAP47#ifdef DSOFTBUS_FEATURE_DISC_SHARE_COAP
48 g_discEnhanceFuncList.discCoapAssembleCapData = dlsym(soHandle, "DiscCoapAssembleCapData");48 g_discEnhanceFuncList.discCoapAssembleCapData = dlsym(soHandle, "DiscCoapAssembleCapData");
49+ g_discEnhanceFuncList.discCoapUpdateAbility = dlsym(soHandle, "DiscCoapUpdateAbility");
49#endif /* DSOFTBUS_FEATURE_DISC_COAP */50#endif /* DSOFTBUS_FEATURE_DISC_COAP */
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#endif /* DSOFTBUS_FEATURE_DISC_COAP */135#endif /* DSOFTBUS_FEATURE_DISC_COAP */
126 136 
127int32_t DiscFillBtypePacked(uint32_t capability, uint32_t allCap, NSTACKX_DiscoverySettings *discSet)137int32_t DiscFillBtypePacked(uint32_t capability, uint32_t allCap, NSTACKX_DiscoverySettings *discSet)