2015-02-06 14 views
0

에들을 때 SIP 메시지에 대한 인바운드 IP를 확인, 나는 (. 즉, 모든 인터페이스에서 수신) 0.0.0.0의 주소와 ListeningPoint 인스턴스를 만들 :자이나교 SIP : 자이나교 SIP API를 사용하는 경우 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을 사용하는 것이 좋지 않다고 생각하지만, 이것을 피하기 위해 디자인을 다시 고려할 수도 있습니다. –

+0

그런데 0.0.0.0을 사용하지 않고 특정 IP 주소를 사용하더라도 여러 전송을 수신하는 경우 요청이 어느 주소로 도착했는지 확인할 수 있습니까? 나는 그것을 할 수있는 방법을 찾을 수 없다. 그것은 이상하게 보인다. INVITE에 대한 응답으로 다시 보내도록 Contact 헤더를 결정하는 방법을 모르겠습니다. –

+0

각 전송에는 자체 SipProvider가 있어야하며 각 이벤트에 대해이 SipProvider와 같은 공급자를 볼 수 있습니다. sipProvider = (SipProvider) requestEvent.getSource(); 당신의 udp 또는 tcp 공급자인지 확인하십시오. SIP 메시지 자체의 Via 헤더를 확인하는 것도 상당히 안전합니다. –