Configuración de hosting de múltiples alojamientos
El contenedor SIP puede aceptar del proxy SIP una lista de interfaces de salida y exponerla a cualquier aplicación SIP.
Antes de empezar
Acerca de esta tarea
El alojamiento múltiple permite que una aplicación individual se comunique con diferentes UAC (User Agent Client) y UAS (User Agent Servers) en redes diferentes.
La aplicación consulta al contenedor SIP para determinar la lista de interfaces de salida disponibles utilizando los procedimientos definidos por JSR 289. Esto se lleva a cabo mediante un atributo de contexto que se mantiene en el contenedor (mediante los intercambios de protocolo con todos los proxy SIP disponibles). Este atributo es javax.servlet.sip.SipServlet.OUTBOUND_INTERFACES, el cual se define para que sea javax.servlet.sip.outboundInterfaces. Este atributo contiene todas las interfaces disponibles. El código de ejemplo de la sección Ejemplo muestra cómo acceder al atributo desde la aplicación.
Después de configurar las interfaces en cada proxy SIP, siga los pasos del procedimiento para controlar el direccionamiento de los mensajes de salida. Si se está utilizando más de un proxy, es importante que cada proxy se configure de forma idéntica.
Cuando una aplicación no especifica una interfaz para utilizarla para enviar solicitudes de salida, el proxy utiliza las interfaces predeterminadas. Se recomienda establecer las interfaces predeterminadas para cada protocolo. Consulte el paso 5 para obtener más información
El administrador puede establecer opcionalmente tres propiedades personalizadas del proxy SIP que definan el nombre de cadena que define la interfaz adecuada que se ha de utilizar si la aplicación SIP no llama al método setOutboundInterface. Si estas propiedades personalizadas no se han establecido y no se utiliza seoutboundInterface, la interfaz que se utilizará para las solicitudes de salida no se puede determinar de forma definitiva.
El procedimiento siguiente se aplica a una topología que contiene una configuración de un único proxy para host de múltiples alojamientos con más de una interfaz de red.
Procedimiento
Resultados
Ejemplo
....
import javax.servlet.sip.SipServlet;
import javax.servlet.sip.SipSession;
....
protected void doInvite(SipServletRequest req1) throws ServletException, IOException
{
...
// Este bloque de código maneja el valor de la interfaz de salida.
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);
}
...
}
// Este método simplemente extrae la primera interfaz de la lista para el protocolo especificado
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);
}