# Copyright 2008 the original author or authors.
# 
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#  
#       http://www.apache.org/licenses/LICENSE-2.0
#  
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#-------------------------------------------------------------------------------
# Mapping of reply code -> reply text
#-------------------------------------------------------------------------------
110=Restart marker reply.
120=Service ready in nnn minutes.
125=Data connection already open; transfer starting.
150=File status okay; about to open data connection.
200=Command okay.
202=Command not implemented, superfluous at this site.
211={0}.
212={0}.
213={0}.
214={0}.
215={0} system type.
220=Service ready for new user. (MockFtpServer 2.5; see http://mockftpserver.sourceforge.net)
221=Service closing control connection.
225=Data connection open; no transfer in progress.
226=Closing data connection. Requested file action successful.
226.WithFilename=Closing data connection. Requested file action successful. Filename={0}.
227=Entering Passive Mode {0}.
229=Entering Extended Passive Mode (|||{0}|)
230=User logged in, proceed.
250=Requested file action okay, completed.
257={0} created.
331=User name okay, need password.
332=Need account for login.
350=Requested file action pending further information.
421=Service not available, closing control connection.
#    This may be a reply to any command if the service knows it must shut down.
425=Can't open data connection.
426=Connection closed; transfer aborted.
450=Requested file action not taken.
#   File unavailable (e.g., file busy).
451=Requested action aborted: local error in processing.
452=Requested action not taken.
#    Insufficient storage space in system.
500=Syntax error, command unrecognized.
#    This may include errors such as command line too long.
501=Syntax error in parameters or arguments.
502=Command not implemented: {0}.
503=Bad sequence of commands.
504=Command not implemented for that parameter.
530=Not logged in.
532=Need account for storing files.
550=File not found or not accessible: {0}.
#    File unavailable (e.g., file not found, no access).
551=Requested action aborted: page type unknown.
552=Requested file action aborted.
#    Exceeded storage allocation (for current directory or dataset).
553=Requested action not taken for {0}
#    File name not allowed.

#-------------------------------------------------------------------------------
# FTP Command-Specific Reply Messages
#-------------------------------------------------------------------------------
abor=ABOR completed.
acct=ACCT completed for {0}.
allo=ALLO completed.
appe=Created or appended to file {0}.
cdup=CDUP completed. New directory is {0}.
cwd=CWD completed. New directory is {0}.
dele="{0}" deleted.
eprt=EPRT completed.
epsv=Entering Extended Passive Mode (|||{0}|)
help={0}.
help.noHelpTextDefined=No help text has been defined for [{0}]
mkd="{0}" created.
mode=MODE completed.
noop=NOOP completed.
pass=User logged in, proceed.
pass.needAccount=Need account for login.
pass.loginFailed=Not logged in.
pasv=({0})
port=PORT completed.
pwd="{0}" is current directory.
quit=Service closing control connection.
rein=REIN completed.
rest=REST completed.
rmd="{0}" removed.
rnfr=Requested file action pending further information.
rnto=Rename from {0} to {1} completed.
site=SITE completed.
smnt=SMNT completed.
stat={0}.
stou=Created file {0}.
stor=Created file {0}.
stru=STRU completed.
syst="{0}"
type=TYPE completed.
user.loggedIn=User logged in, proceed.
user.needPassword=User name okay, need password.

#-------------------------------------------------------------------------------
# FileSystem Messages
#-------------------------------------------------------------------------------
filesystem.alreadyExists=The path [{0}] already exists.
filesystem.parentDirectoryDoesNotExist=The parent directory [{0}] does not exist.
filesystem.doesNotExist=[{0}] does not exist.
filesystem.isDirectory=[{0}] is a directory.
filesystem.isFile=[{0}] is a file.
filesystem.isNotADirectory=[{0}] is not a directory or does not exist.
filesystem.isNotAFile=[{0}] is not a file or does not exist.
filesystem.cannotRead=The current user does not have read permission for [{0}].
filesystem.cannotWrite=The current user does not have write permission for [{0}].
filesystem.cannotExecute=The current user does not have execute permission for [{0}].
filesystem.directoryIsNotEmpty=The [{0}] directory is not empty.
filesystem.renameFailed=The rename to [{0}] has failed.
filesystem.pathIsNotValid=The path [{0}] is not valid.
filesystem.currentDirectoryNotSet=The current directory has not been set.

#-------------------------------------------------------------------------------
# Other Common Messages
#-------------------------------------------------------------------------------
login.userAccountNotValid=UserAccount missing or invalid for user [{0}]
login.homeDirectoryNotValid=The homeDirectory configured for user [{0}] is not a valid directory: [{1}]

internalError=Internal error: {0} {1}