1 /* 2 * Copyright (c) 2020 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef OHOS_ABILITYMANAGERSERVICE_FEATURE_H 17 #define OHOS_ABILITYMANAGERSERVICE_FEATURE_H 18 19 #include "ability_mgr_handler.h" 20 #include "ability_service_interface.h" 21 #include "dmsfwk_interface.h" 22 #include "feature.h" 23 #include "iproxy_client.h" 24 #include "iunknown.h" 25 #include "nocopyable.h" 26 #define DISTRIBUTED_SCHEDULE_SERVICE "dtbschedsrv" 27 #define DMSLITE_FEATURE "dmslite" 28 29 namespace OHOS { 30 typedef int32 (*InvokeFunc)(const void *origin, IpcIo *req); 31 typedef void (*OnRequestCallbackFunc)(const void *data, int32_t ret); 32 33 class AbilityMgrFeature : public Feature { 34 public: 35 static int32 StartAbility(const Want *want); 36 static int32 TerminateAbility(uint64_t token); 37 static int32 ConnectAbility(const Want *want, SvcIdentity *svc, uint64_t token); 38 static int32 DisconnectAbility(SvcIdentity *svc, uint64_t token); 39 static int32 StopAbility(const Want *want); 40 41 static int32 Invoke(IServerProxy *iProxy, int funcId, void *origin, IpcIo *req, IpcIo *reply); 42 43 static int32 AppDeathNotify(const IpcContext* context, void *ipcMsg, IpcIo *data, void *arg); GetInstance()44 static AbilityMgrFeature *GetInstance() 45 { 46 static AbilityMgrFeature instance; 47 return &instance; 48 } 49 ~AbilityMgrFeature() = default; 50 private: 51 AbilityMgrFeature(); 52 static int32 StartAbilityInner(const Want *want, pid_t callingUid); 53 static int32 StartRemoteAbilityInner(const Want *want, const char *deviceId, pid_t uid, OnRequestCallbackFunc callback); 54 static int32 ConnectAbilityInner(const Want *want, SvcIdentity *svc, uint64_t token, pid_t callingUid); 55 static int32 StopAbilityInner(const Want *want, pid_t callingUid); 56 static int32 StartAbilityInvoke(const void *origin, IpcIo *req); 57 static int32 StartAbilityWithCbInvoke(const void *origin, IpcIo *req); 58 static int32 TerminateAbilityInvoke(const void *origin, IpcIo *req); 59 static int32 ConnectAbilityInvoke(const void *origin, IpcIo *req); 60 static int32 DisconnectAbilityInvoke(const void *origin, IpcIo *req); 61 static int32 StopAbilityInvoke(const void *origin, IpcIo *req); 62 63 static int32 AbilityTransactionDoneInvoke(const void *origin, IpcIo *req); 64 static int32 AttachBundleInvoke(const void *origin, IpcIo *req); 65 static int32 ConnectAbilityDoneInvoke(const void *origin, IpcIo *req); 66 static int32 DisconnectAbilityDoneInvoke(const void *origin, IpcIo *req); 67 static int32 RestartApp(const char *bundleName); 68 69 static const char *GetFeatureName(Feature *feature); 70 static void OnFeatureInitialize(Feature *feature, Service *parent, Identity identity); 71 static void OnFeatureStop(Feature *feature, Identity identity); 72 static BOOL OnFeatureMessage(Feature *feature, Request *request); 73 static void OnRequestCallback(const void *data, int32_t ret); 74 75 private: 76 Identity identity_; 77 static SvcIdentity svc_; 78 static IDmsListener *myCallback_; 79 static InvokeFunc invokeFuncList[INNER_BEGIN]; 80 DISALLOW_COPY_AND_MOVE(AbilityMgrFeature); 81 }; 82 83 typedef struct { 84 INHERIT_IUNKNOWNENTRY(AmsInterface); 85 AbilityMgrFeature *ams; 86 } AbilityMgrFeatureImpl; 87 } // namespace OHOS 88 #endif // OHOS_ABILITYMANAGERSERVICE_FEATURE_H 89