From 0bb081d0d06ec3c3c3406ec4ac5f4fc23268af92 Mon Sep 17 00:00:00 2001 From: qiudengcheng Date: Tue, 27 Jul 2021 01:07:54 -0700 Subject: [PATCH 01/20] IssueNo:#I3ZZD0 Description:StartRemoteAbility Sig:aafwk Feature or Bugfix: Feature Binary Source: No --- services/abilitymgr_lite/BUILD.gn | 1 + .../include/ability_mgr_feature.h | 4 +++ .../src/ability_mgr_feature.cpp | 36 +++++++++++++++++-- 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/services/abilitymgr_lite/BUILD.gn b/services/abilitymgr_lite/BUILD.gn index ba3479b..ffcd552 100644 --- a/services/abilitymgr_lite/BUILD.gn +++ b/services/abilitymgr_lite/BUILD.gn @@ -77,6 +77,7 @@ lite_library("abilityms") { "${appexecfwk_lite_path}/interfaces/innerkits/bundlemgr_lite", "${appexecfwk_lite_path}/frameworks/bundle_lite/include", "//foundation/communication/ipc_lite/interfaces/kits", + "//foundation/distributedschedule/dmsfwk_lite/interfaces/innerkits", "//foundation/distributedschedule/samgr_lite/interfaces/kits/registry", "//foundation/distributedschedule/samgr_lite/interfaces/kits/samgr", "//foundation/graphic/wms/interfaces/innerkits", diff --git a/services/abilitymgr_lite/include/ability_mgr_feature.h b/services/abilitymgr_lite/include/ability_mgr_feature.h index 12b574c..7f782c1 100755 --- a/services/abilitymgr_lite/include/ability_mgr_feature.h +++ b/services/abilitymgr_lite/include/ability_mgr_feature.h @@ -18,10 +18,13 @@ #include "ability_mgr_handler.h" #include "ability_service_interface.h" +#include "dmsfwk_interface.h" #include "feature.h" #include "iproxy_client.h" #include "iunknown.h" #include "nocopyable.h" +#define DISTRIBUTED_SCHEDULE_SERVICE "dtbschedsrv" +#define DMSLITE_FEATURE "dmslite" namespace OHOS { typedef int32 (*InvokeFunc)(const void *origin, IpcIo *req); @@ -46,6 +49,7 @@ public: private: AbilityMgrFeature(); static int32 StartAbilityInner(const Want *want, pid_t callingUid); + static int32 StartRemoteAbilityInner(const Want *want, const char *deviceId, pid_t uid); static int32 ConnectAbilityInner(const Want *want, SvcIdentity *svc, uint64_t token, pid_t callingUid); static int32 StopAbilityInner(const Want *want, pid_t callingUid); static int32 StartAbilityInvoke(const void *origin, IpcIo *req); diff --git a/services/abilitymgr_lite/src/ability_mgr_feature.cpp b/services/abilitymgr_lite/src/ability_mgr_feature.cpp index 4ca8788..e8d17cc 100644 --- a/services/abilitymgr_lite/src/ability_mgr_feature.cpp +++ b/services/abilitymgr_lite/src/ability_mgr_feature.cpp @@ -131,14 +131,46 @@ int32 AbilityMgrFeature::StartAbilityInvoke(const void *origin, IpcIo *req) if (!DeserializeWant(&want, req)) { return EC_FAILURE; } - int retVal = StartAbilityInner(&want, uid); + int32 retVal; + const char *deviceId = want.element->deviceId; + if (deviceId != nullptr && *deviceId != '\0') { + retVal = StartRemoteAbilityInner(&want, devideId, uid); + } else { + retVal = StartAbilityInner(&want, uid); + } ClearWant(&want); return retVal; } int32 AbilityMgrFeature::StartAbility(const Want *want) { - return StartAbilityInner(want, -1); + int32 retVal; + const char *deviceId = want.element->deviceId; + if (deviceId != nullptr && *deviceId != '\0') { + retVal = StartRemoteAbilityInner(&want, devideId, -1); + } else { + retVal = StartAbilityInner(want, -1); + } + return retVal; +} + +int32 AbilityMgrFeature::StartRemoteAbilityInner(const Want *want, const char *deviceId, pid_t uid) +{ + int32 retVal; + IUnknown *iUnknown = SAMGR_GetInstance()->getFeatureApi(DISTRIBUTED_SCHEDULE_SERVICE, DMSLITE_FEATURE); + DmsProxy *dmsInterface = NULL; + if (iUnknown == NULL) { + return EC_INVALID; + } + retVal = iUnknown->QueryInterface(iUnknown, DEFAULT_VERSION, (void**) &dmsInterface); + if (retVal != EC_SUCCESS) { + return EC_INVALID; + } + CallerInfo callerInfo = { + .uid = uid + }; + retVal = dmsInterface->StartRemoteAbility((Want *)want, &callerInfo, NULL); + return retVal; } int32 AbilityMgrFeature::StartAbilityInner(const Want *want, pid_t callingUid) -- Gitee From a74ed945c19f5598e69a453a0db4b5593c72004f Mon Sep 17 00:00:00 2001 From: qiudengcheng Date: Tue, 27 Jul 2021 04:05:20 -0700 Subject: [PATCH 02/20] IssueNo:#I3ZZD0 Description:StartRemoteAbility Sig:aafwk Feature or Bugfix: Feature Binary Source: No --- services/abilitymgr_lite/src/ability_mgr_feature.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/services/abilitymgr_lite/src/ability_mgr_feature.cpp b/services/abilitymgr_lite/src/ability_mgr_feature.cpp index e8d17cc..2935cdd 100644 --- a/services/abilitymgr_lite/src/ability_mgr_feature.cpp +++ b/services/abilitymgr_lite/src/ability_mgr_feature.cpp @@ -134,7 +134,7 @@ int32 AbilityMgrFeature::StartAbilityInvoke(const void *origin, IpcIo *req) int32 retVal; const char *deviceId = want.element->deviceId; if (deviceId != nullptr && *deviceId != '\0') { - retVal = StartRemoteAbilityInner(&want, devideId, uid); + retVal = StartRemoteAbilityInner(&want, deviceId, uid); } else { retVal = StartAbilityInner(&want, uid); } @@ -145,9 +145,9 @@ int32 AbilityMgrFeature::StartAbilityInvoke(const void *origin, IpcIo *req) int32 AbilityMgrFeature::StartAbility(const Want *want) { int32 retVal; - const char *deviceId = want.element->deviceId; + const char *deviceId = want->element->deviceId; if (deviceId != nullptr && *deviceId != '\0') { - retVal = StartRemoteAbilityInner(&want, devideId, -1); + retVal = StartRemoteAbilityInner(&want, deviceId, -1); } else { retVal = StartAbilityInner(want, -1); } @@ -157,7 +157,7 @@ int32 AbilityMgrFeature::StartAbility(const Want *want) int32 AbilityMgrFeature::StartRemoteAbilityInner(const Want *want, const char *deviceId, pid_t uid) { int32 retVal; - IUnknown *iUnknown = SAMGR_GetInstance()->getFeatureApi(DISTRIBUTED_SCHEDULE_SERVICE, DMSLITE_FEATURE); + IUnknown *iUnknown = SAMGR_GetInstance()->GetFeatureApi(DISTRIBUTED_SCHEDULE_SERVICE, DMSLITE_FEATURE); DmsProxy *dmsInterface = NULL; if (iUnknown == NULL) { return EC_INVALID; -- Gitee From 3410dc01aab0a2e254e8b65fda4c0b24c42a960a Mon Sep 17 00:00:00 2001 From: qiudengcheng Date: Tue, 27 Jul 2021 04:17:03 -0700 Subject: [PATCH 03/20] IssueNo:#I3ZZD0 Description:StartRemoteAbility Sig:aafwk Feature or Bugfix: Feature Binary Source: No --- services/abilitymgr_lite/src/ability_mgr_feature.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/abilitymgr_lite/src/ability_mgr_feature.cpp b/services/abilitymgr_lite/src/ability_mgr_feature.cpp index 2935cdd..3c5d0cc 100644 --- a/services/abilitymgr_lite/src/ability_mgr_feature.cpp +++ b/services/abilitymgr_lite/src/ability_mgr_feature.cpp @@ -147,7 +147,7 @@ int32 AbilityMgrFeature::StartAbility(const Want *want) int32 retVal; const char *deviceId = want->element->deviceId; if (deviceId != nullptr && *deviceId != '\0') { - retVal = StartRemoteAbilityInner(&want, deviceId, -1); + retVal = StartRemoteAbilityInner(want, deviceId, -1); } else { retVal = StartAbilityInner(want, -1); } -- Gitee From 25d562996db7a9179fc5558111bf3a1d9cb6d35c Mon Sep 17 00:00:00 2001 From: qiudengcheng Date: Tue, 27 Jul 2021 06:18:32 -0700 Subject: [PATCH 04/20] IssueNo:#I3ZZD0 Description:StartRemoteAbility Sig:aafwk Feature or Bugfix: Feature Binary Source: No --- services/abilitymgr_lite/src/ability_mgr_feature.cpp | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/services/abilitymgr_lite/src/ability_mgr_feature.cpp b/services/abilitymgr_lite/src/ability_mgr_feature.cpp index 3c5d0cc..c0a0502 100644 --- a/services/abilitymgr_lite/src/ability_mgr_feature.cpp +++ b/services/abilitymgr_lite/src/ability_mgr_feature.cpp @@ -144,25 +144,17 @@ int32 AbilityMgrFeature::StartAbilityInvoke(const void *origin, IpcIo *req) int32 AbilityMgrFeature::StartAbility(const Want *want) { - int32 retVal; - const char *deviceId = want->element->deviceId; - if (deviceId != nullptr && *deviceId != '\0') { - retVal = StartRemoteAbilityInner(want, deviceId, -1); - } else { - retVal = StartAbilityInner(want, -1); - } - return retVal; + return StartAbilityInner(want, -1); } int32 AbilityMgrFeature::StartRemoteAbilityInner(const Want *want, const char *deviceId, pid_t uid) { - int32 retVal; IUnknown *iUnknown = SAMGR_GetInstance()->GetFeatureApi(DISTRIBUTED_SCHEDULE_SERVICE, DMSLITE_FEATURE); DmsProxy *dmsInterface = NULL; if (iUnknown == NULL) { return EC_INVALID; } - retVal = iUnknown->QueryInterface(iUnknown, DEFAULT_VERSION, (void**) &dmsInterface); + int32 retVal = iUnknown->QueryInterface(iUnknown, DEFAULT_VERSION, (void**) &dmsInterface); if (retVal != EC_SUCCESS) { return EC_INVALID; } -- Gitee From 8a17b3b4b3a9dbbc522b2eda4e389ac498cb352c Mon Sep 17 00:00:00 2001 From: qiudengcheng Date: Wed, 28 Jul 2021 05:02:39 -0700 Subject: [PATCH 05/20] IssueNo:#I3ZZD0 Description:StartRemoteAbility Sig:aafwk Feature or Bugfix:Feature Binary Source:No Signed-off-by: qiudengcheng --- frameworks/abilitymgr_lite/BUILD.gn | 2 + .../abilitymgr_lite/src/ability_manager.cpp | 12 ++ frameworks/want_lite/include/want_utils.h | 10 ++ frameworks/want_lite/src/want.cpp | 139 ++++++++++++++++++ interfaces/kits/ability_lite/ability_errors.h | 6 + .../kits/ability_lite/ability_manager.h | 13 ++ interfaces/kits/want_lite/want.h | 37 +++++ services/abilitymgr_lite/BUILD.gn | 1 + .../include/ability_mgr_feature.h | 5 +- .../src/ability_mgr_feature.cpp | 40 ++++- 10 files changed, 260 insertions(+), 5 deletions(-) diff --git a/frameworks/abilitymgr_lite/BUILD.gn b/frameworks/abilitymgr_lite/BUILD.gn index e6f6180..1711438 100755 --- a/frameworks/abilitymgr_lite/BUILD.gn +++ b/frameworks/abilitymgr_lite/BUILD.gn @@ -19,7 +19,9 @@ lite_library("abilitymanager") { cflags_cc = cflags sources = [ + "src/ability_callback_utils.cpp", "src/ability_manager.cpp", + "src/ability_self_callback.cpp", "src/ability_service_manager.cpp", "src/abilityms_client.cpp", ] diff --git a/frameworks/abilitymgr_lite/src/ability_manager.cpp b/frameworks/abilitymgr_lite/src/ability_manager.cpp index c63b523..b36cc00 100755 --- a/frameworks/abilitymgr_lite/src/ability_manager.cpp +++ b/frameworks/abilitymgr_lite/src/ability_manager.cpp @@ -20,6 +20,7 @@ #include "ability_service_interface.h" #include "ability_service_manager.h" #include "abilityms_client.h" +#include "ability_self_callback.h" extern "C" { const int DEFAULT_TOKEN = 1; @@ -34,6 +35,17 @@ int StartAbility(const Want *want) return OHOS::AbilityMsClient::GetInstance().ScheduleAms(want, 0, nullptr, START_ABILITY); } +int StartAbilityWithCallback(const Want *want, AbilityClientCallback abilityClientCallback) +{ + if (want == nullptr || abilityClientCallback == nullptr) { + HILOG_ERROR(HILOG_MODULE_APP, "want or callback is null, StartAbilityWithCallback failed!"); + return -1; + } + const SvcIdentity *svc = OHOS::AbilitySelfCallback::GetInstance().RegisterAbilitySelfCallback(abilityClientCallback); + OHOS::AbilityMsClient::GetInstance().Initialize(); + return OHOS::AbilityMsClient::GetInstance().ScheduleAms(want, 0, svc, START_ABILITY); +} + int StopAbility(const Want *want) { if (want == nullptr) { diff --git a/frameworks/want_lite/include/want_utils.h b/frameworks/want_lite/include/want_utils.h index e9c955e..171ebe3 100644 --- a/frameworks/want_lite/include/want_utils.h +++ b/frameworks/want_lite/include/want_utils.h @@ -18,6 +18,12 @@ #include "want.h" +typedef struct { + uint8_t type = 0; + void *entity = nullptr; + uint8_t totalLen = 0; +} Tlv; + #ifdef __cplusplus #if __cplusplus extern "C" { @@ -29,6 +35,10 @@ extern "C" { bool SerializeWant(IpcIo *io, const Want *want); bool DeserializeWant(Want *want, IpcIo *io); +void FreeTlvStruct(Tlv *tlv); +bool UpdateWantData(Want *want, Tlv *tlv); +Tlv *EncapTlv(uint8_t type, uint8_t length, void *value, uint8_t valueLen); +Tlv *CombineKeyValueTlv(Tlv *keyTlv, Tlv *valueTlv); #endif #ifdef __cplusplus diff --git a/frameworks/want_lite/src/want.cpp b/frameworks/want_lite/src/want.cpp index 1525463..cd79063 100755 --- a/frameworks/want_lite/src/want.cpp +++ b/frameworks/want_lite/src/want.cpp @@ -51,6 +51,9 @@ constexpr static char URI_SEPARATOR = ';'; constexpr static int VALUE_NULL = 0; constexpr static int VALUE_OBJECT = 1; constexpr static int DATA_LENGTH = 2048; +constexpr uint8_t INT_VALUE_TYPE = 6; +constexpr uint8_t STRING_VALUE_TYPE = 13; +constexpr uint8_t KEY_VALUE_PAIR_TYPE = 97; #endif void ClearWant(Want *want) @@ -85,6 +88,142 @@ bool SetWantElement(Want *want, ElementName element) return true; } +Tlv *EncapTlv(uint8_t type, uint8_t length, void *value, uint8_t valueLen) +{ + void *entity = nullptr; + + // Tlv header can only has 2 bytes. + uint8_t totalLen = valueLen + 2; + entity = calloc(1, totalLen); + if (entity == nullptr) { + AdapterFree(entity); + return nullptr; + } + + if (memcpy_s((unsigned char *)entity, 1, &type, 1) != 0 || + memcpy_s((unsigned char *)entity + 1, 1, &length, 1) != 0 || + memcpy_s((unsigned char *)entity + 2, valueLen, value, valueLen) != 0) { + AdapterFree(entity); + return nullptr; + } + + Tlv *newTlv = new Tlv(); + newTlv->type = type; + newTlv->entity = entity; + newTlv->totalLen = totalLen; + return newTlv; +} + +void FreeTlvStruct(Tlv *tlv) +{ + AdapterFree(tlv->entity); + AdapterFree(tlv); +} + +Tlv *CombineKeyValueTlv(Tlv *keyTlv, Tlv *valueTlv) +{ + uint8_t newTlvValueLen = keyTlv->totalLen + valueTlv->totalLen; + void *newTlvValue = calloc(1, newTlvValueLen); + if (newTlvValue == nullptr) { + return nullptr; + } + if (memcpy_s((unsigned char *)newTlvValue, keyTlv->totalLen, keyTlv->entity, keyTlv->totalLen) != 0 || + memcpy_s((unsigned char *)newTlvValue + keyTlv->totalLen, valueTlv->totalLen, valueTlv->entity, valueTlv->totalLen) != 0) { + AdapterFree(newTlvValue); + return nullptr; + } + + Tlv *newTlv = EncapTlv(KEY_VALUE_PAIR_TYPE, newTlvValueLen, newTlvValue, newTlvValueLen); + AdapterFree(newTlvValue); + return newTlv; +} + +bool UpdateWantData(Want *want, Tlv *tlv) +{ + bool result = false; + if (want->data != nullptr) { + void *newWantData = calloc(1, tlv->totalLen + want->dataLength); + if (newWantData == nullptr) { + return result; + } + if (memcpy_s(newWantData, want->dataLength, want->data, want->dataLength) != 0 || + memcpy_s((unsigned char*)newWantData + want->dataLength, tlv->totalLen, tlv->entity, tlv->totalLen) != 0) { + AdapterFree(want->data); + return result; + } + AdapterFree(want->data); + want->data = newWantData; + want->dataLength = tlv->totalLen + want->dataLength; + result = true; + } else { + want->data = tlv->entity; + want->dataLength = tlv->totalLen; + result = true; + } + return result; +} + +bool SetIntParam(Want *want, const char *key, int8_t keyLen, int32_t value) +{ + bool result = false; + if (keyLen <= 0) { + return result; + } + + Tlv *keyTlv = EncapTlv(STRING_VALUE_TYPE, keyLen, (void *)key, keyLen); + if (keyTlv == nullptr) { + return result; + } + unsigned char intBuffer[4] = {0}; + for (int i = 0; i < 4; i++) { + intBuffer[i] = value >> (8 * (3- i)); + } + Tlv *valueTlv = EncapTlv(INT_VALUE_TYPE, sizeof(int), (void *)intBuffer, sizeof(int)); + if (valueTlv == nullptr) { + FreeTlvStruct(keyTlv); + return result; + } + Tlv *newTlv = CombineKeyValueTlv(keyTlv, valueTlv); + FreeTlvStruct(keyTlv); + FreeTlvStruct(valueTlv); + if (newTlv == nullptr) { + return result; + } + if (UpdateWantData(want, newTlv)) { + AdapterFree(newTlv); + } + return result; +} + +bool SetStrParam(Want *want, const char *key, int8_t keyLen, const char *value, int8_t valueLen) +{ + bool result = false; + if (keyLen <= 0 || valueLen <= 0) { + return result; + } + + Tlv *keyTlv = EncapTlv(STRING_VALUE_TYPE, keyLen, (void *)key, keyLen); + if (keyTlv == nullptr) { + return result; + } + + Tlv *valueTlv = EncapTlv(STRING_VALUE_TYPE, valueLen, (void *)value, valueLen); + if (valueTlv == nullptr) { + FreeTlvStruct(keyTlv); + return result; + } + Tlv *newTlv = CombineKeyValueTlv(keyTlv, valueTlv); + FreeTlvStruct(keyTlv); + FreeTlvStruct(valueTlv); + if (newTlv == nullptr) { + return result; + } + if (UpdateWantData(want, newTlv)) { + AdapterFree(newTlv); + } + return result; +} + #ifdef OHOS_APPEXECFWK_BMS_BUNDLEMANAGER bool SetWantSvcIdentity(Want *want, SvcIdentity sid) { diff --git a/interfaces/kits/ability_lite/ability_errors.h b/interfaces/kits/ability_lite/ability_errors.h index ca007b5..4701cd8 100755 --- a/interfaces/kits/ability_lite/ability_errors.h +++ b/interfaces/kits/ability_lite/ability_errors.h @@ -71,6 +71,12 @@ enum { /** The parameter is error. */ PARAM_CHECK_ERROR, + /** Get callback type error. */ + GET_CALLBACK_TYPE_ERROR, + + /** Generate callback local serviceId error. */ + CALLBACK_GENERATE_LOCAL_SERVICEID_FAILED, + /** Command error. */ COMMAND_ERROR = 0x7fff, }; diff --git a/interfaces/kits/ability_lite/ability_manager.h b/interfaces/kits/ability_lite/ability_manager.h index b4122b5..4e8da39 100644 --- a/interfaces/kits/ability_lite/ability_manager.h +++ b/interfaces/kits/ability_lite/ability_manager.h @@ -49,6 +49,19 @@ extern "C" { #endif #endif /* __cplusplus */ +/** + * @brief Called when desired ability has been started. + * + * This function can be registered through {@link StartAbility} to receive the start ability result. + * + * @param resultCode Indicates the status code returned for starting ability result. For details, see {@link AppexecfwkErrors}. + * @param resultMessage Indicates the result message returned with the status code. + * + * @since 6.0 + * @version 6.0 + */ +typedef void (*AbilityClientCallback)(const uint8_t resultCode, const void *resultMessage); + /** * @brief Starts an ability based on the specified {@link Want} information. * diff --git a/interfaces/kits/want_lite/want.h b/interfaces/kits/want_lite/want.h index c1f1f3e..faa1db0 100644 --- a/interfaces/kits/want_lite/want.h +++ b/interfaces/kits/want_lite/want.h @@ -92,6 +92,43 @@ extern "C" { */ void ClearWant(Want *want); +/** + * @brief Sets key and value to the want which would be passed to remote deive to start remote ability. + * + * @param want Indicates the pointer to the Want object to set. + * @param key Indicates the pointer to the key which would be added to the want. + * @param keyLen Indicates the length of key. + * @param value Indicate the int value which would be added to the want. + * + * @return Returns true if the setting is successful; returns false otherwise. + */ +bool SetIntParam(Want *want, const char *key, uint8_t keyLen, int32_t value); + +/** + * @brief Sets key and value to the want which would be passed to remote deive to start remote ability. + * + * @param want Indicates the pointer to the Want object to set. + * @param key Indicates the pointer to the key which would be added to the want. + * @param keyLen Indicates the length of key. + * @param value Indicate the pointer to the value which would be added to the want. + * + * @return Returns true if the setting is successful; returns false otherwise. + */ +bool SetStrParam(Want *want, const char *key, uint8_t keyLen, const char *value, uint8_t valueLen); + +/** + * @brief Sets the element variable for a specified Want object. + * + * To start a specified ability, you should call this function to set the {@link ElementName} required for starting + * the ability. + * + * @param want Indicates the pointer to the Want object to set. + * @param element Indicates the {@link ElementName} containing information required for starting the ability. + * + * @return Returns true if the setting is successful; returns false otherwise. + */ +bool SetWantElement(Want *want, ElementName element); + /** * @brief Sets the element variable for a specified Want object. * diff --git a/services/abilitymgr_lite/BUILD.gn b/services/abilitymgr_lite/BUILD.gn index ffcd552..9b0aa26 100644 --- a/services/abilitymgr_lite/BUILD.gn +++ b/services/abilitymgr_lite/BUILD.gn @@ -72,6 +72,7 @@ lite_library("abilityms") { "${aafwk_lite_path}/interfaces/kits/want_lite", "${aafwk_lite_path}/frameworks/want_lite/include", "${aafwk_lite_path}/interfaces/innerkits/abilitymgr_lite", + "${aafwk_lite_path}/frameworks/abilitymgr_lite/include", "${appexecfwk_lite_path}/interfaces/kits/bundle_lite", "${appexecfwk_lite_path}/utils/bundle_lite", "${appexecfwk_lite_path}/interfaces/innerkits/bundlemgr_lite", diff --git a/services/abilitymgr_lite/include/ability_mgr_feature.h b/services/abilitymgr_lite/include/ability_mgr_feature.h index 7f782c1..fe73e3e 100755 --- a/services/abilitymgr_lite/include/ability_mgr_feature.h +++ b/services/abilitymgr_lite/include/ability_mgr_feature.h @@ -28,6 +28,7 @@ namespace OHOS { typedef int32 (*InvokeFunc)(const void *origin, IpcIo *req); +typedef void (*OnRequestCallbackFunc)(const void *data, int32_t ret); class AbilityMgrFeature : public Feature { public: @@ -49,7 +50,7 @@ public: private: AbilityMgrFeature(); static int32 StartAbilityInner(const Want *want, pid_t callingUid); - static int32 StartRemoteAbilityInner(const Want *want, const char *deviceId, pid_t uid); + static int32 StartRemoteAbilityInner(const Want *want, const char *deviceId, pid_t uid, OnRequestCallbackFunc callback); static int32 ConnectAbilityInner(const Want *want, SvcIdentity *svc, uint64_t token, pid_t callingUid); static int32 StopAbilityInner(const Want *want, pid_t callingUid); static int32 StartAbilityInvoke(const void *origin, IpcIo *req); @@ -68,9 +69,11 @@ private: static void OnFeatureInitialize(Feature *feature, Service *parent, Identity identity); static void OnFeatureStop(Feature *feature, Identity identity); static BOOL OnFeatureMessage(Feature *feature, Request *request); + static void OnRequestCallback(const void *data, int32_t ret); private: Identity identity_; + static SvcIdentity *svc_; static InvokeFunc invokeFuncList[INNER_BEGIN]; DISALLOW_COPY_AND_MOVE(AbilityMgrFeature); }; diff --git a/services/abilitymgr_lite/src/ability_mgr_feature.cpp b/services/abilitymgr_lite/src/ability_mgr_feature.cpp index c0a0502..4301200 100644 --- a/services/abilitymgr_lite/src/ability_mgr_feature.cpp +++ b/services/abilitymgr_lite/src/ability_mgr_feature.cpp @@ -15,6 +15,7 @@ #include "ability_mgr_feature.h" +#include "ability_callback_utils.h" #include "ability_connect_trans_param.h" #include "ability_errors.h" #include "ability_info.h" @@ -120,6 +121,22 @@ BOOL AbilityMgrFeature::OnFeatureMessage(Feature *feature, Request *request) return TRUE; } +void AbilityMgrFeature::OnRequestCallback(const void *data, int32_t ret) +{ + IpcIo io; + char ipcData[IPC_IO_DATA_MAX]; + IpcIo reply; + IpcIoInit(&io, ipcData, IPC_IO_DATA_MAX, 0); + IpcIoPushInt32(&io, static_cast(ret)); + int32_t transRet = Transact(NULL, *svc_, START_ABILITY_CALLBACK, &io, &reply, LITEIPC_FLAG_ONEWAY, NULL); + if (ret != LITEIPC_OK) { + HILOG_ERROR(HILOG_MODULE_APP, "AbilityManagerFeature InnerSelfTransact fialed %{public}d\n", ret); + } + #ifdef __LINUX__ + BinderRelease(svc_->ipcContext, svc_->handle); + #endif +} + int32 AbilityMgrFeature::StartAbilityInvoke(const void *origin, IpcIo *req) { pid_t uid = GetCallingUid(origin); @@ -131,10 +148,21 @@ int32 AbilityMgrFeature::StartAbilityInvoke(const void *origin, IpcIo *req) if (!DeserializeWant(&want, req)) { return EC_FAILURE; } - int32 retVal; + SvcIdentity *svc = IpcIoPopSvc(req); + if (svc_ != nullptr) { + AdapterFree(svc_); + } + if (svc != nullptr) { + svc_ = svc; + } + if (want.element == nullptr) { + PRINTE("AbilityMgrFeature", "invalid argument"); + return EC_INVALID; + } const char *deviceId = want.element->deviceId; + int32 retVal; if (deviceId != nullptr && *deviceId != '\0') { - retVal = StartRemoteAbilityInner(&want, deviceId, uid); + retVal = StartRemoteAbilityInner(&want, deviceId, uid, OnRequestCallback); } else { retVal = StartAbilityInner(&want, uid); } @@ -147,8 +175,12 @@ int32 AbilityMgrFeature::StartAbility(const Want *want) return StartAbilityInner(want, -1); } -int32 AbilityMgrFeature::StartRemoteAbilityInner(const Want *want, const char *deviceId, pid_t uid) +int32 AbilityMgrFeature::StartRemoteAbilityInner(const Want *want, const char *deviceId, pid_t uid, OnRequestCallbackFunc callback) { + IDmsListener *myCallback = new IDmsListener(); + if (callback != nullptr) { + myCallback->OnResultCallback = callback; + } IUnknown *iUnknown = SAMGR_GetInstance()->GetFeatureApi(DISTRIBUTED_SCHEDULE_SERVICE, DMSLITE_FEATURE); DmsProxy *dmsInterface = NULL; if (iUnknown == NULL) { @@ -161,7 +193,7 @@ int32 AbilityMgrFeature::StartRemoteAbilityInner(const Want *want, const char *d CallerInfo callerInfo = { .uid = uid }; - retVal = dmsInterface->StartRemoteAbility((Want *)want, &callerInfo, NULL); + retVal = dmsInterface->StartRemoteAbility((Want *)want, &callerInfo, myCallback); return retVal; } -- Gitee From 35477b4e94ab8c85eb08bbd62e8a7bc1bdc6ead0 Mon Sep 17 00:00:00 2001 From: qiudengcheng Date: Wed, 28 Jul 2021 06:01:57 -0700 Subject: [PATCH 06/20] IssueNo:#I42UOJ Description:StartRemoteAbility With Callback Sig:aafwk Feature or Bugfix:Feature Binary Source:No Signed-off-by: qiudengcheng --- frameworks/want_lite/src/want.cpp | 6 +----- services/abilitymgr_lite/src/ability_mgr_feature.cpp | 2 +- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/frameworks/want_lite/src/want.cpp b/frameworks/want_lite/src/want.cpp index cd79063..9d7f092 100755 --- a/frameworks/want_lite/src/want.cpp +++ b/frameworks/want_lite/src/want.cpp @@ -95,10 +95,6 @@ Tlv *EncapTlv(uint8_t type, uint8_t length, void *value, uint8_t valueLen) // Tlv header can only has 2 bytes. uint8_t totalLen = valueLen + 2; entity = calloc(1, totalLen); - if (entity == nullptr) { - AdapterFree(entity); - return nullptr; - } if (memcpy_s((unsigned char *)entity, 1, &type, 1) != 0 || memcpy_s((unsigned char *)entity + 1, 1, &length, 1) != 0 || @@ -148,7 +144,7 @@ bool UpdateWantData(Want *want, Tlv *tlv) } if (memcpy_s(newWantData, want->dataLength, want->data, want->dataLength) != 0 || memcpy_s((unsigned char*)newWantData + want->dataLength, tlv->totalLen, tlv->entity, tlv->totalLen) != 0) { - AdapterFree(want->data); + AdapterFree(newWantData); return result; } AdapterFree(want->data); diff --git a/services/abilitymgr_lite/src/ability_mgr_feature.cpp b/services/abilitymgr_lite/src/ability_mgr_feature.cpp index 4301200..f3c2c96 100644 --- a/services/abilitymgr_lite/src/ability_mgr_feature.cpp +++ b/services/abilitymgr_lite/src/ability_mgr_feature.cpp @@ -129,7 +129,7 @@ void AbilityMgrFeature::OnRequestCallback(const void *data, int32_t ret) IpcIoInit(&io, ipcData, IPC_IO_DATA_MAX, 0); IpcIoPushInt32(&io, static_cast(ret)); int32_t transRet = Transact(NULL, *svc_, START_ABILITY_CALLBACK, &io, &reply, LITEIPC_FLAG_ONEWAY, NULL); - if (ret != LITEIPC_OK) { + if (transRet != LITEIPC_OK) { HILOG_ERROR(HILOG_MODULE_APP, "AbilityManagerFeature InnerSelfTransact fialed %{public}d\n", ret); } #ifdef __LINUX__ -- Gitee From 36698a85c1ab0ababb1e4227abe7dae97ede025a Mon Sep 17 00:00:00 2001 From: qiudengcheng Date: Wed, 28 Jul 2021 06:20:32 -0700 Subject: [PATCH 07/20] IssueNo:#I42UOJ Description:StartRemoteAbility With Callback Sig:aafwk Feature or Bugfix:Feature Binary Source:No Signed-off-by: qiudengcheng --- frameworks/want_lite/src/want.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/frameworks/want_lite/src/want.cpp b/frameworks/want_lite/src/want.cpp index 9d7f092..f7ac6cc 100755 --- a/frameworks/want_lite/src/want.cpp +++ b/frameworks/want_lite/src/want.cpp @@ -187,6 +187,7 @@ bool SetIntParam(Want *want, const char *key, int8_t keyLen, int32_t value) } if (UpdateWantData(want, newTlv)) { AdapterFree(newTlv); + result = true; } return result; } @@ -216,6 +217,7 @@ bool SetStrParam(Want *want, const char *key, int8_t keyLen, const char *value, } if (UpdateWantData(want, newTlv)) { AdapterFree(newTlv); + result = true; } return result; } -- Gitee From e57d720ec89a62e50d906a9607db8d10492ae7fe Mon Sep 17 00:00:00 2001 From: qiudengcheng Date: Wed, 28 Jul 2021 06:27:24 -0700 Subject: [PATCH 08/20] IssueNo:#I42UOJ Description:StartRemoteAbility With Callback Sig:aafwk Feature or Bugfix:Feature Binary Source:No Signed-off-by: qiudengcheng --- .../include/ability_callback_utils.h | 34 ++++++ .../include/ability_self_callback.h | 47 +++++++ .../src/ability_callback_utils.cpp | 45 +++++++ .../src/ability_self_callback.cpp | 115 ++++++++++++++++++ 4 files changed, 241 insertions(+) create mode 100755 frameworks/abilitymgr_lite/include/ability_callback_utils.h create mode 100755 frameworks/abilitymgr_lite/include/ability_self_callback.h create mode 100755 frameworks/abilitymgr_lite/src/ability_callback_utils.cpp create mode 100755 frameworks/abilitymgr_lite/src/ability_self_callback.cpp diff --git a/frameworks/abilitymgr_lite/include/ability_callback_utils.h b/frameworks/abilitymgr_lite/include/ability_callback_utils.h new file mode 100755 index 0000000..56f4ea2 --- /dev/null +++ b/frameworks/abilitymgr_lite/include/ability_callback_utils.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2020 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef OHOS_ABILITY_CALLBACK_UTILS_H +#define OHOS_ABILITY_CALLBACK_UTILS_H + +#include + +#include "ability_info.h" +#include "ability_errors.h" +#include "ability_manager.h" + +namespace OHOS { +constexpr char START_ABILITY_SUCCESS[] = "Start ability success!"; + +enum { + START_ABILITY_CALLBACK +}; + +std::string ObtainErrorMessage(uint8_t errorCode); +} // namespace +#endif // OHOS_ABILITY_CALLBACK_UTILS_H \ No newline at end of file diff --git a/frameworks/abilitymgr_lite/include/ability_self_callback.h b/frameworks/abilitymgr_lite/include/ability_self_callback.h new file mode 100755 index 0000000..eca1f84 --- /dev/null +++ b/frameworks/abilitymgr_lite/include/ability_self_callback.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2020 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef OHOS_ABILITY_SELF_CALLBACK_H +#define OHOS_ABILITY_SELF_CALLBACK_H + +#include +#include + +#include "ability_manager.h" +#include "liteipc_adapter.h" +#include "nocopyable.h" + +namespace OHOS { +class AbilitySelfCallback { +public: + static AbilitySelfCallback &GetInstance() + { + static AbilitySelfCallback instance; + return instance; + } + ~AbilitySelfCallback(); + const SvcIdentity *RegisterAbilitySelfCallback(AbilityClientCallback &abilityClientCallback); + const AbilityClientCallback GetCallback(); +private: + AbilitySelfCallback() = default; + static int32_t Callback(const IpcContext *context, void *ipcMsg, IpcIo *io, void *arg); + int32_t GenerateLocalServiceId(); + AbilityClientCallback abilityClientCallback_ { nullptr }; + SvcIdentity *svcIdentity_ { nullptr }; + + DISALLOW_COPY_AND_MOVE(AbilitySelfCallback); +}; +} // namespace +#endif // OHOS_ABILITY_SELF_CALLBACK_H \ No newline at end of file diff --git a/frameworks/abilitymgr_lite/src/ability_callback_utils.cpp b/frameworks/abilitymgr_lite/src/ability_callback_utils.cpp new file mode 100755 index 0000000..148f817 --- /dev/null +++ b/frameworks/abilitymgr_lite/src/ability_callback_utils.cpp @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2020 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ability_callback_utils.h" + +namespace OHOS { +std::string ObtainErrorMessage(uint8_t errorCode) +{ + switch (errorCode) { + case PARAM_NULL_ERROR: + return "PARAM_NULL_ERROR"; + case MEMORY_MALLOC_ERROR: + return "MEMORY_MALLOC_ERROR"; + case DUMP_ABILITIES_ERROR: + return "DUMP_ABILITIES_ERROR"; + case IPC_REQUEST_ERROR: + return "IPC_REQUEST_ERROR"; + case SERIALIZE_ERROR: + return "SERIALIZE_ERROR"; + case CREATE_APPTASK_ERROR: + return "CREATE_APPTASK_ERROR"; + case SCHEDULER_LIFECYCLE_ERROR: + return "SCHEDULER_LIFECYCLE_ERROR"; + case PARAM_CHECK_ERROR: + return "PARAM_CHECK_ERROR"; + case COMMAND_ERROR: + return "COMMAND_ERROR"; + default: { + return ""; + } + } +} +} // namespace \ No newline at end of file diff --git a/frameworks/abilitymgr_lite/src/ability_self_callback.cpp b/frameworks/abilitymgr_lite/src/ability_self_callback.cpp new file mode 100755 index 0000000..fbc1f65 --- /dev/null +++ b/frameworks/abilitymgr_lite/src/ability_self_callback.cpp @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2020 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ability_self_callback.h" + +#include "adapter.h" +#include "ability_callback_utils.h" +#include "ability_manager.h" +#include "iproxy_client.h" +#include "log.h" +#include "samgr_lite.h" + +namespace OHOS { +AbilitySelfCallback::~AbilitySelfCallback() +{ + if (svcIdentity_ != nullptr) { + (void) UnregisterIpcCallback(*svcIdentity_); + AdapterFree(svcIdentity_); + } +} + +int32_t InnerCallback(const char *resultMessage, uint8_t resultCode, const AbilityClientCallback &abilityClientCallback) +{ + if (resultMessage == nullptr || abilityClientCallback == nullptr) { + return PARAM_NULL_ERROR; + } + if (resultCode == ERR_OK) { + abilityClientCallback(resultCode, resultMessage); + } else { + abilityClientCallback(resultCode, ObtainErrorMessage(resultCode).c_str()); + } + return ERR_OK; +} + +int32_t AbilitySelfCallback::Callback(const IpcContext *context, void *ipcMsg, IpcIo *io, void *arg) +{ + if (ipcMsg == nullptr) { + HILOG_ERROR(HILOG_MODULE_APP, "AbilitySelfCallback ipcMsg is nullptr"); + return PARAM_NULL_ERROR; + } + + if (io == nullptr) { + HILOG_ERROR(HILOG_MODULE_APP, "AbilitySelfCallback io is nullptr"); + FreeBuffer(NULL, ipcMsg); + return PARAM_NULL_ERROR; + } + AbilityClientCallback abilityClientCallback = GetInstance().GetCallback(); + if (abilityClientCallback == nullptr) { + FreeBuffer(NULL, ipcMsg); + return PARAM_NULL_ERROR; + } + uint32_t callbackType = 0; + int32_t ret = GetCode(ipcMsg, &callbackType); + if (ret != LITEIPC_OK) { + FreeBuffer(NULL, ipcMsg); + HILOG_ERROR(HILOG_MODULE_APP, "AbilitySelfCallbck get callback type failed"); + return GET_CALLBACK_TYPE_ERROR; + } + auto resultCode = static_cast(IpcIoPopInt32(io)); + FreeBuffer(NULL, ipcMsg); + if (callbackType == START_ABILITY_CALLBACK) { + return InnerCallback(START_ABILITY_SUCCESS, resultCode, abilityClientCallback); + } + HILOG_ERROR(HILOG_MODULE_APP, "AbilitySelfCallback get error callback type"); + return GET_CALLBACK_TYPE_ERROR; +} + +int32 AbilitySelfCallback::GenerateLocalServiceId() +{ + svcIdentity_ = reinterpret_cast(AdapterMalloc(sizeof(SvcIdentity))); + if (svcIdentity_ == nullptr) { + return CALLBACK_GENERATE_LOCAL_SERVICEID_FAILED; + } + + int32_t ret = RegisterIpcCallback(Callback, 0, IPC_WAIT_FOREVER, svcIdentity_, NULL); + if (ret != LITEIPC_OK) { + AdapterFree(svcIdentity_); + svcIdentity_ = nullptr; + return CALLBACK_GENERATE_LOCAL_SERVICEID_FAILED; + } + return ERR_OK; +} + +const SvcIdentity *AbilitySelfCallback::RegisterAbilitySelfCallback(AbilityClientCallback &abilityClientCallback) +{ + if (abilityClientCallback == nullptr) { + return nullptr; + } + if (svcIdentity_ == nullptr) { + int32 ret = GenerateLocalServiceId(); + if (ret != ERR_OK) { + return nullptr; + } + } + abilityClientCallback_ = abilityClientCallback; + return svcIdentity_; +} + +const AbilityClientCallback AbilitySelfCallback::GetCallback() +{ + return abilityClientCallback_; +} +} // namespace \ No newline at end of file -- Gitee From c64cb0abb528973a38d43b5b47b9b038ddb47ba7 Mon Sep 17 00:00:00 2001 From: qiudengcheng Date: Wed, 28 Jul 2021 06:46:50 -0700 Subject: [PATCH 09/20] IssueNo:#I42UOJ Description:StartRemoteAbility With Callback Sig:aafwk Feature or Bugfix:Feature Binary Source:No Signed-off-by: qiudengcheng --- services/abilitymgr_lite/include/ability_mgr_feature.h | 1 + services/abilitymgr_lite/src/ability_mgr_feature.cpp | 9 ++++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/services/abilitymgr_lite/include/ability_mgr_feature.h b/services/abilitymgr_lite/include/ability_mgr_feature.h index fe73e3e..f305583 100755 --- a/services/abilitymgr_lite/include/ability_mgr_feature.h +++ b/services/abilitymgr_lite/include/ability_mgr_feature.h @@ -74,6 +74,7 @@ private: private: Identity identity_; static SvcIdentity *svc_; + static IDmsListener *myCallback_; static InvokeFunc invokeFuncList[INNER_BEGIN]; DISALLOW_COPY_AND_MOVE(AbilityMgrFeature); }; diff --git a/services/abilitymgr_lite/src/ability_mgr_feature.cpp b/services/abilitymgr_lite/src/ability_mgr_feature.cpp index f3c2c96..b834e28 100644 --- a/services/abilitymgr_lite/src/ability_mgr_feature.cpp +++ b/services/abilitymgr_lite/src/ability_mgr_feature.cpp @@ -109,6 +109,7 @@ void AbilityMgrFeature::OnFeatureStop(Feature *feature, Identity identity) { (void) feature; (void) identity; + AdapterFree(myCallback_); } BOOL AbilityMgrFeature::OnFeatureMessage(Feature *feature, Request *request) @@ -177,9 +178,11 @@ int32 AbilityMgrFeature::StartAbility(const Want *want) int32 AbilityMgrFeature::StartRemoteAbilityInner(const Want *want, const char *deviceId, pid_t uid, OnRequestCallbackFunc callback) { - IDmsListener *myCallback = new IDmsListener(); + if (myCallback_ == nullptr) { + myCallback_ = new IDmsListener(); + } if (callback != nullptr) { - myCallback->OnResultCallback = callback; + myCallback_->OnResultCallback = callback; } IUnknown *iUnknown = SAMGR_GetInstance()->GetFeatureApi(DISTRIBUTED_SCHEDULE_SERVICE, DMSLITE_FEATURE); DmsProxy *dmsInterface = NULL; @@ -193,7 +196,7 @@ int32 AbilityMgrFeature::StartRemoteAbilityInner(const Want *want, const char *d CallerInfo callerInfo = { .uid = uid }; - retVal = dmsInterface->StartRemoteAbility((Want *)want, &callerInfo, myCallback); + retVal = dmsInterface->StartRemoteAbility((Want *)want, &callerInfo, myCallback_); return retVal; } -- Gitee From dd73287d29307a8018182d47060a0c8561773e31 Mon Sep 17 00:00:00 2001 From: qiudengcheng Date: Wed, 28 Jul 2021 21:01:10 -0700 Subject: [PATCH 10/20] IssueNo:#I42UOJ Description:StartRemoteAbility With Callback Sig:aafwk Feature or Bugfix:Feature Binary Source:No Signed-off-by: qiudengcheng --- services/abilitymgr_lite/src/ability_mgr_feature.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/services/abilitymgr_lite/src/ability_mgr_feature.cpp b/services/abilitymgr_lite/src/ability_mgr_feature.cpp index b834e28..cd2ad35 100644 --- a/services/abilitymgr_lite/src/ability_mgr_feature.cpp +++ b/services/abilitymgr_lite/src/ability_mgr_feature.cpp @@ -32,6 +32,9 @@ #include "want_utils.h" namespace OHOS { +SvcIdentity * AbilityMgrFeature::svc_ = nullptr; +IDmsListener* AbilityMgrFeature::myCallback_ = nullptr; + AbilityMgrFeatureImpl g_amsImpl = { SERVER_IPROXY_IMPL_BEGIN, .Invoke = AbilityMgrFeature::Invoke, @@ -110,6 +113,7 @@ void AbilityMgrFeature::OnFeatureStop(Feature *feature, Identity identity) (void) feature; (void) identity; AdapterFree(myCallback_); + AdapterFree(svc_); } BOOL AbilityMgrFeature::OnFeatureMessage(Feature *feature, Request *request) -- Gitee From a9ca13f0af8409904459eaf15c7948af8665fc66 Mon Sep 17 00:00:00 2001 From: qiudengcheng Date: Fri, 30 Jul 2021 20:19:11 -0700 Subject: [PATCH 11/20] IssueNo:#I439VD Description:StartRemoteAbility Callback caused Crash Sig:aafwk Feature or Bugfix:Bugfix Binary Source:No Signed-off-by: qiudengcheng --- .../include/ability_mgr_feature.h | 2 +- .../abilitymgr_lite/src/ability_mgr_feature.cpp | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/services/abilitymgr_lite/include/ability_mgr_feature.h b/services/abilitymgr_lite/include/ability_mgr_feature.h index f305583..4bbcafb 100755 --- a/services/abilitymgr_lite/include/ability_mgr_feature.h +++ b/services/abilitymgr_lite/include/ability_mgr_feature.h @@ -73,7 +73,7 @@ private: private: Identity identity_; - static SvcIdentity *svc_; + static SvcIdentity svc_; static IDmsListener *myCallback_; static InvokeFunc invokeFuncList[INNER_BEGIN]; DISALLOW_COPY_AND_MOVE(AbilityMgrFeature); diff --git a/services/abilitymgr_lite/src/ability_mgr_feature.cpp b/services/abilitymgr_lite/src/ability_mgr_feature.cpp index cd2ad35..44f4d12 100644 --- a/services/abilitymgr_lite/src/ability_mgr_feature.cpp +++ b/services/abilitymgr_lite/src/ability_mgr_feature.cpp @@ -32,7 +32,7 @@ #include "want_utils.h" namespace OHOS { -SvcIdentity * AbilityMgrFeature::svc_ = nullptr; +SvcIdentity AbilityMgrFeature::svc_ = {0}; IDmsListener* AbilityMgrFeature::myCallback_ = nullptr; AbilityMgrFeatureImpl g_amsImpl = { @@ -113,7 +113,6 @@ void AbilityMgrFeature::OnFeatureStop(Feature *feature, Identity identity) (void) feature; (void) identity; AdapterFree(myCallback_); - AdapterFree(svc_); } BOOL AbilityMgrFeature::OnFeatureMessage(Feature *feature, Request *request) @@ -133,12 +132,12 @@ void AbilityMgrFeature::OnRequestCallback(const void *data, int32_t ret) IpcIo reply; IpcIoInit(&io, ipcData, IPC_IO_DATA_MAX, 0); IpcIoPushInt32(&io, static_cast(ret)); - int32_t transRet = Transact(NULL, *svc_, START_ABILITY_CALLBACK, &io, &reply, LITEIPC_FLAG_ONEWAY, NULL); + int32_t transRet = Transact(NULL, svc_, START_ABILITY_CALLBACK, &io, &reply, LITEIPC_FLAG_ONEWAY, NULL); if (transRet != LITEIPC_OK) { HILOG_ERROR(HILOG_MODULE_APP, "AbilityManagerFeature InnerSelfTransact fialed %{public}d\n", ret); } #ifdef __LINUX__ - BinderRelease(svc_->ipcContext, svc_->handle); + BinderRelease(svc_.ipcContext, svc_.handle); #endif } @@ -154,11 +153,12 @@ int32 AbilityMgrFeature::StartAbilityInvoke(const void *origin, IpcIo *req) return EC_FAILURE; } SvcIdentity *svc = IpcIoPopSvc(req); - if (svc_ != nullptr) { - AdapterFree(svc_); - } if (svc != nullptr) { - svc_ = svc; + svc_ = *svc; + } else { + PRINTE("AbilityMgrFeature", "invalid svc"); + svc_ = {0}; + return EC_INVALID; } if (want.element == nullptr) { PRINTE("AbilityMgrFeature", "invalid argument"); -- Gitee From bf419c077b0ebae9e4f1b259f701771250dee649 Mon Sep 17 00:00:00 2001 From: qiudengcheng Date: Mon, 2 Aug 2021 02:14:11 -0700 Subject: [PATCH 12/20] IssueNo:#I43JE0 Description:StartRemoteAbility Callback caused Crash Sig:aafwk Feature or Bugfix:Bugfix Binary Source:No Signed-off-by: qiudengcheng --- .../src/ability_mgr_feature.cpp | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/services/abilitymgr_lite/src/ability_mgr_feature.cpp b/services/abilitymgr_lite/src/ability_mgr_feature.cpp index 44f4d12..80e403b 100644 --- a/services/abilitymgr_lite/src/ability_mgr_feature.cpp +++ b/services/abilitymgr_lite/src/ability_mgr_feature.cpp @@ -1,3 +1,4 @@ + /* * Copyright (c) 2020 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); @@ -152,23 +153,22 @@ int32 AbilityMgrFeature::StartAbilityInvoke(const void *origin, IpcIo *req) if (!DeserializeWant(&want, req)) { return EC_FAILURE; } + if (want.element == nullptr) { + PRINTE("AbilityMgrFeature", "invalid argument"); + return EC_INVALID; + } + const char *deviceId = want.element->deviceId; SvcIdentity *svc = IpcIoPopSvc(req); if (svc != nullptr) { svc_ = *svc; } else { - PRINTE("AbilityMgrFeature", "invalid svc"); svc_ = {0}; - return EC_INVALID; } - if (want.element == nullptr) { - PRINTE("AbilityMgrFeature", "invalid argument"); - return EC_INVALID; - } - const char *deviceId = want.element->deviceId; int32 retVal; if (deviceId != nullptr && *deviceId != '\0') { retVal = StartRemoteAbilityInner(&want, deviceId, uid, OnRequestCallback); } else { + svc_ = {0}; retVal = StartAbilityInner(&want, uid); } ClearWant(&want); @@ -182,12 +182,12 @@ int32 AbilityMgrFeature::StartAbility(const Want *want) int32 AbilityMgrFeature::StartRemoteAbilityInner(const Want *want, const char *deviceId, pid_t uid, OnRequestCallbackFunc callback) { - if (myCallback_ == nullptr) { - myCallback_ = new IDmsListener(); - } - if (callback != nullptr) { - myCallback_->OnResultCallback = callback; - } + // if (myCallback_ == nullptr) { + // myCallback_ = new IDmsListener(); + // } + // if (callback != nullptr) { + // myCallback_->OnResultCallback = callback; + // } IUnknown *iUnknown = SAMGR_GetInstance()->GetFeatureApi(DISTRIBUTED_SCHEDULE_SERVICE, DMSLITE_FEATURE); DmsProxy *dmsInterface = NULL; if (iUnknown == NULL) { @@ -200,7 +200,7 @@ int32 AbilityMgrFeature::StartRemoteAbilityInner(const Want *want, const char *d CallerInfo callerInfo = { .uid = uid }; - retVal = dmsInterface->StartRemoteAbility((Want *)want, &callerInfo, myCallback_); + retVal = dmsInterface->StartRemoteAbility((Want *)want, &callerInfo, nullptr); return retVal; } -- Gitee From 1e9311ecef03d3eca992f44a295968f325b05802 Mon Sep 17 00:00:00 2001 From: qiudengcheng Date: Mon, 2 Aug 2021 09:23:51 +0000 Subject: [PATCH 13/20] update services/abilitymgr_lite/src/ability_mgr_feature.cpp. --- services/abilitymgr_lite/src/ability_mgr_feature.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/services/abilitymgr_lite/src/ability_mgr_feature.cpp b/services/abilitymgr_lite/src/ability_mgr_feature.cpp index 80e403b..f14eaad 100644 --- a/services/abilitymgr_lite/src/ability_mgr_feature.cpp +++ b/services/abilitymgr_lite/src/ability_mgr_feature.cpp @@ -1,4 +1,3 @@ - /* * Copyright (c) 2020 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); -- Gitee From bec31933a81dc26806ca6f501511355cdb679f37 Mon Sep 17 00:00:00 2001 From: qiudengcheng Date: Mon, 2 Aug 2021 10:07:54 +0000 Subject: [PATCH 14/20] update services/abilitymgr_lite/src/ability_mgr_feature.cpp. --- services/abilitymgr_lite/src/ability_mgr_feature.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/services/abilitymgr_lite/src/ability_mgr_feature.cpp b/services/abilitymgr_lite/src/ability_mgr_feature.cpp index f14eaad..55e2a05 100644 --- a/services/abilitymgr_lite/src/ability_mgr_feature.cpp +++ b/services/abilitymgr_lite/src/ability_mgr_feature.cpp @@ -181,12 +181,6 @@ int32 AbilityMgrFeature::StartAbility(const Want *want) int32 AbilityMgrFeature::StartRemoteAbilityInner(const Want *want, const char *deviceId, pid_t uid, OnRequestCallbackFunc callback) { - // if (myCallback_ == nullptr) { - // myCallback_ = new IDmsListener(); - // } - // if (callback != nullptr) { - // myCallback_->OnResultCallback = callback; - // } IUnknown *iUnknown = SAMGR_GetInstance()->GetFeatureApi(DISTRIBUTED_SCHEDULE_SERVICE, DMSLITE_FEATURE); DmsProxy *dmsInterface = NULL; if (iUnknown == NULL) { -- Gitee From cf451da1b2ae73f75e62a5e41412e558a3f7c654 Mon Sep 17 00:00:00 2001 From: qiudengcheng Date: Thu, 5 Aug 2021 19:24:13 +0800 Subject: [PATCH 15/20] IssueNo:#I443UF Description:add definition of startAbilityWithCallback Sig:aafwk Feature or Bugfix: Bugfix Binary Source: No Signed-off-by: qiudengcheng --- interfaces/kits/ability_lite/ability_manager.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/interfaces/kits/ability_lite/ability_manager.h b/interfaces/kits/ability_lite/ability_manager.h index 4e8da39..17db20f 100644 --- a/interfaces/kits/ability_lite/ability_manager.h +++ b/interfaces/kits/ability_lite/ability_manager.h @@ -70,6 +70,16 @@ typedef void (*AbilityClientCallback)(const uint8_t resultCode, const void *resu */ int StartAbility(const Want *want); +/** + * @brief Starts an ability based on the specified {@link Want} information with specific callback {@link AbilityClientCallback}. + * + * @param want Indicates the pointer to the {@link Want} structure containing information about the ability to start. + * @param abilityClientCallback callback to be invoked when finishing starting ability. + * @return Returns 0 if this function is successfully called; returns another value otherwise. + */ + +int StartAbilityWithCallback(const Want *want, AbilityClientCallback abilityClientCallback); + /** * @brief Stops an ability based on the specified {@link Want} information. * -- Gitee From 6514a48a5ce5f880c216e93ffcd85d40db8597f9 Mon Sep 17 00:00:00 2001 From: qiudengcheng Date: Thu, 5 Aug 2021 19:38:15 +0800 Subject: [PATCH 16/20] IssueNo:#I443UF Description:add definition of startAbilityWithCallback Sig:aafwk Feature or Bugfix: Bugfix Binary Source: No Signed-off-by: qiudengcheng --- interfaces/kits/ability_lite/ability_manager.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/interfaces/kits/ability_lite/ability_manager.h b/interfaces/kits/ability_lite/ability_manager.h index 17db20f..03aa060 100644 --- a/interfaces/kits/ability_lite/ability_manager.h +++ b/interfaces/kits/ability_lite/ability_manager.h @@ -57,8 +57,8 @@ extern "C" { * @param resultCode Indicates the status code returned for starting ability result. For details, see {@link AppexecfwkErrors}. * @param resultMessage Indicates the result message returned with the status code. * - * @since 6.0 - * @version 6.0 + * @since 7.0 + * @version 7.0 */ typedef void (*AbilityClientCallback)(const uint8_t resultCode, const void *resultMessage); @@ -76,6 +76,9 @@ int StartAbility(const Want *want); * @param want Indicates the pointer to the {@link Want} structure containing information about the ability to start. * @param abilityClientCallback callback to be invoked when finishing starting ability. * @return Returns 0 if this function is successfully called; returns another value otherwise. + * + * @since 7.0 + * @version 7.0 */ int StartAbilityWithCallback(const Want *want, AbilityClientCallback abilityClientCallback); -- Gitee From f565f8a38742dbf8d358f5b95067b23a13e7787f Mon Sep 17 00:00:00 2001 From: qiudengcheng Date: Thu, 5 Aug 2021 19:52:24 +0800 Subject: [PATCH 17/20] IssueNo:#I443UF Description:add definition of startAbilityWithCallback Sig:aafwk Feature or Bugfix: Bugfix Binary Source: No Signed-off-by: qiudengcheng --- frameworks/abilitymgr_lite/src/ability_manager.cpp | 6 +++--- interfaces/kits/ability_lite/ability_manager.h | 14 ++++---------- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/frameworks/abilitymgr_lite/src/ability_manager.cpp b/frameworks/abilitymgr_lite/src/ability_manager.cpp index b36cc00..056fd75 100755 --- a/frameworks/abilitymgr_lite/src/ability_manager.cpp +++ b/frameworks/abilitymgr_lite/src/ability_manager.cpp @@ -35,13 +35,13 @@ int StartAbility(const Want *want) return OHOS::AbilityMsClient::GetInstance().ScheduleAms(want, 0, nullptr, START_ABILITY); } -int StartAbilityWithCallback(const Want *want, AbilityClientCallback abilityClientCallback) +int StartAbilityWithCallback(const Want *want, IAbilityStartCallback iAbilityStartCallback) { - if (want == nullptr || abilityClientCallback == nullptr) { + if (want == nullptr || iAbilityStartCallback == nullptr) { HILOG_ERROR(HILOG_MODULE_APP, "want or callback is null, StartAbilityWithCallback failed!"); return -1; } - const SvcIdentity *svc = OHOS::AbilitySelfCallback::GetInstance().RegisterAbilitySelfCallback(abilityClientCallback); + const SvcIdentity *svc = OHOS::AbilitySelfCallback::GetInstance().RegisterAbilitySelfCallback(iAbilityStartCallback); OHOS::AbilityMsClient::GetInstance().Initialize(); return OHOS::AbilityMsClient::GetInstance().ScheduleAms(want, 0, svc, START_ABILITY); } diff --git a/interfaces/kits/ability_lite/ability_manager.h b/interfaces/kits/ability_lite/ability_manager.h index 03aa060..8f7c53b 100644 --- a/interfaces/kits/ability_lite/ability_manager.h +++ b/interfaces/kits/ability_lite/ability_manager.h @@ -57,10 +57,8 @@ extern "C" { * @param resultCode Indicates the status code returned for starting ability result. For details, see {@link AppexecfwkErrors}. * @param resultMessage Indicates the result message returned with the status code. * - * @since 7.0 - * @version 7.0 */ -typedef void (*AbilityClientCallback)(const uint8_t resultCode, const void *resultMessage); +typedef void (*IAbilityStartCallback)(const uint8_t resultCode, const void *resultMessage); /** * @brief Starts an ability based on the specified {@link Want} information. @@ -71,17 +69,13 @@ typedef void (*AbilityClientCallback)(const uint8_t resultCode, const void *resu int StartAbility(const Want *want); /** - * @brief Starts an ability based on the specified {@link Want} information with specific callback {@link AbilityClientCallback}. + * @brief Starts an ability based on the specified {@link Want} information with specific callback {@link IAbilityStartCallback}. * * @param want Indicates the pointer to the {@link Want} structure containing information about the ability to start. - * @param abilityClientCallback callback to be invoked when finishing starting ability. + * @param iAbilityStartCallback callback to be invoked when finishing starting ability. * @return Returns 0 if this function is successfully called; returns another value otherwise. - * - * @since 7.0 - * @version 7.0 */ - -int StartAbilityWithCallback(const Want *want, AbilityClientCallback abilityClientCallback); +int StartAbility(const Want *want, IAbilityStartCallback iAbilityStartCallback); /** * @brief Stops an ability based on the specified {@link Want} information. -- Gitee From c30885f15827bd7ec3c8f6cafac46790bf27befe Mon Sep 17 00:00:00 2001 From: qiudengcheng Date: Thu, 5 Aug 2021 20:37:54 +0800 Subject: [PATCH 18/20] IssueNo:#I443UF Description:add definition of startAbilityWithCallback Sig:aafwk Feature or Bugfix: Bugfix Binary Source: No Signed-off-by: qiudengcheng --- frameworks/abilitymgr_lite/src/ability_manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/abilitymgr_lite/src/ability_manager.cpp b/frameworks/abilitymgr_lite/src/ability_manager.cpp index 056fd75..1864eb3 100755 --- a/frameworks/abilitymgr_lite/src/ability_manager.cpp +++ b/frameworks/abilitymgr_lite/src/ability_manager.cpp @@ -35,7 +35,7 @@ int StartAbility(const Want *want) return OHOS::AbilityMsClient::GetInstance().ScheduleAms(want, 0, nullptr, START_ABILITY); } -int StartAbilityWithCallback(const Want *want, IAbilityStartCallback iAbilityStartCallback) +int StartAbility(const Want *want, IAbilityStartCallback iAbilityStartCallback) { if (want == nullptr || iAbilityStartCallback == nullptr) { HILOG_ERROR(HILOG_MODULE_APP, "want or callback is null, StartAbilityWithCallback failed!"); -- Gitee From adca5ae97f26bd4d9bc2599ce8648e0b3a687be5 Mon Sep 17 00:00:00 2001 From: qiudengcheng Date: Thu, 5 Aug 2021 20:55:20 +0800 Subject: [PATCH 19/20] IssueNo:#I443UF Description:add definition of startAbilityWithCallback Sig:aafwk Feature or Bugfix: Bugfix Binary Source: No Signed-off-by: qiudengcheng --- frameworks/abilitymgr_lite/src/ability_manager.cpp | 2 +- interfaces/kits/ability_lite/ability_manager.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frameworks/abilitymgr_lite/src/ability_manager.cpp b/frameworks/abilitymgr_lite/src/ability_manager.cpp index 1864eb3..056fd75 100755 --- a/frameworks/abilitymgr_lite/src/ability_manager.cpp +++ b/frameworks/abilitymgr_lite/src/ability_manager.cpp @@ -35,7 +35,7 @@ int StartAbility(const Want *want) return OHOS::AbilityMsClient::GetInstance().ScheduleAms(want, 0, nullptr, START_ABILITY); } -int StartAbility(const Want *want, IAbilityStartCallback iAbilityStartCallback) +int StartAbilityWithCallback(const Want *want, IAbilityStartCallback iAbilityStartCallback) { if (want == nullptr || iAbilityStartCallback == nullptr) { HILOG_ERROR(HILOG_MODULE_APP, "want or callback is null, StartAbilityWithCallback failed!"); diff --git a/interfaces/kits/ability_lite/ability_manager.h b/interfaces/kits/ability_lite/ability_manager.h index 8f7c53b..02cc66b 100644 --- a/interfaces/kits/ability_lite/ability_manager.h +++ b/interfaces/kits/ability_lite/ability_manager.h @@ -75,7 +75,7 @@ int StartAbility(const Want *want); * @param iAbilityStartCallback callback to be invoked when finishing starting ability. * @return Returns 0 if this function is successfully called; returns another value otherwise. */ -int StartAbility(const Want *want, IAbilityStartCallback iAbilityStartCallback); +int StartAbilityWithCallback(const Want *want, IAbilityStartCallback iAbilityStartCallback); /** * @brief Stops an ability based on the specified {@link Want} information. -- Gitee From 5d846f43d728966ad0bdb42c105dc57e78af0e56 Mon Sep 17 00:00:00 2001 From: qiudengcheng Date: Thu, 5 Aug 2021 21:12:57 +0800 Subject: [PATCH 20/20] IssueNo:#I443UF Description:add definition of startAbilityWithCallback Sig:aafwk Feature or Bugfix: Bugfix Binary Source: No Signed-off-by: qiudengcheng --- .../include/ability_self_callback.h | 6 ++--- .../src/ability_self_callback.cpp | 24 +++++++++---------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/frameworks/abilitymgr_lite/include/ability_self_callback.h b/frameworks/abilitymgr_lite/include/ability_self_callback.h index eca1f84..505726e 100755 --- a/frameworks/abilitymgr_lite/include/ability_self_callback.h +++ b/frameworks/abilitymgr_lite/include/ability_self_callback.h @@ -32,13 +32,13 @@ public: return instance; } ~AbilitySelfCallback(); - const SvcIdentity *RegisterAbilitySelfCallback(AbilityClientCallback &abilityClientCallback); - const AbilityClientCallback GetCallback(); + const SvcIdentity *RegisterAbilitySelfCallback(IAbilityStartCallback &iAbilityStartCallback); + const IAbilityStartCallback GetCallback(); private: AbilitySelfCallback() = default; static int32_t Callback(const IpcContext *context, void *ipcMsg, IpcIo *io, void *arg); int32_t GenerateLocalServiceId(); - AbilityClientCallback abilityClientCallback_ { nullptr }; + IAbilityStartCallback iAbilityStartCallback_ { nullptr }; SvcIdentity *svcIdentity_ { nullptr }; DISALLOW_COPY_AND_MOVE(AbilitySelfCallback); diff --git a/frameworks/abilitymgr_lite/src/ability_self_callback.cpp b/frameworks/abilitymgr_lite/src/ability_self_callback.cpp index fbc1f65..d78e425 100755 --- a/frameworks/abilitymgr_lite/src/ability_self_callback.cpp +++ b/frameworks/abilitymgr_lite/src/ability_self_callback.cpp @@ -31,15 +31,15 @@ AbilitySelfCallback::~AbilitySelfCallback() } } -int32_t InnerCallback(const char *resultMessage, uint8_t resultCode, const AbilityClientCallback &abilityClientCallback) +int32_t InnerCallback(const char *resultMessage, uint8_t resultCode, const IAbilityStartCallback &iAbilityStartCallback) { - if (resultMessage == nullptr || abilityClientCallback == nullptr) { + if (resultMessage == nullptr || iAbilityStartCallback == nullptr) { return PARAM_NULL_ERROR; } if (resultCode == ERR_OK) { - abilityClientCallback(resultCode, resultMessage); + iAbilityStartCallback(resultCode, resultMessage); } else { - abilityClientCallback(resultCode, ObtainErrorMessage(resultCode).c_str()); + iAbilityStartCallback(resultCode, ObtainErrorMessage(resultCode).c_str()); } return ERR_OK; } @@ -56,8 +56,8 @@ int32_t AbilitySelfCallback::Callback(const IpcContext *context, void *ipcMsg, I FreeBuffer(NULL, ipcMsg); return PARAM_NULL_ERROR; } - AbilityClientCallback abilityClientCallback = GetInstance().GetCallback(); - if (abilityClientCallback == nullptr) { + IAbilityStartCallback iAbilityStartCallback = GetInstance().GetCallback(); + if (iAbilityStartCallback == nullptr) { FreeBuffer(NULL, ipcMsg); return PARAM_NULL_ERROR; } @@ -71,7 +71,7 @@ int32_t AbilitySelfCallback::Callback(const IpcContext *context, void *ipcMsg, I auto resultCode = static_cast(IpcIoPopInt32(io)); FreeBuffer(NULL, ipcMsg); if (callbackType == START_ABILITY_CALLBACK) { - return InnerCallback(START_ABILITY_SUCCESS, resultCode, abilityClientCallback); + return InnerCallback(START_ABILITY_SUCCESS, resultCode, iAbilityStartCallback); } HILOG_ERROR(HILOG_MODULE_APP, "AbilitySelfCallback get error callback type"); return GET_CALLBACK_TYPE_ERROR; @@ -93,9 +93,9 @@ int32 AbilitySelfCallback::GenerateLocalServiceId() return ERR_OK; } -const SvcIdentity *AbilitySelfCallback::RegisterAbilitySelfCallback(AbilityClientCallback &abilityClientCallback) +const SvcIdentity *AbilitySelfCallback::RegisterAbilitySelfCallback(IAbilityStartCallback &iAbilityStartCallback) { - if (abilityClientCallback == nullptr) { + if (iAbilityStartCallback == nullptr) { return nullptr; } if (svcIdentity_ == nullptr) { @@ -104,12 +104,12 @@ const SvcIdentity *AbilitySelfCallback::RegisterAbilitySelfCallback(AbilityClien return nullptr; } } - abilityClientCallback_ = abilityClientCallback; + iAbilityStartCallback_ = iAbilityStartCallback; return svcIdentity_; } -const AbilityClientCallback AbilitySelfCallback::GetCallback() +const IAbilityStartCallback AbilitySelfCallback::GetCallback() { - return abilityClientCallback_; + return iAbilityStartCallback_; } } // namespace \ No newline at end of file -- Gitee