diff options
author | Josh Gao <jmgao@google.com> | 2019-02-26 20:55:19 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2019-02-26 20:55:19 +0000 |
commit | 216d158daf88edfd954dc03c65b339698319f63d (patch) | |
tree | f925f4c4dec9a8e1c25943920c0ad882dd8e5b47 /adb/daemon | |
parent | 1706eb08fe8a7600d4698566b3d779b97bd1e279 (diff) | |
parent | 43f3805950d69f9da87664ada214d5af0e02753f (diff) | |
download | system_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.cpp | 18 | ||||
-rw-r--r-- | adb/daemon/services.cpp | 46 |
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( |