2022-07-18 (月)
眠くてやる気が出ない...
* ADBプロトコル
https://github.com/binzume/chrome-watch
一昨日のやつ.コンテナ内で動かすときにAndroidのplatform-toolsに依存したくなかったり,adb forwardして認証無しでブラウザにアタッチできる状態が気持ち悪いので,ADBプロトコルを実装して直接Oculus Quest上のブラウザと通信するようにする.
TCP接続をADBに置き換えるだけなのだけど,chromedpは普通のWebSocketしか対応していないので,接続時に使われるDefaultDialer
を上書きしてADBを使うようにする.色々行儀が悪いことしているので,chromedpの実装が変わったりすると壊れそう.
ADBは単純なプロトコルなので https://android.googlesource.com/platform/packages/modules/adb/ を見ながら実装したらすぐ動いた.ただ,説明と実装が違ってたり読んでも細かいことがよくわからないので,コードを読む方が早かった.パケットのチェックサムを crc32 of data payload
と説明しつつ実際は和を求めているだけだったりするの実装したほとんどの人が目を疑ったんじゃないかと思う.
あまり真面目に調べなかったけど,RSA署名周りの動作が不思議で,署名は送らずに公開鍵をA_AUTH(3,0,pubkey)で送信すると Androidの画面に「USBデバッグを許可しますか?」と鍵のフィンガープリントが表示される.公開鍵だけでこのダイアログ出せる上に,「許可」を押すと問答無用で接続が成功する.公開鍵暗号とはいったい...