From d699f75c470325b84329ab394428a15f278d90d4 Mon Sep 17 00:00:00 2001 From: Sunwook Bae Date: Mon, 19 Aug 2013 18:37:55 +0900 Subject: [PATCH] Remove to send the appid in IPC Change-Id: Iff66439965ea975ab4cb72c0dfbbc1920ca66318 Signed-off-by: Sunwook Bae --- src/io/FIo_IpcClient.cpp | 28 ++-------------------------- src/io/inc/FIo_IpcClient.h | 1 - src/server/io/FIo_IpcServer.cpp | 32 ++++++++++++++++++++++---------- 3 files changed, 24 insertions(+), 37 deletions(-) diff --git a/src/io/FIo_IpcClient.cpp b/src/io/FIo_IpcClient.cpp index d13f7ec..88c628c 100644 --- a/src/io/FIo_IpcClient.cpp +++ b/src/io/FIo_IpcClient.cpp @@ -37,8 +37,6 @@ #include #include -#include -#include #include #include #include "FIo_IpcClient.h" @@ -47,7 +45,6 @@ using namespace IPC; using namespace std; using namespace Tizen::App; -using namespace Tizen::App::Package; using namespace Tizen::Base; using namespace Tizen::Base::Runtime; @@ -56,7 +53,6 @@ namespace Tizen { namespace Io _IpcClient::_IpcClient(void) : __pReverseSource(null) - , __fdCount(0) , __pFdLock(null) , __pListener(null) { @@ -132,9 +128,7 @@ _IpcClient::GetName(void) const struct HelloMessage { - int pid; - bool reverse; - char appId[256]; + int reverse; }; result @@ -147,13 +141,12 @@ _IpcClient::MakeConnection(bool forReverse) int client = -1; int ret = 0; int retry = 0; - HelloMessage helloMessage = {0, 0}; + HelloMessage helloMessage = {0}; std::string socketName; char* pSocketName = null; size_t socketNameLength = 0; int flags = 0; - helloMessage.pid = getpid(); if (forReverse) { helloMessage.reverse = 1; @@ -174,21 +167,6 @@ _IpcClient::MakeConnection(bool forReverse) socketNameLength = socketName.size() + 1; SysTryReturnResult(NID_IO, socketNameLength < 108, E_INVALID_ARG, "Server name is too long."); - if (__fdCount == 0) - { - // Set an appId - String appId = _AppInfo::GetApplicationId(); - int length = (appId.GetLength() + 1) * sizeof(wchar_t); - if (length > 255) - { - length = 255; - } - - SysTryReturnResult(NID_IO, appId.GetLength() > 0, E_SYSTEM, "AppId dose not exist."); - - memcpy(helloMessage.appId, appId.GetPointer(), length); - } - client = socket(AF_UNIX, SOCK_STREAM, 0); SysTryCatch(NID_IO, client != -1, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] Failed to create a socket : %s.", strerror(errno)); @@ -304,8 +282,6 @@ _IpcClient::MakeConnection(bool forReverse) } else { - ++__fdCount; - ReleaseFd(client); } diff --git a/src/io/inc/FIo_IpcClient.h b/src/io/inc/FIo_IpcClient.h index 2a6a062..168848b 100644 --- a/src/io/inc/FIo_IpcClient.h +++ b/src/io/inc/FIo_IpcClient.h @@ -136,7 +136,6 @@ private: GSource* __pReverseSource; std::vector __fds; - int __fdCount; Tizen::Base::Runtime::Mutex* __pFdLock; Tizen::Base::String __name; _IIpcClientEventListener* __pListener; diff --git a/src/server/io/FIo_IpcServer.cpp b/src/server/io/FIo_IpcServer.cpp index 7c8c0c8..b775ec1 100644 --- a/src/server/io/FIo_IpcServer.cpp +++ b/src/server/io/FIo_IpcServer.cpp @@ -33,6 +33,8 @@ #include #include +#include + #include #include @@ -275,9 +277,7 @@ CATCH: struct HelloMessage { - int pid; - bool reverse; // true if the connection is for reverse message - char appId[256]; + int reverse; // if the connection is for reverse message }; gboolean @@ -291,12 +291,16 @@ _IpcServer::OnConnectionRequest(GIOChannel* source, GIOCondition condition, gpoi GSource* pGSource = null; GIOChannel* pChannel = null; ssize_t readBytes = 0; + int ret = 0; int server = -1; int client = -1; struct sockaddr_un clientAddress; socklen_t clientLen = sizeof(clientAddress); + struct ucred cr; + socklen_t ucredLen = sizeof(cr); + SysAssertf(pIpcServer != null, "Not yet constructed. Construct() should be called before use.\n"); SysAssertf(pIpcServer->__pListener != null, "Listener is null.\n"); @@ -308,7 +312,6 @@ _IpcServer::OnConnectionRequest(GIOChannel* source, GIOCondition condition, gpoi readBytes = read(client, &helloMessage, sizeof(helloMessage)); SysTryCatch(NID_IO, readBytes >= 0, , E_SYSTEM, "[E_SYSTEM] Failed to receive hello message (%d, %s).", errno, strerror(errno)); - helloMessage.appId[255] = '\0'; pChannel = g_io_channel_unix_new(client); SysTryCatch(NID_IO, pChannel != null, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Not enough memory."); @@ -317,23 +320,32 @@ _IpcServer::OnConnectionRequest(GIOChannel* source, GIOCondition condition, gpoi g_io_channel_set_flags(pChannel, G_IO_FLAG_NONBLOCK, &pGError); g_io_channel_set_close_on_unref(pChannel, TRUE); + + ret = getsockopt(client, SOL_SOCKET, SO_PEERCRED, &cr, &ucredLen); + SysTryCatch(NID_IO, ret >= 0, , E_SYSTEM, "[E_SYSTEM] Failed to get peercred information: %s", strerror(errno)); + client = -1; - pClientInfo = pIpcServer->__clients[helloMessage.pid]; + pClientInfo = pIpcServer->__clients[cr.pid]; if (pClientInfo == null) // first connection request from this client { pClientInfo = new (std::nothrow) _ClientInfo; SysTryCatch(NID_IO, pClientInfo != null, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Not enough memory."); pClientInfo->pIpcServer = pIpcServer; - pClientInfo->clientId = helloMessage.pid; - pClientInfo->appId.Append((wchar_t*) helloMessage.appId); - pClientInfo->pReverseChannel = null; + pClientInfo->clientId = cr.pid; + + char buffer[256] = {0, }; + ret = aul_app_get_appid_bypid(cr.pid, buffer, sizeof(buffer)); + SysTryCatch(NID_IO, ret == AUL_R_OK, delete pClientInfo, E_SYSTEM, "[E_SYSTEM] Failed to get the application ID of pid: %d", ret); - pIpcServer->__clients[helloMessage.pid] = pClientInfo; + pClientInfo->appId = buffer; + + pClientInfo->pReverseChannel = null; + pIpcServer->__clients[cr.pid] = pClientInfo; pIpcServer->__pCurrentClientInfo = pClientInfo; - pIpcServer->__pListener->OnIpcClientConnected(*pIpcServer, helloMessage.pid); + pIpcServer->__pListener->OnIpcClientConnected(*pIpcServer, cr.pid); pIpcServer->__pCurrentClientInfo = null; } -- 2.7.4