Fix aul_forward_app function 41/254141/3
authorHwankyu Jhun <h.jhun@samsung.com>
Wed, 24 Feb 2021 04:48:01 +0000 (13:48 +0900)
committerHwankyu Jhun <h.jhun@samsung.com>
Wed, 24 Feb 2021 06:06:15 +0000 (15:06 +0900)
Before sending the launch request, the function sets a new instance ID.

Change-Id: Ie48e2b0489f507ea90c1e057d9fdcfa5d4f01074
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
src/launch.h
src/launch_with_result.c
src/service.c

index 5a2eb61..9194da6 100644 (file)
@@ -55,3 +55,4 @@ int app_request_local(int cmd, bundle *kb);
 int aul_subapp_terminate_request(const char *instance_id, int pid);
 int aul_send_resume_request_for_uid(const char *appid, bundle *b, uid_t uid,
                void (*error_cb)(int, void *), void *user_data);
+void aul_set_instance_info(const char *app_id, bundle *kb);
index d3c089b..5e03462 100644 (file)
 #include <glib.h>
 #include <gio/gio.h>
 #include <bundle_internal.h>
+#include <uuid.h>
 
 #include "aul.h"
 #include "aul_api.h"
 #include "aul_error.h"
 #include "aul_sock.h"
 #include "aul_svc.h"
+#include "aul_svc_priv_key.h"
 #include "aul_util.h"
 #include "launch.h"
 
@@ -393,12 +395,35 @@ static int __set_caller_info(bundle *kb)
        return AUL_R_OK;
 }
 
+void aul_set_instance_info(const char *app_id, bundle *kb)
+{
+       const char *component_id;
+       char buf[1024];
+       char uuid[37];
+       uuid_t u;
+
+       uuid_generate(u);
+       uuid_unparse(u, uuid);
+
+       component_id = bundle_get_val(kb, AUL_K_COMPONENT_ID);
+       if (component_id) {
+               snprintf(buf, sizeof(buf), "%s:%s:%s",
+                               uuid, app_id, component_id);
+       } else {
+               snprintf(buf, sizeof(buf), "%s:%s", uuid, app_id);
+       }
+
+       bundle_del(kb, AUL_K_INSTANCE_ID);
+       bundle_add(kb, AUL_K_INSTANCE_ID, buf);
+}
+
 API int aul_forward_app(const char* pkgname, bundle *kb)
 {
        int ret;
        bundle *dupb;
        bundle *outb;
        char tmp_pid[MAX_PID_STR_BUFSZ];
+       const char *launch_mode;
 
        if (pkgname == NULL || kb == NULL)
                return AUL_R_EINVAL;
@@ -410,6 +435,10 @@ API int aul_forward_app(const char* pkgname, bundle *kb)
        bundle_del(kb, AUL_SVC_K_REROUTE);
        bundle_del(kb, AUL_SVC_K_RECYCLE);
 
+       launch_mode = bundle_get_val(kb, AUL_SVC_K_LAUNCH_MODE);
+       if (launch_mode && !strcmp(launch_mode, "group"))
+               aul_set_instance_info(pkgname, kb);
+
        dupb = bundle_dup(kb);
        if (dupb == NULL) {
                _E("bundle duplicate fail");
index 6577718..87c4844 100755 (executable)
@@ -276,25 +276,6 @@ static void __aul_error_cb(int err, void *data)
        __remove_rescb(cb_info);
 }
 
-static void __set_instance_id(bundle *b, const char *appid)
-{
-       const char *comp_id;
-       char buf[1024];
-       char uuid[37];
-       uuid_t u;
-
-       uuid_generate(u);
-       uuid_unparse(u, uuid);
-
-       comp_id = bundle_get_val(b, AUL_K_COMPONENT_ID);
-       if (comp_id)
-               snprintf(buf, sizeof(buf), "%s:%s:%s", uuid, appid, comp_id);
-       else
-               snprintf(buf, sizeof(buf), "%s:%s", uuid, appid);
-
-       bundle_add(b, AUL_K_INSTANCE_ID, buf);
-}
-
 static void __verify_request(bundle *b, char **appid)
 {
        const char *launch_mode;
@@ -322,7 +303,7 @@ static void __verify_request(bundle *b, char **appid)
        if (launch_mode && !strcmp(launch_mode, "group")) {
                ret = bundle_get_type(b, AUL_K_INSTANCE_ID);
                if (ret == BUNDLE_TYPE_NONE)
-                       __set_instance_id(b, *appid);
+                       aul_set_instance_info(*appid, b);
        }
 }