開発/設計/議論

議論の目的

パケットをどのようにNormalize化するかを議論します。

  • 議論を委譲しました。

メッセージ変換部の位置付け

ここでは、下記の機能を提供します。

  • メッセージのNormalize化
  • メッセージのテンプレートによる出力
  • トランスポート層(API含む)の制御

メッセージのNormalize化

メッセージ変換部 から スクリプト へ 送信される「FlatSIP」メッセージとな り、パケットを抽象化したメッセージに変換することを想定しているものです。
ただし、コントロールメッセージも必要になると思いますので、[[トランスポ ート層の制御>]]と合わせて、ご覧ください。

具体的な内容としては、パケットとして構成されるべきであろう最小公倍数的に ヘッダーなどを定義します。
対象としては、下記のようなものとなります。

  • IP、TCP、UDPのヘッダー
  • SIPのヘッダー
  • SDPなど上記Bodyとして使用されるもの

例えば、下記のようなSIPメッセージがあった場合

UDP x.x.x.x y.y.y.y
INVITE yyy@yyy SIP/2.0\r\n
To: xxx@xxx;tag=xxx
From: yyy@yyy

メッセージ変換部のメッセージのNormalize化処理を行うと

proto:UDP
srcIP:x.x.x.x
dstIP:y.y.y.y
METHOD:INVITE
FROM:xxx@xxx
TO:yyy@yyy

というようなものになります。

※SIPropの現バージョンにおいては、SIPのみの対応となるため、Stringを渡す のみという単純な構造とすることも検討しても良いかと思います。
これをどうするかを議論したいと思います。
※Velocityを用いるか、ただのクラスとするかも検討したいです。

より柔軟性を持たせるために

パケットの層構造に合わせて、数層構造に分けて、Normalize化処理をすること も視野に入れていますが、今回の実装では見送るかもしれません。
上記の例で言えば、IP層NormalizerとSIP層Normalizerを作成して、2段階でNormalize化処理を行うことを想定しています。

メッセージのテンプレートによる出力

上記のNormalize化されたメッセージを、具体的なパケット(SIP)に変換するもの となります。
ただし、コントロールメッセージも必要になると思いますので、[[トランスポ ート層の制御>]]と合わせて、ご覧ください。

上記のNormalize化されたメッセージに対して、下記のようなものを用意してお くと

  • 出力テンプレート
    INVITE {dstIP} SIP/2.0\r\n
    From: {FROM}
    To: {TO};tag=xxx

↓のように出力されるものとなります

  • 出力イメージ
    INVITE y.y.y.y SIP/2.0\r\n
    From: xxx.@xxx
    To: yyy@yyy;tag=yyy

※Velocityを使用する場合は、もっと違う形となりますので、そのVelocityのテ ンプレートの形を議論したいと思います。

トランスポート層(API含む)の制御

外界との接続部分と通信をさせるためにコントロールするための部分となります。
具体的には、TCP/UDPを生成したりする部分となり、それをメッセージ内にある パラメータのみで制御させることを目的としています。
ここに関しては、まだ、具体的に考慮していない部分です。すみません。

※この制御用のメッセージの種類を議論したいと思います。

議論の論点

「FlatSIP」メッセージ(Normalizeメッセージ)の内容

出力テンプレートの内容

トランスポート層(API含む)の制御種類

結論