/*
* Copyright (C)2009 - SSHJ Contributors
*
* Licensed 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 net.schmizz.sshj.connection.channel.direct;
import net.schmizz.sshj.common.Buffer;
import java.util.Map;
import java.util.Map.Entry;
/** Various modes for a psuedo-terminal. They are meant to have integer parameters. */
public enum PTYMode {
/**
* Interrupt character; 255 if none. Similarly for the other characters. Not all of these characters are supported
* on all systems.
*/
VINTR(1),
/** The quit character (sends SIGQUIT signal on POSIX systems). */
VQUIT(2),
/** Erase the character to left of the cursor. */
VERASE(3),
/** Kill the current input line. */
VKILL(4),
/** End-of-file character (sends EOF from the terminal). */
VEOF(5),
/** End-of-line character in addition to carriage return and/or linefeed. */
VEOL(6),
/** Additional end-of-line character. */
VEOL2(7),
/** Continues paused output (normally control-Q). */
VSTART(8),
/** Pauses output (normally control-S). */
VSTOP(9),
/** Suspends the current program. */
VSUSP(10),
/** Another suspend character. */
VDSUSP(11),
/** Reprints the current input line. */
VREPRINT(12),
/** Erases a word left of cursor. */
VWERASE(13),
/** Enter the next character typed literally, even if it is a special character. */
VLNEXT(14),
/** Character to flush output. */
VFLUSH(15),
/** Switch to a different shell layer. */
VSWTCH(16),
/** Prints system status line (load, command, pid, etc). */
VSTATUS(17),
/** Toggles the flushing of terminal output. */
VDISCARD(18),
/** The ignore parity flag. The parameter SHOULD be 0 if this flag is FALSE, and 1 if it is TRUE. */
IGNPAR(30),
/** Mark parity and framing errors. */
PARMRK(31),
/** Enable checking of parity errors. */
INPCK(32),
/** Strip 8th bit off characters. */
ISTRIP(33),
/** Map NL into CR on input. */
INLCR(34),
/** Ignore CR on input. */
IGNCR(35),
/** Map CR to NL on input. */
ICRNL(36),
/** Translate uppercase characters to lowercase. */
IUCLC(37),
/** Enable output flow control. */
IXON(38),
/** Any char will restart after stop. */
IXANY(39),
/** Enable input flow control. */
IXOFF(40),
/** Ring bell on input queue full. */
IMAXBEL(41),
/** Enable signals INTR, QUIT, [D]SUSP. */
ISIG(50),
/** Canonicalize input lines. */
ICANON(51),
/** Enable input and output of uppercase characters by preceding their lowercase equivalents with "\". */
XCASE(52),
/** Enable echoing. */
ECHO(53),
/** Visually erase chars. */
ECHOE(54),
/** Kill character discards current line. */
ECHOK(55),
/** Echo NL even if ECHO is off. */
ECHONL(56),
/** Don't flush after interrupt. */
NOFLSH(57),
/** Stop background jobs from output. */
TOSTOP(58),
/** Enable extensions. */
IEXTEN(59),
/** Echo control characters as ˆ(Char). */
ECHOCTL(60),
/** Visual erase for line kill. */
ECHOKE(61),
/** Retype pending input. */
PENDIN(62),
/** Enable output processing. */
OPOST(70),
/** Convert lowercase to uppercase. */
OLCUC(71),
/** Map NL to CR-NL. */
ONLCR(72),
/** Translate carriage return to newline (output). */
OCRNL(73),
/** Translate newline to carriage return-newline (output). */
ONOCR(74),
/** Newline performs a carriage return (output). */
ONLRET(75),
/** 7 bit mode. */
CS7(90),
/** 8 bit mode. */
CS8(91),
/** Parity enable. */
PARENB(92),
/** Odd parity, else even. */
PARODD(93),
/** Specifies the input baud rate in bits per second. */
TTY_OP_ISPEED(128),
/** Specifies the output baud rate in bits per second. */
TTY_OP_OSPEED(129);
public static byte[] encode(Map<PTYMode, Integer> modes) {
Buffer.PlainBuffer buf = new Buffer.PlainBuffer();
for (Entry<PTYMode, Integer> entry : modes.entrySet()) {
buf.putByte(entry.getKey().getOpcode());
buf.putUInt32(entry.getValue());
}
buf.putByte((byte) 0);
return buf.getCompactData();
}
private final byte opcode;
private PTYMode(int opcode) {
this.opcode = (byte) opcode;
}
public byte getOpcode() {
return opcode;
}
}