Package org.apache.sshd.sftp.common
Class SftpHelper
- java.lang.Object
-
- org.apache.sshd.sftp.common.SftpHelper
-
public final class SftpHelper extends java.lang.Object
-
-
Field Summary
Fields Modifier and Type Field Description static java.util.Map<java.lang.Integer,java.lang.String>
DEFAULT_SUBSTATUS_MESSAGE
-
Constructor Summary
Constructors Modifier Constructor Description private
SftpHelper()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static int
attributesToPermissions(boolean isReg, boolean isDir, boolean isLnk, java.util.Collection<java.nio.file.attribute.PosixFilePermission> perms)
Converts a file / folder's attributes into a maskstatic java.nio.file.attribute.AclEntry
buildAclEntry(int aclType, int aclFlag, int aclMask, java.lang.String aclWho)
static java.nio.file.attribute.AclEntryType
decodeAclEntryType(int aclType)
static java.util.Set<java.nio.file.attribute.AclEntryFlag>
decodeAclFlags(int aclFlag)
static java.util.Set<java.nio.file.attribute.AclEntryPermission>
decodeAclMask(int aclMask)
static java.util.List<java.nio.file.attribute.AclEntry>
decodeACLs(Buffer buffer, int version)
static int
encodeAclEntryType(java.nio.file.attribute.AclEntryType type)
Returns the equivalent SFTP value for the ACL typestatic long
encodeAclFlags(java.util.Collection<java.nio.file.attribute.AclEntryFlag> flags)
static long
encodeAclMask(java.util.Collection<java.nio.file.attribute.AclEntryPermission> mask)
static <B extends Buffer>
BencodeACLs(B buffer, int version, java.util.Collection<? extends java.nio.file.attribute.AclEntry> acl)
static int
fileTypeToPermission(int type)
Converts a file type into a POSIX permission mask valuestatic boolean
getBool(java.lang.Boolean bool)
static java.lang.Boolean
getEndOfFileIndicatorValue(Buffer buffer, int version)
Retrieves the end-of-file indicator forSSH_FXP_DATA
responses, provided the version is at least 6, and the buffer has enough available datastatic java.lang.Boolean
getEndOfListIndicatorValue(Buffer buffer, int version)
Retrieves the end-of-list indicator forSSH_FXP_NAME
responses, provided the version is at least 6, and the buffer has enough available datastatic java.lang.String
getLongName(java.lang.String shortName, java.util.Map<java.lang.String,?> attributes)
Creates an "ls -l" compatible long name stringstatic java.lang.Boolean
indicateEndOfNamesList(Buffer buffer, int version, PropertyResolver resolver)
Appends the end-of-list=TRUE
indicator forSSH_FXP_NAME
responses, provided the version is at least 6 and the feature is enabledstatic java.lang.Boolean
indicateEndOfNamesList(Buffer buffer, int version, PropertyResolver resolver, boolean indicatorValue)
Appends the end-of-list indicator forSSH_FXP_NAME
responses, provided the version is at least 6, the feature is enabled and the indicator value is notnull
static java.util.Set<java.nio.file.attribute.PosixFilePermission>
permissionsToAttributes(int perms)
Translates a mask of permissions into its enumeration values equivalentsstatic int
permissionsToFileType(int perms)
Converts a POSIX permissions mask to a file type valuestatic java.util.List<java.nio.file.attribute.AclEntry>
readACLs(Buffer buffer, int version)
static java.util.NavigableMap<java.lang.String,java.lang.Object>
readAttrs(Buffer buffer, int version)
static java.util.NavigableMap<java.lang.String,byte[]>
readExtensions(Buffer buffer)
static java.nio.file.attribute.FileTime
readTime(Buffer buffer, int version, int flags)
Decodes aFileTime
value from a bufferstatic java.lang.String
resolveStatusMessage(int subStatus)
static int
resolveSubstatus(java.lang.Throwable t)
Returns the most adequate sub-status for the provided exceptionstatic java.util.NavigableMap<java.lang.String,byte[]>
toBinaryExtensions(java.util.Map<java.lang.String,java.lang.String> extensions)
static java.util.NavigableMap<java.lang.String,java.lang.String>
toStringExtensions(java.util.Map<java.lang.String,?> extensions)
static <B extends Buffer>
BwriteAclEntry(B buffer, java.nio.file.attribute.AclEntry acl)
static <B extends Buffer>
BwriteACLs(B buffer, int version, java.util.Collection<? extends java.nio.file.attribute.AclEntry> acl)
static <B extends Buffer>
BwriteAttributes(B buffer, SftpClient.Attributes attributes, int sftpVersion)
static <B extends Buffer>
BwriteAttrs(B buffer, int version, java.util.Map<java.lang.String,?> attributes)
Writes a file / folder's attributes to a bufferstatic <B extends Buffer>
BwriteAttrsV3(B buffer, int version, java.util.Map<java.lang.String,?> attributes)
Writes the retrieved file / directory attributes in V3 formatstatic <B extends Buffer>
BwriteAttrsV4(B buffer, int version, java.util.Map<java.lang.String,?> attributes)
Writes the retrieved file / directory attributes in V4+ formatstatic <B extends Buffer>
BwriteExtensions(B buffer, java.util.Map<?,?> extensions)
static <B extends Buffer>
BwriteTime(B buffer, int version, int flags, java.nio.file.attribute.FileTime time)
Encodes aFileTime
value into a buffer
-
-
-
Method Detail
-
getEndOfFileIndicatorValue
public static java.lang.Boolean getEndOfFileIndicatorValue(Buffer buffer, int version)
Retrieves the end-of-file indicator forSSH_FXP_DATA
responses, provided the version is at least 6, and the buffer has enough available data- Parameters:
buffer
- TheBuffer
to retrieve the data fromversion
- The SFTP version being used- Returns:
- The indicator value -
null
if none retrieved - See Also:
- SFTP v6 - section 9.3
-
getEndOfListIndicatorValue
public static java.lang.Boolean getEndOfListIndicatorValue(Buffer buffer, int version)
Retrieves the end-of-list indicator forSSH_FXP_NAME
responses, provided the version is at least 6, and the buffer has enough available data- Parameters:
buffer
- TheBuffer
to retrieve the data fromversion
- The SFTP version being used- Returns:
- The indicator value -
null
if none retrieved - See Also:
- SFTP v6 - section
9.4,
indicateEndOfNamesList(Buffer, int, PropertyResolver, boolean)
-
indicateEndOfNamesList
public static java.lang.Boolean indicateEndOfNamesList(Buffer buffer, int version, PropertyResolver resolver)
Appends the end-of-list=TRUE
indicator forSSH_FXP_NAME
responses, provided the version is at least 6 and the feature is enabled- Parameters:
buffer
- TheBuffer
to append the indicatorversion
- The SFTP version being usedresolver
- ThePropertyResolver
to query whether to enable the feature- Returns:
- The actual indicator value used -
null
if none appended - See Also:
indicateEndOfNamesList(Buffer, int, PropertyResolver, boolean)
-
indicateEndOfNamesList
public static java.lang.Boolean indicateEndOfNamesList(Buffer buffer, int version, PropertyResolver resolver, boolean indicatorValue)
Appends the end-of-list indicator forSSH_FXP_NAME
responses, provided the version is at least 6, the feature is enabled and the indicator value is notnull
- Parameters:
buffer
- TheBuffer
to append the indicatorversion
- The SFTP version being usedresolver
- ThePropertyResolver
to query whether to enable the featureindicatorValue
- The indicator value -null
means don't append the indicator- Returns:
- The actual indicator value used -
null
if none appended - See Also:
- SFTP v6 -
section 9.4,
SftpModuleProperties.APPEND_END_OF_LIST_INDICATOR
-
writeAttrs
public static <B extends Buffer> B writeAttrs(B buffer, int version, java.util.Map<java.lang.String,?> attributes)
Writes a file / folder's attributes to a buffer- Type Parameters:
B
- Type ofBuffer
being updated- Parameters:
buffer
- The target buffer instanceversion
- The output encoding versionattributes
- TheMap
of attributes- Returns:
- The updated buffer
- See Also:
writeAttrsV3(Buffer, int, Map)
,writeAttrsV4(Buffer, int, Map)
-
writeAttrsV3
public static <B extends Buffer> B writeAttrsV3(B buffer, int version, java.util.Map<java.lang.String,?> attributes)
Writes the retrieved file / directory attributes in V3 format- Type Parameters:
B
- Type ofBuffer
being updated- Parameters:
buffer
- The target buffer instanceversion
- The actual version - must beSftpConstants.SFTP_V3
attributes
- TheMap
of attributes- Returns:
- The updated buffer
-
writeAttrsV4
public static <B extends Buffer> B writeAttrsV4(B buffer, int version, java.util.Map<java.lang.String,?> attributes)
Writes the retrieved file / directory attributes in V4+ format- Type Parameters:
B
- Type ofBuffer
being updated- Parameters:
buffer
- The target buffer instanceversion
- The actual version - must be at leastSftpConstants.SFTP_V4
attributes
- TheMap
of attributes- Returns:
- The updated buffer
-
writeAttributes
public static <B extends Buffer> B writeAttributes(B buffer, SftpClient.Attributes attributes, int sftpVersion)
-
getBool
public static boolean getBool(java.lang.Boolean bool)
- Parameters:
bool
- TheBoolean
value- Returns:
true
it the argument is non-null
and itsBoolean.booleanValue()
istrue
-
attributesToPermissions
public static int attributesToPermissions(boolean isReg, boolean isDir, boolean isLnk, java.util.Collection<java.nio.file.attribute.PosixFilePermission> perms)
Converts a file / folder's attributes into a mask- Parameters:
isReg
-true
if this is a normal fileisDir
-true
if this is a directoryisLnk
-true
if this is a symbolic linkperms
- The file / folder's accessPosixFilePermission
s- Returns:
- A mask encoding the file / folder's attributes
-
permissionsToFileType
public static int permissionsToFileType(int perms)
Converts a POSIX permissions mask to a file type value- Parameters:
perms
- The POSIX permissions mask- Returns:
- The file type - see
SSH_FILEXFER_TYPE_xxx
values
-
fileTypeToPermission
public static int fileTypeToPermission(int type)
Converts a file type into a POSIX permission mask value- Parameters:
type
- File type - seeSSH_FILEXFER_TYPE_xxx
values- Returns:
- The matching POSIX permission mask value
-
permissionsToAttributes
public static java.util.Set<java.nio.file.attribute.PosixFilePermission> permissionsToAttributes(int perms)
Translates a mask of permissions into its enumeration values equivalents- Parameters:
perms
- The permissions mask- Returns:
- A
Set
of the equivalentPosixFilePermission
s
-
resolveSubstatus
public static int resolveSubstatus(java.lang.Throwable t)
Returns the most adequate sub-status for the provided exception- Parameters:
t
- The thrownThrowable
- Returns:
- The matching sub-status
-
resolveStatusMessage
public static java.lang.String resolveStatusMessage(int subStatus)
-
readAttrs
public static java.util.NavigableMap<java.lang.String,java.lang.Object> readAttrs(Buffer buffer, int version)
-
readExtensions
public static java.util.NavigableMap<java.lang.String,byte[]> readExtensions(Buffer buffer)
-
writeExtensions
public static <B extends Buffer> B writeExtensions(B buffer, java.util.Map<?,?> extensions)
-
toStringExtensions
public static java.util.NavigableMap<java.lang.String,java.lang.String> toStringExtensions(java.util.Map<java.lang.String,?> extensions)
-
toBinaryExtensions
public static java.util.NavigableMap<java.lang.String,byte[]> toBinaryExtensions(java.util.Map<java.lang.String,java.lang.String> extensions)
-
readACLs
public static java.util.List<java.nio.file.attribute.AclEntry> readACLs(Buffer buffer, int version)
-
decodeACLs
public static java.util.List<java.nio.file.attribute.AclEntry> decodeACLs(Buffer buffer, int version)
-
buildAclEntry
public static java.nio.file.attribute.AclEntry buildAclEntry(int aclType, int aclFlag, int aclMask, java.lang.String aclWho)
-
decodeAclEntryType
public static java.nio.file.attribute.AclEntryType decodeAclEntryType(int aclType)
- Parameters:
aclType
- TheACE4_ACCESS_xxx_ACE_TYPE
value- Returns:
- The matching
AclEntryType
ornull
if unknown value
-
decodeAclFlags
public static java.util.Set<java.nio.file.attribute.AclEntryFlag> decodeAclFlags(int aclFlag)
-
decodeAclMask
public static java.util.Set<java.nio.file.attribute.AclEntryPermission> decodeAclMask(int aclMask)
-
writeACLs
public static <B extends Buffer> B writeACLs(B buffer, int version, java.util.Collection<? extends java.nio.file.attribute.AclEntry> acl)
-
encodeACLs
public static <B extends Buffer> B encodeACLs(B buffer, int version, java.util.Collection<? extends java.nio.file.attribute.AclEntry> acl)
-
writeAclEntry
public static <B extends Buffer> B writeAclEntry(B buffer, java.nio.file.attribute.AclEntry acl)
-
encodeAclEntryType
public static int encodeAclEntryType(java.nio.file.attribute.AclEntryType type)
Returns the equivalent SFTP value for the ACL type- Parameters:
type
- TheAclEntryType
- Returns:
- The equivalent
ACE_SYSTEM_xxx_TYPE
or negative ifnull
or unknown type
-
encodeAclFlags
public static long encodeAclFlags(java.util.Collection<java.nio.file.attribute.AclEntryFlag> flags)
-
encodeAclMask
public static long encodeAclMask(java.util.Collection<java.nio.file.attribute.AclEntryPermission> mask)
-
writeTime
public static <B extends Buffer> B writeTime(B buffer, int version, int flags, java.nio.file.attribute.FileTime time)
Encodes aFileTime
value into a buffer- Type Parameters:
B
- Type ofBuffer
being updated- Parameters:
buffer
- The target buffer instanceversion
- The encoding versionflags
- The encoding flagstime
- The value to encode- Returns:
- The updated buffer
-
readTime
public static java.nio.file.attribute.FileTime readTime(Buffer buffer, int version, int flags)
Decodes aFileTime
value from a buffer- Parameters:
buffer
- The sourceBuffer
version
- The encoding versionflags
- The encoding flags- Returns:
- The decoded value
-
getLongName
public static java.lang.String getLongName(java.lang.String shortName, java.util.Map<java.lang.String,?> attributes)
Creates an "ls -l" compatible long name string- Parameters:
shortName
- The short file name - can also be "." or ".."attributes
- The file's attributes - e.g., size, owner, permissions, etc.- Returns:
- A
String
representing the "long" file name as per SFTP version 3 - section 7
-
-