Liberty 中的 SIP SipServletRequest 和 SipServletResponse 類別
SipServletRequest 和 SipServletResponse 類別類似於您在開發 Web 應用程式時所用的 HttpServletRequest 和 HttpServletResponse 類別。
每一個類別都讓您能夠存取 SIP 訊息中的標頭,並加以操作。由於要求和回應的非同步本質,SipServletRequest 類別也會為要求建立新的回應。當您延伸 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 Servlet 似乎很複雜;不過,就像上述程式碼範例那樣簡單的事項,也能傳送回應給用戶端。
下列範例顯示較複雜的 SIP Servlet。當您將下列方法包含在 SIP Servlet 中時,Servlet 會封鎖不是來自 example.com 網域的所有呼叫。
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);
}
如需這些類別的相關資訊,請參閱「SIP Servlet 規格 1.1」JSR 289。