Revision: 9564
Author: pavel.slegr
Date: Wed Jan 20 05:15:05 2010
Log: Fixes Issue 1189
http://code.google.com/p/mobicents/source/detail?r=9564
Modified:
/branches/jbcp/1.2/sip-servlets-release/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/startup/SipProtocolHandler.java
/branches/jbcp/1.2/sip-servlets-release/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/startup/SipStandardService.java
=======================================
---
/branches/jbcp/1.2/sip-servlets-release/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/startup/SipProtocolHandler.java
Wed Jan 20 05:13:42 2010
+++
/branches/jbcp/1.2/sip-servlets-release/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/startup/SipProtocolHandler.java
Wed Jan 20 05:15:05 2010
@@ -16,12 +16,14 @@
*/
package org.mobicents.servlet.sip.startup;
+import gov.nist.core.net.AddressResolver;
import gov.nist.javax.sip.SipStackExt;
import gov.nist.javax.sip.message.MessageFactoryExt;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
+import java.lang.reflect.Constructor;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.MalformedURLException;
@@ -44,6 +46,7 @@
import javax.management.MBeanServer;
import javax.management.ObjectName;
import javax.sip.ListeningPoint;
+import javax.sip.PeerUnavailableException;
import javax.sip.SipProvider;
import javax.sip.SipStack;
import javax.sip.header.ServerHeader;
@@ -121,6 +124,8 @@
private SipConnector sipConnector;
+ private String addressResolverClass =
DNSAddressResolver.class.getName();
+
public SipProtocolHandler() {
sipConnector = new SipConnector();
}
@@ -457,11 +462,31 @@
sipProvider.addSipListener(sipApplicationDispatcher);
sipApplicationDispatcher.getSipNetworkInterfaceManager().addExtendedListeningPoint(extendedListeningPoint);
// for nist sip stack set the DNS Address resolver allowing to make
DNS SRV lookups
- if(sipStack instanceof SipStackExt) {
+ if(sipStack instanceof SipStackExt && addressResolverClass != null &&
addressResolverClass.trim().length() > 0) {
if(logger.isDebugEnabled()) {
- logger.debug(sipStack.getStackName() +" will be using DNS SRV
lookups as AddressResolver");
- }
- ((SipStackExt) sipStack).setAddressResolver(new
DNSAddressResolver(sipApplicationDispatcher));
+ logger.debug("Sip Stack " + sipStack.getStackName() +" will be
using " + addressResolverClass + " as AddressResolver");
+ }
+ try {
+ // create parameters argument to identify
constructor
+ Class[] paramTypes = new Class[1];
+ paramTypes[0] =
SipApplicationDispatcher.class;
+ // get constructor of AddressResolver in order to
instantiate
+ Constructor addressResolverConstructor =
Class.forName(addressResolverClass).getConstructor(
+ paramTypes);
+ // Wrap properties object in order to pass to constructor
of AddressResolver
+ Object[] conArgs = new Object[1];
+ conArgs[0] = sipApplicationDispatcher;
+ // Creates a new instance of AddressResolver Class with the
supplied sipApplicationDispatcher.
+ AddressResolver addressResolver = (AddressResolver)
addressResolverConstructor.newInstance(conArgs);
+ ((SipStackExt)
sipStack).setAddressResolver(addressResolver);
+ } catch (Exception e) {
+ logger.error("Couldn't set the AddressResolver " +
addressResolverClass, e);
+ throw e;
+ }
+ } else {
+ if(logger.isInfoEnabled()) {
+ logger.info("no AddressResolver will be used since none has been
specified.");
+ }
}
}
@@ -760,4 +785,18 @@
public void postDeregister() {
}
-}
+
+ /**
+ * @param dnsAddressResolverClass the dnsAddressResolverClass to set
+ */
+ public void setAddressResolverClass(String dnsAddressResolverClass) {
+ this.addressResolverClass = dnsAddressResolverClass;
+ }
+
+ /**
+ * @return the dnsAddressResolverClass
+ */
+ public String getAddressResolverClass() {
+ return addressResolverClass;
+ }
+}
=======================================
---
/branches/jbcp/1.2/sip-servlets-release/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/startup/SipStandardService.java
Fri Dec 4 01:50:12 2009
+++
/branches/jbcp/1.2/sip-servlets-release/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/startup/SipStandardService.java
Wed Jan 20 05:15:05 2010
@@ -17,9 +17,11 @@
package org.mobicents.servlet.sip.startup;
+import gov.nist.core.net.AddressResolver;
import gov.nist.javax.sip.SipStackExt;
import java.io.File;
+import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.List;
import java.util.TooManyListenersException;
@@ -218,18 +220,34 @@
protocolHandler.getAttribute(SipStack.class.getSimpleName());
if(extendedListeningPoint != null && sipStack
!= null) {
// for nist sip stack set the DNS Address resolver allowing to make
DNS SRV lookups
- if(sipStack instanceof SipStackExt) {
+ String dnsAddressResolverClass =
((SipProtocolHandler)protocolHandler).getAddressResolverClass();
+ if(sipStack instanceof SipStackExt && dnsAddressResolverClass != null
&& dnsAddressResolverClass.trim().length() > 0) {
if(logger.isDebugEnabled()) {
- logger.debug(sipStack.getStackName() +" will be using DNS SRV
lookups as AddressResolver");
- }
- ((SipStackExt) sipStack).setAddressResolver(new
DNSAddressResolver(sipApplicationDispatcher));
- }
- try {
-
extendedListeningPoint.getSipProvider().addSipListener(sipApplicationDispatcher);
-
sipApplicationDispatcher.getSipNetworkInterfaceManager().addExtendedListeningPoint(extendedListeningPoint);
- connectorsStartedExternally =
false;
- } catch (TooManyListenersException e) {
- throw new LifecycleException(e);
+ logger.debug("Sip Stack " + sipStack.getStackName() +" will be
using " + dnsAddressResolverClass + " as AddressResolver");
+ }
+ try {
+
extendedListeningPoint.getSipProvider().addSipListener(sipApplicationDispatcher);
+
sipApplicationDispatcher.getSipNetworkInterfaceManager().addExtendedListeningPoint(extendedListeningPoint);
+ connectorsStartedExternally =
false;
+ //setting up the Address
Resolver :
+ // get constructor of AddressResolver in order to
instantiate
+ Class[] paramTypes = new Class[1];
+ paramTypes[0] =
SipApplicationDispatcher.class;
+ Constructor addressResolverConstructor =
Class.forName(dnsAddressResolverClass).getConstructor(
+ paramTypes);
+ // Wrap properties object in order to pass to constructor
of AddressResolver
+ Object[] conArgs = new Object[1];
+ conArgs[0] =
sipApplicationDispatcher;
+ // Creates a new instance of AddressResolver Class with
the supplied sipApplicationDispatcher.
+ AddressResolver addressResolver = (AddressResolver)
addressResolverConstructor.newInstance(conArgs);
+ ((SipStackExt)
sipStack).setAddressResolver(addressResolver);
+ } catch (Exception e) {
+ throw new LifecycleException("Couldn't set the
AddressResolver " + dnsAddressResolverClass, e);
+ }
+ } else {
+ if(logger.isInfoEnabled()) {
+ logger.info("no AddressResolver will be used since none has been
specified.");
+ }
}
}
}