使用wss时,Restcomm SipServlet UAC缺少联系

时间:2016-05-03 23:55:36

标签: restcomm mobicents-sip-servlets

我正在尝试在收到如此邀请时触发注册请求:

SipURI fromToURI = sipFactory.createSipURI(userName, domainName);
//using the invite request to make a register request   

SipServletRequest sipServletRequest = sipFactory.createRequest(request.getApplicationSession(), "REGISTER", fromToURI, fromToURI);
sipServletRequest.setHeader("Expires", "3600");     
sipServletRequest.setHeader("User-Agent", "mobicentsWSSclient");
SipURI requestURI = sipFactory.createSipURI("myroutablewssproxy.com", domainName);
//.setPort();
requestURI.setTransportParam("wss");
requestURI.setPort(8443);
try {
    Parameterable parameterable = sipServletRequest.getParameterableHeader("Contact");
    parameterable.setParameter("expires", "0");
} catch (ServletParseException e1) {
    logger.error("Impossible to set the expires on the contact header",e1);
}
try {           
    sipServletRequest.setRequestURI(requestURI);                
    sipServletRequest.send();
} catch (IOException e) {
    logger.error("An unexpected exception occured while sending the REGISTER request",e);
}

但是在尝试访问联系人标题时我得到一个空指针异常。如果我没有尝试访问联系头,则注册请求完全没有联系头,因此注册尝试失败。有没有办法访问servlet上下文并在此注册请求中使用它的联系信息?

1 个答案:

答案 0 :(得分:0)

来自SIP Servlets规范第4.1.3节 Contact header是一个系统头,这意味着它由容器管理,除了以下消息之外,不能被应用程序修改或设置: 1.注册请求和响应 2. 3xx回复 3. 485回复 4. 200 / OPTIONS回复

因此,在这种情况下,您的应用程序负责在REGISTER请求和响应上设置联系人标题。