summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
author Devin Moore <devinmoore@google.com> 2023-10-09 18:58:42 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2023-10-09 18:58:42 +0000
commit8a11e9c5dc6fc3da11246cb10eccc0aa17c37cff (patch)
tree5937c0cdcd5dd5a0cbc988005113e58cba841cf1 /libs
parent7a767129828e117d132c660d066729dea443a1e7 (diff)
parentd1e611ad5351e18d7ee72f66fc8d11f5fda1c510 (diff)
Merge "Allow servicedispatcher to use an ip address" into main am: 97c05f176e am: 458c54b858 am: d1e611ad53
Original change: https://android-review.googlesource.com/c/platform/frameworks/native/+/2776820 Change-Id: Iea39d32b4a98eb78a4fb6039ab5f642629d82002 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
Diffstat (limited to 'libs')
-rw-r--r--libs/binder/servicedispatcher.cpp31
1 files changed, 23 insertions, 8 deletions
diff --git a/libs/binder/servicedispatcher.cpp b/libs/binder/servicedispatcher.cpp
index 692cc95e3b..8e95d69ffc 100644
--- a/libs/binder/servicedispatcher.cpp
+++ b/libs/binder/servicedispatcher.cpp
@@ -59,12 +59,13 @@ int Usage(const char* program) {
auto basename = Basename(program);
auto format = R"(dispatch calls to RPC service.
Usage:
- %s [-g] <service_name>
+ %s [-g] [-i <ip_address>] <service_name>
<service_name>: the service to connect to.
%s [-g] manager
Runs an RPC-friendly service that redirects calls to servicemanager.
-g: use getService() instead of checkService().
+ -i: use ip_address when setting up the server instead of '127.0.0.1'
If successful, writes port number and a new line character to stdout, and
blocks until killed.
@@ -74,7 +75,8 @@ Usage:
return EX_USAGE;
}
-int Dispatch(const char* name, const ServiceRetriever& serviceRetriever) {
+int Dispatch(const char* name, const ServiceRetriever& serviceRetriever,
+ const char* ip_address = kLocalInetAddress) {
auto sm = defaultServiceManager();
if (nullptr == sm) {
LOG(ERROR) << "No servicemanager";
@@ -91,7 +93,7 @@ int Dispatch(const char* name, const ServiceRetriever& serviceRetriever) {
return EX_SOFTWARE;
}
unsigned int port;
- if (status_t status = rpcServer->setupInetServer(kLocalInetAddress, 0, &port); status != OK) {
+ if (status_t status = rpcServer->setupInetServer(ip_address, 0, &port); status != OK) {
LOG(ERROR) << "setupInetServer failed: " << statusToString(status);
return EX_SOFTWARE;
}
@@ -188,7 +190,8 @@ private:
// Workaround for b/191059588.
// TODO(b/191059588): Once we can run RpcServer on single-threaded services,
// `servicedispatcher manager` should call Dispatch("manager") directly.
-int wrapServiceManager(const ServiceRetriever& serviceRetriever) {
+int wrapServiceManager(const ServiceRetriever& serviceRetriever,
+ const char* ip_address = kLocalInetAddress) {
auto sm = defaultServiceManager();
if (nullptr == sm) {
LOG(ERROR) << "No servicemanager";
@@ -212,7 +215,7 @@ int wrapServiceManager(const ServiceRetriever& serviceRetriever) {
auto rpcServer = RpcServer::make();
rpcServer->setRootObject(service);
unsigned int port;
- if (status_t status = rpcServer->setupInetServer(kLocalInetAddress, 0, &port); status != OK) {
+ if (status_t status = rpcServer->setupInetServer(ip_address, 0, &port); status != OK) {
LOG(ERROR) << "Unable to set up inet server: " << statusToString(status);
return EX_SOFTWARE;
}
@@ -272,11 +275,15 @@ int main(int argc, char* argv[]) {
int opt;
ServiceRetriever serviceRetriever = &android::IServiceManager::checkService;
- while (-1 != (opt = getopt(argc, argv, "g"))) {
+ char* ip_address = nullptr;
+ while (-1 != (opt = getopt(argc, argv, "gi:"))) {
switch (opt) {
case 'g': {
serviceRetriever = &android::IServiceManager::getService;
} break;
+ case 'i': {
+ ip_address = optarg;
+ } break;
default: {
return Usage(argv[0]);
}
@@ -291,7 +298,15 @@ int main(int argc, char* argv[]) {
auto name = argv[optind];
if (name == "manager"sv) {
- return wrapServiceManager(serviceRetriever);
+ if (ip_address) {
+ return wrapServiceManager(serviceRetriever, ip_address);
+ } else {
+ return wrapServiceManager(serviceRetriever);
+ }
+ }
+ if (ip_address) {
+ return Dispatch(name, serviceRetriever, ip_address);
+ } else {
+ return Dispatch(name, serviceRetriever);
}
- return Dispatch(name, serviceRetriever);
}