Use connected socket fd 21/266421/3
authorHwankyu Jhun <h.jhun@samsung.com>
Fri, 12 Nov 2021 04:44:26 +0000 (13:44 +0900)
committerHwankyu Jhun <h.jhun@samsung.com>
Fri, 12 Nov 2021 06:57:28 +0000 (15:57 +0900)
Currently, AMD creates a new socket fd and sends the request to the
running application. After this patch is applied, AMD will uses
the connected socket fd to send the request.

Change-Id: I5835892aefa522a38bcaba20bce95120db339d46
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
src/lib/amd_app_status.c
src/lib/amd_launch.c
src/lib/amd_suspend.c
src/lib/api/amd.h
src/lib/api/amd_api_app_request_broker.cc [moved from src/lib/amd_app_request_broker.cc with 91% similarity]
src/lib/api/amd_api_app_request_broker.h [moved from src/lib/amd_app_request_broker.h with 58% similarity]
src/modules/ui-core/src/amd_screen_connector.c
src/modules/ui-core/src/app_group.c

index 7576b20..47d957e 100644 (file)
@@ -33,9 +33,9 @@
 #include <gio/gio.h>
 #include <bundle_internal.h>
 
+#include "amd_api_app_request_broker.h"
 #include "amd_api_noti.h"
 #include "amd_app_com.h"
-#include "amd_app_request_broker.h"
 #include "amd_app_status.h"
 #include "amd_appinfo.h"
 #include "amd_cynara.h"
@@ -2824,8 +2824,8 @@ int _app_status_init(void)
        int ret;
 
        _signal_add_ready_cb(__listen_app_dead_signal, NULL);
-       _app_request_broker_set_disconnected_event_cb(__disconnected_event_cb,
-                       NULL);
+       amd_app_request_broker_set_disconnected_event_cb(
+                       __disconnected_event_cb, NULL);
 
        __restart_table = g_hash_table_new_full(g_str_hash, g_str_equal,
                        NULL, __destroy_restart_info);
index d5f56f0..295cb34 100644 (file)
 #include <vconf.h>
 
 #include "amd_anr_monitor.h"
+#include "amd_api_app_request_broker.h"
 #include "amd_app_com.h"
 #include "amd_app_control.h"
 #include "amd_app_property.h"
-#include "amd_app_request_broker.h"
 #include "amd_app_status.h"
 #include "amd_appinfo.h"
 #include "amd_boot_manager.h"
@@ -490,7 +490,7 @@ static int __send_app_request(pid_t pid, uid_t uid, int cmd, int clifd,
 {
        int ret;
        reply_info_t *info;
-       app_request_t request = {
+       amd_app_request_t request = {
                .pid = pid,
                .uid = uid,
                .cmd = cmd,
@@ -501,8 +501,8 @@ static int __send_app_request(pid_t pid, uid_t uid, int cmd, int clifd,
        if (!info)
                return -ENOMEM;
 
-       ret = _app_request_broker_send(&request, __app_request_result_handler,
-                       info);
+       ret = amd_app_request_broker_send(&request,
+                       __app_request_result_handler, info);
        if (ret < 0) {
                __destroy_reply_info(info);
                return ret;
@@ -922,13 +922,13 @@ static int __compare_signature(const struct appinfo *ai, int cmd,
 static void __prepare_to_suspend(int pid, uid_t uid)
 {
        SECURE_LOGD("[__SUSPEND__] pid: %d, uid: %d", pid, uid);
-       aul_sock_send_raw(pid, uid, APP_SUSPEND, NULL, 0, AUL_SOCK_NOREPLY);
+       __send_app_request(pid, uid, APP_SUSPEND, -1, NULL);
 }
 
 static void __prepare_to_wake_services(int pid, uid_t uid)
 {
        SECURE_LOGD("[__SUSPEND__] pid: %d, uid: %d", pid, uid);
-       aul_sock_send_raw(pid, uid, APP_WAKE, NULL, 0, AUL_SOCK_NOREPLY);
+       __send_app_request(pid, uid, APP_WAKE, -1, NULL);
 }
 
 static gboolean __check_service_only(gpointer user_data)
@@ -1552,7 +1552,6 @@ static int __app_process_by_pid(request_h req, const char *pid_str,
 {
        int pid;
        int ret;
-       int dummy;
        const char *appid;
        const char *pkgid;
        const char *type;
@@ -1627,11 +1626,10 @@ static int __app_process_by_pid(request_h req, const char *pid_str,
                ret = _term_req_app(pid, req);
                break;
        case APP_TERM_BY_PID_ASYNC:
-               ret = aul_sock_send_raw(pid, target_uid, _request_get_cmd(req),
-                               (unsigned char *)&dummy, sizeof(int),
-                               AUL_SOCK_NOREPLY);
+               ret = __send_app_request(pid, target_uid, _request_get_cmd(req),
+                               -1, NULL);
                if (ret < 0)
-                       _D("terminate req packet send error");
+                       _W("terminate req packet send error");
 
                _request_send_result(req, ret);
                break;
@@ -1815,7 +1813,7 @@ static int __dispatch_app_startup_signal(request_h req)
 
        _request_reply_reset_pending_timer(req, PENDING_REQUEST_TIMEOUT, pid);
        _noti_send(AMD_NOTI_MSG_LAUNCH_APP_STARTUP_SIGNAL_END, pid, 0, req, NULL);
-       _app_request_broker_connect(pid, _request_get_uid(req));
+       amd_app_request_broker_connect(pid, _request_get_uid(req));
        _W("[END] pid(%d)", pid);
 
        return 0;
index 5528218..765880e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016 - 2017 Samsung Electronics Co., Ltd All Rights Reserved
+ * Copyright (c) 2016 - 2021 Samsung Electronics Co., Ltd All Rights Reserved
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
 #include <aul_sock.h>
 #include <vconf.h>
 
+#include "amd_api_app_request_broker.h"
+#include "amd_app_status.h"
 #include "amd_config.h"
 #include "amd_signal.h"
-#include "amd_util.h"
 #include "amd_suspend.h"
-#include "amd_app_status.h"
+#include "amd_util.h"
 
 typedef struct proc_info {
        pid_t pid;
@@ -142,19 +143,20 @@ static bool __network_is_disconnected(int status)
 
 static void __prepare_to_suspend(int pid, uid_t uid)
 {
-       int ret;
-       int dummy = 0;
+       amd_app_request_t request = {
+               .pid = pid,
+               .uid = uid,
+               .cmd = APP_SUSPEND,
+               .data = NULL
+       };
 
        _D("[__SUSPEND__] pid: %d, uid: %d", pid, uid);
-       ret = aul_sock_send_raw(pid, uid, APP_SUSPEND, (unsigned char *)&dummy,
-                       sizeof(int), AUL_SOCK_NOREPLY);
-       if (ret < 0)
-               _E("Failed to send APP_SUSPEND %d", pid);
+       amd_app_request_broker_send(&request, NULL, NULL);
 }
 
 static void __prepare_to_wake(int pid, uid_t uid)
 {
-       int ret;
+       amd_app_request_t request;
        bundle *kb;
 
        kb = bundle_create();
@@ -163,13 +165,15 @@ static void __prepare_to_wake(int pid, uid_t uid)
                return;
        }
 
+       request.pid = pid;
+       request.uid = uid;
+       request.cmd = APP_WAKE;
+
        bundle_add(kb, AUL_K_ALLOWED_BG, "ALLOWED_BG");
+       request.data = kb;
 
        _D("[__SUSPEND__] pid: %d, uid: %d", pid, uid);
-       ret = aul_sock_send_bundle(pid, uid, APP_WAKE, kb, AUL_SOCK_NOREPLY);
-       if (ret != AUL_R_OK)
-               _E("Failed to send APP_WAKE %d", pid);
-
+       amd_app_request_broker_send(&request, NULL, NULL);
        bundle_free(kb);
 }
 
index 22746c0..b7f853d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 - 2020 Samsung Electronics Co., Ltd All Rights Reserved
+ * Copyright (c) 2017 - 2021 Samsung Electronics Co., Ltd All Rights Reserved
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,6 +19,7 @@
 
 #include <amd_api_app_com.h>
 #include <amd_api_app_property.h>
+#include <amd_api_app_request_broker.h>
 #include <amd_api_app_status.h>
 #include <amd_api_appinfo.h>
 #include <amd_api_comp_status.h>
similarity index 91%
rename from src/lib/amd_app_request_broker.cc
rename to src/lib/api/amd_api_app_request_broker.cc
index fc70850..e5301b0 100644 (file)
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-#include "lib/amd_app_request_broker.h"
+#include "lib/api/amd_api_app_request_broker.h"
 
 #include <aul.h>
 #include <aul_cmd.h>
@@ -30,6 +30,7 @@
 #include <bundle_cpp.h>
 #include <parcel.hh>
 
+#include "lib/amd_api.h"
 #include "lib/amd_util.h"
 #include "lib/socket/client_socket.hh"
 
@@ -40,7 +41,7 @@ constexpr const char PATH_AUL_APPS[] = "/run/aul/apps";
 
 class ResultCb {
  public:
-  ResultCb(app_request_broker_result_cb cb, void* user_data)
+  ResultCb(amd_app_request_broker_result_cb cb, void* user_data)
       :  cb_(cb), user_data_(user_data) {
     timer_ = g_timeout_add(5000, OnTimedOut, this);
   }
@@ -66,7 +67,7 @@ class ResultCb {
   }
 
  private:
-  app_request_broker_result_cb cb_;
+  amd_app_request_broker_result_cb cb_;
   void* user_data_;
   guint timer_ = 0;
 };
@@ -207,7 +208,7 @@ class AppRequestBroker {
     return found->second;
   }
 
-  void SetDisconnectedEventCb(app_request_broker_disconnected_event_cb cb,
+  void SetDisconnectedEventCb(amd_app_request_broker_disconnected_event_cb cb,
       void* data) {
     disconn_cb_ = cb;
     disconn_data_ = data;
@@ -215,7 +216,7 @@ class AppRequestBroker {
 
  private:
   std::map<pid_t, std::shared_ptr<ClientChannel>> channels_;
-  app_request_broker_disconnected_event_cb disconn_cb_ = nullptr;
+  amd_app_request_broker_disconnected_event_cb disconn_cb_ = nullptr;
   void* disconn_data_ = nullptr;
 };
 
@@ -266,8 +267,9 @@ gboolean ClientChannel::OnSocketDisconnected(GIOChannel* channel,
 
 }  // namespace
 
-int _app_request_broker_send(app_request_t* request,
-    app_request_broker_result_cb callback, void *user_data) {
+extern "C" EXPORT_API int amd_app_request_broker_send(
+    amd_app_request_t* request, amd_app_request_broker_result_cb callback,
+    void *user_data) {
   _W("pid(%d), uid(%u), cmd(%d)", request->pid, request->uid, request->cmd);
   auto& broker = AppRequestBroker::GetInst();
   auto channel = broker.FindClientChannel(request->pid);
@@ -303,13 +305,11 @@ int _app_request_broker_send(app_request_t* request,
     return ret;
   }
 
-  if (callback)
-    channel->Push(std::make_shared<ResultCb>(callback, user_data));
-
+  channel->Push(std::make_shared<ResultCb>(callback, user_data));
   return 0;
 }
 
-int _app_request_broker_connect(pid_t pid, uid_t uid) {
+extern "C" EXPORT_API int amd_app_request_broker_connect(pid_t pid, uid_t uid) {
   auto& broker = AppRequestBroker::GetInst();
   auto channel = broker.CreateClientChannel(pid, uid);
   if (channel == nullptr)
@@ -331,7 +331,7 @@ int _app_request_broker_connect(pid_t pid, uid_t uid) {
   return 0;
 }
 
-void _app_request_broker_set_disconnected_event_cb(
-    app_request_broker_disconnected_event_cb callback, void* user_data) {
+extern "C" EXPORT_API void amd_app_request_broker_set_disconnected_event_cb(
+    amd_app_request_broker_disconnected_event_cb callback, void* user_data) {
   AppRequestBroker::GetInst().SetDisconnectedEventCb(callback, user_data);
 }
similarity index 58%
rename from src/lib/amd_app_request_broker.h
rename to src/lib/api/amd_api_app_request_broker.h
index d8ee692..098a8e8 100644 (file)
@@ -14,8 +14,8 @@
  * limitations under the License.
  */
 
-#ifndef __AMD_APP_REQUEST_BROKER_H__
-#define __AMD_APP_REQUEST_BROKER_H__
+#ifndef __AMD_API_APP_REQUEST_BROKER_H__
+#define __AMD_API_APP_REQUEST_BROKER_H__
 
 #include <sys/types.h>
 #include <unistd.h>
 extern "C" {
 #endif
 
-typedef struct {
+typedef struct amd_app_request_s {
        pid_t pid;
        uid_t uid;
        int cmd;
        bundle *data;
-} app_request_t;
+} amd_app_request_t;
 
-typedef int (*app_request_broker_disconnected_event_cb)(int pid,
+typedef int (*amd_app_request_broker_disconnected_event_cb)(int pid,
                void *user_data);
 
-typedef void (*app_request_broker_result_cb)(int result, void *user_data);
+typedef void (*amd_app_request_broker_result_cb)(int result, void *user_data);
 
-int _app_request_broker_send(app_request_t *req,
-               app_request_broker_result_cb callback, void *user_data);
+int amd_app_request_broker_send(amd_app_request_t *req,
+               amd_app_request_broker_result_cb callback, void *user_data);
 
-int _app_request_broker_connect(pid_t pid, uid_t uid);
+int amd_app_request_broker_connect(pid_t pid, uid_t uid);
 
-void _app_request_broker_set_disconnected_event_cb(
-               app_request_broker_disconnected_event_cb callback,
+void amd_app_request_broker_set_disconnected_event_cb(
+               amd_app_request_broker_disconnected_event_cb callback,
                void *user_data);
 
 #ifdef __cplusplus
 }
 #endif
 
-#endif /* __AMD_APP_REQUEST_BROKER_H__ */
+#endif /* __AMD_API_APP_REQUEST_BROKER_H__ */
index 5915782..032cde9 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016 - 2017 Samsung Electronics Co., Ltd All Rights Reserved
+ * Copyright (c) 2016 - 2021 Samsung Electronics Co., Ltd All Rights Reserved
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -584,10 +584,10 @@ static int __screen_connector_send_update_request(const char *appid,
        amd_app_status_h app_status;
        struct user_info_s *user_info;
        struct app_screen_s *app_screen;
-       int dummy = 0;
        int pid;
        int ret;
        GList *found;
+       amd_app_request_t request;
 
        user_info = g_hash_table_lookup(user_table, GUINT_TO_POINTER(uid));
        if (user_info == NULL)
@@ -624,8 +624,12 @@ static int __screen_connector_send_update_request(const char *appid,
        if (ret < 0)
                return -1;
 
-       ret = aul_sock_send_raw(pid, uid, APP_UPDATE_REQUESTED,
-                       (unsigned char *)&dummy, 0, AUL_SOCK_NOREPLY);
+       request.pid = pid;
+       request.uid = uid;
+       request.cmd = APP_UPDATE_REQUESTED;
+       request.data = NULL;
+
+       ret = amd_app_request_broker_send(&request, NULL, NULL);
        if (ret < 0) {
                _E("Failed to send the update request");
                amd_suspend_update_status(pid, AMD_SUSPEND_STATUS_INCLUDE);
index 3a5b2ab..e493596 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015 - 2019 Samsung Electronics Co., Ltd All Rights Reserved
+ * Copyright (c) 2015 - 2021 Samsung Electronics Co., Ltd All Rights Reserved
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -1240,31 +1240,27 @@ static void __app_group_restart_recycle_bin(const char *leader_id,
 
 static void __prepare_to_wake(int pid, uid_t uid)
 {
-       int ret;
-       int dummy = 0;
-
-       ret = aul_sock_send_raw(pid, uid, APP_SUSPEND, (unsigned char *)&dummy,
-                       sizeof(int), AUL_SOCK_NOREPLY);
-       if (ret < 0) {
-               _E("Failed to send suspend signal. pid(%d), result(%d)",
-                               pid, ret);
-       }
+       amd_app_request_t request = {
+               .pid = pid,
+               .uid = uid,
+               .cmd = APP_WAKE,
+               .data = NULL
+       };
 
+       amd_app_request_broker_send(&request, NULL, NULL);
        _D("[__APP_SUSPEND__] pid: %d, uid: %d", pid, uid);
 }
 
 static void __prepare_to_suspend(int pid, uid_t uid)
 {
-       int ret;
-       int dummy = 0;
-
-       ret = aul_sock_send_raw(pid, uid, APP_WAKE, (unsigned char *)&dummy,
-                       sizeof(int), AUL_SOCK_NOREPLY);
-       if (ret < 0) {
-               _E("Failed to send wake signal. pid(%d), result(%d)",
-                               pid, ret);
-       }
+       amd_app_request_t request = {
+               .pid = pid,
+               .uid = uid,
+               .cmd = APP_SUSPEND,
+               .data = NULL
+       };
 
+       amd_app_request_broker_send(&request, NULL, NULL);
        _D("[__APP_WAKE__] pid: %d, uid: %d", pid, uid);
 }