SIP サーブレット
Session Initiation Protocol (SIP) サーブレットは、SIP サーブレット・コンテナーによって管理され、SIP シグナリングを実行する、Java ベースのアプリケーション・コンポーネントです。SIP サーブレットは、サーブレット・コンテナーを介して要求メッセージと応答メッセージを交換することにより、クライアントと対話します。
SIP サーブレット 1.0 仕様 (JSR 116) は、Java™ Specification Request (JSR) 116 によって標準化されています。 この仕様の理念は、HTTP サーブレットに類似した Java アプリケーション・プログラミング・インターフェース (API) を提供することによって、使いやすい SIP プログラミング・モデルを実現することにあります。 一般的な HTTP サーブレット・ プログラミング・モデルと同様に、 操作性と価値実現までの時間を最適化するために、 柔軟性がある程度制限されます。
しかし、SIP サーブレット API は、 HTTP サーブレットとは異なる点が多数あります。 それは、プロトコルが大きく違うからです。 SIP は、要求応答型プロトコルですが、1 つの要求に対して、 必ずしも応答が 1 つだけとは限りません。 このような複雑さと、 ハイパフォーマンスのソリューションへの ニーズが理由となって、SIP サーブレットそのものを非同期にする方が 容易であるとされていました。 また、HTTP サーブレットとは異なり、SIP サーブレットの プログラミング・モデルでは、 作成される他のロジックと並行して、 クライアント要求の作成を容易にする試みがなされました。 これは、アプリケーションの多くが、 他のサーバーやプロキシーへの クライアントやプロキシーとして機能するためです。
SipServlet 要求
HTTP サーブレットと同様に、各 SIP サーブレットは、 基本となる javax.servlet.sip.SipServlet クラスを拡張します。 すべてのメッセージは、拡張可能なサービス・メソッドを介して着信します。 しかし SIP には、応答に対する 1 対 1 の要求のマッピングがありません。 そこで、代わりに doRequest または doResponse メソッドを 拡張するという方法をお勧めします。 doRequest または doResponse メソッドを拡張する際は、 拡張メソッドを呼び出して処理を完了することが重要です。
仕様でサポートされる必要がある各要求メソッドには、 HTTP の場合と同様に doxxx メソッドがあります。 HTTP では、doGet および doPost のような メソッドは、GET および POST 要求のために存在しています。 SIP では、各 SIP 要求メソッドに対する、doInvite、doAck、doOptions、doBye、doCancel、doRegister、doSubscribe、doNotify、doMessage、doInfo、 および doPrack メソッドがあります。
HTTP サーブレットとは異なり、SIP サーブレットは、 サポートされる応答タイプごとのメソッドを持ちます。 したがって、SIP サーブレットには、doProvisionalResponse、 doSuccessResponse、doRedirectResponse、doErrorResponse などの 各種応答があります。 具体的には、暫定応答 (1xx 応答) は、状況を、 成功応答 (2xx 応答) は、トランザクションの正常終了を、 リダイレクト応答 (3xx 応答) は、 移動したリソースやエンティティーへのクライアントのリダイレクトを、 エラー応答 (4xx、5xx、6xx 応答) は、失敗や特定のエラー状態を、 それぞれ示すのに使用されます。 これらの応答メッセージのタイプは、HTTP に類似して いますが、SIP サーブレットのプログラミング・モデルには、 クライアント・プログラミング・モデルが組み込まれているため、 応答をプログラマチックに処理することも必要となります。
JSR 116 の説明
- JSR 289 セクション 4.1.3: Contact ヘッダー・フィールド
- JSR 289 セクション 5.2: 暗黙的トランザクション状態
- JSR 289 セクション 5.8: SIP サーブレット・メッセージのアクセシビリティー