You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by sa...@apache.org on 2010/03/29 10:56:44 UTC

svn commit: r928650 - in /mina/ftpserver/branches/1.0.x/core/src: main/java/org/apache/ftpserver/impl/DefaultDataConnectionConfiguration.java test/java/org/apache/ftpserver/clienttests/PasvPortUnavailableTest.java

Author: sai
Date: Mon Mar 29 08:56:44 2010
New Revision: 928650

URL: http://svn.apache.org/viewvc?rev=928650&view=rev
Log:
Fix for FTPSERVER-360

Added:
    mina/ftpserver/branches/1.0.x/core/src/test/java/org/apache/ftpserver/clienttests/PasvPortUnavailableTest.java   (with props)
Modified:
    mina/ftpserver/branches/1.0.x/core/src/main/java/org/apache/ftpserver/impl/DefaultDataConnectionConfiguration.java

Modified: mina/ftpserver/branches/1.0.x/core/src/main/java/org/apache/ftpserver/impl/DefaultDataConnectionConfiguration.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/branches/1.0.x/core/src/main/java/org/apache/ftpserver/impl/DefaultDataConnectionConfiguration.java?rev=928650&r1=928649&r2=928650&view=diff
==============================================================================
--- mina/ftpserver/branches/1.0.x/core/src/main/java/org/apache/ftpserver/impl/DefaultDataConnectionConfiguration.java (original)
+++ mina/ftpserver/branches/1.0.x/core/src/main/java/org/apache/ftpserver/impl/DefaultDataConnectionConfiguration.java Mon Mar 29 08:56:44 2010
@@ -122,25 +122,7 @@ public class DefaultDataConnectionConfig
      * port will be used.
      */
     public synchronized int requestPassivePort() {
-        int dataPort = -1;
-        int loopTimes = 2;
-        Thread currThread = Thread.currentThread();
-
-        while ((dataPort == -1) && (--loopTimes >= 0)
-                && (!currThread.isInterrupted())) {
-
-            // search for a free port
-            dataPort = passivePorts.reserveNextPort();
-
-            // no available free port - wait for the release notification
-            if (dataPort == -1) {
-                try {
-                    wait();
-                } catch (InterruptedException ex) {
-                }
-            }
-        }
-        return dataPort;
+    	return passivePorts.reserveNextPort();
     }
 
     /**
@@ -157,8 +139,6 @@ public class DefaultDataConnectionConfig
      */
     public synchronized void releasePassivePort(final int port) {
         passivePorts.releasePort(port);
-
-        notify();
     }
 
     /**

Added: mina/ftpserver/branches/1.0.x/core/src/test/java/org/apache/ftpserver/clienttests/PasvPortUnavailableTest.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/branches/1.0.x/core/src/test/java/org/apache/ftpserver/clienttests/PasvPortUnavailableTest.java?rev=928650&view=auto
==============================================================================
--- mina/ftpserver/branches/1.0.x/core/src/test/java/org/apache/ftpserver/clienttests/PasvPortUnavailableTest.java (added)
+++ mina/ftpserver/branches/1.0.x/core/src/test/java/org/apache/ftpserver/clienttests/PasvPortUnavailableTest.java Mon Mar 29 08:56:44 2010
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.ftpserver.clienttests;
+
+import java.net.ServerSocket;
+
+import org.apache.ftpserver.DataConnectionConfigurationFactory;
+import org.apache.ftpserver.FtpServerFactory;
+import org.apache.ftpserver.listener.ListenerFactory;
+import org.apache.ftpserver.test.TestUtil;
+import org.apache.commons.net.ftp.FTPClient;
+import org.apache.commons.net.ftp.FTPConnectionClosedException;
+
+
+/**
+*
+* @author <a href="http://mina.apache.org">Apache MINA Project</a>
+*
+*/
+public class PasvPortUnavailableTest extends ClientTestTemplate {
+
+    private int passivePort;
+
+    @Override
+    protected FtpServerFactory createServer() throws Exception {
+        FtpServerFactory server = super.createServer();
+
+        ListenerFactory listenerFactory = new ListenerFactory(server
+                .getListener("default"));
+
+        DataConnectionConfigurationFactory dccFactory = new DataConnectionConfigurationFactory();
+
+        passivePort = TestUtil.findFreePort(12444);
+
+        dccFactory.setPassivePorts(String.valueOf(passivePort));
+
+        listenerFactory.setDataConnectionConfiguration(dccFactory
+                .createDataConnectionConfiguration());
+
+        server.addListener("default", listenerFactory.createListener());
+
+        return server;
+    }
+
+    public void testPasvPortUnavailable() throws Exception {
+    	FTPClient[] clients = new FTPClient[3];
+    	for(int i = 0; i < 3; i ++) {
+    		clients[i] = createFTPClient();
+    		clients[i] .connect("localhost", getListenerPort());
+    		clients[i].login(ADMIN_USERNAME, ADMIN_PASSWORD);
+    		clients[i].pasv();
+    		if(i < 1) {
+    			assertTrue(clients[i].getReplyString(), clients[i].getReplyString().trim().startsWith("227"));
+    		}
+    		else {
+    			assertTrue(clients[i].getReplyString(), clients[i].getReplyString().trim().startsWith("425"));
+    		}
+    	}
+    	for(int i = 0; i < 3; i ++) {
+    		if(clients[i] != null) {
+    			clients[i].disconnect();
+    		}
+    	}
+    }
+}

Propchange: mina/ftpserver/branches/1.0.x/core/src/test/java/org/apache/ftpserver/clienttests/PasvPortUnavailableTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain