http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/17f2d627/sshd-core/src/main/java/org/apache/sshd/common/signature/AbstractSignature.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/signature/AbstractSignature.java b/sshd-core/src/main/java/org/apache/sshd/common/signature/AbstractSignature.java index 9623ee0..6bf4b49 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/signature/AbstractSignature.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/signature/AbstractSignature.java @@ -46,7 +46,7 @@ public abstract class AbstractSignature implements Signature { public final String getAlgorithm() { return algorithm; } - + @Override public void initVerifier(PublicKey key) throws Exception { @@ -71,24 +71,25 @@ public abstract class AbstractSignature implements Signature { } /** - * Makes an attempt to detect if the signature is encoded or pure data + * Makes an attempt to detect if the signature is encoded or pure data + * * @param sig The original signature * @return A {@link Pair} where first value is the key type and second * value is the data - {@code null} if not encoded */ - protected Pair<String,byte[]> extractEncodedSignature(byte[] sig) { + protected Pair<String, byte[]> extractEncodedSignature(byte[] sig) { final int dataLen = GenericUtils.length(sig); // if it is encoded then we must have at least 2 UINT32 values if (dataLen < (2 * (Integer.SIZE / Byte.SIZE))) { return null; } - + long keyTypeLen = BufferUtils.getUInt(sig, 0, dataLen); // after the key type we MUST have data bytes if (keyTypeLen >= (dataLen - (Integer.SIZE / Byte.SIZE))) { return null; } - + int keyTypeStartPos = Integer.SIZE / Byte.SIZE; int keyTypeEndPos = keyTypeStartPos + (int) keyTypeLen; int remainLen = dataLen - keyTypeEndPos; @@ -96,7 +97,7 @@ public abstract class AbstractSignature implements Signature { if (remainLen < (Integer.SIZE / Byte.SIZE)) { return null; } - + long dataBytesLen = BufferUtils.getUInt(sig, keyTypeEndPos, remainLen); // make sure reported number of bytes does not exceed available if (dataBytesLen > (remainLen - (Integer.SIZE / Byte.SIZE))) {
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/17f2d627/sshd-core/src/main/java/org/apache/sshd/common/signature/BuiltinSignatures.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/signature/BuiltinSignatures.java b/sshd-core/src/main/java/org/apache/sshd/common/signature/BuiltinSignatures.java index 6efddd1..0edf496 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/signature/BuiltinSignatures.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/signature/BuiltinSignatures.java @@ -43,6 +43,7 @@ import org.apache.sshd.common.util.ValidateUtils; /** * Provides easy access to the currently implemented signatures + * * @author <a href="mailto:[email protected]">Apache MINA SSHD Project</a> */ public enum BuiltinSignatures implements SignatureFactory { @@ -63,7 +64,7 @@ public enum BuiltinSignatures implements SignatureFactory { public Signature create() { return new SignatureECDSA("SHA256withECDSA"); } - + @Override public boolean isSupported() { return SecurityUtils.isBouncyCastleRegistered() || SecurityUtils.hasEcc(); @@ -74,7 +75,7 @@ public enum BuiltinSignatures implements SignatureFactory { public Signature create() { return new SignatureECDSA("SHA384withECDSA"); } - + @Override public boolean isSupported() { return SecurityUtils.isBouncyCastleRegistered() || SecurityUtils.hasEcc(); @@ -85,15 +86,25 @@ public enum BuiltinSignatures implements SignatureFactory { public Signature create() { return new SignatureECDSA("SHA512withECDSA"); } - + @Override public boolean isSupported() { return SecurityUtils.isBouncyCastleRegistered() || SecurityUtils.hasEcc(); } }; + public static final Set<BuiltinSignatures> VALUES = + Collections.unmodifiableSet(EnumSet.allOf(BuiltinSignatures.class)); + + private static final Map<String, SignatureFactory> EXTENSIONS = + new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + private final String factoryName; + BuiltinSignatures(String facName) { + factoryName = facName; + } + public static Signature getByCurveSize(ECParameterSpec params) { int curveSize = ECCurves.getCurveSize(params); if (curveSize <= 256) { @@ -115,35 +126,27 @@ public enum BuiltinSignatures implements SignatureFactory { return getName(); } - BuiltinSignatures(String facName) { - factoryName = facName; - } - @Override public boolean isSupported() { return true; } - public static final Set<BuiltinSignatures> VALUES = - Collections.unmodifiableSet(EnumSet.allOf(BuiltinSignatures.class)); - private static final Map<String,SignatureFactory> extensions = - new TreeMap<>(String.CASE_INSENSITIVE_ORDER); - /** * Registered a {@link NamedFactory} to be available besides the built-in * ones when parsing configuration + * * @param extension The factory to register * @throws IllegalArgumentException if factory instance is {@code null}, - * or overrides a built-in one or overrides another registered factory - * with the same name (case <U>insensitive</U>). + * or overrides a built-in one or overrides another registered factory + * with the same name (case <U>insensitive</U>). */ public static void registerExtension(SignatureFactory extension) { - String name=ValidateUtils.checkNotNull(extension, "No extension provided").getName(); + String name = ValidateUtils.checkNotNull(extension, "No extension provided").getName(); ValidateUtils.checkTrue(fromFactoryName(name) == null, "Extension overrides built-in: %s", name); - synchronized(extensions) { - ValidateUtils.checkTrue(!extensions.containsKey(name), "Extension overrides existing: %s", name); - extensions.put(name, extension); + synchronized (EXTENSIONS) { + ValidateUtils.checkTrue(!EXTENSIONS.containsKey(name), "Extension overrides existing: %s", name); + EXTENSIONS.put(name, extension); } } @@ -153,13 +156,14 @@ public enum BuiltinSignatures implements SignatureFactory { */ public static SortedSet<SignatureFactory> getRegisteredExtensions() { // TODO for JDK-8 return Collections.emptySortedSet() - synchronized(extensions) { - return GenericUtils.asSortedSet(NamedResource.BY_NAME_COMPARATOR, extensions.values()); + synchronized (EXTENSIONS) { + return GenericUtils.asSortedSet(NamedResource.BY_NAME_COMPARATOR, EXTENSIONS.values()); } } /** * Unregisters specified extension + * * @param name The factory name - ignored if {@code null}/empty * @return The registered extension - {@code null} if not found */ @@ -167,9 +171,9 @@ public enum BuiltinSignatures implements SignatureFactory { if (GenericUtils.isEmpty(name)) { return null; } - - synchronized(extensions) { - return extensions.remove(name); + + synchronized (EXTENSIONS) { + return EXTENSIONS.remove(name); } } @@ -214,10 +218,10 @@ public enum BuiltinSignatures implements SignatureFactory { public static BuiltinSignatures fromFactoryName(String name) { return NamedResource.Utils.findByName(name, String.CASE_INSENSITIVE_ORDER, VALUES); } - + /** * @param sigs A comma-separated list of signatures' names - ignored - * if {@code null}/empty + * if {@code null}/empty * @return A {@link ParseResult} of all the {@link NamedFactory} whose * name appears in the string and represent a built-in signature. Any * unknown name is <U>ignored</I>. The order of the returned result @@ -229,7 +233,7 @@ public enum BuiltinSignatures implements SignatureFactory { return parseSignatureList(GenericUtils.split(sigs, ',')); } - public static ParseResult parseSignatureList(String ... sigs) { + public static ParseResult parseSignatureList(String... sigs) { return parseSignatureList(GenericUtils.isEmpty((Object[]) sigs) ? Collections.<String>emptyList() : Arrays.asList(sigs)); } @@ -237,11 +241,11 @@ public enum BuiltinSignatures implements SignatureFactory { if (GenericUtils.isEmpty(sigs)) { return ParseResult.EMPTY; } - - List<SignatureFactory> factories=new ArrayList<>(sigs.size()); - List<String> unknown=Collections.emptyList(); + + List<SignatureFactory> factories = new ArrayList<>(sigs.size()); + List<String> unknown = Collections.emptyList(); for (String name : sigs) { - SignatureFactory s=resolveFactory(name); + SignatureFactory s = resolveFactory(name); if (s != null) { factories.add(s); } else { @@ -252,37 +256,38 @@ public enum BuiltinSignatures implements SignatureFactory { unknown.add(name); } } - + return new ParseResult(factories, unknown); } /** * @param name The factory name * @return The factory or {@code null} if it is neither a built-in one - * or a registered extension + * or a registered extension */ public static SignatureFactory resolveFactory(String name) { if (GenericUtils.isEmpty(name)) { return null; } - SignatureFactory s=fromFactoryName(name); + SignatureFactory s = fromFactoryName(name); if (s != null) { return s; } - - synchronized(extensions) { - return extensions.get(name); + + synchronized (EXTENSIONS) { + return EXTENSIONS.get(name); } } /** * Holds the result of the {@link BuiltinSignatures#parseSignatureList(String)} + * * @author <a href="mailto:[email protected]">Apache MINA SSHD Project</a> */ - public static final class ParseResult extends NamedFactoriesListParseResult<Signature,SignatureFactory> { - public static final ParseResult EMPTY=new ParseResult(Collections.<SignatureFactory>emptyList(), Collections.<String>emptyList()); - + public static final class ParseResult extends NamedFactoriesListParseResult<Signature, SignatureFactory> { + public static final ParseResult EMPTY = new ParseResult(Collections.<SignatureFactory>emptyList(), Collections.<String>emptyList()); + public ParseResult(List<SignatureFactory> parsed, List<String> unsupported) { super(parsed, unsupported); } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/17f2d627/sshd-core/src/main/java/org/apache/sshd/common/signature/Signature.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/signature/Signature.java b/sshd-core/src/main/java/org/apache/sshd/common/signature/Signature.java index dbac318..e3b9ab4 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/signature/Signature.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/signature/Signature.java @@ -47,6 +47,7 @@ public interface Signature { /** * Update the computed signature with the given data + * * @param hash The hash data buffer * @throws Exception If failed to update * @see #update(byte[], int, int) @@ -55,9 +56,10 @@ public interface Signature { /** * Update the computed signature with the given data + * * @param hash The hash data buffer - * @param off Offset of hash data in buffer - * @param len Length of hash data + * @param off Offset of hash data in buffer + * @param len Length of hash data * @throws Exception If failed to update */ void update(byte[] hash, int off, int len) throws Exception; @@ -73,6 +75,7 @@ public interface Signature { /** * Compute the signature + * * @return The signature value * @throws Exception If failed to calculate the signature */ http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/17f2d627/sshd-core/src/main/java/org/apache/sshd/common/signature/SignatureDSA.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/signature/SignatureDSA.java b/sshd-core/src/main/java/org/apache/sshd/common/signature/SignatureDSA.java index 1a32274..cba24ac 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/signature/SignatureDSA.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/signature/SignatureDSA.java @@ -33,6 +33,7 @@ import org.apache.sshd.common.util.io.DERWriter; /** * DSA <code>Signature</code> + * * @author <a href="mailto:[email protected]">Apache MINA SSHD Project</a> * @see <A HREF="https://tools.ietf.org/html/rfc4253#section-6.6">RFC4253 section 6.6</A> */ @@ -42,19 +43,19 @@ public class SignatureDSA extends AbstractSignature { public static final int MAX_SIGNATURE_VALUE_LENGTH = DSA_SIGNATURE_LENGTH / 2; protected SignatureDSA(String algorithm) { - super(algorithm); + super(algorithm); } @Override public byte[] sign() throws Exception { byte[] sig = signature.sign(); - try(DERParser parser = new DERParser(sig)) { + try (DERParser parser = new DERParser(sig)) { int type = parser.read(); if (type != 0x30) { throw new IOException("Invalid signature format - not a DER SEQUENCE: 0x" + Integer.toHexString(type)); } - + // length of remaining encoding of the 2 integers int remainLen = parser.readLength(); /* @@ -83,8 +84,8 @@ public class SignatureDSA extends AbstractSignature { boolean maxExceeded = data.length > MAX_SIGNATURE_VALUE_LENGTH; int dstOffset = maxExceeded ? 0 : (MAX_SIGNATURE_VALUE_LENGTH - data.length); System.arraycopy(data, maxExceeded ? 1 : 0, - result, offset + dstOffset, - Math.min(MAX_SIGNATURE_VALUE_LENGTH, data.length)); + result, offset + dstOffset, + Math.min(MAX_SIGNATURE_VALUE_LENGTH, data.length)); } @Override @@ -94,7 +95,7 @@ public class SignatureDSA extends AbstractSignature { if (sigLen != DSA_SIGNATURE_LENGTH) { // probably some encoded data - Pair<String,byte[]> encoding = extractEncodedSignature(sig); + Pair<String, byte[]> encoding = extractEncodedSignature(sig); if (encoding != null) { String keyType = encoding.getFirst(); ValidateUtils.checkTrue(KeyPairProvider.SSH_DSS.equals(keyType), "Mismatched key type: %s", keyType); @@ -105,17 +106,17 @@ public class SignatureDSA extends AbstractSignature { if (sigLen != DSA_SIGNATURE_LENGTH) { throw new SignatureException("Bad signature length (" + sigLen + " instead of " + DSA_SIGNATURE_LENGTH + ")" - + " for " + BufferUtils.printHex(':', data)); + + " for " + BufferUtils.printHex(':', data)); } byte[] rEncoding; - try(DERWriter w = new DERWriter(MAX_SIGNATURE_VALUE_LENGTH + 4)) { // in case length > 0x7F + try (DERWriter w = new DERWriter(MAX_SIGNATURE_VALUE_LENGTH + 4)) { // in case length > 0x7F w.writeBigInteger(data, 0, MAX_SIGNATURE_VALUE_LENGTH); rEncoding = w.toByteArray(); } byte[] sEncoding; - try(DERWriter w = new DERWriter(MAX_SIGNATURE_VALUE_LENGTH + 4)) { // in case length > 0x7F + try (DERWriter w = new DERWriter(MAX_SIGNATURE_VALUE_LENGTH + 4)) { // in case length > 0x7F w.writeBigInteger(data, MAX_SIGNATURE_VALUE_LENGTH, MAX_SIGNATURE_VALUE_LENGTH); sEncoding = w.toByteArray(); } @@ -123,7 +124,7 @@ public class SignatureDSA extends AbstractSignature { int length = rEncoding.length + sEncoding.length; byte[] encoded; - try(DERWriter w = new DERWriter(1 + length + 4)) { // in case length > 0x7F + try (DERWriter w = new DERWriter(1 + length + 4)) { // in case length > 0x7F w.write(0x30); // SEQUENCE w.writeLength(length); w.write(rEncoding); http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/17f2d627/sshd-core/src/main/java/org/apache/sshd/common/signature/SignatureECDSA.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/signature/SignatureECDSA.java b/sshd-core/src/main/java/org/apache/sshd/common/signature/SignatureECDSA.java index 254069c..997e737 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/signature/SignatureECDSA.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/signature/SignatureECDSA.java @@ -30,7 +30,8 @@ import org.apache.sshd.common.util.io.DERParser; import org.apache.sshd.common.util.io.DERWriter; /** - * Signature algorithm for EC keys using ECDSA. + * Signature algorithm for EC keys using ECDSA. + * * @author <a href="mailto:[email protected]">Apache MINA SSHD Project</a> * @see <A HREF="http://tools.ietf.org/html/rfc3278#section-8.2">RFC3278 section 8.2</A> */ @@ -44,12 +45,12 @@ public class SignatureECDSA extends AbstractSignature { public byte[] sign() throws Exception { byte[] sig = signature.sign(); - try(DERParser parser = new DERParser(sig)) { + try (DERParser parser = new DERParser(sig)) { int type = parser.read(); if (type != 0x30) { throw new IOException("Invalid signature format - not a DER SEQUENCE: 0x" + Integer.toHexString(type)); } - + // length of remaining encoding of the 2 integers int remainLen = parser.readLength(); /* @@ -69,7 +70,7 @@ public class SignatureECDSA extends AbstractSignature { Buffer rsBuf = new ByteArrayBuffer(); rsBuf.putMPInt(r); rsBuf.putMPInt(s); - + return rsBuf.getCompactData(); } } @@ -77,7 +78,7 @@ public class SignatureECDSA extends AbstractSignature { @Override public boolean verify(byte[] sig) throws Exception { byte[] data = sig; - Pair<String,byte[]> encoding = extractEncodedSignature(data); + Pair<String, byte[]> encoding = extractEncodedSignature(data); if (encoding != null) { String keyType = encoding.getFirst(); ECCurves curve = ECCurves.fromKeyType(keyType); @@ -87,18 +88,20 @@ public class SignatureECDSA extends AbstractSignature { Buffer rsBuf = new ByteArrayBuffer(data); - byte[] rArray = rsBuf.getMPIntAsBytes(), rEncoding; - try(DERWriter w = new DERWriter(rArray.length + 4)) { // in case length > 0x7F + byte[] rArray = rsBuf.getMPIntAsBytes(); + byte[] rEncoding; + try (DERWriter w = new DERWriter(rArray.length + 4)) { // in case length > 0x7F w.writeBigInteger(rArray); rEncoding = w.toByteArray(); } - - byte[] sArray = rsBuf.getMPIntAsBytes(), sEncoding; - try(DERWriter w = new DERWriter(sArray.length + 4)) { // in case length > 0x7F + + byte[] sArray = rsBuf.getMPIntAsBytes(); + byte[] sEncoding; + try (DERWriter w = new DERWriter(sArray.length + 4)) { // in case length > 0x7F w.writeBigInteger(sArray); sEncoding = w.toByteArray(); } - + int remaining = rsBuf.available(); if (remaining != 0) { throw new IOException("Signature had padding - remaining=" + remaining); @@ -106,7 +109,7 @@ public class SignatureECDSA extends AbstractSignature { int length = rEncoding.length + sEncoding.length; byte[] encoded; - try(DERWriter w = new DERWriter(1 + length + 4)) { // in case length > 0x7F + try (DERWriter w = new DERWriter(1 + length + 4)) { // in case length > 0x7F w.write(0x30); // SEQUENCE w.writeLength(length); w.write(rEncoding); http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/17f2d627/sshd-core/src/main/java/org/apache/sshd/common/signature/SignatureFactory.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/signature/SignatureFactory.java b/sshd-core/src/main/java/org/apache/sshd/common/signature/SignatureFactory.java index e0880d4..dfd5536 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/signature/SignatureFactory.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/signature/SignatureFactory.java @@ -19,19 +19,12 @@ package org.apache.sshd.common.signature; -import org.apache.sshd.common.NamedFactory; -import org.apache.sshd.common.OptionalFeature; -import org.apache.sshd.common.util.Transformer; +import org.apache.sshd.common.BuiltinFactory; /** * @author <a href="mailto:[email protected]">Apache MINA SSHD Project</a> */ -public interface SignatureFactory extends NamedFactory<Signature>, OptionalFeature { - // required because of generics issues - Transformer<SignatureFactory,NamedFactory<Signature>> FAC2NAMED=new Transformer<SignatureFactory,NamedFactory<Signature>>() { - @Override - public NamedFactory<Signature> transform(SignatureFactory input) { - return input; - } - }; +// CHECKSTYLE:OFF +public interface SignatureFactory extends BuiltinFactory<Signature> { + } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/17f2d627/sshd-core/src/main/java/org/apache/sshd/common/signature/SignatureRSA.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/signature/SignatureRSA.java b/sshd-core/src/main/java/org/apache/sshd/common/signature/SignatureRSA.java index 6970420..6a5c99a 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/signature/SignatureRSA.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/signature/SignatureRSA.java @@ -40,7 +40,7 @@ public class SignatureRSA extends AbstractSignature { @Override public boolean verify(byte[] sig) throws Exception { byte[] data = sig; - Pair<String,byte[]> encoding = extractEncodedSignature(data); + Pair<String, byte[]> encoding = extractEncodedSignature(data); if (encoding != null) { String keyType = encoding.getFirst(); ValidateUtils.checkTrue(KeyPairProvider.SSH_RSA.equals(keyType), "Mismatched key type: %s", keyType); http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/17f2d627/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/SftpConstants.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/SftpConstants.java b/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/SftpConstants.java index 44abceb..7b4d538 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/SftpConstants.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/SftpConstants.java @@ -22,221 +22,222 @@ package org.apache.sshd.common.subsystem.sftp; * @author <a href="mailto:[email protected]">Apache MINA SSHD Project</a> */ public final class SftpConstants { - public static String SFTP_SUBSYSTEM_NAME = "sftp"; - - public static final int SSH_FXP_INIT = 1; - public static final int SSH_FXP_VERSION = 2; - public static final int SSH_FXP_OPEN = 3; - public static final int SSH_FXP_CLOSE = 4; - public static final int SSH_FXP_READ = 5; - public static final int SSH_FXP_WRITE = 6; - public static final int SSH_FXP_LSTAT = 7; - public static final int SSH_FXP_FSTAT = 8; - public static final int SSH_FXP_SETSTAT = 9; - public static final int SSH_FXP_FSETSTAT = 10; - public static final int SSH_FXP_OPENDIR = 11; - public static final int SSH_FXP_READDIR = 12; - public static final int SSH_FXP_REMOVE = 13; - public static final int SSH_FXP_MKDIR = 14; - public static final int SSH_FXP_RMDIR = 15; - public static final int SSH_FXP_REALPATH = 16; - public static final int SSH_FXP_STAT = 17; - public static final int SSH_FXP_RENAME = 18; - public static final int SSH_FXP_READLINK = 19; - public static final int SSH_FXP_SYMLINK = 20; // v3 -> v5 - public static final int SSH_FXP_LINK = 21; // v6 - public static final int SSH_FXP_BLOCK = 22; // v6 - public static final int SSH_FXP_UNBLOCK = 23; // v6 - public static final int SSH_FXP_STATUS = 101; - public static final int SSH_FXP_HANDLE = 102; - public static final int SSH_FXP_DATA = 103; - public static final int SSH_FXP_NAME = 104; - public static final int SSH_FXP_ATTRS = 105; - public static final int SSH_FXP_EXTENDED = 200; + public static final String SFTP_SUBSYSTEM_NAME = "sftp"; + + public static final int SSH_FXP_INIT = 1; + public static final int SSH_FXP_VERSION = 2; + public static final int SSH_FXP_OPEN = 3; + public static final int SSH_FXP_CLOSE = 4; + public static final int SSH_FXP_READ = 5; + public static final int SSH_FXP_WRITE = 6; + public static final int SSH_FXP_LSTAT = 7; + public static final int SSH_FXP_FSTAT = 8; + public static final int SSH_FXP_SETSTAT = 9; + public static final int SSH_FXP_FSETSTAT = 10; + public static final int SSH_FXP_OPENDIR = 11; + public static final int SSH_FXP_READDIR = 12; + public static final int SSH_FXP_REMOVE = 13; + public static final int SSH_FXP_MKDIR = 14; + public static final int SSH_FXP_RMDIR = 15; + public static final int SSH_FXP_REALPATH = 16; + public static final int SSH_FXP_STAT = 17; + public static final int SSH_FXP_RENAME = 18; + public static final int SSH_FXP_READLINK = 19; + public static final int SSH_FXP_SYMLINK = 20; // v3 -> v5 + public static final int SSH_FXP_LINK = 21; // v6 + public static final int SSH_FXP_BLOCK = 22; // v6 + public static final int SSH_FXP_UNBLOCK = 23; // v6 + public static final int SSH_FXP_STATUS = 101; + public static final int SSH_FXP_HANDLE = 102; + public static final int SSH_FXP_DATA = 103; + public static final int SSH_FXP_NAME = 104; + public static final int SSH_FXP_ATTRS = 105; + public static final int SSH_FXP_EXTENDED = 200; public static final int SSH_FXP_EXTENDED_REPLY = 201; - public static final int SSH_FX_OK = 0; - public static final int SSH_FX_EOF = 1; - public static final int SSH_FX_NO_SUCH_FILE = 2; - public static final int SSH_FX_PERMISSION_DENIED = 3; - public static final int SSH_FX_FAILURE = 4; - public static final int SSH_FX_BAD_MESSAGE = 5; - public static final int SSH_FX_NO_CONNECTION = 6; - public static final int SSH_FX_CONNECTION_LOST = 7; - public static final int SSH_FX_OP_UNSUPPORTED = 8; - public static final int SSH_FX_INVALID_HANDLE = 9; - public static final int SSH_FX_NO_SUCH_PATH = 10; - public static final int SSH_FX_FILE_ALREADY_EXISTS = 11; - public static final int SSH_FX_WRITE_PROTECT = 12; - public static final int SSH_FX_NO_MEDIA = 13; - public static final int SSH_FX_NO_SPACE_ON_FILESYSTEM = 14; - public static final int SSH_FX_QUOTA_EXCEEDED = 15; - public static final int SSH_FX_UNKNOWN_PRINCIPLE = 16; - public static final int SSH_FX_LOCK_CONFLICT = 17; - public static final int SSH_FX_DIR_NOT_EMPTY = 18; - public static final int SSH_FX_NOT_A_DIRECTORY = 19; - public static final int SSH_FX_INVALID_FILENAME = 20; - public static final int SSH_FX_LINK_LOOP = 21; - public static final int SSH_FX_CANNOT_DELETE = 22; - public static final int SSH_FX_INVALID_PARAMETER = 23; - public static final int SSH_FX_FILE_IS_A_DIRECTORY = 24; - public static final int SSH_FX_BYTE_RANGE_LOCK_CONFLICT = 25; - public static final int SSH_FX_BYTE_RANGE_LOCK_REFUSED = 26; - public static final int SSH_FX_DELETE_PENDING = 27; - public static final int SSH_FX_FILE_CORRUPT = 28; - public static final int SSH_FX_OWNER_INVALID = 29; - public static final int SSH_FX_GROUP_INVALID = 30; + public static final int SSH_FX_OK = 0; + public static final int SSH_FX_EOF = 1; + public static final int SSH_FX_NO_SUCH_FILE = 2; + public static final int SSH_FX_PERMISSION_DENIED = 3; + public static final int SSH_FX_FAILURE = 4; + public static final int SSH_FX_BAD_MESSAGE = 5; + public static final int SSH_FX_NO_CONNECTION = 6; + public static final int SSH_FX_CONNECTION_LOST = 7; + public static final int SSH_FX_OP_UNSUPPORTED = 8; + public static final int SSH_FX_INVALID_HANDLE = 9; + public static final int SSH_FX_NO_SUCH_PATH = 10; + public static final int SSH_FX_FILE_ALREADY_EXISTS = 11; + public static final int SSH_FX_WRITE_PROTECT = 12; + public static final int SSH_FX_NO_MEDIA = 13; + public static final int SSH_FX_NO_SPACE_ON_FILESYSTEM = 14; + public static final int SSH_FX_QUOTA_EXCEEDED = 15; + public static final int SSH_FX_UNKNOWN_PRINCIPLE = 16; + public static final int SSH_FX_LOCK_CONFLICT = 17; + public static final int SSH_FX_DIR_NOT_EMPTY = 18; + public static final int SSH_FX_NOT_A_DIRECTORY = 19; + public static final int SSH_FX_INVALID_FILENAME = 20; + public static final int SSH_FX_LINK_LOOP = 21; + public static final int SSH_FX_CANNOT_DELETE = 22; + public static final int SSH_FX_INVALID_PARAMETER = 23; + public static final int SSH_FX_FILE_IS_A_DIRECTORY = 24; + public static final int SSH_FX_BYTE_RANGE_LOCK_CONFLICT = 25; + public static final int SSH_FX_BYTE_RANGE_LOCK_REFUSED = 26; + public static final int SSH_FX_DELETE_PENDING = 27; + public static final int SSH_FX_FILE_CORRUPT = 28; + public static final int SSH_FX_OWNER_INVALID = 29; + public static final int SSH_FX_GROUP_INVALID = 30; public static final int SSH_FX_NO_MATCHING_BYTE_RANGE_LOCK = 31; - public static final int SSH_FILEXFER_ATTR_SIZE = 0x00000001; - public static final int SSH_FILEXFER_ATTR_UIDGID = 0x00000002; - public static final int SSH_FILEXFER_ATTR_PERMISSIONS = 0x00000004; - public static final int SSH_FILEXFER_ATTR_ACMODTIME = 0x00000008; // v3 naming convention - public static final int SSH_FILEXFER_ATTR_ACCESSTIME = 0x00000008; // v4 - public static final int SSH_FILEXFER_ATTR_CREATETIME = 0x00000010; // v4 - public static final int SSH_FILEXFER_ATTR_MODIFYTIME = 0x00000020; // v4 - public static final int SSH_FILEXFER_ATTR_ACL = 0x00000040; // v4 - public static final int SSH_FILEXFER_ATTR_OWNERGROUP = 0x00000080; // v4 - public static final int SSH_FILEXFER_ATTR_SUBSECOND_TIMES = 0x00000100; // v5 - public static final int SSH_FILEXFER_ATTR_BITS = 0x00000200; // v5 - public static final int SSH_FILEXFER_ATTR_ALLOCATION_SIZE = 0x00000400; // v6 - public static final int SSH_FILEXFER_ATTR_TEXT_HINT = 0x00000800; // v6 - public static final int SSH_FILEXFER_ATTR_MIME_TYPE = 0x00001000; // v6 - public static final int SSH_FILEXFER_ATTR_LINK_COUNT = 0x00002000; // v6 + public static final int SSH_FILEXFER_ATTR_SIZE = 0x00000001; + public static final int SSH_FILEXFER_ATTR_UIDGID = 0x00000002; + public static final int SSH_FILEXFER_ATTR_PERMISSIONS = 0x00000004; + public static final int SSH_FILEXFER_ATTR_ACMODTIME = 0x00000008; // v3 naming convention + public static final int SSH_FILEXFER_ATTR_ACCESSTIME = 0x00000008; // v4 + public static final int SSH_FILEXFER_ATTR_CREATETIME = 0x00000010; // v4 + public static final int SSH_FILEXFER_ATTR_MODIFYTIME = 0x00000020; // v4 + public static final int SSH_FILEXFER_ATTR_ACL = 0x00000040; // v4 + public static final int SSH_FILEXFER_ATTR_OWNERGROUP = 0x00000080; // v4 + public static final int SSH_FILEXFER_ATTR_SUBSECOND_TIMES = 0x00000100; // v5 + public static final int SSH_FILEXFER_ATTR_BITS = 0x00000200; // v5 + public static final int SSH_FILEXFER_ATTR_ALLOCATION_SIZE = 0x00000400; // v6 + public static final int SSH_FILEXFER_ATTR_TEXT_HINT = 0x00000800; // v6 + public static final int SSH_FILEXFER_ATTR_MIME_TYPE = 0x00001000; // v6 + public static final int SSH_FILEXFER_ATTR_LINK_COUNT = 0x00002000; // v6 public static final int SSH_FILEXFER_ATTR_UNTRANSLATED_NAME = 0x00004000; // v6 - public static final int SSH_FILEXFER_ATTR_CTIME = 0x00008000; // v6 - public static final int SSH_FILEXFER_ATTR_EXTENDED = 0x80000000; + public static final int SSH_FILEXFER_ATTR_CTIME = 0x00008000; // v6 + public static final int SSH_FILEXFER_ATTR_EXTENDED = 0x80000000; - public static final int SSH_FILEXFER_ATTR_ALL = 0x0000FFFF; // All attributes + public static final int SSH_FILEXFER_ATTR_ALL = 0x0000FFFF; // All attributes - public static final int SSH_FILEXFER_ATTR_FLAGS_READONLY = 0x00000001; - public static final int SSH_FILEXFER_ATTR_FLAGS_SYSTEM = 0x00000002; - public static final int SSH_FILEXFER_ATTR_FLAGS_HIDDEN = 0x00000004; + public static final int SSH_FILEXFER_ATTR_FLAGS_READONLY = 0x00000001; + public static final int SSH_FILEXFER_ATTR_FLAGS_SYSTEM = 0x00000002; + public static final int SSH_FILEXFER_ATTR_FLAGS_HIDDEN = 0x00000004; public static final int SSH_FILEXFER_ATTR_FLAGS_CASE_INSENSITIVE = 0x00000008; - public static final int SSH_FILEXFER_ATTR_FLAGS_ARCHIVE = 0x00000010; - public static final int SSH_FILEXFER_ATTR_FLAGS_ENCRYPTED = 0x00000020; - public static final int SSH_FILEXFER_ATTR_FLAGS_COMPRESSED = 0x00000040; - public static final int SSH_FILEXFER_ATTR_FLAGS_SPARSE = 0x00000080; - public static final int SSH_FILEXFER_ATTR_FLAGS_APPEND_ONLY = 0x00000100; - public static final int SSH_FILEXFER_ATTR_FLAGS_IMMUTABLE = 0x00000200; - public static final int SSH_FILEXFER_ATTR_FLAGS_SYNC = 0x00000400; - - public static final int SSH_FILEXFER_TYPE_REGULAR = 1; - public static final int SSH_FILEXFER_TYPE_DIRECTORY = 2; - public static final int SSH_FILEXFER_TYPE_SYMLINK = 3; - public static final int SSH_FILEXFER_TYPE_SPECIAL = 4; - public static final int SSH_FILEXFER_TYPE_UNKNOWN = 5; - public static final int SSH_FILEXFER_TYPE_SOCKET = 6; // v5 - public static final int SSH_FILEXFER_TYPE_CHAR_DEVICE = 7; // v5 + public static final int SSH_FILEXFER_ATTR_FLAGS_ARCHIVE = 0x00000010; + public static final int SSH_FILEXFER_ATTR_FLAGS_ENCRYPTED = 0x00000020; + public static final int SSH_FILEXFER_ATTR_FLAGS_COMPRESSED = 0x00000040; + public static final int SSH_FILEXFER_ATTR_FLAGS_SPARSE = 0x00000080; + public static final int SSH_FILEXFER_ATTR_FLAGS_APPEND_ONLY = 0x00000100; + public static final int SSH_FILEXFER_ATTR_FLAGS_IMMUTABLE = 0x00000200; + public static final int SSH_FILEXFER_ATTR_FLAGS_SYNC = 0x00000400; + + public static final int SSH_FILEXFER_TYPE_REGULAR = 1; + public static final int SSH_FILEXFER_TYPE_DIRECTORY = 2; + public static final int SSH_FILEXFER_TYPE_SYMLINK = 3; + public static final int SSH_FILEXFER_TYPE_SPECIAL = 4; + public static final int SSH_FILEXFER_TYPE_UNKNOWN = 5; + public static final int SSH_FILEXFER_TYPE_SOCKET = 6; // v5 + public static final int SSH_FILEXFER_TYPE_CHAR_DEVICE = 7; // v5 public static final int SSH_FILEXFER_TYPE_BLOCK_DEVICE = 8; // v5 - public static final int SSH_FILEXFER_TYPE_FIFO = 9; // v5 + public static final int SSH_FILEXFER_TYPE_FIFO = 9; // v5 - public static final int SSH_FXF_READ = 0x00000001; - public static final int SSH_FXF_WRITE = 0x00000002; + public static final int SSH_FXF_READ = 0x00000001; + public static final int SSH_FXF_WRITE = 0x00000002; public static final int SSH_FXF_APPEND = 0x00000004; - public static final int SSH_FXF_CREAT = 0x00000008; - public static final int SSH_FXF_TRUNC = 0x00000010; - public static final int SSH_FXF_EXCL = 0x00000020; - public static final int SSH_FXF_TEXT = 0x00000040; + public static final int SSH_FXF_CREAT = 0x00000008; + public static final int SSH_FXF_TRUNC = 0x00000010; + public static final int SSH_FXF_EXCL = 0x00000020; + public static final int SSH_FXF_TEXT = 0x00000040; public static final int SSH_FXF_ACCESS_DISPOSITION = 0x00000007; - public static final int SSH_FXF_CREATE_NEW = 0x00000000; - public static final int SSH_FXF_CREATE_TRUNCATE = 0x00000001; - public static final int SSH_FXF_OPEN_EXISTING = 0x00000002; - public static final int SSH_FXF_OPEN_OR_CREATE = 0x00000003; - public static final int SSH_FXF_TRUNCATE_EXISTING = 0x00000004; - public static final int SSH_FXF_APPEND_DATA = 0x00000008; + public static final int SSH_FXF_CREATE_NEW = 0x00000000; + public static final int SSH_FXF_CREATE_TRUNCATE = 0x00000001; + public static final int SSH_FXF_OPEN_EXISTING = 0x00000002; + public static final int SSH_FXF_OPEN_OR_CREATE = 0x00000003; + public static final int SSH_FXF_TRUNCATE_EXISTING = 0x00000004; + public static final int SSH_FXF_APPEND_DATA = 0x00000008; public static final int SSH_FXF_APPEND_DATA_ATOMIC = 0x00000010; - public static final int SSH_FXF_TEXT_MODE = 0x00000020; - public static final int SSH_FXF_READ_LOCK = 0x00000040; - public static final int SSH_FXF_WRITE_LOCK = 0x00000080; - public static final int SSH_FXF_DELETE_LOCK = 0x00000100; + public static final int SSH_FXF_TEXT_MODE = 0x00000020; + public static final int SSH_FXF_READ_LOCK = 0x00000040; + public static final int SSH_FXF_WRITE_LOCK = 0x00000080; + public static final int SSH_FXF_DELETE_LOCK = 0x00000100; public static final int SSH_FXP_RENAME_OVERWRITE = 0x00000001; - public static final int SSH_FXP_RENAME_ATOMIC = 0x00000002; - public static final int SSH_FXP_RENAME_NATIVE = 0x00000004; + public static final int SSH_FXP_RENAME_ATOMIC = 0x00000002; + public static final int SSH_FXP_RENAME_NATIVE = 0x00000004; - public static final int SSH_FXP_REALPATH_NO_CHECK = 0x00000001; - public static final int SSH_FXP_REALPATH_STAT_IF = 0x00000002; + public static final int SSH_FXP_REALPATH_NO_CHECK = 0x00000001; + public static final int SSH_FXP_REALPATH_STAT_IF = 0x00000002; public static final int SSH_FXP_REALPATH_STAT_ALWAYS = 0x00000003; - public static final int SSH_FXF_RENAME_OVERWRITE = 0x00000001; - public static final int SSH_FXF_RENAME_ATOMIC = 0x00000002; - public static final int SSH_FXF_RENAME_NATIVE = 0x00000004; - - public static final int ACE4_ACCESS_ALLOWED_ACE_TYPE = 0x00000000; - public static final int ACE4_ACCESS_DENIED_ACE_TYPE = 0x00000001; - public static final int ACE4_SYSTEM_AUDIT_ACE_TYPE = 0x00000002; - public static final int ACE4_SYSTEM_ALARM_ACE_TYPE = 0x00000003; - - public static final int ACE4_FILE_INHERIT_ACE = 0x00000001; - public static final int ACE4_DIRECTORY_INHERIT_ACE = 0x00000002; - public static final int ACE4_NO_PROPAGATE_INHERIT_ACE = 0x00000004; - public static final int ACE4_INHERIT_ONLY_ACE = 0x00000008; - public static final int ACE4_SUCCESSFUL_ACCESS_ACE_FLAG = 0x00000010; - public static final int ACE4_FAILED_ACCESS_ACE_FLAG = 0x00000020; - public static final int ACE4_IDENTIFIER_GROUP = 0x00000040; - - public static final int ACE4_READ_DATA = 0x00000001; - public static final int ACE4_LIST_DIRECTORY = 0x00000001; - public static final int ACE4_WRITE_DATA = 0x00000002; - public static final int ACE4_ADD_FILE = 0x00000002; - public static final int ACE4_APPEND_DATA = 0x00000004; - public static final int ACE4_ADD_SUBDIRECTORY = 0x00000004; - public static final int ACE4_READ_NAMED_ATTRS = 0x00000008; - public static final int ACE4_WRITE_NAMED_ATTRS = 0x00000010; - public static final int ACE4_EXECUTE = 0x00000020; - public static final int ACE4_DELETE_CHILD = 0x00000040; - public static final int ACE4_READ_ATTRIBUTES = 0x00000080; - public static final int ACE4_WRITE_ATTRIBUTES = 0x00000100; - public static final int ACE4_DELETE = 0x00010000; - public static final int ACE4_READ_ACL = 0x00020000; - public static final int ACE4_WRITE_ACL = 0x00040000; - public static final int ACE4_WRITE_OWNER = 0x00080000; - public static final int ACE4_SYNCHRONIZE = 0x00100000; - - public static final int S_IFMT = 0170000; // bitmask for the file type bitfields + public static final int SSH_FXF_RENAME_OVERWRITE = 0x00000001; + public static final int SSH_FXF_RENAME_ATOMIC = 0x00000002; + public static final int SSH_FXF_RENAME_NATIVE = 0x00000004; + + public static final int ACE4_ACCESS_ALLOWED_ACE_TYPE = 0x00000000; + public static final int ACE4_ACCESS_DENIED_ACE_TYPE = 0x00000001; + public static final int ACE4_SYSTEM_AUDIT_ACE_TYPE = 0x00000002; + public static final int ACE4_SYSTEM_ALARM_ACE_TYPE = 0x00000003; + + public static final int ACE4_FILE_INHERIT_ACE = 0x00000001; + public static final int ACE4_DIRECTORY_INHERIT_ACE = 0x00000002; + public static final int ACE4_NO_PROPAGATE_INHERIT_ACE = 0x00000004; + public static final int ACE4_INHERIT_ONLY_ACE = 0x00000008; + public static final int ACE4_SUCCESSFUL_ACCESS_ACE_FLAG = 0x00000010; + public static final int ACE4_FAILED_ACCESS_ACE_FLAG = 0x00000020; + public static final int ACE4_IDENTIFIER_GROUP = 0x00000040; + + public static final int ACE4_READ_DATA = 0x00000001; + public static final int ACE4_LIST_DIRECTORY = 0x00000001; + public static final int ACE4_WRITE_DATA = 0x00000002; + public static final int ACE4_ADD_FILE = 0x00000002; + public static final int ACE4_APPEND_DATA = 0x00000004; + public static final int ACE4_ADD_SUBDIRECTORY = 0x00000004; + public static final int ACE4_READ_NAMED_ATTRS = 0x00000008; + public static final int ACE4_WRITE_NAMED_ATTRS = 0x00000010; + public static final int ACE4_EXECUTE = 0x00000020; + public static final int ACE4_DELETE_CHILD = 0x00000040; + public static final int ACE4_READ_ATTRIBUTES = 0x00000080; + public static final int ACE4_WRITE_ATTRIBUTES = 0x00000100; + public static final int ACE4_DELETE = 0x00010000; + public static final int ACE4_READ_ACL = 0x00020000; + public static final int ACE4_WRITE_ACL = 0x00040000; + public static final int ACE4_WRITE_OWNER = 0x00080000; + public static final int ACE4_SYNCHRONIZE = 0x00100000; + + public static final int S_IFMT = 0170000; // bitmask for the file type bitfields public static final int S_IFSOCK = 0140000; // socket - public static final int S_IFLNK = 0120000; // symbolic link - public static final int S_IFREG = 0100000; // regular file - public static final int S_IFBLK = 0060000; // block device - public static final int S_IFDIR = 0040000; // directory - public static final int S_IFCHR = 0020000; // character device - public static final int S_IFIFO = 0010000; // fifo - public static final int S_ISUID = 0004000; // set UID bit - public static final int S_ISGID = 0002000; // set GID bit - public static final int S_ISVTX = 0001000; // sticky bit - public static final int S_IRUSR = 0000400; - public static final int S_IWUSR = 0000200; - public static final int S_IXUSR = 0000100; - public static final int S_IRGRP = 0000040; - public static final int S_IWGRP = 0000020; - public static final int S_IXGRP = 0000010; - public static final int S_IROTH = 0000004; - public static final int S_IWOTH = 0000002; - public static final int S_IXOTH = 0000001; - - public static int SFTP_V3 = 3; - public static int SFTP_V4 = 4; - public static int SFTP_V5 = 5; - public static int SFTP_V6 = 6; - + public static final int S_IFLNK = 0120000; // symbolic link + public static final int S_IFREG = 0100000; // regular file + public static final int S_IFBLK = 0060000; // block device + public static final int S_IFDIR = 0040000; // directory + public static final int S_IFCHR = 0020000; // character device + public static final int S_IFIFO = 0010000; // fifo + public static final int S_ISUID = 0004000; // set UID bit + public static final int S_ISGID = 0002000; // set GID bit + public static final int S_ISVTX = 0001000; // sticky bit + public static final int S_IRUSR = 0000400; + public static final int S_IWUSR = 0000200; + public static final int S_IXUSR = 0000100; + public static final int S_IRGRP = 0000040; + public static final int S_IWGRP = 0000020; + public static final int S_IXGRP = 0000010; + public static final int S_IROTH = 0000004; + public static final int S_IWOTH = 0000002; + public static final int S_IXOTH = 0000001; + + public static final int SFTP_V3 = 3; + public static final int SFTP_V4 = 4; + public static final int SFTP_V5 = 5; + public static final int SFTP_V6 = 6; + // (Some) names of known extensions public static final String EXT_VERSIONS = "versions"; public static final String EXT_NEWLINE = "newline"; - public static final String EXT_VENDORID = "vendor-id"; + public static final String EXT_VENDOR_ID = "vendor-id"; public static final String EXT_SUPPORTED = "supported"; public static final String EXT_SUPPORTED2 = "supported2"; - public static final String EXT_VERSELECT = "version-select"; - public static final String EXT_COPYFILE = "copy-file"; - public static final String EXT_MD5HASH = "md5-hash"; - public static final String EXT_MD5HASH_HANDLE = "md5-hash-handle"; - public static final int MD5_QUICK_HASH_SIZE = 2048; - public static final String EXT_CHKFILE_HANDLE = "check-file-handle"; - public static final String EXT_CHKFILE_NAME = "check-file-name"; - public static final int MIN_CHKFILE_BLOCKSIZE = 256; - public static final String EXT_CHKFILE_RESPONSE = "check-file"; - public static final String EXT_COPYDATA = "copy-data"; + public static final String EXT_TEXT_SEEK = "text-seek"; + public static final String EXT_VERSION_SELECT = "version-select"; + public static final String EXT_COPY_FILE = "copy-file"; + public static final String EXT_MD5_HASH = "md5-hash"; + public static final String EXT_MD5_HASH_HANDLE = "md5-hash-handle"; + public static final int MD5_QUICK_HASH_SIZE = 2048; + public static final String EXT_CHECK_FILE_HANDLE = "check-file-handle"; + public static final String EXT_CHECK_FILE_NAME = "check-file-name"; + public static final int MIN_CHKFILE_BLOCKSIZE = 256; + public static final String EXT_CHECK_FILE = "check-file"; + public static final String EXT_COPY_DATA = "copy-data"; public static final String EXT_SPACE_AVAILABLE = "space-available"; private SftpConstants() { http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/17f2d627/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/AbstractParser.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/AbstractParser.java b/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/AbstractParser.java index da94d10..39d2240 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/AbstractParser.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/AbstractParser.java @@ -41,9 +41,9 @@ public abstract class AbstractParser<T> implements ExtensionParser<T> { public T transform(byte[] input) { return parse(input); } - + @Override // TODO in JDK-8 make this a default method public T parse(byte[] input) { return parse(input, 0, GenericUtils.length(input)); - } + } } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/17f2d627/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/ExtensionParser.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/ExtensionParser.java b/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/ExtensionParser.java index d158554..fd2b130 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/ExtensionParser.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/ExtensionParser.java @@ -27,5 +27,6 @@ import org.apache.sshd.common.util.Transformer; */ public interface ExtensionParser<T> extends NamedResource, Transformer<byte[], T> { T parse(byte[] input); + T parse(byte[] input, int offset, int len); } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/17f2d627/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/NewlineParser.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/NewlineParser.java b/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/NewlineParser.java index d29e0ac..99658da 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/NewlineParser.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/NewlineParser.java @@ -33,11 +33,14 @@ public class NewlineParser extends AbstractParser<Newline> { /** * The "newline" extension information as per * <A HREF="http://tools.ietf.org/wg/secsh/draft-ietf-secsh-filexfer/draft-ietf-secsh-filexfer-09.txt">DRAFT 09 Section 4.3</A> + * * @author <a href="mailto:[email protected]">Apache MINA SSHD Project</a> */ public static class Newline { + // CHECKSTYLE:OFF public String newline; - + // CHECKSTYLE:ON + @Override public String toString() { if (GenericUtils.isEmpty(newline)) { @@ -47,13 +50,13 @@ public class NewlineParser extends AbstractParser<Newline> { } } } - + public static final NewlineParser INSTANCE = new NewlineParser(); public NewlineParser() { super(SftpConstants.EXT_NEWLINE); } - + @Override public Newline parse(byte[] input, int offset, int len) { return parse(new String(input, offset, len, StandardCharsets.UTF_8)); http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/17f2d627/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/ParserUtils.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/ParserUtils.java b/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/ParserUtils.java index e390f80..693d033 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/ParserUtils.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/ParserUtils.java @@ -60,15 +60,18 @@ public final class ParserUtils { FsyncExtensionParser.INSTANCE )); - private static final Map<String,ExtensionParser<?>> parsersMap = new TreeMap<String,ExtensionParser<?>>(String.CASE_INSENSITIVE_ORDER) { - private static final long serialVersionUID = 1L; // we're not serializing it - - { - for (ExtensionParser<?> p : BUILT_IN_PARSERS) { - put(p.getName(), p); - } - } - }; + private static final Map<String, ExtensionParser<?>> PARSERS_MAP; + + static { + PARSERS_MAP = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + for (ExtensionParser<?> p : BUILT_IN_PARSERS) { + PARSERS_MAP.put(p.getName(), p); + } + } + + private ParserUtils() { + throw new UnsupportedOperationException("No instance"); + } /** * @param parser The {@link ExtensionParser} to register @@ -77,9 +80,9 @@ public final class ParserUtils { */ public static ExtensionParser<?> registerParser(ExtensionParser<?> parser) { ValidateUtils.checkNotNull(parser, "No parser instance"); - - synchronized(parsersMap) { - return parsersMap.put(parser.getName(), parser); + + synchronized (PARSERS_MAP) { + return PARSERS_MAP.put(parser.getName(), parser); } } @@ -93,8 +96,8 @@ public final class ParserUtils { return null; } - synchronized(parsersMap) { - return parsersMap.remove(name); + synchronized (PARSERS_MAP) { + return PARSERS_MAP.remove(name); } } @@ -108,36 +111,36 @@ public final class ParserUtils { return null; } - synchronized(parsersMap) { - return parsersMap.get(name); + synchronized (PARSERS_MAP) { + return PARSERS_MAP.get(name); } } public static Set<String> getRegisteredParsersNames() { - synchronized(parsersMap) { - if (parsersMap.isEmpty()) { + synchronized (PARSERS_MAP) { + if (PARSERS_MAP.isEmpty()) { return Collections.emptySet(); } else { // return a copy in order to avoid concurrent modification issues - return GenericUtils.asSortedSet(String.CASE_INSENSITIVE_ORDER, parsersMap.keySet()); + return GenericUtils.asSortedSet(String.CASE_INSENSITIVE_ORDER, PARSERS_MAP.keySet()); } } } public static List<ExtensionParser<?>> getRegisteredParsers() { - synchronized(parsersMap) { - if (parsersMap.isEmpty()) { + synchronized (PARSERS_MAP) { + if (PARSERS_MAP.isEmpty()) { return Collections.emptyList(); } else { // return a copy in order to avoid concurrent modification issues - return new ArrayList<ExtensionParser<?>>(parsersMap.values()); + return new ArrayList<ExtensionParser<?>>(PARSERS_MAP.values()); } } } - public static Set<String> supportedExtensions(Map<String,?> parsed) { + public static Set<String> supportedExtensions(Map<String, ?> parsed) { if (GenericUtils.isEmpty(parsed)) { return Collections.emptySet(); } - + Supported sup = (Supported) parsed.get(SupportedParser.INSTANCE.getName()); Collection<String> extra = (sup == null) ? null : sup.extensionNames; Supported2 sup2 = (Supported2) parsed.get(Supported2Parser.INSTANCE.getName()); @@ -147,7 +150,7 @@ public final class ParserUtils { } else if (GenericUtils.isEmpty(extra2)) { return GenericUtils.asSortedSet(String.CASE_INSENSITIVE_ORDER, extra); } - + Set<String> result = new TreeSet<>(String.CASE_INSENSITIVE_ORDER); result.addAll(extra); result.addAll(extra2); @@ -163,13 +166,13 @@ public final class ParserUtils { * @see #getRegisteredParser(String) * @see ExtensionParser#transform(Object) */ - public static Map<String,Object> parse(Map<String,byte[]> extensions) { + public static Map<String, Object> parse(Map<String, byte[]> extensions) { if (GenericUtils.isEmpty(extensions)) { return Collections.emptyMap(); } - - Map<String,Object> data = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); - for (Map.Entry<String,byte[]> ee : extensions.entrySet()) { + + Map<String, Object> data = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + for (Map.Entry<String, byte[]> ee : extensions.entrySet()) { String name = ee.getKey(); Object result = parse(name, ee.getValue()); if (result == null) { @@ -177,11 +180,11 @@ public final class ParserUtils { } data.put(name, result); } - + return data; } - public static Object parse(String name, byte ... encoded) { + public static Object parse(String name, byte... encoded) { ExtensionParser<?> parser = getRegisteredParser(name); if (parser == null) { return null; @@ -189,8 +192,5 @@ public final class ParserUtils { return parser.transform(encoded); } } - - private ParserUtils() { - throw new UnsupportedOperationException("No instance"); - } + } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/17f2d627/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/SpaceAvailableExtensionInfo.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/SpaceAvailableExtensionInfo.java b/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/SpaceAvailableExtensionInfo.java index 003116c..a0b4791 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/SpaceAvailableExtensionInfo.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/SpaceAvailableExtensionInfo.java @@ -30,11 +30,13 @@ import org.apache.sshd.common.util.buffer.Buffer; * @see <A HREF="http://tools.ietf.org/wg/secsh/draft-ietf-secsh-filexfer/draft-ietf-secsh-filexfer-09.txt">DRAFT 09 section 9.2</A> */ public class SpaceAvailableExtensionInfo implements Cloneable { + // CHECKSTYLE:OFF public long bytesOnDevice; public long unusedBytesOnDevice; public long bytesAvailableToUser; public long unusedBytesAvailableToUser; public int bytesPerAllocationUnit; + // CHECKSTYLE:ON public SpaceAvailableExtensionInfo() { super(); @@ -46,21 +48,22 @@ public class SpaceAvailableExtensionInfo implements Cloneable { public SpaceAvailableExtensionInfo(FileStore store) throws IOException { bytesOnDevice = store.getTotalSpace(); - - long unallocated = store.getUnallocatedSpace(), usable = store.getUsableSpace(); + + long unallocated = store.getUnallocatedSpace(); + long usable = store.getUsableSpace(); unusedBytesOnDevice = Math.max(unallocated, usable); - + // the rest are intentionally left zero indicating "UNKNOWN" } @Override public int hashCode() { - return GenericUtils.hashCode(bytesOnDevice) - + GenericUtils.hashCode(unusedBytesOnDevice) - + GenericUtils.hashCode(bytesAvailableToUser) - + GenericUtils.hashCode(unusedBytesAvailableToUser) - + bytesPerAllocationUnit - ; + int result = GenericUtils.hashCode(bytesOnDevice); + result = 31 * result + GenericUtils.hashCode(unusedBytesOnDevice); + result = 31 * result + GenericUtils.hashCode(bytesAvailableToUser); + result = 31 * result + GenericUtils.hashCode(unusedBytesAvailableToUser); + result = 31 * result + bytesPerAllocationUnit; + return result; } @Override @@ -76,22 +79,18 @@ public class SpaceAvailableExtensionInfo implements Cloneable { } SpaceAvailableExtensionInfo other = (SpaceAvailableExtensionInfo) obj; - if ((this.bytesOnDevice == other.bytesOnDevice) - && (this.unusedBytesOnDevice == other.unusedBytesOnDevice) - && (this.bytesAvailableToUser == other.bytesAvailableToUser) - && (this.unusedBytesAvailableToUser == other.unusedBytesAvailableToUser) - && (this.bytesPerAllocationUnit == other.bytesPerAllocationUnit)) { - return true; - } else { - return false; // debug breakpoint - } + return this.bytesOnDevice == other.bytesOnDevice + && this.unusedBytesOnDevice == other.unusedBytesOnDevice + && this.bytesAvailableToUser == other.bytesAvailableToUser + && this.unusedBytesAvailableToUser == other.unusedBytesAvailableToUser + && this.bytesPerAllocationUnit == other.bytesPerAllocationUnit; } @Override public SpaceAvailableExtensionInfo clone() { try { return getClass().cast(super.clone()); - } catch(CloneNotSupportedException e) { + } catch (CloneNotSupportedException e) { throw new RuntimeException("Failed to close " + toString() + ": " + e.getMessage()); } } @@ -99,13 +98,12 @@ public class SpaceAvailableExtensionInfo implements Cloneable { @Override public String toString() { return "bytesOnDevice=" + bytesOnDevice - + ",unusedBytesOnDevice=" + unusedBytesOnDevice - + ",bytesAvailableToUser=" + bytesAvailableToUser - + ",unusedBytesAvailableToUser=" + unusedBytesAvailableToUser - + ",bytesPerAllocationUnit=" + bytesPerAllocationUnit - ; + + ",unusedBytesOnDevice=" + unusedBytesOnDevice + + ",bytesAvailableToUser=" + bytesAvailableToUser + + ",unusedBytesAvailableToUser=" + unusedBytesAvailableToUser + + ",bytesPerAllocationUnit=" + bytesPerAllocationUnit; } - + public static SpaceAvailableExtensionInfo decode(Buffer buffer) { SpaceAvailableExtensionInfo info = new SpaceAvailableExtensionInfo(); decode(buffer, info); @@ -119,7 +117,7 @@ public class SpaceAvailableExtensionInfo implements Cloneable { info.unusedBytesAvailableToUser = buffer.getLong(); info.bytesPerAllocationUnit = buffer.getInt(); } - + public static void encode(Buffer buffer, SpaceAvailableExtensionInfo info) { buffer.putLong(info.bytesOnDevice); buffer.putLong(info.unusedBytesOnDevice); http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/17f2d627/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/Supported2Parser.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/Supported2Parser.java b/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/Supported2Parser.java index f8e3fba..7014cf3 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/Supported2Parser.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/Supported2Parser.java @@ -27,8 +27,9 @@ import org.apache.sshd.common.util.buffer.Buffer; import org.apache.sshd.common.util.buffer.ByteArrayBuffer; /** - * Parses the "supported2" extension as defined in + * Parses the "supported2" extension as defined in * <A HREF="https://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#page-10">DRAFT 13 section 5.4</A> + * * @author <a href="mailto:[email protected]">Apache MINA SSHD Project</a> */ public class Supported2Parser extends AbstractParser<Supported2> { @@ -37,6 +38,7 @@ public class Supported2Parser extends AbstractParser<Supported2> { * @see <A HREF="https://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#page-10">DRAFT 13 section 5.4</A> */ public static class Supported2 { + // CHECKSTYLE:OFF public int supportedAttributeMask; public int supportedAttributeBits; public int supportedOpenFlags; @@ -44,26 +46,26 @@ public class Supported2Parser extends AbstractParser<Supported2> { public int maxReadSize; public short supportedOpenBlockVector; public short supportedBlock; -// uint32 attrib-extension-count + // uint32 attrib-extension-count public Collection<String> attribExtensionNames; -// uint32 extension-count + // uint32 extension-count public Collection<String> extensionNames; - + // CHECKSTYLE:ON + @Override public String toString() { return "attrsMask=0x" + Integer.toHexString(supportedAttributeMask) - + ",attrsBits=0x" + Integer.toHexString(supportedAttributeBits) - + ",openFlags=0x" + Integer.toHexString(supportedOpenFlags) - + ",accessMask=0x" + Integer.toHexString(supportedAccessMask) - + ",maxRead=" + maxReadSize - + ",openBlock=0x" + Integer.toHexString(supportedOpenBlockVector & 0xFFFF) - + ",block=" + Integer.toHexString(supportedBlock & 0xFFFF) - + ",attribs=" + attribExtensionNames - + ",exts=" + extensionNames - ; + + ",attrsBits=0x" + Integer.toHexString(supportedAttributeBits) + + ",openFlags=0x" + Integer.toHexString(supportedOpenFlags) + + ",accessMask=0x" + Integer.toHexString(supportedAccessMask) + + ",maxRead=" + maxReadSize + + ",openBlock=0x" + Integer.toHexString(supportedOpenBlockVector & 0xFFFF) + + ",block=" + Integer.toHexString(supportedBlock & 0xFFFF) + + ",attribs=" + attribExtensionNames + + ",exts=" + extensionNames; } } - + public static final Supported2Parser INSTANCE = new Supported2Parser(); public Supported2Parser() { @@ -74,7 +76,7 @@ public class Supported2Parser extends AbstractParser<Supported2> { public Supported2 parse(byte[] input, int offset, int len) { return parse(new ByteArrayBuffer(input, offset, len)); } - + public Supported2 parse(Buffer buffer) { Supported2 sup2 = new Supported2(); sup2.supportedAttributeMask = buffer.getInt(); http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/17f2d627/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/SupportedParser.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/SupportedParser.java b/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/SupportedParser.java index fc13c49..f9bb5e9 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/SupportedParser.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/SupportedParser.java @@ -29,6 +29,7 @@ import org.apache.sshd.common.util.buffer.ByteArrayBuffer; /** * Parses the "supported" extension as defined in * <A HREF="http://tools.ietf.org/wg/secsh/draft-ietf-secsh-filexfer/draft-ietf-secsh-filexfer-05.txt">DRAFT 05 - section 4.4</A> + * * @author <a href="mailto:[email protected]">Apache MINA SSHD Project</a> */ public class SupportedParser extends AbstractParser<Supported> { @@ -37,22 +38,23 @@ public class SupportedParser extends AbstractParser<Supported> { * @see <A HREF="http://tools.ietf.org/wg/secsh/draft-ietf-secsh-filexfer/draft-ietf-secsh-filexfer-05.txt">DRAFT 05 - section 4.4</A> */ public static class Supported { + // CHECKSTYLE:OFF public int supportedAttributeMask; public int supportedAttributeBits; public int supportedOpenFlags; public int supportedAccessMask; public int maxReadSize; public Collection<String> extensionNames; - + // CHECKSTYLE:ON + @Override public String toString() { return "attrsMask=0x" + Integer.toHexString(supportedAttributeMask) - + ",attrsBits=0x" + Integer.toHexString(supportedAttributeBits) - + ",openFlags=0x" + Integer.toHexString(supportedOpenFlags) - + ",accessMask=0x" + Integer.toHexString(supportedAccessMask) - + ",maxReadSize=" + maxReadSize - + ",extensions=" + extensionNames - ; + + ",attrsBits=0x" + Integer.toHexString(supportedAttributeBits) + + ",openFlags=0x" + Integer.toHexString(supportedOpenFlags) + + ",accessMask=0x" + Integer.toHexString(supportedAccessMask) + + ",maxReadSize=" + maxReadSize + + ",extensions=" + extensionNames; } } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/17f2d627/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/VendorIdParser.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/VendorIdParser.java b/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/VendorIdParser.java index d68d862..cf48e03 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/VendorIdParser.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/VendorIdParser.java @@ -30,14 +30,17 @@ import org.apache.sshd.common.util.buffer.ByteArrayBuffer; public class VendorIdParser extends AbstractParser<VendorId> { /** * The "vendor-id" information as per - * <A HREF="http://tools.ietf.org/wg/secsh/draft-ietf-secsh-filexfer/draft-ietf-secsh-filexfer-09.txt">DRAFT 09 - section 4.4</A> + * <A HREF="http://tools.ietf.org/wg/secsh/draft-ietf-secsh-filexfer/draft-ietf-secsh-filexfer-09.txt">DRAFT 09 - section 4.4</A> + * * @author <a href="mailto:[email protected]">Apache MINA SSHD Project</a> */ public static class VendorId { + // CHECKSTYLE:OFF public String vendorName; public String productName; public String productVersion; public long productBuildNumber; + // CHECKSTYLE:ON @Override public String toString() { @@ -48,7 +51,7 @@ public class VendorIdParser extends AbstractParser<VendorId> { public static final VendorIdParser INSTANCE = new VendorIdParser(); public VendorIdParser() { - super(SftpConstants.EXT_VENDORID); + super(SftpConstants.EXT_VENDOR_ID); } @Override http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/17f2d627/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/VersionsParser.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/VersionsParser.java b/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/VersionsParser.java index bb720ef..7dc0107 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/VersionsParser.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/VersionsParser.java @@ -35,25 +35,28 @@ public class VersionsParser extends AbstractParser<Versions> { /** * The "versions" extension data as per * <A HREF="http://tools.ietf.org/wg/secsh/draft-ietf-secsh-filexfer/draft-ietf-secsh-filexfer-09.txt">DRAFT 09 Section 4.6</A> + * * @author <a href="mailto:[email protected]">Apache MINA SSHD Project</a> */ public static class Versions { public static final char SEP = ','; + // CHECKSTYLE:OFF public Collection<String> versions; + // CHECKSTYLE:ON @Override public String toString() { return GenericUtils.join(versions, ','); } } - + public static final VersionsParser INSTANCE = new VersionsParser(); public VersionsParser() { super(SftpConstants.EXT_VERSIONS); } - + @Override public Versions parse(byte[] input, int offset, int len) { return parse(new String(input, offset, len, StandardCharsets.UTF_8)); @@ -63,8 +66,8 @@ public class VersionsParser extends AbstractParser<Versions> { String[] comps = GenericUtils.split(value, Versions.SEP); Versions v = new Versions(); v.versions = GenericUtils.isEmpty(comps) - ? Collections.<String>emptyList() - : Arrays.asList(comps); + ? Collections.<String>emptyList() + : Arrays.asList(comps); return v; } } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/17f2d627/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/openssh/AbstractOpenSSHExtensionParser.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/openssh/AbstractOpenSSHExtensionParser.java b/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/openssh/AbstractOpenSSHExtensionParser.java index d408e3b..182c5d4 100644 --- a/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/openssh/AbstractOpenSSHExtensionParser.java +++ b/sshd-core/src/main/java/org/apache/sshd/common/subsystem/sftp/extensions/openssh/AbstractOpenSSHExtensionParser.java @@ -25,11 +25,11 @@ import java.util.Objects; import org.apache.sshd.common.NamedResource; import org.apache.sshd.common.subsystem.sftp.extensions.AbstractParser; import org.apache.sshd.common.subsystem.sftp.extensions.openssh.AbstractOpenSSHExtensionParser.OpenSSHExtension; -import org.apache.sshd.common.util.GenericUtils; import org.apache.sshd.common.util.ValidateUtils; /** * Base class for various {@code [email protected]} extension data reports + * * @author <a href="mailto:[email protected]">Apache MINA SSHD Project</a> */ public abstract class AbstractOpenSSHExtensionParser extends AbstractParser<OpenSSHExtension> { @@ -75,21 +75,17 @@ public abstract class AbstractOpenSSHExtensionParser extends AbstractParser<Open if (getClass() != obj.getClass()) { return false; } - + OpenSSHExtension other = (OpenSSHExtension) obj; - if (Objects.equals(getName(), other.getName()) - && Objects.equals(getVersion(), other.getVersion())) { - return true; - } else { - return false; - } + return Objects.equals(getName(), other.getName()) + && Objects.equals(getVersion(), other.getVersion()); } @Override public OpenSSHExtension clone() { try { return getClass().cast(super.clone()); - } catch(CloneNotSupportedException e) { + } catch (CloneNotSupportedException e) { throw new RuntimeException("Unexpected clone exception " + toString() + ": " + e.getMessage()); } } @@ -99,7 +95,7 @@ public abstract class AbstractOpenSSHExtensionParser extends AbstractParser<Open return getName() + " " + getVersion(); } } - + protected AbstractOpenSSHExtensionParser(String name) { super(name); } @@ -108,7 +104,7 @@ public abstract class AbstractOpenSSHExtensionParser extends AbstractParser<Open public OpenSSHExtension parse(byte[] input, int offset, int len) { return parse(new String(input, offset, len, StandardCharsets.UTF_8)); } - + public OpenSSHExtension parse(String version) { return new OpenSSHExtension(getName(), version); }
