AVP (Attribute-Value Pair)
今回はAVPについて読んでみました。勘違いしているかもしれませんが、だいたいこんなかんじでしょうか。
AVPとは
AVPは動的な変数で、ひとつのメッセージもしくはトランザクションに連動します(もしステートフル処理を使用していれば)。
メッセージまたはトランザクションは、初期の状態(受信した時もしくは作成された時)でそれに連動する空っぽのAVPリストを持ちます。
ルーティングスクリプトの中では、スクリプトで直接、もしくはスクリプトからの関数呼び出しによって、メッセージやトランザクションに自動的に連動する新しいAVPが作成されます。
AVPは、トランザクションのメッセージ(ReplyまたはRequest)が処理されるすべてのルート branch_route, failure_route, onreply_route (onreply_routeについてはTMモジュールのパラーメータonreply_avp_modeをenableにする *1 必要がある) で可視(visible)です。
AVPは読み書き可能で、更にはすでにあるAVPを削除することも可能です。
AVPは複数の値を持つことができます。新規割り当て(もしくは書き込み)はAVPに新しい値を追加します。値は「後入れ先出し」順 (スタック)に則り保持されます。
値をひとつ持つAVPに、値を更に追加した場合、逆順に格納されます。例えば、"one"という値をもつAVPに"two"を追加、更に"three"を追加すると、Index 0から順番に"three","two","one"と並びます。
$avp(17) = "one"; # we have a single value $avp(17) = "two"; # we have two values ("two","one") $avp(17) = "three"; # we have three values ("three","two","one")
名前付けルール
$avp(name) もしくは $(avp(name)[N])
Nは0から始まる要素番号で、省略するとN=0の要素(つまり最後に追加された要素)が指定されたことになります。