summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Orlando Arbildo <oarbildo@google.com> 2022-09-23 18:14:04 +0000
committer Orlando Arbildo <oarbildo@google.com> 2022-09-23 22:19:09 +0000
commit531fcadc02d688314ea754e19625acea13573543 (patch)
tree475c1ae274e87b0e833883dbdd72afd2a011015c
parent00a54e416a72ab98ebb31c6dfb4b6eb581f41166 (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.cpp11
-rw-r--r--libs/binder/include_trusty/binder/RpcTrusty.h4
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