001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 018 package org.apache.commons.net.telnet; 019 020 /*** 021 * Implements the telnet terminal type option RFC 1091. 022 * <p> 023 * @author Bruno D'Avanzo 024 ***/ 025 public class TerminalTypeOptionHandler extends TelnetOptionHandler 026 { 027 /*** 028 * Terminal type 029 ***/ 030 private final String termType; 031 032 /*** 033 * Terminal type option 034 ***/ 035 protected static final int TERMINAL_TYPE = 24; 036 037 /*** 038 * Send (for subnegotiation) 039 ***/ 040 protected static final int TERMINAL_TYPE_SEND = 1; 041 042 /*** 043 * Is (for subnegotiation) 044 ***/ 045 protected static final int TERMINAL_TYPE_IS = 0; 046 047 /*** 048 * Constructor for the TerminalTypeOptionHandler. Allows defining desired 049 * initial setting for local/remote activation of this option and 050 * behaviour in case a local/remote activation request for this 051 * option is received. 052 * <p> 053 * @param termtype - terminal type that will be negotiated. 054 * @param initlocal - if set to true, a WILL is sent upon connection. 055 * @param initremote - if set to true, a DO is sent upon connection. 056 * @param acceptlocal - if set to true, any DO request is accepted. 057 * @param acceptremote - if set to true, any WILL request is accepted. 058 ***/ 059 public TerminalTypeOptionHandler(String termtype, 060 boolean initlocal, 061 boolean initremote, 062 boolean acceptlocal, 063 boolean acceptremote) 064 { 065 super(TelnetOption.TERMINAL_TYPE, initlocal, initremote, 066 acceptlocal, acceptremote); 067 termType = termtype; 068 } 069 070 /*** 071 * Constructor for the TerminalTypeOptionHandler. Initial and accept 072 * behaviour flags are set to false 073 * <p> 074 * @param termtype - terminal type that will be negotiated. 075 ***/ 076 public TerminalTypeOptionHandler(String termtype) 077 { 078 super(TelnetOption.TERMINAL_TYPE, false, false, false, false); 079 termType = termtype; 080 } 081 082 /*** 083 * Implements the abstract method of TelnetOptionHandler. 084 * <p> 085 * @param suboptionData - the sequence received, whithout IAC SB & IAC SE 086 * @param suboptionLength - the length of data in suboption_data 087 * <p> 088 * @return terminal type information 089 ***/ 090 @Override 091 public int[] answerSubnegotiation(int suboptionData[], int suboptionLength) 092 { 093 if ((suboptionData != null) && (suboptionLength > 1) 094 && (termType != null)) 095 { 096 if ((suboptionData[0] == TERMINAL_TYPE) 097 && (suboptionData[1] == TERMINAL_TYPE_SEND)) 098 { 099 int response[] = new int[termType.length() + 2]; 100 101 response[0] = TERMINAL_TYPE; 102 response[1] = TERMINAL_TYPE_IS; 103 104 for (int ii = 0; ii < termType.length(); ii++) 105 { 106 response[ii + 2] = termType.charAt(ii); 107 } 108 109 return response; 110 } 111 } 112 return null; 113 } 114 115 /*** 116 * Implements the abstract method of TelnetOptionHandler. 117 * <p> 118 * @return always null (no response to subnegotiation) 119 ***/ 120 @Override 121 public int[] startSubnegotiationLocal() 122 { 123 return null; 124 } 125 126 /*** 127 * Implements the abstract method of TelnetOptionHandler. 128 * <p> 129 * @return always null (no response to subnegotiation) 130 ***/ 131 @Override 132 public int[] startSubnegotiationRemote() 133 { 134 return null; 135 } 136 }