2015-02-06 77 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