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の要素(つまり最後に追加された要素)が指定されたことになります。

AVPの寿命

AVPは明示的に削除しなければトランザクション中で値が有効です。
局所的な場面で変数を扱う場合にはAVPよりもスクリプト変数(Script variable)のほうが処理が高速です。

次はFLAGについて調べてみます。

*1: modparam("tm", "onreply_avp_mode", 1)