public abstract class SessionHelper extends AbstractKexFactoryManager implements Session
AbstractSession
class smallerAbstractCloseable.State
SessionHeartbeatController.HeartbeatType
AttributeRepository.AttributeKey<T>
Modifier and Type | Field and Description |
---|---|
protected Instant |
authStart |
protected Instant |
idleStart |
protected Map<KexProposalOption,String> |
initialKexProposal
Stores the initial KEX proposal after it has been run through the hooks allowing client code to modify it; see
getKexProposal() . |
closeFuture, futureLock, state
log
DEFAULT_SSH_VERSION_PREFIX, FALLBACK_SSH_VERSION_PREFIX, MAX_VERSION_LINE_LENGTH
EMPTY
NONE
Modifier | Constructor and Description |
---|---|
protected |
SessionHelper(boolean serverSession,
FactoryManager factoryManager,
IoSession ioSession)
Create a new session.
|
Modifier and Type | Method and Description |
---|---|
Collection<AttributeRepository.AttributeKey<?>> |
attributeKeys() |
protected long |
calculateNextIgnorePacketCount(Random r,
long freq,
int variance) |
protected TimeoutIndicator |
checkAuthenticationTimeout(Instant now,
Duration authTimeout)
Checks if authentication timeout expired
|
protected TimeoutIndicator |
checkForTimeouts()
Checks whether the session has timed out (both authentication and idle timeouts are checked).
|
protected TimeoutIndicator |
checkIdleTimeout(Instant now,
Duration idleTimeout)
Checks if idle timeout expired
|
void |
clearAttributes()
Removes all currently stored user-defined attributes
|
<T> T |
computeAttributeIfAbsent(AttributeRepository.AttributeKey<T> key,
Function<? super AttributeRepository.AttributeKey<T>,? extends T> resolver)
If the specified key is not already associated with a value (or is mapped to
null ), attempts to compute
its value using the given mapping function and enters it into this map unless null . |
protected Map<KexProposalOption,String> |
createProposal(String hostKeyTypes)
Create our proposal for SSH negotiation
|
void |
disconnect(int reason,
String msg)
Send a disconnect packet with the given reason and message.
|
protected void |
doInvokeDebugMessageHandler(Buffer buffer)
Invoked by
handleDebug(Buffer) after validating that the buffer structure seems well-formed and also
resetting the idle timeout. |
protected void |
doInvokeIgnoreMessageHandler(Buffer buffer)
Invoked by
handleDebug(Buffer) after validating that the buffer structure seems well-formed and also
resetting the idle timeout. |
protected boolean |
doInvokeUnimplementedMessageHandler(int cmd,
Buffer buffer) |
protected List<String> |
doReadIdentification(Buffer buffer,
boolean server)
Read the remote identification from this buffer.
|
void |
exceptionCaught(Throwable t)
Handle any exceptions that occurred on this session.
|
<T> T |
getAttribute(AttributeRepository.AttributeKey<T> key)
Returns the value of the user-defined attribute.
|
int |
getAttributesCount() |
Duration |
getAuthTimeout() |
Instant |
getAuthTimeoutStart() |
List<SshdSocketAddress> |
getBoundLocalPortForwards(int port) |
SshdSocketAddress |
getBoundRemotePortForward(int port) |
ChannelStreamWriterResolver |
getChannelStreamWriterResolver() |
protected abstract ConnectionService |
getConnectionService() |
FactoryManager |
getFactoryManager() |
protected Forwarder |
getForwarder() |
Duration |
getIdleTimeout() |
Instant |
getIdleTimeoutStart() |
IoSession |
getIoSession() |
protected Map<KexProposalOption,String> |
getKexProposal()
Retrieves this side's initial proposal for KEX negotiation.
|
List<Map.Entry<SshdSocketAddress,SshdSocketAddress>> |
getLocalForwardsBindings() |
PropertyResolver |
getParentPropertyResolver() |
Map<String,Object> |
getProperties()
A map of properties that can be used to configure the SSH server or client.
|
List<Map.Entry<Integer,SshdSocketAddress>> |
getRemoteForwardsBindings() |
ReservedSessionMessagesHandler |
getReservedSessionMessagesHandler() |
SessionDisconnectHandler |
getSessionDisconnectHandler() |
List<SshdSocketAddress> |
getStartedLocalPortForwards() |
NavigableSet<Integer> |
getStartedRemotePortForwards() |
TimeoutIndicator |
getTimeoutStatus()
Check if timeout has occurred.
|
UnknownChannelReferenceHandler |
getUnknownChannelReferenceHandler() |
String |
getUsername() |
protected void |
handleDebug(Buffer buffer) |
protected void |
handleDisconnect(Buffer buffer) |
protected void |
handleDisconnect(int code,
String msg,
String lang,
Buffer buffer) |
protected void |
handleIgnore(Buffer buffer) |
protected void |
handleUnimplemented(Buffer buffer) |
protected void |
invokeSessionSignaller(Invoker<SessionListener,Void> invoker) |
boolean |
isAuthenticated() |
boolean |
isLocalPortForwardingStartedForPort(int port)
Test if local port forwarding is started
|
boolean |
isRemotePortForwardingStartedForPort(int port)
Test if remote port forwarding is started
|
boolean |
isServerSession()
Quick indication if this is a server or client session (instead of having to ask
instanceof ). |
protected Map<KexProposalOption,String> |
mergeProposals(Map<KexProposalOption,String> current,
Map<KexProposalOption,String> proposal) |
protected Buffer |
preProcessEncodeBuffer(int cmd,
Buffer buffer)
Invoked by the session before encoding the buffer in order to make sure that it is at least of size
SSH_PACKET_HEADER_LEN . |
<T> T |
removeAttribute(AttributeRepository.AttributeKey<T> key)
Removes the user-defined attribute
|
Instant |
resetAuthTimeout()
Re-start the authentication timeout timer
|
Instant |
resetIdleTimeout()
Re-start idle timeout timer
|
protected byte[] |
resizeKey(byte[] e,
int kdfSize,
Digest hash,
byte[] k,
byte[] h)
Method used while putting new keys into use that will resize the key used to initialize the cipher to the needed
length.
|
protected String |
resolveAvailableSignaturesProposal()
Computes the list of available host key signature algorithms supported.
|
protected abstract String |
resolveAvailableSignaturesProposal(FactoryManager manager)
Computes the list of available host key signature algorithms supported.
|
ChannelStreamWriterResolver |
resolveChannelStreamWriterResolver() |
protected String |
resolveIdentificationString(String configPropName)
Resolves the identification to send to the peer session by consulting the associated
FactoryManager . |
protected SocketAddress |
resolvePeerAddress(SocketAddress knownAddress) |
protected ReservedSessionMessagesHandler |
resolveReservedSessionMessagesHandler() |
protected String |
resolveSessionKexProposal(String hostKeyTypes) |
UnknownChannelReferenceHandler |
resolveUnknownChannelReferenceHandler()
Check if current manager has a specific handler set for it - if not, try and resolve one from the
"parent" container (if any)
|
IoWriteFuture |
sendDebugMessage(boolean display,
Object msg,
String lang)
Sends an
SSH_MSG_DEBUG to the peer session |
protected IoWriteFuture |
sendIdentification(String version,
List<String> extraLines)
Send our identification.
|
IoWriteFuture |
sendIgnoreMessage(byte... data)
Sends an
SSH_MSG_IGNORE to the peer session |
protected IoWriteFuture |
sendNotImplemented(long seqNoValue)
Sends a
SSH_MSG_UNIMPLEMENTED message |
<T> T |
setAttribute(AttributeRepository.AttributeKey<T> key,
T value)
Sets a user-defined attribute.
|
void |
setAuthenticated() |
void |
setChannelStreamWriterResolver(ChannelStreamWriterResolver resolver) |
void |
setReservedSessionMessagesHandler(ReservedSessionMessagesHandler handler) |
void |
setSessionDisconnectHandler(SessionDisconnectHandler sessionDisconnectHandler) |
void |
setUnknownChannelReferenceHandler(UnknownChannelReferenceHandler unknownChannelReferenceHandler) |
void |
setUsername(String username) |
protected void |
signalDisconnect(int code,
String msg,
String lang,
boolean initiator) |
protected void |
signalDisconnect(SessionListener listener,
int code,
String msg,
String lang,
boolean initiator) |
protected void |
signalExceptionCaught(SessionListener listener,
Throwable t) |
protected void |
signalExceptionCaught(Throwable t) |
protected void |
signalNegotiationEnd(Map<KexProposalOption,String> c2sOptions,
Map<KexProposalOption,String> s2cOptions,
Map<KexProposalOption,String> negotiatedGuess,
Throwable reason) |
protected void |
signalNegotiationEnd(SessionListener listener,
Map<KexProposalOption,String> c2sOptions,
Map<KexProposalOption,String> s2cOptions,
Map<KexProposalOption,String> negotiatedGuess,
Throwable reason) |
protected void |
signalNegotiationOptionsCreated(Map<KexProposalOption,String> proposal) |
protected void |
signalNegotiationOptionsCreated(SessionListener listener,
Map<KexProposalOption,String> proposal) |
protected void |
signalNegotiationStart(Map<KexProposalOption,String> c2sOptions,
Map<KexProposalOption,String> s2cOptions) |
protected void |
signalNegotiationStart(SessionListener listener,
Map<KexProposalOption,String> c2sOptions,
Map<KexProposalOption,String> s2cOptions) |
protected void |
signalPeerIdentificationReceived(SessionListener listener,
String version,
List<String> extraLines) |
protected void |
signalPeerIdentificationReceived(String version,
List<String> extraLines) |
protected void |
signalReadPeerIdentificationLine(SessionListener listener,
String version,
List<String> extraLines) |
protected void |
signalReadPeerIdentificationLine(String line,
List<String> extraLines) |
protected void |
signalSendIdentification(SessionListener listener,
String version,
List<String> extraLines) |
protected void |
signalSendIdentification(String version,
List<String> extraLines) |
protected void |
signalSessionClosed() |
protected void |
signalSessionClosed(SessionListener listener) |
protected void |
signalSessionCreated(IoSession ioSession) |
protected void |
signalSessionCreated(SessionListener listener) |
protected void |
signalSessionEstablished(IoSession ioSession) |
protected void |
signalSessionEstablished(SessionListener listener) |
protected void |
signalSessionEvent(SessionListener.Event event)
Sends a session event to all currently registered session listeners
|
protected void |
signalSessionEvent(SessionListener listener,
SessionListener.Event event) |
String |
toString() |
getCipherFactories, getCompressionFactories, getDelegate, getKexExtensionHandler, getKeyExchangeFactories, getMacFactories, getSignatureFactories, resolveEffectiveFactories, resolveEffectiveProvider, setCipherFactories, setCompressionFactories, setKexExtensionHandler, setKeyExchangeFactories, setMacFactories, setSignatureFactories
doCloseGracefully, doCloseImmediately, getInnerCloseable
addCloseFutureListener, builder, close, getFutureLock, isClosed, isClosing, preClose, removeCloseFutureListener
debug, debug, debug, debug, debug, error, error, error, error, error, getSimplifiedLogger, info, info, warn, warn, warn, warn, warn, warn, warn, warn
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
createBuffer, createBuffer, getKex, getLocalAddress, getRemoteAddress, getService, prepareBuffer, reExchangeKeys, request, request, request, request, resolveAttribute, resolveAttribute, startService, writePacket, writePacket, writePacket, writePacket
getCipherInformation, getClientKexProposals, getClientVersion, getCompressionInformation, getKexNegotiationResult, getKexState, getMacInformation, getNegotiatedKexParameter, getServerKexProposals, getServerVersion, getSessionId, isDataIntegrityTransport, isSecureSessionTransport, isValidSessionPayloadSize, isValidVersionPrefix, validateSessionPayloadSize
disableSessionHeartbeat, getSessionHeartbeatInterval, getSessionHeartbeatType, setSessionHeartbeat, setSessionHeartbeat
getBoolean, getBooleanProperty, getCharset, getInteger, getIntProperty, getLong, getLongProperty, getObject, getString, getStringProperty, isEmpty, isEmpty
ofAttributesMap, ofKeyValuePair
addCloseFutureListener, close, close, close, getMaxCloseWaitTime, isClosed, isClosing, isOpen, removeCloseFutureListener
getCipherFactories, getCipherFactoriesNameList, getCipherFactoriesNames, getCompressionFactories, getCompressionFactoriesNameList, getCompressionFactoriesNames, getKeyExchangeFactories, getMacFactories, getMacFactoriesNameList, getMacFactoriesNames, setCipherFactories, setCipherFactoriesNameList, setCipherFactoriesNames, setCipherFactoriesNames, setCompressionFactories, setCompressionFactoriesNameList, setCompressionFactoriesNames, setCompressionFactoriesNames, setKeyExchangeFactories, setMacFactories, setMacFactoriesNameList, setMacFactoriesNames, setMacFactoriesNames
getSignatureFactories, resolveSignatureFactories, setSignatureFactories, setSignatureFactoriesNameList, setSignatureFactoriesNames, setSignatureFactoriesNames
getSignatureFactories, getSignatureFactoriesNameList, getSignatureFactoriesNames
getKexExtensionHandler, setKexExtensionHandler
addSessionListener, getSessionListenerProxy, removeSessionListener
addChannelListener, getChannelListenerProxy, removeChannelListener
resolveChannelStreamWriter
addPortForwardingEventListener, getPortForwardingEventListenerProxy, removePortForwardingEventListener
protected Instant authStart
protected Instant idleStart
protected Map<KexProposalOption,String> initialKexProposal
getKexProposal()
. The same proposal is then used for the initial KEX and for any re-KEX.protected SessionHelper(boolean serverSession, FactoryManager factoryManager, IoSession ioSession)
serverSession
- true
if this is a server session, false
if client onefactoryManager
- the factory managerioSession
- the underlying I/O sessionpublic IoSession getIoSession()
getIoSession
in interface Session
IoSession
associated to this sessionpublic boolean isServerSession()
SessionContext
instanceof
).isServerSession
in interface SessionContext
true
if this is a server sessionpublic FactoryManager getFactoryManager()
getFactoryManager
in interface FactoryManagerHolder
FactoryManager
public PropertyResolver getParentPropertyResolver()
getParentPropertyResolver
in interface PropertyResolver
null
if no parentpublic Map<String,Object> getProperties()
PropertyResolver
A map of properties that can be used to configure the SSH server or client. This map will never be changed by either the server or client and is not supposed to be changed at runtime (changes are not bound to have any effect on a running client or server), though it may affect the creation of sessions later as these values are usually not cached.
Note: the type of the mapped property should match the expected configuration value type -
Long, Integer, Boolean,
String
, etc.... If it doesn't, the toString()
result of the mapped value is used to convert it to the
required type. E.g., if the mapped value is the string "1234" and the expected value is a
long
then it will be parsed into one. Also, if the mapped value is an Integer
but a long
is expected, then it will be converted into one.
getProperties
in interface PropertyResolver
Map
containing configuration values, never null
. Note: may be
immutable.public int getAttributesCount()
getAttributesCount
in interface AttributeRepository
public <T> T getAttribute(AttributeRepository.AttributeKey<T> key)
AttributeRepository
getAttribute
in interface AttributeRepository
T
- The generic attribute typekey
- The key of the attribute; must not be null
.null
if there is no value associated with the specified keypublic Collection<AttributeRepository.AttributeKey<?>> attributeKeys()
attributeKeys
in interface AttributeRepository
Collection
snapshot of all the currently registered attributes in the repositorypublic <T> T computeAttributeIfAbsent(AttributeRepository.AttributeKey<T> key, Function<? super AttributeRepository.AttributeKey<T>,? extends T> resolver)
AttributeStore
null
), attempts to compute
its value using the given mapping function and enters it into this map unless null
.computeAttributeIfAbsent
in interface AttributeStore
T
- The generic attribute typekey
- The key of the attribute; must not be null
.resolver
- The (never null
) mapping function to use if value not already mapped. If returns
null
then value is not mapped to the provided key.null
if value not mapped and resolver did not return a
non-null
value for itpublic <T> T setAttribute(AttributeRepository.AttributeKey<T> key, T value)
AttributeStore
setAttribute
in interface AttributeStore
T
- The generic attribute typekey
- The key of the attribute; must not be null
.value
- The value of the attribute; must not be null
.null
if it is new.public <T> T removeAttribute(AttributeRepository.AttributeKey<T> key)
AttributeStore
removeAttribute
in interface AttributeStore
T
- The generic attribute typekey
- The key of the attribute; must not be null
.null
if no previous valuepublic void clearAttributes()
AttributeStore
clearAttributes
in interface AttributeStore
public String getUsername()
getUsername
in interface UsernameHolder
null
/empty if holder not yet initializedpublic void setUsername(String username)
setUsername
in interface MutableUserHolder
public boolean isAuthenticated()
isAuthenticated
in interface SessionContext
true
if session has successfully completed the authentication phasepublic void setAuthenticated() throws IOException
setAuthenticated
in interface Session
IOException
protected TimeoutIndicator checkForTimeouts() throws IOException
IOException
- If failed to checkcheckAuthenticationTimeout(Instant, Duration)
,
checkIdleTimeout(Instant, Duration)
public Instant getAuthTimeoutStart()
getAuthTimeoutStart
in interface Session
public Instant resetAuthTimeout()
Session
resetAuthTimeout
in interface Session
Session.getAuthTimeoutStart()
protected TimeoutIndicator checkAuthenticationTimeout(Instant now, Duration authTimeout)
now
- The current time in millisauthTimeout
- The configured timeout - if non-positive then no timeoutTimeoutIndicator
specifying the timeout status and disconnect reason message if
timeout expired, null
or NoTimeout
if no timeout occurredgetAuthTimeout()
public Instant getIdleTimeoutStart()
getIdleTimeoutStart
in interface Session
protected TimeoutIndicator checkIdleTimeout(Instant now, Duration idleTimeout)
now
- The current time in millisidleTimeout
- The configured timeout - if non-positive then no timeoutTimeoutIndicator
specifying the timeout status and disconnect reason message if
timeout expired, null
or NoTimeout
if no timeout occurredgetIdleTimeout()
public Instant resetIdleTimeout()
Session
resetIdleTimeout
in interface Session
Session.getIdleTimeoutStart()
public TimeoutIndicator getTimeoutStatus()
Session
getTimeoutStatus
in interface Session
null
public ReservedSessionMessagesHandler getReservedSessionMessagesHandler()
getReservedSessionMessagesHandler
in interface ReservedSessionMessagesManager
ReservedSessionMessagesHandler
- may be null
public void setReservedSessionMessagesHandler(ReservedSessionMessagesHandler handler)
setReservedSessionMessagesHandler
in interface ReservedSessionMessagesManager
handler
- The ReservedSessionMessagesHandler
to use - may be null
public SessionDisconnectHandler getSessionDisconnectHandler()
getSessionDisconnectHandler
in interface SessionDisconnectHandlerManager
public void setSessionDisconnectHandler(SessionDisconnectHandler sessionDisconnectHandler)
setSessionDisconnectHandler
in interface SessionDisconnectHandlerManager
protected void doInvokeIgnoreMessageHandler(Buffer buffer) throws Exception
handleDebug(Buffer)
after validating that the buffer structure seems well-formed and also
resetting the idle timeout. By default, retrieves the ReservedSessionMessagesHandler
and invokes its
handleIgnoreMessage
method.protected IoWriteFuture sendNotImplemented(long seqNoValue) throws IOException
SSH_MSG_UNIMPLEMENTED
messageseqNoValue
- The referenced sequence numberIoWriteFuture
that can be used to wait for packet write completionIOException
- if an error occurred sending the packetprotected void handleUnimplemented(Buffer buffer) throws Exception
Exception
protected boolean doInvokeUnimplementedMessageHandler(int cmd, Buffer buffer) throws Exception
cmd
- The unimplemented commandbuffer
- The input Buffer
handleUnimplementedMessage
Exception
- if failed to handle the messagepublic IoWriteFuture sendDebugMessage(boolean display, Object msg, String lang) throws IOException
Session
SSH_MSG_DEBUG
to the peer sessionsendDebugMessage
in interface Session
display
- true
if OK to display the message at the peer as-ismsg
- The message object whose toString()
value to be used - if null
then the
"null" string is sentlang
- The language - null
/empty if some pre-agreed default is usedIoWriteFuture
that can be used to check when the packet has actually been sentIOException
- if an error occurred when encoding or sending the packetprotected void doInvokeDebugMessageHandler(Buffer buffer) throws Exception
handleDebug(Buffer)
after validating that the buffer structure seems well-formed and also
resetting the idle timeout. By default, retrieves the ReservedSessionMessagesHandler
and invokes its
handleDebugMessage
method.protected ReservedSessionMessagesHandler resolveReservedSessionMessagesHandler()
public UnknownChannelReferenceHandler getUnknownChannelReferenceHandler()
getUnknownChannelReferenceHandler
in interface UnknownChannelReferenceHandlerManager
UnknownChannelReferenceHandlerManager
to use - if null
then any reference to unknown
channel causes an SshChannelNotFoundException
public void setUnknownChannelReferenceHandler(UnknownChannelReferenceHandler unknownChannelReferenceHandler)
setUnknownChannelReferenceHandler
in interface UnknownChannelReferenceHandlerManager
unknownChannelReferenceHandler
- The UnknownChannelReferenceHandlerManager
to use - if null
then any reference to
unknown channel causes an SshChannelNotFoundException
public UnknownChannelReferenceHandler resolveUnknownChannelReferenceHandler()
UnknownChannelReferenceHandlerManager
resolveUnknownChannelReferenceHandler
in interface UnknownChannelReferenceHandlerManager
public ChannelStreamWriterResolver getChannelStreamWriterResolver()
getChannelStreamWriterResolver
in interface ChannelStreamWriterResolverManager
public void setChannelStreamWriterResolver(ChannelStreamWriterResolver resolver)
setChannelStreamWriterResolver
in interface ChannelStreamWriterResolverManager
public ChannelStreamWriterResolver resolveChannelStreamWriterResolver()
resolveChannelStreamWriterResolver
in interface ChannelStreamWriterResolverManager
public IoWriteFuture sendIgnoreMessage(byte... data) throws IOException
Session
SSH_MSG_IGNORE
to the peer sessionsendIgnoreMessage
in interface Session
data
- The message dataIoWriteFuture
that can be used to check when the packet has actually been sentIOException
- if an error occurred when encoding or sending the packetprotected void signalSessionEstablished(IoSession ioSession) throws Exception
Exception
protected void signalSessionEstablished(SessionListener listener)
protected void signalSessionCreated(IoSession ioSession) throws Exception
Exception
protected void signalSessionCreated(SessionListener listener)
protected void signalSendIdentification(String version, List<String> extraLines) throws Exception
Exception
protected void signalSendIdentification(SessionListener listener, String version, List<String> extraLines)
protected void signalReadPeerIdentificationLine(String line, List<String> extraLines) throws Exception
Exception
protected void signalReadPeerIdentificationLine(SessionListener listener, String version, List<String> extraLines)
protected void signalPeerIdentificationReceived(String version, List<String> extraLines) throws Exception
Exception
protected void signalPeerIdentificationReceived(SessionListener listener, String version, List<String> extraLines)
protected void signalSessionEvent(SessionListener.Event event) throws Exception
event
- The event to sendException
- If any of the registered listeners threw an exception.protected void signalSessionEvent(SessionListener listener, SessionListener.Event event) throws IOException
IOException
protected void invokeSessionSignaller(Invoker<SessionListener,Void> invoker) throws Throwable
Throwable
protected byte[] resizeKey(byte[] e, int kdfSize, Digest hash, byte[] k, byte[] h) throws Exception
e
- the key to resizekdfSize
- the cipher key-derivation-factor (in bytes)hash
- the hash algorithmk
- the key exchange k parameterh
- the key exchange h parameterException
- if a problem occur while resizing the keyprotected SocketAddress resolvePeerAddress(SocketAddress knownAddress)
knownAddress
- Any externally set peer address - e.g., due to some proxy mechanism meta-datanull
otherwise, the IoSession
peer addressprotected long calculateNextIgnorePacketCount(Random r, long freq, int variance)
protected String resolveIdentificationString(String configPropName)
FactoryManager
. If a
value is set, then it is appended to the standard SessionContext.DEFAULT_SSH_VERSION_PREFIX
.
Otherwise a default value is returned consisting of the prefix and the core artifact name + version in
uppercase - e.g.,' "SSH-2.0-APACHE-SSHD-1.2.3.4"configPropName
- The property used to query the factory managerprotected IoWriteFuture sendIdentification(String version, List<String> extraLines) throws Exception
version
- our identification to sendextraLines
- Extra lines to send - used only by server sessionsIoWriteFuture
that can be used to wait for notification that identification has been
sendException
- If failed to send the packetprotected List<String> doReadIdentification(Buffer buffer, boolean server) throws Exception
null
value will be returned. Else the identification string will be returned and the data
read will be consumed from the buffer.buffer
- the buffer containing the identification stringserver
- true
if it is called by the server session, false
if by the client sessionList
of all received remote identification lines until the version line was read or
null
if more data is needed. The identification line is the last one in the listException
- if malformed identification foundprotected String resolveSessionKexProposal(String hostKeyTypes) throws IOException
IOException
protected String resolveAvailableSignaturesProposal() throws IOException, GeneralSecurityException
null
/empty if no proposalIOException
- If failed to read/parse the keys dataGeneralSecurityException
- If failed to generate the keysgetFactoryManager()
,
resolveAvailableSignaturesProposal(FactoryManager)
protected abstract String resolveAvailableSignaturesProposal(FactoryManager manager) throws IOException, GeneralSecurityException
manager
- The FactoryManager
null
/empty if no proposalIOException
- If failed to read/parse the keys dataGeneralSecurityException
- If failed to generate the keysprotected Map<KexProposalOption,String> getKexProposal() throws Exception
KexExtensionHandler
and the SessionListener
for customization, otherwise the
previously created proposal for the session is returned.protected Map<KexProposalOption,String> createProposal(String hostKeyTypes) throws IOException
hostKeyTypes
- The comma-separated list of supported host key typesMap
IOException
- If internal problem - e.g., KEX extensions negotiation issueprotected Map<KexProposalOption,String> mergeProposals(Map<KexProposalOption,String> current, Map<KexProposalOption,String> proposal)
protected void signalNegotiationOptionsCreated(Map<KexProposalOption,String> proposal)
protected void signalNegotiationOptionsCreated(SessionListener listener, Map<KexProposalOption,String> proposal)
protected void signalNegotiationStart(Map<KexProposalOption,String> c2sOptions, Map<KexProposalOption,String> s2cOptions)
protected void signalNegotiationStart(SessionListener listener, Map<KexProposalOption,String> c2sOptions, Map<KexProposalOption,String> s2cOptions)
protected void signalNegotiationEnd(Map<KexProposalOption,String> c2sOptions, Map<KexProposalOption,String> s2cOptions, Map<KexProposalOption,String> negotiatedGuess, Throwable reason)
protected void signalNegotiationEnd(SessionListener listener, Map<KexProposalOption,String> c2sOptions, Map<KexProposalOption,String> s2cOptions, Map<KexProposalOption,String> negotiatedGuess, Throwable reason)
protected Buffer preProcessEncodeBuffer(int cmd, Buffer buffer) throws IOException
SSH_PACKET_HEADER_LEN
. This is required in order to efficiently handle
the encoding. If necessary, it re-allocates a new buffer and returns it instead.cmd
- The command stored in the bufferbuffer
- The original Buffer
- assumed to be properly formatted and be of at least the
required minimum length.Buffer
. Note: users may use this method to totally alter the
contents of the buffer being sent but it is highly discouraged as it may have unexpected
results.IOException
- If failed to process the bufferpublic void disconnect(int reason, String msg) throws IOException
Session
disconnect
in interface Session
reason
- the reason code for this disconnectmsg
- the text messageIOException
- if an error occurred sending the packetprotected void handleDisconnect(int code, String msg, String lang, Buffer buffer) throws Exception
Exception
protected void signalDisconnect(int code, String msg, String lang, boolean initiator)
protected void signalDisconnect(SessionListener listener, int code, String msg, String lang, boolean initiator)
public void exceptionCaught(Throwable t)
SshException
.exceptionCaught
in interface Session
t
- the exception to processprotected void signalExceptionCaught(Throwable t)
protected void signalExceptionCaught(SessionListener listener, Throwable t)
protected void signalSessionClosed()
protected void signalSessionClosed(SessionListener listener)
protected abstract ConnectionService getConnectionService()
protected Forwarder getForwarder()
public List<Map.Entry<SshdSocketAddress,SshdSocketAddress>> getLocalForwardsBindings()
getLocalForwardsBindings
in interface PortForwardingInformationProvider
SshdSocketAddress
-espublic boolean isLocalPortForwardingStartedForPort(int port)
PortForwardingInformationProvider
isLocalPortForwardingStartedForPort
in interface PortForwardingInformationProvider
port
- The local porttrue
if local port forwarding is startedgetBoundLocalPortForwards
public List<SshdSocketAddress> getStartedLocalPortForwards()
getStartedLocalPortForwards
in interface PortForwardingInformationProvider
List
snapshot of the currently started local port forward bindingspublic List<SshdSocketAddress> getBoundLocalPortForwards(int port)
getBoundLocalPortForwards
in interface PortForwardingInformationProvider
port
- The port numberSshdSocketAddress
-es for the portisLocalPortForwardingStartedForPort
,
PortForwardingInformationProvider.getStartedLocalPortForwards()
public List<Map.Entry<Integer,SshdSocketAddress>> getRemoteForwardsBindings()
getRemoteForwardsBindings
in interface PortForwardingInformationProvider
SshdSocketAddress
public boolean isRemotePortForwardingStartedForPort(int port)
PortForwardingInformationProvider
isRemotePortForwardingStartedForPort
in interface PortForwardingInformationProvider
port
- The remote porttrue
if remote port forwarding is startedgetBoundRemotePortForward
public NavigableSet<Integer> getStartedRemotePortForwards()
getStartedRemotePortForwards
in interface PortForwardingInformationProvider
NavigableSet
snapshot of the currently started remote port forwardspublic SshdSocketAddress getBoundRemotePortForward(int port)
getBoundRemotePortForward
in interface PortForwardingInformationProvider
port
- The port numberSshdSocketAddress
for the port - null
if none boundisRemotePortForwardingStartedForPort
,
PortForwardingInformationProvider.getStartedRemotePortForwards()
public Duration getAuthTimeout()
getAuthTimeout
in interface Session
public Duration getIdleTimeout()
getIdleTimeout
in interface Session
Copyright © 2008–2024 The Apache Software Foundation. All rights reserved.