我写了一个 SIP UAC,我尝试了几种方法来检测和忽略来自 UAS 的重复传入消息,但是在我尝试的每一种方法中,都出现了问题,我的问题是所有与相同的调用具有相同的签名,并且比较所有消息文本太多了,所以我想知道,在尝试检测这些重复消息时,我应该查看构成消息的哪个参数。
更新:
我遇到了传入选项的问题,我通过向服务器发送一个空的 Ok 响应来处理这个问题。(更新:经过一段时间的测试,我注意到,我仍然时不时地收到另一个选项请求,每隔几秒就很少,所以我尝试用错误的请求进行响应,现在我只收到一次/两次选项请求每次注册/重新注册)
目前我有重复的 SessionInPogress 消息,以及不同的错误消息,例如这里很忙,不可用,我收到了很多这样的消息,它弄乱了我的日志,我想过滤它们。
知道如何实现吗?
更新:
我会在回复之前尝试您的技术,也许这会解决我的问题
这是我使用的,效果很好:
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;
}
谢谢,亚当。