Author: toad
Date: 2006-09-01 14:28:56 +0000 (Fri, 01 Sep 2006)
New Revision: 10314

Modified:
   trunk/plugins/JSTUN/JSTUN.java
Log:
Use multiple STUN servers.
Untested because of plugins not being buildable with eclipse!

Modified: trunk/plugins/JSTUN/JSTUN.java
===================================================================
--- trunk/plugins/JSTUN/JSTUN.java      2006-09-01 14:15:38 UTC (rev 10313)
+++ trunk/plugins/JSTUN/JSTUN.java      2006-09-01 14:28:56 UTC (rev 10314)
@@ -9,6 +9,7 @@

 import de.javawi.jstun.test.DiscoveryInfo;
 import de.javawi.jstun.test.DiscoveryTest;
+import freenet.crypt.RandomSource;
 import freenet.pluginmanager.DetectedIP;
 import freenet.pluginmanager.FredPlugin;
 import freenet.pluginmanager.FredPluginIPDetector;
@@ -21,29 +22,39 @@

        // From http://www.voip-info.org/wiki-STUN
        String[] publicSTUNServers = new String[] {
-                       ""
-       }
+                       "stun.fwdnet.net",
+                       "stun.fwd.org",
+                       "stun01.sipphone.com",
+                       "stun.softjoys.com",
+                       "stun.voipbuster.org",
+                       "stun.voxgratia.org",
+                       "stun.xten.com"
+       };

        DetectedIP runTest(InetAddress iaddress) {
-               String stunServer = "stun.xten.com";
-               try {
-                       DiscoveryTest test = new DiscoveryTest(iaddress, 
stunServer, 3478);
-                       // iphone-stun.freenet.de:3478
-                       // larry.gloo.net:3478
-                       // stun.xten.net:3478
-                       DiscoveryInfo info = test.test();
-                       System.out.println(info);
-                       return convert(info);
-               } catch (BindException be) {
-                       System.out.println(iaddress.toString() + ": " + 
be.getMessage());
-                       return null;
-               } catch (UnknownHostException e) {
-                       System.err.println("Could not find the STUN server 
"+stunServer+" : "+e+" - DNS problems?");
-                       return null;
-               } catch (Exception e) {
-                       System.out.println(e.getMessage());
-                       e.printStackTrace();
-                       return null;
+               Random r = new Random(); // FIXME use something safer?
+               Vector v = new Vector(publicSTUNServers.length);
+               for(int i=0;i<publicSTUNServers.length;i++)
+                       v.add(publicSTUNServers[i]);
+               while(!v.isEmpty()) {
+                       String stunServer = v.remove(r.nextInt(v.size()));
+                       try {
+                               DiscoveryTest test = new 
DiscoveryTest(iaddress, stunServer, 3478);
+                               // iphone-stun.freenet.de:3478
+                               // larry.gloo.net:3478
+                               // stun.xten.net:3478
+                               DiscoveryInfo info = test.test();
+                               System.out.println("Successful STUN 
discovery!:");
+                               System.out.println(info);
+                               return convert(info);
+                       } catch (BindException be) {
+                               System.err.println(iaddress.toString() + ": " + 
be.getMessage());
+                       } catch (UnknownHostException e) {
+                               System.err.println("Could not find the STUN 
server "+stunServer+" : "+e+" - DNS problems? Trying another...");
+                       } catch (Exception e) {
+                               System.err.println("Failed to run STUN to 
server "+stunServer+": "+e+" - trying another, report if persistent");
+                               e.printStackTrace();
+                       }
                }
        }



Reply via email to