/* |
|
* 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; |
|
} |
|
} |