PTLib Version 2.12.9

- Main Page
- Related Pages
- Namespaces
- Classes
- Files

- File List
- File Members

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
telnet.h
Go to the documentation of this file.
1 /*
2 * telnet.h
3 *
4 * TELNET Socket class.
5 *
6 * Portable Windows Library
7 *
8 * Copyright (c) 1993-2002 Equivalence Pty. Ltd.
9 *
10 * The contents of this file are subject to the Mozilla Public License
11 * Version 1.0 (the "License"); you may not use this file except in
12 * compliance with the License. You may obtain a copy of the License at
13 * http://www.mozilla.org/MPL/
14 *
15 * Software distributed under the License is distributed on an "AS IS"
16 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
17 * the License for the specific language governing rights and limitations
18 * under the License.
19 *
20 * The Original Code is Portable Windows Library.
21 *
22 * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
23 *
24 * Contributor(s): ______________________________________.
25 *
26 * $Revision: 24177 $
27 * $Author: rjongbloed $
28 * $Date: 2010-04-05 21:52:04 +1000 (Mon, 05 Apr 2010) $
29 */
30
31 #ifndef PTLIB_TELNET_H
32 #define PTLIB_TELNET_H
33
34 #ifdef P_USE_PRAGMA
35 #pragma interface
36 #endif
37
38 #include <ptlib/sockets.h>
39
40
43 class PTelnetSocket : public PTCPSocket
44 {
45 PCLASSINFO(PTelnetSocket, PTCPSocket)
46
47 public:
48 PTelnetSocket();
49 // Create an unopened TELNET socket.
50
51 PTelnetSocket(
52 const PString & address
53 );
54 // Create an opened TELNET socket.
55
56
57 // Overrides from class PChannel
73 PBoolean Read(
74 void * buf,
75 PINDEX len
76 );
77
91 PBoolean Write(
92 const void * buf,
93 PINDEX len
94 );
95
103 virtual bool SetLocalEcho(
104 bool localEcho
105 );
106
107
119 virtual PBoolean Connect(
120 const PString & address
121 );
122
123
138 virtual PBoolean Accept(
139 PSocket & socket
140 );
141
142
149 virtual void OnOutOfBand(
150 const void * buf,
151 PINDEX len
152 );
153
154
155 // New functions
156 enum Command {
157 IAC = 255,
158 DONT = 254,
159 DO = 253,
160 WONT = 252,
161 WILL = 251,
162 SB = 250,
163 GoAhead = 249,
164 EraseLine = 248,
165 EraseChar = 247,
166 AreYouThere = 246,
167 AbortOutput = 245,
168 InterruptProcess = 244,
169 Break = 243,
170 DataMark = 242,
171 NOP = 241,
172 SE = 240,
173 EndOfReccord = 239,
174 AbortProcess = 238,
175 SuspendProcess= 237,
176 EndOfFile = 236
177 };
178 // Defined telnet commands codes
179
200 PBoolean SendCommand(
201 Command cmd,
202 int opt = 0
203 );
204
205
206 enum Options {
207 TransmitBinary = 0,
208 EchoOption = 1,
209 ReconnectOption = 2,
210 SuppressGoAhead = 3,
211 MessageSizeOption = 4,
212 StatusOption = 5,
213 TimingMark = 6,
214 RCTEOption = 7,
215 OutputLineWidth = 8,
216 OutputPageSize = 9,
217 CRDisposition = 10,
218 HorizontalTabsStops = 11,
219 HorizTabDisposition = 12,
220 FormFeedDisposition = 13,
221 VerticalTabStops = 14,
222 VertTabDisposition = 15,
223 LineFeedDisposition = 16,
224 ExtendedASCII = 17,
225 ForceLogout = 18,
226 ByteMacroOption = 19,
227 DataEntryTerminal = 20,
228 SupDupProtocol = 21,
229 SupDupOutput = 22,
230 SendLocation = 23,
231 TerminalType = 24,
232 EndOfRecordOption = 25,
233 TACACSUID = 26,
234 OutputMark = 27,
235 TerminalLocation = 28,
236 Use3270RegimeOption = 29,
237 UseX3PADOption = 30,
238 WindowSize = 31,
239 TerminalSpeed = 32,
240 FlowControl = 33,
241 LineModeOption = 34,
242 XDisplayLocation = 35,
243 EnvironmentOption = 36,
244 AuthenticateOption = 37,
245 EncriptionOption = 38,
246 EncryptionOption = 38,
247 ExtendedOptionsList = 255,
248 MaxOptions
249 };
250 // Defined TELNET options.
251
252
258 virtual PBoolean SendDo(
259 BYTE option
260 );
261
267 virtual PBoolean SendDont(
268 BYTE option
269 );
270
276 virtual PBoolean SendWill(
277 BYTE option
278 );
279
285 virtual PBoolean SendWont(
286 BYTE option
287 );
288
289 enum SubOptionCodes {
290 SubOptionIs = 0,
291 SubOptionSend = 1,
292 };
293 // Codes for sub option negotiation.
294
300 PBoolean SendSubOption(
301 BYTE code,
302 const BYTE * info,
303 PINDEX len,
304 int subCode = -1
305 );
306
310 void SetOurOption(
311 BYTE code,
312 PBoolean state = true
313 ) { option[code].weCan = state; }
314
318 void SetTheirOption(
319 BYTE code,
320 PBoolean state = true
321 ) { option[code].theyShould = state; }
322
328 PBoolean IsOurOption(
329 BYTE code
330 ) const { return option[code].ourState == OptionInfo::IsYes; }
331
337 PBoolean IsTheirOption(
338 BYTE code
339 ) const { return option[code].theirState == OptionInfo::IsYes; }
340
341 void SetTerminalType(
342 const PString & newType
343 );
344 // Set the terminal type description string for TELNET protocol.
345
346 const PString & GetTerminalType() const { return terminalType; }
347 // Get the terminal type description string for TELNET protocol.
348
349 void SetWindowSize(
350 WORD width,
351 WORD height
352 );
353 // Set the width and height of the Network Virtual Terminal window.
354
355 void GetWindowSize(
356 WORD & width,
357 WORD & height
358 ) const;
359 // Get the width and height of the Network Virtual Terminal window.
360
361
362 protected:
363 void Construct();
364 // Common construct code for TELNET socket channel.
365
375 virtual void OnDo(
376 BYTE option
377 );
378
385 virtual void OnDont(
386 BYTE option
387 );
388
395 virtual void OnWill(
396 BYTE option
397 );
398
405 virtual void OnWont(
406 BYTE option
407 );
408
412 virtual void OnSubOption(
413 BYTE code,
414 const BYTE * info,
415 PINDEX len
416 );
417
418
428 virtual PBoolean OnCommand(
429 BYTE code
430 );
431
432
433 // Member variables.
434 struct OptionInfo {
435 enum {
436 IsNo, IsYes, WantNo, WantNoQueued, WantYes, WantYesQueued
437 };
438 unsigned weCan:1; // We can do the option if they want us to do.
439 unsigned ourState:3;
440 unsigned theyShould:1; // They should if they will.
441 unsigned theirState:3;
442 };
443
444 OptionInfo option[MaxOptions];
445 // Information on protocol options.
446
447 PString terminalType;
448 // Type of terminal connected to telnet socket, defaults to "UNKNOWN"
449
450 WORD windowWidth, windowHeight;
451 // Size of the "window" used by the NVT.
452
453
454 private:
455 enum State {
456 StateNormal,
457 StateCarriageReturn,
458 StateIAC,
459 StateDo,
460 StateDont,
461 StateWill,
462 StateWont,
463 StateSubNegotiations,
464 StateEndNegotiations
465 };
466 // Internal states for the TELNET decoder
467
468 State state;
469 // Current state of incoming characters.
470
471 PBYTEArray subOption;
472 // Storage for sub-negotiated options
473
474 unsigned synchronising;
475 };
476
477
478 #endif // PTLIB_TELNET_H
479
480
481 // End Of File ///////////////////////////////////////////////////////////////