package org.swiftp; import java.net.InetAddress; import java.net.Socket; abstract public class DataSocketFactory { /** * A DataSocketFactory hides the implementation of the opening and closing * of the data sockets which are used to transmit directory listings and * file contents. This is necessary because normal FTP data sockets are * opened and closed very differently from the abnormal sort of data sockets * we use in conjunction with our proxy system. */ protected MyLog myLog = new MyLog(getClass().getName()); /** * When SwiFTP receives a PORT command, this will be called. Subclasses should * perform whatever initialization is necessary. * @return Whether the necessary actions completed successfully */ abstract public boolean onPort(InetAddress dest, int port); /** * When SwiFTP receives a PASV command, this will be called. Subclasses should * perform whatever initialization is necessary. * @return Whether the necessary actions completed successfully */ abstract public int onPasv(); /** * When it's time for data transfer to begin, the SessionThread will call this * method to perform any necessary actions to prepare the Socket for use and * return it in a state that's ready for reading or writing. * @return The opened Socket */ abstract public Socket onTransfer(); /** * Sometimes we'll need to know the IP address at which we can be contacted. For * instance, the response to a PASV command will be the IP and port that the * client should use to connect it's data socket. */ abstract public InetAddress getPasvIp(); /** * We sometimes want to track the total number of bytes that go over the * command and data sockets. The SessionThread can call this function to * reports its usage, and different DataSocketFactory subclasses can * handle the data however is appropriate. For the ProxyDataSocketFactory, * we want to present the total to the user in the UI to guilt them into * donating. * @param numBytes the number of bytes to add to the total */ abstract public void reportTraffic(long numBytes); }