SipServletRequest クラスと SipServletResponse クラスは、 HttpServletRequest クラスと HttpServletResponse クラスに似ています。
各クラスを使用すると、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); }