B2BUAにおいて、重要なコアとなる部分です。
B2BUAとして考えるのであれば、これ以外の部分は不要であります!!!
であるため、これがあれば、B2BUAとして動作させることが出来るからです。
ただし、この場合は、柔軟性がほとんどなくなる点が、「SIProp」との相違点と
なり、他の部分が必要となる理由となります。
下記のような役割を持たせたいために存在しています。
例えば、A-UA制御モジュールというものがあり、これに、
A-UA.Call()
という通話用のメソッドがあった場合と仮定します。
そして、A-UAが、Ver.2.0になって、通話機能が変化してしまった場合
A-UA.CallForV2() A-UA.CallForV1()
というものを用意するようなことを想定します。(別モジュールとして、用意し てもよい。)
このような場合に、スクリプト部で、条件分けをして、メソッドをインジェクシ ョンをさせるために使用します。
例: if(userAgent == "v1") { injection A-UA.CallForV1() in A-UA.Call(); } else if(userAgent == "v2"){ injection A-UA.CallForV2() in A-UA.Call(); } else { injectionList A-UA.CallForV1() in A-UA.Call(); injectionList A-UA.CallForV2() in A-UA.Call(); } ※最後の「else句」は、1つにインジェクションが絞れない場合を表現していま
す。
上記の「else句」部分のように、制御モジュールが並列起動となった場合、制御
モジュールのコントロールをしなければなりませんので、その機能を提供するた
めのものとなります。
そして、この部分は、非常に複雑となるため、スクリプトでは表現しにくい部分
となります。(スレッド動作も必要となるため、JavaScript?では制御しきれませ
ん。)
例: var result = A-UAv1.Call();// A-UAv2.Call()も同様にして扱う。 // B2BUAモード if(result == "B2BUA") { A-UA.Send(); // パケットをスルーするだけモード } else if(result == "THROW"){ A-UA.Sleep(); // それ以外。終了させる } else { A-UA.Stop(); }
具体的には、
A-UAコントロール部
というコントロール部があり、その内部で、
A-UAv1制御モジュール A-UAv2制御モジュール
をコントロールするような構成となります。
簡単に言うと、一番べた〜と実装した場合が、最初に書いた
制御モジュールのみ
という構成となります。ただし、これでは、柔軟性がほとんど無くなります。
そして、制御モジュールから、設定可能部分をすべてスクリプト化し、柔軟性をMaxにしたものが
スクリプト+制御モジュール
という構成となります。
しかし、すべての制御をスクリプトで書くのは、現実的ではないため、SIPropで
は、
制御モジュールコントロール+スクリプト+制御モジュール
という構成を取っています。
すなわち、スクリプトと制御モジュールが対極に位置しているイメージで、制御モジュールコントロールを踏まえて、柔軟性の落し所をどこに持ってくるのか?が、SIPropのポイントになると思っています。
上記の3機能に対して、どのように機能を割り振るかを決定します。
※他にも、機能がありそうなので、募集中。
※ただいま、議論中。