開発/設計

クラス関係

起動&初期化部

B2BUAMainクラス

  • 起動用のmainメソッドがあるクラス
    • Providerのインスタンス化を行う

Providerインタフェース

  • すべての初期化を行う
    • すべてのRepositoryを呼び出し、実行する

Repositoryインタフェース

  • 層(Managerインタフェース)単位で、初期化を行う
    • 層内で使用する情報は、ここに保持される

メッセージ部

Messageインタフェース

  • すべてのメッセージのスーパークラス

Contextインタフェース

  • 層間をまたぐ情報を保持するメッセージ
    • 対向UAから受信して、対向UAに送信されるまでの情報
    • SIP的には、ダイアログレベルの情報を表す
  • 内部に、Packetインターフェースを複数持つことが想定されている

Packetインタフェース

  • 層内でのみ、保持される情報を保持するメッセージ
    • Routerから受信して、Routerに送信されるまでの情報
  • 下記のインタフェース群を保持していることが想定されている

FlatMessageインタフェース

  • ノーマライズ化されたメッセージを表すメッセージ
  • Packetインタフェース内に保持されることが想定されている

Infoインタフェース

  • FlatMessageインタフェースから、必要な情報だけを抜き出したメッセージ
  • Packetインタフェース内に保持されることが想定されている

ControlMessageインタフェース

  • 層に対して、どのように動作すべきかの情報を与えるためのメッセージ
    • 例えば、UA層に対して、どのCommandを呼ぶべきか?などの情報を保持している
      • そのため、層に強く依存する
  • Packetインタフェース内に保持されることが想定されている

Router部

F2バージョンより、ServiceMixでの置き換えが可能となりました。

Routerインタフェース

  • Messageインタフェースのルーティング処理をする
    • ルーティング情報は、SendToKeyクラスとして、Packetインタフェースに保持される

RouterInfoインタフェース

  • ルーティング情報を保持している
  • 下記のインタフェース群を保持していることが想定されている

Listenerインタフェース

  • ルーティング先のエントリポイントを表すインタフェース
    • Managerインタフェースにより継承されているため、利用する場合は、Managerインタフェース経由となる

RouteKeyインタフェース

  • Routerインタフェースが、使用するルーティング情報を保持するインタフェース
    • SendToKeyクラスとして、Packetクラスに保持されている

SendToKeyクラス

  • 層間のsrcとdstを保持しているクラス
    • 内部に、srcのRouteKeyインタフェースとdstのRouteKeyインタフェースを保持している。

B2BUA層

B2BUAManagerインタフェース

  • スーパークラスは、Listenerインタフェースであり、B2BUA層のためのRouterインタフェースのエントリポイントとなるインタフェース

B2BUAModuleインタフェース

  • B2BUAとしての動作(シーケンス)を定義するためのインタフェース
    • 内部的には、スクリプタブルな動作をするようになっている
      • 具体的には、UACommandの呼び出し順などを定義する
    • いずれは、スクリプト化することが目標
  • AsteriskB2BUAなど、必要に応じて、定義することとなる

B2BUAContextインタフェース

  • B2BUAとしての動作するときに必要なダイアログ情報を保持するためのインタフェース
  • B2BUAInfoインタフェースを、複数保持することが想定される

B2BUAInfoインタフェース

  • ControlMessage単位で、情報を保持するためのインタフェース

UA層

UAManagerインタフェース

  • スーパークラスは、Listenerインタフェースであり、UA層のためのRouterインタフェースのエントリポイントとなるインタフェース

UACommandインタフェース

  • メッセージの操作を定義し、処理するインタフェース
    • 動作(シーケンス)上、必要なメッセージの書き換えなどを処理
      • 例えば、Inviteリクエストのauthヘッダーが正しいかをチェックしたい場合、InviteUA.do_Invite_check_auth() として、必要な処理を定義する
  • B2BUA層より、UAMessageControlを利用して、呼び出されることが想定されている

UAContextインタフェース

  • UAとしての動作するときに必要なダイアログ情報を保持するためのインタフェース
    • B2BUA層を利用したくない場合やUAの動作として必要な動作を定義するために、B2BUA層のB2BUAModuleインタフェースの代わりに使用される
  • UAInfoインタフェースを、複数保持することが想定される

UAInfoインタフェース

  • ControlMessage単位で、情報を保持するためのインタフェース

Stack層

StackManagerインタフェース

  • スーパークラスは、Listenerインタフェースであり、Stack層のためのRouterインタフェースのエントリポイントとなるインタフェース

TransactionUserインタフェース

  • SIP的なTUそのものを表すインタフェース
    • トランサクションの管理を行う
  • Proxy動作するためのTransactionUserなどの拡張をすることが想定されている

TransactionControllerインタフェース

  • フォーキングコントロールのために存在するインタフェース
    • 1つのIDのトランザクションが、複数に分岐する可能性がある場合に使用される

TransactionEntryインタフェース

  • 具体的なトランザクション処理を記述するためのインタフェース
    • InviteServerTransactionなどが、実装されている

TransactionInfoインタフェース

  • TransactionEntryで必要な情報を保持するためのインタフェース

Transport層

  • MINAベース
    • TransportManagerインタフェース以降は、MINAに依存

TransportManagerインタフェース

  • スーパークラスは、Listenerインタフェースであり、Transport層のためのRouterインタフェースのエントリポイントとなるインタフェース