Do we want the node to start up if it can't bind the FCP port?

On Thu, Apr 13, 2006 at 01:38:39PM +0000, dbkr at freenetproject.org wrote:
> 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;
> 
> _______________________________________________
> cvs mailing list
> cvs at freenetproject.org
> http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs
> 

-- 
Matthew J Toseland - toad at amphibian.dyndns.org
Freenet Project Official Codemonkey - http://freenetproject.org/
ICTHUS - Nothing is impossible. Our Boss says so.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: 
<https://emu.freenetproject.org/pipermail/devl/attachments/20060413/6088c939/attachment.pgp>

Reply via email to