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.");
+                                               }
                                        }
                                }
                        }

Reply via email to