[[開発/設計]]


*クラス関係 [#u4970d1e]
-継承関係は、[[クラス図>開発/設計/クラス図]]を、参照
-詳細は、[[JavaDoc:http://www.siprop.org/ja/2.0/javadoc/SIProp-2.0]]を、参照


*起動&初期化部 [#cd2a8644]
***B2BUAMainクラス [#z7b2953c]
-起動用のmainメソッドがあるクラス
--Providerのインスタンス化を行う

***Providerインタフェース [#md4a4842]
-すべての初期化を行う
--すべてのRepositoryを呼び出し、実行する

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


*メッセージ部 [#s016dc58]
***Messageインタフェース [#pce9b14f]
-すべてのメッセージのスーパークラス

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

***Packetインタフェース [#d95684ec]
-層内でのみ、保持される情報を保持するインタフェース
--Routerから受信して、Routerに送信されるまでの情報
-下記のインタフェース群を保持していることが想定されている

***FlatMessageインタフェース [#sbba46de]
-完全なメッセージを表すインタフェース
-Packetインタフェース内に保持されることが想定されている

***Infoインタフェース [#o22ae954]
-完全なメッセージ(FlatMessageインタフェース)から、必要な情報だけを持つインタフェース
-Packetインタフェース内に保持されることが想定されている

***ControlMessageインタフェース [#ea6c941e]
-層に対して、どのように動作すべきかの情報を与えるためのインタフェース
--例えば、UA層に対して、どのCommandを呼ぶべきか?などの情報を保持している
---そのため、層に強く依存する
--層分、保持されていることが想定されているが、nullである可能性もある
-Packetインタフェース内に保持されることが想定されている


*Router部 [#oa2bddd5]
F2バージョンより、ServiceMixでの置き換えが可能となりました。

***Routerインタフェース [#p54ed2bd]
-ルーティング処理をするインタフェース
--ルーティング情報は、SendToKeyクラスとして、Packetインタフェースに保持される

***RouterInfoインタフェース [#mde44a0a]
-ルート情報を保持しているインタフェース
-下記のインタフェース群を保持していることが想定されている

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

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

***SendToKeyクラス [#i9c8624a]
-ルーティング情報を保持している。
--内部に、srcのRouteKeyインタフェースとdstのRouteKeyインタフェースを保持している。


*B2BUA層 [#z03cdbe4]
***B2BUAManagerインタフェース [#ef3feadf]
-スーパークラスは、RouterListenerインタフェースであり、B2BUA層のためのRouterインタフェースのエントリポイントとなるインタフェース

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

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

***B2BUAInfoインタフェース [#b715bb9c]
-メッセージ単位で、情報を保持するためのインタフェース


*UA層 [#i1e1bee4]
***UAManagerインタフェース [#jd3c628d]
-スーパークラスは、RouterListenerインタフェースであり、UA層のためのRouterインタフェースのエントリポイントとなるインタフェース

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

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

***UAInfoインタフェース [#t8f0b266]
-メッセージ単位で、情報を保持するためのインタフェース


*Stack層 [#u5e5996e]
***StackManagerインタフェース [#qc7b9274]
-スーパークラスは、RouterListenerインタフェースであり、Stack層のためのRouterインタフェースのエントリポイントとなるインタフェース

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

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

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

***TransactionInfoインタフェース [#ea32f5e5]
-TransactionEntryで必要な情報を保持するためのインタフェース


*Transport層 [#sb47ee6a]
-MINAベース
--TransportManagerインタフェース以降は、MINAに依存
***TransportManagerインタフェース [#y486409d]
-スーパークラスは、RouterListenerインタフェースであり、Transport層のためのRouterインタフェースのエントリポイントとなるインタフェース