Browse Source

Try EPSV when PASV fails

Arnaud Ysmal 12 years ago
parent
commit
6bad3e176c
1 changed files with 4 additions and 9 deletions
  1. 4 9
      ftp.go

+ 4 - 9
ftp.go

@@ -200,20 +200,15 @@ func (c *ServerConn) openDataConn() (net.Conn, error) {
 	//  else -> PASV
 	//  else -> PASV
 	_, nat6Supported := c.features["nat6"]
 	_, nat6Supported := c.features["nat6"]
 	_, epsvSupported := c.features["EPSV"]
 	_, epsvSupported := c.features["EPSV"]
-	// If host is IPv6 => EPSV
-	if strings.ContainsAny(c.host, ":%") {
-		epsvSupported = true
+
+	if !nat6Supported && !epsvSupported {
+		port, _ = c.pasv()
 	}
 	}
-	if nat6Supported || epsvSupported {
+	if port == 0 {
 		port, err = c.epsv()
 		port, err = c.epsv()
 		if err != nil {
 		if err != nil {
 			return nil, err
 			return nil, err
 		}
 		}
-	} else {
-		port, err = c.pasv()
-		if err != nil {
-			return nil, err
-		}
 	}
 	}
 
 
 	// Build the new net address string
 	// Build the new net address string