diff --git a/include/ipc_base.h b/include/ipc_base.h index 9be46546731a610cf425b7a96e8b397eda924245..833fb55a294106a684ad4a33e21444d5f94b16f2 100644 --- a/include/ipc_base.h +++ b/include/ipc_base.h @@ -20,6 +20,8 @@ const int IPC_SHM_FLAG = IPC_CREAT | 0666; const size_t DATA_SIZE = 0x20000; +const unsigned int MAX_SOCKET_ADDR_LEN = 128; + const int32_t GET_SA_REQUEST_CODE = 2; const int32_t WIFI_DEVICE_ABILITY_ID = 1125; const int32_t WIFI_P2P_ABILITY_ID = 1128; diff --git a/include/ipc_object_proxy.h b/include/ipc_object_proxy.h index a130e694bd265a157297f05b4c61c13542eeadd2..5148b117e94126577f2435053fdbf7107f0b71be 100644 --- a/include/ipc_object_proxy.h +++ b/include/ipc_object_proxy.h @@ -15,7 +15,7 @@ public: void SendObituary(); private: key_t sendShmKey_; - const char *socketAddr_; + char socketAddr_[MAX_SOCKET_ADDR_LEN]; int recvFd_; sptr< DeathRecipient > deathRecipient_; }; diff --git a/include/ipc_skeleton.h b/include/ipc_skeleton.h index 310624364cc18118e2aab8d17a3d26ace0797128..ae9899b05195a40acd0f99a2ddf0735b30d9eac3 100644 --- a/include/ipc_skeleton.h +++ b/include/ipc_skeleton.h @@ -24,6 +24,7 @@ public: static bool SocketWriteFd(const char *addr, int fd); static bool SetDeviceAuthObj(sptr< IRemoteObject > obj); static sptr< IRemoteObject > GetDeviceAuthObj(); + static int HandleToPid(unsigned long long handle); private: static sptr< IRemoteObject > obj_; diff --git a/ipc_object_proxy.cpp b/ipc_object_proxy.cpp index 8368e951c0725a84405cf8a680857cf3e8f23762..c03cf6c55e8c1940a490708ebb4f5f9edcd40810 100644 --- a/ipc_object_proxy.cpp +++ b/ipc_object_proxy.cpp @@ -7,9 +7,10 @@ namespace OHOS { static const char *IPC_CLIENT_SOCKET_ADDR = "/tmp/ipc.socket.client"; IPCObjectProxy::IPCObjectProxy(unsigned long long handle) : - socketAddr_(IPC_CLIENT_SOCKET_ADDR), recvFd_(-1), deathRecipient_(nullptr) + recvFd_(-1), deathRecipient_(nullptr) { IPC_LOG("INSERT PROXY with handle=%llx\n", handle); + sprintf(socketAddr_, "%s.%llx", IPC_CLIENT_SOCKET_ADDR, handle); handle_ = handle; sendShmKey_ = HandleToKey(handle); } diff --git a/ipc_object_stub.cpp b/ipc_object_stub.cpp index 4f7498309d859c0c957b0b043022706756c926fa..86514c225d19ab75b3212528155cd08d02e36b1e 100644 --- a/ipc_object_stub.cpp +++ b/ipc_object_stub.cpp @@ -39,7 +39,9 @@ void IPCObjectStub::CreateThread(key_t shmKey) IpcCenter::threadNum_++; std::thread new_thread(std::bind(IpcCenter::ProcessHandle, shmKey, this)); new_thread.detach(); - recvFd_ = IPCSkeleton::SocketListening(IPC_CLIENT_SOCKET_ADDR); + char cliend_socket_addr[MAX_SOCKET_ADDR_LEN]; + sprintf(cliend_socket_addr, "%s.%llx", IPC_CLIENT_SOCKET_ADDR, handle_); + recvFd_ = IPCSkeleton::SocketListening(cliend_socket_addr); IPCSocketManager::InsertSocketFd(1, recvFd_); if (recvFd_ < 0) { IPC_LOG("Stub socket listen failed\n"); diff --git a/ipc_skeleton.cpp b/ipc_skeleton.cpp index 7259cf94a21e16ca6a7e88389e6ca50a7c7c6996..291d0354a0f15e2485ceb4109b551ef02975ba83 100644 --- a/ipc_skeleton.cpp +++ b/ipc_skeleton.cpp @@ -175,4 +175,10 @@ bool IPCSkeleton::SocketWriteFd(const char *addr, int fd) return ret >= 0; } +int IPCSkeleton::HandleToPid(unsigned long long handle) +{ + handle >>= 32; + return (int)handle; +} + } //namespace OHOS