在SipServlet中,
doMessage(SipServletRequest request)
这个方法主要用来处理接收到的message.
下面一段简单的代码:
@Override protected void doMessage(SipServletRequest req) throws ServletException, IOException{ SipApplicationSession sas = this.getSas(req.getFrom());//取得用户A的SipApplicationSession if(sas != null){ Proxy proxy = req.getProxy();//取得Proxy proxy.setRecordRoute(true); proxy.setSupervised(true); SipUser sipuser = this.getSipuser(req.getTo()); if (sipuser != null){ proxy.proxyTo(sipuser.getContact());//将请求代理给B } } }
上面的代码的功能,主要是使用代理方式,
转发Message给B.
现在需要将请求重构后再转发:
于是,取消了使用Proxy的方式.
SipUser su = null; su = this.getSipuser(req.getTo();//取得用户B if(su == null){ req.createResponse(SipServletResponse.SC_NOT_FOUND).send();//如果不存在,返回404给A } else { req.createResponse(SipServletResponse.SC_OK).send();//如果存在返回200OK给A //创建新的请求 SipServletRequest newReq = sf.createRequest(sf.createApplicationSession(), req.getMethod(), Sipfrom, Sipto); //set Message设置请求 Object content = null; content = req.getContent(); String contentType = ""; contentType = req.getContentType(); if(content != null && !(contentType.equals(""))) newReq.setContent(content, contentType); URI contact = sf.createURI(su.getContact().toString()); newReq.setRequestURI(contact); //设置请求的URI newReq.send();//发送请求给B } if(req.getApplicationSession() != null) req.getApplicationSession().invalidate();//使A的SipApplicationSession失效,可以减少内存
的损耗.
之前因为忘记了添加newReq.setRequestURI(contact); 部分的代码,
那个纠结啊,真不是一般人能体会的.
呵呵.
特此记录一下,免得下次犯同样的错误.