home *** CD-ROM | disk | FTP | other *** search
- unit STelnet;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- Winsock, StdCtrls,
- Stamina;
-
- {$I TNetConst.INC}
-
- const
- IN_BUFFER_SIZE = 2048;
-
- type
- TTelnetException = class( Exception )
- constructor Create( const Msg: string );
- end;
-
- TNVTClient = class;
-
- TNVT = class( TComponent )
- private
- FClient: TNVTClient;
- protected
- FEnabled: Boolean;
- procedure SetEnabled( AEnabled: Boolean ); virtual;
- function NVTWriteString(pszString: PChar; cbString: Integer): Integer; dynamic; abstract;
- procedure NVTClearScreen; dynamic; abstract;
- procedure NVTSetCursorPosition(x, y: Integer); dynamic; abstract;
- procedure NVTClearLine; dynamic; abstract;
- procedure NVTMoveCursorPosition(x, y: Integer); dynamic; abstract;
- procedure NVTSetExtendedMode(iFunction, bEnable: Integer ); dynamic; abstract;
- procedure NVTClearEOScreen; dynamic; abstract;
- procedure NVTClearBOScreen; dynamic; abstract;
- procedure NVTClearEOLine; dynamic; abstract;
- procedure NVTClearBOLine; dynamic; abstract;
-
- property Enabled: Boolean read FEnabled write SetEnabled default False;
- public
- constructor Create( AOwner: TComponent ); override;
- property Client: TNVTClient read FClient write FClient;
- end;
-
- TNVTParser = class( TComponent )
- private
- FNVT: TNVT;
- FClient: TNVTClient;
- function ParseEscape(pszBuffer, pszBufferEnd: PChar): PChar; dynamic;
- protected
- ProcessingCommand: Boolean;
- CommandProcessing: Pchar;
- LeadingChars: set of char;
- TelnetOptions: set of char;
- AcceptOptions: set of char;
- RejectOptions: set of char;
-
- function ParseIAC(pszBuffer, pszBufferEnd: PChar): Pchar; dynamic;
- function ParseSubNegotiation( pszBuffer, pszBufferEnd: PChar ): Pchar; dynamic;
- function DoParseEscape(var pszBuffer: Pchar; pszBufferEnd: PChar): Boolean; dynamic;
- function DoParseBuffer( var pszBuffer: PChar; pszBufferEnd: PChar): Boolean; dynamic;
- public
- constructor Create( AOwner: TComponent ); override;
- function ParseBuffer(pszBuffer, pszBufferEnd: PChar): PChar; dynamic;
- property Client: TNVTClient read FClient write FClient;
- property Terminal: TNVT read FNVT write FNVT;
- end;
-
- TAnsiNVTParser = class( TNVTParser )
- protected
- function GetTerminalId: PChar; dynamic;
-
- function DoParseEscape(var pszBuffer: Pchar; pszBufferEnd: PChar): Boolean; override;
- function ParseEscapeANSI(pszBuffer, pszBufferEnd: PChar): Pchar; dynamic;
- public
- constructor Create( AOwner: TComponent ); override;
- end;
-
- TMemoNVT = class (TNVT)
- private
- FMemo: TMemo;
- FOnKeyPress: TKeyPressEvent;
- procedure SetMemo( AMemo: TMemo );
- protected
- function NVTWriteString(pszString: PChar; cbString: Integer): Integer; override;
- procedure NVTClearScreen; override;
- procedure NVTClearEOScreen; override;
- procedure NVTClearBOScreen; override;
- procedure NVTClearLine; override;
- procedure NVTClearEOLine; override;
- procedure NVTClearBOLine; override;
- procedure NVTSetCursorPosition(x, y: Integer); override;
- procedure NVTMoveCursorPosition(x, y: Integer); override;
- procedure NVTSetExtendedMode(iFunction, bEnable: Integer ); override;
-
- function NVTGetCursorX: Integer;
- function NVTGetCursorY: Integer;
-
- procedure KeyPress(Sender: TObject; var Key: Char);
- public
- constructor Create( AOwner: TComponent ); override;
- published
- property Memo: TMemo read FMemo write SetMemo;
- end;
-
- TConsoleReadThread = class(TThread)
- private
- { Private declarations }
- FClient: TNVTClient;
- FExitEvent: THandle;
- protected
- procedure Execute; override;
- public
- constructor Create( AClient: TNVTClient; AExitEvent: THandle );
- end;
-
- TConsoleNVT = class (TNVT)
- private
- FOutConsole: THandle;
- FOnKeyPress: TKeyPressEvent;
- FExitEvent: THandle;
- thrdReadConsole: TConsoleReadThread;
- protected
- procedure SetEnabled( AEnabled: Boolean ); override;
- procedure NVTClearScreen; override;
- procedure NVTClearEOScreen; override;
- procedure NVTClearBOScreen; override;
- procedure NVTClearLine; override;
- procedure NVTClearEOLine; override;
- procedure NVTClearBOLine; override;
- procedure NVTSetCursorPosition(x, y: Integer); override;
- procedure NVTMoveCursorPosition(x, y: Integer); override;
- procedure NVTSetExtendedMode(iFunction, bEnable: Integer ); override;
- function NVTWriteString(pszString: PChar; cbString: Integer): Integer; override;
-
- function NVTGetCursorX: Integer;
- function NVTGetCursorY: Integer;
-
- public
- constructor Create( AOwner: TComponent ); override;
- destructor Destroy; override;
- end;
-
- TReadSocketThread = class(TThread)
- private
- { Private declarations }
- FSocket: TSocket;
- FNVTParser: TNVTParser;
- FszBuffer: array[0..IN_BUFFER_SIZE-1] of char;
- pszHead,
- pszTail: PChar;
- pszNewHead: PChar;
- aResult: Integer;
- Err: Integer;
- protected
- procedure Execute; override;
- public
- constructor Create( ANVTParser: TNVTParser; ASocket: TSocket );
- end;
-
- TNVTClient = class(TComponent)
- protected
- FNVT: TNVT;
- FNVTParser: TNVTParser;
- procedure SetNVT( ANVT: TNVT );
- procedure SetNVTParser( ANVTParser: TNVTParser );
- public
- function NetWriteString(pszString: PChar; cbString: Integer ): Integer; dynamic; abstract;
- published
- property Terminal: TNVT read FNVT write SetNVT;
- property Parser: TNVTParser read FNVTParser write SetNVTParser;
- end;
-
- TTelnetClient = class;
-
- TOnConnectEvent = procedure( Sender: TTelnetClient ) of object;
-
- TTelnetClient = class(TNVTClient)
- private
- { Private declarations }
- thrdTelnet: TReadSocketThread;
- FSocket: TSocket;
- FPort: Integer;
- FHost: string;
- FOnConnect: TOnConnectEvent;
- protected
- { Protected declarations }
- public
- { Public declarations }
- constructor Create( AOwner: TComponent ); override;
- destructor Destroy; override;
- procedure Connect;
- procedure Disconnect;
- function NetWriteString(pszString: PChar; cbString: Integer ): Integer; override;
- procedure SendCommand( cmd: char );
- property Port: Integer read FPort write FPort default 23;
- published
- { Published declarations }
- property Host: string read FHost write FHost;
- property OnConnect: TOnConnectEvent read FOnConnect write FOnConnect;
- end;
-