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