|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object net.sf.hermesftp.cmd.AbstractFtpCmd net.sf.hermesftp.cmd.AbstractFtpCmdPasv net.sf.hermesftp.cmd.impl.FtpCmdEpsv
public class FtpCmdEpsv
The EPSV Command (EPSV)
The EPSV command requests that a server listen on a data port and wait for a connection. The EPSV command takes an optional argument. The response to this command includes only the TCP port number of the listening connection. The format of the response, however, is similar to the argument of the EPRT command. This allows the same parsing routines to be used for both commands. In addition, the format leaves a place holder for the network protocol and/or network address, which may be needed in the EPSV response in the future. The response code for entering passive mode using an extended address MUST be 229. The interpretation of this code, according to [PR85] is:
2yz Positive Completion x2z Connections xy9 Extended Passive Mode Entered
The text returned in response to the EPSV command MUST be:
<text indicating server is entering extended passive mode> (<d><d><d><tcp-port><d>)
The portion of the string enclosed in parentheses MUST be the exact string needed by the EPRT command to open the data connection, as specified above.
The first two fields contained in the parenthesis MUST be blank. The third field MUST be the string representation of the TCP port number on which the server is listening for a data connection. The network protocol used by the data connection will be the same network protocol used by the control connection. In addition, the network address used to establish the data connection will be the same network address used for the control connection. An example response string follows:
Entering Extended Passive Mode (|||6446|)
The standard negative error codes 500 and 501 are sufficient to handle all errors involving the EPSV command (e.g., syntax errors). When the EPSV command is issued with no argument, the server will choose the network protocol for the data connection based on the protocol used for the control connection. However, in the case of proxy FTP, this protocol might not be appropriate for communication between the two servers. Therefore, the client needs to be able to request a specific protocol. If the server returns a protocol that is not supported by the host that will be connecting to the port, the client MUST issue an ABOR (abort) command to allow the server to close down the listening connection. The client can then send an EPSV command requesting the use of a specific network protocol, as follows:
EPSV<space><net-prt>
If the requested protocol is supported by the server, it SHOULD use the protocol. If not, the server MUST return the 522 error messages as outlined in section 2.
Finally, the EPSV command can be used with the argument "ALL" to inform Network Address Translators that the EPRT command (as well as other data commands) will no longer be used. An example of this command follows:
EPSV<space>ALL
Upon receipt of an EPSV ALL command, the server MUST reject all data connection setup commands other than EPSV (i.e., EPRT, PORT, PASV, et al.). This use of the EPSV command is further explained in section 4.
[Excerpt from RFC-2428, Allman]
Field Summary |
---|
Constructor Summary | |
---|---|
FtpCmdEpsv()
|
Method Summary | |
---|---|
protected java.lang.String |
createResponseMessage(int protocolIdx,
java.lang.String ip,
int port)
Returns the reponse string encoding ip address, port and protocol type. |
java.lang.String |
getHelp()
Returns a short help text for the command. |
protected int |
getPreferredProtocol()
Returns the preferred protocol version (1=IPv4, 2=IPv6, 0=undefined). |
Methods inherited from class net.sf.hermesftp.cmd.AbstractFtpCmdPasv |
---|
execute, isAuthenticationRequired |
Methods inherited from class net.sf.hermesftp.cmd.AbstractFtpCmd |
---|
getAbsPath, getAndResetFileOffset, getArguments, getCtx, getPathArg, getPermission, getToken, handleAsyncCmd, isResponded, msg, msg, msg, msgOut, msgOut, msgOut, out, setArguments, setCtx, setToken |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
public FtpCmdEpsv()
Method Detail |
---|
protected java.lang.String createResponseMessage(int protocolIdx, java.lang.String ip, int port)
createResponseMessage
in class AbstractFtpCmdPasv
protocolIdx
- The protocol index (1=IPv4, 2=IPv6).ip
- The address.port
- The port.
public java.lang.String getHelp()
protected int getPreferredProtocol()
getPreferredProtocol
in class AbstractFtpCmdPasv
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |