メモ

調べたり思いついたりしたことをメモします

FirefoxOS のネットワーク層

Firefox OS Advent Calendar 2013 用の記事です。といっても最近勉強しはじめたばかりなのであまり深く突っ込んだ内容は書けそうもなく、たまたま興味を持って見始めていた箇所で簡単に書いてみたいと思います。
勉強中の身ですので文中に間違いがあるかもしれません。こっそり教えて頂ければ幸いです。

Neckoの話です

FxOSだけでなくブラウザとしてのFirefoxでも共通だと思います。ネットワーク層はNeckoと呼ばれるソフトブロックで構成されていて、URIに対する通信チャネルを作成できるようになっています。

位置的にはGecko内部に存在していて、/B2G/gecko/netwerk 配下に展開されています。netwerkというディレクトリ名がnetworkのtypoなのかな?と思えるのですが、調べたところオランダ語でnetwerkと表現するそうですね。これが語源なのかどうかは知りませんが。

レイヤはOSI参照モデルで言うところのレイヤ4~7までを包含しています。つまりTCP層のレイヤ4から始まってセッション管理やMIME処理などを行い、アプリケーション層のHTTP/HTTPS/FTPあたりまでを実現できることになります。IPより下はsocketを使用します。(SSL/TLSも含んでいて、ここはレイヤ3.5あたりだと思うので少々不正確な言い方をしたかもしれません。)
IP層以下の層での接続に関しては、Necko内にWifi接続があるようです。他の接続は外に(rildとか)追い出されているようなので、このあたりの設計ポリシーはちょっとまだよく分かっていません。

汎用のプロトコルスタックみたいに使えるようですが、キャッシュ・cookieを保持する仕組みを包含しているところがさすがブラウザ用のプロトコルスタックです。キャッシュ・cookieRFC的にもHTTPと一体的なので切っても切れない関係にあるのだと思います。

FxOSの日本語対応はまだ途上だと思うのですが、Firefoxブラウザと共通品と見えて Accept-Language ヘッダは ja の指定も可能になっています。結構枯れた技術と思いきやSPDY1.3の対応が取り込まれていたりしますし、翌年にはHTTP/2.0にも対応されることになるのでしょう。

使い方としては、nsIIOServiceのnewURIにURIを渡して、newChannelFromURIでチャネル(nsIChannel)を作り、asyncOpenでコネクション確立に向かうのがHTTPの基本的フローのようです。この辺をとっかかりに徐々にコードリーディングしていきたいと思います。読み始めて間もないので薄い内容ですみません、もうちょっと詳しくなったらまた更新するかもです。