View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  
18  package org.apache.commons.net.telnet;
19  
20  /***
21   * Implements the telnet terminal type option RFC 1091.
22   * <p>
23   * @author Bruno D'Avanzo
24   ***/
25  public class TerminalTypeOptionHandler extends TelnetOptionHandler
26  {
27      /***
28       * Terminal type
29       ***/
30      private final String termType;
31  
32      /***
33       * Terminal type option
34       ***/
35      protected static final int TERMINAL_TYPE = 24;
36  
37      /***
38       * Send (for subnegotiation)
39       ***/
40      protected static final int TERMINAL_TYPE_SEND =  1;
41  
42      /***
43       * Is (for subnegotiation)
44       ***/
45      protected static final int TERMINAL_TYPE_IS =  0;
46  
47      /***
48       * Constructor for the TerminalTypeOptionHandler. Allows defining desired
49       * initial setting for local/remote activation of this option and
50       * behaviour in case a local/remote activation request for this
51       * option is received.
52       * <p>
53       * @param termtype - terminal type that will be negotiated.
54       * @param initlocal - if set to true, a WILL is sent upon connection.
55       * @param initremote - if set to true, a DO is sent upon connection.
56       * @param acceptlocal - if set to true, any DO request is accepted.
57       * @param acceptremote - if set to true, any WILL request is accepted.
58       ***/
59      public TerminalTypeOptionHandler(String termtype,
60                                  boolean initlocal,
61                                  boolean initremote,
62                                  boolean acceptlocal,
63                                  boolean acceptremote)
64      {
65          super(TelnetOption.TERMINAL_TYPE, initlocal, initremote,
66                                        acceptlocal, acceptremote);
67          termType = termtype;
68      }
69  
70      /***
71       * Constructor for the TerminalTypeOptionHandler. Initial and accept
72       * behaviour flags are set to false
73       * <p>
74       * @param termtype - terminal type that will be negotiated.
75       ***/
76      public TerminalTypeOptionHandler(String termtype)
77      {
78          super(TelnetOption.TERMINAL_TYPE, false, false, false, false);
79          termType = termtype;
80      }
81  
82      /***
83       * Implements the abstract method of TelnetOptionHandler.
84       * <p>
85       * @param suboptionData - the sequence received, whithout IAC SB & IAC SE
86       * @param suboptionLength - the length of data in suboption_data
87       * <p>
88       * @return terminal type information
89       ***/
90      @Override
91      public int[] answerSubnegotiation(int suboptionData[], int suboptionLength)
92      {
93          if ((suboptionData != null) && (suboptionLength > 1)
94              && (termType != null))
95          {
96              if ((suboptionData[0] == TERMINAL_TYPE)
97                  && (suboptionData[1] == TERMINAL_TYPE_SEND))
98              {
99                  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 }