summaryrefslogtreecommitdiff
path: root/services.cpp
diff options
context:
space:
mode:
authorJosh Gao <jmgao@google.com>2016-08-24 18:38:44 -0700
committerJosh Gao <jmgao@google.com>2016-08-25 17:12:26 -0700
commit8fb64005269ff0d34a1cef5d6b253cc280db7bad (patch)
tree72439d08da5b5e25029a715865f502ff4282c03a /services.cpp
parent5187fda02523eb63251c3a64f3cc48c274edb5c3 (diff)
downloadadb-8fb64005269ff0d34a1cef5d6b253cc280db7bad.tar.gz
adb: factor out socket specification.
Move the logic for string socket specification out to separate functions to facilitate using arbitrary sockets for the adb command socket. Bug: http://b/30445394 Change-Id: Icd8fdb853272edc029fb3a0f5b18e941dc8ef52c Test: adb_test, adbd_test, test_device.py
Diffstat (limited to 'services.cpp')
-rw-r--r--services.cpp35
1 files changed, 6 insertions, 29 deletions
diff --git a/services.cpp b/services.cpp
index 3b212e9..2207a3e 100644
--- a/services.cpp
+++ b/services.cpp
@@ -49,6 +49,7 @@
#include "remount_service.h"
#include "services.h"
#include "shell_service.h"
+#include "socket_spec.h"
#include "sysdeps.h"
#include "transport.h"
@@ -278,36 +279,12 @@ static int create_service_thread(void (*func)(int, void *), void *cookie)
int service_to_fd(const char* name, const atransport* transport) {
int ret = -1;
- if(!strncmp(name, "tcp:", 4)) {
- int port = atoi(name + 4);
- name = strchr(name + 4, ':');
- if(name == 0) {
- std::string error;
- ret = network_loopback_client(port, SOCK_STREAM, &error);
- if (ret >= 0)
- disable_tcp_nagle(ret);
- } else {
-#if ADB_HOST
- std::string error;
- ret = network_connect(name + 1, port, SOCK_STREAM, 0, &error);
-#else
- return -1;
-#endif
+ if (is_socket_spec(name)) {
+ std::string error;
+ ret = socket_spec_connect(name, &error);
+ if (ret < 0) {
+ LOG(ERROR) << "failed to connect to socket '" << name << "': " << error;
}
-#if !defined(_WIN32) /* winsock doesn't implement unix domain sockets */
- } else if(!strncmp(name, "local:", 6)) {
- ret = socket_local_client(name + 6,
- ANDROID_SOCKET_NAMESPACE_RESERVED, SOCK_STREAM);
- } else if(!strncmp(name, "localreserved:", 14)) {
- ret = socket_local_client(name + 14,
- ANDROID_SOCKET_NAMESPACE_RESERVED, SOCK_STREAM);
- } else if(!strncmp(name, "localabstract:", 14)) {
- ret = socket_local_client(name + 14,
- ANDROID_SOCKET_NAMESPACE_ABSTRACT, SOCK_STREAM);
- } else if(!strncmp(name, "localfilesystem:", 16)) {
- ret = socket_local_client(name + 16,
- ANDROID_SOCKET_NAMESPACE_FILESYSTEM, SOCK_STREAM);
-#endif
#if !ADB_HOST
} else if(!strncmp("dev:", name, 4)) {
ret = unix_open(name + 4, O_RDWR | O_CLOEXEC);