summaryrefslogtreecommitdiffstats
path: root/adb/daemon
diff options
context:
space:
mode:
authorJosh Gao <jmgao@google.com>2019-02-26 20:55:19 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2019-02-26 20:55:19 +0000
commit216d158daf88edfd954dc03c65b339698319f63d (patch)
treef925f4c4dec9a8e1c25943920c0ad882dd8e5b47 /adb/daemon
parent1706eb08fe8a7600d4698566b3d779b97bd1e279 (diff)
parent43f3805950d69f9da87664ada214d5af0e02753f (diff)
downloadsystem_core-216d158daf88edfd954dc03c65b339698319f63d.tar.gz
system_core-216d158daf88edfd954dc03c65b339698319f63d.tar.bz2
system_core-216d158daf88edfd954dc03c65b339698319f63d.zip
Merge changes I86c3ec0f,I57d1a30a,Ib50d289b,I791a4f82,I316a8799, ...
* changes: adb: switch sockets.cpp to ConsumePrefix. adbd: switch abb to ConsumePrefix. adb: increment server version. adb: wait for device to disconnect upon `adb root`. adb: implement wait-for-disconnect. adb: tell the client what transport it received. adbd: switch daemon/services to ConsumePrefix. adb: switch host_service_to_socket to string_view. adb: switch handle_host_request to string_view. adb: switch adb_io.h to string_view. adb: add helper to consume a prefix on a string_view. adb: make ParseUint reject garbage at the end by default.
Diffstat (limited to 'adb/daemon')
-rw-r--r--adb/daemon/abb.cpp18
-rw-r--r--adb/daemon/services.cpp46
2 files changed, 28 insertions, 36 deletions
diff --git a/adb/daemon/abb.cpp b/adb/daemon/abb.cpp
index 4ffa6bb85..eeac41a93 100644
--- a/adb/daemon/abb.cpp
+++ b/adb/daemon/abb.cpp
@@ -14,15 +14,15 @@
* limitations under the License.
*/
-#include "adb.h"
-#include "adb_io.h"
-#include "shell_service.h"
-
-#include "cmd.h"
-
#include <sys/wait.h>
#include <android-base/cmsg.h>
+#include <cmd.h>
+
+#include "adb.h"
+#include "adb_io.h"
+#include "adb_utils.h"
+#include "shell_service.h"
namespace {
@@ -87,11 +87,9 @@ int main(int argc, char* const argv[]) {
std::string_view name = data;
auto protocol = SubprocessProtocol::kShell;
- if (name.starts_with("abb:")) {
- name.remove_prefix(strlen("abb:"));
+ if (ConsumePrefix(&name, "abb:")) {
protocol = SubprocessProtocol::kShell;
- } else if (name.starts_with("abb_exec:")) {
- name.remove_prefix(strlen("abb_exec:"));
+ } else if (ConsumePrefix(&name, "abb_exec:")) {
protocol = SubprocessProtocol::kNone;
} else {
LOG(FATAL) << "Unknown command prefix for abb: " << data;
diff --git a/adb/daemon/services.cpp b/adb/daemon/services.cpp
index 362a987e0..b0cc4509d 100644
--- a/adb/daemon/services.cpp
+++ b/adb/daemon/services.cpp
@@ -223,17 +223,15 @@ asocket* daemon_service_to_socket(std::string_view name) {
return create_jdwp_service_socket();
} else if (name == "track-jdwp") {
return create_jdwp_tracker_service_socket();
- } else if (name.starts_with("sink:")) {
- name.remove_prefix(strlen("sink:"));
+ } else if (ConsumePrefix(&name, "sink:")) {
uint64_t byte_count = 0;
- if (!android::base::ParseUint(name.data(), &byte_count)) {
+ if (!ParseUint(&byte_count, name)) {
return nullptr;
}
return new SinkSocket(byte_count);
- } else if (name.starts_with("source:")) {
- name.remove_prefix(strlen("source:"));
+ } else if (ConsumePrefix(&name, "source:")) {
uint64_t byte_count = 0;
- if (!android::base::ParseUint(name.data(), &byte_count)) {
+ if (!ParseUint(&byte_count, name)) {
return nullptr;
}
return new SourceSocket(byte_count);
@@ -252,20 +250,19 @@ unique_fd daemon_service_to_fd(std::string_view name, atransport* transport) {
#if defined(__ANDROID__)
if (name.starts_with("framebuffer:")) {
return create_service_thread("fb", framebuffer_service);
- } else if (name.starts_with("remount:")) {
- std::string arg(name.begin() + strlen("remount:"), name.end());
+ } else if (ConsumePrefix(&name, "remount:")) {
+ std::string arg(name);
return create_service_thread("remount",
std::bind(remount_service, std::placeholders::_1, arg));
- } else if (name.starts_with("reboot:")) {
- std::string arg(name.begin() + strlen("reboot:"), name.end());
+ } else if (ConsumePrefix(&name, "reboot:")) {
+ std::string arg(name);
return create_service_thread("reboot",
std::bind(reboot_service, std::placeholders::_1, arg));
} else if (name.starts_with("root:")) {
return create_service_thread("root", restart_root_service);
} else if (name.starts_with("unroot:")) {
return create_service_thread("unroot", restart_unroot_service);
- } else if (name.starts_with("backup:")) {
- name.remove_prefix(strlen("backup:"));
+ } else if (ConsumePrefix(&name, "backup:")) {
std::string cmd = "/system/bin/bu backup ";
cmd += name;
return StartSubprocess(cmd, nullptr, SubprocessType::kRaw, SubprocessProtocol::kNone);
@@ -278,8 +275,7 @@ unique_fd daemon_service_to_fd(std::string_view name, atransport* transport) {
} else if (name.starts_with("enable-verity:")) {
return create_service_thread("verity-off", std::bind(set_verity_enabled_state_service,
std::placeholders::_1, true));
- } else if (name.starts_with("tcpip:")) {
- name.remove_prefix(strlen("tcpip:"));
+ } else if (ConsumePrefix(&name, "tcpip:")) {
std::string str(name);
int port;
@@ -293,24 +289,22 @@ unique_fd daemon_service_to_fd(std::string_view name, atransport* transport) {
}
#endif
- if (name.starts_with("dev:")) {
- name.remove_prefix(strlen("dev:"));
+ if (ConsumePrefix(&name, "dev:")) {
return unique_fd{unix_open(name, O_RDWR | O_CLOEXEC)};
- } else if (name.starts_with("jdwp:")) {
- name.remove_prefix(strlen("jdwp:"));
- std::string str(name);
- return create_jdwp_connection_fd(atoi(str.c_str()));
- } else if (name.starts_with("shell")) {
- name.remove_prefix(strlen("shell"));
+ } else if (ConsumePrefix(&name, "jdwp:")) {
+ pid_t pid;
+ if (!ParseUint(&pid, name)) {
+ return unique_fd{};
+ }
+ return create_jdwp_connection_fd(pid);
+ } else if (ConsumePrefix(&name, "shell")) {
return ShellService(name, transport);
- } else if (name.starts_with("exec:")) {
- name.remove_prefix(strlen("exec:"));
+ } else if (ConsumePrefix(&name, "exec:")) {
return StartSubprocess(std::string(name), nullptr, SubprocessType::kRaw,
SubprocessProtocol::kNone);
} else if (name.starts_with("sync:")) {
return create_service_thread("sync", file_sync_service);
- } else if (name.starts_with("reverse:")) {
- name.remove_prefix(strlen("reverse:"));
+ } else if (ConsumePrefix(&name, "reverse:")) {
return reverse_service(name, transport);
} else if (name == "reconnect") {
return create_service_thread(