「やっぱり実際に実装するのが一番勉強になるね」ということでSIPのサーバプログラムを書き始めました。とりあえずregisterやinviteの処理くらいはできるところまで実装するのが目標です。
サーバとしての実用性を考えるとC言語等で実装が当然望ましいのですが、これは純粋に勉強用なのでそこは目を瞑ることに...。
でもRFCとにらめっこしながらプログラムするのはすごく面白いです!!
github.com
思ったことをつらつらと...
全体的にパースするのが大変です。IPとかDHCPとかは各ヘッダの値が完全に固定長なので処理が一発なのですが、SIPでは何をするにしても手作業。人間に読みやすいけどプログラムで処理するのがめんどいプロトコルです。
- SIPヘッダ全体が固定長でないのでヘッダの処理を書くのが大変。
- Viaヘッダの数が1つとは限らないので処理がめんどい。辞書型にした時にキーが重複する。
- value1;value2;value3...のようにヘッダフィールド値が可変個なので処理がめんどい。データ構造として単純な辞書型を使えない。
- 書式が複数の書き方を許容しているため綺麗に処理できない。