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