diff options
| author | 2021-09-07 21:01:33 +0900 | |
|---|---|---|
| committer | 2021-09-08 10:48:51 +0900 | |
| commit | 172473fcdf9b496dbfa019907f6dd8b328f6ae7f (patch) | |
| tree | 6adf563dad8d30f2071178f2e200e066f4bc977e | |
| parent | e12fccc47f691e19041e6d1d94d0f70c7731c0e1 (diff) | |
Support callback for rpc server
In case that a user want to be notified, a callback will be called after
setting up the RPC server.
Bug: 195381416
Test: atest MicrodroidHostTestCases
Test: run microdroid demo app
Change-Id: Ia98bfb879a434935d9708a6dcd4aa19c4d46ffe4
| -rw-r--r-- | libs/binder/include_rpc_unstable/binder_rpc_unstable.hpp | 9 | ||||
| -rw-r--r-- | libs/binder/libbinder_rpc_unstable.cpp | 9 | ||||
| -rw-r--r-- | libs/binder/libbinder_rpc_unstable.map.txt | 1 |
3 files changed, 18 insertions, 1 deletions
diff --git a/libs/binder/include_rpc_unstable/binder_rpc_unstable.hpp b/libs/binder/include_rpc_unstable/binder_rpc_unstable.hpp index 0309d6ca53..08f5eedacd 100644 --- a/libs/binder/include_rpc_unstable/binder_rpc_unstable.hpp +++ b/libs/binder/include_rpc_unstable/binder_rpc_unstable.hpp @@ -20,7 +20,16 @@ extern "C" { struct AIBinder; +// Starts an RPC server on a given port and a given root IBinder object. +// This function sets up the server and joins before returning. bool RunRpcServer(AIBinder* service, unsigned int port); + +// Starts an RPC server on a given port and a given root IBinder object. +// This function sets up the server, calls readyCallback with a given param, and +// then joins before returning. +bool RunRpcServerCallback(AIBinder* service, unsigned int port, void (*readyCallback)(void* param), + void* param); + AIBinder* RpcClient(unsigned int cid, unsigned int port); // Connect to an RPC server with preconnected file descriptors. diff --git a/libs/binder/libbinder_rpc_unstable.cpp b/libs/binder/libbinder_rpc_unstable.cpp index 304415a7ce..cad55fb439 100644 --- a/libs/binder/libbinder_rpc_unstable.cpp +++ b/libs/binder/libbinder_rpc_unstable.cpp @@ -29,7 +29,8 @@ using android::base::unique_fd; extern "C" { -bool RunRpcServer(AIBinder* service, unsigned int port) { +bool RunRpcServerCallback(AIBinder* service, unsigned int port, void (*readyCallback)(void* param), + void* param) { auto server = RpcServer::make(); server->iUnderstandThisCodeIsExperimentalAndIWillNotUseItInProduction(); if (status_t status = server->setupVsockServer(port); status != OK) { @@ -38,6 +39,8 @@ bool RunRpcServer(AIBinder* service, unsigned int port) { return false; } server->setRootObject(AIBinder_toPlatformBinder(service)); + + if (readyCallback) readyCallback(param); server->join(); // Shutdown any open sessions since server failed. @@ -45,6 +48,10 @@ bool RunRpcServer(AIBinder* service, unsigned int port) { return true; } +bool RunRpcServer(AIBinder* service, unsigned int port) { + return RunRpcServerCallback(service, port, nullptr, nullptr); +} + AIBinder* RpcClient(unsigned int cid, unsigned int port) { auto session = RpcSession::make(); if (status_t status = session->setupVsockClient(cid, port); status != OK) { diff --git a/libs/binder/libbinder_rpc_unstable.map.txt b/libs/binder/libbinder_rpc_unstable.map.txt index 1138786a64..e8565695a3 100644 --- a/libs/binder/libbinder_rpc_unstable.map.txt +++ b/libs/binder/libbinder_rpc_unstable.map.txt @@ -1,6 +1,7 @@ LIBBINDER_RPC_UNSTABLE_SHIM { # platform-only global: RunRpcServer; + RunRpcServerCallback; RpcClient; RpcPreconnectedClient; local: |