Author: dbkr
Date: 2006-04-13 13:38:33 +0000 (Thu, 13 Apr 2006)
New Revision: 8535
Modified:
trunk/freenet/src/freenet/node/Version.java
trunk/freenet/src/freenet/node/fcp/FCPServer.java
Log:
640: Fix Crashing issue if we can't bind to the FCP Port, and fix NPE and
resulting config file corruption when FCP server is disabled.
Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-04-13 10:59:58 UTC (rev
8534)
+++ trunk/freenet/src/freenet/node/Version.java 2006-04-13 13:38:33 UTC (rev
8535)
@@ -20,7 +20,7 @@
public static final String protocolVersion = "1.0";
/** The build number of the current revision */
- private static final int buildNumber = 639;
+ private static final int buildNumber = 640;
/** Oldest build of Fred we will talk to */
private static final int lastGoodBuild = 591;
Modified: trunk/freenet/src/freenet/node/fcp/FCPServer.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/FCPServer.java 2006-04-13 10:59:58 UTC
(rev 8534)
+++ trunk/freenet/src/freenet/node/fcp/FCPServer.java 2006-04-13 13:38:33 UTC
(rev 8535)
@@ -11,6 +11,7 @@
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
+import java.net.BindException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
@@ -67,29 +68,58 @@
persister = null;
}
- public FCPServer(String ipToBindTo, int port, Node node, boolean
persistentDownloadsEnabled, String persistentDownloadsDir, long
persistenceInterval) throws IOException, InvalidConfigValueException {
+ public FCPServer(String ipToBindTo, int port, Node node, boolean
persistentDownloadsEnabled, String persistentDownloadsDir, long
persistenceInterval, boolean isEnabled) throws IOException,
InvalidConfigValueException {
this.bindTo = ipToBindTo;
this.persistenceInterval = persistenceInterval;
this.port = port;
- this.enabled = true;
- this.sock = new ServerSocket(port, 0,
InetAddress.getByName(bindTo));
- this.node = node;
- clientsByName = new WeakHashMap();
- // This one is only used to get the default settings.
Individual FCP conns
- // will make their own.
- HighLevelSimpleClient client = node.makeClient((short)0);
- defaultFetchContext = client.getFetcherContext();
- defaultInsertContext = client.getInserterContext();
- Thread t = new Thread(this, "FCP server");
+ this.enabled = isEnabled;
this.enablePersistentDownloads = persistentDownloadsEnabled;
- globalClient = new FCPClient("Global Queue", this, null, true);
setPersistentDownloadsFile(new File(persistentDownloadsDir));
- t.setDaemon(true);
- t.start();
- if(enablePersistentDownloads) {
- loadPersistentRequests();
- startPersister();
+
+ if (this.enabled) {
+ this.node = node;
+ clientsByName = new WeakHashMap();
+
+
+ // This one is only used to get the default settings.
Individual FCP conns
+ // will make their own.
+ HighLevelSimpleClient client =
node.makeClient((short)0);
+ defaultFetchContext = client.getFetcherContext();
+ defaultInsertContext = client.getInserterContext();
+
+
+ globalClient = new FCPClient("Global Queue", this,
null, true);
+
+
+ if(enablePersistentDownloads) {
+ loadPersistentRequests();
+ startPersister();
+ }
+
+ Logger.normal(this, "Starting FCP server on
"+bindTo+":"+port+".");
+ ServerSocket tempsock = null;
+ try {
+ tempsock = new ServerSocket(port, 0,
InetAddress.getByName(bindTo));
+ } catch (BindException be) {
+ Logger.error(this, "Couldn't bind to FCP Port
"+port+". FCP Server not started.");
+ }
+
+ this.sock = tempsock;
+
+ if (this.sock != null) {
+ Thread t = new Thread(this, "FCP server");
+ t.setDaemon(true);
+ t.start();
+ }
+ } else {
+ Logger.normal(this, "Not starting FCP server as it's
disabled");
+ this.sock = null;
+ this.node = null;
+ this.clientsByName = null;
+ this.globalClient = null;
+ this.defaultFetchContext = null;
}
+
}
public void run() {
@@ -243,20 +273,16 @@
long persistentDownloadsInterval =
fcpConfig.getLong("persistentDownloadsInterval");
FCPServer fcp;
- if(fcpConfig.getBoolean("enabled")){
- Logger.normal(node, "Starting FCP server on
"+fcpConfig.getString("bindTo")+":"+fcpConfig.getInt("port")+".");
- fcp = new FCPServer(fcpConfig.getString("bindTo"),
fcpConfig.getInt("port"), node, persistentDownloadsEnabled,
persistentDownloadsDir, persistentDownloadsInterval);
- node.setFCPServer(fcp);
-
- if(fcp != null) {
- cb1.server = fcp;
- cb2.server = fcp;
- cb3.server = fcp;
- }
- }else{
- Logger.normal(node, "Not starting FCP server as it's
disabled");
- fcp = null;
+
+ fcp = new FCPServer(fcpConfig.getString("bindTo"),
fcpConfig.getInt("port"), node, persistentDownloadsEnabled,
persistentDownloadsDir, persistentDownloadsInterval,
fcpConfig.getBoolean("enabled"));
+ node.setFCPServer(fcp);
+
+ if(fcp != null) {
+ cb1.server = fcp;
+ cb2.server = fcp;
+ cb3.server = fcp;
}
+
fcpConfig.finishedInitialization();
return fcp;