Loading libs/binder/RpcServer.cpp +16 −0 Original line number Diff line number Diff line Loading @@ -161,6 +161,12 @@ void RpcServer::setConnectionFilter(std::function<bool(const void*, size_t)>&& f mConnectionFilter = std::move(filter); } void RpcServer::setServerSocketModifier(std::function<void(base::borrowed_fd)>&& modifier) { RpcMutexLockGuard _l(mLock); LOG_ALWAYS_FATAL_IF(mServer.fd != -1, "Already started"); mServerSocketModifier = std::move(modifier); } sp<IBinder> RpcServer::getRootObject() { RpcMutexLockGuard _l(mLock); bool hasWeak = mRootObjectWeak.unsafe_get(); Loading Loading @@ -335,6 +341,8 @@ bool RpcServer::shutdown() { mJoinThread.reset(); } mServer = RpcTransportFd(); LOG_RPC_DETAIL("Finished waiting on shutdown."); mShutdownTrigger = nullptr; Loading Loading @@ -556,6 +564,14 @@ status_t RpcServer::setupSocketServer(const RpcSocketAddress& addr) { ALOGE("Could not create socket at %s: %s", addr.toString().c_str(), strerror(savedErrno)); return -savedErrno; } { RpcMutexLockGuard _l(mLock); if (mServerSocketModifier != nullptr) { mServerSocketModifier(socket_fd); } } if (0 != TEMP_FAILURE_RETRY(bind(socket_fd.get(), addr.addr(), addr.addrSize()))) { int savedErrno = errno; ALOGE("Could not bind socket at %s: %s", addr.toString().c_str(), strerror(savedErrno)); Loading libs/binder/include/binder/RpcServer.h +8 −0 Original line number Diff line number Diff line Loading @@ -183,6 +183,13 @@ public: */ void setConnectionFilter(std::function<bool(const void*, size_t)>&& filter); /** * Set optional modifier of each newly created server socket. * * The only argument is a successfully created file descriptor, not bound to an address yet. */ void setServerSocketModifier(std::function<void(base::borrowed_fd)>&& modifier); /** * See RpcTransportCtx::getCertificate */ Loading Loading @@ -267,6 +274,7 @@ private: wp<IBinder> mRootObjectWeak; std::function<sp<IBinder>(const void*, size_t)> mRootObjectFactory; std::function<bool(const void*, size_t)> mConnectionFilter; std::function<void(base::borrowed_fd)> mServerSocketModifier; std::map<std::vector<uint8_t>, sp<RpcSession>> mSessions; std::unique_ptr<FdTrigger> mShutdownTrigger; RpcConditionVariable mShutdownCv; Loading Loading
libs/binder/RpcServer.cpp +16 −0 Original line number Diff line number Diff line Loading @@ -161,6 +161,12 @@ void RpcServer::setConnectionFilter(std::function<bool(const void*, size_t)>&& f mConnectionFilter = std::move(filter); } void RpcServer::setServerSocketModifier(std::function<void(base::borrowed_fd)>&& modifier) { RpcMutexLockGuard _l(mLock); LOG_ALWAYS_FATAL_IF(mServer.fd != -1, "Already started"); mServerSocketModifier = std::move(modifier); } sp<IBinder> RpcServer::getRootObject() { RpcMutexLockGuard _l(mLock); bool hasWeak = mRootObjectWeak.unsafe_get(); Loading Loading @@ -335,6 +341,8 @@ bool RpcServer::shutdown() { mJoinThread.reset(); } mServer = RpcTransportFd(); LOG_RPC_DETAIL("Finished waiting on shutdown."); mShutdownTrigger = nullptr; Loading Loading @@ -556,6 +564,14 @@ status_t RpcServer::setupSocketServer(const RpcSocketAddress& addr) { ALOGE("Could not create socket at %s: %s", addr.toString().c_str(), strerror(savedErrno)); return -savedErrno; } { RpcMutexLockGuard _l(mLock); if (mServerSocketModifier != nullptr) { mServerSocketModifier(socket_fd); } } if (0 != TEMP_FAILURE_RETRY(bind(socket_fd.get(), addr.addr(), addr.addrSize()))) { int savedErrno = errno; ALOGE("Could not bind socket at %s: %s", addr.toString().c_str(), strerror(savedErrno)); Loading
libs/binder/include/binder/RpcServer.h +8 −0 Original line number Diff line number Diff line Loading @@ -183,6 +183,13 @@ public: */ void setConnectionFilter(std::function<bool(const void*, size_t)>&& filter); /** * Set optional modifier of each newly created server socket. * * The only argument is a successfully created file descriptor, not bound to an address yet. */ void setServerSocketModifier(std::function<void(base::borrowed_fd)>&& modifier); /** * See RpcTransportCtx::getCertificate */ Loading Loading @@ -267,6 +274,7 @@ private: wp<IBinder> mRootObjectWeak; std::function<sp<IBinder>(const void*, size_t)> mRootObjectFactory; std::function<bool(const void*, size_t)> mConnectionFilter; std::function<void(base::borrowed_fd)> mServerSocketModifier; std::map<std::vector<uint8_t>, sp<RpcSession>> mSessions; std::unique_ptr<FdTrigger> mShutdownTrigger; RpcConditionVariable mShutdownCv; Loading