マイコン工作実験日記

Microcontroller を用いての工作、実験記録

SIPを作り始める -- 登録まで

2008-08-17 23:17:28 | VoIP
VoIP GWを目指してSIPサーバの実装を開始しました。SIPの基本的なシーケンスについては、RFC3665に整理されているようですが、この内容を整理したWebページがあるので、これを参照しながらコードを書いていくことにしました。

まず最初に必要な機能は端末の登録(REGISTER)処理です。登録さえ受け付けてやれば、SIPのクライアントはサーバと接続したと認識してくれるはずです。サンプルのシーケンスでは、サーバ側が認証を要求しているためにいったん401を返しており、端末が認証ヘッダを付加して再度REGISTERを送信する流れになっています。自作VoIP GWでは端末認証はあっさり省略することにします。REGISTERの要求を無条件に受け付けて200 OKを返してやればいいでしょう。いちおう、expiresパラメータとExpiresヘッダだけは確認して、登録の設定/更新なのか解除なのかの判別だけはすることにします。他にもViaとか To, Fromとかのヘッダが付いてますが、要はREGISTERに付いてきたヘッダをほとんどオウム返しに付けてやればいいようです。ただし、Toには自分側のtagを追加して返します。

それでは早速テストです。SIPのクライアントとしては、Counter PathのX-Liteを使うことにします。X-Liteを選択した特別な理由があるわけではありません。単にフリーでダウンロードできる良く知られたクライアントらしく思われただけです。

X-LiteのSIP account設定画面では、次のようにパラメータを設定しました。



DomainはMake ControllerのIPアドレスです。まだDHCPクライアント機能も実装していませんので、IPアドレスはプログラム中に hard codedしてあり、設定/変更することすらできません。Passwordとか Authorization user nameとかのパラメータは、認証関連でしょうから設定しなくてもいいのでしょうが、全てuser nameと同じにしておきました。

OKを押すと、めでたく画面にReadyが表示されました。登録できたようです。まだまだ通話できるまでには先は長いのですが、SIP的には最初の一歩が動いたということで、ちょっと嬉しいですね。実際にはパケットが一往復しているだけなんですけど。



Wiresharkでパケットを確認してみたところ、X-LiteはREGISTERに続いてSUBSCRIBEも出していました。調べてみるとRFC3842で規定されている「メッセージあり表示」の通知(Notify)のためのもののようです。VoIP GWではサポートしないので、501 Not Imprementedを返すことにしました。下図は、結果のフローをWiresharkのグラフ化機能を用いて表示したものです。


最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。