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