    001    /*
    002     * Licensed to the Apache Software Foundation (ASF) under one or more
    003     * contributor license agreements.  See the NOTICE file distributed with
    004     * this work for additional information regarding copyright ownership.
    005     * The ASF licenses this file to You under the Apache License, Version 2.0
    006     * (the "License"); you may not use this file except in compliance with
    007     * the License.  You may obtain a copy of the License at
    008     *
    009     *      http://www.apache.org/licenses/LICENSE-2.0
    010     *
    011     * Unless required by applicable law or agreed to in writing, software
    012     * distributed under the License is distributed on an "AS IS" BASIS,
    013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    014     * See the License for the specific language governing permissions and
    015     * limitations under the License.
    016     */
    017
    018    package org.apache.commons.net.ftp;
    019
    020    /***
    021     * FTPReply stores a set of constants for FTP reply codes.  To interpret
    022     * the meaning of the codes, familiarity with RFC 959 is assumed.
    023     * The mnemonic constant names are transcriptions from the code descriptions
    024     * of RFC 959.
    025     * <p>
    026     * TODO replace with an enum
    027     ***/
    028
    029    public final class FTPReply
    030    {
    031
    032        public static final int RESTART_MARKER = 110;
    033        public static final int SERVICE_NOT_READY = 120;
    034        public static final int DATA_CONNECTION_ALREADY_OPEN = 125;
    035        public static final int FILE_STATUS_OK = 150;
    036        public static final int COMMAND_OK = 200;
    037        public static final int COMMAND_IS_SUPERFLUOUS = 202;
    038        public static final int SYSTEM_STATUS = 211;
    039        public static final int DIRECTORY_STATUS = 212;
    040        public static final int FILE_STATUS = 213;
    041        public static final int HELP_MESSAGE = 214;
    042        public static final int NAME_SYSTEM_TYPE = 215;
    043        public static final int SERVICE_READY = 220;
    044        public static final int SERVICE_CLOSING_CONTROL_CONNECTION = 221;
    045        public static final int DATA_CONNECTION_OPEN = 225;
    046        public static final int CLOSING_DATA_CONNECTION = 226;
    047        public static final int ENTERING_PASSIVE_MODE = 227;
    048        /** @since 2.2 */
    049        public static final int ENTERING_EPSV_MODE = 229;
    050        public static final int USER_LOGGED_IN = 230;
    051        public static final int FILE_ACTION_OK = 250;
    052        public static final int PATHNAME_CREATED = 257;
    053        public static final int NEED_PASSWORD = 331;
    054        public static final int NEED_ACCOUNT = 332;
    055        public static final int FILE_ACTION_PENDING = 350;
    056        public static final int SERVICE_NOT_AVAILABLE = 421;
    057        public static final int CANNOT_OPEN_DATA_CONNECTION = 425;
    058        public static final int TRANSFER_ABORTED = 426;
    059        public static final int FILE_ACTION_NOT_TAKEN = 450;
    060        public static final int ACTION_ABORTED = 451;
    061        public static final int INSUFFICIENT_STORAGE = 452;
    062        public static final int UNRECOGNIZED_COMMAND = 500;
    063        public static final int SYNTAX_ERROR_IN_ARGUMENTS = 501;
    064        public static final int COMMAND_NOT_IMPLEMENTED = 502;
    065        public static final int BAD_COMMAND_SEQUENCE = 503;
    066        public static final int COMMAND_NOT_IMPLEMENTED_FOR_PARAMETER = 504;
    067        public static final int NOT_LOGGED_IN = 530;
    068        public static final int NEED_ACCOUNT_FOR_STORING_FILES = 532;
    069        public static final int FILE_UNAVAILABLE = 550;
    070        public static final int PAGE_TYPE_UNKNOWN = 551;
    071        public static final int STORAGE_ALLOCATION_EXCEEDED = 552;
    072        public static final int FILE_NAME_NOT_ALLOWED = 553;
    073
    074        // FTPS Reply Codes
    075
    076        /** @since 2.0 */
    077        public static final int SECURITY_DATA_EXCHANGE_COMPLETE = 234;
    078        /** @since 2.0 */
    079        public static final int SECURITY_DATA_EXCHANGE_SUCCESSFULLY = 235;
    080        /** @since 2.0 */
    081        public static final int SECURITY_MECHANISM_IS_OK = 334;
    082        /** @since 2.0 */
    083        public static final int SECURITY_DATA_IS_ACCEPTABLE = 335;
    084        /** @since 2.0 */
    085        public static final int UNAVAILABLE_RESOURCE = 431;
    086        /** @since 2.2 */
    087        public static final int BAD_TLS_NEGOTIATION_OR_DATA_ENCRYPTION_REQUIRED = 522;
    088        /** @since 2.0 */
    089        public static final int DENIED_FOR_POLICY_REASONS = 533;
    090        /** @since 2.0 */
    091        public static final int REQUEST_DENIED = 534;
    092        /** @since 2.0 */
    093        public static final int FAILED_SECURITY_CHECK = 535;
    094        /** @since 2.0 */
    095        public static final int REQUESTED_PROT_LEVEL_NOT_SUPPORTED = 536;
    096
    097        // IPv6 error codes
    098        // Note this is also used as an FTPS error code reply
    099        /** @since 2.2 */
    100        public static final int EXTENDED_PORT_FAILURE = 522;
    101
    102        // Cannot be instantiated
    103        private FTPReply()
    104        {}
    105
    106        /***
    107         * Determine if a reply code is a positive preliminary response.  All
    108         * codes beginning with a 1 are positive preliminary responses.
    109         * Postitive preliminary responses are used to indicate tentative success.
    110         * No further commands can be issued to the FTP server after a positive
    111         * preliminary response until a follow up response is received from the
    112         * server.
    113         * <p>
    114         * @param reply  The reply code to test.
    115         * @return True if a reply code is a postive preliminary response, false
    116         *         if not.
    117         ***/
    118        public static boolean isPositivePreliminary(int reply)
    119        {
    120            return (reply >= 100 && reply < 200);
    121        }
    122
    123        /***
    124         * Determine if a reply code is a positive completion response.  All
    125         * codes beginning with a 2 are positive completion responses.
    126         * The FTP server will send a positive completion response on the final
    127         * successful completion of a command.
    128         * <p>
    129         * @param reply  The reply code to test.
    130         * @return True if a reply code is a postive completion response, false
    131         *         if not.
    132         ***/
    133        public static boolean isPositiveCompletion(int reply)
    134        {
    135            return (reply >= 200 && reply < 300);
    136        }
    137
    138        /***
    139         * Determine if a reply code is a positive intermediate response.  All
    140         * codes beginning with a 3 are positive intermediate responses.
    141         * The FTP server will send a positive intermediate response on the
    142         * successful completion of one part of a multi-part sequence of
    143         * commands.  For example, after a successful USER command, a positive
    144         * intermediate response will be sent to indicate that the server is
    145         * ready for the PASS command.
    146         * <p>
    147         * @param reply  The reply code to test.
    148         * @return True if a reply code is a postive intermediate response, false
    149         *         if not.
    150         ***/
    151        public static boolean isPositiveIntermediate(int reply)
    152        {
    153            return (reply >= 300 && reply < 400);
    154        }
    155
    156        /***
    157         * Determine if a reply code is a negative transient response.  All
    158         * codes beginning with a 4 are negative transient responses.
    159         * The FTP server will send a negative transient response on the
    160         * failure of a command that can be reattempted with success.
    161         * <p>
    162         * @param reply  The reply code to test.
    163         * @return True if a reply code is a negative transient response, false
    164         *         if not.
    165         ***/
    166        public static boolean isNegativeTransient(int reply)
    167        {
    168            return (reply >= 400 && reply < 500);
    169        }
    170
    171        /***
    172         * Determine if a reply code is a negative permanent response.  All
    173         * codes beginning with a 5 are negative permanent responses.
    174         * The FTP server will send a negative permanent response on the
    175         * failure of a command that cannot be reattempted with success.
    176         * <p>
    177         * @param reply  The reply code to test.
    178         * @return True if a reply code is a negative permanent response, false
    179         *         if not.
    180         ***/
    181        public static boolean isNegativePermanent(int reply)
    182        {
    183            return (reply >= 500 && reply < 600);
    184        }
    185
    186        /**
    187         * Determine if a reply code is a protected response.
    188         * @param reply  The reply code to test.
    189         * @return True if a reply code is a protected response, false
    190         *         if not.
    191         * @since 3.0
    192         */
    193        public static boolean isProtectedReplyCode(int reply)
    194        {
    195            // actually, only 3 protected reply codes are
    196            // defined in RFC 2228: 631, 632 and 633.
    197            return (reply >= 600 && reply < 700);
    198        }
    199
    200
    201    }