| # How ADBd and Framework communicate |
| |
| ## adbd_auth |
| |
| The recommended way is to use `libadbd_auth` (frameworks/native/libs/adbd_auth). |
| It is a bidirectional socket originally used to handle authentication messages (hence the name). |
| It has since evolved to carry other categories of messages. |
| |
| ``` |
| ┌────────────┐ ┌─────────────────────┐ |
| │ ADBService ◄───────────────► AdbDebuggingManager │ |
| └────────────┘ └──────────▲──────────┘ |
| │ |
| ┌──────────▼──────────┐ |
| │ AdbDebuggingThread │ |
| └──────────▲──────────┘ |
| │ |
| Framework ┌───────▼───────┐ |
| ─────────────────────────────────────┤ "adbd" socket ├───────── |
| ADBd └───────▲───────┘ |
| │ |
| ┌───────┐ ┌──────▼─────┐ |
| │ ADBd ◄─────────────────────► adbd_auth │ |
| └───────┘ └────────────┘ |
| ``` |
| |
| Example of usages (adbd-framework direction, packet header): |
| |
| - [>> DD] Upon authentication, prompt user with a window to accept/refuse adb server's public key. |
| - [<< OK] Upon authentication, tell adbd the user accepted the key. |
| - [<< KO] Upon authentication, tell adbd the user refused the key. |
| - [>> DC] When a device disconnects. |
| - [>> TP] When the TLS Server starts, advertise its TLS port. |
| - [>> WE] When a TLS device connects. |
| - [>> WF] When a TLS device disconnects. |
| |
| ## System properties |
| |
| A hacky way which should be avoided as much as possible is to use system property setter + getter. There |
| are threads listening on system property changes in both adbd and framework. See examples as follows. |
| |
| - adbd writes `service.adb.tls.port`, framework uses a thread to monitor it. |
| - framework writes `persist.adb.tls_server.enable`, adbd uses a thread to monitor it. |
| |
| If you are an ADB maintainer or/and have a few spare cycles, it would not be a bad idea to remove |
| these in favor of using `adbd_auth`. |