148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood/*
248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood * Copyright (c) 2006-2011 Christian Plattner. All rights reserved.
348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood * Please refer to the LICENSE.txt for licensing details.
448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood */
548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwoodpackage ch.ethz.ssh2.sftp;
648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood/**
848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood *
948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood * SFTP Error Codes
1048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood *
1148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood * @author Christian Plattner
1248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood * @version 2.50, 03/15/10
1348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood *
1448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood */
1548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwoodpublic class ErrorCodes
1648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood{
1748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public static final int SSH_FX_OK = 0;
1848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public static final int SSH_FX_EOF = 1;
1948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public static final int SSH_FX_NO_SUCH_FILE = 2;
2048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public static final int SSH_FX_PERMISSION_DENIED = 3;
2148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public static final int SSH_FX_FAILURE = 4;
2248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public static final int SSH_FX_BAD_MESSAGE = 5;
2348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public static final int SSH_FX_NO_CONNECTION = 6;
2448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public static final int SSH_FX_CONNECTION_LOST = 7;
2548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public static final int SSH_FX_OP_UNSUPPORTED = 8;
2648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public static final int SSH_FX_INVALID_HANDLE = 9;
2748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public static final int SSH_FX_NO_SUCH_PATH = 10;
2848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public static final int SSH_FX_FILE_ALREADY_EXISTS = 11;
2948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public static final int SSH_FX_WRITE_PROTECT = 12;
3048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public static final int SSH_FX_NO_MEDIA = 13;
3148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public static final int SSH_FX_NO_SPACE_ON_FILESYSTEM = 14;
3248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public static final int SSH_FX_QUOTA_EXCEEDED = 15;
3348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public static final int SSH_FX_UNKNOWN_PRINCIPAL = 16;
3448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public static final int SSH_FX_LOCK_CONFLICT = 17;
3548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public static final int SSH_FX_DIR_NOT_EMPTY = 18;
3648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public static final int SSH_FX_NOT_A_DIRECTORY = 19;
3748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public static final int SSH_FX_INVALID_FILENAME = 20;
3848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public static final int SSH_FX_LINK_LOOP = 21;
3948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public static final int SSH_FX_CANNOT_DELETE = 22;
4048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public static final int SSH_FX_INVALID_PARAMETER = 23;
4148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public static final int SSH_FX_FILE_IS_A_DIRECTORY = 24;
4248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public static final int SSH_FX_BYTE_RANGE_LOCK_CONFLICT = 25;
4348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public static final int SSH_FX_BYTE_RANGE_LOCK_REFUSED = 26;
4448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public static final int SSH_FX_DELETE_PENDING = 27;
4548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public static final int SSH_FX_FILE_CORRUPT = 28;
4648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public static final int SSH_FX_OWNER_INVALID = 29;
4748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public static final int SSH_FX_GROUP_INVALID = 30;
4848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public static final int SSH_FX_NO_MATCHING_BYTE_RANGE_LOCK = 31;
4948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
5048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	private static final String[][] messages = {
5148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
5248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			{ "SSH_FX_OK", "Indicates successful completion of the operation." },
5348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			{ "SSH_FX_EOF",
5448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood					"An attempt to read past the end-of-file was made; or, there are no more directory entries to return." },
5548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			{ "SSH_FX_NO_SUCH_FILE", "A reference was made to a file which does not exist." },
5648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			{ "SSH_FX_PERMISSION_DENIED", "The user does not have sufficient permissions to perform the operation." },
5748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			{ "SSH_FX_FAILURE", "An error occurred, but no specific error code exists to describe the failure." },
5848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			{ "SSH_FX_BAD_MESSAGE", "A badly formatted packet or other SFTP protocol incompatibility was detected." },
5948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			{ "SSH_FX_NO_CONNECTION", "There is no connection to the server." },
6048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			{ "SSH_FX_CONNECTION_LOST", "The connection to the server was lost." },
6148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			{ "SSH_FX_OP_UNSUPPORTED",
6248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood					"An attempted operation could not be completed by the server because the server does not support the operation." },
6348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			{ "SSH_FX_INVALID_HANDLE", "The handle value was invalid." },
6448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			{ "SSH_FX_NO_SUCH_PATH", "The file path does not exist or is invalid." },
6548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			{ "SSH_FX_FILE_ALREADY_EXISTS", "The file already exists." },
6648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			{ "SSH_FX_WRITE_PROTECT", "The file is on read-only media, or the media is write protected." },
6748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			{ "SSH_FX_NO_MEDIA",
6848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood					"The requested operation cannot be completed because there is no media available in the drive." },
6948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			{ "SSH_FX_NO_SPACE_ON_FILESYSTEM",
7048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood					"The requested operation cannot be completed because there is insufficient free space on the filesystem." },
7148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			{ "SSH_FX_QUOTA_EXCEEDED",
7248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood					"The operation cannot be completed because it would exceed the user's storage quota." },
7348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			{
7448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood					"SSH_FX_UNKNOWN_PRINCIPAL",
7548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood					"A principal referenced by the request (either the 'owner', 'group', or 'who' field of an ACL), was unknown. The error specific data contains the problematic names." },
7648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			{ "SSH_FX_LOCK_CONFLICT", "The file could not be opened because it is locked by another process." },
7748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			{ "SSH_FX_DIR_NOT_EMPTY", "The directory is not empty." },
7848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			{ "SSH_FX_NOT_A_DIRECTORY", "The specified file is not a directory." },
7948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			{ "SSH_FX_INVALID_FILENAME", "The filename is not valid." },
8048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			{ "SSH_FX_LINK_LOOP",
8148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood					"Too many symbolic links encountered or, an SSH_FXF_NOFOLLOW open encountered a symbolic link as the final component." },
8248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			{ "SSH_FX_CANNOT_DELETE",
8348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood					"The file cannot be deleted. One possible reason is that the advisory READONLY attribute-bit is set." },
8448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			{ "SSH_FX_INVALID_PARAMETER",
8548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood					"One of the parameters was out of range, or the parameters specified cannot be used together." },
8648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			{ "SSH_FX_FILE_IS_A_DIRECTORY",
8748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood					"The specified file was a directory in a context where a directory cannot be used." },
8848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			{ "SSH_FX_BYTE_RANGE_LOCK_CONFLICT",
8948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood					" A read or write operation failed because another process's mandatory byte-range lock overlaps with the request." },
9048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			{ "SSH_FX_BYTE_RANGE_LOCK_REFUSED", "A request for a byte range lock was refused." },
9148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			{ "SSH_FX_DELETE_PENDING", "An operation was attempted on a file for which a delete operation is pending." },
9248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			{ "SSH_FX_FILE_CORRUPT", "The file is corrupt; an filesystem integrity check should be run." },
9348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			{ "SSH_FX_OWNER_INVALID", "The principal specified can not be assigned as an owner of a file." },
9448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			{ "SSH_FX_GROUP_INVALID", "The principal specified can not be assigned as the primary group of a file." },
9548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			{ "SSH_FX_NO_MATCHING_BYTE_RANGE_LOCK",
9648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood					"The requested operation could not be completed because the	specifed byte range lock has not been granted." },
9748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
9848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	};
9948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
10048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	public static final String[] getDescription(int errorCode)
10148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	{
10248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		if ((errorCode < 0) || (errorCode >= messages.length))
10348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood			return null;
10448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood
10548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood		return messages[errorCode];
10648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood	}
10748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood}
108