/*
* 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.server;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.apache.sshd.common.Factory;
import org.apache.sshd.common.FactoryManager;
import org.apache.sshd.common.NamedFactory;
import org.apache.sshd.server.session.ServerProxyAcceptorHolder;
/**
* The <code>ServerFactoryManager</code> enable the retrieval of additional
* configuration needed specifically for the server side.
*
* @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
*/
public interface ServerFactoryManager
extends FactoryManager,
ServerProxyAcceptorHolder,
ServerAuthenticationManager {
/**
* Key used to retrieve the value of the maximum concurrent open session count per username.
* If not set, then unlimited
*/
String MAX_CONCURRENT_SESSIONS = "max-concurrent-sessions";
/**
* Key used to retrieve any extra lines to be sent during
* initial protocol handshake <U>before</U> the identification.
* The configured string value should use {@value #SERVER_EXTRA_IDENT_LINES_SEPARATOR}
* character to denote line breaks
*/
String SERVER_EXTRA_IDENTIFICATION_LINES = "server-extra-identification-lines";
/**
* Separator used in the {@value #SERVER_EXTRA_IDENTIFICATION_LINES} configuration
* string to indicate new line break
*/
char SERVER_EXTRA_IDENT_LINES_SEPARATOR = '|';
/**
* Key used to retrieve the value of the server identification string.
* If set, then it is <U>appended</U> to the (standard) "SSH-2.0-"
* prefix. Otherwise a default is sent that consists of "SSH-2.0-"
* plus the current SSHD core artifact name and version in uppercase - e.g.,
* "SSH-2.0-SSHD-CORE-1.0.0"
*/
String SERVER_IDENTIFICATION = "server-identification";
/**
* Key used to configure the timeout used when receiving a close request
* on a channel to wait until the command cleanly exits after setting
* an EOF on the input stream. In milliseconds.
* @see #DEFAULT_COMMAND_EXIT_TIMEOUT
*/
String COMMAND_EXIT_TIMEOUT = "command-exit-timeout";
/**
* Default {@value #COMMAND_EXIT_TIMEOUT} if not set
*/
long DEFAULT_COMMAND_EXIT_TIMEOUT = TimeUnit.SECONDS.toMillis(5L);
/**
* A URL pointing to the moduli file.
* If not specified, the default internal file will be used.
*/
String MODULI_URL = "moduli-url";
/**
* Retrieve the <code>ShellFactory</code> object to be used to create shells.
*
* @return a valid <code>ShellFactory</code> object or {@code null} if shells
* are not supported on this server
*/
Factory<Command> getShellFactory();
/**
* Retrieve the <code>CommandFactory</code> to be used to process commands requests.
*
* @return A valid {@link CommandFactory} object or {@code null} if commands
* are not supported on this server
*/
CommandFactory getCommandFactory();
/**
* Retrieve the list of named factories for <code>CommandFactory.Command</code> to
* be used to create subsystems.
*
* @return a list of named <code>CommandFactory.Command</code> factories
* or {@code null} if subsystems are not supported on this server
*/
List<NamedFactory<Command>> getSubsystemFactories();
}