Class VsftpRepository

java.lang.Object
org.apache.ivy.plugins.repository.AbstractRepository
org.apache.ivy.plugins.repository.vsftp.VsftpRepository
All Implemented Interfaces:
Repository

public class VsftpRepository extends AbstractRepository
Repository using SecureCRT vsftp command line program to access an sftp repository This is especially useful to leverage the gssapi authentication supported by SecureCRT. In cases where usual sftp is enough, prefer the 100% java solution of sftp repository. This requires SecureCRT to be in the PATH. Tested with SecureCRT 5.0.5
  • Field Details

    • LS_DATE_INDEX4

      private static final int LS_DATE_INDEX4
      See Also:
    • LS_DATE_INDEX3

      private static final int LS_DATE_INDEX3
      See Also:
    • LS_DATE_INDEX2

      private static final int LS_DATE_INDEX2
      See Also:
    • LS_DATE_INDEX1

      private static final int LS_DATE_INDEX1
      See Also:
    • LS_SIZE_INDEX

      private static final int LS_SIZE_INDEX
      See Also:
    • LS_PARTS_NUMBER

      private static final int LS_PARTS_NUMBER
      See Also:
    • DISCONNECT_COMMAND_TIMEOUT

      private static final int DISCONNECT_COMMAND_TIMEOUT
      See Also:
    • REUSE_CONNECTION_SLEEP_TIME

      private static final int REUSE_CONNECTION_SLEEP_TIME
      See Also:
    • READER_ALIVE_SLEEP_TIME

      private static final int READER_ALIVE_SLEEP_TIME
      See Also:
    • MAX_READER_ALIVE_ATTEMPT

      private static final int MAX_READER_ALIVE_ATTEMPT
      See Also:
    • ERROR_SLEEP_TIME

      private static final int ERROR_SLEEP_TIME
      See Also:
    • PROMPT_SLEEP_TIME

      private static final int PROMPT_SLEEP_TIME
      See Also:
    • MAX_READ_PROMPT_ATTEMPT

      private static final int MAX_READ_PROMPT_ATTEMPT
      See Also:
    • GET_JOIN_MAX_TIME

      private static final int GET_JOIN_MAX_TIME
      See Also:
    • DEFAULT_REUSE_CONNECTION_TIME

      private static final int DEFAULT_REUSE_CONNECTION_TIME
      See Also:
    • DEFAULT_READ_TIMEOUT

      private static final int DEFAULT_READ_TIMEOUT
      See Also:
    • PROMPT

      private static final String PROMPT
      See Also:
    • FORMAT

      private static final SimpleDateFormat FORMAT
    • host

      private String host
    • username

      private String username
    • authentication

      private String authentication
    • in

      private Reader in
    • err

      private Reader err
    • out

      private PrintWriter out
    • errors

      private volatile StringBuilder errors
    • readTimeout

      private long readTimeout
    • reuseConnection

      private long reuseConnection
    • lastCommand

      private volatile long lastCommand
    • inCommand

      private volatile boolean inCommand
    • process

      private Process process
    • connectionCleaner

      private Thread connectionCleaner
    • errorsReader

      private Thread errorsReader
    • errorsLastUpdateTime

      private volatile long errorsLastUpdateTime
    • ivy

      private Ivy ivy
  • Constructor Details

    • VsftpRepository

      public VsftpRepository()
    • VsftpRepository

      public VsftpRepository(TimeoutConstraint timeoutConstraint)
  • Method Details

    • getResource

      public Resource getResource(String source) throws IOException
      Description copied from interface: Repository
      Return the resource associated with a specified identifier. If the resource does not exist, it should return a Resource with exists() returning false. An IOException should only be thrown when a real IO problem occurs, like the impossibility to connect to a server.
      Parameters:
      source - A string identifying the resource.
      Returns:
      The resource associated with the resource identifier.
      Throws:
      IOException - On error while trying to get resource.
    • initIvy

      private void initIvy()
    • getInitResource

      protected Resource getInitResource(String source) throws IOException
      Throws:
      IOException
    • get

      public void get(String source, File destination) throws IOException
      Description copied from interface: Repository
      Fetch a resource from the repository.
      Parameters:
      source - A string identifying the resource to be fetched.
      destination - Where to place the fetched resource.
      Throws:
      IOException - On retrieval failure.
    • list

      public List<String> list(String parent) throws IOException
      Description copied from interface: Repository
      Return a listing of resources names
      Parameters:
      parent - The parent directory from which to generate the listing.
      Returns:
      A listing of the parent directory's file content
      Throws:
      IOException - On listing failure.
    • put

      public void put(File source, String destination, boolean overwrite) throws IOException
      Overrides:
      put in class AbstractRepository
      Throws:
      IOException
    • mkdirs

      private void mkdirs(String destDir) throws IOException
      Throws:
      IOException
    • dirExists

      private boolean dirExists(String dir) throws IOException
      Throws:
      IOException
    • sendCommand

      protected String sendCommand(String command) throws IOException
      Throws:
      IOException
    • sendCommand

      protected void sendCommand(String command, Pattern expectedResponse) throws IOException
      Throws:
      IOException
    • sendCommand

      protected void sendCommand(String command, Pattern expectedResponse, long timeout) throws IOException
      The behaviour of vsftp with some commands is to log the resulting message on the error stream, even if everything is ok. So it's quite difficult if there was an error or not. Hence we compare the response with the expected message and deal with it. The problem is that this is very specific to the version of vsftp used for the test, That's why expected messages are obtained using overriddable protected methods.
      Parameters:
      command - String
      expectedResponse - Pattern
      timeout - long
      Throws:
      IOException - if something goes wrong
    • sendCommand

      protected String sendCommand(String command, boolean sendErrorAsResponse) throws IOException
      Throws:
      IOException
    • sendCommand

      protected String sendCommand(String command, boolean sendErrorAsResponse, boolean single) throws IOException
      Throws:
      IOException
    • sendCommand

      protected String sendCommand(String command, boolean sendErrorAsResponse, long timeout) throws IOException
      Throws:
      IOException
    • sendCommand

      protected String sendCommand(String command, boolean sendErrorAsResponse, boolean single, long timeout) throws IOException
      Throws:
      IOException
    • readResponse

      protected String readResponse(boolean sendErrorAsResponse) throws IOException
      Throws:
      IOException
    • readResponse

      protected String readResponse(boolean sendErrorAsResponse, long timeout) throws IOException
      Throws:
      IOException
    • sendSingleCommand

      private void sendSingleCommand(String command) throws IOException
      Throws:
      IOException
    • ensureConnectionOpened

      protected void ensureConnectionOpened() throws IOException
      Throws:
      IOException
    • updateLastCommandTime

      private void updateLastCommandTime()
    • exec

      private void exec(String command) throws IOException
      Throws:
      IOException
    • checkInterrupted

      private void checkInterrupted()
    • cleanup

      private void cleanup(Exception ex)
      Called whenever an api level method end
    • cleanup

      private void cleanup()
      Called whenever an api level method end
    • disconnect

      public void disconnect()
    • closeConnection

      private void closeConnection()
    • lslToResource

      protected Resource lslToResource(String file, String responseLine)
      Parses a ls -l line and transforms it in a resource
      Parameters:
      file - ditto
      responseLine - ditto
      Returns:
      Resource
    • getSingleCommand

      protected String getSingleCommand(String command)
    • getConnectionCommand

      protected String getConnectionCommand()
    • getExpectedDownloadMessage

      protected Pattern getExpectedDownloadMessage(String source, File to)
    • getExpectedRemoveMessage

      protected Pattern getExpectedRemoveMessage(String destination)
    • getExpectedUploadMessage

      protected Pattern getExpectedUploadMessage(File source, String to)
    • getAuthentication

      public String getAuthentication()
    • setAuthentication

      public void setAuthentication(String authentication)
    • getHost

      public String getHost()
    • setHost

      public void setHost(String host)
    • getUsername

      public String getUsername()
    • setUsername

      public void setUsername(String username)
    • chomp

      private static StringBuilder chomp(StringBuilder str)
    • toString

      public String toString()
      Overrides:
      toString in class AbstractRepository
    • setReuseConnection

      public void setReuseConnection(long time)
      Sets the reuse connection time. The same connection will be reused if the time here does not last between two commands. O indicates that the connection should never be reused
      Parameters:
      time - long
    • getReadTimeout

      public long getReadTimeout()
    • setReadTimeout

      public void setReadTimeout(long readTimeout)