Description
When trying to do an active FTP transfer as client from behind a firewall with NAT, setActiveExternalIPAddress is not sufficient, as you can only report the internal IP of the client (e.g. 192.168.1.2 vs 72.14.X.X)
FTPClient should support an additional function to set the REPORTABLE external active IP Address
I created and successfully tested a fix for this:
ADD PRIVATE MEMBER:
private InetAddress __reportActiveExternalHost;
IN __initDefaults():
__reportActiveExternalHost = null;
ADD PUBLIC FUNCTIONS:
private InetAddress getReportHostAddress()
{
if (__reportActiveExternalHost != null)
else if (__activeExternalHost != null)
{ return __activeExternalHost; }else
{ // default local address return getLocalAddress(); }}
public void setReportActiveExternalIPAddress(String ipAddress) throws UnknownHostException
{ this.__reportActiveExternalHost = InetAddress.getByName(ipAddress); }IN openDataConnection:
if (isInet6Address)
{
if (!FTPReply.isPositiveCompletion(eprt(getReportHostAddress(), server.getLocalPort())))
}
else
{
if (!FTPReply.isPositiveCompletion(port(getReportHostAddress(), server.getLocalPort())))
{ server.close(); return null; }
}
will also attach changed file
sorry I am not familiar with the correct way to submit patches, although I tried to model this on #NET-285 as much as possible