Author: nextgens
Date: 2007-11-10 19:10:10 +0000 (Sat, 10 Nov 2007)
New Revision: 15741

Modified:
   trunk/freenet/src/freenet/clients/http/SimpleToadletServer.java
   trunk/freenet/src/freenet/clients/http/StartupToadletServer.java
   trunk/freenet/src/freenet/io/NetworkInterface.java
   trunk/freenet/src/freenet/node/TextModeClientInterfaceServer.java
   trunk/freenet/src/freenet/node/fcp/FCPServer.java
Log:
Add a new parameter to NetworkInterface : ignoreUnbindable

Modified: trunk/freenet/src/freenet/clients/http/SimpleToadletServer.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/SimpleToadletServer.java     
2007-11-10 13:46:53 UTC (rev 15740)
+++ trunk/freenet/src/freenet/clients/http/SimpleToadletServer.java     
2007-11-10 19:10:10 UTC (rev 15741)
@@ -90,7 +90,7 @@
                public void set(String bindTo) throws 
InvalidConfigValueException {
                        if(!bindTo.equals(get())) {
                                try {
-                                       networkInterface.setBindTo(bindTo);
+                                       networkInterface.setBindTo(bindTo, 
false);
                                        SimpleToadletServer.this.bindTo = 
bindTo;
                                } catch (IOException e) {
                                        // This is an advanced option for 
reasons of reducing clutter,
@@ -342,7 +342,7 @@
                this.advancedModeEnabled = 
fproxyConfig.getBoolean("advancedModeEnabled");              
                toadlets = new LinkedList();

-               this.networkInterface = NetworkInterface.create(port, 
this.bindTo, fproxyConfig.getString("allowedHosts"), core.getExecutor());
+               this.networkInterface = NetworkInterface.create(port, 
this.bindTo, fproxyConfig.getString("allowedHosts"), core.getExecutor(), true);

                if(!enabled) {
                        Logger.normal(core, "Not starting FProxy as it's 
disabled");

Modified: trunk/freenet/src/freenet/clients/http/StartupToadletServer.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/StartupToadletServer.java    
2007-11-10 13:46:53 UTC (rev 15740)
+++ trunk/freenet/src/freenet/clients/http/StartupToadletServer.java    
2007-11-10 19:10:10 UTC (rev 15741)
@@ -146,8 +146,9 @@
         boolean start = true;
         NetworkInterface ni = null;
         try {
-            ni = NetworkInterface.create(port, bindTo, allowedHosts, executor);
+            ni = NetworkInterface.create(port, bindTo, allowedHosts, executor, 
true);
         } catch (IOException e) {
+            e.printStackTrace();
             Logger.error(this, "Error starting SimpleToadletServer on "+ 
bindTo + ':' + port);
             System.err.println("Error starting SimpleToadletServer on "+ 
bindTo + ':' + port);
             start = false;

Modified: trunk/freenet/src/freenet/io/NetworkInterface.java
===================================================================
--- trunk/freenet/src/freenet/io/NetworkInterface.java  2007-11-10 13:46:53 UTC 
(rev 15740)
+++ trunk/freenet/src/freenet/io/NetworkInterface.java  2007-11-10 19:10:10 UTC 
(rev 15741)
@@ -64,10 +64,10 @@

        private final Executor executor;

-       public static NetworkInterface create(int port, String bindTo, String 
allowedHosts, Executor executor) throws IOException {
+       public static NetworkInterface create(int port, String bindTo, String 
allowedHosts, Executor executor, boolean ignoreUnbindable) throws IOException {
                NetworkInterface iface = new NetworkInterface(port, 
allowedHosts, executor);
                try {
-                       iface.setBindTo(bindTo);
+                       iface.setBindTo(bindTo, ignoreUnbindable);
                } catch (IOException e) {
                        try {
                                iface.close();
@@ -101,7 +101,7 @@
         * @param bindTo
         *            A comma-separated list of IP address to bind to
         */
-       public void setBindTo(String bindTo) throws IOException {
+       public void setBindTo(String bindTo, boolean ignoreUnbindable) throws 
IOException {
                StringTokenizer bindToTokens = new StringTokenizer(bindTo, ",");
                List bindToTokenList = new ArrayList();
                while (bindToTokens.hasMoreTokens()) {
@@ -127,7 +127,14 @@
                acceptors.clear();
                for (int serverSocketIndex = 0; serverSocketIndex < 
bindToTokenList.size(); serverSocketIndex++) {
                        ServerSocket serverSocket = new ServerSocket();
+                        try {
                        serverSocket.bind(new InetSocketAddress((String) 
bindToTokenList.get(serverSocketIndex), port));
+                        } catch (SocketException e) {
+                            if(ignoreUnbindable)
+                                continue;
+                            else
+                                throw e;
+                        }
                        Acceptor acceptor = new Acceptor(serverSocket);
                        acceptors.add(acceptor);
                }

Modified: trunk/freenet/src/freenet/node/TextModeClientInterfaceServer.java
===================================================================
--- trunk/freenet/src/freenet/node/TextModeClientInterfaceServer.java   
2007-11-10 13:46:53 UTC (rev 15740)
+++ trunk/freenet/src/freenet/node/TextModeClientInterfaceServer.java   
2007-11-10 19:10:10 UTC (rev 15741)
@@ -47,7 +47,7 @@
         this.bindTo=bindTo;
         this.allowedHosts = allowedHosts;
         this.isEnabled=true;
-               networkInterface = NetworkInterface.create(port, bindTo, 
allowedHosts, n.executor);
+       networkInterface = NetworkInterface.create(port, bindTo, allowedHosts, 
n.executor, true);
     }

     void start() {
@@ -150,7 +150,7 @@
        public void set(String val) throws InvalidConfigValueException {
                if(val.equals(get())) return;
                try {
-                               
core.getTextModeClientInterface().networkInterface.setBindTo(val);
+                               
core.getTextModeClientInterface().networkInterface.setBindTo(val, false);
                                core.getTextModeClientInterface().bindTo = val;
                        } catch (IOException e) {
                                throw new InvalidConfigValueException("could 
not change bind to!");

Modified: trunk/freenet/src/freenet/node/fcp/FCPServer.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/FCPServer.java   2007-11-10 13:46:53 UTC 
(rev 15740)
+++ trunk/freenet/src/freenet/node/fcp/FCPServer.java   2007-11-10 19:10:10 UTC 
(rev 15741)
@@ -117,7 +117,7 @@

                NetworkInterface tempNetworkInterface = null;
                try {
-                       tempNetworkInterface = NetworkInterface.create(port, 
bindTo, allowedHosts, node.executor);
+                       tempNetworkInterface = NetworkInterface.create(port, 
bindTo, allowedHosts, node.executor, false);
                } catch (BindException be) {
                        Logger.error(this, "Couldn't bind to FCP Port "+bindTo+ 
':' +port+". FCP Server not started.");
                        System.out.println("Couldn't bind to FCP Port "+bindTo+ 
':' +port+". FCP Server not started.");
@@ -232,7 +232,7 @@
                public void set(String val) throws InvalidConfigValueException {
                        if(!val.equals(get())) {
                                try {
-                                       
node.getFCPServer().networkInterface.setBindTo(val);
+                                       
node.getFCPServer().networkInterface.setBindTo(val, true);
                                        node.getFCPServer().bindTo = val;
                                } catch (IOException e) {
                                        // This is an advanced option for 
reasons of reducing clutter,


Reply via email to