我已經寫了一個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