[prev in list] [next in list] [prev in thread] [next in thread]
List: mina-commits
Subject: [mina-sshd] branch master updated: [SSHD-1035] A few minor improvements in Property code + documenta
From: lgoldstein () apache ! org
Date: 2020-08-18 9:38:29
Message-ID: 159774350919.1240.16104485693697010657 () gitbox ! apache ! org
[Download RAW message or body]
This is an automated email from the ASF dual-hosted git repository.
lgoldstein pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mina-sshd.git
The following commit(s) were added to refs/heads/master by this push:
new 15f7224 [SSHD-1035] A few minor improvements in Property code + \
documentation updates 15f7224 is described below
commit 15f7224a2d413d7f3d56941c6165aef1bf607997
Author: Lyor Goldstein <lgoldstein@apache.org>
AuthorDate: Tue Aug 18 12:38:00 2020 +0300
[SSHD-1035] A few minor improvements in Property code + documentation updates
---
docs/internals.md | 4 +-
docs/sftp.md | 2 +-
.../main/java/org/apache/sshd/common/Property.java | 47 +++++++++++++++++-----
.../org/apache/sshd/core/CoreModuleProperties.java | 4 ++
.../org/apache/sshd/sftp/SftpModuleProperties.java | 3 ++
5 files changed, 46 insertions(+), 14 deletions(-)
diff --git a/docs/internals.md b/docs/internals.md
index cc6136b..50a7152 100644
--- a/docs/internals.md
+++ b/docs/internals.md
@@ -302,6 +302,6 @@ The idea is that one can register either a `ClientProxyConnector` \
or `ServerProx the 1st packet being sent/received (respectively) **before** it \
reaches the SSHD code. This gives the programmer the capability to write a front-end \
that routes outgoing/incoming packets:
-* `SshClient/ClientSesssion#setClientProxyConnector` - sets a proxy that intercepts \
the 1st packet before being sent to the server +* \
`SshClient/ClientSesssion#setClientProxyConnector` - sets a proxy that intercepts the \
1st packet before being relayed to the server
-* `SshServer/ServerSession#setServerProxyAcceptor` - sets a proxy that intercept the \
1st incoming packet before being processed by the server +* \
`SshServer/ServerSession#setServerProxyAcceptor` - sets a proxy that intercepts the \
1st incoming packet before being processed by the server
diff --git a/docs/sftp.md b/docs/sftp.md
index 7d1cf72..7bbfdb6 100644
--- a/docs/sftp.md
+++ b/docs/sftp.md
@@ -355,7 +355,7 @@ the (default) password-based one:
*/
KeyPair kp = ... obtain a registered key-pair...
session.addPublicKeyIdentity(kp);
- return sesssion.auth().verify(context.getMaxAuthTime());
+ sesssion.auth().verify(context.getMaxAuthTime());
}
});
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/Property.java \
b/sshd-common/src/main/java/org/apache/sshd/common/Property.java index \
a1d92c0..6c3d63d 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/Property.java
+++ b/sshd-common/src/main/java/org/apache/sshd/common/Property.java
@@ -20,7 +20,10 @@ package org.apache.sshd.common;
import java.nio.charset.Charset;
import java.time.Duration;
-import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EnumSet;
+import java.util.NoSuchElementException;
import java.util.Objects;
import java.util.Optional;
import java.util.function.Consumer;
@@ -173,7 +176,6 @@ public interface Property<T> {
}
class DurationProperty extends BaseProperty<Duration> {
-
public DurationProperty(String name) {
this(name, null);
}
@@ -216,7 +218,6 @@ public interface Property<T> {
}
class StringProperty extends BaseProperty<String> {
-
public StringProperty(String name) {
this(name, null);
}
@@ -232,7 +233,6 @@ public interface Property<T> {
}
class BooleanProperty extends BaseProperty<Boolean> {
-
public BooleanProperty(String name) {
this(name, null);
}
@@ -248,7 +248,6 @@ public interface Property<T> {
}
class LongProperty extends BaseProperty<Long> {
-
public LongProperty(String name) {
this(name, null);
}
@@ -264,7 +263,6 @@ public interface Property<T> {
}
class IntegerProperty extends BaseProperty<Integer> {
-
public IntegerProperty(String name) {
this(name, null);
}
@@ -280,7 +278,6 @@ public interface Property<T> {
}
class CharsetProperty extends BaseProperty<Charset> {
-
public CharsetProperty(String name) {
this(name, null);
}
@@ -296,7 +293,6 @@ public interface Property<T> {
}
class ObjectProperty extends BaseProperty<Object> {
-
public ObjectProperty(String name) {
this(name, null);
}
@@ -312,24 +308,27 @@ public interface Property<T> {
}
class EnumProperty<T extends Enum<T>> extends BaseProperty<T> {
+ protected final Collection<T> values;
+
public EnumProperty(String name, Class<T> type) {
this(name, type, null);
}
public EnumProperty(String name, Class<T> type, T def) {
super(name, type, def);
+ values = Collections.unmodifiableSet(EnumSet.allOf(type));
}
@Override
protected T fromStorage(Object value) {
Class<T> type = getType();
- return PropertyResolverUtils.toEnum(type, value, false, \
Arrays.asList(type.getEnumConstants())); + return \
PropertyResolverUtils.toEnum(type, value, false, values); }
}
class Validating<T> implements Property<T> {
- private final Property<T> delegate;
- private final Consumer<? super T> validator;
+ protected final Property<T> delegate;
+ protected final Consumer<? super T> validator;
public Validating(Property<T> delegate, Consumer<? super T> validator) {
this.delegate = delegate;
@@ -382,18 +381,37 @@ public interface Property<T> {
}
}
+ /**
+ * @return Property name
+ */
String getName();
+ /**
+ * @return Property type - <B>Note:</B> for primitive types the wrapper \
equivalent is returned + */
Class<T> getType();
+ /**
+ * @return The {@link Optional} pre-defined default value
+ */
Optional<T> getDefault();
default T getRequiredDefault() {
return getDefault().get();
}
+ /**
+ * @param resolver The {@link PropertyResolver} to query for the property \
value. + * @return The {@link Optional} result - if resolver contains a \
value then the resolver's value, otherwise + * the pre-defined \
{@link #getDefault() default} + */
Optional<T> get(PropertyResolver resolver);
+ /**
+ * @param resolver The {@link PropertyResolver} to query for the \
property value. + * @return The resolved value
+ * @throws NoSuchElementException if resolver contains no value and no {@link \
#getDefault()} defined + */
default T getRequired(PropertyResolver resolver) {
return get(resolver).get();
}
@@ -415,8 +433,15 @@ public interface Property<T> {
*/
T getOrCustomDefault(PropertyResolver resolver, T defaultValue);
+ /**
+ * @param resolver The {@link PropertyResolver} to update with the property \
value. + * @param value The value to set
+ */
void set(PropertyResolver resolver, T value);
+ /**
+ * @param resolver The {@link PropertyResolver} to remove the property from
+ */
default void remove(PropertyResolver resolver) {
PropertyResolverUtils.updateProperty(resolver, getName(), null);
}
diff --git a/sshd-core/src/main/java/org/apache/sshd/core/CoreModuleProperties.java \
b/sshd-core/src/main/java/org/apache/sshd/core/CoreModuleProperties.java index \
f51f1a1..0746249 100644
--- a/sshd-core/src/main/java/org/apache/sshd/core/CoreModuleProperties.java
+++ b/sshd-core/src/main/java/org/apache/sshd/core/CoreModuleProperties.java
@@ -87,6 +87,7 @@ public final class CoreModuleProperties {
*/
public static final Property<Integer> FORWARDER_BUFFER_SIZE
= Property.integer("channel-agent-fwd-buf-size", \
DEFAULT_FORWARDER_BUF_SIZE); +
/**
* Ordered comma separated list of authentications methods. Authentications \
methods accepted by the server will be
* tried in the given order. If not configured or {@code null}/empty, then the \
session's @@ -118,6 +119,7 @@ public final class CoreModuleProperties {
*/
public static final Property<Boolean> SEND_IMMEDIATE_IDENTIFICATION
= Property.bool("send-immediate-identification", true);
+
/**
* Whether to send {@code SSH_MSG_KEXINIT} immediately after sending the client \
identification string or wait until
* the severer's one has been received.
@@ -227,6 +229,7 @@ public final class CoreModuleProperties {
public static final Property<Integer> PROP_DHGEX_CLIENT_PRF_KEY
= Property.integer("dhgex-client-prf");
+
/**
* Key used to retrieve the value of the channel window size in the \
configuration properties map.
*/
@@ -258,6 +261,7 @@ public final class CoreModuleProperties {
public static final Property<Integer> NIO_WORKERS
= Property.validating(Property.integer("nio-workers", \
Runtime.getRuntime().availableProcessors() + 1),
w -> ValidateUtils.checkTrue(w > 0, "Number of NIO workers must \
be positive: %d", w)); +
/**
* Key used to retrieve the value of the timeout after which it will close the \
connection if the other side has not
* been authenticated - in milliseconds.
diff --git a/sshd-sftp/src/main/java/org/apache/sshd/sftp/SftpModuleProperties.java \
b/sshd-sftp/src/main/java/org/apache/sshd/sftp/SftpModuleProperties.java index \
a83c985..a719bdf 100644
--- a/sshd-sftp/src/main/java/org/apache/sshd/sftp/SftpModuleProperties.java
+++ b/sshd-sftp/src/main/java/org/apache/sshd/sftp/SftpModuleProperties.java
@@ -94,6 +94,7 @@ public final class SftpModuleProperties {
*/
public static final Property<Charset> NAME_DECODER_CHARSET
= Property.charset("sftp-fs-name-decoder-charset", \
StandardCharsets.UTF_8); +
/**
* Property used to avoid large buffers when
* {@link org.apache.sshd.sftp.client.impl.AbstractSftpClient#write(SftpClient.Handle, \
long, byte[], int, int)} is @@ -171,6 +172,7 @@ public final class \
SftpModuleProperties { public static final int MIN_FILE_HANDLE_SIZE = 4; // ~uint32
public static final int DEFAULT_FILE_HANDLE_SIZE = 16;
public static final int MAX_FILE_HANDLE_SIZE = 64; // ~sha512
+
/**
* Size in bytes of the opaque handle value
*
@@ -186,6 +188,7 @@ public final class SftpModuleProperties {
public static final int MIN_FILE_HANDLE_ROUNDS = 1;
public static final int DEFAULT_FILE_HANDLE_ROUNDS = MIN_FILE_HANDLE_SIZE;
public static final int MAX_FILE_HANDLE_ROUNDS = MAX_FILE_HANDLE_SIZE;
+
/**
* Max. rounds to attempt to create a unique file handle - if all handles \
already in use after these many rounds,
* then an exception is thrown
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic