Configurer un multihébergement
Le conteneur SIP peut accepter du proxy SIP une liste d'interfaces sortantes et l'exposer à n'importe quelle application SIP.
Avant de commencer
Pourquoi et quand exécuter cette tâche
Le multihébergement permet à une même application de communiquer avec différents UAC (User Agent Clients) et UAS (User Agent Servers) sur différents réseaux.
L'application invite le conteneur SIP à déterminer la liste d'interfaces sortantes disponibles à l'aide des procédures standard définies par JSR 289. Elle utilise pour ce faire un attribut de contexte maintenu dans le conteneur (par le biais d'échanges de protocoles avec tous les proxy SIP disponibles). Cet attribut, javax.servlet.sip.SipServlet.OUTBOUND_INTERFACES, est défini comme suit :javax.servlet.sip.outboundInterfaces. Il contient toutes les interfaces disponibles. Le code fourni à titre d'exemple dans la section Exemple illustre comment accéder à cet attribut depuis l'application.
Après avoir configuré les interfaces de chaque proxy SIP, suivez les étapes de la procédure pour contrôler le routage des messages sortants. Si vous utilisez plusieurs proxy, veillez à ce qu'ils soient tous configurés à l'identique.
Si une application ne spécifie aucune interface à utiliser pour l'envoi de requêtes sortantes, le proxy utilise les interfaces par défaut. Il est recommandé de définir les interfaces par défaut pour chaque protocole. Voir step 5 pour plus d'informations.
L'administrateur peut éventuellement configurer trois propriétés personnalisées de proxy SIP pour définir le nom de la chaîne correspondant à l'interface à utiliser si l'application SIP n'invoque pas la méthode setOutboundInterface. Sans la configuration de ces propriétés personnalisées et l'utilisation de la méthode setOutboundInterface, l'interface utilisée pour les demandes sortantes ne pourra pas être déterminée définitivement.
La procédure suivante applique une topologie contenant une configuration de proxy unique pour un hébergement multiple avec plusieurs interfaces réseau.
Procédure
Résultats
Exemple
....
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);
}