You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by ng...@apache.org on 2009/04/24 21:15:40 UTC

svn commit: r768399 - in /mina/ftpserver/branches/1.0.x/core/src/main/java/org/apache/ftpserver: DataConnectionConfigurationFactory.java impl/IODataConnection.java impl/IODataConnectionFactory.java

Author: ngn
Date: Fri Apr 24 19:15:40 2009
New Revision: 768399

URL: http://svn.apache.org/viewvc?rev=768399&view=rev
Log:
Adding timeout on data connection sockets (as well as some extra logging). Fixes FTPSERVER-293.

Modified:
    mina/ftpserver/branches/1.0.x/core/src/main/java/org/apache/ftpserver/DataConnectionConfigurationFactory.java
    mina/ftpserver/branches/1.0.x/core/src/main/java/org/apache/ftpserver/impl/IODataConnection.java
    mina/ftpserver/branches/1.0.x/core/src/main/java/org/apache/ftpserver/impl/IODataConnectionFactory.java

Modified: mina/ftpserver/branches/1.0.x/core/src/main/java/org/apache/ftpserver/DataConnectionConfigurationFactory.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/branches/1.0.x/core/src/main/java/org/apache/ftpserver/DataConnectionConfigurationFactory.java?rev=768399&r1=768398&r2=768399&view=diff
==============================================================================
--- mina/ftpserver/branches/1.0.x/core/src/main/java/org/apache/ftpserver/DataConnectionConfigurationFactory.java (original)
+++ mina/ftpserver/branches/1.0.x/core/src/main/java/org/apache/ftpserver/DataConnectionConfigurationFactory.java Fri Apr 24 19:15:40 2009
@@ -25,6 +25,8 @@
 import org.apache.ftpserver.impl.DefaultDataConnectionConfiguration;
 import org.apache.ftpserver.impl.PassivePorts;
 import org.apache.ftpserver.ssl.SslConfiguration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Data connection factory
@@ -34,6 +36,8 @@
  */
 public class DataConnectionConfigurationFactory {
 
+    private Logger log = LoggerFactory.getLogger(DataConnectionConfigurationFactory.class);
+    
     // maximum idle time in seconds
     private int idleTime = 300;
     private SslConfiguration ssl;
@@ -212,6 +216,7 @@
             // no available free port - wait for the release notification
             if (dataPort == -1) {
                 try {
+                    log.info("Out of passive ports, waiting for one to be released. Might be stuck");
                     wait();
                 } catch (InterruptedException ex) {
                 }

Modified: mina/ftpserver/branches/1.0.x/core/src/main/java/org/apache/ftpserver/impl/IODataConnection.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/branches/1.0.x/core/src/main/java/org/apache/ftpserver/impl/IODataConnection.java?rev=768399&r1=768398&r2=768399&view=diff
==============================================================================
--- mina/ftpserver/branches/1.0.x/core/src/main/java/org/apache/ftpserver/impl/IODataConnection.java (original)
+++ mina/ftpserver/branches/1.0.x/core/src/main/java/org/apache/ftpserver/impl/IODataConnection.java Fri Apr 24 19:15:40 2009
@@ -35,6 +35,8 @@
 import org.apache.ftpserver.ftplet.FtpSession;
 import org.apache.ftpserver.usermanager.impl.TransferRateRequest;
 import org.apache.ftpserver.util.IoUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * <strong>Internal class, do not use directly.</strong>
@@ -47,6 +49,10 @@
  */
 public class IODataConnection implements DataConnection {
 
+    private final Logger LOG = LoggerFactory
+    .getLogger(IODataConnection.class);
+
+    
     private static final byte[] EOL = System.getProperty("line.separator").getBytes();
     
     private FtpIoSession session;
@@ -284,6 +290,14 @@
 
                 notifyObserver();
             }
+        } catch(IOException e) {
+            LOG.warn("Exception during data transfer, closing data connection socket", e);
+            factory.closeDataConnection();
+            throw e;
+        } catch(RuntimeException e) {
+            LOG.warn("Exception during data transfer, closing data connection socket", e);
+            factory.closeDataConnection();
+            throw e;
         } finally {
             if (bos != null) {
                 bos.flush();

Modified: mina/ftpserver/branches/1.0.x/core/src/main/java/org/apache/ftpserver/impl/IODataConnectionFactory.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/branches/1.0.x/core/src/main/java/org/apache/ftpserver/impl/IODataConnectionFactory.java?rev=768399&r1=768398&r2=768399&view=diff
==============================================================================
--- mina/ftpserver/branches/1.0.x/core/src/main/java/org/apache/ftpserver/impl/IODataConnectionFactory.java (original)
+++ mina/ftpserver/branches/1.0.x/core/src/main/java/org/apache/ftpserver/impl/IODataConnectionFactory.java Fri Apr 24 19:15:40 2009
@@ -360,6 +360,10 @@
 
                     dataSoc = servSoc.accept();
                 }
+                DataConnectionConfiguration dataCfg = session.getListener()
+                    .getDataConnectionConfiguration();
+                
+                dataSoc.setSoTimeout(dataCfg.getIdleTime() * 1000);
                 LOG.debug("Passive data connection opened");
             }
         } catch (Exception ex) {