マルチホーム・ホスティングの構成
SIP コンテナーは、 アウトバウンド・インターフェースのリストを SIP プロキシーから受け入れて、 任意の SIP アプリケーションに公開できます。
始める前に
このタスクについて
マルチホームによって、 単一のアプリケーションで、異なるネットワーク上のさまざまなユーザー・エージェント・クライアント (UAC) および ユーザー・エージェント・サーバー (UAS) と通信することができます。
アプリケーションは、 SIP コンテナーを照会し、JSR 289 で定義された標準手順を使用して、使用可能なアウトバウンド・インターフェースのリストを判断します。 これは、(使用可能なすべての SIP プロキシーとのプロトコル交換を通じて) コンテナー内に保持されるコンテキスト属性を通じて行われます。この属性は javax.servlet.sip.SipServlet.OUTBOUND_INTERFACES であり、 javax.servlet.sip.outboundInterfaces となるように定義されます。この属性には、使用可能なすべてのインターフェースが含まれます。 「例」セクションのサンプル・コードで、 アプリケーションからこの属性にアクセスする方法を示します。
各 SIP プロキシーにインターフェースを構成した後で、手順で示したステップを実行して、アウトバウンド・メッセージのルーティングを制御します。 複数のプロキシーを使用する場合は、各プロキシーを同じ構成にすることが重要です。
アプリケーションがアウトバウンド要求を送信するために使用するインターフェースを指定しないと、デフォルトのインターフェースがプロキシーによって使用されます。 どのプロトコルの場合にもデフォルトのインターフェースを設定することをお勧めします。 詳しくは、ステップ 5 を参照してください。
オプションで、 管理者は、チェーン名を定義する 3 つの SIP プロキシーのカスタム・プロパティーを設定できます。 この名前によって、SIP アプリケーションが setOutboundInterface メソッドを呼び出さない場合に使用される、 適切なインターフェースを定義します。これらのカスタム・プロパティーを設定せず、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);
}