std::string app_id = kb.GetString(AUL_K_APPID);
if (app_id != "@UNKNOWN") {
__verify_request(kb);
- return 0;
+ return -1;
}
kb.Delete(AUL_K_APPID);
return 0;
}
+int _app_property_set_real_appid(uid_t uid, bundle *b)
+{
+ const char *alias_appid;
+ const char *appid;
+ const char *alias_info;
+ app_property_h app_property;
+
+ alias_appid = bundle_get_val(b, AUL_K_APPID);
+ if (!alias_appid)
+ return -1;
+
+ alias_info = bundle_get_val(b, AUL_SVC_K_ALIAS_INFO);
+ if (alias_info && !strcmp(alias_info, "disable"))
+ return -1;
+
+ app_property = _app_property_find(uid);
+ if (!app_property)
+ return -1;
+
+ appid = _app_property_get_real_appid(app_property, alias_appid);
+ if (!appid)
+ return -1;
+
+ _W("alias_appid(%s), appid(%s)", alias_appid, appid);
+ bundle_del(b, AUL_K_ORG_APPID);
+ bundle_add(b, AUL_K_ORG_APPID, alias_appid);
+ bundle_del(b, AUL_K_APPID);
+ bundle_add(b, AUL_K_APPID, appid);
+ return 0;
+}
+
static int __dispatch_app_set_alias_appid(request_h req)
{
int ret;
#define __AMD_APP_PROPERTY_H__
#include <stdbool.h>
-#include <unistd.h>
#include <sys/types.h>
+#include <unistd.h>
+#include <bundle.h>
#include <glib.h>
#include <pkgmgr-info.h>
int _app_property_metadata_remove_filter(const char *key, const char *value);
+int _app_property_set_real_appid(uid_t uid, bundle *b);
+
#ifdef __cplusplus
}
#endif
#include <string.h>
#include <errno.h>
#include <ctype.h>
-#include <glib.h>
#include <dirent.h>
+#include <aul.h>
+#include <aul_sock.h>
+#include <bundle_internal.h>
+#include <cert-svc/ccert.h>
+#include <cert-svc/cinstance.h>
+#include <glib.h>
#include <package-manager.h>
#include <pkgmgr-info.h>
#include <request_handler_direct_access.h>
#include <vconf.h>
-#include <aul_sock.h>
-#include <aul.h>
-#include <cert-svc/ccert.h>
-#include <cert-svc/cinstance.h>
#include "amd_api_noti.h"
-#include "amd_util.h"
+#include "amd_app_property.h"
+#include "amd_app_status.h"
#include "amd_appinfo.h"
#include "amd_launch.h"
-#include "amd_app_status.h"
-#include "amd_signal.h"
-#include "amd_app_property.h"
-#include "amd_suspend.h"
#include "amd_login_monitor.h"
#include "amd_noti.h"
+#include "amd_signal.h"
+#include "amd_suspend.h"
+#include "amd_util.h"
+#include "aul_svc_priv_key.h"
#define CATEGORY_IME "http://tizen.org/category/ime"
return false;
}
+
+void _appinfo_set_effective_appid(uid_t uid, bundle *b)
+{
+ const struct appinfo *ai;
+ const struct appinfo *effective_ai;
+ const char *appid;
+ const char *effective_appid;
+ const char *pkgid;
+ const char *effective_pkgid;
+
+ appid = bundle_get_val(b, AUL_K_APPID);
+ if (!appid)
+ return;
+
+ ai = _appinfo_find(uid, appid);
+ if (!ai)
+ return;
+
+ bundle_del(b, AUL_SVC_K_PKG_NAME);
+ bundle_add(b, AUL_SVC_K_PKG_NAME, appid);
+
+ effective_appid = _appinfo_get_value(ai, AIT_EFFECTIVE_APPID);
+ if (!effective_appid)
+ return;
+
+ effective_ai = _appinfo_find(uid, effective_appid);
+ if (!effective_ai)
+ return;
+
+ pkgid = _appinfo_get_value(ai, AIT_PKGID);
+ effective_pkgid = _appinfo_get_value(effective_ai, AIT_PKGID);
+ if (pkgid && effective_pkgid && !strcmp(pkgid, effective_pkgid)) {
+ _W("Use effective appid(%s) instead of real appid(%s)",
+ effective_appid, appid);
+ bundle_del(b, AUL_K_APPID);
+ bundle_add(b, AUL_K_APPID, effective_appid);
+ }
+}
#ifndef __AMD_APPINFO_H__
#define __AMD_APPINFO_H__
+#include <stdbool.h>
#include <sys/types.h>
+#include <bundle.h>
#include <glib.h>
-#include <stdbool.h>
#ifdef __cplusplus
extern "C" {
bool _appinfo_is_platform_app(const char *appid, uid_t uid);
+void _appinfo_set_effective_appid(uid_t uid, bundle* b);
+
#ifdef __cplusplus
}
#endif
#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_status.h"
#include "amd_appinfo.h"
return 0;
}
-static void __set_effective_appid(uid_t uid, bundle *kb)
-{
- const struct appinfo *ai;
- const struct appinfo *effective_ai;
- const char *appid;
- const char *effective_appid;
- const char *pkgid;
- const char *effective_pkgid;
-
- appid = bundle_get_val(kb, AUL_K_APPID);
- if (appid == NULL)
- return;
-
- ai = _appinfo_find(uid, appid);
- if (ai == NULL)
- return;
-
- bundle_del(kb, AUL_SVC_K_PKG_NAME);
- bundle_add(kb, AUL_SVC_K_PKG_NAME, appid);
-
- effective_appid = _appinfo_get_value(ai, AIT_EFFECTIVE_APPID);
- if (effective_appid == NULL)
- return;
-
- effective_ai = _appinfo_find(uid, effective_appid);
- if (effective_ai == NULL)
- return;
-
- pkgid = _appinfo_get_value(ai, AIT_PKGID);
- effective_pkgid = _appinfo_get_value(effective_ai, AIT_PKGID);
- if (pkgid && effective_pkgid && strcmp(pkgid, effective_pkgid) == 0) {
- _D("use effective appid instead of the real appid");
- bundle_del(kb, AUL_K_APPID);
- bundle_add(kb, AUL_K_APPID, effective_appid);
- }
-}
-
-static int __set_real_appid(uid_t uid, bundle *kb)
-{
- const char *alias_appid;
- const char *appid;
- const char *alias_info;
- app_property_h app_property;
-
- alias_appid = bundle_get_val(kb, AUL_K_APPID);
- if (alias_appid == NULL)
- return -1;
-
- alias_info = bundle_get_val(kb, AUL_SVC_K_ALIAS_INFO);
- if (alias_info && strcmp(alias_info, "disable") == 0)
- return -1;
-
- app_property = _app_property_find(uid);
- if (app_property == NULL)
- return -1;
-
- appid = _app_property_get_real_appid(app_property, alias_appid);
- if (appid == NULL)
- return -1;
-
- _D("alias_appid(%s), appid(%s)", alias_appid, appid);
- bundle_del(kb, AUL_K_ORG_APPID);
- bundle_add(kb, AUL_K_ORG_APPID, alias_appid);
- bundle_del(kb, AUL_K_APPID);
- bundle_add(kb, AUL_K_APPID, appid);
- return 0;
-}
-
static void __check_new_instance(bundle *kb, bool *new_instance)
{
const char *str;
if (kb == NULL)
return -1;
- _app_control_resolve(_request_get_target_uid(req), kb);
- ret = __set_real_appid(_request_get_target_uid(req), kb);
- if (ret == 0 && _request_get_cmd(req) == APP_RESUME)
- bundle_del(kb, AUL_K_INSTANCE_ID);
-
- __set_effective_appid(_request_get_target_uid(req), kb);
-
bundle_del(kb, AUL_K_NEW_INSTANCE);
_noti_send(AMD_NOTI_MSG_LAUNCH_APP_START_START, 0, 0, req, kb);
__check_new_instance(kb, &new_instance);
#include <aul_app_com.h>
#include "amd_api_noti.h"
-#include "amd_config.h"
-#include "amd_util.h"
-#include "amd_request.h"
+#include "amd_app_control.h"
+#include "amd_app_property.h"
#include "amd_app_status.h"
+#include "amd_config.h"
#include "amd_cynara.h"
-#include "amd_socket.h"
-#include "aul_svc_priv_key.h"
-#include "amd_signal.h"
#include "amd_login_monitor.h"
#include "amd_noti.h"
+#include "amd_request.h"
+#include "amd_signal.h"
+#include "amd_socket.h"
+#include "amd_util.h"
+#include "aul_svc_priv_key.h"
#define PENDING_REQUEST_TIMEOUT 5000 /* msec */
#define SYSTEM_REQUEST_TIMEOUT 90000 /* msec */
return app_status;
}
+static bool __can_be_implicit_launch(int cmd)
+{
+ switch (cmd) {
+ case APP_START:
+ case APP_START_ASYNC:
+ case APP_START_RES_ASYNC:
+ case APP_START_RES:
+ case APP_OPEN:
+ case APP_RESUME:
+ case APP_SEND_LAUNCH_REQUEST:
+ case APP_SEND_LAUNCH_REQUEST_SYNC:
+ case APP_SEND_RESUME_REQUEST:
+ return true;
+ default:
+ return false;
+ }
+}
+
static int __check_request(request_h req)
{
int pid;
if (req->kb == NULL)
return -1;
- appid = bundle_get_val(req->kb, AUL_K_APPID);
- if (appid == NULL)
+ if (bundle_get_val(req->kb, AUL_K_APPID) == NULL)
return -1;
+ if (__can_be_implicit_launch(req->cmd))
+ _app_control_resolve(req->t_uid, req->kb);
+
+ if (_app_property_set_real_appid(req->t_uid, req->kb) == 0 &&
+ req->cmd == APP_RESUME)
+ bundle_del(req->kb, AUL_K_INSTANCE_ID);
+
+ _appinfo_set_effective_appid(req->t_uid, req->kb);
+
+ appid = bundle_get_val(req->kb, AUL_K_APPID);
app_status = __get_app_status(req, appid);
if (app_status == NULL)
return 0;
pid_map.erase(found);
}
-void SetRealAppId(uid_t uid, tizen_base::Bundle& b) {
- std::string alias_appid = b.GetString(AUL_K_APPID);
- if (alias_appid.empty())
- return;
-
- std::string alias_info = b.GetString(AUL_SVC_K_ALIAS_INFO);
- if (alias_info == "disable")
- return;
-
- amd_app_property_h app_property = amd_app_property_find(uid);
- if (app_property == nullptr)
- return;
-
- const char* appid = amd_app_property_get_real_appid(app_property,
- alias_appid.c_str());
- if (appid == nullptr)
- return;
-
- _D("alias_appid(%s), appid(%s)", alias_appid.c_str(), appid);
- b.Delete(AUL_K_ORG_APPID);
- b.Add(AUL_K_ORG_APPID, alias_appid);
- b.Delete(AUL_K_APPID);
- b.Add(AUL_K_APPID, appid);
-}
-
int PassFds(int fd, const int (*fds)[2], int fds_num) {
#define MAX_NR_OF_DESCRIPTORS 2
union {
tizen_base::Bundle b(kb, false, false);
uid_t target_uid = amd_request_get_target_uid(req);
- SetRealAppId(target_uid, b);
std::string app_id = b.GetString(AUL_K_APPID);
if (app_id.empty()) {
_E("Failed to get appid");