다중 홈 호스팅 구성
SIP 컨테이너는 SIP 프록시에서 아웃바운드 인터페이스 목록을 채택하고 SIP 애플리케이션에 이를 노출할 수 있습니다.
시작하기 전에
이 태스크 정보
다중 홈을 통해 단일 애플리케이션은 다른 네트워크에 있는 사용자 에이전트 서버(UAS) 및 상이한 사용자 에이전트 클라이언트(UAC)와 통신할 수 있습니다.
애플리케이션은 SIP 컨테이너를 조회해서 JSR 289에 정의된 표준 프로시저를 사용하여 사용 가능한 아웃바운드 인터페이스 목록을 판별합니다. 이는 컨테이너에서 유지보수되는(사용 가능한 모든 SIP 프록시와의 프로토콜 교환으로) 컨텍스트 속성을 통해 수행됩니다. 이 속성은 javax.servlet.sip.SipServlet.OUTBOUND_INTERFACES이며, javax.servlet.sip.outboundInterfaces로 정의됩니다. 이 속성은 사용 가능한 모든 인터페이스를 포함합니다. 예제 섹션의 샘플 코드는 애플리케이션에서 속성에 액세스하는 방법을 보여줍니다.
각 SIP 프록시마다 인터페이스가 구성되고 나면 절차의 단계에 따라 아웃바운드 메시지 라우팅을 제어하십시오. 둘 이상의 프록시가 사용되는 경우에는 각 프록시를 동일하게 구성하는 것이 중요합니다.
애플리케이션이 아웃바운드 요청을 보내는 데 사용할 인터페이스를 지정하지 않을 경우 기본 인터페이스가 프록시에 사용됩니다. 모든 프로토콜에 기본 인터페이스를 설정할 것을 권장합니다. 자세한 정보는 단계 5를 참조하십시오.
관리자는 선택적으로, SIP 애플리케이션이 setOutboundInterface 메소드를 호출하지 않을 경우에 사용할 적합한 인터페이스를 정의하는 세 개의 SIP 프록시 사용자 정의 특성을 설정할 수 있습니다. 사용자 정의 특성이 설정되지 않고 setOutboundInterface 메소드가 사용되지 않으면 아웃바운드 요청에 사용할 인터페이스를 명확하게 판별할 수 없습니다.
다음 절차는 둘 이상의 네트워크 인터페이스가 있는 다중 홈 호스팅에 대한 단일 프록시 설정을 포함한 토폴로지에 적용됩니다.
프로시저
결과
예
....
import javax.servlet.sip.SipServlet;
import javax.servlet.sip.SipSession;
....
protected void doInvite(SipServletRequest req1) throws ServletException, IOException
{
...
// This block of code handles setting of the outbound interface.
SipSession sipSession = req1.getSession();
javax.servlet.ServletContext context = getServletContext();
java.util.List list = (java.util.List)context.getAttribute(javax.servlet.sip.SipServlet.
OUTBOUND_INTERFACES);
SipURI uri = getProtocolInterface ("udp", list);
if (uri != null)
{
InetSocketAddress inetSocketAddr = new InetSocketAddress(uri.getHost(), uri.getPort());
sipSession .setOutboundInterface(inetSocketAddr);
}
...
}
// This method simply pulls out the first interface in the list for the specified protocol
private SipURI getProtocolInterface(String transport, List outboundInterfaceList)
{
SipURI uri = null;
Iterator iterator = outboundInterfaceList.iterator();
while (iterator.hasNext())
{
SipURI tempUri = (SipURI)iterator.next();
if (tempUri.getTransportParam().equals(transport) == true)
{
uri = tempUri;
break;
}
}
return (uri);
}