我已经写了一个SIP UAC,并且我尝试了几种方法来检测并忽略来自UAS的重复传入消息,但是我尝试了每种方法,出错了,我的问题是所有必须用相同的调用做相同的签名,并且比较所有的消息文本太多了,所以我想知道,当我试图检测这些重复消息时,我应该看到组成消息的参数。检测重复SIP消息的最佳实现是什么?
UPDATE:
我有一个问题与传入选项,这是我与向服务器发送一个空的OK应答处理。 (更新:经过一段时间的测试后,我注意到,我仍然每隔几秒钟就会收到一次Options请求,因此我尝试用一个Bad请求进行响应,现在我只收到一次/两次Options请求每个注册/重新注册)
当前我有SessionInPogress的重复消息,以及不同的错误消息,如在这里忙,不可用,我得到这么多这样,它会混淆我的登录,我想过滤它们。
任何想法如何实现?
UPDATE:
我来试试你的工艺回发之前,也许这将解决我的问题
这是我用过的东西,它工作得很好:
private boolean compare(SIPMessage message1, SIPMessage message2) {
if (message1.getClass() != message2.getClass())
return false;
if (message1.getCSeq().getSeqNumber() != message2.getCSeq().getSeqNumber())
return false;
if (!message1.getCSeq().getMethod().equals(message2.getCSeq().getMethod()))
return false;
if (!message1.getCallId().equals(message2.getCallId()))
return false;
if (message1.getClass()==SIPResponse.class)
if(((SIPResponse)message1).getStatusCode()!=((SIPResponse)message2).getStatusCode())
return false;
return true;
}
谢谢, 亚当。
什么类型的消息?临时回应?最终答复?你使用UDP吗?你在和RFC 2543 UAS还是RFC 3261 UAS交谈? – 2010-07-01 09:04:01
如果是回应或请求,它真的很重要吗?临时还是最终?所有消息的通用性都不低,我可以识别重复的消息吗? – TacB0sS 2010-07-01 09:42:06
嗯,它有助于回答问题:)请求/响应重传处理方式不同。 – 2010-07-01 10:17:02