//
-// Open Service Platform
// Copyright (c) 2012 Samsung Electronics Co., Ltd.
//
// Licensed under the Apache License, Version 2.0 (the License);
#include <cstdio>
#include <cstdlib>
-#include <vector>
#include <new>
#include <typeinfo>
#include <unique_ptr.h>
#include <aul.h>
#include <app.h>
+#include <bundle.h>
#include <appsvc/appsvc.h>
#include <Ecore_X.h>
#include <FBaseInteger.h>
#include <FBaseColArrayList.h>
#include <FBaseColHashMap.h>
+#include <FBaseByteBuffer.h>
#include <FBaseUtilStringTokenizer.h>
-
#include <FBaseSysLog.h>
+
#include <FBase_StringConverter.h>
#include "FApp_MapDataControlImpl.h"
#include "FApp_AppControlEventArg.h"
#include "FApp_AppArg.h"
#include "FApp_AppMessageImpl.h"
-#include "FAppPkg_PackageManagerImpl.h"
+#include "FApp_Aul.h"
using namespace Tizen::Base;
using namespace Tizen::Base::Collection;
using namespace Tizen::Base::Utility;
-using namespace Tizen::App::Package;
extern "C" int appsvc_allow_transient_app(bundle*, Ecore_X_Window);
static const char OSP_V_REQUEST_TYPE_MAP_INSERT[] = "map_insert";
static const char OSP_V_REQUEST_TYPE_MAP_UPDATE[] = "map_update";
static const char OSP_V_REQUEST_TYPE_MAP_DELETE[] = "map_delete";
+static const char OSP_V_VERSION_2_1_0_3[] = "ver_2.1.0.3";
+
static const char BUNDLE_KEY_PREFIX_AUL[] = "__AUL_";
static const char BUNDLE_KEY_PREFIX_SERVICE[] = "__APP_SVC_";
static const char BUNDLE_KEY_PREFIX_OSP[] = "__OSP_";
-const char TIZEN_NOTIFICATION_DATA[] = "http://tizen.org/appcontrol/data/notification";
+static const char BUNDLE_KEY_PREFIX_UG[] = "__UG_";
-static const char SAMSUNG_ACCOUNT_KEY_CLIENT_ID[] = "client_id";
-static const char SAMSUNG_ACCOUNT_KEY_CLIENT_SECRET[] = "client_secret";
-static const char SAMSUNG_ACCOUNT_KEY_SERVICE_CATEGORY[] = "service_category";
+static const char OSP_K_SUBMODE_CALLEE[] = "__OSP_SUB_CALLEE__";
+static const char OSP_K_SERVICE_CALLEE[] = "__OSP_SERVICE_CALLEE__";
-static const char SMS_KEY_SERVICE_CALLER[] = "service_caller";
-static const char SMS_KEY_SERVICE_DATA[] = "service_data";
+const char TIZEN_NOTIFICATION_DATA[] = "http://tizen.org/appcontrol/data/notification";
+const wchar_t LEGACY_OPERATION_MAIN[] = L"osp.operation.MAIN";
_AppArg::_AppArg(void)
__pBundle = bundle_create();
SysTryReturnResult(NID_APP, __pBundle != null, E_OUT_OF_MEMORY, "Bundle creation failure.");
- return CreateLaunchArg(__pBundle, argText);
+ return CreateNotificationArg(__pBundle, argText);
}
result
+_AppArg::Construct(const _AppMessageImpl& msg, const String& oId, const String* pUri, const String* pMime)
+{
+ __pBundle = bundle_dup(const_cast<bundle*>(msg.GetBundle()));
+ SysTryReturnResult(NID_APP, __pBundle != null, E_OUT_OF_MEMORY, "Bundle creation failure.");
+
+ return CreateAppControlArg(__pBundle, oId, pUri, pMime, null);
+}
+
+
+result
_AppArg::Construct(const _SqlDataControlImpl& dc, _DataControlRequestType requestType, const IList* pList)
{
__pBundle = bundle_create();
case _APP_HANDLER_LAUNCH_NORMAL:
pList->Add(*new (std::nothrow) String(LEGACY_LAUNCH_REASON_NORMAL));
- pList->Add(*new (std::nothrow) String(L"osp.operation.MAIN"));
+ pList->Add(*new (std::nothrow) String(LEGACY_OPERATION_MAIN));
break;
default:
{
SysTryReturn(NID_APP, __pBundle != null, null, E_INVALID_STATE, "[E_INVALID_STATE] Improper bundle state.");
+ //Print();
+
HashMap* pHashMap = new (std::nothrow) HashMap(SingleObjectDeleter);
SysTryReturn(NID_APP, pHashMap != null, null, E_OUT_OF_MEMORY, "HashMap creation failure.");
return null;
}
- ArrayList* pList = _AppMessageImpl::GetValueArray(__pBundle, OSP_K_ARG);
- if (pList)
- {
- pHashMap->Add(new (std::nothrow) String(TIZEN_APPCONTROL_DATA_LEGACY), pList);
- }
return pHashMap;
}
return true;
}
+ if (strncmp(BUNDLE_KEY_PREFIX_UG, pKey, strlen(BUNDLE_KEY_PREFIX_UG)) == 0)
+ {
+ return true;
+ }
+
return false;
}
}
}
break;
+ case BUNDLE_TYPE_BYTE:
+ bundle_keyval_get_basic_val(const_cast<bundle_keyval_t*>(pVal), reinterpret_cast<void**>(&pStr), &size);
+
+ SysLog(NID_IO, "Bundle byte value = %s, size = %d", pStr, size);
+
+ if (pStr)
+ {
+ ByteBuffer* pBuffer = new (std::nothrow) ByteBuffer();
+ SysTryLog(NID_IO, pBuffer != null, "The memory is insufficient.");
+ result r = pBuffer->Construct(size);
+ SysTryLog(NID_IO, r == E_SUCCESS, "Constructing pBuffer is failed.");
+
+ r = pBuffer->SetArray((const byte*)pStr, 0, size);
+ SysTryLog(NID_IO, r == E_SUCCESS, "SetArray()for ByteBuffer is failed.");
+
+ pBuffer->Flip();
+
+ pMap->Add(new (std::nothrow) String(pKey), pBuffer);
+ }
+ break;
default:
SysLog(NID_APP, "Invalid type for %s : %d", pKey, type);
break;
SysLog(NID_APP, "argument is %s", p);
}
- String tmp;
- p = appsvc_get_data(pBundle, SMS_KEY_SERVICE_CALLER);
- if (p)
- {
- tmp.Format(60, L"%s:%s", SMS_KEY_SERVICE_CALLER, p);
- pList->Add(*new (std::nothrow) String(tmp));
- SysLog(NID_APP, "service_caller is %s", p);
- }
-
- p = appsvc_get_data(pBundle, SMS_KEY_SERVICE_DATA);
- if (p)
- {
- tmp.Format(60, L"%s:%s", SMS_KEY_SERVICE_DATA, p);
- pList->Add(*new (std::nothrow) String(tmp));
- SysLog(NID_APP, "service_data is set");
- }
-
- p = appsvc_get_data(pBundle, SAMSUNG_ACCOUNT_KEY_CLIENT_ID);
- if (p)
- {
- tmp.Format(60, L"%s:%s", SAMSUNG_ACCOUNT_KEY_CLIENT_ID, p);
- pList->Add(*new (std::nothrow) String(tmp));
- SysLog(NID_APP, "client_id is %s", p);
- }
-
- p = appsvc_get_data(pBundle, SAMSUNG_ACCOUNT_KEY_CLIENT_SECRET);
- if (p)
- {
- tmp.Format(60, L"%s:%s", SAMSUNG_ACCOUNT_KEY_CLIENT_SECRET, p);
- pList->Add(*new (std::nothrow) String(tmp));
- SysLog(NID_APP, "client_secret is %s", p);
- }
-
- p = appsvc_get_data(pBundle, SAMSUNG_ACCOUNT_KEY_SERVICE_CATEGORY);
- if (p)
- {
- tmp.Format(60, L"%s:%s", SAMSUNG_ACCOUNT_KEY_SERVICE_CATEGORY, p);
- pList->Add(*new (std::nothrow) String(tmp));
- SysLog(NID_APP, "service_category is %s", p);
- }
-
return E_SUCCESS;
}
{
const char* pBundleValue = bundle_get_val(__pBundle, AUL_K_CALLEE_APPID);
- String retVal = pBundleValue;
-
- String temp;
- // [INFO] ugly code for submode callee
- retVal.SubString(11, temp);
- if (temp == L"_AppControl")
- {
- String id;
- retVal.SubString(0, 10, id);
- const String& name = _PackageManagerImpl::GetInstance()->GetDefaultAppExecutableName(id);
-
- retVal = id + L'.' + name;
- SysLog(NID_APP, "Converted caller Id is %ls", retVal.GetPointer());
- }
+ const AppId retVal = pBundleValue;
- return retVal;
+ return _Aul::GetRealAppId(retVal);
}
else if (typeid(*pObj) == typeid(const ByteBuffer))
{
SysLog(NID_APP, "ByteBuffer type");
+ const ByteBuffer* pBuffer = static_cast<const ByteBuffer*>(pObj);
+
+ std::unique_ptr<char[]> pBundleKey(_StringConverter::CopyToCharArrayN(*pKey));
+ bundle_add_byte(b, pBundleKey.get(), pBuffer->GetPointer(), pBuffer->GetLimit());
}
}
}
result
-_AppArg::CreateLaunchArg(bundle* b, const String& arg)
+_AppArg::CreateNotificationArg(bundle* b, const String& arg)
{
SysAssertf(b != null, "Valid bundle should be supplied");
if (!arg.IsEmpty())
{
- const char** pSa = new (std::nothrow) const char*[1];
- SysTryReturnResult(NID_APP, pSa != null, E_OUT_OF_MEMORY, "Insufficient memory.");
- pSa[0] = _StringConverter::CopyToCharArrayN(arg);
- bundle_add_str_array(pb, OSP_K_ARG, pSa, 1);
-
- bundle_add(pb, TIZEN_NOTIFICATION_DATA, pSa[0]);
-
- delete[] pSa[0];
- delete[] pSa;
+ std::unique_ptr<char[]> pStr(_StringConverter::CopyToCharArrayN(arg));
+ bundle_add(pb, TIZEN_NOTIFICATION_DATA, pStr.get());
}
bundle_add(pb, OSP_K_LAUNCH_TYPE, OSP_V_LAUNCH_TYPE_LAUNCH);
result
-_AppArg::CreateAppControlArg(bundle* b, const _AppControlImpl& ac, const String* pUriData, const String* pMimeType, const IMap* pList)
+_AppArg::CreateAppControlArg(bundle* b, const _AppControlImpl& ac, const String* pUriData, const String* pMimeType, const IMap* pMap)
+{
+ return CreateAppControlArg(b, ac._opId, pUriData, pMimeType, pMap);
+}
+
+
+result
+_AppArg::CreateAppControlArg(bundle* b, const String& oId, const String* pUriData, const String* pMimeType, const IMap* pMap)
{
SysAssertf(b != null, "Valid bundle should be supplied");
bundle* pb = b;
- std::unique_ptr<char[]> pOperation(_StringConverter::CopyToCharArrayN(ac._opId));
+ std::unique_ptr<char[]> pOperation(_StringConverter::CopyToCharArrayN(oId));
if (pOperation.get())
{
appsvc_set_operation(pb, pOperation.get());
}
}
- AddStrMap(pb, pList);
+ AddStrMap(pb, pMap);
bundle_add(pb, OSP_K_LAUNCH_TYPE, OSP_V_LAUNCH_TYPE_APPCONTROL);
char dataControlRequestType[MAX_LEN_DATA_CONTROL_REQ_TYPE] = {0, };
snprintf(dataControlRequestType, MAX_LEN_DATA_CONTROL_REQ_TYPE, "%d", static_cast<int>(requestType));
bundle_add(b, OSP_K_DATACONTROL_REQUEST_TYPE, dataControlRequestType);
+ bundle_add(b, OSP_K_DATACONTROL_PROTOCOL_VERSION, OSP_V_VERSION_2_1_0_3);
+ bundle_add(b, AUL_K_NO_CANCEL, "1");
std::unique_ptr<char[]> pProvider(_StringConverter::CopyToCharArrayN(dc.__providerId));
if (pProvider)
char dataControlRequestType[MAX_LEN_DATA_CONTROL_REQ_TYPE] = {0, };
snprintf(dataControlRequestType, MAX_LEN_DATA_CONTROL_REQ_TYPE, "%d", static_cast < int >(requestType));
bundle_add(b, OSP_K_DATACONTROL_REQUEST_TYPE, dataControlRequestType);
+ bundle_add(b, OSP_K_DATACONTROL_PROTOCOL_VERSION, OSP_V_VERSION_2_1_0_3);
+ bundle_add(b, AUL_K_NO_CANCEL, "1");
std::unique_ptr<char[]> pProvider(_StringConverter::CopyToCharArrayN(dc.__providerId));
if (pProvider)
bundle*
_AppArg::GetBundleFromSvc(void* svc)
{
- struct DummyS
- {
- int dummy1;
- int dummy2;
- bundle* pData;
- };
-
- DummyS* pDummy = static_cast<DummyS*>(svc);
-
- if (pDummy && pDummy->pData)
- {
- return pDummy->pData;
- }
+ bundle* pBundle = NULL;
+ int ret = service_to_bundle(static_cast<service_h>(svc), &pBundle);
- return NULL;
+ return (ret == SERVICE_ERROR_NONE) ? pBundle : NULL;
}
}
}
+
+void
+_AppArg::UpdateSubMode(bundle* pBundle)
+{
+ appsvc_add_data(pBundle, OSP_K_SUBMODE_CALLEE, "1");
+}
+
+
+bool
+_AppArg::IsSubMode(bundle* pBundle)
+{
+ const char* p = appsvc_get_data(pBundle, OSP_K_SUBMODE_CALLEE);
+ return (p && (strncmp(p, "1", sizeof(char)) == 0));
+}
+
+
+void
+_AppArg::UpdateServiceApp(bundle* pBundle)
+{
+ appsvc_add_data(pBundle, OSP_K_SERVICE_CALLEE, "1");
+}
+
+
+bool
+_AppArg::IsServiceApp(bundle* pBundle)
+{
+ const char* p = appsvc_get_data(pBundle, OSP_K_SERVICE_CALLEE);
+ return (p && (strncmp(p, "1", sizeof(char)) == 0));
+}
+
+
int
_AppArg::GetRequestIdFromBundle(bundle* pBundle)
{
bundle_keyval_get_basic_val(const_cast<bundle_keyval_t*>(pVal), reinterpret_cast<void**>(&pStr), &size);
if (pStr)
{
- SysLog(NID_APP, "(%s, %s)", pKey, pStr);
+ SysSecureLog(NID_APP, "(%s, %s)", pKey, pStr);
}
break;
default:
return;
}
- const char* p = null;
- p = appsvc_get_data(b, AUL_K_CALLER_PID);
- if (p)
- {
- SysLog(NID_APP, "CallerPId[%s]", p);
- }
-
- p = appsvc_get_data(b, AUL_K_WAIT_RESULT);
- if (p)
- {
- SysLog(NID_APP, "WaitResult[%s]", p);
- }
-
- p = appsvc_get_data(b, OSP_K_COND);
- if (p)
- {
- SysLog(NID_APP, "Condition[%s]", p);
- }
-
- p = appsvc_get_operation(b);
- if (p)
- {
- SysLog(NID_APP, "operation[%s]", p);
- }
-
- p = appsvc_get_uri(b);
- if (p)
- {
- SysLog(NID_APP, "uri[%s]", p);
- }
-
- p = appsvc_get_mime(b);
- if (p)
- {
- SysLog(NID_APP, "mime[%s]", p);
- }
-
- p = appsvc_get_category(b);
- if (p)
- {
- SysLog(NID_APP, "Category[%s]", p);
- }
-
bundle_foreach(b, BundlePrintIterFnCb, NULL);
int len = 0;