SIP SipServletRequest クラスと SipServletResponse クラス
SipServletRequest クラスと SipServletResponse クラスは、 HttpServletRequest クラスと HttpServletResponse クラスに似ています。
SipServletRequest クラスと SipServletResponse クラス
各クラスを使用すると、SIP メッセージ内のヘッダーにアクセスし、 それらを操作することができます。 要求および応答には非同期という特性があるため、 このクラスは要求に対する新規応答を作成する場所にもなります。 doInvite メソッドを拡張すると、SipServletRequest クラスのみが、そのメソッドに渡されます。 クライアントに応答を送信するには、Request オブジェクトの createResponse メソッドを呼び出して、応答を作成する必要があります。 以下に例を示します。
protected void doInvite(SipServletRequest req) throws
javax.servlet.ServletException, java.io.IOException {
//send back a provisional Trying response
SipServletResponse resp = req.createResponse(100);
resp.send();
非同期という特性があるため、SIP サーブレットは複雑に見えます。 しかし、前述のコード・サンプルにあるような単純な方法で、 クライアントに応答を送信しています。
次に、より複雑な SIP サーブレットの例を紹介します。 サーブレットは、SIP サーブレットに組み込まれている 次のメソッドを使用して、example.com domain が 呼び出し元ではない呼び出しを、すべてブロックします。
protected void doInvite(SipServletRequest req) throws
javax.servlet.ServletException, java.io.IOException {
//check to make sure that the URI is a SIP URI
if (req.getFrom().getURI().isSipURI()){
SipURI uri = (SipURI)req.getFrom.getURI();
if (!uri.getHost().equals("example.com")) {
//send forbidden response for calls outside domain
req.createResponse(SipServletResponse.SC_FORBIDDEN).send();
return;
}
}
//proxy all other requests on to their original destination
req.getProxy().proxyTo(req.getRequestURI);
}