org.apache.commons.net.ftp

## Class FTPSClient

- java.lang.Object
- - org.apache.commons.net.SocketClient
  - - org.apache.commons.net.ftp.FTP
    - - org.apache.commons.net.ftp.FTPClient
      - - org.apache.commons.net.ftp.FTPSClient

- All Implemented Interfaces:
    Configurable

      public class FTPSClient
      extends FTPClient

  FTP over SSL processing. If desired, the JVM property -Djavax.net.debug=all can be used to see wire-level SSL details. Warning: the hostname is not verified against the certificate by default, use `setHostnameVerifier(HostnameVerifier)` or `setEndpointCheckingEnabled(boolean)` (on Java 1.7+) to enable verification. Verification is only performed on client mode connections.

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class org.apache.commons.net.ftp.FTPClient

      `FTPClient.HostnameResolver, FTPClient.NatServerResolverImpl`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static int` | `DEFAULT_FTPS_DATA_PORT` Default FTPS data port.
    `static int` | `DEFAULT_FTPS_PORT` Default FTPS port.

    - ### Fields inherited from class org.apache.commons.net.ftp.FTPClient

      `ACTIVE_LOCAL_DATA_CONNECTION_MODE, ACTIVE_REMOTE_DATA_CONNECTION_MODE, FTP_IP_ADDRESS_FROM_PASV_RESPONSE, FTP_SYSTEM_TYPE, FTP_SYSTEM_TYPE_DEFAULT, PASSIVE_LOCAL_DATA_CONNECTION_MODE, PASSIVE_REMOTE_DATA_CONNECTION_MODE, SYSTEM_TYPE_PROPERTIES`

    - ### Fields inherited from class org.apache.commons.net.ftp.FTP

      `_commandSupport_, _controlEncoding, _controlInput_, _controlOutput_, _newReplyString, _replyCode, _replyLines, _replyString, ASCII_FILE_TYPE, BINARY_FILE_TYPE, BLOCK_TRANSFER_MODE, CARRIAGE_CONTROL_TEXT_FORMAT, COMPRESSED_TRANSFER_MODE, DEFAULT_CONTROL_ENCODING, DEFAULT_DATA_PORT, DEFAULT_PORT, DEFLATE_TRANSFER_MODE, EBCDIC_FILE_TYPE, FILE_STRUCTURE, LOCAL_FILE_TYPE, NON_PRINT_TEXT_FORMAT, PAGE_STRUCTURE, RECORD_STRUCTURE, REPLY_CODE_LEN, STREAM_TRANSFER_MODE, strictMultilineParsing, TELNET_TEXT_FORMAT`

    - ### Fields inherited from class org.apache.commons.net.SocketClient

      `_defaultPort_, _hostname_, _input_, _output_, _serverSocketFactory_, _socket_, _socketFactory_, _timeout_, connectTimeout, NETASCII_EOL, remoteInetSocketAddress`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `FTPSClient()` Constructor for FTPSClient, calls `FTPSClient(String, boolean)`.
    `FTPSClient(boolean isImplicit)` Constructor for FTPSClient, using `DEFAULT_PROTOCOL` - i.e.
    `FTPSClient(boolean isImplicit, SSLContext context)` Constructor for FTPSClient, using `DEFAULT_PROTOCOL` - i.e.
    `FTPSClient(SSLContext context)` Constructor for FTPSClient, using `DEFAULT_PROTOCOL` - i.e.
    `FTPSClient(String protocol)` Constructor for FTPSClient, using explicit mode, calls `FTPSClient(String, boolean)`.
    `FTPSClient(String protocol, boolean isImplicit)` Constructor for FTPSClient allowing specification of protocol and security mode.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected void` | `_connectAction_()` Because there are so many connect() methods, the _connectAction_() method is provided as a means of performing some action immediately after establishing a connection, rather than reimplementing all the connect() methods.
    `protected Socket` | `_openDataConnection_(String command, String arg)` Returns a socket of the data connection.
    `protected void` | `_prepareDataSocket_(Socket socket)` Performs any custom initialization for a newly created SSLSocket (before the SSL handshake happens).
    `void` | `disconnect()` Closes the connection to the FTP server and restores connection parameters to the default values.
    `int` | `execADAT(byte[] data)` Sends the ADAT command with the specified authentication data.
    `protected void` | `execAUTH()` Sends the AUTH command.
    `int` | `execAUTH(String mechanism)` Sends the AUTH command with the specified mechanism.
    `int` | `execCCC()` Sends the CCC command to the server.
    `int` | `execCONF(byte[] data)` Sends the CONF command with the specified data.
    `int` | `execENC(byte[] data)` Sends the ENC command with the specified data.
    `int` | `execMIC(byte[] data)` Sends the MIC command with the specified data.
    `void` | `execPBSZ(long pbsz)` PBSZ command.
    `void` | `execPROT(String prot)` PROT command.
    `String` | `getAuthValue()` Gets AUTH command use value.
    `String[]` | `getEnabledCipherSuites()` Gets the names of the cipher suites which could be enabled for use on this connection.
    `String[]` | `getEnabledProtocols()` Gets the names of the protocol versions which are currently enabled for use on this connection.
    `boolean` | `getEnableSessionCreation()` Gets true if new SSL sessions may be established by this socket.
    `HostnameVerifier` | `getHostnameVerifier()` Gets the currently configured `HostnameVerifier`.
    `boolean` | `getNeedClientAuth()` Gets true if the socket will require client authentication.
    `protected String` | `getProtocol()` Gets the secure socket protocol to be used, e.g.
    `protected String[]` | `getProtocols()` Gets the protocol versions.
    `protected String[]` | `getSuites()` Gets the cipher suites.
    `TrustManager` | `getTrustManager()` Gets the currently configured `TrustManager`.
    `boolean` | `getUseClientMode()` Gets whether the socket is set to use client mode in its first handshake.
    `boolean` | `getWantClientAuth()` Gets whether the socket will request client authentication.
    `protected boolean` | `isClientMode()` Tests the use client mode flag.
    `protected boolean` | `isCreation()` Tests whether a new SSL session may be established by this socket.
    `boolean` | `isEndpointCheckingEnabled()` Tests whether or not endpoint identification using the HTTPS algorithm on Java 1.7+ is enabled.
    `protected boolean` | `isImplicit()` Tests the security mode.
    `protected boolean` | `isNeedClientAuth()` Tests the need client auth flag.
    `protected boolean` | `isWantClientAuth()` Tests the want client auth flag.
    `byte[]` | `parseADATReply(String reply)` Parses the given ADAT response line and base64-decodes the data.
    `long` | `parsePBSZ(long pbsz)` PBSZ command.
    `int` | `sendCommand(String command, String args)` Send an FTP command.
    `void` | `setAuthValue(String auth)` Sets AUTH command use value.
    `void` | `setEnabledCipherSuites(String[] cipherSuites)` Sets which particular cipher suites are enabled for use on this connection.
    `void` | `setEnabledProtocols(String[] protocolVersions)` Sets which particular protocol versions are enabled for use on this connection.
    `void` | `setEnabledSessionCreation(boolean isCreation)` Sets whether a new SSL session may be established by this socket.
    `void` | `setEndpointCheckingEnabled(boolean enable)` Sets automatic endpoint identification checking using the HTTPS algorithm is supported on Java 1.7+.
    `void` | `setHostnameVerifier(HostnameVerifier newHostnameVerifier)` Sets to override the default `HostnameVerifier` to use.
    `void` | `setKeyManager(KeyManager keyManager)` Sets a `KeyManager` to use
    `void` | `setNeedClientAuth(boolean isNeedClientAuth)` Sets the socket to require client authentication.
    `void` | `setTrustManager(TrustManager trustManager)` Sets to override the default `TrustManager` to use; if set to `null`, the default TrustManager from the JVM will be used.
    `void` | `setUseClientMode(boolean isClientMode)` Sets the socket to use client (or server) mode in its first handshake.
    `void` | `setWantClientAuth(boolean isWantClientAuth)` Sets the socket to request client authentication, but only if such a request is appropriate to the cipher suite negotiated.
    `protected void` | `sslNegotiation()` SSL/TLS negotiation.

    - ### Methods inherited from class org.apache.commons.net.ftp.FTPClient

      `_connectAction_, _openDataConnection_, _parseExtendedPassiveModeReply, _parsePassiveModeReply, _retrieveFile, _retrieveFileStream, _storeFile, _storeFileStream, abort, allocate, allocate, allocate, allocate, appendFile, appendFileStream, changeToParentDirectory, changeWorkingDirectory, completePendingCommand, configure, createParser, deleteFile, doCommand, doCommandAsStrings, enterLocalActiveMode, enterLocalPassiveMode, enterRemoteActiveMode, enterRemotePassiveMode, features, featureValue, featureValues, getActivePort, getAutodetectUTF8, getBufferSize, getControlKeepAliveReplyTimeoutDuration, getControlKeepAliveTimeoutDuration, getCopyStreamListener, getDataConnectionMode, getDataTimeout, getEntryParser, getHostAddress, getListArguments, getListHiddenFiles, getModificationTime, getPassiveHost, getPassiveLocalIPAddress, getPassivePort, getReceiveDataSocketBufferSize, getReportHostAddress, getRestartOffset, getSendDataSocketBufferSize, getSize, getStatus, getStatus, getSystemType, getSystemTypeOverride, hasFeature, hasFeature, hasFeature, initiateListParsing, initiateListParsing, initiateListParsing, initiateMListParsing, initiateMListParsing, isIpAddressFromPasvResponse, isRemoteVerificationEnabled, isUseEPSVwithIPv4, listDirectories, listDirectories, listFiles, listFiles, listFiles, listHelp, listHelp, listNames, listNames, loadResourceProperties, login, login, logout, makeDirectory, mdtmCalendar, mdtmFile, mdtmInstant, mlistDir, mlistDir, mlistDir, mlistFile, parsePathname, printWorkingDirectory, reinitialize, remoteAppend, remoteRetrieve, remoteStore, remoteStoreUnique, remoteStoreUnique, removeDirectory, rename, restart, retrieveFile, retrieveFileStream, sendNoOp, sendSiteCommand, setActiveExternalIPAddress, setActivePortRange, setAutodetectUTF8, setBufferSize, setControlKeepAliveReplyTimeout, setControlKeepAliveTimeout, setCopyStreamListener, setDataTimeout, setFileStructure, setFileTransferMode, setFileType, setFileType, setIpAddressFromPasvResponse, setListHiddenFiles, setModificationTime, setParserFactory, setPassiveLocalIPAddress, setPassiveLocalIPAddress, setPassiveNatWorkaroundStrategy, setReceieveDataSocketBufferSize, setRemoteVerificationEnabled, setReportActiveExternalIPAddress, setRestartOffset, setSendDataSocketBufferSize, setUseEPSVwithIPv4, storeFile, storeFileStream, storeUniqueFile, storeUniqueFile, storeUniqueFileStream, storeUniqueFileStream, structureMount`

    - ### Methods inherited from class org.apache.commons.net.ftp.FTP

      `__getReplyNoReport, __noop, abor, acct, allo, allo, allo, allo, appe, cdup, cwd, dele, eprt, epsv, feat, getCommandSupport, getControlEncoding, getReply, getReplyCode, getReplyString, getReplyString, getReplyStrings, help, help, isStrictMultilineParsing, isStrictReplyParsing, list, list, mdtm, mfmt, mkd, mlsd, mlsd, mlst, mlst, mode, nlst, nlst, noop, opts, opts, pass, pasv, port, pwd, quit, rein, rest, retr, rmd, rnfr, rnto, sendCommand, sendCommand, sendCommand, sendCommand, setControlEncoding, setControlEncoding, setStrictMultilineParsing, setStrictReplyParsing, site, size, smnt, stat, stat, stor, stou, stou, stru, syst, type, type, user`

    - ### Methods inherited from class org.apache.commons.net.SocketClient

      `addProtocolCommandListener, applySocketAttributes, checkOpenOutputStream, connect, connect, connect, connect, connect, connect, createCommandSupport, fireCommandSent, fireReplyReceived, getCharset, getConnectTimeout, getDefaultPort, getDefaultTimeout, getHostAddress, getHostAddress, getKeepAlive, getLocalAddress, getLocalPort, getProxy, getReceiveBufferSize, getRemoteAddress, getRemoteInetSocketAddress, getRemotePort, getSendBufferSize, getServerSocketFactory, getSoLinger, getSoTimeout, getTcpNoDelay, isAvailable, isConnected, removeProtocolCommandListener, setCharset, setConnectTimeout, setDefaultPort, setDefaultTimeout, setKeepAlive, setProxy, setReceiveBufferSize, setSendBufferSize, setServerSocketFactory, setSocketFactory, setSoLinger, setSoTimeout, setTcpNoDelay, verifyRemote`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### DEFAULT_FTPS_DATA_PORT

          public static final int DEFAULT_FTPS_DATA_PORT

      Default FTPS data port.
      See Also:
        Constant Field Values

    - #### DEFAULT_FTPS_PORT

          public static final int DEFAULT_FTPS_PORT

      Default FTPS port.
      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### FTPSClient

          public FTPSClient()

      Constructor for FTPSClient, calls `FTPSClient(String, boolean)`. Sets protocol to `DEFAULT_PROTOCOL` - i.e. TLS - and security mode to explicit (isImplicit = false)

    - #### FTPSClient

          public FTPSClient(boolean isImplicit)

      Constructor for FTPSClient, using `DEFAULT_PROTOCOL` - i.e. TLS Calls `FTPSClient(String, boolean)`
      Parameters:
        `isImplicit` - The security mode (Implicit/Explicit).

    - #### FTPSClient

          public FTPSClient(boolean isImplicit,
                            SSLContext context)

      Constructor for FTPSClient, using `DEFAULT_PROTOCOL` - i.e. TLS The default TrustManager is set from `TrustManagerUtils.getValidateServerCertificateTrustManager()`
      Parameters:
        `isImplicit` - The security mode(Implicit/Explicit).
        `context` - A pre-configured SSL Context

    - #### FTPSClient

          public FTPSClient(SSLContext context)

      Constructor for FTPSClient, using `DEFAULT_PROTOCOL` - i.e. TLS and isImplicit `false` Calls `FTPSClient(boolean, SSLContext)`
      Parameters:
        `context` - A pre-configured SSL Context

    - #### FTPSClient

          public FTPSClient(String protocol)

      Constructor for FTPSClient, using explicit mode, calls `FTPSClient(String, boolean)`.
      Parameters:
        `protocol` - the protocol to use

    - #### FTPSClient

          public FTPSClient(String protocol,
                            boolean isImplicit)

      Constructor for FTPSClient allowing specification of protocol and security mode. If isImplicit is true, the port is set to `DEFAULT_FTPS_PORT` i.e. 990. The default TrustManager is set from `TrustManagerUtils.getValidateServerCertificateTrustManager()`
      Parameters:
        `protocol` - the protocol
        `isImplicit` - The security mode(Implicit/Explicit).

  - ### Method Detail

    - #### _connectAction_

          protected void _connectAction_()
                                  throws IOException

      Because there are so many connect() methods, the _connectAction_() method is provided as a means of performing some action immediately after establishing a connection, rather than reimplementing all the connect() methods.
      Overrides:
        `_connectAction_` in class `FTPClient`
      Throws:
        `IOException` - If there is any problem with establishing the connection.
      See Also:
        `SocketClient._connectAction_()`

    - #### _openDataConnection_

          protected Socket _openDataConnection_(String command,
                                                String arg)
                                         throws IOException

      Returns a socket of the data connection. Wrapped as an `SSLSocket`, which carries out handshake processing.
      Overrides:
        `_openDataConnection_` in class `FTPClient`
      Parameters:
        `command` - The textual representation of the FTP command to send.
        `arg` - The arguments to the FTP command. If this parameter is set to null, then the command is sent with no arguments.
      Returns:
        corresponding to the established data connection. Null is returned if an FTP protocol error is reported at any point during the establishment and initialization of the connection.
      Throws:
        `IOException` - If there is any problem with the connection.
      See Also:
        `FTPClient._openDataConnection_(int, String)`

    - #### _prepareDataSocket_

          protected void _prepareDataSocket_(Socket socket)
                                      throws IOException

      Performs any custom initialization for a newly created SSLSocket (before the SSL handshake happens). Called by `_openDataConnection_(int, String)` immediately after creating the socket. The default implementation is a no-op
      Parameters:
        `socket` - the socket to set up
      Throws:
        `IOException` - on error

    - #### disconnect

          public void disconnect()
                          throws IOException

      Closes the connection to the FTP server and restores connection parameters to the default values.

      Calls `setSocketFactory(null)` and `setServerSocketFactory(null)` to reset the factories that may have been changed during the session, e.g. by `execPROT(String)`

      Overrides:
        `disconnect` in class `FTPClient`
      Throws:
        `IOException` - If an error occurs while disconnecting.

    - #### execADAT

          public int execADAT(byte[] data)
                       throws IOException

      Sends the ADAT command with the specified authentication data.
      Parameters:
        `data` - The data to send with the command.
      Returns:
        server reply.
      Throws:
        `IOException` - If an I/O error occurs while sending the command.

    - #### execAUTH

          protected void execAUTH()
                           throws SSLException,
                                  IOException

      Sends the AUTH command.
      Throws:
        `SSLException` - If the server reply code equals neither "234" nor "334".
        `IOException` - If an I/O error occurs while either sending the command.

    - #### execAUTH

          public int execAUTH(String mechanism)
                       throws IOException

      Sends the AUTH command with the specified mechanism.
      Parameters:
        `mechanism` - The mechanism name to send with the command.
      Returns:
        server reply.
      Throws:
        `IOException` - If an I/O error occurs while sending the command.

    - #### execCCC

          public int execCCC()
                      throws IOException

      Sends the CCC command to the server. The CCC (Clear Command Channel) command causes the underlying `SSLSocket` instance to be assigned to a plain `Socket` instances
      Returns:
        server reply.
      Throws:
        `IOException` - If an I/O error occurs while sending the command.

    - #### execCONF

          public int execCONF(byte[] data)
                       throws IOException

      Sends the CONF command with the specified data.
      Parameters:
        `data` - The data to send with the command.
      Returns:
        server reply.
      Throws:
        `IOException` - If an I/O error occurs while sending the command.

    - #### execENC

          public int execENC(byte[] data)
                      throws IOException

      Sends the ENC command with the specified data.
      Parameters:
        `data` - The data to send with the command.
      Returns:
        server reply.
      Throws:
        `IOException` - If an I/O error occurs while sending the command.

    - #### execMIC

          public int execMIC(byte[] data)
                      throws IOException

      Sends the MIC command with the specified data.
      Parameters:
        `data` - The data to send with the command.
      Returns:
        server reply.
      Throws:
        `IOException` - If an I/O error occurs while sending the command.

    - #### execPBSZ

          public void execPBSZ(long pbsz)
                        throws SSLException,
                               IOException

      PBSZ command. pbsz value: 0 to (2^32)-1 decimal integer.
      Parameters:
        `pbsz` - Protection Buffer Size.
      Throws:
        `SSLException` - If the server reply code does not equal "200".
        `IOException` - If an I/O error occurs while sending the command.
      See Also:
        `parsePBSZ(long)`

    - #### execPROT

          public void execPROT(String prot)
                        throws SSLException,
                               IOException

      PROT command.
      - C - Clear
      - S - Safe(SSL protocol only)
      - E - Confidential(SSL protocol only)
      - P - Private
      N.B. the method calls `SocketClient.setSocketFactory(javax.net.SocketFactory)` and `SocketClient.setServerSocketFactory(javax.net.ServerSocketFactory)`
      Parameters:
        `prot` - Data Channel Protection Level, if `null`, use `DEFAULT_PROT`.
      Throws:
        `SSLException` - If the server reply code does not equal `200`.
        `IOException` - If an I/O error occurs while sending the command.

    - #### getAuthValue

          public String getAuthValue()

      Gets AUTH command use value.
      Returns:
        AUTH command use value.

    - #### getEnabledCipherSuites

          public String[] getEnabledCipherSuites()

      Gets the names of the cipher suites which could be enabled for use on this connection. When the underlying `Socket` is not an `SSLSocket` instance, returns null.
      Returns:
        An array of cipher suite names, or `null`

    - #### getEnabledProtocols

          public String[] getEnabledProtocols()

      Gets the names of the protocol versions which are currently enabled for use on this connection. When the underlying `Socket` is not an `SSLSocket` instance, returns null.
      Returns:
        An array of protocols, or `null`

    - #### getEnableSessionCreation

          public boolean getEnableSessionCreation()

      Gets true if new SSL sessions may be established by this socket. When the underlying `Socket` instance is not SSL-enabled (i.e. an instance of `SSLSocket` with `SSLSocket` `getEnableSessionCreation()`) enabled, this returns False.
      Returns:
        true - Indicates that sessions may be created; this is the default. false - indicates that an existing session must be resumed.

    - #### getHostnameVerifier

          public HostnameVerifier getHostnameVerifier()

      Gets the currently configured `HostnameVerifier`. The verifier is only used on client mode connections.
      Returns:
        A HostnameVerifier instance.

    - #### getNeedClientAuth

          public boolean getNeedClientAuth()

      Gets true if the socket will require client authentication. When the underlying `Socket` is not an `SSLSocket` instance, returns false.
      Returns:
        true - If the server mode socket should request that the client authenticate itself.

    - #### getProtocol

          protected String getProtocol()

      Gets the secure socket protocol to be used, e.g. SSL/TLS.
      Returns:
        the protocol

    - #### getProtocols

          protected String[] getProtocols()

      Gets the protocol versions. The `getEnabledProtocols()` method gets the value from the socket while this method gets its value from this instance's config.
      Returns:
        a clone of the protocols, may be null

    - #### getSuites

          protected String[] getSuites()

      Gets the cipher suites. The `getEnabledCipherSuites()` method gets the value from the socket while this method gets its value from this instance's config.
      Returns:
        a clone of the suites, may be null

    - #### getTrustManager

          public TrustManager getTrustManager()

      Gets the currently configured `TrustManager`.
      Returns:
        A TrustManager instance.

    - #### getUseClientMode

          public boolean getUseClientMode()

      Gets whether the socket is set to use client mode in its first handshake. When the underlying `Socket` is not an `SSLSocket` instance, returns false.
      Returns:
        true - If the socket should start its first handshake in "client" mode.

    - #### getWantClientAuth

          public boolean getWantClientAuth()

      Gets whether the socket will request client authentication. When the underlying `Socket` is not an `SSLSocket` instance, returns false.
      Returns:
        true - If the server mode socket should request that the client authenticate itself.

    - #### isClientMode

          protected boolean isClientMode()

      Tests the use client mode flag. The `getUseClientMode()` method gets the value from the socket while this method gets its value from this instance's config.
      Returns:
        True If the socket should start its first handshake in "client" mode.

    - #### isCreation

          protected boolean isCreation()

      Tests whether a new SSL session may be established by this socket. Default true
      Returns:
        True if session may be established

    - #### isEndpointCheckingEnabled

          public boolean isEndpointCheckingEnabled()

      Tests whether or not endpoint identification using the HTTPS algorithm on Java 1.7+ is enabled. The default behavior is for this to be disabled. This check is only performed on client mode connections.
      Returns:
        True if enabled, false if not.

    - #### isImplicit

          protected boolean isImplicit()

      Tests the security mode. (True - Implicit Mode / False - Explicit Mode).
      Returns:
        True if enabled, false if not.

    - #### isNeedClientAuth

          protected boolean isNeedClientAuth()

      Tests the need client auth flag. The `getNeedClientAuth()` method gets the value from the socket while this method gets its value from this instance's config.
      Returns:
        True if enabled, false if not.

    - #### isWantClientAuth

          protected boolean isWantClientAuth()

      Tests the want client auth flag. The `getWantClientAuth()` method gets the value from the socket while this method gets its value from this instance's config.
      Returns:
        True if enabled, false if not.

    - #### parseADATReply

          public byte[] parseADATReply(String reply)

      Parses the given ADAT response line and base64-decodes the data.
      Parameters:
        `reply` - The ADAT reply to parse.
      Returns:
        the data in the reply, base64-decoded.

    - #### parsePBSZ

          public long parsePBSZ(long pbsz)
                         throws SSLException,
                                IOException

      PBSZ command. pbsz value: 0 to (2^32)-1 decimal integer. Issues the command and parses the response to return the negotiated value.
      Parameters:
        `pbsz` - Protection Buffer Size.
      Returns:
        the negotiated value.
      Throws:
        `SSLException` - If the server reply code does not equal "200".
        `IOException` - If an I/O error occurs while sending the command.
      See Also:
        `execPBSZ(long)`

    - #### sendCommand

          public int sendCommand(String command,
                                 String args)
                          throws IOException

      Send an FTP command. A successful CCC (Clear Command Channel) command causes the underlying `SSLSocket` instance to be assigned to a plain `Socket`
      Overrides:
        `sendCommand` in class `FTP`
      Parameters:
        `command` - The FTP command.
        `args` - The arguments to the FTP command. If this parameter is set to null, then the command is sent with no argument.
      Returns:
        server reply.
      Throws:
        `IOException` - If an I/O error occurs while sending the command.
        `SSLException` - if a CCC command fails
      See Also:
        `FTP.sendCommand(String)`

    - #### setAuthValue

          public void setAuthValue(String auth)

      Sets AUTH command use value. This processing is done before connected processing.
      Parameters:
        `auth` - AUTH command use value.

    - #### setEnabledCipherSuites

          public void setEnabledCipherSuites(String[] cipherSuites)

      Sets which particular cipher suites are enabled for use on this connection. Called before server negotiation.
      Parameters:
        `cipherSuites` - The cipher suites.

    - #### setEnabledProtocols

          public void setEnabledProtocols(String[] protocolVersions)

      Sets which particular protocol versions are enabled for use on this connection. I perform setting before a server negotiation.
      Parameters:
        `protocolVersions` - The protocol versions.

    - #### setEnabledSessionCreation

          public void setEnabledSessionCreation(boolean isCreation)

      Sets whether a new SSL session may be established by this socket.
      Parameters:
        `isCreation` - The established socket flag.

    - #### setEndpointCheckingEnabled

          public void setEndpointCheckingEnabled(boolean enable)

      Sets automatic endpoint identification checking using the HTTPS algorithm is supported on Java 1.7+. The default behavior is for this to be disabled. This check is only performed on client mode connections.
      Parameters:
        `enable` - Enable automatic endpoint identification checking using the HTTPS algorithm on Java 1.7+.

    - #### setHostnameVerifier

          public void setHostnameVerifier(HostnameVerifier newHostnameVerifier)

      Sets to override the default `HostnameVerifier` to use. The verifier is only used on client mode connections.
      Parameters:
        `newHostnameVerifier` - The HostnameVerifier implementation to set or `null` to disable.

    - #### setKeyManager

          public void setKeyManager(KeyManager keyManager)

      Sets a `KeyManager` to use
      Parameters:
        `keyManager` - The KeyManager implementation to set.
      See Also:
        `KeyManagerUtils`

    - #### setNeedClientAuth

          public void setNeedClientAuth(boolean isNeedClientAuth)

      Sets the socket to require client authentication.
      Parameters:
        `isNeedClientAuth` - The need client auth flag.

    - #### setTrustManager

          public void setTrustManager(TrustManager trustManager)

      Sets to override the default `TrustManager` to use; if set to `null`, the default TrustManager from the JVM will be used.
      Parameters:
        `trustManager` - The TrustManager implementation to set, may be `null`
      See Also:
        `TrustManagerUtils`

    - #### setUseClientMode

          public void setUseClientMode(boolean isClientMode)

      Sets the socket to use client (or server) mode in its first handshake.
      Parameters:
        `isClientMode` - The use client mode flag.

    - #### setWantClientAuth

          public void setWantClientAuth(boolean isWantClientAuth)

      Sets the socket to request client authentication, but only if such a request is appropriate to the cipher suite negotiated.
      Parameters:
        `isWantClientAuth` - The want client auth flag.

    - #### sslNegotiation

          protected void sslNegotiation()
                                 throws IOException

      SSL/TLS negotiation. Acquires an SSL socket of a control connection and carries out handshake processing.
      Throws:
        `IOException` - If server negotiation fails