diff options
author | 2022-09-23 18:14:04 +0000 | |
---|---|---|
committer | 2022-09-23 22:19:09 +0000 | |
commit | 531fcadc02d688314ea754e19625acea13573543 (patch) | |
tree | 475c1ae274e87b0e833883dbdd72afd2a011015c | |
parent | 00a54e416a72ab98ebb31c6dfb4b6eb581f41166 (diff) |
TrustyRpc: Adding a create session with initialization callback function
Original RpcTrustyConnect function didn't allow callbacks on the
connection. Enabling this functionality required us to do some initialization
on the session itself before connecting.
Added a RpcTrustyConnectWithSessionInitializer function that
allows the caller to pass a callback function that can be used to initialize
the session object before a connection is made.
Tested that this change can be used to modify setMaxIncomingThreads to enable
callbacks and one-way functions on it.
Bug: None
Test: None
Change-Id: I9b53b54131a2c7fd24294aae5ab102b7c0f154e2
-rw-r--r-- | libs/binder/RpcTrusty.cpp | 11 | ||||
-rw-r--r-- | libs/binder/include_trusty/binder/RpcTrusty.h | 4 |
2 files changed, 14 insertions, 1 deletions
diff --git a/libs/binder/RpcTrusty.cpp b/libs/binder/RpcTrusty.cpp index ea49eef676..3b53b05991 100644 --- a/libs/binder/RpcTrusty.cpp +++ b/libs/binder/RpcTrusty.cpp @@ -26,8 +26,12 @@ namespace android { using android::base::unique_fd; -sp<IBinder> RpcTrustyConnect(const char* device, const char* port) { +sp<RpcSession> RpcTrustyConnectWithSessionInitializer( + const char* device, const char* port, + std::function<void(sp<RpcSession>&)> sessionInitializer) { auto session = RpcSession::make(RpcTransportCtxFactoryTipcAndroid::make()); + // using the callback to initialize the session + sessionInitializer(session); auto request = [=] { int tipcFd = tipc_connect(device, port); if (tipcFd < 0) { @@ -40,6 +44,11 @@ sp<IBinder> RpcTrustyConnect(const char* device, const char* port) { LOG(ERROR) << "Failed to set up Trusty client. Error: " << statusToString(status).c_str(); return nullptr; } + return session; +} + +sp<IBinder> RpcTrustyConnect(const char* device, const char* port) { + auto session = RpcTrustyConnectWithSessionInitializer(device, port, [](auto) {}); return session->getRootObject(); } diff --git a/libs/binder/include_trusty/binder/RpcTrusty.h b/libs/binder/include_trusty/binder/RpcTrusty.h index f124e0c824..b034b9b65b 100644 --- a/libs/binder/include_trusty/binder/RpcTrusty.h +++ b/libs/binder/include_trusty/binder/RpcTrusty.h @@ -22,4 +22,8 @@ namespace android { sp<IBinder> RpcTrustyConnect(const char* device, const char* port); +sp<RpcSession> RpcTrustyConnectWithSessionInitializer( + const char* device, const char* port, + std::function<void(sp<RpcSession>&)> sessionInitializer); + } // namespace android |