151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/* 251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. 351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This code is free software; you can redistribute it and/or modify it 651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * under the terms of the GNU General Public License version 2 only, as 751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * published by the Free Software Foundation. Oracle designates this 851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * particular file as subject to the "Classpath" exception as provided 951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * by Oracle in the LICENSE file that accompanied this code. 1051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 1151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This code is distributed in the hope that it will be useful, but WITHOUT 1251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 1351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 1451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * version 2 for more details (a copy is included in the LICENSE file that 1551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * accompanied this code). 1651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 1751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * You should have received a copy of the GNU General Public License version 1851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 2 along with this work; if not, write to the Free Software Foundation, 1951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 2051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 2151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 2251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * or visit www.oracle.com if you need additional information or have any 2351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * questions. 2451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 2551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskipackage sun.net.ftp; 2651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 2751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/** 2851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This class describes a FTP protocol reply code and associates a meaning 2951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * to the numerical value according to the various RFCs (RFC 959 in 3051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * particular). 3151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 3251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 3351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskipublic enum FtpReplyCode { 3451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 3551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski RESTART_MARKER(110), 3651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski SERVICE_READY_IN(120), 3751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski DATA_CONNECTION_ALREADY_OPEN(125), 3851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski FILE_STATUS_OK(150), 3951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski COMMAND_OK(200), 4051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski NOT_IMPLEMENTED(202), 4151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski SYSTEM_STATUS(211), 4251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski DIRECTORY_STATUS(212), 4351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski FILE_STATUS(213), 4451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski HELP_MESSAGE(214), 4551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski NAME_SYSTEM_TYPE(215), 4651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski SERVICE_READY(220), 4751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski SERVICE_CLOSING(221), 4851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski DATA_CONNECTION_OPEN(225), 4951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski CLOSING_DATA_CONNECTION(226), 5051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski ENTERING_PASSIVE_MODE(227), 5151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski ENTERING_EXT_PASSIVE_MODE(229), 5251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski LOGGED_IN(230), 5351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski SECURELY_LOGGED_IN(232), 5451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski SECURITY_EXCHANGE_OK(234), 5551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski SECURITY_EXCHANGE_COMPLETE(235), 5651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski FILE_ACTION_OK(250), 5751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski PATHNAME_CREATED(257), 5851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski NEED_PASSWORD(331), 5951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski NEED_ACCOUNT(332), 6051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski NEED_ADAT(334), 6151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski NEED_MORE_ADAT(335), 6251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski FILE_ACTION_PENDING(350), 6351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski SERVICE_NOT_AVAILABLE(421), 6451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski CANT_OPEN_DATA_CONNECTION(425), 6551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski CONNECTION_CLOSED(426), 6651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski NEED_SECURITY_RESOURCE(431), 6751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski FILE_ACTION_NOT_TAKEN(450), 6851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski ACTION_ABORTED(451), 6951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski INSUFFICIENT_STORAGE(452), 7051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski COMMAND_UNRECOGNIZED(500), 7151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski INVALID_PARAMETER(501), 7251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski BAD_SEQUENCE(503), 7351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski NOT_IMPLEMENTED_FOR_PARAMETER(504), 7451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski NOT_LOGGED_IN(530), 7551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski NEED_ACCOUNT_FOR_STORING(532), 7651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski PROT_LEVEL_DENIED(533), 7751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski REQUEST_DENIED(534), 7851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski FAILED_SECURITY_CHECK(535), 7951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski UNSUPPORTED_PROT_LEVEL(536), 8051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski PROT_LEVEL_NOT_SUPPORTED_BY_SECURITY(537), 8151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski FILE_UNAVAILABLE(550), 8251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski PAGE_TYPE_UNKNOWN(551), 8351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski EXCEEDED_STORAGE(552), 8451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski FILE_NAME_NOT_ALLOWED(553), 8551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski PROTECTED_REPLY(631), 8651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski UNKNOWN_ERROR(999); 8751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private final int value; 8851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 8951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski FtpReplyCode(int val) { 9051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.value = val; 9151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 9251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 9351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 9451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns the numerical value of the code. 9551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 9651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the numerical value. 9751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 9851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public int getValue() { 9951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return value; 10051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 10151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 10251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 10351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Determines if the code is a Positive Preliminary response. 10451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This means beginning with a 1 (which means a value between 100 and 199) 10551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 10651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return <code>true</code> if the reply code is a positive preliminary 10751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * response. 10851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 10951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public boolean isPositivePreliminary() { 11051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return value >= 100 && value < 200; 11151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 11251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 11351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 11451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Determines if the code is a Positive Completion response. 11551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This means beginning with a 2 (which means a value between 200 and 299) 11651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 11751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return <code>true</code> if the reply code is a positive completion 11851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * response. 11951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 12051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public boolean isPositiveCompletion() { 12151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return value >= 200 && value < 300; 12251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 12351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 12451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 12551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Determines if the code is a positive internediate response. 12651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This means beginning with a 3 (which means a value between 300 and 399) 12751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 12851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return <code>true</code> if the reply code is a positive intermediate 12951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * response. 13051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 13151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public boolean isPositiveIntermediate() { 13251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return value >= 300 && value < 400; 13351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 13451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 13551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 13651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Determines if the code is a transient negative response. 13751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This means beginning with a 4 (which means a value between 400 and 499) 13851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 13951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return <code>true</code> if the reply code is a transient negative 14051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * response. 14151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 14251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public boolean isTransientNegative() { 14351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return value >= 400 && value < 500; 14451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 14551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 14651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 14751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Determines if the code is a permanent negative response. 14851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This means beginning with a 5 (which means a value between 500 and 599) 14951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 15051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return <code>true</code> if the reply code is a permanent negative 15151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * response. 15251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 15351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public boolean isPermanentNegative() { 15451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return value >= 500 && value < 600; 15551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 15651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 15751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 15851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Determines if the code is a protected reply response. 15951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This means beginning with a 6 (which means a value between 600 and 699) 16051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 16151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return <code>true</code> if the reply code is a protected reply 16251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * response. 16351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 16451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public boolean isProtectedReply() { 16551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return value >= 600 && value < 700; 16651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 16751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 16851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 16951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Determines if the code is a syntax related response. 17051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This means the second digit is a 0. 17151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 17251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return <code>true</code> if the reply code is a syntax related 17351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * response. 17451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 17551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public boolean isSyntax() { 17651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return ((value / 10) - ((value / 100) * 10)) == 0; 17751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 17851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 17951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 18051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Determines if the code is an information related response. 18151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This means the second digit is a 1. 18251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 18351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return <code>true</code> if the reply code is an information related 18451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * response. 18551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 18651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public boolean isInformation() { 18751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return ((value / 10) - ((value / 100) * 10)) == 1; 18851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 18951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 19051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 19151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Determines if the code is a connection related response. 19251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This means the second digit is a 2. 19351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 19451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return <code>true</code> if the reply code is a connection related 19551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * response. 19651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 19751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public boolean isConnection() { 19851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return ((value / 10) - ((value / 100) * 10)) == 2; 19951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 20051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 20151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 20251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Determines if the code is an authentication related response. 20351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This means the second digit is a 3. 20451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 20551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return <code>true</code> if the reply code is an authentication related 20651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * response. 20751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 20851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public boolean isAuthentication() { 20951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return ((value / 10) - ((value / 100) * 10)) == 3; 21051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 21151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 21251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 21351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Determines if the code is an unspecified type of response. 21451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This means the second digit is a 4. 21551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 21651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return <code>true</code> if the reply code is an unspecified type of 21751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * response. 21851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 21951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public boolean isUnspecified() { 22051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return ((value / 10) - ((value / 100) * 10)) == 4; 22151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 22251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 22351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 22451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Determines if the code is a file system related response. 22551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This means the second digit is a 5. 22651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 22751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return <code>true</code> if the reply code is a file system related 22851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * response. 22951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 23051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public boolean isFileSystem() { 23151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return ((value / 10) - ((value / 100) * 10)) == 5; 23251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 23351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 23451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 23551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Static utility method to convert a value into a FtpReplyCode. 23651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 23751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param v the value to convert 23851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the <code>FtpReplyCode</code> associated with the value. 23951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 24051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public static FtpReplyCode find(int v) { 24151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski for (FtpReplyCode code : FtpReplyCode.values()) { 24251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (code.getValue() == v) { 24351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return code; 24451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 24551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 24651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return UNKNOWN_ERROR; 24751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 24851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski} 249