2015-02-06 73 views
0

聽當使用JAIN SIP API當確定入站IP的SIP消息,我創建了一個ListeningPoint實例與0.0.0.0地址(即監聽所有接口。):JAIN SIP:在0.0.0.0

sipStack.createListeningPoint("0.0.0.0", 5060, "TCP"); 

有沒有一種方法可以確定傳入的SIP消息到達哪個IP接口(爲了在響應消息中派生出合適的聯繫人頭地址以及其他用途)?

回答

1

聽到0.0.0.0不是一個好主意,有些情況下SIP堆棧也必須猜測要使用的地址,它可能會猜錯。我認爲不可能使用標準API來告訴地址,但幾乎可以使用實現中的私有API。例如https://jsip.ci.cloudbees.com/job/jsip/javadoc/gov/nist/javax/sip/message/SIPMessage.html#getLocalAddress()

你也可以通過Via頭等猜測,但再次不是一個好主意。

+0

謝謝@VladimirRalev。我很早就調查過Via頭文件,但至少在查看從遠程方派發的SIP消息時(直接到我的端點),沒有看到目標地址。儘管我通常不是使用0.0.0.0的好主意,但可能會重新考慮設計以避免這種情況。 – 2015-02-06 15:59:29

+0

順便說一句,即使不使用0.0.0.0,但是一個特定的IP地址,如果我正在監聽多個傳輸,我怎麼能確定哪一個請求到達?我甚至找不到這樣做的方式,這看起來很奇怪。我不知道如何確定聯繫人頭信息以回覆INVITE。 – 2015-03-24 15:59:29

+0

每個傳輸應該有它自己的SipProvider,然後爲每個事件你可以看到像這樣的提供者SipProvider sipProvider =(SipProvider)requestEvent.getSource();並查看它是你的udp還是tcp提供者。檢查SIP消息的Via頭本身也是相當安全的。 – 2015-03-24 19:11:07