openSIPSに少なくとも必要なモジュール
前回はopenSIPSのパッケージを一つだけインストールしたと書いたのですが、configのサンプルのパッケージをインストールしようとしたらいろいろと依存関係があったので、それらもインストールしてみました。
で、configファイル/etc/opensips/opensips.cfgを開いてみました。
loadmoduleでmoduleの読み込みをしているのですが、一体何を読み込んでいるのかなー?と思ったので、調べてみました。
grep loadmodule /etc/opensips/opensips.cfgした結果です。
#loadmodule "db_mysql.so"
loadmodule "signaling.so"
loadmodule "sl.so"
loadmodule "tm.so"
loadmodule "rr.so"
loadmodule "maxfwd.so"
loadmodule "usrloc.so"
loadmodule "registrar.so"
loadmodule "textops.so"
loadmodule "mi_fifo.so"
loadmodule "uri_db.so"
loadmodule "uri.so"
loadmodule "xlog.so"
loadmodule "acc.so"
#loadmodule "auth.so"
#loadmodule "auth_db.so"
#loadmodule "alias_db.so"
#loadmodule "domain.so"
#loadmodule "presence.so"
#loadmodule "presence_xml.so"
#で始まる行はコメントですね。言わずもがな。
signaling.so
公式ドキュメントより。
The SIGNALING module comes as a wrapper over tm and sl modules and offers one function to be called by the modules that want to send a reply.
SIGNALINGモジュールはtmとslモジュールのラッパー。replyを送信したいモジュールから呼び出される機能を一つ提供している。
何を言っているのかいまいちピンときませんが、調べることは3つ?
tmモジュール、slモジュールが何者か?提供される一つの機能とは?
ドキュメントには確かに機能(function)は一つでした。
send_reply(code, reason)
あぁ、なるほど。
send_reply("404", "Not Found");
などのように使うみたいです。
モジュールについては次とその次に出てきます。
sl.so
slというのはStatelessのことだそうです。
状態を持たないやり取り、つまり、質問に答えてハイおしまい、な会話ですね。
function名にはsl_がくっついていました。
tm.so
slに対してこちらはTransaction moduleのことだそうで、SIPのやり取りの情報をある程度覚えて、そのやり取りが完結するまで忘れないという性質のやつですね。
function名にはt_がくっつくようです。
rr.so
RRとはRecord-Routingのことらしいです。
SIPヘッダにRecord-Routeフィールドを設けることでUA同士がやり取りするSIPメッセージがすべてProxy経由になります。
Call statefullなProxyには必須になりますね。
maxfwd.so
こちらはSIPのMax-Forwardsフィールドのことですね。
Loopの検出に必要です。値としては70が良いようです。
もしも、目的地に到着する前にMax-Forwardsの値が0になったら"483 Too Many Hops"を返す決まりになっています。
ちなみに、RFC3261にはTo, From, CSeq, Call-ID, Max-Forwards, Viaフィールドが必須だと書かれています。
usrloc.so
User Locationの中心となるモジュールのようです。公式ドキュメントには「user location tableを保持し、他のモジュールからテーブルにアクセスする手段を提供する。scriptから直接アクセスするためのfunctionは提供されない。」とあります。
つまり、私にできるのは、moduleを読み込むときにパラメータを与えてあげるくらいということですね。
registrar.so
REGISTRARに関するモジュールなのは見たまんまですね。
PathヘッダフィールドとGRUUのことが書かれていました。
PathフィールドはUAに隣接していないREGISTRARにREGISTERするときに使うもので(私は実は詳しくないのですが)Record-Routeのように経由するProxyを(Proxy自身が)次々と記録していって、登録するもののようです。読み出されるときにはRouteヘッダフィールドに名を連ねる、という解釈でよいのでしょうか。
GRUUはGlobally Routable User Agent (UA) URIsの略だと書いてありました(RFC5627)が、なんのことやらさっぱりわかりません。
一意のURIを生成するのでしょうか?UUIDとかがちらっと見えた気がします。
xlog.so
COREモジュールに統合されたようですが、logに書き出す機能を提供してくれてます。
acc.so
Accounting、つまり利用事実の記録を行うためのモジュールでsyslogやRDBMSなどに記録を行えるようです。
ひとまずは
デフォルトで有効になっていたモジュールだけをざっと調べてみましたが、とりあえずこれだけあれば何とかなりそうですし、これらは最低限必要だと思います。
次回は擬似変数とかについて調べてみようと思います。