summaryrefslogtreecommitdiff
path: root/adb_client.cpp
AgeCommit message (Collapse)Author
2016-11-16adb: add sysdeps/chrono.h for chrono literals on Win32.Josh Gao
Bug: http://b/32878766 Test: mma Change-Id: Iaa89d4eadf07e63d6d7205057435a6c7fb5d4ec5
2016-11-16Switch adb over to <chrono>.Elliott Hughes
Clearer code, and lets us lose some more portability cruft. Bug: http://b/32878766 Test: manual Change-Id: Ie44928bbf8d68a74127aaf76e7e0060e25fa2cc8
2016-09-01Fix adb.Elliott Hughes
9460de1ce80a41cd6171a7e03d9fa7aef2db9dce had a backwards test that means all adb commands abort. Fix the sense of the test. Bug: http://b/30445394 Change-Id: I4b8ee697f7d305b57f9cd1a70ae919869dee994d
2016-09-01adb: allow use of arbitrary socket specs for command socket.Josh Gao
Bug: http://b/30445394 Change-Id: I474ede35ec3c56ad86da503c9703f83ef5e80862
2016-04-05adb: add reconnect command.Yabin Cui
Add reconnect command for debugging. `reconnect` kicks a transport from the host side, `reconnect device` kicks a transport from the device side. They can be used to produce transport errors. Bug: 25935458 Change-Id: I47daa338796b561941e7aba44a51a6dd117d1e98
2016-03-04adb: wait for adbd to die and respawn in root/unroot.Josh Gao
Bug: http://b/19749057 Change-Id: I57dbc113803b6fd3016c1801410be0f4023245d9
2016-01-31adb: add adb_get_feature_set.Josh Gao
Extract a feature set getter function from commandline.cpp. Change-Id: I30a3eb0b060a88379e29be16264637816e378978
2016-01-15Increase the maximum shell command length to 4096ish.Josh Gao
The actual maximum length will depend on the version of the shell protocol being used, and any additional parameters being passed through (e.g. TERM=xterm-256color). This should be able to be raised to 64K for devices with commit 3d2904c (L-MR1 and above), but that'll require some plumbing. Bug: http://b/20467103 Change-Id: Idf0c46af5b18b854110aba58df13a53297d2475f
2015-12-04Track rename of base/ to android-base/.Elliott Hughes
Change-Id: Idf9444fece4aa89c93e15640de59a91f6e758ccf
2015-10-30adb: fix adb client running out of sockets on WindowsSpencer Low
Background ========== On Windows, if you run "adb shell exit" in a loop in two windows, eventually the adb client will be unable to connect to the adb server. I think connect() is returning WSAEADDRINUSE: "Only one usage of each socket address (protocol/network address/port) is normally permitted. (10048)". The Windows System Event Log may also show Event 4227, Tcpip. Netstat output is filled with: # for the adb server TCP 127.0.0.1:5037 127.0.0.1:65523 TIME_WAIT # for the adb client TCP 127.0.0.1:65523 127.0.0.1:5037 TIME_WAIT The error probably means that the client is running out of free address:port pairs. The first netstat line is unavoidable, but the second line exists because the adb client is not waiting for orderly/graceful shutdown of the socket, and that is apparently required on Windows to get rid of the second line. For more info, see https://github.com/CompareAndSwap/SocketCloseTest . This is exacerbated by the fact that "adb shell exit" makes 4 socket connections to the adb server: 1) host:version, 2) host:features, 3) host:version (again), 4) shell:exit. Also exacerbating is the fact that the adb protocol is length-prefixed so the client typically does not have to 'read() until zero' which effectively waits for orderly/graceful shutdown. The Fix ======= Introduce a function, ReadOrderlyShutdown(), that should be called in the adb client to wait for the server to close its socket, before closing the client socket. I reviewed all code where the adb client makes a connection to the adb server and added ReadOrderlyShutdown() when it made sense. I wasn't able to add it to the following: * interactive_shell: this doesn't matter because this is interactive and thus can't be run fast enough to use up ports. * adb sideload: I couldn't get enough test coverage and I don't think this is being called frequently enough to be a problem. * send_shell_command, backup, adb_connect_command, adb shell, adb exec-out, install_multiple_app, adb_send_emulator_command: These already wait for server socket shutdown since they already call recv() until zero. * restore, adb exec-in: protocol design can't have the server close first. * adb start-server: no fd is actually returned * create_local_service_socket, local_connect_arbitrary_ports, connect_device: probably called rarely enough not to be a problem. Also in this change =================== * Clarify comments in when adb_shutdown() is called before exit(). * add some missing adb_close() in adb sideload. * Fixup error handling and comments in adb_send_emulator_command(). * Make SyncConnection::SendQuit return a success boolean. * Add unittest for adb emu kill command. This gets code coverage over this very careful piece of code. Change-Id: Iad0b1336f5b74186af2cd35f7ea827d0fa77a17c Signed-off-by: Spencer Low <CompareAndSwap@gmail.com>
2015-10-07Fix adb -d/-e error reporting.Elliott Hughes
If -d/-e fail, get-serialno and friends will now report an error and return a failure status code on exit. Also fix the behavior of -d/-e with $ANDROID_SERIAL --- -d/-e should override $ANDROID_SERIAL, not the other way round. I'm deleting my own comment here about always returning "unknown" for scripts. I can't find any evidence that there are scripts relying on that, so I think my comment meant "I fear that there are scripts doing so". Bug: http://b/24403699 Change-Id: Ie13a751f1137abcfe0cc6c46a0630ba5e02db676
2015-10-02Explain adb client/server version mismatch better.Elliott Hughes
"Out of date" is only probably true. You might equally well have an older client talking to a newer server. So tell the truth and include the actual version numbers. Change-Id: I821de88f5baf65bf2623363129c60c496b407bff
2015-09-23Adb: use VLOG() to replace D() for verbose logging.Yabin Cui
As there are too many D(), we can keep both VLOG() and D() now, and get rid of D() gradually. Change-Id: I2f1cb70bcab3e82c99fed939341d03f6b2216076
2015-09-02adb: clean up debug tracing a little.Yabin Cui
Always use LOG() for debug tracing. Remove useless D_lock. I believe it is useless to lock just before and after fprintf. I verified the log output both on host and on device. The output looks fine to me. Change-Id: I96ccfe408ff56864361551afe9ad464d197ae104
2015-08-24adb sync cleanup.Elliott Hughes
We can double the speed of "adb sync" (on N9) if we increase SYNC_DATA_MAX from 64KiB to 256KiB. This change doesn't do that, because I still haven't managed to plumb through the information about whether we're a new adb/adbd to file_sync_client.cpp and file_sync_service.cpp. But this is already a big change with a lot of cleanup, so let's do the cleanup and worry about the intended change another day... This change does improve performance somewhat by halving the number of lstat(2) calls made on the client side, and ensuring that most packets are sent with a single write. This has the pleasing result of making the null sync on an AOSP N9 go from just over 300ms to around 100ms, which means it now seems instantaneous (https://en.wikipedia.org/wiki/Mental_chronometry). Change-Id: If9f6d4c1f93ec752b95f71211bbbb1c513045166
2015-08-12adb: start-server and kill-server error outputSpencer Low
- handle_host_request - When the host:kill command comes in, shutdown the socket before calling exit(). If we don't do this, the client will output error info even though everything is working ok. - adb_connect() - If we can't parse the version string, explain this in error output and don't goto error which would try to close an fd we already closed. - If host:kill doesn't work, output error info. Don't try to close already closed fd. - adb_main() - If writing the ACK somehow has an error, output error info (I doubt this will ever get hit). - adb_commandline() - Fix typo about max port number. - Make 'adb kill-server' and 'adb start-server' output any detailed error info. Change-Id: Id1a309cc1bf516f7f49bd332b34d30f148b406da Signed-off-by: Spencer Low <CompareAndSwap@gmail.com>
2015-08-05adb: fix killing of old version of adb processSpencer Low
The original code was: if (strcmp(__adb_error, "unknown host service") != 0) But that was changed by 078f0fcf4c63b8d8e8c10a18855eae04ca321e06 to: if (*error == "unknown host service") { I think the comparison should be != so that "unknown host service" falls-through and kills the server, and so if it is some other error, that the other error is returned immediately. Change-Id: Ia490a4a870d1d123a3c5ab258dd5fa0930e8032d Signed-off-by: Spencer Low <CompareAndSwap@gmail.com>
2015-07-30adb: win32: initial IPv6 support and improved Winsock error reportingSpencer Low
Call getaddrinfo() for connecting to IPv6 destinations. Winsock APIs do not set errno. WSAGetLastError() returns Winsock errors that are more numerous than BSD sockets, so it really doesn't make sense to map those to BSD socket errors. Plus, even if we did that, the Windows C Runtime (that mingw binaries use) has a strerror() that does not recognize BSD socket error codes. The solution is to wrap the various libcutils socket_* APIs with sysdeps.h network_* APIs. For POSIX, the network_* APIs just call strerror(). For Windows, they call SystemErrorCodeToString() (adapted from Chromium). Also in this change: - Various other code was modified to return errors in a std::string* argument, to be able to surface the error string to the end-user. - Improved error checking and use of D() to log Winsock errors for improved debuggability. - For sysdeps_win32.cpp, added unique_fh class that works like std::unique_ptr, for calling _fh_close(). - Fix win32 adb_socketpair() setting of errno in error case. - Improve _socket_set_errno() D() logging to reduce confusion. Map a few extra error codes. - Move adb_shutdown() lower in sysdeps_win32.cpp so it can call _socket_set_errno(). - Move network_connect() from adb_utils.cpp to sysdeps.h. - Merge socket_loopback_server() and socket_inaddr_any_server() into _network_server() since most of the code was identical. Change-Id: I945f36870f320578b3a11ba093852ba6f7b93400 Signed-off-by: Spencer Low <CompareAndSwap@gmail.com>
2015-07-23Report getaddrinfo failures correctly.Elliott Hughes
Also move us off the "convenience" function because you can't get useful error reporting from it. Change-Id: I5fcc6a6d762f5f60906980a7835f01a35045be65
2015-07-21Merge "Recognize IPv6 addresses for "adb connect"."Elliott Hughes
2015-07-21Recognize IPv6 addresses for "adb connect".Elliott Hughes
Bug: http://b/22559299 Change-Id: I32891d706b5010c38db84a056e76dd279b780f75
2015-07-21adb: logging: newlines, thread ids, error code overwritingSpencer Low
Add missing \n to uses of legacy D() macro. This should make the legacy logging easier to read (and harder to miss important stuff). On POSIX, use gettid() from libcutils instead of pthread_self() so that the output shows a more reasonable number instead of a pointer value. This should be ok since libbase's logging already uses gettid(). Win32: Don't let the Win32 last error get overwritten by API calls after the original error'ing API. When encountering an unknown error, log the specific error code. Change-Id: Ib8f72754efa7ba895d2f1cd914251fec2a1d894c Signed-off-by: Spencer Low <CompareAndSwap@gmail.com>
2015-05-29Fix error handling/reporting for "adb forward" and "adb reverse".Elliott Hughes
We really need better infrastructure for parsing adb subcommands, but in the meantime... At least this cleans up a little more of the implementation too. Bug: http://b/20736014 Change-Id: I76209847da3724906c71924017bcb69fa31e0b49
2015-05-13adb: win32: fix StringPrintf format string checking of %zd and PRIu64Spencer Low
At runtime, vsnprintf (and android::base::StringPrintf which calls it) call a mingw version of vsnprintf, not the vsnprintf from MSVCRT.DLL. The mingw version properly understands %zd and PRIu64 (the latter, provided that you #include <inttypes.h>). The problem was that android::base::StringPrintf was causing compile-time errors saying that %zd and PRIu64 were not recognized. It seems that this was because the attribute on the function prototypes specified `printf' instead of `gnu_printf'. Once that was fixed to match vsnprintf's attribute, the warnings went away. This uses similar preprocessor techniques as <android/log.h>. Also restore a %zd usage to avoid a static_cast<>, and make print_transfer_progress()'s format string compile-time checkable (and tweak some types and %llu => PRIu64). Change-Id: I80b31b9994858a28cb7c6847143b86108b8ab842 Signed-off-by: Spencer Low <CompareAndSwap@gmail.com>
2015-05-06adb: win32: fix adb emu commandSpencer Low
The adb emu command was never working because the socket connection to the emulator was closed without reading all of the data that the emulator sent. On Windows, this caused the emulator's recv() call to error-out, so it never got the command that was sent. Before settling on this fix, I also experimented changing the arguments to the socket shutdown() call and that didn't seem to help. I also tried removing the call to shutdown() and that didn't help. So that should rule out shutdown() as the problem. One experiment that helped was delaying before calling adb_close(), but that is of course fragile and doesn't address the real issue, which is not closing the socket until the commands have been read. https://code.google.com/p/android/issues/detail?id=21021 Change-Id: I8fa4d740a2faa2c9922ec50792e16564a94f6eed Signed-off-by: Spencer Low <CompareAndSwap@gmail.com>
2015-05-05Give enum types CamelCase names for clarity.Elliott Hughes
Change-Id: I1c89f1cc155ee839f372fb14d972a288183b8bcd
2015-05-01Add WriteFdFmt and clean up more code.Elliott Hughes
Also say *which* device wasn't found. Bug: http://b/20666660 Change-Id: I50e234ad89e39ae0a8995083c0b642c61275c5a3
2015-05-01More adb buffer fixes.Elliott Hughes
This patch factors out a lot of the basic protocol code: sending OKAY, sending FAIL, and sending a length-prefixed string. ADB_TRACE has been non-optional for a long time, so let's just remove the #ifs. Also actually build the device tracker test tool (and remove its duplicate). Bug: http://b/20666660 Change-Id: I6c7d59f18707bdc62ca69dea45547617f9f31fc6
2015-04-30More fixed-length buffer removal.Elliott Hughes
Bug: http://b/20666660 Change-Id: I0c738e9fed2defed48a9cf2d0a4f7b99c08dcf3d
2015-04-29Fix Win32 build.Elliott Hughes
Change-Id: Icf2c8df99b4b88bbf85a4097731733c5795fba44
2015-04-29Move __adb_error to std::string, and improve various errors.Elliott Hughes
Also remove an sprintf. Also fix various bits of code that were reporting stale adb_error values when they meant strerror. Bug: http://b/20666660 Change-Id: Ibeb48b7bc21bb0ec30ba47889d1d671ee480e1b7
2015-04-27Support the full length of USB serial numbers.Elliott Hughes
Two bugs: we couldn't report the serial number correctly if it was long enough, and it wasn't possible to connect to a device whose serial number was long enough to overflow a different fixed-length buffer. Bug: http://b/20317730 Change-Id: Ic9cf3c847066449ac78069bd1718184935098ac7
2015-03-19File header cleanup.Dan Albert
* sysdeps.h should always be included first. * TRACE_TAG needs to be defined before anything is included. * Some files were missing copyright headers. * Save precious bytes on my SSD by removing useless whitespace. Change-Id: I88980e6e00b5be1093806cf286740d9e4a033b94
2015-03-13adb doesn't actually use libzipfile.Elliott Hughes
Change-Id: Ia7d22214bc8422c88edaaf9bb716d7e12e0bb381
2015-03-09Move adb to C++.Dan Albert
I keep trying to clean things up and needing std::strings. Might as well just do this now. usb_linux_client.c is going to stay as C because GCC isn't smart enough to deal with the designated initializers it uses (though for some reason it is in C mode). The Darwin files are staying as C because I don't have a way to test that they build. The Windows files are staying as C because while I can actually build for them, it's slow and painful. Change-Id: I75367d29205a9049d34460032b3bb36384f43941