Open4

nest: `_blank` 経由で https ←→ http 通信できるか検討

okuokuokuoku

WebRTCのためのシグナリングには主にWebSocketが使われる。しかし、WebSocketはsecure contextを持つoriginからは wss:// なTLS経由のソケットしか張れず、このためには通信先が PKI的に セキュアである必要がある。

実際にはWebRTCのシグナリングにWebSocket必須であるということは無く、(ブラウザから操作可能な)任意のトランスポートを使える。

で、トランスポートとして、URLのhash部分を経由して httpsなサイトから _blanka を開く → https → http → https → ... のようにピンポンする通信が使える気がする。httpsのサイトに戻るたびに、Session storageにデータを書き込み、 storage イベント を待ち合わせることで遷移を進められる。

WHIP や WHEP ではダメなの?

https://zenn.dev/shiguredo/articles/webrtc-whip-whep

WHIP/WHEPは POST 起点なので https サイトから http サイトに仕掛ける良い方法が無い。

okuokuokuoku

単純な遷移はできた

https://github.com/okuoku/fnest-proto/commit/7b643e83b55bd47671b4b9485c2ab5c227147e08

window.location.href を書き換えるとページとhashの両方を書き換えられる & この遷移には特に制約は無いようだ。Hashは(現代的なブラウザであれば)50kは行けるらしいので、

https://stackoverflow.com/questions/16247162/max-size-of-location-hash-in-browser

Hash部分に署名したjsonを入れても十分に余裕のあるサイズだろう。

okuokuokuoku

一旦 Gather が終わるまで待ってみる

https://github.com/okuoku/fnest-proto/commit/46442736fa7574ee3a6eb1b2f4566bcfb0d4afc3

onGatheringStateChange のハンドラを書いて、 "complete" になるまで待ち合わせるようにしてみた。ブラウザのWebRTCだとその時点のSDPを取ってそのまま返却すれば良いんだけど、 node-datachannel にはその機能が無いっぽいのでcandidatesは一旦配列に貯めてブラウザ側で解釈する方向にした。

ちゃんと配列になっている。