/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.sshd.common.channel;
import org.apache.sshd.common.util.SshdEventListener;
/**
* Provides a simple listener for client / server channels being established
* or torn down. <B>Note:</B> for server-side listeners, some of the established
* channels may be <U>client</U> - especially where connection proxy or forwarding
* is concerned
*
* @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
*/
public interface ChannelListener extends SshdEventListener {
ChannelListener EMPTY = new ChannelListener() {
@Override
public String toString() {
return "EMPTY";
}
};
/**
* Called to inform about initial setup of a channel via the
* {@link Channel#init(org.apache.sshd.common.session.ConnectionService, org.apache.sshd.common.session.Session, int)}
* method. <B>Note:</B> this method is guaranteed to be called
* before either of the {@link #channelOpenSuccess(Channel)} or
* {@link #channelOpenFailure(Channel, Throwable)} will be called
*
* @param channel The initialized {@link Channel}
*/
default void channelInitialized(Channel channel) {
// ignored
}
/**
* Called to inform about a channel being successfully opened for a
* session. <B>Note:</B> when the call is made, the channel is known
* to be open but nothing beyond that.
*
* @param channel The newly opened {@link Channel}
*/
default void channelOpenSuccess(Channel channel) {
// ignored
}
/**
* Called to inform about the failure to open a channel
*
* @param channel The failed {@link Channel}
* @param reason The {@link Throwable} reason - <B>Note:</B> if the
* {@link #channelOpenSuccess(Channel)} notification throws an exception
* it will cause this method to be invoked
*/
default void channelOpenFailure(Channel channel, Throwable reason) {
// ignored
}
/**
* Called to inform that the channel state may have changed - e.g.,
* received EOF, window adjustment, etc..
*
* @param channel The {@link Channel} whose state has changed
* @param hint A "hint" as to the nature of the state change.
* it can be a request name or a {@code SSH_MSG_CHANNEL_XXX} command
* or the name of an exception class
*/
default void channelStateChanged(Channel channel, String hint) {
// ignored
}
/**
* Called to inform about a channel being closed. <B>Note:</B> when the call
* is made there are no guarantees about the channel's actual state
* except that it either has been already closed or may be in the process
* of being closed. <B>Note:</B> this method is guaranteed to be called
* regardless of whether {@link #channelOpenSuccess(Channel)} or
* {@link #channelOpenFailure(Channel, Throwable)} have been called
*
* @param channel The referenced {@link Channel}
* @param reason The reason why the channel is being closed - if {@code null}
* then normal closure
*/
default void channelClosed(Channel channel, Throwable reason) {
// ignored
}
static <L extends ChannelListener> L validateListener(L listener) {
return SshdEventListener.validateListener(listener, ChannelListener.class.getSimpleName());
}
}