我目前正在开发一个带有 sip 的通信系统,使用 mobicents(tomcat 上的 sip-servlet 实现)作为基础。我尝试实现一个通知服务,UA 可以不时通过通知订阅获取状态信息。正如我在 RFC3265-“特定事件通知”中读到的,订阅的通知消息必须具有相同的呼叫 ID,因为它们属于订阅对话。
问题:现在我在创建具有相同 Call-ID 的 NOTIFY 时遇到了问题,因为我不知道如何告诉 servlet-container 新请求属于当前对话框。这是我尝试测试的内容:
public void doSubscribe(SipServletRequest request){
try{
//Get Session
SipApplicationSession session = request.getApplicationSession();
//Send response
SipServletResponse response = request.createResponse(SipServletResponse.SC_OK);
response.setExpires(600);
response.setHeader("Event", "buddylist");
response.send();
//Send notify (same call-id!!!)
Address serverAddress = this.sipFactory.createAddress("sip:server@test.com");
SipServletRequest newRequest = sipFactory.createRequest(session, "NOTIFY", serverAddress, request.getFrom());
newRequest.setHeader("Subscription-State", "active;expires=600");
newRequest.setHeader("Event", "buddylist");
newRequest.send();
} catch(Exception e){
e.printStackTrace();
}
}
我认为添加相同的会话可以完成这项工作,但事实并非如此。有谁知道如何正确地做到这一点?