)]}'
{
  "log": [
    {
      "commit": "13508c1c97da14a294c04e5097ea81c9ce7edf33",
      "tree": "0b01329ed303ad250c4485da40729fce3c6a6d1d",
      "parents": [
        "fddb171eb91616232e07c577b4574ef57f4e4e62"
      ],
      "author": {
        "name": "Shaju Mathew",
        "email": "shaju@google.com",
        "time": "Sat Jun 25 14:57:31 2022 +0000"
      },
      "committer": {
        "name": "Shaju Mathew",
        "email": "shaju@google.com",
        "time": "Mon Aug 15 18:22:45 2022 +0000"
      },
      "message": "Reject external connect: requests.\n\nSteps:\n  1. Track forward:reverse config in a data-structure.\n  2. connect_to_remote() examines each socket transport and updates\n    this data-structure.\n  3. handle_packet() takes appropriate action\n    (abort) for an unknown connect: request originating from the device.\n\nBug:205286508\n\nTest: treehugger\n\nSigned-off-by: jmgao \u003cjmgao@fb.com\u003e\nChange-Id: I0ec7d6f8e60afc2ee5d1be2b63bf90ca99443a52\n"
    },
    {
      "commit": "f3206bf07f692c83f818594b6658c6806fd678df",
      "tree": "9fc20bc19a03fab384a6ce6eba3b6a3f3612078e",
      "parents": [
        "3737a339cb7a0ab3a96b41c17b524430eaeeed11"
      ],
      "author": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Fri Jul 22 17:24:52 2022 -0700"
      },
      "committer": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Tue Aug 09 16:52:50 2022 +0000"
      },
      "message": "ADB: Fix track-devices duplicate entry\n\nSignal that transports have been update (via update_transport()), upon\nreceiving a new connection is incorrect since it is also done via\nSetConnectionState (called in parse_banner).\n\nThe double call is what cause the double output mentioned in the bug.\n\nFixes: 223611509\nTest: TODO\nChange-Id: Ib332c71698ee3223ff3e1addafd7869083085bbe\n"
    },
    {
      "commit": "43231f1dabbb1d2cf82b605b8d667b1583b87c7e",
      "tree": "f206f9258ba307fcab0aa06e5d58e3160ae5ac5d",
      "parents": [
        "73abffa2ae8e6aeee0f3843c272da0b37a009f56",
        "bd1f30085774660e01d83cb74e326d79d55062d2"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Jun 13 17:14:01 2022 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jun 13 17:14:01 2022 +0000"
      },
      "message": "Merge \"adb: add receive windowing.\""
    },
    {
      "commit": "bd1f30085774660e01d83cb74e326d79d55062d2",
      "tree": "ed19cdd7d0df5fb0a87543fec04e9c3078a05c29",
      "parents": [
        "17b638c32418194eb7ec81bc2de37bf2eb838089"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@fb.com",
        "time": "Wed Dec 29 21:15:12 2021 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@fb.com",
        "time": "Mon May 23 15:26:01 2022 -0700"
      },
      "message": "adb: add receive windowing.\n\nThe adb protocol struggles when used over long fat pipes, because the\na writer must wait for the receiver to acknowledge a write before it can\ncontinue writing data. For example, a connection with infinite\nbandwidth, but 50ms of latency is limited to 20MBps of throughput.\n\nWe still need some sort of acknowledgement, to be able to supply\nbackpressure. Take an initial stab at addressing this issue by\nimplementing receive windowing, which lets the writer know how many\nmore bytes it can write. Repurpose the unused field in A_OPEN to set the\ninitial window size, and add a payload to A_OKAY packet that\nacknowledges a specified number of bytes.\n\nTest: with adbd running on a separate machine connected with 10GbE:\n  [jmgao@atlas:~]# sudo tc qdisc replace dev lan root netem delay 50ms\n  [jmgao@atlas:~]$ ./adb kill-server \u0026\u0026 ADB_DELAYED_ACK\u003d0 ./adb connect 192.168.0.152:5555 \u0026\u0026 ./adb push 1g.bin 1g.bin\n  * daemon not running; starting now at tcp:5037\n  * daemon started successfully\n  connected to 192.168.0.152:5555\n  1g.bin: 1 file pushed, 0 skipped. 19.1 MB/s (1073741824 bytes in 53.685s)\n\n  [jmgao@atlas:~]$ ./adb kill-server \u0026\u0026 ADB_DELAYED_ACK\u003d1 ./adb connect 192.168.0.152:5555 \u0026\u0026 ./adb push 1g.bin 1g.bin\n  * daemon not running; starting now at tcp:5037\n  * daemon started successfully\n  connected to 192.168.0.152:5555\n  1g.bin: 1 file pushed, 0 skipped. 475.4 MB/s (1073741824 bytes in 2.154s)\nChange-Id: I6498d18e5ab4d866a81bf4d5c3d65cebb579c059\n"
    },
    {
      "commit": "d8f12396301d105ddda34e96f471af08b77650d5",
      "tree": "fc4da13c2e8f9f80744e0e7a96e238e818087ac4",
      "parents": [
        "82c70d626383af95faafc815df2fba5cb2a63255"
      ],
      "author": {
        "name": "Bradley Furman",
        "email": "bfurman@google.com",
        "time": "Mon Apr 11 16:36:33 2022 +0000"
      },
      "committer": {
        "name": "Bradley Furman",
        "email": "bfurman@google.com",
        "time": "Tue Apr 26 20:04:11 2022 +0000"
      },
      "message": "Makes one-device required if the relevant file exists.\n\nTest: Run the code with the relevant file and with and without using\none-device.\nBug: 223010443\n\nChange-Id: I7074ffe641b4696959172925f1742772f6ec4db0\n"
    },
    {
      "commit": "5703eb352612566e8e5d099c99c2cecfaf22429d",
      "tree": "faf21a4919626c0306a4605de1baa521cdf4ff0b",
      "parents": [
        "9864dad883fab140c65171f84d6c2dead338726e"
      ],
      "author": {
        "name": "Vince Harron",
        "email": "vharron@google.com",
        "time": "Fri Nov 12 12:40:58 2021 -0800"
      },
      "committer": {
        "name": "Vince Harron",
        "email": "vharron@google.com",
        "time": "Thu Dec 02 10:31:56 2021 -0800"
      },
      "message": "adb --one-device feature.\n\nAdded support for a new server option, --one-device.\n\nWhen a server is started with that option, it will only communicate with\nthe USB device serial number or device address specified.\n\nThis allows multiple adb servers to run in parallel on a single host,\neach communicating only with a single USB device.\n\nexample usage:\n$ adb --one-device usb:2-4 -P 1138 start-server\n$ adb --one-device usb:2-6 -P 1139 start-server\n$ adb -P 1138 devices -l\nList of devices attached\n97221FFBA00016         device usb:2-4 transport_id:1\n$ adb -P 1139 devices -l\nList of devices attached\n13031FDEE0000C         device usb:2-6 transport_id:1\n\nTest: Manually tested as shown above with \u0026 without libusb, Linux \u0026 macOS.\nChange-Id: Ibc4e3df7ecdefce737291185fa6a84071bff5340\n"
    },
    {
      "commit": "6256d99b285baa672cec1d0eeff65c43b1412c35",
      "tree": "4694e08d39f89483da0e5f6b17a7200e5d87ccfb",
      "parents": [
        "22f73e678c2b807595337bb595553cef456623d6"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu May 20 18:28:13 2021 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Jul 02 10:20:32 2021 -0700"
      },
      "message": "Add test for ConnectionState to_string.\n\nTest: treehugger\nChange-Id: I0d9fa8195075b8586348622ce6a68a71d024193e\n"
    },
    {
      "commit": "8e7c97292d634744233386e9b510d2422171115c",
      "tree": "6a728287c7789dce63d0ce117fede73d3d4be0d2",
      "parents": [
        "7852ca4f0083d7eabda7640c6a798be792584ab6"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Jun 17 04:19:45 2021 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Jun 21 16:45:51 2021 -0700"
      },
      "message": "Add attach/detach support to libusb backend.\n\nBug: http://b/186595076\nTest: treehugger\nChange-Id: I93f3c3e3bd28e9cd0c08e89d6c9454d36d8206f8\n"
    },
    {
      "commit": "c82a28012ce2a6ca608188ef0f59ffe93c57012c",
      "tree": "a6202500048efdfb25d462b6c43b6950dc5dd763",
      "parents": [
        "0d944e369e33843d07ab0a3467e57f96ec8ee91e"
      ],
      "author": {
        "name": "Joshua Duong",
        "email": "joshuaduong@google.com",
        "time": "Mon May 03 10:11:40 2021 -0700"
      },
      "committer": {
        "name": "Joshua Duong",
        "email": "joshuaduong@google.com",
        "time": "Mon May 03 10:11:40 2021 -0700"
      },
      "message": "adb disconnect by mdns instance name.\n\nWe aren\u0027t able to disconnect a device using mdns (e.g.\nmydevice._adb-tls-connect._tcp) because we only search for tcp devices\nin the form \u003cip/name\u003e:\u003cport\u003e. This CL will also try to search all\nconnected transports by the exact string passed by the user.\n\nBug: 186900454\n\nTest: adb disconnect mydevice._adb-tls-connect._tcp\nChange-Id: I0a16404ce53144a4349abe5ab3d12632064b7cb3\n"
    },
    {
      "commit": "e392e167b4c957f211f1125b3f4daef93367d27f",
      "tree": "253f73d5b99ba3519469d58c569789c7987fa76d",
      "parents": [
        "2e81f55cf3c09652e727a10bbaec88d0564f16ae",
        "f4ba8d73079b99532069dbe888a58167b8723d6c"
      ],
      "author": {
        "name": "Joshua Duong",
        "email": "joshuaduong@google.com",
        "time": "Thu Mar 18 15:24:17 2021 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Mar 18 15:24:17 2021 +0000"
      },
      "message": "Merge \"Openscreen discovery integration for adb client.\""
    },
    {
      "commit": "f4ba8d73079b99532069dbe888a58167b8723d6c",
      "tree": "e8bc3c32311cf4dd3f30e0e7185e40527cda0d27",
      "parents": [
        "8df540763119d5f1107032c97affc81edac75579"
      ],
      "author": {
        "name": "Joshua Duong",
        "email": "joshuaduong@google.com",
        "time": "Wed Jan 13 12:18:15 2021 -0800"
      },
      "committer": {
        "name": "Joshua Duong",
        "email": "joshuaduong@google.com",
        "time": "Wed Mar 17 11:14:40 2021 -0700"
      },
      "message": "Openscreen discovery integration for adb client.\n\nThe openscreen discovery library will allow adb client on all three\nplatforms to discover mdns services without relying on having Bonjour on\nthe host machine.\n\nIf the host does have bonjour running, we will fallback to using the\nMdnsResponder client.\n\nThe openscreen discovery code path will be disabled by default for now.\nYou can enable it by setting ADB_MDNS_OPENSCREEN\u003d1. Check `adb\nhost-features` string for \u0027openscreen_mdns\u0027 feature.\n\nTest: test_adb.py\n\nBug: 152884934\nChange-Id: Ief153afe7f080cb21134897d8eaf00d90c6983d8\n"
    },
    {
      "commit": "2dc61963a95bba11d7d9f1500869f92d90d642f8",
      "tree": "da1c111eabde0eb777b2fa857fb9058ca196388a",
      "parents": [
        "822f67479cc7b5449c9b46db345e294233cfb17a"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Feb 03 22:11:45 2021 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Mar 15 16:24:08 2021 -0700"
      },
      "message": "adb: add watchdog.\n\nBug: http://b/171526334\nTest: adbd_test\nChange-Id: I6fdb01855a4c0796bbf1e06efb24dd16120b5a26\n"
    },
    {
      "commit": "65d18e2c1cc48b585811954892311b28a4c3d188",
      "tree": "eecf14e167f3453cf7135215faeaffa2b7e4d868",
      "parents": [
        "b085177e9cd07a8b050cb7615e068327912b95ff"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Apr 22 20:57:26 2020 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Apr 27 14:38:28 2020 -0700"
      },
      "message": "adbd: avoid compiling more code in the daemon.\n\nStrip out more code that has no meaning on device, to \"improve\"\ncoverage.\n\nTest: test_device.py over TCP\nChange-Id: Id8d9fa6cc6c6c30773f67303bcc89e6d60824700\n"
    },
    {
      "commit": "5f63d1139b8322944e2e6a33e2c5c87de87ce9ff",
      "tree": "9c1e1b4b313d19a71bd06c7a3bed7e847e9f1b73",
      "parents": [
        "e22e161db4a5939e5c1f68b7d74e520a0b555fd8"
      ],
      "author": {
        "name": "Joshua Duong",
        "email": "joshuaduong@google.com",
        "time": "Tue Mar 31 08:39:24 2020 -0700"
      },
      "committer": {
        "name": "Joshua Duong",
        "email": "joshuaduong@google.com",
        "time": "Wed Apr 22 08:43:15 2020 -0700"
      },
      "message": "[adb client] Add \"mdns services\" command.\n\nThis command list all discovered mdns services, so we\ncan connect via service name later on.\n\nBug: 152521166\n\nTest: \u0027adb mdns services\u0027\nTest: test_adb.py\nChange-Id: I23d42a7933e67a65bd0c9924afd6abe5915c0a11\n"
    },
    {
      "commit": "e22e161db4a5939e5c1f68b7d74e520a0b555fd8",
      "tree": "a5d8cd20fa596c6d84440807aac4864949ea1f80",
      "parents": [
        "d7c49ec22c25b9b53929510f430befe7cac62217"
      ],
      "author": {
        "name": "Joshua Duong",
        "email": "joshuaduong@google.com",
        "time": "Tue Mar 31 10:58:50 2020 -0700"
      },
      "committer": {
        "name": "Joshua Duong",
        "email": "joshuaduong@google.com",
        "time": "Wed Apr 22 08:43:15 2020 -0700"
      },
      "message": "[adb client] Add \"adb mdns check\" command.\n\nThis command will check if the mdns daemon is available on the host\nmachine.\n\nBug: 152510294\n\nTest: pkill -9 mdnsd; adb mdns check; mdnsd; adb mdns check;\nTest: test_adb.py\nChange-Id: If644678a339763817a8a7adcbdc545626d161aba\n"
    },
    {
      "commit": "77b8ff316a62842fc006ee35772db6567b0878c7",
      "tree": "56c38b0640b771c7e575adee4ab66b6fe4cf1111",
      "parents": [
        "8632ca12811aecc96d32ee2d1ee78245164c5d36"
      ],
      "author": {
        "name": "Joshua Duong",
        "email": "joshuaduong@google.com",
        "time": "Thu Apr 16 15:58:19 2020 -0700"
      },
      "committer": {
        "name": "Joshua Duong",
        "email": "joshuaduong@google.com",
        "time": "Fri Apr 17 16:38:34 2020 -0700"
      },
      "message": "adb: change mdns tls service names (RFC 6763).\n\nEven though mdnsresponder seems to allow us to use _adb_secure_connect\nand _adb_secure_pairing as service names, these names violate the syntax\noutlined in RFC6763, and may not be compatible with other dns-sd\nimplementations.\n\nAlso address some comments from a previous CL.\n\nBug: 154268895\n\nTest: atest adbd_test\nChange-Id: Ia872e976fc4276587b500a827a41d46d9dc755dd\n"
    },
    {
      "commit": "816c2d2442ef84611c27c0dabd642f78124f56ca",
      "tree": "b1282ff03d215ae78ab86e8189e78e16fc7b6124",
      "parents": [
        "11bf0307ab15fc077f44033b53b68caed472f71e"
      ],
      "author": {
        "name": "Yurii Zubrytskyi",
        "email": "zyy@google.com",
        "time": "Thu Mar 26 18:19:28 2020 -0700"
      },
      "committer": {
        "name": "Yurii Zubrytskyi",
        "email": "zyy@google.com",
        "time": "Thu Apr 09 22:26:48 2020 -0700"
      },
      "message": "[adb] Don\u0027t copy features set on each get()\n\nThe features are already cached in a static and don\u0027t change.\nLet\u0027s return the cached set instead of copying it every time.\n\nBug: 150183149\nTest: manual\nChange-Id: Ifdca852cc3b32e09e50ea4771f7878987c46cce8\n"
    },
    {
      "commit": "bea8f3c0203a77a114bf70885befc582f3f6cef6",
      "tree": "422343793a4b65e6221d6af04e181f2d30473ed2",
      "parents": [
        "c79bc08eb4291e3b09f2c07788822871e476bbcd"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Apr 06 12:07:56 2020 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Apr 06 14:33:14 2020 -0700"
      },
      "message": "adb: add option to disable kill-server.\n\nIn the post-apocalypse, it\u0027s increasingly common for people to use ssh\nport forwarding to use an adb client with a remote adb server. This\nresults in `adb kill-server` being catastrophic, because the client has\nno way of restarting the server on the other end. Android Studio in\nparticular has an unforunate habit of trying to manage adb\u0027s life cycle\nsuch that starting or exiting Studio will result in a kill-server.\n\nAdd the ADB_REJECT_KILL_SERVER environment variable which ignores\nkill-server, to make this scenario a bit better.\n\nBug: http://b/152251952\nTest: ADB_REJECT_KILL_SERVER\u003d1 adb start-server; adb kill-server\nChange-Id: I5533a6dcbdb9220526a6fcf9ca31d9fcef1cec17\n"
    },
    {
      "commit": "6b55e755786fff16a04471b56cfaf8a79adf8004",
      "tree": "6463441e90f25b44d46e174612637dd7713c8170",
      "parents": [
        "de9078dd2983da810c9a53c2cb2f230ab838829a"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Mar 27 18:09:56 2020 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Mar 30 16:43:06 2020 -0700"
      },
      "message": "Move adbd\u0027s legacy USB implementation to fastboot.\n\nThis code path is effectively dead in adbd, and fastboot\u0027s dependency on\nlibadbd makes it hard to refactor adbd\u0027s dependencies.\n\nBug: http://b/150317254\nTest: built and flashed aosp_walleye-eng\nChange-Id: I5118136d32fdcbbd011559ed0a4a71e1dc7bf064\n"
    },
    {
      "commit": "232c39c6f6334ba30b107288138ff68c1c5282ff",
      "tree": "9e021517a120dccad43f763c20252c020cbd0c84",
      "parents": [
        "26dba9ba9697c6b71a26d20aed281fd6ca9a97ab"
      ],
      "author": {
        "name": "Daniel Colascione",
        "email": "dancol@google.com",
        "time": "Wed Nov 13 17:51:19 2019 -0800"
      },
      "committer": {
        "name": "Daniel Colascione",
        "email": "dancol@google.com",
        "time": "Fri Mar 27 20:51:19 2020 +0000"
      },
      "message": "Revert \"Revert \"Delay initial accept() until server initialized\"\"\n\nThis reverts commit bf34b223f9721aba534bd9e387680838a9c40279.\n\nTest: actually build device and host adb this time\nChange-Id: I9f9375aa83c9d023a1e26d2f95676b734e12f926\n"
    },
    {
      "commit": "bd77521d9f898aa17cf8aa5ab64d8f4c287f953c",
      "tree": "e14c2bf07a3e22022367c65cd5848855af998835",
      "parents": [
        "bd4fb2d23907a7ae50cfafbf27fd51c84903e08c"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Feb 26 16:39:20 2020 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Feb 28 12:58:42 2020 -0800"
      },
      "message": "adbd: add runtime-configurable logging.\n\nAdd some requested logging options that can be turned on at runtime\nwithout having to restart adbd.\n\nBug: http://b/141959374\nTest: manual\nChange-Id: Ib97acc6d199e0b91238a6758e18b7cb75f8688d9\n"
    },
    {
      "commit": "64fab7573566c80fb3003a3b7ca9063e240e8db5",
      "tree": "082ff2b553343e1c70db8d02a92ccb94d0f5dc47",
      "parents": [
        "290ccb5dfe946d4dd39a6b8e584dd11ecd61779e"
      ],
      "author": {
        "name": "Joshua Duong",
        "email": "joshuaduong@google.com",
        "time": "Tue Jan 21 13:19:42 2020 -0800"
      },
      "committer": {
        "name": "Joshua Duong",
        "email": "joshuaduong@google.com",
        "time": "Fri Feb 21 21:07:13 2020 +0000"
      },
      "message": "[adbwifi] Add A_STLS command.\n\nThis command will be sent by adbd to notify the client that the\nconnection will be over TLS.\n\nWhen client connects, it will send the CNXN packet, as usual. If the\nserver connection has TLS enabled, it will send the A_STLS packet\n(regardless of whether auth is required). At this point, the client\u0027s\nonly valid response is to send a A_STLS packet. Once both sides have\nexchanged the A_STLS packet, both will start the TLS handshake.\n\nIf auth is required, then the client will receive a CertificateRequest\nwith a list of known public keys (SHA256 hash) that it can use in its\ncertificate. Otherwise, the list will be empty and the client can assume\nthat either any key will work, or none will work.\n\nIf the handshake was successful, the server will send the CNXN packet\nand the usual adb protocol is resumed over TLS. If the handshake failed,\nboth sides will disconnect, as there\u0027s no point to retry because the\nserver\u0027s known keys have already been communicated.\n\nBug: 111434128\n\nTest: WIP; will add to adb_test.py/adb_device.py.\n\nEnable wireless debugging in the Settings, then \u0027adb connect\n\u003cip\u003e:\u003cport\u003e\u0027. Connection should succeed if key is in keystore. Used\nwireshark to check for packet encryption.\n\nChange-Id: I3d60647491c6c6b92297e4f628707a6457fa9420\n"
    },
    {
      "commit": "84613875270fb3d083bf5da280ffc6f32529270d",
      "tree": "c9ec302978f2c9bf5b531d5fdb33a74a1ae1ea3e",
      "parents": [
        "cf8040b9d0936306c06aaeb961fb9d8b72f67509"
      ],
      "author": {
        "name": "Jason Jeremy Iman",
        "email": "jasongustaman@google.com",
        "time": "Fri Jul 19 12:44:39 2019 +0900"
      },
      "committer": {
        "name": "Jason Jeremy Iman",
        "email": "jasongustaman@google.com",
        "time": "Wed Dec 04 10:05:05 2019 +0900"
      },
      "message": "Enable \"localfilesystem\" UNIX domain socket for ADB.\n\nThis patch introduce \"service.adb.listen_addrs\", a new\nstring type property, while keeping the old properties.\nThe new property added in this patch is used to listen\non UNIX domain socket \"localfilesystem\".\n\n\"service.adb.listen_addrs\" can be used to listen on\nmultiple addresses, such as tcp:5555 and tcp:5556.\nIt is separated by \u0027,\u0027 (comma) character.\n\nIn the process of introducing the new socket type, the\nmethod tcp_connect is removed and combined into\nsocket_spec_connect.\n\nWithout specifying using the new property, adb will\ntry to listen on both tcp and vsock (following the\nprevious implementation).\n\nSome examples of the new property value are:\n  - \"tcp:5555\"\n  - \"vsock:5555\"\n  - \"localfilesystem:/tmp/test\"\n  - \"tcp:5555,vsock:5555\"\n\nBug: 133378083\nTest: On master-arc-dev:\n        adb root;\n        setprop service.adb.listen_addrs localfilesystem:\n\t    \u003cpath_to_socket\u003e;\n        adb connect localfilesystem:\u003cpath_to_socket\u003e;\n        adb -s localfilesystem:\u003cpath_to_socket\u003e shell;\n\t    inside Chrome OS.\nTest: On aosp_bluefin:\n        setprop service.adb.listen_addr tcp:5555;\n        adb connect \u003cIP\u003e:5555; adb shell;\nTest: On aosp_bluefin:\n        setprop service.adb.tcp.port 5555;\n        adb connect \u003cIP\u003e:5555; adb shell;\nTest: On aosp_bluefin:\n        setprop service.adb.listen_addrs tcp:5555,tcp:6666;\n        adb connect \u003cIP\u003e:5555; adb shell;\n        adb connect \u003cIP\u003e:6666; adb shell;\nTest: On aosp_bluefin:\n        ./adb_test;\nTest: On cuttlefish:\n        launch_cvd;\n        adb -s 127.0.0.1:6520 shell;\nTest: Ran host tests:\n        ./adb_test;\n        ./adb_integration_test_adb;\n        ./adb_integration_test_device;\n\nChange-Id: I8289bf0ab3305cf23ce5695ffba46845d58ef6bb\n"
    },
    {
      "commit": "bf34b223f9721aba534bd9e387680838a9c40279",
      "tree": "ef76a2289950c97fc2b9eb6b09dd8def4dd96d4c",
      "parents": [
        "5bbe8aae37c4f647936963ef6be8b7ed4a359de0"
      ],
      "author": {
        "name": "Raman Tenneti",
        "email": "rtenneti@google.com",
        "time": "Tue Nov 12 18:57:51 2019 +0000"
      },
      "committer": {
        "name": "Raman Tenneti",
        "email": "rtenneti@google.com",
        "time": "Tue Nov 12 18:57:51 2019 +0000"
      },
      "message": "Revert \"Delay initial accept() until server initialized\"\n\nThis reverts commit 5bbe8aae37c4f647936963ef6be8b7ed4a359de0.\n\nReason for revert: BUG: 144355953\n\nChange-Id: Icb3d87e1f697ff60fc1262798cb19be8705e3740\n"
    },
    {
      "commit": "5bbe8aae37c4f647936963ef6be8b7ed4a359de0",
      "tree": "b00b1021a55d4d9d8c39859f0e229f65888961c1",
      "parents": [
        "0329373c1a904ee50330fde7bace63ef75663b80"
      ],
      "author": {
        "name": "Daniel Colascione",
        "email": "dancol@google.com",
        "time": "Thu Nov 07 20:48:21 2019 -0800"
      },
      "committer": {
        "name": "Daniel Colascione",
        "email": "dancol@google.com",
        "time": "Thu Nov 07 20:58:28 2019 -0800"
      },
      "message": "Delay initial accept() until server initialized\n\nWhen the adb client starts the adb server, it waits until the server\nreports that it\u0027s fully-initialized (via reply-fd) before executing\nits adb client operation. This wait prevent that adb client from\ntalking to the server while it\u0027s initializing and becoming confused.\nBut if a *different* adb client connects to the server while it\u0027s\ninitializing, *that* client can temporarily observe unexpected state\nwhile the server initializes itself. For example, such a client can\nobserve a device that\u0027s alive and connected as being offline while the\nserver connects to it.\n\nThe new socket activation support makes this race more apparent, since\nin the socket activation configuration, there\u0027s no initial adb client\nwaiting for the server\u0027s all-clear indication and so even the first\nclient observes the partially-initialized server state.\n\nThis CL prevents the server accepting *any* client connection until\nthe server has fully initialized itself, preventing all clients, not\njust the initial client, from observing a\npartially-initialized server.\n\nTest: test_adb.py; test_adb gtest binary\nTest: [with socket activation] adb kill-server; adb devices\nChange-Id: I5d399ee62436eee63340b6b8b0f64131ad17ac65\n"
    },
    {
      "commit": "7cac88a66b26c23f12894967f221532ecf2d20b7",
      "tree": "7d1f2848b51400defb5cb169719b68f67d567704",
      "parents": [
        "ae3f96d5c37cd7bd936497a90641ee5332fa3515"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Oct 22 12:30:39 2019 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Nov 04 15:46:20 2019 -0800"
      },
      "message": "adbd: use libadbd_auth for authentication.\n\nBug: http://b/137798163\nTest: for i in `seq 1 100000`; do echo $i; adb wait-for-device shell \"su 0 stop; su 0 start; sleep 10\"; adb disconnect; done\nChange-Id: Ie481e79a48c4aabf18ef797317ba18f207808c63\n"
    },
    {
      "commit": "077907550f42ba9ca1d9b306e73823a159b32e13",
      "tree": "1a189d914185676c369da914a26054ecf214fa0b",
      "parents": [
        "68e61928b63ae46d26013a617ff843b8d274b6fe"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Sep 13 00:12:26 2019 +0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Sep 13 00:26:37 2019 +0800"
      },
      "message": "adb: fix old host transport selection.\n\nWe regressed handling of the old host transport selection syntax, which\nbroke users that reimplement adb themselves (e.g. Studio via ddmlib).\n\nBug: https://issuetracker.google.com/140369526\nTest: adb raw \"host-serial:822X0028S:forward:tcp:42929;localabstract:/com.example.ndktest-0/platform-1568299082100.sock\"\nTest: ./test_device.py\nChange-Id: Iaaec8fde952316fe9bf2a6f6c6c4a3bc9f74bf72\n"
    },
    {
      "commit": "8517fd7c6468a2bc0f7c17d42b7d9ae9f1a41ddf",
      "tree": "58659a9e5d28e5583cbccab322bba61863282ec9",
      "parents": [
        "8a37981618bade8e764a5d8d5a487acef9351550",
        "e031c5f2f2c1dcdf12948a4af72c43e16ba5a6e5"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Aug 08 13:54:00 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Aug 08 13:54:00 2019 -0700"
      },
      "message": "Merge changes I4d6bda45,I72576e1f\nam: e031c5f2f2\n\nChange-Id: I83c66644227840376d8ee31dfa250539a24f3315\n"
    },
    {
      "commit": "d4a2ee6323611c5463a81ef46133f3920b373131",
      "tree": "ab915793f9230cf6e48f254972736548d2cab1be",
      "parents": [
        "ed00ae1f70cd2a4214aed3368ea709b0e8a9fbdc"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Aug 06 17:01:11 2019 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Aug 06 17:01:11 2019 -0700"
      },
      "message": "adb: fix transport acquisition for forward, reverse.\n\nPreviously, we were calling acquire_one_transport with all empty\nparameters, which would work when only one device is connected, but fail\nwhen there are multiple. We\u0027ve already acquired a transport and put it\ninto the socket as part of the forward request, so just use that\ndirectly.\n\nBug: http://b/136198949\nTest: test_device.py with multiple devices connected\nChange-Id: I4d6bda45b36b71e418ecd9ead61b7379e68aa19b\n"
    },
    {
      "commit": "1279305d5bb4b09200d3ce9d7f91c16e4940d226",
      "tree": "b515c4e43673f16d3f024e2c1c0617d43c2b140f",
      "parents": [
        "cb473dc934445f2f99dad348170cb65b758e5445",
        "02b7427480b2e22f14bd602a9f49b15e33d4fdf3"
      ],
      "author": {
        "name": "Michael Groover",
        "email": "mpgroover@google.com",
        "time": "Fri May 10 17:21:47 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri May 10 17:21:47 2019 -0700"
      },
      "message": "Merge \"Notify the framework when an adb key is authorized\" into qt-dev\nam: b9c555e2cf\n\nChange-Id: I664ba3acfb8295ccf7b773e07d2d007ff942bc40\n"
    },
    {
      "commit": "02b7427480b2e22f14bd602a9f49b15e33d4fdf3",
      "tree": "981f4539a9b5430ed59e00d418653d5e67ebce5d",
      "parents": [
        "cf8c4478c6aa167200d757b25ba337004172ab95"
      ],
      "author": {
        "name": "Michael Groover",
        "email": "mpgroover@google.com",
        "time": "Thu Apr 25 18:33:35 2019 -0700"
      },
      "committer": {
        "name": "Michael Groover",
        "email": "mpgroover@google.com",
        "time": "Thu May 09 16:05:40 2019 -0700"
      },
      "message": "Notify the framework when an adb key is authorized\n\nBug: 124076524\nTest: atest AdbDebuggingManagerTest\nChange-Id: If73b81ca73ba4d64763cf49c1bbe42de81fa1cb6\n"
    },
    {
      "commit": "0d1e8fd532094ec45afcbc21ab24b052103585a3",
      "tree": "5c61642b03c01f1f1bbee8186ce3d8e3f2a916b2",
      "parents": [
        "8829d15b1a91140a42af20e7e221895669e2cec2"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri May 03 09:02:45 2019 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri May 03 12:49:31 2019 -0700"
      },
      "message": "libbase: add ConsumePrefix/ConsumeSuffix.\n\nadb was already using ConsumePrefix, and now we have another would-be\nuser in cutils. (There appears to be one place in adb that should use\nConsumeSuffix, so I\u0027m assuming we\u0027ll want that sooner or later.)\n\nI\u0027ve kept these inline because adb and google3\u0027s versions both were, and\nI\u0027m easily led.\n\nTest: treehugger\nChange-Id: I29d99032f6f6ccbfaefece59725db8afb02a4c87\n"
    },
    {
      "commit": "81e9c42acfaf17b81ec576365c0ba646438c07fc",
      "tree": "7ee278154eeb305d522284cc50abeccb70d1374c",
      "parents": [
        "641c7080e7146eb5722efba28e9d652d8aaa5484"
      ],
      "author": {
        "name": "Tao Bao",
        "email": "tbao@google.com",
        "time": "Sun Apr 07 23:24:03 2019 -0700"
      },
      "committer": {
        "name": "Tao Bao",
        "email": "tbao@google.com",
        "time": "Fri Apr 26 12:27:17 2019 -0700"
      },
      "message": "adb: Recognize rescue mode.\n\nThis CL adds client support to recognize the rescue mode (which will be\nserved by recovery image). It also allows waiting for a device to enter\nrescue mode. The support for the actual rescue commands will be added in\nfollow-up CLs.\n\nBug: 128415917\nTest: `adb devices` recognizes devices under rescue mode.\nTest: `adb wait-for-rescue` waits for device to be in rescue mode.\nChange-Id: I367d7339fe68006aba09a1e3db6370d472296676\nMerged-In: I367d7339fe68006aba09a1e3db6370d472296676\n(cherry picked from commit 55d407ec4a0b23f1e20db298b4989068a820087f)\n"
    },
    {
      "commit": "9d6eca59402f9b25040e6ccd4f0d0e8420a399ba",
      "tree": "04c4d923f6226147ed76a39f269482557dfcfbbf",
      "parents": [
        "beaa884078bcab7316678c3259303199b201addc"
      ],
      "author": {
        "name": "Tao Bao",
        "email": "tbao@google.com",
        "time": "Sun Apr 07 23:24:03 2019 -0700"
      },
      "committer": {
        "name": "Tao Bao",
        "email": "tbao@google.com",
        "time": "Wed Apr 17 13:47:02 2019 -0700"
      },
      "message": "adb: Recognize rescue mode.\n\nThis CL adds client support to recognize the rescue mode (which will be\nserved by recovery image). It also allows waiting for a device to enter\nrescue mode. The support for the actual rescue commands will be added in\nfollow-up CLs.\n\nBug: 128415917\nTest: `adb devices` recognizes devices under rescue mode.\nTest: `adb wait-for-rescue` waits for device to be in rescue mode.\nChange-Id: I367d7339fe68006aba09a1e3db6370d472296676\n"
    },
    {
      "commit": "3a2172b79bd9d07f3314e3d392ec4701116620cb",
      "tree": "a8b0ebda996189f7cdec5a5b3a9256c248165cbc",
      "parents": [
        "dcaede059f840a53c660f360cedc481f5fba1a52"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Mar 28 15:47:44 2019 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Mar 28 15:47:44 2019 -0700"
      },
      "message": "adb: make `adb reconnect` perform a USB reset.\n\nBug: http://b/128941083\nTest: manual\nChange-Id: Iaf46d2c46cc82b590768004486d119244591c8e2\n"
    },
    {
      "commit": "b13f3cd7605ca0124ccc1e19ae42fc18d07ab661",
      "tree": "305259d6ea280c68ff3fd68c7ff76e0757da6ad5",
      "parents": [
        "10779bdb6b4c736dedbf2b8e70f21fd505e9ef98"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Feb 20 20:37:26 2019 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Feb 25 13:49:25 2019 -0800"
      },
      "message": "adb: tell the client what transport it received.\n\nPrerequisite for making `adb root` wait for the device that it told to\nrestart to disappear: the client needs to know which transport to wait\non.\n\nBug: http://b/124244488\nTest: manual\nChange-Id: I474559838ad7c0e961e9d2a98c902bca3b60d6c8\n"
    },
    {
      "commit": "cd30bb31f1c251d1a6b4b16244b26b8689dfe4eb",
      "tree": "bea373e280d09fbe4d0efd494a87206a382195ed",
      "parents": [
        "2f1cac23b68f53d5f69d39dc954f9ece56660ee9"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Feb 20 19:30:59 2019 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Feb 25 13:49:25 2019 -0800"
      },
      "message": "adb: switch handle_host_request to string_view.\n\nTest: test_adb.py\nTest: test_device.py\nChange-Id: Ideae5262a6dff2e27c50f666144d48f874837290\n"
    },
    {
      "commit": "637aaf5a61064eabb98355c561c1e9ef42daa789",
      "tree": "a927dce5efa159fca4dc3b384bcec4518d133000",
      "parents": [
        "0560feb3bc387398394aa86b5066624f183cd97e"
      ],
      "author": {
        "name": "Cody Schuffelen",
        "email": "schuffelen@google.com",
        "time": "Fri Jan 04 18:51:11 2019 -0800"
      },
      "committer": {
        "name": "Cody Schuffelen",
        "email": "schuffelen@google.com",
        "time": "Fri Jan 25 17:55:06 2019 -0800"
      },
      "message": "Add native vsock support to ADB.\n\nvsock is a socket address family for communicating into and out of\nvirtual machines. Addresses have a port and CID. The CID is unique to\neach virtual machine on the computer. The VM host always has CID 2.\nhttp://man7.org/linux/man-pages/man7/vsock.7.html\n\nInside the android guest, the adb daemon hosts a vsock server with\nVMADDR_CID_ANY, automatically using the guest CID. The adb server\ncan now connect to addresses of the form vsock:cid:port, where the CID\nmust be specified and the port defaults to 5555.\n\nThis is a significant speed improvement for ADB connections in\nCuttlefish, with 150-200 MB/s for `adb push` and 100-150 MB/s for\n`adb pull`. It also allows removing some proxying steps from Cuttlefish,\nsimplifying the full connection path, and removes a dependency on the\nunstable ivshmem protocol.\n\nCommands tested against a Cuttlefish VM with CID 3:\nadb connect vsock:3:5555\nadb -s vsock:3:5555 shell\nadb disconnect vsock:3:5555\n\nSupporting \"adb disconnect\" and \"adb -s\" required modifying some of the\nparts that parse addresses / serials.\n\npush/pull trials with native adb vsock support in cuttlefish:\n\n100m: 1 file pushed. 297.6 MB/s (104857600 bytes in 0.336s)\n100m: 1 file pushed. 270.3 MB/s (104857600 bytes in 0.370s)\n100m: 1 file pushed. 271.7 MB/s (104857600 bytes in 0.368s)\n100m: 1 file pushed. 250.5 MB/s (104857600 bytes in 0.399s)\n100m: 1 file pushed. 277.1 MB/s (104857600 bytes in 0.361s)\n100m: 1 file pushed. 263.5 MB/s (104857600 bytes in 0.379s)\n100m: 1 file pushed. 242.6 MB/s (104857600 bytes in 0.412s)\n100m: 1 file pushed. 271.8 MB/s (104857600 bytes in 0.368s)\n100m: 1 file pushed. 267.1 MB/s (104857600 bytes in 0.374s)\n\n/data/local/tmp/100m: 1 file pulled. 212.8 MB/s (104857600 bytes in 0.470s)\n/data/local/tmp/100m: 1 file pulled. 236.7 MB/s (104857600 bytes in 0.423s)\n/data/local/tmp/100m: 1 file pulled. 201.2 MB/s (104857600 bytes in 0.497s)\n/data/local/tmp/100m: 1 file pulled. 255.6 MB/s (104857600 bytes in 0.391s)\n/data/local/tmp/100m: 1 file pulled. 199.6 MB/s (104857600 bytes in 0.501s)\n/data/local/tmp/100m: 1 file pulled. 214.6 MB/s (104857600 bytes in 0.466s)\n/data/local/tmp/100m: 1 file pulled. 254.2 MB/s (104857600 bytes in 0.393s)\n/data/local/tmp/100m: 1 file pulled. 212.5 MB/s (104857600 bytes in 0.471s)\n/data/local/tmp/100m: 1 file pulled. 218.9 MB/s (104857600 bytes in 0.457s)\n/data/local/tmp/100m: 1 file pulled. 223.6 MB/s (104857600 bytes in 0.447s)\n\nBug: 121166534\nChange-Id: I50f21fb5c9acafb8daa789df4e28c9e1bbbbf2ef\nTest: adb connect/shell/disconnect\n"
    },
    {
      "commit": "6dd5f770534d52c3624cd8500d3f51042902598b",
      "tree": "bfd015a230ff27cd2c377bfa2a110f533ee4c5aa",
      "parents": [
        "4a037e2f8d047955f9e94eaaad9641110399657c"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Dec 27 11:16:27 2018 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Dec 27 11:19:44 2018 -0800"
      },
      "message": "adbd: strip nulls from all service strings.\n\nOther services are checking for exact equality, like jdwp.\n\nTest: adb jdwp\nChange-Id: I1081904621b111b0143a275bd9337f903fe9c111\n"
    },
    {
      "commit": "6dbf579e448b1d25eba03ede5cfcebb5e3c5e080",
      "tree": "e785ec4d592e909ce4794a1cdd790722e36c1b48",
      "parents": [
        "ab9958e27fafbbc11fe5b2a120aad9eed664967d"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Dec 13 14:21:00 2018 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Dec 21 11:53:27 2018 -0800"
      },
      "message": "adb: finish switching service creation to string_view.\n\nTest: test_adb.py\nTest: test_device.py\nTest: $ANDROID_HOST_OUT/nativetest64/adb_test/adb_test\nTest: adb shell /data/nativetest64/adbd_test/adbd_test\nChange-Id: If4ea92aee1c0264d946de72483f8d715d96fcfd8\n"
    },
    {
      "commit": "f0c4403a48272d0cbdd614cc6ba140fdbd8aa686",
      "tree": "a8cc32b926843c81f410bc7a1682c37bba672368",
      "parents": [
        "505b9d90ee37240ffc838abae402b358b2960faf"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Dec 12 16:12:28 2018 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Dec 21 01:43:31 2018 -0800"
      },
      "message": "adb: switch unix_open to string_view.\n\nTest: test_adb.py\nTest: test_device.py\nTest: $ANDROID_HOST_OUT/nativetest64/adb_test/adb_test\nTest: adb shell /data/nativetest64/adbd_test/adbd_test\nChange-Id: Ieecc9b1b7f2111f4da45d4bbd1b7703535fe7d4d\n"
    },
    {
      "commit": "e64126b0e3735f94c08f1802f0ef483b17b2e37d",
      "tree": "a90ac1906d678934278fe88afd10902fd943d927",
      "parents": [
        "2b8b5059abd1ffacf7520e952b806bf667c73b21"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 19 13:59:44 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 19 14:04:24 2018 -0700"
      },
      "message": "adb: rationalize fatal/error logging.\n\nLet\u0027s use LOG(FATAL)/PLOG(FATAL) for actual fatal stuff.\n\nAdd a Windows error(3) and move folks who didn\u0027t really mean \"abort\"\nfatal over to it. Also get rid of syntax_error which wasn\u0027t adding a\nlot of value, and most of the places it was adding \"usage: \" didn\u0027t seem\nentirely appropriate anyway.\n\nIn particular, we seemed to have confused fastdeploy.cpp into aborting\nin most user error cases, and none of the reviewers noticed. Clearly\nwe\u0027d all lost track of far too many options.\n\n(I\u0027ve also cleaned up a few random instances of fprintf(3) + exit(2).)\n\nBug: N/A\nTest: manual\nChange-Id: I3e8440848a24e30d928de9eded505916bc324786\n"
    },
    {
      "commit": "04b575d36f8bb8d195edd2c85889c864f6dc5111",
      "tree": "6c63ac76e8b06a50be02d9eebdf6c7f9f3d5a930",
      "parents": [
        "43ea22458e21a58c5e04575d1bbf4dbb5e31f164"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Sun Sep 02 19:19:39 2018 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Sun Sep 02 19:26:25 2018 -0700"
      },
      "message": "adb: win32: fix ReportServerStartupFailure\n\nThe code was passing an fd from adb_open() to android::base::ReadFdToString() which actually\ntakes a C-Runtime fd (on Windows), so it wasn\u0027t working.\n\nThe fix is to use APIs that deal with C-Runtime fds:\n* unix_open()\n* android::base::unique_fd\n* unix_lseek() (added in this change)\n\nI also removed an unnecessary call to GetProcessId() since we already have the process id\nfrom the structure returned by CreateProcess().\n\nTest: adb start-server on Win10 and Ubuntu (with a failing server)\nTest: mma\n\nChange-Id: Id6e2dd5532a02fe5d9caf96aa007a1b3434a0b59\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "1886189c01f857d87f811e6ed15ad23b93ddf67e",
      "tree": "87d5b390b7b087a9497bef6d4affcdf8b20b3afb",
      "parents": [
        "915031009543608c2394fd4b1835d2f00c9783b6"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Aug 29 14:58:02 2018 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Thu Aug 30 11:28:18 2018 -0700"
      },
      "message": "Convert fastboot to Soong\n\nAlso fix adb\u0027s version number to match.\n\nSee build/soong/README.md for more information.\n\nTest: cd system/core/fastboot; mma\nTest: fastboot --version\nTest: adb --version\nTest: out/host/linux-x86/nativetest/fastboot_test/fastboot_test\nTest: out/host/linux-x86/nativetest64/fastboot_test/fastboot_test\nChange-Id: I65ea39af9183c602e84f3bc0e4a0d066a30fc464\n"
    },
    {
      "commit": "d3067475cbe7dedb38030e743dbf30e29f8a2a8f",
      "tree": "43c67d9b2a29ec5b0d8c37857c440d396442f042",
      "parents": [
        "917fbb4a8b9c1a14797c771bf795a216855e61a3"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Aug 07 14:14:21 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Aug 07 14:24:36 2018 -0700"
      },
      "message": "adb: clean up handle_host_request.\n\nPreviously, we were returning the result of SendOkay/SendFail in a few\nplaces after handling a host request, which is incorrect for two\nreasons. First, the return type of SendOkay/SendFail is bool, and\nhandle_host_request was expected to return 0 on success. Second, we\ndon\u0027t care if the SendOkay fails; if we got to that point, we\u0027re done\nwith the request, regardless of whether we succeeded to report our\nresult. The result of this was a spurious failure result reported after\nthe initial result, which was ignored by the adb client.\n\nTest: manually straced adb server\nTest: python test_adb.py\nTest: python test_device.py\nChange-Id: I7d45ba527e1faccbbae5b15e7a0d1557b0a84858\n"
    },
    {
      "commit": "7d130c49c15c22992efe531e883108f4e9f5896b",
      "tree": "e7b405c8085c8d014dddee2e0b94346bda646797",
      "parents": [
        "028e97e5edc98373a0b9c7216e3b116e005bd463"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Aug 06 18:38:47 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Aug 06 18:50:10 2018 -0700"
      },
      "message": "adb: actually enable fdsan.\n\nadb was using a custom unique_fd closer that didn\u0027t have an\nimplementation for fdsan, which meant that none of our FDs were\nactually tracked. Guard this behind ifdefs so that we only use this\non Windows, and delete our implementation of Pipe in favor of the one\nin libbase while we\u0027re at it. libbase\u0027s implementation always sets\nO_CLOEXEC, so fix up the instance of Pipe that doesn\u0027t expect that.\n\nTest: mma\nTest: adb start-server\nTest: debuggerd `pidof adbd`\nChange-Id: Ic29d641a2f93fb42384b00c51775048c8bcbe152\n"
    },
    {
      "commit": "dd655ec95fb929a5d78ac8d9ac5c3e8a459b92d3",
      "tree": "6c6de31287b65b8945c8bb0a84f01046cfb0f873",
      "parents": [
        "e6dc1f2a8fdcc8bb4e8170e71ab3fe55a2d93524"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Jul 30 18:49:03 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Jul 31 15:36:55 2018 -0700"
      },
      "message": "adb: move list-forward, kill-forward back into handle_forward_request.\n\nThe daemon-side reverse functions depended on handle_forward_request:\nmove them back instead of duplicating the logic we had in\nhandle_host_request. Accomplish what we originally wanted to do in this\nchange by changing the transport argument of handle_forward_request to a\nstd::function that acquires a transport, either via\nacquire_one_transport or immediately returning a value that we already\nhave.\n\nAs a side effect, fix a bug where we would emit spurious errors for host\nservice requests.\n\nBug: http://b/112009742\nTest: echo \"001chost:connect:127.0.0.1:5555\" | nc localhost 5037\nTest: python test_device.py\nTest: python test_adb.py\nChange-Id: Iccc555575df6dbd7de10382854c4ea2c6f4beeaa\n"
    },
    {
      "commit": "7c3b2620e3916e8b9e7c8f90123742735c1f4300",
      "tree": "c603d8162e3662692e19eb6faf43af91acc3aff1",
      "parents": [
        "4aeeec7b162d076537b5686d837ed4ab2ee4f7e3"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Jul 19 17:59:45 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Jul 23 14:11:26 2018 -0700"
      },
      "message": "adb: fix forward --list, --remove(-all) with multiple devices.\n\nAlso, fix error reporting when forward fails because we can\u0027t get a\ntransport, because there\u0027s either zero, or more than one transport that\nmatches the request.\n\nBug: http://b/111021517\nBug: http://b/111374366\nChange-Id: Ia4c3bf6215c3ff4e9023ba1af556f5b10463bd6d\nTest: manual\n"
    },
    {
      "commit": "b4edbdf7ebd9fd848aafbd30819eee80cc018573",
      "tree": "8636f73914d82f4274bbf2af1542f1ff0fa875bf",
      "parents": [
        "ce7a284729ae844c77ace2a45376c1a62d09ea1d"
      ],
      "author": {
        "name": "Luis Hector Chavez",
        "email": "lhchavez@google.com",
        "time": "Wed Jul 18 21:18:27 2018 -0700"
      },
      "committer": {
        "name": "Luis Hector Chavez",
        "email": "lhchavez@google.com",
        "time": "Thu Jul 19 09:41:40 2018 -0700"
      },
      "message": "adb: Remove most C-style allocations\n\nThis change gets rid of most malloc/calloc/free calls. The future is\nnow!\n\nBug: None\nTest: test_device.py\nChange-Id: Iccfe3bd4fe45a0319bd9f23b8cbff4c7070c9f4d\n"
    },
    {
      "commit": "86e67188a11db7f8db0a1bab3029c6038492e498",
      "tree": "963877f99160913f617086db5542cf453426814d",
      "parents": [
        "7cd4c4f039f8c2dabf6cf7a0c6ab16cc1fa352ff"
      ],
      "author": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Fri Jul 13 18:15:16 2018 -0700"
      },
      "committer": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Fri Jul 13 18:21:00 2018 -0700"
      },
      "message": "[adb] Modernize codebase by replacing NULL with nullptr\n\nFixes -Wzero-as-null-pointer-constant warning.\n\nTest: m\nBug: 68236239\nChange-Id: Ia8c4deacafed2f3b7dbc3d4c3c77c6c632e3de81\n"
    },
    {
      "commit": "7ee327d2041348a2fa312891ca7174172bc8d8fd",
      "tree": "2ec38b47244d8ab19cede564b0dd9f9875f476e3",
      "parents": [
        "a3bce0702397774e9ae45e5a031b5b992c3b753f",
        "d09ba31079671d4c63e316895705b7236898815f"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed May 23 00:01:29 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed May 23 00:01:29 2018 +0000"
      },
      "message": "Merge changes I465804fd,Ib5a684bb,If5e66570,I8471cc00,I8ba0a70a\n\n* changes:\n  adb: convert fdevent over to unique_fd.\n  adb: move towards using unique_fd.\n  adb: delete FDEVENT_DONTCLOSE.\n  adb: remove fdevent_install, fdevent_remove.\n  adb: fix uninitialized variable in AsyncServiceRef.\n"
    },
    {
      "commit": "810fedbcbdc6303d1327cd7e99225222a07879fe",
      "tree": "236b57a22b25bee53d8eb36c39e636e0a3c60004",
      "parents": [
        "04cd75d8714b9390855cb11fd024b5bb0ea426cc"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri May 11 12:55:56 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue May 22 14:55:36 2018 -0700"
      },
      "message": "adb: move towards using unique_fd.\n\nBug: http://b/79786774\nTest: treehugger\nChange-Id: Ib5a684bba88e87e1aad9da452dcdd5edd11f18f4\n"
    },
    {
      "commit": "7a7c5cb2af1a3aaad517c6e62f178749637f44bd",
      "tree": "0c5f46815ca6f184cde8b208f747025c83ec7817",
      "parents": [
        "52328b65ea21e72de9e5d846f8d1c6167b080ffa"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri May 04 16:04:49 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri May 04 18:05:18 2018 -0700"
      },
      "message": "adb: add authorizing, connecting states to transport.\n\nAdd two states: connecting and authorizing, to disambiguate the offline\nand unauthorized states, respectively.\n\nPreviously, devices would transition as follows:\n\n  offline -\u003e unauthorized -\u003e offline -\u003e online\n  offline -\u003e unauthorized (when actually unauthorized)\n\nWith this patch:\n\n  connecting -\u003e authorizing -\u003e online\n  connecting -\u003e authorizing -\u003e unauthorized (when actually unauthorized)\n\nThis allows test automation and the like to distinguish between offline\ndevices, unauthorized devices, and working devices without having to\ndo retry loops with arbitrary sleeps on their end.\n\nBug: http://b/79257434\nTest: adb_test\nTest: adbd_test\nTest: manually plugging in a device with `while true; do adb shell echo foo; done`\nChange-Id: I036d9b593b51a27a59ac3fc57da966fd52658567\n"
    },
    {
      "commit": "da74b90f02e2b1bcaf82115c47509761505cb0dc",
      "tree": "67d38592091005d3642f391d2800b4836cb0980d",
      "parents": [
        "3ab710e8391fb9307d06c00f511bc7504bf912e2"
      ],
      "author": {
        "name": "Luis Hector Chavez",
        "email": "lhchavez@google.com",
        "time": "Tue Apr 17 14:25:04 2018 -0700"
      },
      "committer": {
        "name": "Luis Hector Chavez",
        "email": "lhchavez@google.com",
        "time": "Thu Apr 26 13:53:35 2018 -0700"
      },
      "message": "adb: Add a way to distinguish between connection failures and successes\n\nThis change adds a callback that is invoked exactly once, either when\nthe connection is fully established (i.e. CNXN packets have been sent\nand received) or the atransport object is deleted before that (because\nthe connection failed).\n\nThis helps in distinguishing between successful and failing connections\nfor TCP. Especially when there is some kind of port\nforwarding/multiplexing in between (like an SSH tunnel or SSLH proxy).\n\nBug: 74411879\nTest: adb connect chromebook:22 (which runs an sslh tunnel to adbd).\n      either succeeds or fails, but not fake-succeeds.\n\nChange-Id: I7e826c6f5d4c30338a03b2d376a857ac5d05672a\n"
    },
    {
      "commit": "491454f7655f4639cebe9f866113520671896efb",
      "tree": "02b39c9890bdfa24ba65d8c89b457aa9582ab6b9",
      "parents": [
        "ebc1c31c1df098e7c24226c065b9992b776c0b0f"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Apr 19 13:06:42 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Apr 19 13:09:18 2018 -0700"
      },
      "message": "adb: don\u0027t error in handle_host_request if we can\u0027t acquire a transport.\n\nHost services are attempted after handle_host_request, which means that\nfailing to find a transport to give to handle_forward_request shouldn\u0027t\nsend an error over to the other end.\n\nBug: http://b/78294734\nTest: `adb track-devices` with multiple devices connected\nChange-Id: I46c89cc1894b51d48fea7d4e629b1d57f73e3fd6\n"
    },
    {
      "commit": "ebc1c31c1df098e7c24226c065b9992b776c0b0f",
      "tree": "97606e03261beb63728febaaac7634d6a98ad6ab",
      "parents": [
        "caeda2c570d1f33beb9c21f3a2fcd1cf62362c8c"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Apr 13 12:17:03 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Apr 13 14:25:28 2018 -0700"
      },
      "message": "adb: fix `adb reverse` when adbd has multiple transports.\n\nPlumb the transport that we received the adb reverse request on through\nto reverse_service, instead of trying to get a unique transport on\ndevices that have multiple active transports (e.g. a device with USB\n(even unplugged) connected via TCP).\n\nBug: http://b/37066218\nBug: http://b/71898863\nTest: `echo foo | nc -l 12345 \u0026 adb reverse tcp:12345 tcp:12345; adb shell nc localhost 12345` on a device connected via TCP\nChange-Id: Iae199ae787f2e344126bbcacca8544cfc9844a4c\n"
    },
    {
      "commit": "cd2a5290137e1d55f6f16163ac58f39f28e40b00",
      "tree": "c4150b28fecf93e1d7e05f0f7825127643802305",
      "parents": [
        "83d33f8f516fe1730d940fa850aed0b7120e72a2"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Mar 07 16:52:28 2018 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Apr 11 12:54:07 2018 -0700"
      },
      "message": "adb: switch apacket payload to a type that doesn\u0027t initialize its contents.\n\nSwitch from using std::string as the type we use to hold our payload in\napacket to a custom reimplementation that doesn\u0027t zero initialize. This\nimproves bulk transfer throughput in the adb_benchmark microbenchmark\non walleye by ~20%.\n\nTest: adb shell taskset f0 /data/benchmarktest64/adb_benchmark/adb_benchmark\nChange-Id: Ibad797701eb1460c9321b0400c5b167b89b2b4d0\n"
    },
    {
      "commit": "715fe605f6963aa63697a799ad5a4dad02316154",
      "tree": "2dc02366fe6f0018d749ec692c8846417d0159de",
      "parents": [
        "66766f833c4bd9ed4522ee1922b7bb3eaecf7424"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Feb 16 13:24:58 2018 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Mar 05 13:00:28 2018 -0800"
      },
      "message": "adb: convert Connection to a nonblocking interface.\n\nRename the existing Connection to BlockingConnection, add a nonblocking\nConnection, and add an adapter between the two, to enable future work\nto reduce the impedance mismatch from implementing a blocking interface\non top of nonblocking primitives.\n\nWhile we\u0027re here, delete A_SYNC, and remove one layer of pipes when\nsending a packet (replacing it with a condition variable when using\nBlockingConnectionAdapter).\n\nTest: python test_device.py, manually plugging/unplugging devices\nChange-Id: Ieac2bf937471d9d494075575f07e53b589aba20a\n"
    },
    {
      "commit": "66766f833c4bd9ed4522ee1922b7bb3eaecf7424",
      "tree": "2c04e35eb649e80d6790344599833f634ddfaa26",
      "parents": [
        "361148b3a71373900c6141d7980e4a1098f1dd68"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Feb 27 15:49:23 2018 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Mar 05 13:00:08 2018 -0800"
      },
      "message": "adb: use soong version stamping.\n\nBug: http://b/71719137\nTest: adb version\nChange-Id: Ic735814574c83a7c2b8bef213592d494f5ec3860\n"
    },
    {
      "commit": "361148b3a71373900c6141d7980e4a1098f1dd68",
      "tree": "6a21731897b364e31c04fd3895fc656f4b8de2aa",
      "parents": [
        "d64d2ed556b0fd62b79b39bfbfab222796cd3029"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Jan 02 12:01:43 2018 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Feb 28 15:29:50 2018 -0800"
      },
      "message": "adb: switch over to Android.bp.\n\nRearrange some files while we\u0027re doing this.\n\nBug: http://b/71721338\nTest: manually ran adb on windows\nChange-Id: Ie47bda82279e4b9521505ad0353bf9ef649fc7d7\n"
    },
    {
      "commit": "50576fd2cd0acc90a19b92db123a4c824150f871",
      "tree": "ecd318da969c20a5ec472341e25ddd13015edc94",
      "parents": [
        "839b932f0c28eab8ff9c1cecd3b55af27baf8439"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Feb 23 14:00:24 2018 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Feb 27 14:50:07 2018 -0800"
      },
      "message": "adb: stop using quick_exit.\n\nWe don\u0027t actually need to use quick_exit to avoid calling static\ndestructors, since we have -Wexit-time-destructors to guarantee we\ndon\u0027t actually have any, and this precludes the use of asan\u0027s exit time\nleak checking, so switch back to atexit/exit.\n\nTest: ASAN_OPTIONS\u003ddetect_leaks\u003d1:leak_check_at_exit\u003d1 adb server nodaemon with a manually inserted leak\nChange-Id: Id8178913f64cb02c820c5073351369a9e4d8c74d\n"
    },
    {
      "commit": "839b932f0c28eab8ff9c1cecd3b55af27baf8439",
      "tree": "a18d3410761bad64815bb238f32917f44c763c96",
      "parents": [
        "bbe85f7a9abcca6f86d286155705589a7ace0141"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Feb 05 18:49:10 2018 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Feb 21 14:30:17 2018 -0800"
      },
      "message": "adb: switch apacket over to a std::string payload.\n\nTest: python test_device.py with walleye/x86_64 emulator\nChange-Id: I0a18941af1cb2279e5019a24ace25741def1202f\n"
    },
    {
      "commit": "a7d9d71e8c66bd19cb908b48b5dac31c9587dd31",
      "tree": "dc72b7032b6e0923b6201273caaf64a5557410f3",
      "parents": [
        "b14756a7754dbb46d6f7d0a7814b0bcc61741e67"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Feb 01 13:17:50 2018 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Feb 06 12:59:06 2018 -0800"
      },
      "message": "adb: switch asocket::enqueue to std::string.\n\nSwitch asocket over to taking a std::string instead of apacket* for\ndata. This allows us to remove asocket specific fields from apacket*.\n\nTest: python test_device.py with x86_64 emulator, walleye\nTest: adb_test on host\nChange-Id: I9d157ff331a75ba49a54fdd4194e3f6cdff722f4\n"
    },
    {
      "commit": "ee7b44d91c809f64cbabc4ced8c05360991c29b2",
      "tree": "0a5df6c2965ef4f0cad9964ee2bb7558f3f9abda",
      "parents": [
        "a8e97dc29cefbd6a2842f87648d8468af4f7f817"
      ],
      "author": {
        "name": "Tim Murray",
        "email": "timmurray@google.com",
        "time": "Thu Dec 07 11:40:00 2017 -0800"
      },
      "committer": {
        "name": "Tim Murray",
        "email": "timmurray@google.com",
        "time": "Thu Dec 14 14:18:26 2017 -0800"
      },
      "message": "adb: disable checksum on new versions\n\nThe checksum is unnecessary. Improves adb performance by 40% on USB2.\n\nTest: new adb works with new + old adbd, old adb works with new adbd\nbug 67327728\n\nChange-Id: I761d8a5a62deaea9bbb092ea9926b2d6d312f00d\n"
    },
    {
      "commit": "ef704a18ce744e12d8f8a1b388be0667662d08b8",
      "tree": "e0f04b1f6076f66bcc24e02458a3a0d274f76abe",
      "parents": [
        "5414d15da73ec0901aa883609810ccf54af75c6c"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Jun 07 12:11:19 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Oct 02 14:38:03 2017 -0700"
      },
      "message": "adb: remove SendConnectOnHost.\n\nThis logic appears to be racy, and it shouldn\u0027t actually be needed, if\nour devices follow the USB spec. Use libusb_set_interface_alt_setting\non device initialization as well, to add one more thing that should\nreset the data toggles.\n\nBug: http://b/32952319\nTest: python test_device.py\nChange-Id: I392198af3d72c524b893e5056afa2b4617cea49c\n"
    },
    {
      "commit": "b39e415aa8c6383efdd02ab62bf2c523ebd1878c",
      "tree": "93274b5c26009892d196c6ce6e75ace291801a47",
      "parents": [
        "eaae54eda90389267fba498181e35c53e9135bbd"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Aug 16 16:57:01 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Aug 21 14:15:06 2017 -0700"
      },
      "message": "adb: allow selection of a specific transport.\n\nExtend device selection to allow selecting a specific transport via\nmonotonically increasing identifier (visible in devices -l).\n\nThis is useful when using multiple devices (like hikey960...) that\nhave identical bogus serial numbers like 0123456789ABCDEF.\n\nBug: http://b/37043226\nTest: adb -t {1, 2, 9999999} {get-serialno, shell, features}\nChange-Id: I55e5dc5a406a4eeee0012e39b52e8cd232e608a6\n"
    },
    {
      "commit": "cd61ae3a66975b17796326c6b720dd2ef8bb5c65",
      "tree": "f8919098e340b573747371b30e32ae1ef303e11f",
      "parents": [
        "bb0d0245b3868c420284a7e3fda49e0d481d535d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 15 08:35:24 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 20 14:21:41 2017 -0700"
      },
      "message": "Give a clear error message if we can\u0027t start the server.\n\nBug: http://b/35218713\nTest: adb kill-server ; export HOME\u003d/ ; adb devices\nChange-Id: I53cc30213be0eab84e42b09c7b501362d6e44b05\n"
    },
    {
      "commit": "4b640840dcd7f5e0ad04f79a0d019bcdb072fe7b",
      "tree": "6505d79625d91ebf0fd3011970350eabb448bc2c",
      "parents": [
        "d2387da971294fe9bfd09c06376101d6bd719e30"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed May 31 11:54:56 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed May 31 12:13:59 2017 -0700"
      },
      "message": "adb: reunregress waiting for device on start-server.\n\nMove the invocation of adb_notify_device_scan_complete to\nthe end of device_connected, where we decrement connecting_devices.\nAlso, create a dedicated thread for handling hotplug events, instead of\nreusing the main thread for this, since the main thread blocks until\ndevice scan is complete.\n\nTest: `adb kill-server; adb devices`\nChange-Id: Ia73b1a57538174282a48ef73ab0a3e58152d6f83\n"
    },
    {
      "commit": "27983bce21ca69b086d135108a40f8ab3d3b408b",
      "tree": "b704b0b1e02a7490f5ef3ca413a8d62f3fb7253d",
      "parents": [
        "087f7a485b4d8c85ed09469ada58219f9051e6f7"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Tue May 23 14:30:00 2017 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Tue May 23 14:30:00 2017 -0700"
      },
      "message": "Add host feature for `push --sync` support.\n\nTest: adb host-features | grep push_sync\nBug: None\nChange-Id: Ia7a7e9c3c2e6632a9c954fbad8f64602a21d9757\n"
    },
    {
      "commit": "1959e87cfeb030565b0010ff9843c1db71a80ff5",
      "tree": "fbd30e596d3d1596d3394cf3c16f032087b3c503",
      "parents": [
        "6362714089d9af9a91c7da459cd7e3fd8e98a895"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed May 10 14:44:20 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri May 12 17:08:50 2017 -0700"
      },
      "message": "adb: silence noise.\n\nRemove logging statements that don\u0027t provide any benefit.\n\nTest: none\nChange-Id: Ib7c26fbdb019f4d6bbce2b7fb192cb5e6066e53f\n"
    },
    {
      "commit": "61a4c2c69ce5568d36427c9539435db484d46cac",
      "tree": "972c4c55b64be4ca934044172025fd053f900ff8",
      "parents": [
        "0e6090dc2be5d3b66f776f5e74286721933c156b",
        "165460f4ce11562f20787817bf9ff0eddacf787c"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed May 10 18:42:12 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed May 10 18:42:14 2017 +0000"
      },
      "message": "Merge changes I394f5782,I9475f5d0,I59707186\n\n* changes:\n  adb: move all cleanup to a function with defined ordering.\n  adb: make `adb kill-server` wait for the server to die.\n  adb: libusb: replace sleep with timed CV wait.\n"
    },
    {
      "commit": "ee356a7fefa33f46464be50000c262e0177ab6cb",
      "tree": "2fbfad38ae4941260d5af41bd21d625a630d77ac",
      "parents": [
        "1ec15cd6ba17cf6aafb6211b10f8599869f75239"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon May 08 18:37:17 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue May 09 14:31:15 2017 -0700"
      },
      "message": "adb: make `adb kill-server` wait for the server to die.\n\nMake the host:kill service shutdown its socket on process exit, instead\nof immediately. Also, unify the two \u0027kill-server\u0027 implementations and\nhide _adb_connect.\n\nBug: http://b/37104408\nTest: adb kill-server; adb start-server\nChange-Id: I9475f5d084d5fb91d33e393f2fd4e34056613384\n"
    },
    {
      "commit": "cded753432738211395b82288d2e401edb1495ee",
      "tree": "d07baf7e45acbfa5d29fc34bd480f5f9ec213024",
      "parents": [
        "16f6be7e9f04e08364f0db069203dabccc5ced1b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon May 08 11:30:34 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue May 09 08:21:54 2017 -0700"
      },
      "message": "Show the \"platform tools\" version in adb/fastboot --version.\n\nAnnoyingly folks parse the \"adb --version\" output so we have the\nless-interesting protocol version first. But at least now we\u0027ll\nhave the \"real\" version somewhere...\n\nBug: N/A\nTest: \"adb --version\"/\"fastboot --version\"\nChange-Id: Ia85b561bd8d84c6fd6995923730d36f53b2f800b\n"
    },
    {
      "commit": "1e3bf7368051871e6cbf1430f436201d7b1e895b",
      "tree": "e31cc6a7a30963a7c1c0186668674c7dc3db1446",
      "parents": [
        "a7430f3affc6309ef7270fe4092bea956bfe261d"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed May 03 22:37:10 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu May 04 16:03:12 2017 -0700"
      },
      "message": "adb: wait for devices to come up instead of sleeping for 3s.\n\nReplace a hard-coded 3 second sleep with logic to wait until we\u0027ve\nscanned USB devices once and they\u0027ve all come online.\n\nBefore:\n    adb shell true  0.00s user 0.00s system 0% cpu 3.047 total\n\nAfter:\n    adb shell true  0.00s user 0.00s system 9% cpu 0.041 total\n\nBug: http://b/37869663\nTest: `time adb shell true` after adb kill-server\nChange-Id: I251d42afb885908ed9d03167287594ea16650d3f\n"
    },
    {
      "commit": "56af5828c86658e96d85e2bcba02bdad7a06876e",
      "tree": "84efb4dca434c1b216d8e5c7770a0d7118203430",
      "parents": [
        "65bc227d3e59b78b05f81ee2ed19636b78c52e73",
        "3cf1b36e2f914ce7c6f233e5ff3f1f6614940c80"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Apr 20 19:45:17 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Apr 20 19:45:18 2017 +0000"
      },
      "message": "Merge \"adb: fix two device offline problems.\""
    },
    {
      "commit": "3cf1b36e2f914ce7c6f233e5ff3f1f6614940c80",
      "tree": "b75acfe89e71a396a07c247f5ea44e476ffcf8d4",
      "parents": [
        "3187510b17f7eeeb67286a4a842abd503906bb5c"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Mar 10 16:01:01 2017 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Apr 20 10:14:59 2017 -0700"
      },
      "message": "adb: fix two device offline problems.\n\nWhen device goes offline, user usually has to manually replug the\nusb device. This patch tries to solve two offline situations, all\nbecause when adb on host is killed, the adbd on device is not notified.\n\n1. When adb server is killed while pushing a large file to device,\nthe device is still reading the unfinished large message. So the\ndevice thinks of the CNXN message as part of the previous unfinished\nmessage, so it doesn\u0027t reply and the device is in offline state.\n\nThe solution is to add a write_msg_lock in atransport struct. And it\nkicks the transport only after sending a whole message. By kicking\nall transports before exit, we ensure that we don\u0027t write part of\na message to any device. So next time we start adb server, the device\nshould be waiting for a new message.\n\n2. When adb server is killed while pulling a large file from device,\nthe device is still trying to send the unfinished large message. So\nadb on host usually reads data with EOVERFLOW error. This is because\nadb on host is reading less than one packet sent from device.\n\nThe solution is to use buffered read on host. The max packet size\nof bulk transactions in USB 3.0 is 1024 bytes. By preparing an at least\n1024 bytes buffer when reading, EOVERFLOW no longer occurs. And teach\nadb host to ignore wrong messages.\n\nTo be safe, this patch doesn\u0027t change any logic on device.\n\nBug: http://b/32952319\nTest: run python -m unittest -q test_device.DeviceOfflineTest\nTest: on linux/mac/windows with bullhead, ryu.\nChange-Id: Ib149d30028a62a6f03857b8a95ab5a1d6e9b9c4e\n"
    },
    {
      "commit": "65bc227d3e59b78b05f81ee2ed19636b78c52e73",
      "tree": "934891891ab7676c07a3b159fd95063d021d87b5",
      "parents": [
        "b087d3062c76dc97e19e02d198dba540bb7ad7cb"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Apr 18 14:34:16 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Apr 18 14:51:27 2017 -0700"
      },
      "message": "Fix various adb error reporting bugs.\n\n`adb install` was writing success to stderr rather than stdout.\n\nServer mismatch messages were going to stdout rather than stderr.\n\nError messages should consistently start with a lower case letter.\n\nAlso improve consistency of syntax error reporting.\n\nBug: https://issuetracker.google.com/37128706 (adb install success to stdout)\nBug: https://issuetracker.google.com/37140458 (server mismatch on stderr)\nBug: http://b/32413861 (consistency)\nTest: ran tests\nChange-Id: I0d6cb0c7482bec03483dacefd996644b7a28d273\n"
    },
    {
      "commit": "4e97fd6d92b71e5f2d43d12b8f030d8d4cdff464",
      "tree": "aeefbcafdba5e88377580d54c4f61f0db57de014",
      "parents": [
        "a0e185b07f7d70d1f3a7b4920e6839cda776c1f3"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Mar 30 15:08:28 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Mar 30 15:10:24 2017 -0700"
      },
      "message": "Show install path in \"adb --version\" and \"fastboot --version\".\n\nBug: http://b/36766455\nBug: http://b/34691048\nTest: ran tests\nChange-Id: I4b67ec54d41a281fe7a33c017d3cfbc8055e3b43\n"
    },
    {
      "commit": "210b63fe6724a6070565802616e69e1c7c38ffed",
      "tree": "5f7f620de4c51f1f530aec77b34b3892b101324c",
      "parents": [
        "7cebaefe30831d61e424c5af315d2abb2207dffa"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Feb 22 17:07:01 2017 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Feb 22 18:19:21 2017 -0800"
      },
      "message": "adb: add `adb host-features`, report libusb status.\n\nAdd a \u0027host-features\u0027 command to get the features of the currently\nrunning host adb server. Abuse it to report libusb status.\n\nBug: http://b/34983123\nTest: adb host-features; adb kill-server; ADB_LIBUSB\u003d1 adb start-server; adb host-features\nChange-Id: I0e8d503a2dbdff9002ebb6ce8a298498a9421422\n"
    },
    {
      "commit": "b736692b2c6a8345a86863e08d6561a981816ff5",
      "tree": "43d1639db44696dd41cf6c1b70c709f5054e6ac9",
      "parents": [
        "617fd83b380e4eeaa5fae94355a16e1f5c886c7e"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Sep 28 12:32:45 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Jan 25 13:52:53 2017 -0800"
      },
      "message": "adb: add libusb implementation for Linux/Darwin.\n\nAdd a libusb-based implementation alongside the existing native\nimplementations, controlled by the ADB_LIBUSB environment variable.\n\nWindows will need more work for the usb driver.\n\nBug: http://b/31321337\nTest: python test_device.py on linux/darwin, with ADB_LIBUSB\u003d0 and 1\nChange-Id: Ib68fb2c6c05475eae3ff4cc19f55802a6f489bb7\n"
    },
    {
      "commit": "73925985f72b9b6dde4e692732dcc35958ca4ec8",
      "tree": "8bd909f062f7b3014c06c0cc64cebe01c71a1348",
      "parents": [
        "8833f14f22be9dac7f4052f840947f9908b37e7c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 15 12:37:32 2016 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 16 09:12:12 2016 -0800"
      },
      "message": "Switch adb over to \u003cchrono\u003e.\n\nClearer code, and lets us lose some more portability cruft.\n\nBug: http://b/32878766\nTest: manual\nChange-Id: Ie44928bbf8d68a74127aaf76e7e0060e25fa2cc8\n"
    },
    {
      "commit": "4e56250f5ff70c2f48c43440b2d493e1f3863af9",
      "tree": "2931ef88240b5514005e95acb2b4eca0455c5bff",
      "parents": [
        "87eca0517baf580d101483ec76a24d82ebeb1cc6"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Oct 27 14:01:08 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Oct 27 17:13:23 2016 -0700"
      },
      "message": "adb: add `adb reconnect offline` to reconnect offline devices.\n\nAdd a command to reconnect offline/unauthorized devices, mainly for use\nwith the inotify-monitoring of vendor key directories added by 22cb70bd.\n\nBug: http://b/29273531\nTest: manually tested with a sailfish + copying vendor keys\nChange-Id: If34cccee4ae553ada65d128b57d03cba8c0d7c46\n"
    },
    {
      "commit": "67ac379f0125c91c14e6ac9ab389d1f791d02945",
      "tree": "45b68a3848150ccc5abaccb12672f94e8f0fa5a4",
      "parents": [
        "b4e8ba2768d060465ad4fe9f0d39c809b08b93d7"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Oct 06 13:31:44 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Oct 06 14:50:02 2016 -0700"
      },
      "message": "adb: rationalize types.\n\nUse fixed length types for structs going over the wire, constify\narguments where possible, use char* instead of unsigned char* for\napacket data, and assorted other refactoring.\n\nBug: http://b/29273531\nTest: python test_device.py with every combination of old/new adb and adbd\nChange-Id: I0b6f818a32be5386985aa4519f542003cf427f9d\n"
    },
    {
      "commit": "eac2058cad3b4937cea26396b1f38fa468433345",
      "tree": "b87d751fc043320f6e8dbe17cb685b8d619e52f2",
      "parents": [
        "f6b4996674fde5b88e3f3fe98b907a0bb2e328a5"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Oct 05 19:02:29 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Oct 06 12:36:26 2016 -0700"
      },
      "message": "adb: split up adb_auth.cpp.\n\nAll of the functions in adb_auth.cpp were used in only one of\nadb/adbd. Split up them up into adb_auth_host.cpp and adbd_auth.cpp\nrespectively.\n\nBug: http://b/29273531\nTest: built and flashed bullhead, adb still works\nChange-Id: Ib610c5157522634cc273511175152f1306cc52a7\n"
    },
    {
      "commit": "8b249d2e6ab2c1491a2c4eeac2ddb134976f2e5b",
      "tree": "11265608dc07293bb0306ff809aaf34aa0850d62",
      "parents": [
        "eeae2e55a85b7f07c30a289d2deba084004b3b04"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 23 15:40:03 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Sep 26 13:14:14 2016 -0700"
      },
      "message": "Switch adb to \u003candroid-base/properties.h\u003e.\n\nBug: http://b/23102347\nTest: manual\nChange-Id: Iffa66258c01f84f41b9af99ab5e768a0a2669106\n"
    },
    {
      "commit": "bb4f860aeee90afae40e06288202e89217640a40",
      "tree": "f404757aabc0b725ab1cfbdcc9957b58b8c5280f",
      "parents": [
        "ea7457b76d45543d27c5019da925098cd956e8f3"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Aug 25 16:00:22 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Sep 01 15:49:06 2016 -0700"
      },
      "message": "adb: allow use of arbitrary socket specs for command socket.\n\nBug: http://b/30445394\nChange-Id: I474ede35ec3c56ad86da503c9703f83ef5e80862\n"
    },
    {
      "commit": "827a4a575d5a880f68d2647f9d4a581aca0341fc",
      "tree": "0cbf7c2a09a832c1a2d5d8fa21fced7320cf6d5e",
      "parents": [
        "7789c831239c273eadee0354716905267fb4b531"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 31 15:07:18 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Sep 01 09:24:24 2016 -0700"
      },
      "message": "Add android::base::GetExecutablePath, switch adb and fastboot over.\n\nWe\u0027d long had two copies of this stuff, so rather than rewrite both\nLinux versions to use android::base::Readlink, let\u0027s kill the duplication\ntoo...\n\nBug: http://b/30988271\nChange-Id: I4de58a94a22a4b1faf969a6fc70ca1560a4d5121\n"
    },
    {
      "commit": "77f084b70f25a195912ca80b27635e2c00502fe0",
      "tree": "b560c83aa02643fc4f75ec74efb7f5d67fb25feb",
      "parents": [
        "3db34bb37b4f7851e14367187447841d9ffbc9e2"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Aug 22 13:12:32 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Aug 22 13:12:32 2016 -0700"
      },
      "message": "adb: increase the authentication throttling limit.\n\nPreviously, after 10 failed authentications, we\u0027d sleep for a second,\nand we\u0027re up to 11 vendor keys in internal now...\n\nBug: http://b/30927527\nChange-Id: I094e830521f6a2768a880c6684f32ff1ce2a3c2e\n"
    },
    {
      "commit": "801066a2b8dc1545cba6b6e16218b2f1a806e93d",
      "tree": "8e34de3e43363904ffe0f4b7a9dd8ff761a3c803",
      "parents": [
        "8ac4599bd63e30677e393281ebd360aa4110a915"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jun 29 17:42:01 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Aug 11 13:53:18 2016 -0700"
      },
      "message": "Clean up key handling in adb.\n\nThis includes the locking we need to be able to re-load the keys at runtime.\n\nWe should rename \"adb_auth_client.cpp\" to \"adb_auth_adbd.cpp\" or\n\"adbd_auth.cpp\" in a later change.\n\nChange-Id: I9e1d5b6b7d0497d6f6e5d9c4fb660118cdff05a8\nTest: \"adb devices\" works against a non-AOSP device with $ADB_VENDOR_KEYS set, says \"unauthorized\" without.\nBug: http://b/29273531\n"
    },
    {
      "commit": "a937d1693f3542d76c38135056515b950888fe39",
      "tree": "8de98e901ce92d48c8b457c3173730d6886a3e7b",
      "parents": [
        "6514da341de9bf1bbeb928c6fd60df212ef6caa0"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 28 14:48:45 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 28 14:48:45 2016 -0700"
      },
      "message": "Remove unnecessary ARRAY_SIZE macros.\n\nUse the canonical one instead.\n\nChange-Id: Id80f19455f37fd2a29d9ec4191c1a0af80c5c0e7\n"
    },
    {
      "commit": "c3d1c11b7660eb1dd5efeb2d30e6763997cf467e",
      "tree": "188855d5ad62b188f29e0d5d7dc3786a2216c79b",
      "parents": [
        "8d04c20ccacf99366f66de8003397d9dcd6a46bd"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jun 15 14:46:56 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jun 15 14:46:56 2016 -0700"
      },
      "message": "Minor adb style fixes.\n\nChange-Id: Ic4b45828dfdf88ef6c0fc468f66df3e62d2fbe51\n"
    },
    {
      "commit": "57cb217bb55a59c7507b2ac3e9b9093cbd4aedd3",
      "tree": "61e9b9b78900ecd300e22eed6f66f68d874e71f8",
      "parents": [
        "39d01bb09cabc358700bb8296c94b7a7a0d282f5"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri May 13 18:16:43 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Sat May 14 18:52:46 2016 -0700"
      },
      "message": "adb: replace failing exits in adbd with abort().\n\nThis makes it possible to get a core dump from adbd when it decides to\nexit.\n\nBug: http://b/28347842\nChange-Id: I4cfe5f273f62b2c32e61232d3c39881ecdd6b582\n"
    },
    {
      "commit": "19d0c23a5a8730cf30baeaed51ba9d2c8890cb60",
      "tree": "721bbf170deaba71d54149bfb7be3382207156f0",
      "parents": [
        "e29499c30c394708de7543c558c2fa3567d0dc23"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Thu Apr 07 11:25:48 2016 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Mon May 09 16:55:10 2016 -0700"
      },
      "message": "adb: support forwarding TCP port 0.\n\nThis CL adds support to forward or reverse TCP port 0 to allow the\nsystem to automatically select an open port. The resolved port number\nwill be printed to stdout:\n  $ adb forward tcp:0 tcp:8000\n  12345\n  $ adb reverse tcp:0 tcp:9000\n  23456\nThis allows testing to be more robust by not hardcoding TCP ports which\nmay already be in use.\n\nForwarding port 0 is a host-only change and will work with any device,\nbut reversing port 0 requires the device to be updated with a new adbd\nbinary.\n\nThis CL also does a little bit of cleanup such as moving the alistener\nclass out of adb.h, and adds some error checking and additional tests.\n\nBug: 28051746\nTest: python -m unittest discover\nTest: adb_test\nTest: `adb forward` and `adb reverse` with tcp:0\nChange-Id: Icaa87346685b403ab5da7f0e6aa186aa091da572\n"
    },
    {
      "commit": "54ee6d12e6a56ccf0c083a7e77454e2bc40eaed2",
      "tree": "bc5248f05580a675443acb964ec3b9287113d2ec",
      "parents": [
        "c6e3b12e2b86cf95c7f5b8c1fac3d47a73418508",
        "d78ed22449f2401e6b825d7b6418dcb05b5e7565"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Sat Apr 16 01:50:54 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Apr 16 01:50:54 2016 +0000"
      },
      "message": "Merge \"adb: add reconnect command.\""
    },
    {
      "commit": "a947b49de093bb36b77e5afb5485d413f8f78a7a",
      "tree": "ab4a7b5f0ea1d021170b2d357b3035d8f0d65546",
      "parents": [
        "43d4313260a2004fc54831e24fd99dc9183dc97f"
      ],
      "author": {
        "name": "Mattias Nissler",
        "email": "mnissler@google.com",
        "time": "Thu Mar 31 16:32:09 2016 +0200"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Apr 12 23:04:11 2016 +0000"
      },
      "message": "Switch fs_mgr and adb to libcrypto_utils.\n\nUpdate code and dependencies to use BoringSSL + libcrypto_utils\ninstead of mincrypt.\n\nChange-Id: Ic75164bd50c84b81b6310e27a67d4b3c174984f9\n"
    },
    {
      "commit": "d78ed22449f2401e6b825d7b6418dcb05b5e7565",
      "tree": "bbb4c98301eb640a08f74660d9c4e0db54717339",
      "parents": [
        "a6c02429549f2e83e6fe569f5d672959a4afa66b"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Apr 05 13:50:44 2016 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Apr 05 15:21:36 2016 -0700"
      },
      "message": "adb: add reconnect command.\n\nAdd reconnect command for debugging. `reconnect` kicks a transport\nfrom the host side, `reconnect device` kicks a transport from\nthe device side. They can be used to produce transport errors.\n\nBug: 25935458\n\nChange-Id: I47daa338796b561941e7aba44a51a6dd117d1e98\n"
    },
    {
      "commit": "cf91dbed54c43919d14f8724a86d228797017901",
      "tree": "1bc1497b5029181c46377373558ca2b73273be7d",
      "parents": [
        "e5a35ebe068288567174a0db7925c5fc0486a47f"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Mon Feb 08 22:36:42 2016 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Feb 09 16:15:56 2016 -0800"
      },
      "message": "adb: setsid() for adb host server.\n\nTo create a daemon for adb host server, we should call setsid()\nfor the daemon process. However, previously we call setsid() for\nthe adb client process, which results in nothing but EPERM error.\n\nBug: 26982628\nChange-Id: I2763ae3d5a243706927d7ef6af5095138c0ce2d8\n"
    },
    {
      "commit": "582167882af3bc07acdac92e7710537e2a943b19",
      "tree": "0bb5ae51b8dcda9aa5e5d4788a61a50aae05dcb1",
      "parents": [
        "289b74c5c754fe52b1248ebd8508b597b7946481"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Sat Nov 21 17:23:51 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 03 16:24:37 2016 -0800"
      },
      "message": "adb: win32: fix start-server to properly display UTF-8 on the console\n\nfwrite() is a macro that maps to adb_fwrite(), which can write UTF-8 to\nthe console. Use it to write the output that comes from the subprocess\nadb server.\n\nTo do this, dup the stdout/stderr file descriptor and make a duplicate\nFILE* stream, in binary mode (since we\u0027re reading raw bytes from the\nsubprocess), and unbuffered.\n\nChange-Id: I480761bae0bd576dc9e03fa4d31266f4e49635ed\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "c573d52b3a78b52e0108d70d3ca378d7c9b3171d",
      "tree": "2918565142088cc520485d368a1c448258e5912b",
      "parents": [
        "ea71e279bd63c510bcf10822fdd2a4689ca82a8d"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Wed Jan 27 08:52:53 2016 -0800"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Mon Feb 01 12:18:26 2016 -0800"
      },
      "message": "base: add SystemErrorCodeToString() function.\n\nPulls the Windows error string generation out of adb into libbase so\nthat it can be used by fastboot as well. Also makes a Unix equivalent\nthat just wraps strerror() so that upcoming fastboot error reporting\ncode can be platform-independent.\n\nThe intent here is just to provide a portable way to report an error to\nthe user. More general cross-platform error handling is out of scope.\n\nBug: http://b/26236380\nChange-Id: I5a784a844775949562d069bb41dcb0ebd13a32bc\n"
    },
    {
      "commit": "a17d272002eab3355be435dbe2c1722162556fe9",
      "tree": "c78ea82996f0ea56f95e07ade9e696ed65c276fc",
      "parents": [
        "128452bdd7eac825796023d8c44a41d4fd8053e2"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Thu Jan 21 08:40:59 2016 -0800"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Thu Jan 21 20:03:33 2016 -0800"
      },
      "message": "base: add network address parsing function from adb.\n\nThis CL moves the network address parsing function from adb to libbase\nso that it can be used by fastboot as well as adb.\n\nlibbase seemed like the right choice because:\n  1. It already has some parsing functions (parseint)\n  2. The net address parsing function uses the libbase string\n     functions so we have a libbase dependency anyway.\n\nThe parsing function has been modified slightly to make the canonical\naddress optional, and debug logging on success has been removed.\n\nFor adb the only functional difference is that parsing a network\naddress will no longer print the result to the debug log, which seemed\nunnecessary.\n\nBug: http://b/26236380\nChange-Id: Ife6df02937225fc66de87884d3572d79c092c522\n"
    }
  ],
  "next": "9055a581ec48568f9e0366ea44ada7dffb83b586"
}
