Signed-off-by: qianli <847171309@qq.com>
Change-Id: I959868ca8996446b66a801e6875b75b764e5b234
This commit is contained in:
qianli 2021-06-17 11:34:15 +08:00
parent 24d1e5a12f
commit 4c62533976
15 changed files with 974 additions and 2 deletions

29
etc/init/BUILD.gn Normal file
View File

@ -0,0 +1,29 @@
# Copyright (c) 2021 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.
import("//build/ohos.gni")
#################################################################################
group("etc") {
deps = [ ":distributedsched.rc" ]
}
ohos_prebuilt_etc("distributedsched.rc") {
source = "distributedsched.rc"
relative_install_dir = "init"
subsystem_name = "distributedschedule"
part_name = "dmsfwk_standard"
}

View File

@ -0,0 +1,21 @@
# Copyright (c) 2021 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.
on post-fs-data
start distributedsched
service distributedsched /system/bin/sa_main /system/profile/distributedsched.xml
class z_core
user system
group system shell
seclabel u:r:distributedsched:s0

View File

@ -33,7 +33,7 @@ ohos_shared_library("zuri") {
"hiviewdfx_hilog_native:libhilog",
"ipc:ipc_core",
]
part_name = "dmsfwk_L2"
part_name = "dmsfwk_standard"
}
deps = [ "//utils/native/base:utils" ]
subsystem_name = "distributedschedule"

View File

@ -1,6 +1,6 @@
{
"parts": {
"dmsfwk_L2": {
"dmsfwk_standard": {
"variants": ["phone", "wearable"],
"inner_kits": [
{
@ -14,6 +14,9 @@
}
],
"module_list": [
"//foundation/distributedschedule/dmsfwk/etc/init:etc",
"//foundation/distributedschedule/dmsfwk/sa_profile:dms_sa_profile",
"//foundation/distributedschedule/dmsfwk/services/dtbschedmgr:distributedschedsvr"
],
"system_kits": [],
"test_list": []

26
sa_profile/1401.xml Normal file
View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Copyright (c) 2021 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.
-->
<info>
<process>distributedsched</process>
<systemability> <!--Declare a system ability and its profile-->
<name>1401</name> <!--Declare the name of system ability-->
<libpath>libdistributedschedsvr.z.so</libpath> <!--Declare the path of .so file which includes the system ability; Note: 1 .so file have 1 to N sysytem abilities. -->
<!--<depend></depend>--> <!--Declare the name of system abilities which the system ability depends on,using the system ability would start on demand. -->
<!--<depend-time-out></depend-time-out> --> <!-- Check all dependencies are available before the timeout period ended. The MAX_DEPENDENCY_TIMEOUT is 60s. -->
<run-on-create>true</run-on-create> <!-- "true" means the system ability would start imediately, "false" means the system ability would start on demand. -->
<distributed>true</distributed> <!-- "true" means the system ability supports distributed scheduling while "false" is not.-->
<dump-level>1</dump-level> <!-- Declare the dump level. 1-high; 2-media; 3-low -->
</systemability>
</info>

19
sa_profile/BUILD.gn Normal file
View File

@ -0,0 +1,19 @@
# Copyright (c) 2021 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.
import("//build/ohos/sa_profile/sa_profile.gni")
ohos_sa_profile("dms_sa_profile") {
sources = [ "1401.xml" ]
part_name = "dmsfwk_standard"
}

View File

@ -0,0 +1,57 @@
# Copyright (c) 2021 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.
import("//build/ohos.gni")
import("//build/ohos_var.gni")
config("distributed_sched_config") {
visibility = [ ":*" ]
include_dirs = [
"include",
]
cflags_cc = [ "-fexceptions" ]
}
ohos_shared_library("distributedschedsvr") {
install_enable = true
sources = [
"src/distributed_sched_proxy.cpp",
"src/distributed_sched_service.cpp",
"src/distributed_sched_stub.cpp",
]
configs = [ ":distributed_sched_config" ]
deps = [
"//base/hiviewdfx/hilog/interfaces/native/innerkits:libhilog",
"//foundation/aafwk/standard/interfaces/innerkits/ability_manager:ability_manager",
"//foundation/aafwk/standard/interfaces/innerkits/base:base",
"//foundation/aafwk/standard/interfaces/innerkits/want:want",
"//foundation/appexecfwk/standard/common:libappexecfwk_common",
"//foundation/appexecfwk/standard/interfaces/innerkits/appexecfwk_base:appexecfwk_base",
"//foundation/appexecfwk/standard/interfaces/innerkits/libeventhandler:libeventhandler",
"//foundation/distributedschedule/safwk/interfaces/innerkits/safwk:system_ability_fwk",
"//foundation/distributedschedule/samgr/interfaces/innerkits/samgr_proxy:samgr_proxy",
"//utils/native/base:utils",
]
external_deps = [
"hiviewdfx_hilog_native:libhilog",
"ipc:ipc_core",
]
part_name = "dmsfwk_standard"
subsystem_name = "distributedschedule"
}

View File

@ -0,0 +1,54 @@
/*
* Copyright (c) 2021 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 HARMONYOS_DISTRIBUTED_SCHED_INTERFACE_H
#define HARMONYOS_DISTRIBUTED_SCHED_INTERFACE_H
#include "iremote_broker.h"
#include "ohos/aafwk/content/want.h"
namespace OHOS {
namespace DistributedSchedule {
class IDistributedSched : public OHOS::IRemoteBroker{
public:
DECLARE_INTERFACE_DESCRIPTOR(u"OHOS.DistributedSchedule.IDistributedSched");
virtual int32_t StartRemoteAbility(const OHOS::AAFwk::Want& userWant, OHOS::AAFwk::Want& innerWant,
int32_t requestCode) = 0;
virtual int32_t StartAbilityFromRemote(const OHOS::AAFwk::Want& userWant, OHOS::AAFwk::Want& innerWant,
int32_t requestCode) = 0;
enum{
START_REMOTE_ABILITY = 1,
STOP_REMOTE_ABILITY = 3,
START_ABILITY_FROM_REMOTE = 4,
STOP_ABILITY_FROM_REMOTE = 5,
CONNECT_REMOTE_ABILITY = 6,
DISCONNECT_REMOTE_ABILITY = 7,
CONNECT_ABILITY_FROM_REMOTE = 8,
DISCONNECT_ABILITY_FROM_REMOTE = 9,
START_CONTINUATION = 11,
NOTIFY_COMPLETE_CONTINUATION = 12,
NOTIFY_CONTINUATION_RESULT_FROM_REMOTE = 13,
REGISTER_ABILITY_TOKEN = 14,
UNREGISTER_ABILITY_TOKEN = 15,
CONTINUE_ABILITY = 16,
NOTIFY_PROCESS_DIED_FROM_REMOTE = 17,
GET_REMOTE_APPTHREAD = 35,
};
};
} // namespace DistributedSchedule
} // namespace OHOS
#endif // HARMONYOS_DISTRIBUTED_SCHED_INTERFACE_H

View File

@ -0,0 +1,39 @@
/*
* Copyright (c) 2021 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 HARMONYOS_DISTRIBUTED_SCHED_PROXY_H
#define HARMONYOS_DISTRIBUTED_SCHED_PROXY_H
#include "distributed_sched_interface.h"
#include "iremote_proxy.h"
namespace OHOS {
namespace DistributedSchedule {
class DistributedSchedProxy : public IRemoteProxy<IDistributedSched>{
public:
explicit DistributedSchedProxy(const sptr<IRemoteObject>& impl)
: IRemoteProxy<IDistributedSched>(impl) {}
~DistributedSchedProxy(){}
int32_t StartRemoteAbility(const OHOS::AAFwk::Want& userWant, OHOS::AAFwk::Want& innerWant, int32_t requestCode) override;
int32_t StartAbilityFromRemote(const OHOS::AAFwk::Want& userWant, OHOS::AAFwk::Want& innerWant, int32_t requestCode) override;
private:
static inline BrokerDelegator<DistributedSchedProxy> delegator_;
};
} // namespace DistributedSchedule
} // namespace OHOS
#endif // HARMONYOS_DISTRIBUTED_SCHED_PROXY_H

View File

@ -0,0 +1,64 @@
/*
* Copyright (c) 2021 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 HARMONYOS_DISTRIBUTED_SCHED_SERVICE_H
#define HARMONYOS_DISTRIBUTED_SCHED_SERVICE_H
#include <memory>
#include <mutex>
#include <set>
#include <unordered_map>
#include "ability_connect_callback_interface.h"
#include "system_ability.h"
#include "distributed_sched_stub.h"
#include "iremote_object.h"
#include "iremote_proxy.h"
#include "nocopyable.h"
#include "single_instance.h"
namespace OHOS {
namespace DistributedSchedule {
enum class ServiceRunningState {
STATE_NO_START,
STATE_RUNNING
};
enum class TargetComponent {
HARMONY_COMPONENT,
AOSP_COMPONENT,
};
class DistributedSchedService : public SystemAbility, public DistributedSchedStub {
DECLARE_SYSTEM_ABILITY(DistributedSchedService);
DECLARE_SINGLE_INSTANCE_BASE(DistributedSchedService);
public:
~DistributedSchedService() = default;
void OnStart() override;
void OnStop() override;
int32_t StartRemoteAbility(const OHOS::AAFwk::Want& userWant, OHOS::AAFwk::Want& innerWant, int32_t requestCode) override;
int32_t StartAbilityFromRemote(const OHOS::AAFwk::Want& userWant, OHOS::AAFwk::Want& innerWant, int32_t requestCode) override;
private:
DistributedSchedService();
bool Init();
sptr<IDistributedSched> GetRemoteDms(const std::string& remoteDeviceId);
bool registerToService_ = false;
};
} // namespace DistributedSchedule
} // namespace OHOS
#endif // HARMONYOS_DISTRIBUTED_SCHED_SERVICE_H

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2021 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 HARMONYOS_DISTRIBUTED_SCHED_STUB_H
#define HARMONYOS_DISTRIBUTED_SCHED_STUB_H
#include "distributed_sched_interface.h"
#include "iremote_stub.h"
namespace OHOS {
namespace DistributedSchedule {
class DistributedSchedStub : public IRemoteStub<IDistributedSched> {
public:
DistributedSchedStub();
~DistributedSchedStub();
int32_t OnRemoteRequest(uint32_t code,
MessageParcel& data, MessageParcel& reply, MessageOption &option) override;
private:
bool EnforceInterfaceToken(MessageParcel& data);
int32_t StartRemoteAbilityInner(MessageParcel& data, MessageParcel& reply);
int32_t StartAbilityFromRemoteInner(MessageParcel& data, MessageParcel& reply);
using DistributedSchedFunc = int32_t(DistributedSchedStub::*)(MessageParcel& data, MessageParcel& reply);
std::map<uint32_t, DistributedSchedFunc> memberFuncMap_;
std::map<uint32_t, DistributedSchedFunc> localMemberFuncMap_;
};
} // namespace DistributedSchedule
} // namespace OHOS
#endif // OHOS_DISTRIBUTED_SCHEDULE_STUB_H

View File

@ -0,0 +1,311 @@
/*
* Copyright (c) 2021 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 SERVICES_DTBSCHEDMGR_INCLUDE_DTBSCHEDMGR_LOG_H_
#define SERVICES_DTBSCHEDMGR_INCLUDE_DTBSCHEDMGR_LOG_H_
#include "hilog/log_c.h"
#include "hilog/log_cpp.h"
namespace OHOS {
namespace DistributedSchedule {
static constexpr OHOS::HiviewDFX::HiLogLabel DSCHED_SERVICE_LABEL = {LOG_CORE, 0xD001800, "DSched_Service"};
#ifdef HILOGD
#undef HILOGD
#endif
#ifdef HILOGF
#undef HILOGF
#endif
#ifdef HILOGE
#undef HILOGE
#endif
#ifdef HILOGW
#undef HILOGW
#endif
#ifdef HILOGI
#undef HILOGI
#endif
#define HILOGD(...) (void)OHOS::HiviewDFX::HiLog::Debug(DSCHED_SERVICE_LABEL, __VA_ARGS__)
#define HILOGE(...) (void)OHOS::HiviewDFX::HiLog::Error(DSCHED_SERVICE_LABEL, __VA_ARGS__)
#define HILOGF(...) (void)OHOS::HiviewDFX::HiLog::Fatal(DSCHED_SERVICE_LABEL, __VA_ARGS__)
#define HILOGI(...) (void)OHOS::HiviewDFX::HiLog::Info(DSCHED_SERVICE_LABEL, __VA_ARGS__)
#define HILOGW(...) (void)OHOS::HiviewDFX::HiLog::Warn(DSCHED_SERVICE_LABEL, __VA_ARGS__)
enum{
/**
* Module type: Distributed schedule Service side
*/
DMS_MODULE_TYPE_SERVICE = 0,
};
// offset of dms error, only be used in this file.
constexpr ErrCode DMS_SERVICE_ERR_OFFSET = ErrCodeOffset(SUBSYS_DISTRIBUTEDSCHEDULE, DMS_MODULE_TYPE_SERVICE);
enum{
/**
* Result(29360128) for invalid parameters.
*/
INVALID_PARAMETERS_ERR = DMS_SERVICE_ERR_OFFSET,
/**
* Result(29360129) for no response when RPC call.
*/
RPC_CALL_NORESPONSE_ERR = 29360129,
/**
* Result(29360130) for not find connect callback.
*/
NO_CONNECT_CALLBACK_ERR = 29360130,
/**
* Result(29360131) for remote invalid parameters.
*/
INVALID_REMOTE_PARAMETERS_ERR = 29360131,
/**
* Result(29360132) for remote device fail to bind ability.
*/
REMOTE_DEVICE_BIND_ABILITY_ERR = 29360132,
/**
* Result(29360133) for remote device fail to unbind ability.
*/
REMOTE_DEVICE_UNBIND_ABILITY_ERR = 29360133,
/**
* Result(29360134) for remote invalid parameters.
*/
REMOTE_FAIL_GET_SHELLINFO_ERR = 29360134,
/**
* Result(29360135) for remote device fail to start ability.
*/
REMOTE_DEVICE_START_ABILITY_ERR = 29360135,
/**
* Result(29360136) for remote device fail to stop ability.
*/
REMOTE_DEVICE_STOP_ABILITY_ERR = 29360136,
/**
* Result(29360137) for reg repeat ability token.
*/
REG_REPEAT_ABILITY_TOKEN_ERR = 29360137,
/**
* Result(29360138) for no ability token.
*/
NO_ABILITY_TOKEN_ERR = 29360138,
/**
* Result(29360139) for no appthread.
*/
NO_APP_THREAD_ERR = 29360139,
/**
* Result(29360140) for select device continue error.
*/
SELECT_DEVICE_CONTINUE_ERR = 29360140,
/**
* Result(29360141) for dump write file error.
*/
DMS_WRITE_FILE_FAILED_ERR = 29360141,
/**
* Result(29360142) for notify app the bind remote service's device is offline.
*/
DEVICE_OFFLINE_ERR = 29360142,
/**
* Result(29360143) for not find hitrace id.
*/
NO_HITRACE_RECORD_ERR = 29360143,
/**
* Result(29360144) for get local deviceid fail.
*/
GET_LOCAL_DEVICE_ERR = 29360144,
/**
* Result(29360145) for get local deviceid fail.
*/
GET_DATAABILITY_ERR = 29360145,
/**
* Result(29360146) for DistributedSched Service Publish Exception.
*/
DMS_PUBLISH_EXCEPTION = 29360146,
/**
* Result(29360147) for DistributedSched Storage Exception.
*/
DMS_GET_STORAGE_EXCEPTION = 29360147,
/**
* Result(29360148) for DistributedSched Service Get System Ability Manager Exception.
*/
DMS_GET_SAMGR_EXCEPTION = 29360148,
/**
* Result(29360149) for DistributedSched Service IPC call noresponse error.
*/
IPC_CALL_NORESPONSE_ERR = 29360149,
/**
* Result(29360150) for DistributedSched Service call bundle manger service error.
*/
BUNDLE_MANAGER_SERVICE_ERR = 29360150,
/**
* Result(29360151) for DistributedSched Service call distributed manger error.
*/
DISTRIBUTED_MANAGER_ERR = 29360151,
/**
* Result(29360152) for DistributedSched Service NotifyCompleteContinuation failed.
*/
NOTIFYCOMPLETECONTINUATION_FAILED = 29360152,
/**
* Result(29360153) for DistributedSched Service Continue Ability Timeout Error.
*/
CONTINUE_ABILITY_TIMEOUT_ERR = 29360153,
/**
* Result(29360154) for DistributedSched Service Notify Complete Continuation abilityToken null.
*/
ABILITYTOKEN_NULL = 29360154,
/**
* Result(29360155) for get device list fail.
*/
GET_DEVICE_LIST_ERR = 29360155,
/**
* Result(29360156) for notify ability install error.
*/
NOTIFY_ABILITY_INSTALL_ERR = 29360156,
/**
* Result(29360157) for permission denied.
*/
DMS_PERMISSION_DENIED = 29360157,
/**
* Result(29360158) for notify ability free install.
*/
NOTIFY_ABILITY_FREE_INSTALL = 29360158,
/**
* Result(29360159) for notify app invalid uid.
*/
BIND_ABILITY_UID_INVALID_ERR = 29360159,
/**
* Result(29360160) for notify app happen connect leak.
*/
BIND_ABILITY_LEAK_ERR = 29360160,
/**
* Result(29360161) for can not service registry.
*/
NOT_FIND_SERVICE_REGISTRY = 29360161,
/**
* Result(29360162) for can not get service.
*/
NOT_FIND_SERVICE_PROXY = 29360162,
/**
* Result(29360163) for IPC Send Request to EMUI DEF fail.
*/
SEND_REQUEST_DEF_FAIL = 29360163,
/**
* Result(29360164) for BMS can not find the specified AA.
*/
CAN_NOT_FOUND_AA_ERR = 29360164,
/**
* Result(29360165) for DMS can not register device state callback.
*/
REGISTER_DEVICE_STATE_CALLBACK_ERR = 29360165,
/**
* Result(29360166) for DMS can not unregister device state callback.
*/
UNREGISTER_DEVICE_STATE_CALLBACK_ERR = 29360166,
/**
* Result(29360167) for DMS can not start slave device FA.
*/
START_SLAVE_FA_ERR = 29360167,
/**
* Result(29360168) for DMS can not get dmsproxy handle.
*/
GET_DMSPROXY_HANDLE_FAIL = 29360168,
/**
* Result(29360169) for dmsproxy service exception.
*/
DMSPROXY_SERVICE_ERR = 29360169,
/**
* Result(29360170) for softbus service unavailable.
*/
SOFTBUS_SERVICE_ERR = 29360170,
/**
* Result(29360171) for softbus register callback fail.
*/
SOFTBUS_REGISTER_CALLBACK_ERR = 29360171,
/**
* Result(29360172) for get DPermission sa fail.
*/
GET_DISTRIBUTED_PERMISSION_SA_ERR = 29360172,
/**
* Result(29360173) for get BMS sa fail.
*/
GET_BUNDLE_MANAGER_ERR = 29360173,
/**
* Result(29360174) for get remote dms fail.
*/
GET_REMOTE_DMS_FAIL = 29360174,
/**
* Result(29360175) for account access permission check failed.
*/
DMS_ACCOUNT_ACCESS_PERMISSION_DENIED = 29360175,
/**
* Result(29360176) for component access permission check failed.
*/
DMS_COMPONENT_ACCESS_PERMISSION_DENIED = 29360176,
/**
* Result(29360177) for distributed communication permission check failed.
*/
DMS_DISTRIBUTED_COMMUNICATION_PERMISSION_DENIED = 29360177,
/**
* Result(29360178) for osd function not support.
*/
TASK_OSD_NOT_SUPPORTED = 29360178,
/**
* Result(29360179) for osd switch is off.
*/
TASK_OSD_NOT_ENABLED = 29360179,
/**
* Result(29360180) for osd switch is on.
*/
TASK_OSD_ENABLED = 29360180,
/**
* Result(29360181) for front app check failed.
*/
CHECK_FRONT_APP_FAIL = 29360181,
/**
* Result(29360182) for ble connected.
*/
BLE_CONNECTED = 29360182,
/**
* Result(29360183) for open p2p session failed.
*/
OPENP2PSESSION_FAILED = 29360183,
/**
* Result(29360184) for notify task change listener failed.
*/
TASK_NOTIFY_CHANGE_LISTENER_ERR = 29360184,
/**
* Result(29360185) for subscribe data storage change failed.
*/
TASK_SUBSCRIBE_DATA_STORAGE_ERR = 29360185,
/**
* Result(29360186) for sync snapshot failed.
*/
TASK_SYNC_SNAPSHOT_ERR = 29360186,
/**
* Result(29360187) for sync task info list failed.
*/
TASK_SYNC_TASK_INFO_LIST_ERR = 29360187,
/**
* Result(29360188) for distributed communication permission check failed.
*/
REMOTE_DISTRIBUTED_COMMUNICATION_PERMISSION_DENIED = 29360188
};
} // namespace DistributedSchedule
} // namespace OHOS
#endif //SERVICES_DTBSCHEDMGR_INCLUDE_DTBSCHEDMGR_LOG_H_

View File

@ -0,0 +1,67 @@
/*
* Copyright (c) 2021 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 "distributed_sched_proxy.h"
#include "dtbschedmgr_log.h"
#include "ipc_types.h"
#include "parcel_helper.h"
#include "string_ex.h"
using namespace std;
using namespace OHOS::AAFwk;
namespace OHOS {
namespace DistributedSchedule {
namespace {
const std::u16string DMS_PROXY_INTERFACE_TOKEN = u"ohos.distributedschedule.accessToken";
}
int32_t DistributedSchedProxy::StartRemoteAbility(const OHOS::AAFwk::Want& userWant,
OHOS::AAFwk::Want& innerWant, int32_t requestCode)
{
sptr<IRemoteObject> remote = Remote();
if (remote == nullptr){
return ERR_NULL_OBJECT;
}
MessageParcel data;
if(!data.WriteInterfaceToken(DMS_PROXY_INTERFACE_TOKEN)) {
return ERR_FLATTEN_OBJECT;
}
PARCEL_WRITE_HELPER(data, Parcelable, &userWant);
PARCEL_WRITE_HELPER(data, Parcelable, &innerWant);
PARCEL_WRITE_HELPER(data, Int32, requestCode);
MessageParcel reply;
PARCEL_TRANSACT_SYNC_RET_INT(remote,START_REMOTE_ABILITY,data,reply);
}
int32_t DistributedSchedProxy::StartAbilityFromRemote(const OHOS::AAFwk::Want& userWant,
OHOS::AAFwk::Want& innerWant,int32_t requestCode)
{
sptr<IRemoteObject> remote = Remote();
if (remote == nullptr){
return ERR_NULL_OBJECT;
}
MessageParcel data;
if(!data.WriteInterfaceToken(DMS_PROXY_INTERFACE_TOKEN)) {
return ERR_FLATTEN_OBJECT;
}
PARCEL_WRITE_HELPER(data, Parcelable, &userWant);
PARCEL_WRITE_HELPER(data, Parcelable, &innerWant);
PARCEL_WRITE_HELPER(data, Int32, requestCode);
MessageParcel reply;
PARCEL_TRANSACT_SYNC_RET_INT(remote,START_ABILITY_FROM_REMOTE,data,reply);
}
} // namespace DistributedSchedule
} // namespace OHOS

View File

@ -0,0 +1,124 @@
/*
* Copyright (c) 2021 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 "distributed_sched_service.h"
#include <cinttypes>
#include <unistd.h>
#include "ability_manager_client.h"
#include "dtbschedmgr_log.h"
#include "element_name.h"
#include "ipc_skeleton.h"
#include "iservice_registry.h"
#include "string_ex.h"
#include "system_ability_definition.h"
namespace OHOS {
namespace DistributedSchedule {
using namespace AAFwk;
using namespace AppExecFwk;
namespace {
const std::string PARAM_CALLING_UID = "dms.extra.param.key.callingUid";
const std::string PARAM_CALLING_PID = "dms.extra.param.key.callingPid";
const std::string PARAM_CALLING_NETWORK_ID = "dms.extra.param.key.srcNetworkId";
}
IMPLEMENT_SINGLE_INSTANCE(DistributedSchedService);
const bool REGISTER_RESULT = SystemAbility::MakeAndRegisterAbility(&DistributedSchedService::GetInstance());
DistributedSchedService::DistributedSchedService() : SystemAbility(DISTRIBUTED_SCHED_SA_ID, true)
{
}
void DistributedSchedService::OnStart()
{
if (!Init()) {
HILOGE("failed to init DistributedSchedService");
return;
}
HILOGI("DistributedSchedService::OnStart start service success.");
}
bool DistributedSchedService::Init()
{
HILOGD("DistributedSchedService::Init ready to init.");
if (!registerToService_) {
bool ret = Publish(this);
if (!ret) {
HILOGE("DistributedSchedService::Init Publish failed!");
return false;
}
registerToService_ = true;
}
HILOGD("DistributedSchedService::Init init success.");
return true;
}
void DistributedSchedService::OnStop()
{
HILOGD("DistributedSchedService::OnStop ready to stop service.");
registerToService_ = false;
}
int32_t DistributedSchedService::StartRemoteAbility(const OHOS::AAFwk::Want& userWant,
OHOS::AAFwk::Want& innerWant, int32_t requestCode)
{
std::string deviceId = userWant.GetElement().GetDeviceID();
sptr<IDistributedSched> remoteDms = GetRemoteDms(deviceId);
if (remoteDms == nullptr) {
HILOGE("StartRemoteAbility DMS get remoteDms failed");
return INVALID_PARAMETERS_ERR;
}
HILOGI("[PerformanceTest] DistributedSchedService StartRemoteAbility transact begin");
int32_t result = remoteDms->StartAbilityFromRemote(userWant, innerWant, requestCode);
HILOGI("[PerformanceTest] DistributedSchedService StartRemoteAbility transact end");
return result;
}
int32_t DistributedSchedService::StartAbilityFromRemote(const OHOS::AAFwk::Want& userWant,
OHOS::AAFwk::Want& innerWant, int32_t requestCode)
{
ErrCode err = AAFwk::AbilityManagerClient::GetInstance()->StartAbility(userWant, requestCode);
if (err != ERR_OK) {
HILOGE("StartAbilityFromRemote is failed %{public}d", err);
}
return err;
}
sptr<IDistributedSched> DistributedSchedService::GetRemoteDms(const std::string& remoteDeviceId)
{
if (remoteDeviceId.empty()) {
HILOGE("GetRemoteDms remoteDeviceId is empty");
return nullptr;
}
HILOGD("GetRemoteDms connect deviceid is %s", remoteDeviceId.c_str());
auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
if (samgr == nullptr) {
HILOGE("GetRemoteDms failed to connect to systemAbilityMgr!");
return nullptr;
}
HILOGD("[PerformanceTest] DistributedSchedService GetRemoteDms begin");
auto object = samgr->CheckSystemAbility(1401/*,remoteDeviceId*/); //TODO
HILOGD("[PerformanceTest] DistributedSchedService GetRemoteDms end");
if (object == nullptr) {
HILOGE("GetRemoteDms failed to get remote DistributedSched %{private}s", remoteDeviceId.c_str());
return nullptr;
}
return iface_cast<IDistributedSched>(object);
}
} //namespace DistributedSchedule
} //namespace OHOS

View File

@ -0,0 +1,117 @@
/*
* Copyright (c) 2021 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 "distributed_sched_stub.h"
#include "dtbschedmgr_log.h"
#include "ipc_skeleton.h"
#include "message_parcel.h"
#include "parcel_helper.h"
using namespace std;
namespace OHOS {
namespace DistributedSchedule {
namespace {
const std::u16string DMS_STUB_INTERFACE_TOKEN = u"ohos.distributedschedule.accessToken";
}
DistributedSchedStub::DistributedSchedStub()
{
localMemberFuncMap_[START_REMOTE_ABILITY] = &DistributedSchedStub::StartRemoteAbilityInner;
memberFuncMap_[START_ABILITY_FROM_REMOTE] = &DistributedSchedStub::StartAbilityFromRemoteInner;
}
DistributedSchedStub::~DistributedSchedStub()
{
memberFuncMap_.clear();
localMemberFuncMap_.clear();
}
int32_t DistributedSchedStub::OnRemoteRequest(uint32_t code,
MessageParcel& data, MessageParcel &reply, MessageOption &option)
{
bool IsLocalCalling = IPCSkeleton::IsLocalCalling();
HILOGI("DistributedSchedStub::OnReceived, code = %{public}d, flags = %{public}d IsLocalCalling = %{public}d.", code,
option.GetFlags(), IsLocalCalling);
auto localFuncIt = localMemberFuncMap_.find(code);
if (localFuncIt != localMemberFuncMap_.end()) {
auto memberFunc = localFuncIt->second;
if (memberFunc != nullptr) {
return (this->*memberFunc)(data, reply);
}
}
auto distributedFuncIt = memberFuncMap_.find(code);
if (distributedFuncIt != memberFuncMap_.end()) {
auto memberFunc = distributedFuncIt->second;
if (memberFunc != nullptr) {
return (this->*memberFunc)(data, reply);
}
}
HILOGW("DistributedSchedStub: default case, need check.");
return IPCObjectStub::OnRemoteRequest(code, data, reply, option);
}
int32_t DistributedSchedStub::StartRemoteAbilityInner(MessageParcel& data, MessageParcel& reply)
{
if (!EnforceInterfaceToken(data)) {
HILOGW("DistributedSchedStub:: StartRemoteAbilityInner interface token check failed!");
return DMS_PERMISSION_DENIED;
}
shared_ptr<AAFwk::Want> userWant(data.ReadParcelable<AAFwk::Want>());
if (userWant == nullptr) {
HILOGW("DistributedSchedStub:: START_ABILITY userWant readParcelable failed!");
return ERR_NULL_OBJECT;
}
shared_ptr<AAFwk::Want> innerWant(data.ReadParcelable<AAFwk::Want>());
if (innerWant == nullptr) {
HILOGW("DistributedSchedStub:: START_ABILITY innerWant readParcelable failed!");
return ERR_NULL_OBJECT;
}
int32_t requestCode = 0;
PARCEL_READ_HELPER(data, Int32, requestCode);
int32_t result = StartRemoteAbility(*userWant, *innerWant, requestCode);
HILOGI("DistributedSchedStub:: StartRemoteAbilityInner result = %{public}d", result);
PARCEL_WRITE_REPLY_NOERROR(reply, Int32, result);
}
int32_t DistributedSchedStub::StartAbilityFromRemoteInner(MessageParcel& data, MessageParcel& reply)
{
if (!EnforceInterfaceToken(data)) {
HILOGW("DistributedSchedStub:: StartAbilityFromRemoteInner interface token check failed!");
return DMS_PERMISSION_DENIED;
}
shared_ptr<AAFwk::Want> userWant(data.ReadParcelable<AAFwk::Want>());
if (userWant == nullptr) {
HILOGW("DistributedSchedStub:: StartAbilityFromRemoteInner userWant readParcelable failed!");
return ERR_NULL_OBJECT;
}
shared_ptr<AAFwk::Want> innerWant(data.ReadParcelable<AAFwk::Want>());
if (innerWant == nullptr) {
HILOGW("DistributedSchedStub:: StartAbilityFromRemoteInner innerWant readParcelable failed!");
return ERR_NULL_OBJECT;
}
int32_t requestCode = 0;
PARCEL_READ_HELPER(data, Int32, requestCode);
int32_t result = StartAbilityFromRemote(*userWant, *innerWant, requestCode);
HILOGI("DistributedSchedStub:: StartAbilityFromRemoteInner result = %{public}d", result);
return ERR_NONE;
}
bool DistributedSchedStub::EnforceInterfaceToken(MessageParcel& data)
{
u16string interfaceToken = data.ReadInterfaceToken();
return interfaceToken == DMS_STUB_INTERFACE_TOKEN;
}
} //namespace DistributedSchedule
} //namespace OHOS