From 31f1a71fee10a1248de00ea1f36eeaf80e683673 Mon Sep 17 00:00:00 2001
From: "beiling.xie" <xiekunxun@huawei.com>
Date: Fri, 16 Sep 2022 01:11:40 +0800
Subject: [PATCH] adapter deviceauth ipc service

Signed-off-by: beiling.xie <xiekunxun@huawei.com>
---
 frameworks/inc/ipc_service.h                  |  2 ++
 frameworks/src/ipc_service.c                  | 16 +-----------
 frameworks/src/standard/ipc_adapt.cpp         | 18 +++++++------
 .../src/standard/ipc_dev_auth_proxy.cpp       | 25 ++++---------------
 frameworks/src/standard/ipc_dev_auth_stub.cpp |  7 +-----
 services/BUILD.gn                             | 15 ++++++++++-
 services/device_auth.c                        |  6 +++++
 7 files changed, 39 insertions(+), 50 deletions(-)

diff --git a/frameworks/inc/ipc_service.h b/frameworks/inc/ipc_service.h
index e3eb11b..ed73555 100755
--- a/frameworks/inc/ipc_service.h
+++ b/frameworks/inc/ipc_service.h
@@ -20,6 +20,8 @@
 extern "C" {
 #endif
 
+int DeviceAuthIpcInit();
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/frameworks/src/ipc_service.c b/frameworks/src/ipc_service.c
index afc21fc..3db6bb5 100644
--- a/frameworks/src/ipc_service.c
+++ b/frameworks/src/ipc_service.c
@@ -1038,20 +1038,10 @@ int32_t MainRescInit(void)
     return HC_SUCCESS;
 }
 
-int32_t main(int32_t argc, char const *argv[])
+int DeviceAuthIpcInit()
 {
     uintptr_t serviceCtx = 0x0;
     int32_t ret;
-    HcCondition cond;
-
-    (void)argc;
-    (void)argv;
-    LOGI("device authentication service starting ...");
-    ret = InitDeviceAuthService();
-    if (ret != HC_SUCCESS) {
-        LOGE("device auth service main, InitDeviceAuthService failed, ret %d", ret);
-        return 1;
-    }
 
     ret = MainRescInit();
     if (ret != HC_SUCCESS) {
@@ -1070,10 +1060,6 @@ int32_t main(int32_t argc, char const *argv[])
     }
     (void)AddMethodMap(serviceCtx);
     LOGI("device authentication service register to IPC manager done, service running...");
-    (void)memset_s(&cond, sizeof(cond), 0, sizeof(cond));
-    InitHcCond(&cond, NULL);
-    cond.wait(&cond);
-    DestroyHcCond(&cond);
     return 0;
 }
 
diff --git a/frameworks/src/standard/ipc_adapt.cpp b/frameworks/src/standard/ipc_adapt.cpp
index 3dd4ec8..3910726 100644
--- a/frameworks/src/standard/ipc_adapt.cpp
+++ b/frameworks/src/standard/ipc_adapt.cpp
@@ -23,12 +23,14 @@
 #include "ipc_dev_auth_stub.h"
 #include "ipc_sdk.h"
 #include "ipc_service.h"
-#include "iservice_registry.h"
 #include "securec.h"
 #include "system_ability_definition.h"
+#include "ipc_center.h"
+
 
 using namespace std;
 using namespace OHOS;
+static IpcCenter *g_deviceIpc = nullptr;
 namespace {
     static const int32_t BUFF_MAX_SZ = 128;
     static const int32_t IPC_CALL_BACK_MAX_NODES = 64;
@@ -1335,19 +1337,19 @@ void DestroyServiceInstance(uintptr_t *ipcInstance)
 
 int32_t AddDevAuthServiceToManager(uintptr_t *serviceCtx)
 {
-    int32_t ret = ERR_OK;
+    int32_t ret = HC_SUCCESS;
     ServiceDevAuth *sPtr = nullptr;
 
-    sptr<ISystemAbilityManager> sysMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
-    if (sysMgr == nullptr) {
-        return HC_ERR_IPC_GET_SERVICE;
-    }
     sPtr = new(std::nothrow) ServiceDevAuth();
     if (sPtr == nullptr) {
         return HC_ERR_ALLOC_MEMORY;
     }
-    ret = sysMgr->AddSystemAbility(DEVICE_AUTH_SERVICE_ID, sPtr);
-    if (ret != ERR_OK) {
+    sPtr->isDSoftBusObj = false;
+    if (!g_deviceIpc->Init(true, static_cast<IPCObjectStub*>(sPtr))) {
+        LOGE("deviceIpc init failed");
+    }
+    ret = IPCSkeleton::SetDeviceAuthObj(sPtr);
+    if (ret != true) {
         LOGE("add service failed");
         delete sPtr;
         return HC_ERROR;
diff --git a/frameworks/src/standard/ipc_dev_auth_proxy.cpp b/frameworks/src/standard/ipc_dev_auth_proxy.cpp
index bc3abeb..c493f7a 100644
--- a/frameworks/src/standard/ipc_dev_auth_proxy.cpp
+++ b/frameworks/src/standard/ipc_dev_auth_proxy.cpp
@@ -19,9 +19,9 @@
 #include "hc_log.h"
 #include "ipc_adapt.h"
 #include "ipc_sdk.h"
-#include "iservice_registry.h"
 #include "system_ability_definition.h"
 
+
 namespace OHOS {
 ProxyDevAuth::ProxyDevAuth(const sptr<IRemoteObject> &impl) : IRemoteProxy<IMethodsIpcCall>(impl)
 {}
@@ -33,7 +33,7 @@ int32_t ProxyDevAuth::DoCallRequest(MessageParcel &dataParcel, MessageParcel &re
 {
     int32_t ret;
     sptr<IRemoteObject> remote = nullptr;
-    MessageOption option = { MessageOption::TF_SYNC };
+    MessageOption option;
 
     LOGI("ProxyDevAuth, SendRequest...");
     remote = Remote();
@@ -42,9 +42,6 @@ int32_t ProxyDevAuth::DoCallRequest(MessageParcel &dataParcel, MessageParcel &re
         return HC_ERR_IPC_INTERNAL_FAILED;
     }
 
-    if (withSync == false) {
-        option = { MessageOption::TF_ASYNC };
-    }
     ret = remote->SendRequest(DEV_AUTH_CALL_REQUEST, dataParcel, replyParcel, option);
     LOGI("SendRequest done, ret %d", ret);
     (ret == ERR_NONE) ? replyParcel.ReadInt32(ret) : (ret = HC_ERR_IPC_INTERNAL_FAILED);
@@ -53,15 +50,8 @@ int32_t ProxyDevAuth::DoCallRequest(MessageParcel &dataParcel, MessageParcel &re
 
 bool ProxyDevAuth::ServiceRunning(void)
 {
-    auto saMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
-    if (saMgr == nullptr) {
-        return false;
-    }
-    auto daSa = saMgr->GetSystemAbility(DEVICE_AUTH_SERVICE_ID);
-    if (daSa == nullptr) {
-        return false;
-    }
-    return true;
+    auto daSa = IPCSkeleton::GetDeviceAuthObj();
+    return daSa != nullptr;
 }
 
 int32_t ProxyDevAuthData::EncodeCallRequest(int32_t type, const uint8_t *param, int32_t paramSz)
@@ -117,12 +107,7 @@ int32_t ProxyDevAuthData::FinalCallRequest(int32_t methodId)
 
 sptr<ProxyDevAuth> ProxyDevAuthData::GetProxy() const
 {
-    auto saMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
-    if (saMgr == nullptr) {
-        LOGE("GetSystemAbilityManager failed");
-        return nullptr;
-    }
-    auto daSa = saMgr->GetSystemAbility(DEVICE_AUTH_SERVICE_ID);
+    auto daSa = IPCSkeleton::GetDeviceAuthObj();
     if (daSa == nullptr) {
         LOGE("GetSystemAbility failed");
         return nullptr;
diff --git a/frameworks/src/standard/ipc_dev_auth_stub.cpp b/frameworks/src/standard/ipc_dev_auth_stub.cpp
index e33b770..648bc3b 100644
--- a/frameworks/src/standard/ipc_dev_auth_stub.cpp
+++ b/frameworks/src/standard/ipc_dev_auth_stub.cpp
@@ -286,12 +286,7 @@ void ServiceDevAuth::ActCallback(int32_t objIdx, int32_t callbackId, bool sync,
         LOGW("nothing to do, callback id %d, remote object id %d", callbackId, objIdx);
         return;
     }
-    MessageOption option(MessageOption::TF_SYNC);
-    option.SetWaitTime(DEV_AUTH_CALL_WAIT_TIME);
-    if (!sync) {
-        option.SetFlags(MessageOption::TF_ASYNC);
-        option.SetWaitTime(0);
-    }
+    MessageOption option;
     std::lock_guard<std::mutex> autoLock(g_cBMutex);
     sptr<ICommIpcCallback> proxy = iface_cast<ICommIpcCallback>(g_cbStub[objIdx].cbStub);
     proxy->DoCallBack(callbackId, cbHook, dataParcel, reply, option);
diff --git a/services/BUILD.gn b/services/BUILD.gn
index b2cdb17..ce6e24b 100644
--- a/services/BUILD.gn
+++ b/services/BUILD.gn
@@ -142,9 +142,14 @@ if (defined(ohos_lite)) {
       "//foundation/communication/dsoftbus/interfaces/kits/transport",
       "//foundation/communication/dsoftbus/interfaces/inner_kits/transport",
       "//third_party/json/include",
+      "${frameworks_path}/inc",
+      "${dev_frameworks_path}/inc/permission_adapter",
     ]
 
     sources = deviceauth_files
+    sources += deviceauth_ipc_files
+    sources += permission_adapter_files
+    sources += [ "${frameworks_path}/src/ipc_service.c" ]
     cflags = [ "-DHILOG_ENABLE" ]
     defines = deviceauth_defines
     cflags += build_flags
@@ -164,6 +169,7 @@ if (defined(ohos_lite)) {
 
     external_deps = [
       "hiviewdfx_hilog_native:libhilog",
+      "ipc:ipc_core",
     ]
     if (support_jsapi) {
       external_deps += [ "os_account_standard:os_account_innerkits" ]
@@ -238,6 +244,12 @@ if (defined(ohos_lite)) {
     sources = deviceauth_ipc_files
     sources += permission_adapter_files
     sources += [ "${frameworks_path}/src/ipc_sdk.c" ]
+    sources += [ "${os_adapter_path}/impl/src/hc_log.c" ]
+    sources += [ "${os_adapter_path}/impl/src/linux/hc_types.c" ]
+    sources += [ "${os_adapter_path}/impl/src/hc_mutex.c" ]
+    sources += [ "${common_lib_path}/impl/src/json_utils.c" ]
+    sources += [ "${common_lib_path}/impl/src/string_util.c" ]
+    sources += [ "${common_lib_path}/impl/src/clib_types.c" ]
 
     defines = [
       "__LINUX__",
@@ -250,9 +262,10 @@ if (defined(ohos_lite)) {
     }
 
     deps = [
-      "${deps_adapter_path}:${hal_module_name}",
       "//third_party/cJSON:cjson_static",
       "//utils/native/base:utils",
+      "//third_party/bounds_checking_function:libsec_shared",
+      "//third_party/cJSON:cjson_static",
     ]
 
     external_deps = [
diff --git a/services/device_auth.c b/services/device_auth.c
index e09dce4..16f6200 100644
--- a/services/device_auth.c
+++ b/services/device_auth.c
@@ -14,6 +14,7 @@
  */
 
 #include "device_auth.h"
+#include "ipc_service.h"
 
 #include "alg_loader.h"
 #include "callback_manager.h"
@@ -241,6 +242,11 @@ DEVICE_AUTH_API_PUBLIC int InitDeviceAuthService(void)
         DestroyGmAndGa();
         return res;
     }
+    res = DeviceAuthIpcInit();
+    if (res != HC_SUCCESS) {
+	DestroyGmAndGa();
+	return res;
+    }
     SetInitStatus();
     LOGI("[End]: [Service]: Init device auth service successfully!");
     return HC_SUCCESS;
-- 
2.25.1

