public:\r
static PrivacyManagerClient* getInstance(void);\r
\r
- int addAppPackagePrivacyInfo(const std::string pkgId, const std::list < std::string >& list);\r
+ int addAppPackagePrivacyInfo(const std::string pkgId, const std::list < std::string >& list, bool isServerOperation = true);\r
\r
- int removeAppPackagePrivacyInfo(const std::string pkgId);\r
+ int removeAppPackagePrivacyInfo(const std::string pkgId, bool isServerOperation = true);\r
\r
int setPrivacySetting(const std::string pkgId, const std::string privacyId, bool isEnabled);\r
\r
int connect();\r
int disconnect();\r
\r
- void call(std::string methodName){\r
- make_call(m_interfaceName);\r
- make_call(methodName);\r
+ int call(std::string methodName)\r
+ {\r
+ int res = make_call(m_interfaceName);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "make_call : %d", res);\r
+\r
+ res = make_call(methodName);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "make_call : %d", res);\r
+\r
+ return PRIV_MGR_ERROR_SUCCESS;\r
}\r
\r
template<typename ...Args>\r
- void call(std::string methodName, const Args&... args){\r
- make_call(m_interfaceName);\r
- make_call(methodName);\r
- make_call(args...);\r
+ int call(std::string methodName, const Args&... args)\r
+ {\r
+ int res = make_call(m_interfaceName);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "make_call : %d", res);\r
+ res = make_call(methodName);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "make_call : %d", res);\r
+ res = make_call(args...);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "make_call : %d", res);\r
+\r
+ return PRIV_MGR_ERROR_SUCCESS;\r
}\r
\r
template<typename T>\r
- void read(T* outvalue)\r
+ int read(T* outvalue)\r
{\r
- m_socketConnector->read(outvalue);\r
+ return m_socketConnector->read(outvalue);\r
}\r
private:\r
template<typename T, typename ...Args>\r
- void make_call(const T& invalue, const Args&... args)\r
+ int make_call(const T& invalue, const Args&... args)\r
{\r
- make_call(invalue);\r
- make_call(args...);\r
+ int res = make_call(invalue);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "make_call : %d", res);\r
+ res = make_call(args...);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "make_call : %d", res);\r
+\r
+ return PRIV_MGR_ERROR_SUCCESS;\r
}\r
\r
template<typename T>\r
- void make_call(const T& invalue)\r
+ int make_call(const T& invalue)\r
{\r
-// Try {\r
- m_socketConnector->write(invalue);\r
- // }\r
- // Catch (SocketConnection::Exception::SocketConnectionException){\r
- // LogError("Socket connection write error");\r
- // ReThrowMsg(Exception::SocketClientException,"Socket connection write error");\r
- // }\r
+ return m_socketConnector->write(invalue);\r
}\r
\r
template<typename T, typename ...Args>\r
- void make_call(const T* invalue, const Args&... args)\r
+ int make_call(const T* invalue, const Args&... args)\r
{\r
- make_call(invalue);\r
- make_call(args...);\r
+ int res = make_call(invalue);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "make_call : %d", res);\r
+ res = make_call(args...);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "make_call : %d", res);\r
+\r
+ return PRIV_MGR_ERROR_SUCCESS;\r
}\r
\r
template<typename T>\r
- void make_call(const T* invalue)\r
+ int make_call(const T* invalue)\r
{\r
-// Try {\r
- m_socketConnector->write(invalue);\r
-// }\r
-// Catch (SocketConnection::Exception::SocketConnectionException){\r
-// LogError("Socket connection write error");\r
-// ReThrowMsg(Exception::SocketClientException,"Socket connection write error");\r
-// }\r
+ return m_socketConnector->write(invalue);\r
}\r
\r
template<typename T, typename ...Args>\r
- void make_call(T * outvalue, const Args&... args)\r
+ int make_call(T * outvalue, const Args&... args)\r
{\r
- make_call(outvalue);\r
- make_call(args...);\r
+ int res = make_call(outvalue);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "make_call : %d", res);\r
+ res = make_call(args...);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "make_call : %d", res);\r
+\r
+ return PRIV_MGR_ERROR_SUCCESS;\r
}\r
\r
template<typename T>\r
- void make_call(T* outvalue)\r
+ int make_call(T* outvalue)\r
{\r
-// Try {\r
- m_socketConnector->read(outvalue);\r
-// }\r
-// Catch (SocketConnection::Exception::SocketConnectionException){\r
-// LogError("Socket connection read error");\r
-// ReThrowMsg(Exception::SocketClientException,"Socket connection read error");\r
-// }\r
- }\r
+ return m_socketConnector->read(outvalue);\r
+ }\r
\r
\r
private:\r
- //int throwWithErrnoMessage(const std::string& specificInfo);\r
std::string m_serverAddress;\r
std::string m_interfaceName;\r
std::unique_ptr<SocketConnection> m_socketConnector;\r
\r
EXTERN_API int privacy_manager_client_install_privacy(const char *package_id, const char** privacy_list);\r
EXTERN_API int privacy_manager_client_uninstall_privacy(const char *package_id);\r
+EXTERN_API int privacy_manager_client_uninstall_privacy_by_server(const char *package_id);\r
EXTERN_API int privacy_manager_client_foreach_privacy_packages(privacy_manager_client_privacy_packages_cb callback, void *user_data);\r
EXTERN_API int privacy_manager_client_foreach_get_privacy_info(const char *package_id, privacy_manager_client_privacy_info_cb callback, void* user_data);\r
EXTERN_API int privacy_manager_client_set_package_privacy(const char *package_id, const char *privacy_id, bool enable);\r
\r
LOGI("enter");\r
\r
- if (dbus_message_is_signal(message, DBUS_SIGNAL_INTERFACE.c_str(), DBUS_SIGNAL_NAME.c_str()))\r
+ if (dbus_message_is_signal(message, DBUS_SIGNAL_INTERFACE.c_str(), DBUS_SIGNAL_SETTING_CHANGED.c_str()))\r
{\r
r = dbus_message_get_args(message, &error,\r
DBUS_TYPE_STRING, &pPkgId,\r
}\r
\r
}\r
- else\r
+ else if (dbus_message_is_signal(message, DBUS_SIGNAL_INTERFACE.c_str(), DBUS_SIGNAL_PKG_REMOVED.c_str()))\r
{\r
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;\r
+ r = dbus_message_get_args(message, &error,\r
+ DBUS_TYPE_STRING, &pPkgId,\r
+ DBUS_TYPE_INVALID);\r
+ TryReturn(r, DBUS_HANDLER_RESULT_NOT_YET_HANDLED, , "Fail to get data : %s", error.message);\r
+\r
+ std::lock_guard < std::mutex > guard(m_cacheMutex);\r
+\r
+ std::map < std::string, std::map < std::string, bool > > :: iterator iter = m_privacyInfoCache.find(std::string(pPkgId));\r
+ if (iter != m_privacyInfoCache.end())\r
+ {\r
+ LOGI("cache for pkg : %d is in cache", pPkgId);\r
+ m_privacyInfoCache.erase(iter);\r
+ }\r
}\r
+// else\r
+// {\r
+// return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;\r
+// }\r
\r
- return DBUS_HANDLER_RESULT_HANDLED;\r
+\r
+ // This event is not only for specific handler. All handlers of daemons should be check it and handle it.\r
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;\r
}\r
\r
int\r
}\r
\r
int\r
-PrivacyManagerClient::addAppPackagePrivacyInfo(const std::string pkgId, const std::list < std::string >& list)\r
+PrivacyManagerClient::addAppPackagePrivacyInfo(const std::string pkgId, const std::list < std::string >& list, bool isServerOperation)\r
{\r
\r
std::list < std::string > privacyList;\r
if (privacyList.size() == 0)\r
return PRIV_MGR_ERROR_SUCCESS;\r
\r
-#ifdef __READ_DB_IPC__\r
- m_pSocketClient->connect();\r
- m_pSocketClient->call("addPrivacyInfo", pkgId, privacyList, &result);\r
- m_pSocketClient->disconnect();\r
-\r
- return result;\r
-#else\r
- return PrivacyDb::getInstance()->addAppPackagePrivacyInfo(pkgId, privacyList);\r
-#endif\r
+ if (isServerOperation == true)\r
+ {\r
+ int result = PRIV_MGR_ERROR_SUCCESS;\r
+ res = m_pSocketClient->connect();\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "connect : %d", res);\r
+ res = m_pSocketClient->call("addPrivacyInfo", pkgId, privacyList, &result);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, m_pSocketClient->disconnect(), "call : %d", res);\r
+ res = m_pSocketClient->disconnect();\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "disconnect : %d", res);\r
+\r
+ return result;\r
+ }\r
+ else\r
+ {\r
+ return PrivacyDb::getInstance()->addAppPackagePrivacyInfo(pkgId, privacyList);\r
+ }\r
}\r
\r
int\r
-PrivacyManagerClient::removeAppPackagePrivacyInfo(const std::string pkgId)\r
+PrivacyManagerClient::removeAppPackagePrivacyInfo(const std::string pkgId, bool isServerOperation)\r
{\r
-#ifdef __READ_DB_IPC__\r
- int result;\r
- m_pSocketClient->connect();\r
- m_pSocketClient->call("removePrivacyInfo", pkgId, &result);\r
- m_pSocketClient->disconnect();\r
- return result;\r
-#else\r
- return PrivacyDb::getInstance()->removeAppPackagePrivacyInfo(pkgId);\r
-#endif\r
+ if (isServerOperation == true)\r
+ {\r
+ int result = PRIV_MGR_ERROR_SUCCESS;\r
+ int res = m_pSocketClient->connect();\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "connect : %d", res);\r
+ result = m_pSocketClient->call("removePrivacyInfo", pkgId, &result);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, m_pSocketClient->disconnect(), "call : %d", res);\r
+ result = m_pSocketClient->disconnect();\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "disconnect : %d", res);\r
+\r
+ return result;\r
+ }\r
+ else\r
+ return PrivacyDb::getInstance()->removeAppPackagePrivacyInfo(pkgId);\r
}\r
\r
int\r
PrivacyManagerClient::setPrivacySetting(const std::string pkgId, const std::string privacyId, bool isEnabled)\r
{\r
- int result;\r
- m_pSocketClient->connect();\r
- m_pSocketClient->call("setPrivacySetting", pkgId, privacyId, isEnabled, &result);\r
- m_pSocketClient->disconnect();\r
+ int result = PRIV_MGR_ERROR_SUCCESS;\r
+ int res = m_pSocketClient->connect();\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "connect : %d", res);\r
+ res = m_pSocketClient->call("setPrivacySetting", pkgId, privacyId, isEnabled, &result);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, m_pSocketClient->disconnect(), "call : %d", res);\r
+ res = m_pSocketClient->disconnect();\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "connect : %d", res);\r
\r
return result;\r
}\r
PrivacyManagerClient::getPrivacyAppPackages(std::list < std::string >& list)\r
{\r
#ifdef __READ_DB_IPC__\r
- int result, size;\r
- std::string temp1;\r
- SocketClient* p = new SocketClient(INTERFACE_NAME);\r
- p->connect();\r
- p->call("getPrivacyAppPackages", &result, &size, &list);\r
- p->disconnect();\r
+\r
+ std::unique_ptr <SocketClient> pSocketClient (new SocketClient(INTERFACE_NAME));\r
+\r
+ int result = PRIV_MGR_ERROR_SUCCESS\r
+ int size = 0;\r
+\r
+ int res = pSocketClient->connect();\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "connect : %d", res);\r
+ res = pSocketClient->call("getPrivacyAppPackages", &result, &size, &list);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, m_pSocketClient->disconnect(), "call : %d", res);\r
+ res = pSocketClient->disconnect();\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "connect : %d", res);\r
\r
return result;\r
#endif\r
#ifdef __READ_DB_IPC__\r
std::unique_ptr <SocketClient> pSocketClient (new SocketClient(INTERFACE_NAME));\r
\r
- int result;\r
- pSocketClient->connect();\r
+ int result = PRIV_MGR_ERROR_SUCCESS;\r
+ int res = pSocketClient->connect();\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "connect : %d", res);\r
pSocketClient->call("getAppPackagePrivacyInfo", pkgId, &result, &list);\r
-\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, m_pSocketClient->disconnect(), "call : %d", res);\r
pSocketClient->disconnect();\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "disconnect : %d", res);\r
\r
for (std::list < std::pair <std::string, bool > >::const_iterator iter = list.begin(); iter != list.end(); ++iter){\r
LOGD(" %s : %d", iter->first.c_str(), iter->second);\r
\r
std::unique_ptr <SocketClient> pSocketClient (new SocketClient(INTERFACE_NAME));\r
\r
- int result;\r
- pSocketClient->connect();\r
- pSocketClient->call("isUserPrompted", pkgId, &result, &isPrompted);\r
- pSocketClient->disconnect();\r
+ int result = PRIV_MGR_ERROR_SUCCESS;\r
+ int res = pSocketClient->connect();\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "connect : %d", res);\r
+ res = pSocketClient->call("isUserPrompted", pkgId, &result, &isPrompted);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, m_pSocketClient->disconnect(), "call : %d", res);\r
+ res = pSocketClient->disconnect();\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "disconnect : %d", res);\r
\r
LOGI("leave");\r
\r
\r
std::unique_ptr <SocketClient> pSocketClient (new SocketClient(INTERFACE_NAME));\r
\r
- int result;\r
- pSocketClient->connect();\r
- pSocketClient->call("setUserPrompted", pkgId, prompted, &result);\r
- pSocketClient->disconnect();\r
+ int result = PRIV_MGR_ERROR_SUCCESS;\r
+ int res = pSocketClient->connect();\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "connect : %d", res);\r
+ res = pSocketClient->call("setUserPrompted", pkgId, prompted, &result);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, m_pSocketClient->disconnect(), "call : %d", res);\r
+ res = pSocketClient->disconnect();\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "disconnect : %d", res);\r
+\r
LOGI("leave");\r
\r
return result;\r
{\r
struct sockaddr_un remote;\r
m_socketFd = socket(AF_UNIX, SOCK_STREAM,0);\r
- TryReturn( m_socketFd != -1, -1, , "socket : %s", strerror(errno));\r
+ TryReturn( m_socketFd != -1, PRIV_MGR_ERROR_IPC_ERROR, , "socket : %s", strerror(errno));\r
\r
int res;\r
//socket needs to be nonblocking, because read can block after select\r
if ( (flags = fcntl(m_socketFd, F_GETFL, 0)) == -1 )\r
flags = 0;\r
res = fcntl(m_socketFd, F_SETFL, flags | O_NONBLOCK);\r
- TryReturn( m_socketFd != -1, -1, , "fcntl : %s", strerror(errno));\r
+ TryReturn( m_socketFd != -1, PRIV_MGR_ERROR_IPC_ERROR, , "fcntl : %s", strerror(errno));\r
\r
bzero(&remote, sizeof(remote));\r
remote.sun_family = AF_UNIX;\r
strcpy(remote.sun_path, m_serverAddress.c_str());\r
res = ::connect(m_socketFd, (struct sockaddr *)&remote, SUN_LEN(&remote));\r
- TryReturn( res != -1, -1, , "connect : %s", strerror(errno));\r
+ TryReturn( res != -1, PRIV_MGR_ERROR_IPC_ERROR, , "connect : %s", strerror(errno));\r
\r
m_socketConnector.reset(new SocketConnection(m_socketFd));\r
\r
LOGI("Client connected");\r
\r
- return 0;\r
+ return PRIV_MGR_ERROR_SUCCESS;\r
}\r
\r
int SocketClient::disconnect()\r
close(m_socketFd);\r
LOGI("Client disconnected");\r
\r
- return 0;\r
+ return PRIV_MGR_ERROR_SUCCESS;\r
}\r
while (*privacy_list[0] != '\0')\r
privacyList.push_back(std::string(*privacy_list++));\r
\r
- int retval = pInst->addAppPackagePrivacyInfo(std::string(package_id), privacyList);\r
+ int retval = pInst->addAppPackagePrivacyInfo(std::string(package_id), privacyList, false);\r
\r
LOGI("leave");\r
\r
{\r
if (package_id == NULL)\r
return PRIV_MGR_ERROR_INVALID_PARAMETER;\r
- return PrivacyManagerClient::getInstance()->removeAppPackagePrivacyInfo(std::string(package_id));\r
+ return PrivacyManagerClient::getInstance()->removeAppPackagePrivacyInfo(std::string(package_id), false);\r
+}\r
+\r
+int privacy_manager_client_uninstall_privacy_by_server(const char *package_id)\r
+{\r
+ if (package_id == NULL)\r
+ return PRIV_MGR_ERROR_INVALID_PARAMETER;\r
+ return PrivacyManagerClient::getInstance()->removeAppPackagePrivacyInfo(std::string(package_id), true);\r
}\r
\r
int privacy_manager_client_foreach_privacy_packages(privacy_manager_client_privacy_packages_cb callback, void *user_data)\r
static const std::string SERVER_ADDRESS ("/tmp/privacy_manager_server");\r
static const std::string DBUS_PATH("/privacy_manager/dbus_notification");\r
static const std::string DBUS_SIGNAL_INTERFACE("org.tizen.privacy_manager.signal");\r
-static const std::string DBUS_SIGNAL_NAME("privacy_setting_updated");\r
+static const std::string DBUS_SIGNAL_SETTING_CHANGED("privacy_setting_changed");\r
+static const std::string DBUS_SIGNAL_PKG_REMOVED("privacy_pkg_removed");\r
\r
#endif\r
#include <SocketStream.h>\r
#include <PrivacyManagerTypes.h>\r
#include <iostream>\r
+#include <Utils.h>\r
/*\r
* This class implements interface for generic read and write from given socket.\r
* It does not maintain socket descriptor, so any connecting and disconnecting should be\r
}\r
\r
template<typename T, typename ...Args>\r
- void read(T* out, const Args&... args )\r
+ int read(T* out, const Args&... args )\r
{\r
- read(out);\r
- read(args...);\r
+ int res = read(out);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "read : %d", res);\r
+ res = read(args...);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "read : %d", res);\r
+\r
+ return PRIV_MGR_ERROR_SUCCESS;\r
}\r
\r
template<typename T>\r
- void read(T* out)\r
+ int read(T* out)\r
{\r
int length = 0;\r
- int ret = m_socketStream.readStream(sizeof(length), &length);\r
- char* pBuf = new char[length + 1];\r
- m_socketStream.readStream(length, pBuf);\r
+ int res = m_socketStream.readStream(sizeof(length), &length);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "readStream : %d", res);\r
+ char* pBuf = new (std::nothrow) char[length + 1];\r
+ TryReturn(pBuf != NULL, PRIV_MGR_ERROR_OUT_OF_MEMORY, , "new : %d", PRIV_MGR_ERROR_OUT_OF_MEMORY);\r
+\r
+ res = m_socketStream.readStream(length, pBuf);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, delete[] pBuf, "readStream : %d", res);\r
+\r
pBuf[length] = 0;\r
\r
out = T(pBuf);\r
\r
delete[] pBuf;\r
+\r
+ return PRIV_MGR_ERROR_SUCCESS;\r
}\r
\r
- void read(bool* pB)\r
- {\r
- \r
+ int read(bool* pB)\r
+ { \r
int length = 0;\r
- int ret = m_socketStream.readStream(sizeof(length), &length);\r
- if (ret < 0)\r
- {}\r
- char* pBuf = new char[length + 1];\r
- m_socketStream.readStream(length, pBuf);\r
+ int res = m_socketStream.readStream(sizeof(length), &length);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "readStream : %d", res);\r
+\r
+ char* pBuf = new (std::nothrow) char[length + 1];\r
+ TryReturn(pBuf != NULL, PRIV_MGR_ERROR_OUT_OF_MEMORY, , "new : %d", PRIV_MGR_ERROR_OUT_OF_MEMORY);\r
+\r
+ res = m_socketStream.readStream(length, pBuf);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, delete[] pBuf, "readStream : %d", res);\r
+\r
pBuf[length] = 0;\r
\r
*pB = * reinterpret_cast <bool* > (pBuf);\r
\r
delete[] pBuf;\r
+\r
+ return PRIV_MGR_ERROR_SUCCESS;\r
}\r
\r
- void read(bool& b)\r
+ int read(bool& b)\r
{\r
- read(&b);\r
+ return read(&b);\r
}\r
\r
- void read(int& i)\r
+ int read(int& i)\r
{\r
- read(&i);\r
+ return read(&i);\r
}\r
- void read(int* pI)\r
+\r
+ int read(int* pI)\r
{\r
int length = 0;\r
- int ret = m_socketStream.readStream(sizeof(length), &length);\r
- if (ret < 0)\r
- {}\r
- char* pBuf = new char[length + 1];\r
- m_socketStream.readStream(length, pBuf);\r
+ int res = m_socketStream.readStream(sizeof(length), &length);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "readStream : %d", res);\r
+\r
+ char* pBuf = new (std::nothrow) char[length + 1];\r
+ TryReturn(pBuf != NULL, PRIV_MGR_ERROR_OUT_OF_MEMORY, , "new : %d", PRIV_MGR_ERROR_OUT_OF_MEMORY);\r
+\r
+ res = m_socketStream.readStream(length, pBuf);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, delete[] pBuf, "readStream : %d", res);\r
+\r
pBuf[length] = 0;\r
\r
*pI = * reinterpret_cast <int* > (pBuf);\r
\r
delete[] pBuf;\r
+\r
+ return PRIV_MGR_ERROR_SUCCESS;\r
}\r
\r
- void read(std::string* pStr)\r
+ int read(std::string* pStr)\r
{\r
int length = 0;\r
- int ret = m_socketStream.readStream(sizeof(length), &length);\r
- if (ret < 0)\r
- {}\r
- char* pBuf = new char[length + 1];\r
+ int res = m_socketStream.readStream(sizeof(length), &length);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "readStream : %d", res);\r
+\r
+ char* pBuf = new (std::nothrow) char[length + 1];\r
+ TryReturn(pBuf != NULL, PRIV_MGR_ERROR_OUT_OF_MEMORY, , "new : %d", PRIV_MGR_ERROR_OUT_OF_MEMORY);\r
+\r
m_socketStream.readStream(length, pBuf);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, delete[] pBuf, "readStream : %d", res);\r
+\r
pBuf[length] = 0;\r
\r
*pStr = std::string(pBuf);\r
delete[] pBuf;\r
+\r
+ return PRIV_MGR_ERROR_SUCCESS;\r
}\r
\r
- void read(std::string& str)\r
+ int read(std::string& str)\r
{\r
- read(&str);\r
+ return read(&str);\r
}\r
\r
template < typename T >\r
- void read (std::list<T>& list) \r
+ int read (std::list<T>& list) \r
{\r
int length;\r
- read(length);\r
- for (int i =0; i < length; ++i) \r
+ int res = read(length);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "read : %d", res);\r
+\r
+ for (int i = 0; i < length; ++i) \r
{\r
T obj;\r
- read (obj);\r
+ res = read (obj);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "read : %d", res);\r
list.push_back(obj);\r
}\r
+\r
+ return PRIV_MGR_ERROR_SUCCESS;\r
}\r
\r
template < typename T >\r
- void read (std::list<T>* pList) \r
+ int read (std::list<T>* pList) \r
{\r
- read(*pList);\r
+ return read(*pList);\r
}\r
\r
template < typename K, typename P >\r
void read (std::pair<K, P>& pair) \r
{\r
- read( pair.first);\r
- read( pair.second);\r
+ int res = read( pair.first);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "read : %d", res);\r
+ res = read( pair.second);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "read : %d", res);\r
+\r
+ return PRIV_MGR_ERROR_SUCCESS;\r
}\r
\r
template < typename K, typename P >\r
- void read (std::pair<K, P>* pPair) \r
+ int read (std::pair<K, P>* pPair) \r
{\r
- read( *pPair);\r
+ return read( *pPair);\r
}\r
\r
template<typename T, typename ...Args>\r
- void write(const T& in, const Args&... args)\r
+ int write(const T& in, const Args&... args)\r
{\r
- write(in);\r
- write(args...);\r
+ int res = write(in);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "write : %d", res);\r
+ res = write(args...);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "write : %d", res);\r
+\r
+ return PRIV_MGR_ERROR_SUCCESS;\r
}\r
\r
- void write(const std::string& in)\r
+ int write(const std::string& in)\r
{\r
int length = in.size();\r
- m_socketStream.writeStream(sizeof(length), &length);\r
- m_socketStream.writeStream(length, in.c_str());\r
+ int res = m_socketStream.writeStream(sizeof(length), &length);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "writeStream : %d", res);\r
+ res = m_socketStream.writeStream(length, in.c_str());\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "writeStream : %d", res);\r
+\r
+ return PRIV_MGR_ERROR_SUCCESS;\r
}\r
\r
- void write(const unsigned int& in)\r
+ int write(const unsigned int& in)\r
{\r
int length = sizeof(in);\r
- m_socketStream.writeStream(sizeof(length), &length);\r
- m_socketStream.writeStream(length, &in);\r
+ int res = m_socketStream.writeStream(sizeof(length), &length);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "writeStream : %d", res);\r
+ res = m_socketStream.writeStream(length, &in);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "writeStream : %d", res);\r
+\r
+ return PRIV_MGR_ERROR_SUCCESS;\r
}\r
\r
- void write(const int& in)\r
+ int write(const int& in)\r
{\r
int length = sizeof(in);\r
- m_socketStream.writeStream(sizeof(length), &length);\r
- m_socketStream.writeStream(length, &in);\r
+ int res = m_socketStream.writeStream(sizeof(length), &length);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "writeStream : %d", res);\r
+ res = m_socketStream.writeStream(length, &in);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "writeStream : %d", res);\r
+\r
+ return PRIV_MGR_ERROR_SUCCESS;\r
}\r
\r
- void write(const bool& in)\r
+ int write(const bool& in)\r
{\r
int length = sizeof(in);\r
- m_socketStream.writeStream(sizeof(length), &length);\r
- m_socketStream.writeStream(length, &in);\r
+ int res = m_socketStream.writeStream(sizeof(length), &length);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "writeStream : %d", res);\r
+ res = m_socketStream.writeStream(length, &in);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "writeStream : %d", res);\r
+\r
+ return PRIV_MGR_ERROR_SUCCESS;\r
}\r
\r
- void write(const char*& in)\r
+ int write(const char*& in)\r
{\r
int length = strlen(in);\r
- m_socketStream.writeStream(sizeof(length), &length);\r
- m_socketStream.writeStream(length, in);\r
+ int res = m_socketStream.writeStream(sizeof(length), &length);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "writeStream : %d", res);\r
+ LOGD(" write char : %s %d", in, length);\r
+ res = m_socketStream.writeStream(length, in);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "writeStream : %d", res);\r
+\r
+ return PRIV_MGR_ERROR_SUCCESS;\r
}\r
\r
template<typename T, typename ...Args>\r
- void write(const T* in, const Args&... args)\r
+ int write(const T* in, const Args&... args)\r
{\r
- write(in);\r
- write(args...);\r
+ int res = write(in);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "write : %d", res);\r
+ res = write(args...);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "write : %d", res);\r
+\r
+ return PRIV_MGR_ERROR_SUCCESS;\r
}\r
\r
template<typename K, typename T>\r
- void write(const std::pair<K, T> p)\r
+ int write(const std::pair<K, T> p)\r
{\r
- write(p.first);\r
- write(p.second);\r
+ int res = write(p.first);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "write : %d", res);\r
+ res = write(p.second);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "write : %d", res);\r
+\r
+ return PRIV_MGR_ERROR_SUCCESS;\r
}\r
\r
template<typename K, typename T>\r
- void write(const std::pair<K, T&> p) \r
+ int write(const std::pair<K, T&> p)\r
{\r
- write(p.first);\r
- write(p.second);\r
+ int res = write(p.first);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "write : %d", res);\r
+ res = write(p.second);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "write : %d", res);\r
+\r
+ return PRIV_MGR_ERROR_SUCCESS;\r
}\r
\r
template<typename K, typename T>\r
- void write(const std::pair<K, T&>* pPair) \r
+ int write(const std::pair<K, T&>* pPair) \r
{\r
- write(*pPair);\r
+ return write(*pPair);\r
}\r
\r
template<typename T>\r
- void write(const std::list <T> list) \r
+ int write(const std::list <T> list) \r
{\r
int length = list.size();\r
- write(length);\r
- for (typename std::list <T>::const_iterator iter = list.begin(); iter != list.end(); iter++)\r
- write(*iter);\r
+ int res = write(length);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "write : %d", res);\r
+ for (typename std::list <T>::const_iterator iter = list.begin(); iter != list.end(); iter++) {\r
+ res = write(*iter);\r
+ TryReturn(res == PRIV_MGR_ERROR_SUCCESS, res, , "write : %d", res);\r
+ }\r
+\r
+ return PRIV_MGR_ERROR_SUCCESS;\r
}\r
\r
template<typename T>\r
- void write(const std::list <T>* pList) \r
+ int write(const std::list <T>* pList) \r
{\r
- write(*pList);\r
+ return write(*pList);\r
}\r
\r
\r
return r; \\r
} else {;}\r
\r
-auto StmtDeleter = [&](sqlite3_stmt* pPtr) { LOGI("sqlite3_finalize"); sqlite3_reset (pPtr); sqlite3_finalize(pPtr); };\r
-auto DbDeleter = [&](sqlite3* pPtr) { LOGI("sqlite3_close"); sqlite3_close(pPtr); };\r
+auto StmtDeleter = [&](sqlite3_stmt* pPtr) { /*LOGI("sqlite3_finalize");*/ sqlite3_reset (pPtr); sqlite3_finalize(pPtr); };\r
+auto DbDeleter = [&](sqlite3* pPtr) { /*LOGI("sqlite3_close");*/ sqlite3_close(pPtr); };\r
\r
#define setStmtToUniquePtr(x, y) std::unique_ptr < sqlite3_stmt, decltype(StmtDeleter) > x (y, StmtDeleter);\r
#define setDbToUniquePtr(x, y) std::unique_ptr < sqlite3, decltype(DbDeleter) > x (y, DbDeleter);\r
\r
#define openDb(dbpath, pHandler, mode) sqlite3* pHandler##Temp = NULL;\\r
{\\r
- LOGI("sqlite3_open_v2");\\r
+ /*LOGI("sqlite3_open_v2");*/\\r
int res = sqlite3_open_v2(dbpath, &pHandler##Temp, mode , NULL);\\r
TryCatchResLogReturn( res == SQLITE_OK, , PRIV_MGR_ERROR_DB_ERROR, "sqlite3_open : %d", res);\\r
}\\r
\r
#define prepareDb(pHandler, sql, pStmt) sqlite3_stmt* pStmt##Temp;\\r
{\\r
- LOGI("sqlite3_prepare_v2");\\r
+ /*LOGI("sqlite3_prepare_v2");*/\\r
int res = sqlite3_prepare_v2(pHandler.get(), sql, -1, & pStmt##Temp, NULL);\\r
TryCatchResLogReturn( res == SQLITE_OK, , PRIV_MGR_ERROR_DB_ERROR, "sqlite3_prepare_v2 : %d", res);\\r
}\\r
{\r
LOGI("enter");\r
\r
- privacy_manager_client_uninstall_privacy(packageId);\r
+ int res = privacy_manager_client_uninstall_privacy_by_server(packageId);\r
+ if (res != PRIV_MGR_ERROR_SUCCESS)\r
+ {\r
+ LOGD("Failed to uninstall privacy in server: %d", res);\r
+ \r
+ res = privacy_manager_client_uninstall_privacy(packageId);\r
+ if (res != PRIV_MGR_ERROR_SUCCESS)\r
+ {\r
+ LOGD("Failed to uninstall privacy: %d", res);\r
+ return -EINVAL;\r
+ }\r
+ }\r
\r
+ LOGI("leave");\r
return 0;\r
- LOGI("leave"); \r
}\r
NotificationServer(void);\r
~NotificationServer(void);\r
int initialize(void);\r
- int notify(const std::string pkgId, const std::string privacyId);\r
+ int notifySettingChanged(const std::string pkgId, const std::string privacyId);\r
+ int notifyPkgRemoved(const std::string pkgId);\r
};\r
\r
\r
}\r
\r
int\r
-NotificationServer::notify(const std::string pkgId, const std::string privacyId)\r
+NotificationServer::notifySettingChanged(const std::string pkgId, const std::string privacyId)\r
{\r
LOGI("enter");\r
\r
\r
char* pPkgId = const_cast <char*> (pkgId.c_str());\r
char* pPrivacyId = const_cast <char*> (privacyId.c_str());\r
- LOGD("path: %s, inter: %s, name: %s", DBUS_PATH.c_str(), DBUS_SIGNAL_INTERFACE.c_str(), DBUS_SIGNAL_NAME.c_str());\r
- DBusMessage* pMessage = dbus_message_new_signal(DBUS_PATH.c_str(), DBUS_SIGNAL_INTERFACE.c_str(), DBUS_SIGNAL_NAME.c_str());\r
+ LOGD("path: %s, inter: %s, name: %s", DBUS_PATH.c_str(), DBUS_SIGNAL_INTERFACE.c_str(), DBUS_SIGNAL_SETTING_CHANGED.c_str());\r
+ DBusMessage* pMessage = dbus_message_new_signal(DBUS_PATH.c_str(), DBUS_SIGNAL_INTERFACE.c_str(), DBUS_SIGNAL_SETTING_CHANGED.c_str());\r
TryReturn(pMessage != NULL, PRIV_MGR_ERROR_IPC_ERROR, , "dbus_message_new_signal");\r
\r
dbus_bool_t r;\r
LOGI("leave");\r
\r
return PRIV_MGR_ERROR_SUCCESS;\r
+}\r
+\r
+int\r
+NotificationServer::notifyPkgRemoved(const std::string pkgId)\r
+{\r
+ LOGI("enter");\r
+\r
+ if (!m_initialized)\r
+ return PRIV_MGR_ERROR_INVALID_STATE;\r
+\r
+ char* pPkgId = const_cast <char*> (pkgId.c_str());\r
+ LOGD("path: %s, inter: %s, name: %s", DBUS_PATH.c_str(), DBUS_SIGNAL_INTERFACE.c_str(), DBUS_SIGNAL_PKG_REMOVED.c_str());\r
+ DBusMessage* pMessage = dbus_message_new_signal(DBUS_PATH.c_str(), DBUS_SIGNAL_INTERFACE.c_str(), DBUS_SIGNAL_PKG_REMOVED.c_str());\r
+ TryReturn(pMessage != NULL, PRIV_MGR_ERROR_IPC_ERROR, , "dbus_message_new_signal");\r
+\r
+ dbus_bool_t r;\r
+ r = dbus_message_append_args(pMessage,\r
+ DBUS_TYPE_STRING, &pPkgId,\r
+ DBUS_TYPE_INVALID);\r
+ TryReturn(r, PRIV_MGR_ERROR_IPC_ERROR, , "dbus_message_append_args");\r
+\r
+ r = dbus_connection_send(m_pDBusConnection, pMessage, NULL);\r
+ TryReturn(r, PRIV_MGR_ERROR_IPC_ERROR, dbus_message_unref(pMessage);, "dbus_connection_send");\r
+\r
+ dbus_connection_flush(m_pDBusConnection);\r
+ dbus_message_unref(pMessage);\r
+\r
+ LOGI("leave");\r
+\r
+ return PRIV_MGR_ERROR_SUCCESS;\r
}
\ No newline at end of file
int\r
PrivacyManagerServer::setPrivacySetting(const std::string pkgId, const std::string privacyId, bool enabled)\r
{\r
+ LOGD("Set Privacy: %s, %s, %d", pkgId.c_str(), privacyId.c_str(), enabled);\r
+\r
int res = PrivacyDb::getInstance()->setPrivacySetting(pkgId, privacyId, enabled);\r
TryReturn( res == PRIV_MGR_ERROR_SUCCESS, res, , "privacyDb::setPrivacySetting : %d", res);\r
\r
- res = m_notificationServer.notify(pkgId, privacyId);\r
- TryReturn( res == PRIV_MGR_ERROR_SUCCESS, res, , "NotificationServer::notify : %d", res);\r
+ res = m_notificationServer.notifySettingChanged(pkgId, privacyId);\r
+ TryReturn( res == PRIV_MGR_ERROR_SUCCESS, res, , "NotificationServer::notifySettingChanged : %d", res);\r
\r
return res;\r
}\r
int\r
PrivacyManagerServer::removeAppPackagePrivacyInfo(const std::string pkgId)\r
{\r
- return PrivacyDb::getInstance()->removeAppPackagePrivacyInfo(pkgId);\r
+ int res = PrivacyDb::getInstance()->removeAppPackagePrivacyInfo(pkgId);\r
+ TryReturn( res == PRIV_MGR_ERROR_SUCCESS, res, , "privacyDb::removeAppPackagePrivacyInfo : %d", res);\r
+\r
+ res = m_notificationServer.notifyPkgRemoved(pkgId);\r
+ TryReturn( res == PRIV_MGR_ERROR_SUCCESS, res, , "NotificationServer::notifyPkgRemoved : %d", res);\r
+\r
+ return res;\r
}\r
\r
int\r
SocketConnection connector = SocketConnection(fd);\r
std::string interfaceName, methodName;\r
\r
- connector.read(&interfaceName, &methodName);\r
+ int res = connector.read(&interfaceName, &methodName);\r
+ if (res != PRIV_MGR_ERROR_SUCCESS)\r
+ {\r
+ LOGE("read : %d", res);\r
+ return res;\r
+ }\r
\r
LOGD("Got interface : %s", interfaceName.c_str());\r
LOGD("Got method : %s", methodName.c_str());\r
\r
std::string pkgId;\r
std::string privacyId;\r
- bool enabled;\r
+ bool enabled = false;\r
pConnector->read(&pkgId, &privacyId, &enabled);\r
\r
PrivacyManagerServer* pPrivacyManagerServer = PrivacyManagerServer::getInstance();\r
LOGI("enter");\r
\r
std::string pkgId;\r
- bool prompted;\r
+ bool prompted = false;\r
\r
pConnector->read(&pkgId, &prompted);\r
PrivacyManagerServer* pPrivacyManagerServer = PrivacyManagerServer::getInstance();\r