#include <vector>
#include <aul/aul.h>
#include <sstream>
-#include <package-manager.h>
#include <app.h>
-// to get package name by appid
#include <app_info.h>
-#include <app_manager.h>
// To get ppid
#include <unistd.h>
#include <security-server.h>
#include <sstream>
#include "DataControlAsyncCallbackManager.h"
+#include "DataControlCallback.h"
+#include "DataControlPendingEvent.h"
namespace DeviceAPI {
namespace DataControl {
-
-namespace {
-
-static const char OSP_V_CALLER_TYPE_OSP[] = "osp";
-static const char OSP_V_LAUNCH_TYPE_LAUNCH[] = "launch";
-static const char OSP_V_LAUNCH_TYPE_APPCONTROL[] = "appcontrol";
-static const char OSP_V_LAUNCH_TYPE_DATACONTROL[] = "datacontrol";
-static const char OSP_V_LAUNCH_TYPE_CONDTION[] = "condition";
-static const char OSP_V_REQUEST_TYPE_SQL_QUERY[] = "sql_query";
-static const char OSP_V_REQUEST_TYPE_SQL_INSERT[] = "sql_insert";
-static const char OSP_V_REQUEST_TYPE_SQL_UPDATE[] = "sql_update";
-static const char OSP_V_REQUEST_TYPE_SQL_DELETE[] = "sql_delete";
-static const char OSP_V_REQUEST_TYPE_MAP_QEURY[] = "map_query";
-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 BUNDLE_KEY_WINDOW[] = "__APP_SVC_K_WIN_ID__";
-
-
-#define OSP_K_CALLER_TYPE "__OSP_CALLER_TYPE__"
-#define OSP_K_LAUNCH_TYPE "__OSP_LAUNCH_TYPE__"
-#define OSP_K_ARG "__OSP_ARGS__"
-#define OSP_K_COND "__OSP_COND_NAME__"
-#define OSP_K_APPID "__OSP_APPID__"
-#define OSP_K_REQUEST_ID "__OSP_REQUEST_ID__"
-#define OSP_K_APPCONTROL_PROVIDER "__OSP_APPCONTROL_PROVIDER__"
-#define OSP_K_APPCONTROL_OPERATION "__OSP_APPCONTROL_OPERATION__"
-#define OSP_K_APPCONTROL_CATEGORY "__OSP_APPCONTROL_CATEGORY__"
-#define OSP_K_APPCONTROL_MIME "__OSP_APPCONTROL_MIME__"
-#define OSP_K_APPCONTROL_URI "__OSP_APPCONTROL_URI__"
-#define OSP_K_DATACONTROL_PROVIDER "__OSP_DATACONTROL_PROVIDER__"
-#define OSP_K_DATACONTROL_REQUEST_TYPE "__OSP_DATACONTROL_REQUEST_TYPE__"
-#define RESULT_TRUE_FROM_OSP "1"
-#define RESULT_FALSE_FROM_OSP "0"
-#define OSP_K_DATACONTROL_PROTOCOL_VERSION "__OSP_DATACONTROL_PROTOCOL_VERSION__"
-#define OSP_K_DATACONTROL_PROTOCOL_VERSION_VALUE "ver_2.1.0.3"
-
-#define DATACONTROL_PROTOCOL_DIR_TOP "/tmp/osp"
-#define DATACONTROL_PROTOCOL_DIR_MIDDLE "/tmp/osp/data-control"
-#define DATACONTROL_PROTOCOL_DIR "/tmp/osp/data-control/request"
-
-static std::vector<std::string> getDataArrayFromBundle(bundle *b, std::string key)
-{
- std::vector<std::string> result;
- const char **array;
- int length = 0;
- int index = 0;
-
- array = appsvc_get_data_array(b, key.c_str(), &length);
-
- if (array == NULL || length == 0)
- {
- ThrowMsg(WrtDeviceApis::Commons::PlatformException, "Get result data fail from datacontrol provider");
- }
-
- for (index = 0; index < length; index++)
- {
- result.push_back(array[index]);
- }
-
- return result;
-}
-
-
-static void sqldataControlSelectCallback(bundle* b, int request_code, appsvc_result_val res, void* data)
-{
- LoggerD("Enter");
-
- EventSelectPendingEvent *pendingEvent = NULL;
- SQLDataControlConsumer *consumer = NULL;
- EventSelectPtr event;
- const char *bundleKey = NULL;
-
- try
- {
- if (b == NULL)
- {
- ThrowMsg(WrtDeviceApis::Commons::PlatformException, "Get result fail from datacontrol provider");
- }
-
- bundleKey = appsvc_get_data(b, OSP_K_REQUEST_ID);
-
- if (bundleKey == NULL)
- {
- ThrowMsg(WrtDeviceApis::Commons::PlatformException, "Get key fail from datacontrol provider");
- }
-
- pendingEvent = (EventSelectPendingEvent *)DataControlAsyncCallbackManagerSingleton::Instance().removeSQLUserData(bundleKey);
- consumer = (SQLDataControlConsumer*)pendingEvent->getThisObject();
-
- if (DataControlAsyncCallbackManagerSingleton::Instance().isSQLDataControlGC((void*)consumer))
- {
- LoggerD("private object is garbage collected");
- delete pendingEvent;
- return;
- }
- event = pendingEvent->getEvent();
-
- std::vector<std::string> result = getDataArrayFromBundle(b, OSP_K_ARG);
-
- for (size_t index = 0; index < result.size(); index++)
- {
- LoggerD(result[index]);
- }
-
- if (result.size() < 3)
- {
- ThrowMsg(WrtDeviceApis::Commons::PlatformException, "invalid result from datacontrol provider");
- }
-
- // 0 : result true or false??
- if (RESULT_TRUE_FROM_OSP != result[0])
- {
- // 1 : error msg
- ThrowMsg(WrtDeviceApis::Commons::PlatformException, result[1]);
- }
-
- event->setExceptionCode(WrtDeviceApis::Commons::ExceptionCodes::None);
- // 2 : result set file path
- event->setResultSetPath(result[2]);
-
- }
- catch (const WrtDeviceApis::Commons::Exception& ex)
- {
- LoggerE("Exception: " << ex.GetMessage());
-
- if (event.Get() == NULL)
- {
- LoggerD("event removed, invalid cb");
- return;
- }
-
- event->setExceptionCode(ex.getCode());
- event->setErrorMsg(ex.GetMessage());
- }
- consumer->handlePendingEvent(event);
-
- if (pendingEvent)
- {
- delete pendingEvent;
- }
-
-}
-
-static void sqldataControlInsertCallback(bundle* b, int request_code, appsvc_result_val res, void* data)
-{
- LoggerD("Enter");
-
-
- EventInsertPendingEvent *pendingEvent = NULL;
- SQLDataControlConsumer *consumer = NULL;
- EventInsertPtr event;
- const char *bundleKey = NULL;
-
- try
- {
- if (b == NULL)
- {
- ThrowMsg(WrtDeviceApis::Commons::PlatformException, "Get result fail from datacontrol provider");
- }
-
- bundleKey = appsvc_get_data(b, OSP_K_REQUEST_ID);
-
- if (bundleKey == NULL)
- {
- ThrowMsg(WrtDeviceApis::Commons::PlatformException, "Get key fail from datacontrol provider");
- }
-
- pendingEvent = (EventInsertPendingEvent *)DataControlAsyncCallbackManagerSingleton::Instance().removeSQLUserData(bundleKey);
- consumer = (SQLDataControlConsumer*)pendingEvent->getThisObject();
-
- if (DataControlAsyncCallbackManagerSingleton::Instance().isSQLDataControlGC((void*)consumer))
- {
- LoggerD("private object is garbage collected");
- delete pendingEvent;
- return;
- }
-
- event = pendingEvent->getEvent();
-
- std::vector<std::string> result = getDataArrayFromBundle(b, OSP_K_ARG);
-
- for (size_t index = 0; index < result.size(); index++)
- {
- LoggerD(result[index]);
- }
-
- if (result.size() < 2)
- {
- ThrowMsg(WrtDeviceApis::Commons::PlatformException, "invalid result from datacontrol provider");
- }
-
- // 0 : result true or false??
- if (RESULT_TRUE_FROM_OSP != result[0])
- {
- // 1 : error msg
- ThrowMsg(WrtDeviceApis::Commons::PlatformException, result[1]);
- }
-
- // 2 : insertrowid
- std::stringstream sstr(result[2]);
- long insertRowid = 0;
- sstr >> insertRowid;
- LoggerD(result[2] << insertRowid);
- event->setRowId(insertRowid);
- event->setExceptionCode(WrtDeviceApis::Commons::ExceptionCodes::None);
-
- }
- catch (const WrtDeviceApis::Commons::Exception& ex)
- {
- LoggerE("Exception: " << ex.GetMessage());
-
- if (event.Get() == NULL)
- {
- LoggerD("event removed, invalid cb");
- return;
- }
-
- event->setExceptionCode(ex.getCode());
- event->setErrorMsg(ex.GetMessage());
- }
- consumer->handlePendingEvent(event);
-
- if (pendingEvent)
- {
- delete pendingEvent;
- }
-
-}
-
-static void sqldataControlDeleteCallback(bundle* b, int request_code, appsvc_result_val res, void* data)
-{
- LoggerD("Enter");
-
- EventDeletePendingEvent* pendingEvent = NULL;
- SQLDataControlConsumer *consumer = NULL;
- EventDeletePtr event;
- const char* bundleKey = NULL;
-
- try
- {
- if (b == NULL)
- {
- ThrowMsg(WrtDeviceApis::Commons::PlatformException, "Get result fail from datacontrol provider");
- }
-
- bundleKey = appsvc_get_data(b, OSP_K_REQUEST_ID);
-
- if (bundleKey == NULL)
- {
- ThrowMsg(WrtDeviceApis::Commons::PlatformException, "Get key fail from datacontrol provider");
- }
-
- pendingEvent = (EventDeletePendingEvent *)DataControlAsyncCallbackManagerSingleton::Instance().removeSQLUserData(bundleKey);
- consumer = (SQLDataControlConsumer*)pendingEvent->getThisObject();
-
- if (DataControlAsyncCallbackManagerSingleton::Instance().isSQLDataControlGC((void*)consumer))
- {
- LoggerD("private object is garbage collected");
- delete pendingEvent;
- return;
- }
-
- event = pendingEvent->getEvent();
-
- std::vector<std::string> result = getDataArrayFromBundle(b, OSP_K_ARG);
-
- for (size_t index = 0; index < result.size(); index++)
- {
- LoggerD(result[index]);
- }
-
- if (result.size() < 2)
- {
- ThrowMsg(WrtDeviceApis::Commons::PlatformException, "invalid result from datacontrol provider");
- }
-
- // 0 : result true or false??
- if (RESULT_TRUE_FROM_OSP != result[0])
- {
- // 1 : error msg
- ThrowMsg(WrtDeviceApis::Commons::PlatformException, result[1]);
- }
-
- event->setExceptionCode(WrtDeviceApis::Commons::ExceptionCodes::None);
-
-
- }
- catch (const WrtDeviceApis::Commons::Exception& ex)
- {
- LoggerE("Exception: " << ex.GetMessage());
-
- if (event.Get() == NULL)
- {
- LoggerD("event removed, invalid cb");
- return;
- }
-
- event->setExceptionCode(ex.getCode());
- event->setErrorMsg(ex.GetMessage());
- }
- consumer->handlePendingEvent(event);
-
- if (pendingEvent)
- {
- delete pendingEvent;
- }
-}
-
-static void sqldataControlUpdateCallback(bundle* b, int request_code, appsvc_result_val res, void* data)
-{
- LoggerD("Enter");
-
- EventUpdatePendingEvent* pendingEvent = NULL;
- SQLDataControlConsumer *consumer = NULL;
- EventUpdatePtr event;
- const char *bundleKey = NULL;
-
- try
- {
- if (b == NULL)
- {
- ThrowMsg(WrtDeviceApis::Commons::PlatformException, "Get result fail from datacontrol provider");
- }
-
- bundleKey = appsvc_get_data(b, OSP_K_REQUEST_ID);
-
- if (bundleKey == NULL)
- {
- ThrowMsg(WrtDeviceApis::Commons::PlatformException, "Get key fail from datacontrol provider");
- }
-
- pendingEvent = (EventUpdatePendingEvent *)DataControlAsyncCallbackManagerSingleton::Instance().removeSQLUserData(bundleKey);
- consumer = (SQLDataControlConsumer*)pendingEvent->getThisObject();
-
- if (DataControlAsyncCallbackManagerSingleton::Instance().isSQLDataControlGC((void*)consumer))
- {
- LoggerD("private object is garbage collected");
- delete pendingEvent;
- return;
- }
-
- event = pendingEvent->getEvent();
-
- std::vector<std::string> result = getDataArrayFromBundle(b, OSP_K_ARG);
-
- for (size_t index = 0; index < result.size(); index++)
- {
- LoggerD(result[index]);
- }
-
- if (result.size() < 2)
- {
- ThrowMsg(WrtDeviceApis::Commons::PlatformException, "invalid result from datacontrol provider");
- }
-
- // 0 : result true or false??
- if (RESULT_TRUE_FROM_OSP != result[0])
- {
- // 1 : error msg
- ThrowMsg(WrtDeviceApis::Commons::PlatformException, result[1]);
- }
-
- event->setExceptionCode(WrtDeviceApis::Commons::ExceptionCodes::None);
-
- }
- catch (const WrtDeviceApis::Commons::Exception& ex)
- {
- LoggerE("Exception: " << ex.GetMessage());
-
- if (event.Get() == NULL)
- {
- LoggerD("event removed, invalid cb");
- return;
- }
-
- event->setExceptionCode(ex.getCode());
- event->setErrorMsg(ex.GetMessage());
- }
- consumer->handlePendingEvent(event);
-
- if (pendingEvent)
- {
- delete pendingEvent;
- }
-}
-
-static void sqldataControlCommonCallback(bundle* b, int request_code, appsvc_result_val res, void* data)
-{
- LoggerD("Enter");
-
- if (b == NULL)
- {
- LoggerD("Bundle null, Error");
- return;
- }
-
- const char *reqType = appsvc_get_data(b, OSP_K_DATACONTROL_REQUEST_TYPE);
-
- if (reqType == NULL)
- {
- LoggerD("UnkownRequest");
- return;
- }
-
- std::istringstream buffer(reqType);
- int reqTypeInt = 0;
-
- buffer >> reqTypeInt;
-
-
- LoggerD(reqTypeInt);
-
- switch (reqTypeInt)
- {
- case _DATACONTROL_REQUEST_TYPE_SQL_QUERY:
- sqldataControlSelectCallback(b, request_code, res, data);
- break;
- case _DATACONTROL_REQUEST_TYPE_SQL_INSERT:
- sqldataControlInsertCallback(b, request_code, res, data);
- break;
- case _DATACONTROL_REQUEST_TYPE_SQL_DELETE:
- sqldataControlDeleteCallback(b, request_code, res, data);
- break;
- case _DATACONTROL_REQUEST_TYPE_SQL_UPDATE:
- sqldataControlUpdateCallback(b, request_code, res, data);
- break;
- default:
- LoggerD("Unknown Request");
- }
-}
-
-}
-
SQLDataControlConsumer::SQLDataControlConsumer(std::string& provId, std::string& dataId, std::string& type)
{
LoggerD("Enter");
m_dataId = dataId;
m_providerId = provId;
- m_appId = getApplicationId(provId);
+ m_appId = getProviderApplicationId(OSP_PKGINFO_SQL_TYPE, provId);
m_ProviderPkgId = getProviderPkgId(m_appId);
security_server_app_give_access(m_ProviderPkgId.c_str(), -1);
m_currentAppId = getCurrentApplicationId();
createResultDir();
- DataControlAsyncCallbackManagerSingleton::Instance().setSQLDataControlGC((void*)this, false);
+ DataControlAsyncCallbackManagerSingleton::Instance().setDataControlGC((void*)this, false);
}
SQLDataControlConsumer::~SQLDataControlConsumer()
{
LoggerD("Enter");
- DataControlAsyncCallbackManagerSingleton::Instance().setSQLDataControlGC((void*)this, true);
+ DataControlAsyncCallbackManagerSingleton::Instance().setDataControlGC((void*)this, true);
}
DPL::Mutex SQLDataControlConsumer::m_mutex;
-std::vector<unsigned int> SQLDataControlConsumer::m_currentReqIds;
-
-std::string SQLDataControlConsumer::getCurrentApplicationId()
-{
- char *app_id = NULL;
- std::string appId = "";
- int parent_pid = getppid();
- LoggerD("parent pid : " << parent_pid);
- int ret = app_manager_get_app_id(parent_pid, &app_id);
-
- if((ret != APP_ERROR_NONE) || (app_id == NULL))
- {
- LoggerE("Can not get app id from current pid (" << ret << ")");
- ThrowMsg(WrtDeviceApis::Commons::PlatformException, "could not get information about application");
- }
- appId = app_id;
- free(app_id);
- return appId;
-}
-
-void SQLDataControlConsumer::removeReqId(unsigned int reqId)
-{
- bool remove = false;
-
- std::vector<unsigned int>::iterator it, found;
-
- for (it = m_currentReqIds.begin(); it != m_currentReqIds.end(); ++it)
- {
- if (*it == reqId)
- {
- found = it;
- remove = true;
- }
- }
-
- if (remove)
- {
- DPL::Mutex::ScopedLock lock(&m_mutex);
- m_currentReqIds.erase(found);
- }
-}
bool SQLDataControlConsumer::checkReqIdUniqueness(unsigned int reqId)
{
return m_type;
}
-std::string SQLDataControlConsumer::getProviderPkgId(const std::string& appId)
-{
- char* pkgId = NULL;
- app_info_h handle = NULL;
-
- if (m_ProviderPkgId.length() != 0)
- {
- return m_ProviderPkgId;
- }
-
- int ret = app_manager_get_app_info(appId.c_str(), &handle);
-
- if (ret != APP_ERROR_NONE)
- {
- LoggerD("Fail to get appinfo");
- ThrowMsg(WrtDeviceApis::Commons::PlatformException, "get appId error");
- }
-
- ret = app_info_get_package(handle, &pkgId);
-
- if ((ret != APP_ERROR_NONE) || (pkgId == NULL))
- {
- LoggerD("Fail to get pkg_name");
- ThrowMsg(WrtDeviceApis::Commons::PlatformException, "get pkdid error");
- }
- m_ProviderPkgId = pkgId;
- app_info_destroy(handle);
- free(pkgId);
- return m_ProviderPkgId;
-}
-
-std::string SQLDataControlConsumer::getApplicationId(const std::string& provId)
-{
- std::string appIdStr = "";
-
- char* appId = NULL;
- char* access = NULL;
- const char *passId = provId.c_str();
-
- if (m_appId.length() == 0)
- {
-
- if( pkgmgr_datacontrol_get_info(passId, OSP_PKGINFO_SQL_TYPE, &appId, &access) < 0)
- {
- ThrowMsg(WrtDeviceApis::Commons::PlatformException, "get appId error");
- }
-
- if (appId)
- {
- appIdStr = appId;
- free(appId);
- }
-
- if (access)
- {
- free(access);
- }
-
- m_appId = appIdStr;
-
-
- }
- return m_appId;
-}
-std::string SQLDataControlConsumer::generateFileName(unsigned int reqId)
-{
- std::stringstream ssdata;
- ssdata.str("");
- ssdata << reqId;
- std::string parent = DATACONTROL_PROTOCOL_DIR;
- std::string filename = parent + "/" + m_currentAppId + ssdata.str();
- return filename;
-}
void SQLDataControlConsumer::saveArrayToFile(std::string filename, RowData *rowData)
{
insertUpdateFile.close();
}
-void SQLDataControlConsumer::addArrayToBundle(bundle* passData, std::vector<std::string>& array)
-{
- size_t arraySize = array.size();
-
- if (arraySize == 0)
- {
- ThrowMsg(WrtDeviceApis::Commons::AlreadyInUseException, "size = 0");
- }
-
- const char** arr = NULL;
- arr = (const char**)calloc(sizeof(char*), arraySize);
-
- if (arr == NULL)
- {
- ThrowMsg(WrtDeviceApis::Commons::AlreadyInUseException, "null");
- }
- for (size_t index = 0; index < arraySize; index++)
- {
- arr[index] = array[index].c_str();
- }
-
-
- bundle_add_str_array(passData, OSP_K_ARG, arr, arraySize);
-
- free(arr);
- arr = NULL;
-}
void SQLDataControlConsumer::handleCommonErrorEvent(void* userData, unsigned int code, std::string msg)
{
insertEvent->setErrorMsg(msg);
WrtDeviceApis::Commons::EventRequestReceiver<EventInsert>::ManualAnswer(insertEvent);
+
}
else if (dynamic_cast<EventUpdatePendingEvent*>(pEvent) != NULL)
{
}
}
+
void SQLDataControlConsumer::handlePendingEvent(const EventInsertPtr& event)
{
LoggerD("OK");
WrtDeviceApis::Commons::EventRequestReceiver<EventInsert>::ManualAnswer(event);
CommonPendingEvent* userData = NULL;
-
+ unsigned short currentJob = 0;
try {
- userData = (CommonPendingEvent*)DataControlAsyncCallbackManagerSingleton::Instance().getRemainingSQLOperation();
+ userData = (CommonPendingEvent*)DataControlAsyncCallbackManagerSingleton::Instance().getRemainingIpcOperation();
if (userData)
{
- SendAppControlLaunchToProvider(userData);
+ SendAppControlLaunchToProvider(userData, currentJob);
}
}
catch (const WrtDeviceApis::Commons::Exception& ex)
{
WrtDeviceApis::Commons::EventRequestReceiver<EventDelete>::ManualAnswer(event);
CommonPendingEvent* userData = NULL;
+ unsigned short currentJob = 0;
try {
- userData = (CommonPendingEvent*)DataControlAsyncCallbackManagerSingleton::Instance().getRemainingSQLOperation();
+ userData = (CommonPendingEvent*)DataControlAsyncCallbackManagerSingleton::Instance().getRemainingIpcOperation();
if (userData)
{
- SendAppControlLaunchToProvider(userData);
+ SendAppControlLaunchToProvider(userData, currentJob);
}
}
catch (const WrtDeviceApis::Commons::Exception& ex)
{
WrtDeviceApis::Commons::EventRequestReceiver<EventSelect>::ManualAnswer(event);
CommonPendingEvent* userData = NULL;
-
+ unsigned short currentJob = 0;
+
try {
- userData = (CommonPendingEvent*)DataControlAsyncCallbackManagerSingleton::Instance().getRemainingSQLOperation();
+ userData = (CommonPendingEvent*)DataControlAsyncCallbackManagerSingleton::Instance().getRemainingIpcOperation();
if (userData)
{
- SendAppControlLaunchToProvider(userData);
+ SendAppControlLaunchToProvider(userData, currentJob);
}
}
catch (const WrtDeviceApis::Commons::Exception& ex)
{
WrtDeviceApis::Commons::EventRequestReceiver<EventUpdate>::ManualAnswer(event);
CommonPendingEvent* userData = NULL;
-
+ unsigned short currentJob = 0;
+
try {
- userData = (CommonPendingEvent*)DataControlAsyncCallbackManagerSingleton::Instance().getRemainingSQLOperation();
+ userData = (CommonPendingEvent*)DataControlAsyncCallbackManagerSingleton::Instance().getRemainingIpcOperation();
if (userData)
{
- SendAppControlLaunchToProvider(userData);
+ SendAppControlLaunchToProvider(userData, currentJob);
}
}
catch (const WrtDeviceApis::Commons::Exception& ex)
ThrowMsg(WrtDeviceApis::Commons::PlatformException, "result dir could be error during checking status");
}
-std::string SQLDataControlConsumer::convertIntToString(unsigned int data)
-{
- std::stringstream ssbuffer;
-
- ssbuffer.str("");
- ssbuffer << data;
- return ssbuffer.str();
-}
-
-void SQLDataControlConsumer::SendAppControlLaunchToProvider(void* event)
-{
- LoggerD("OK");
- bundle* passData = NULL;
- std::string dataId = getDataId();
- std::vector<std::string> queryItem;
- std::stringstream ssBuffer;
- std::string stringBuffer;
- CommonPendingEvent* pEvent = (CommonPendingEvent*)(event);
- std::string ipcFilename;
- std::string where;
- unsigned int reqId = 0;
- unsigned int columnSize = 0;
-
- try
- {
- passData = bundle_create();
-
- if (passData == NULL)
- {
- ThrowMsg(WrtDeviceApis::Commons::PlatformException, "ipc memory allocation fail");
- }
-
- if (pEvent == NULL)
- {
- ThrowMsg(WrtDeviceApis::Commons::PlatformException, "event null");
- }
-
- appsvc_set_operation(passData, APPSVC_OPERATION_DEFAULT);
- appsvc_set_appid(passData, m_appId.c_str());
-
- bundle_add(passData, OSP_K_CALLER_TYPE, OSP_V_CALLER_TYPE_OSP);
- bundle_add(passData, OSP_K_LAUNCH_TYPE, OSP_V_LAUNCH_TYPE_DATACONTROL);
- bundle_add(passData, OSP_K_DATACONTROL_PROVIDER, m_providerId.c_str());
- bundle_add(passData, OSP_K_DATACONTROL_PROTOCOL_VERSION, OSP_K_DATACONTROL_PROTOCOL_VERSION_VALUE); // version
- bundle_add(passData, AUL_K_CALLER_APPID, m_currentAppId.c_str());
-
- if (dynamic_cast<EventInsertPendingEvent*>(pEvent) != NULL)
- {
- EventInsertPendingEvent* pendingInsertEvent = (EventInsertPendingEvent*)pEvent;
- EventInsertPtr insertEvent = pendingInsertEvent->getEvent();
-
- reqId = insertEvent->getReqId();
- columnSize = insertEvent->getColumnSize();
-
- stringBuffer = convertIntToString(reqId);
- bundle_add(passData, OSP_K_REQUEST_ID, stringBuffer.c_str());
-
- ipcFilename = generateFileName(reqId);
- stringBuffer = convertIntToString(columnSize);
-
- queryItem.push_back(dataId);
- queryItem.push_back(stringBuffer);
- queryItem.push_back(ipcFilename);
-
- stringBuffer = convertIntToString(_DATACONTROL_REQUEST_TYPE_SQL_INSERT);
- bundle_add(passData, OSP_K_DATACONTROL_REQUEST_TYPE, stringBuffer.c_str());
-
- addArrayToBundle(passData, queryItem);
- }
- else if (dynamic_cast<EventUpdatePendingEvent*>(pEvent) != NULL)
- {
- EventUpdatePendingEvent* pendingUpdateEvent = (EventUpdatePendingEvent*)pEvent;
- EventUpdatePtr updateEvent = pendingUpdateEvent->getEvent();
-
- reqId = updateEvent->getReqId();
- columnSize = updateEvent->getColumnSize();
- where = updateEvent->getWhere();
-
- stringBuffer = convertIntToString(reqId);
- bundle_add(passData, OSP_K_REQUEST_ID, stringBuffer.c_str());
-
- stringBuffer = convertIntToString(_DATACONTROL_REQUEST_TYPE_SQL_UPDATE);
- bundle_add(passData, OSP_K_DATACONTROL_REQUEST_TYPE, stringBuffer.c_str());
-
- ipcFilename = generateFileName(reqId);
- stringBuffer = convertIntToString(columnSize);
-
- queryItem.push_back(dataId);
- queryItem.push_back(stringBuffer);
- queryItem.push_back(ipcFilename);
-
- if (where.size() == 0) // where
- {
- queryItem.push_back("NULL");
- }
- else
- {
- queryItem.push_back(where);
- }
-
- addArrayToBundle(passData, queryItem);
-
- }
- else if (dynamic_cast<EventSelectPendingEvent*>(pEvent) != NULL)
- {
- EventSelectPendingEvent* pendingSelectEvent = (EventSelectPendingEvent*)pEvent;
- EventSelectPtr selectEvent = pendingSelectEvent->getEvent();
-
- reqId = selectEvent->getReqId();
- std::vector<std::string> columns = selectEvent->getColumns();
- columnSize = columns.size();
- where = selectEvent->getWhere();
- std::string order = selectEvent->getOrder();
- std::string page = selectEvent->getPage();
- std::string numberPerPage = selectEvent->getNumerPerPage();
-
- stringBuffer = convertIntToString(reqId);
- bundle_add(passData, OSP_K_REQUEST_ID, stringBuffer.c_str());
-
- stringBuffer = convertIntToString(_DATACONTROL_REQUEST_TYPE_SQL_QUERY);
- bundle_add(passData, OSP_K_DATACONTROL_REQUEST_TYPE, stringBuffer.c_str());
-
- queryItem.push_back(dataId);
-
- if (columnSize == 0)
- {
- queryItem.push_back("NULL");
- }
- else
- {
- stringBuffer = convertIntToString(columnSize);
- queryItem.push_back(stringBuffer);
-
- for (size_t index = 0; index < columnSize; index++)
- {
- queryItem.push_back(columns[index]);
- }
- }
-
- if (where.size() == 0)
- {
- queryItem.push_back("NULL");
- }
- else
- {
- queryItem.push_back(where);
- }
-
- if (order.size() == 0)
- {
- queryItem.push_back("NULL");
- }
- else
- {
- queryItem.push_back(order);
- }
-
- if (page.size() == 0) // page
- {
- queryItem.push_back("1");
- }
- else
- {
- queryItem.push_back(page);
- }
-
- if (numberPerPage.size() == 0) // numberOfPage
- {
- queryItem.push_back("20");
- }
- else
- {
- queryItem.push_back(numberPerPage);
- }
-
- addArrayToBundle(passData, queryItem);
- }
- else if (dynamic_cast<EventDeletePendingEvent*>(pEvent) != NULL)
- {
- EventDeletePendingEvent* pendingDeleteEvent = (EventDeletePendingEvent*)pEvent;
- EventDeletePtr deleteEvent = pendingDeleteEvent->getEvent();
- reqId = deleteEvent->getReqId();
- stringBuffer = convertIntToString(reqId);
- bundle_add(passData, OSP_K_REQUEST_ID, stringBuffer.c_str());
-
- stringBuffer = convertIntToString(_DATACONTROL_REQUEST_TYPE_SQL_DELETE);
- bundle_add(passData, OSP_K_DATACONTROL_REQUEST_TYPE, stringBuffer.c_str());
-
- queryItem.push_back(dataId); // dataid
- where = deleteEvent->getWhere();
-
- if (where.size() == 0) // where
- {
- queryItem.push_back("NULL");
- }
- else
- {
- queryItem.push_back(where);
- }
-
- addArrayToBundle(passData, queryItem);
- }
- else
- {
- // never happen
- ThrowMsg(WrtDeviceApis::Commons::PlatformException, "no type request type");
- }
-
- int pid = 0;
-
- for (int index = 0; index < 3; index++)
- {
- pid = appsvc_run_service(passData, reqId, sqldataControlCommonCallback, (void*)NULL);
-
- if (pid >= 0)
- break;
-
- usleep(300 * 1000);
- LoggerD("Launch Retry" << (index + 1));
- }
-
-
- if (pid < 0)
- {
- ThrowMsg(WrtDeviceApis::Commons::AlreadyInUseException, "Launch Error");
- }
-
- LoggerD("Launch OK : pid(" << pid << "), reqid : (" << reqId << ")");
- }
- catch (const WrtDeviceApis::Commons::Exception& ex)
- {
- LoggerE("Exception: " << ex.GetMessage());
- if (passData)
- {
- bundle_free(passData);
- passData = NULL;
- }
- ThrowMsg(WrtDeviceApis::Commons::PlatformException, ex.GetMessage());
-
- }
-
- if (passData)
- {
- bundle_free(passData);
- passData = NULL;
- }
-
-}
-
void SQLDataControlConsumer::OnRequestReceived(const EventInsertPtr& event)
{
LoggerD("Enter");
{
RowData* rowData = event->getRowData();
unsigned int reqId = event->getReqId();
- std::string ipcFilename = generateFileName(reqId);
+ std::string ipcFilename = generateFileName(reqId, m_currentAppId);
std::string reqIdStr = convertIntToString(reqId);
-
+ unsigned short currentJob = 0;
+
if (checkReqIdUniqueness(reqId) == false)
{
ThrowMsg(WrtDeviceApis::Commons::AlreadyInUseException, "Duplicated requested id");
saveArrayToFile(ipcFilename, rowData);
delete rowData;
- EventInsertPendingEvent* pendingEvent = new EventInsertPendingEvent((void*)this, event);
+ EventInsertPendingEvent* pendingEvent = new EventInsertPendingEvent((void*)this, m_dataId,
+ m_appId, m_providerId, m_currentAppId, event);
- if (DataControlAsyncCallbackManagerSingleton::Instance().checkDoSQLOperation())
+
+ if (DataControlAsyncCallbackManagerSingleton::Instance().checkRequestIpcOperation())
{
- SendAppControlLaunchToProvider(pendingEvent);
+ SendAppControlLaunchToProvider(pendingEvent, currentJob);
}
event->switchToManualAnswer();
DataControlAsyncCallbackManagerSingleton::Instance().addSQLUserData(reqIdStr, (void*)pendingEvent);
{
unsigned int reqId = event->getReqId();
std::string reqIdStr = convertIntToString(reqId);
+ unsigned short currentJob = 0;
if (checkReqIdUniqueness(reqId) == false)
{
ThrowMsg(WrtDeviceApis::Commons::AlreadyInUseException, "Duplicated requested id");
}
- EventDeletePendingEvent* pendingEvent = new EventDeletePendingEvent(this, event);
+ EventDeletePendingEvent* pendingEvent = new EventDeletePendingEvent(this, m_dataId,
+ m_appId, m_providerId, m_currentAppId, event);
- if (DataControlAsyncCallbackManagerSingleton::Instance().checkDoSQLOperation())
+ if (DataControlAsyncCallbackManagerSingleton::Instance().checkRequestIpcOperation())
{
- SendAppControlLaunchToProvider(pendingEvent);
+ SendAppControlLaunchToProvider(pendingEvent, currentJob);
}
event->switchToManualAnswer();
DataControlAsyncCallbackManagerSingleton::Instance().addSQLUserData(reqIdStr, (void*)pendingEvent);
{
unsigned int reqId = event->getReqId();
std::string reqIdStr = convertIntToString(reqId);
+ unsigned short currentJob = 0;
if (checkReqIdUniqueness(reqId) == false)
{
ThrowMsg(WrtDeviceApis::Commons::AlreadyInUseException, "Duplicated requested id");
}
-
- EventSelectPendingEvent* pendingEvent = new EventSelectPendingEvent(this, event);
- if (DataControlAsyncCallbackManagerSingleton::Instance().checkDoSQLOperation())
+ EventSelectPendingEvent* pendingEvent = new EventSelectPendingEvent(this, m_dataId,
+ m_appId, m_providerId, m_currentAppId, event);
+
+ if (DataControlAsyncCallbackManagerSingleton::Instance().checkRequestIpcOperation())
{
- SendAppControlLaunchToProvider(pendingEvent);
+ SendAppControlLaunchToProvider(pendingEvent, currentJob);
}
event->switchToManualAnswer();
{
unsigned int reqId = event->getReqId();
RowData* rowData = event->getRowData();
- std::string ipcFilename = generateFileName(reqId);
+ std::string ipcFilename = generateFileName(reqId, m_currentAppId);
std::stringstream ssReqId;
+ unsigned short currentJob = 0;
ssReqId << reqId;
if (checkReqIdUniqueness(reqId) == false)
saveArrayToFile(ipcFilename, rowData);
delete rowData;
- EventUpdatePendingEvent* pendingEvent = new EventUpdatePendingEvent(this, event);
+ EventUpdatePendingEvent* pendingEvent = new EventUpdatePendingEvent(this, m_dataId,
+ m_appId, m_providerId, m_currentAppId, event);
- if (DataControlAsyncCallbackManagerSingleton::Instance().checkDoSQLOperation())
+ if (DataControlAsyncCallbackManagerSingleton::Instance().checkRequestIpcOperation())
{
- SendAppControlLaunchToProvider(pendingEvent);
+ SendAppControlLaunchToProvider(pendingEvent, currentJob);
}
event->switchToManualAnswer();
DataControlAsyncCallbackManagerSingleton::Instance().addSQLUserData(ssReqId.str(), (void*)pendingEvent);