[SIP]Message

在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); 部分的代码,

那个纠结啊,真不是一般人能体会的.

呵呵.

特此记录一下,免得下次犯同样的错误.

你可能感兴趣的:(message)