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