TelnetOptionHandler.java
/*
* 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.commons.net.telnet;
/**
* The TelnetOptionHandler class is the base class to be used for implementing handlers for telnet options.
* <p>
* TelnetOptionHandler implements basic option handling functionality and defines abstract methods that must be implemented to define subnegotiation behavior.
* </p>
*/
public abstract class TelnetOptionHandler {
/**
* Option code
*/
private int optionCode = -1;
/**
* true if the option should be activated on the local side
*/
private boolean initialLocal;
/**
* true if the option should be activated on the remote side
*/
private boolean initialRemote;
/**
* true if the option should be accepted on the local side
*/
private boolean acceptLocal;
/**
* true if the option should be accepted on the remote side
*/
private boolean acceptRemote;
/**
* true if the option is active on the local side
*/
private boolean doFlag;
/**
* true if the option is active on the remote side
*/
private boolean willFlag;
/**
* Constructor for the TelnetOptionHandler. Allows defining desired initial setting for local/remote activation of this option and behavior in case a
* local/remote activation request for this option is received.
*
* @param optcode - Option code.
* @param initlocal - if set to true, a {@code WILL} is sent upon connection.
* @param initremote - if set to true, a {@code DO} is sent upon connection.
* @param acceptlocal - if set to true, any {@code DO} request is accepted.
* @param acceptremote - if set to true, any {@code WILL} request is accepted.
*/
public TelnetOptionHandler(final int optcode, final boolean initlocal, final boolean initremote, final boolean acceptlocal, final boolean acceptremote) {
optionCode = optcode;
initialLocal = initlocal;
initialRemote = initremote;
acceptLocal = acceptlocal;
acceptRemote = acceptremote;
}
/**
* Method called upon reception of a subnegotiation for this option coming from the other end.
* <p>
* This implementation returns null, and must be overridden by the actual TelnetOptionHandler to specify which response must be sent for the subnegotiation
* request.
* </p>
*
* @param suboptionData - the sequence received, without IAC SB & IAC SE
* @param suboptionLength - the length of data in suboption_data
* @return response to be sent to the subnegotiation sequence. TelnetClient will add IAC SB & IAC SE. null means no response
*/
public int[] answerSubnegotiation(final int suboptionData[], final int suboptionLength) {
return null;
}
/**
* Gets a boolean indicating whether to accept a DO request coming from the other end.
*
* @return true if a {@code DO} request shall be accepted.
*/
public boolean getAcceptLocal() {
return acceptLocal;
}
/**
* Gets a boolean indicating whether to accept a WILL request coming from the other end.
*
* @return true if a {@code WILL} request shall be accepted.
*/
public boolean getAcceptRemote() {
return acceptRemote;
}
/**
* Gets a boolean indicating whether a {@code DO} request sent to the other side has been acknowledged.
*
* @return true if a {@code DO} sent to the other side has been acknowledged.
*/
boolean getDo() {
return doFlag;
}
/**
* Gets a boolean indicating whether to send a WILL request to the other end upon connection.
*
* @return true if a {@code WILL} request shall be sent upon connection.
*/
public boolean getInitLocal() {
return initialLocal;
}
/**
* Gets a boolean indicating whether to send a DO request to the other end upon connection.
*
* @return true if a {@code DO} request shall be sent upon connection.
*/
public boolean getInitRemote() {
return initialRemote;
}
/**
* Gets the option code for this option.
*
* @return Option code.
*/
public int getOptionCode() {
return optionCode;
}
/**
* Gets a boolean indicating whether a {@code WILL} request sent to the other side has been acknowledged.
*
* @return true if a {@code WILL} sent to the other side has been acknowledged.
*/
boolean getWill() {
return willFlag;
}
/**
* Sets behavior of the option for DO requests coming from the other end.
*
* @param accept - if true, subsequent DO requests will be accepted.
*/
public void setAcceptLocal(final boolean accept) {
acceptLocal = accept;
}
/**
* Sets behavior of the option for {@code WILL} requests coming from the other end.
*
* @param accept - if true, subsequent {@code WILL} requests will be accepted.
*/
public void setAcceptRemote(final boolean accept) {
acceptRemote = accept;
}
/**
* Sets this option whether a {@code DO} request sent to the other side has been acknowledged (invoked by TelnetClient).
*
* @param state - if true, a {@code DO} request has been acknowledged.
*/
void setDo(final boolean state) {
doFlag = state;
}
/**
* Sets this option whether to send a {@code WILL} request upon connection.
*
* @param init - if true, a {@code WILL} request will be sent upon subsequent connections.
*/
public void setInitLocal(final boolean init) {
initialLocal = init;
}
/**
* Sets this option whether to send a {@code DO} request upon connection.
*
* @param init - if true, a {@code DO} request will be sent upon subsequent connections.
*/
public void setInitRemote(final boolean init) {
initialRemote = init;
}
/**
* Sets this option whether a {@code WILL} request sent to the other side has been acknowledged (invoked by TelnetClient).
*
* @param state - if true, a {@code WILL} request has been acknowledged.
*/
void setWill(final boolean state) {
willFlag = state;
}
/**
* This method is invoked whenever this option is acknowledged active on the local end (TelnetClient sent a WILL, remote side sent a DO). The method is used
* to specify a subnegotiation sequence that will be sent by TelnetClient when the option is activated.
* <p>
* This implementation returns null, and must be overriden by the actual TelnetOptionHandler to specify which response must be sent for the subnegotiation
* request.
* </p>
*
* @return subnegotiation sequence to be sent by TelnetClient. TelnetClient will add IAC SB & IAC SE. null means no subnegotiation.
*/
public int[] startSubnegotiationLocal() {
return null;
}
/**
* This method is invoked whenever this option is acknowledged active on the remote end (TelnetClient sent a DO, remote side sent a WILL). The method is
* used to specify a subnegotiation sequence that will be sent by TelnetClient when the option is activated.
* <p>
* This implementation returns null, and must be overridden by the actual TelnetOptionHandler to specify which response must be sent for the subnegotiation
* request.
* </p>
*
* @return subnegotiation sequence to be sent by TelnetClient. TelnetClient will add IAC SB & IAC SE. null means no subnegotiation.
*/
public int[] startSubnegotiationRemote() {
return null;
}
}