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。