249 lines
7.6 KiB
Java
249 lines
7.6 KiB
Java
/*
|
|
* Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* This code is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License version 2 only, as
|
|
* published by the Free Software Foundation. Oracle designates this
|
|
* particular file as subject to the "Classpath" exception as provided
|
|
* by Oracle in the LICENSE file that accompanied this code.
|
|
*
|
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
* version 2 for more details (a copy is included in the LICENSE file that
|
|
* accompanied this code).
|
|
*
|
|
* You should have received a copy of the GNU General Public License version
|
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*
|
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
|
* or visit www.oracle.com if you need additional information or have any
|
|
* questions.
|
|
*/
|
|
package sun.net.ftp;
|
|
|
|
/**
|
|
* This class describes a FTP protocol reply code and associates a meaning
|
|
* to the numerical value according to the various RFCs (RFC 959 in
|
|
* particular).
|
|
*
|
|
*/
|
|
public enum FtpReplyCode {
|
|
|
|
RESTART_MARKER(110),
|
|
SERVICE_READY_IN(120),
|
|
DATA_CONNECTION_ALREADY_OPEN(125),
|
|
FILE_STATUS_OK(150),
|
|
COMMAND_OK(200),
|
|
NOT_IMPLEMENTED(202),
|
|
SYSTEM_STATUS(211),
|
|
DIRECTORY_STATUS(212),
|
|
FILE_STATUS(213),
|
|
HELP_MESSAGE(214),
|
|
NAME_SYSTEM_TYPE(215),
|
|
SERVICE_READY(220),
|
|
SERVICE_CLOSING(221),
|
|
DATA_CONNECTION_OPEN(225),
|
|
CLOSING_DATA_CONNECTION(226),
|
|
ENTERING_PASSIVE_MODE(227),
|
|
ENTERING_EXT_PASSIVE_MODE(229),
|
|
LOGGED_IN(230),
|
|
SECURELY_LOGGED_IN(232),
|
|
SECURITY_EXCHANGE_OK(234),
|
|
SECURITY_EXCHANGE_COMPLETE(235),
|
|
FILE_ACTION_OK(250),
|
|
PATHNAME_CREATED(257),
|
|
NEED_PASSWORD(331),
|
|
NEED_ACCOUNT(332),
|
|
NEED_ADAT(334),
|
|
NEED_MORE_ADAT(335),
|
|
FILE_ACTION_PENDING(350),
|
|
SERVICE_NOT_AVAILABLE(421),
|
|
CANT_OPEN_DATA_CONNECTION(425),
|
|
CONNECTION_CLOSED(426),
|
|
NEED_SECURITY_RESOURCE(431),
|
|
FILE_ACTION_NOT_TAKEN(450),
|
|
ACTION_ABORTED(451),
|
|
INSUFFICIENT_STORAGE(452),
|
|
COMMAND_UNRECOGNIZED(500),
|
|
INVALID_PARAMETER(501),
|
|
BAD_SEQUENCE(503),
|
|
NOT_IMPLEMENTED_FOR_PARAMETER(504),
|
|
NOT_LOGGED_IN(530),
|
|
NEED_ACCOUNT_FOR_STORING(532),
|
|
PROT_LEVEL_DENIED(533),
|
|
REQUEST_DENIED(534),
|
|
FAILED_SECURITY_CHECK(535),
|
|
UNSUPPORTED_PROT_LEVEL(536),
|
|
PROT_LEVEL_NOT_SUPPORTED_BY_SECURITY(537),
|
|
FILE_UNAVAILABLE(550),
|
|
PAGE_TYPE_UNKNOWN(551),
|
|
EXCEEDED_STORAGE(552),
|
|
FILE_NAME_NOT_ALLOWED(553),
|
|
PROTECTED_REPLY(631),
|
|
UNKNOWN_ERROR(999);
|
|
private final int value;
|
|
|
|
FtpReplyCode(int val) {
|
|
this.value = val;
|
|
}
|
|
|
|
/**
|
|
* Returns the numerical value of the code.
|
|
*
|
|
* @return the numerical value.
|
|
*/
|
|
public int getValue() {
|
|
return value;
|
|
}
|
|
|
|
/**
|
|
* Determines if the code is a Positive Preliminary response.
|
|
* This means beginning with a 1 (which means a value between 100 and 199)
|
|
*
|
|
* @return <code>true</code> if the reply code is a positive preliminary
|
|
* response.
|
|
*/
|
|
public boolean isPositivePreliminary() {
|
|
return value >= 100 && value < 200;
|
|
}
|
|
|
|
/**
|
|
* Determines if the code is a Positive Completion response.
|
|
* This means beginning with a 2 (which means a value between 200 and 299)
|
|
*
|
|
* @return <code>true</code> if the reply code is a positive completion
|
|
* response.
|
|
*/
|
|
public boolean isPositiveCompletion() {
|
|
return value >= 200 && value < 300;
|
|
}
|
|
|
|
/**
|
|
* Determines if the code is a positive internediate response.
|
|
* This means beginning with a 3 (which means a value between 300 and 399)
|
|
*
|
|
* @return <code>true</code> if the reply code is a positive intermediate
|
|
* response.
|
|
*/
|
|
public boolean isPositiveIntermediate() {
|
|
return value >= 300 && value < 400;
|
|
}
|
|
|
|
/**
|
|
* Determines if the code is a transient negative response.
|
|
* This means beginning with a 4 (which means a value between 400 and 499)
|
|
*
|
|
* @return <code>true</code> if the reply code is a transient negative
|
|
* response.
|
|
*/
|
|
public boolean isTransientNegative() {
|
|
return value >= 400 && value < 500;
|
|
}
|
|
|
|
/**
|
|
* Determines if the code is a permanent negative response.
|
|
* This means beginning with a 5 (which means a value between 500 and 599)
|
|
*
|
|
* @return <code>true</code> if the reply code is a permanent negative
|
|
* response.
|
|
*/
|
|
public boolean isPermanentNegative() {
|
|
return value >= 500 && value < 600;
|
|
}
|
|
|
|
/**
|
|
* Determines if the code is a protected reply response.
|
|
* This means beginning with a 6 (which means a value between 600 and 699)
|
|
*
|
|
* @return <code>true</code> if the reply code is a protected reply
|
|
* response.
|
|
*/
|
|
public boolean isProtectedReply() {
|
|
return value >= 600 && value < 700;
|
|
}
|
|
|
|
/**
|
|
* Determines if the code is a syntax related response.
|
|
* This means the second digit is a 0.
|
|
*
|
|
* @return <code>true</code> if the reply code is a syntax related
|
|
* response.
|
|
*/
|
|
public boolean isSyntax() {
|
|
return ((value / 10) - ((value / 100) * 10)) == 0;
|
|
}
|
|
|
|
/**
|
|
* Determines if the code is an information related response.
|
|
* This means the second digit is a 1.
|
|
*
|
|
* @return <code>true</code> if the reply code is an information related
|
|
* response.
|
|
*/
|
|
public boolean isInformation() {
|
|
return ((value / 10) - ((value / 100) * 10)) == 1;
|
|
}
|
|
|
|
/**
|
|
* Determines if the code is a connection related response.
|
|
* This means the second digit is a 2.
|
|
*
|
|
* @return <code>true</code> if the reply code is a connection related
|
|
* response.
|
|
*/
|
|
public boolean isConnection() {
|
|
return ((value / 10) - ((value / 100) * 10)) == 2;
|
|
}
|
|
|
|
/**
|
|
* Determines if the code is an authentication related response.
|
|
* This means the second digit is a 3.
|
|
*
|
|
* @return <code>true</code> if the reply code is an authentication related
|
|
* response.
|
|
*/
|
|
public boolean isAuthentication() {
|
|
return ((value / 10) - ((value / 100) * 10)) == 3;
|
|
}
|
|
|
|
/**
|
|
* Determines if the code is an unspecified type of response.
|
|
* This means the second digit is a 4.
|
|
*
|
|
* @return <code>true</code> if the reply code is an unspecified type of
|
|
* response.
|
|
*/
|
|
public boolean isUnspecified() {
|
|
return ((value / 10) - ((value / 100) * 10)) == 4;
|
|
}
|
|
|
|
/**
|
|
* Determines if the code is a file system related response.
|
|
* This means the second digit is a 5.
|
|
*
|
|
* @return <code>true</code> if the reply code is a file system related
|
|
* response.
|
|
*/
|
|
public boolean isFileSystem() {
|
|
return ((value / 10) - ((value / 100) * 10)) == 5;
|
|
}
|
|
|
|
/**
|
|
* Static utility method to convert a value into a FtpReplyCode.
|
|
*
|
|
* @param v the value to convert
|
|
* @return the <code>FtpReplyCode</code> associated with the value.
|
|
*/
|
|
public static FtpReplyCode find(int v) {
|
|
for (FtpReplyCode code : FtpReplyCode.values()) {
|
|
if (code.getValue() == v) {
|
|
return code;
|
|
}
|
|
}
|
|
return UNKNOWN_ERROR;
|
|
}
|
|
}
|