home *** CD-ROM | disk | FTP | other *** search
/ SuperHack / SuperHack CD.bin / CODING / DELPHI / STELNET.ZIP / STELNET.INT < prev    next >
Encoding:
Text File  |  1996-04-01  |  6.2 KB  |  202 lines

  1. unit STelnet;
  2.  
  3. interface
  4.  
  5. uses
  6.     Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.     Winsock, StdCtrls,
  8.     Stamina;
  9.  
  10. {$I TNetConst.INC}
  11.  
  12. const
  13.     IN_BUFFER_SIZE = 2048;
  14.  
  15. type
  16.     TTelnetException = class( Exception )
  17.         constructor Create( const Msg: string );
  18.     end;
  19.  
  20.     TNVTClient = class;
  21.  
  22.     TNVT = class( TComponent )
  23.     private
  24.         FClient:    TNVTClient;
  25.     protected
  26.         FEnabled:            Boolean;
  27.         procedure SetEnabled( AEnabled: Boolean ); virtual;
  28.         function NVTWriteString(pszString: PChar; cbString: Integer): Integer; dynamic; abstract;
  29.         procedure NVTClearScreen; dynamic; abstract;
  30.         procedure NVTSetCursorPosition(x, y: Integer); dynamic; abstract;
  31.         procedure NVTClearLine; dynamic; abstract;
  32.         procedure NVTMoveCursorPosition(x, y: Integer); dynamic; abstract;
  33.         procedure NVTSetExtendedMode(iFunction, bEnable: Integer ); dynamic; abstract;
  34.         procedure NVTClearEOScreen; dynamic; abstract;
  35.         procedure NVTClearBOScreen; dynamic; abstract;
  36.         procedure NVTClearEOLine; dynamic; abstract;
  37.         procedure NVTClearBOLine; dynamic; abstract;
  38.  
  39.         property Enabled: Boolean read FEnabled write SetEnabled default False;
  40.     public
  41.         constructor Create( AOwner: TComponent ); override;
  42.         property Client: TNVTClient read FClient write FClient;
  43.     end;
  44.  
  45.     TNVTParser = class( TComponent )
  46.     private
  47.         FNVT:            TNVT;
  48.         FClient:    TNVTClient;
  49.         function ParseEscape(pszBuffer, pszBufferEnd: PChar): PChar; dynamic;
  50.     protected
  51.         ProcessingCommand:    Boolean;
  52.         CommandProcessing:    Pchar;
  53.         LeadingChars:    set of char;
  54.         TelnetOptions:    set of char;
  55.         AcceptOptions:    set of char;
  56.         RejectOptions:    set of char;
  57.  
  58.         function ParseIAC(pszBuffer, pszBufferEnd: PChar): Pchar; dynamic;
  59.         function ParseSubNegotiation( pszBuffer, pszBufferEnd: PChar ): Pchar; dynamic;
  60.         function DoParseEscape(var pszBuffer: Pchar; pszBufferEnd: PChar): Boolean; dynamic;
  61.         function DoParseBuffer( var pszBuffer: PChar; pszBufferEnd: PChar): Boolean; dynamic;
  62.     public
  63.         constructor Create( AOwner: TComponent ); override;
  64.         function ParseBuffer(pszBuffer, pszBufferEnd: PChar): PChar; dynamic;
  65.         property Client: TNVTClient read FClient write FClient;
  66.         property Terminal: TNVT read FNVT write FNVT;
  67.     end;
  68.  
  69.     TAnsiNVTParser = class( TNVTParser )
  70.     protected
  71.         function GetTerminalId: PChar; dynamic;
  72.  
  73.         function DoParseEscape(var pszBuffer: Pchar; pszBufferEnd: PChar): Boolean; override;
  74.         function ParseEscapeANSI(pszBuffer, pszBufferEnd: PChar): Pchar; dynamic;
  75.     public
  76.         constructor Create( AOwner: TComponent ); override;
  77.     end;
  78.  
  79.     TMemoNVT = class (TNVT)
  80.         private
  81.             FMemo:        TMemo;
  82.             FOnKeyPress:    TKeyPressEvent;
  83.             procedure SetMemo( AMemo: TMemo );
  84.         protected
  85.             function NVTWriteString(pszString: PChar; cbString: Integer): Integer; override;
  86.             procedure NVTClearScreen; override;
  87.             procedure NVTClearEOScreen; override;
  88.             procedure NVTClearBOScreen; override;
  89.             procedure NVTClearLine; override;
  90.             procedure NVTClearEOLine; override;
  91.             procedure NVTClearBOLine; override;
  92.             procedure NVTSetCursorPosition(x, y: Integer); override;
  93.             procedure NVTMoveCursorPosition(x, y: Integer); override;
  94.             procedure NVTSetExtendedMode(iFunction, bEnable: Integer ); override;
  95.  
  96.             function NVTGetCursorX: Integer;
  97.             function NVTGetCursorY: Integer;
  98.  
  99.             procedure KeyPress(Sender: TObject; var Key: Char);
  100.         public
  101.             constructor Create( AOwner: TComponent ); override;
  102.         published
  103.             property Memo: TMemo read FMemo write SetMemo;
  104.     end;
  105.  
  106.     TConsoleReadThread = class(TThread)
  107.     private
  108.         { Private declarations }
  109.         FClient:    TNVTClient;
  110.         FExitEvent:    THandle;
  111.     protected
  112.         procedure Execute; override;
  113.     public
  114.         constructor Create( AClient: TNVTClient; AExitEvent: THandle );
  115.     end;
  116.  
  117.     TConsoleNVT = class (TNVT)
  118.         private
  119.             FOutConsole:    THandle;
  120.             FOnKeyPress:    TKeyPressEvent;
  121.             FExitEvent:        THandle;
  122.             thrdReadConsole:    TConsoleReadThread;
  123.         protected
  124.             procedure SetEnabled( AEnabled: Boolean ); override;
  125.             procedure NVTClearScreen; override;
  126.             procedure NVTClearEOScreen; override;
  127.             procedure NVTClearBOScreen; override;
  128.             procedure NVTClearLine; override;
  129.             procedure NVTClearEOLine; override;
  130.             procedure NVTClearBOLine; override;
  131.             procedure NVTSetCursorPosition(x, y: Integer); override;
  132.             procedure NVTMoveCursorPosition(x, y: Integer); override;
  133.             procedure NVTSetExtendedMode(iFunction, bEnable: Integer ); override;
  134.             function NVTWriteString(pszString: PChar; cbString: Integer): Integer; override;
  135.  
  136.             function NVTGetCursorX: Integer;
  137.             function NVTGetCursorY: Integer;
  138.  
  139.         public
  140.             constructor Create( AOwner: TComponent ); override;
  141.             destructor Destroy; override;
  142.     end;
  143.  
  144.     TReadSocketThread = class(TThread)
  145.     private
  146.         { Private declarations }
  147.         FSocket:    TSocket;
  148.         FNVTParser:    TNVTParser;
  149.         FszBuffer:    array[0..IN_BUFFER_SIZE-1] of char;
  150.         pszHead,
  151.         pszTail:    PChar;
  152.         pszNewHead:    PChar;
  153.         aResult:    Integer;
  154.         Err:    Integer;
  155.     protected
  156.         procedure Execute; override;
  157.     public
  158.         constructor Create( ANVTParser: TNVTParser; ASocket: TSocket );
  159.     end;
  160.  
  161.     TNVTClient = class(TComponent)
  162.     protected
  163.         FNVT:                TNVT;
  164.         FNVTParser:    TNVTParser;
  165.         procedure SetNVT( ANVT: TNVT );
  166.         procedure SetNVTParser( ANVTParser: TNVTParser );
  167.     public
  168.         function NetWriteString(pszString: PChar; cbString: Integer ): Integer; dynamic; abstract;
  169.     published
  170.         property Terminal: TNVT read FNVT write SetNVT;
  171.         property Parser: TNVTParser read FNVTParser write SetNVTParser;
  172.     end;
  173.  
  174.     TTelnetClient = class;
  175.  
  176.     TOnConnectEvent = procedure( Sender: TTelnetClient ) of object;
  177.  
  178.     TTelnetClient = class(TNVTClient)
  179.     private
  180.         { Private declarations }
  181.         thrdTelnet: TReadSocketThread;
  182.         FSocket:    TSocket;
  183.         FPort:    Integer;
  184.         FHost:    string;
  185.         FOnConnect: TOnConnectEvent;
  186.     protected
  187.         { Protected declarations }
  188.     public
  189.         { Public declarations }
  190.         constructor Create( AOwner: TComponent ); override;
  191.         destructor Destroy; override;
  192.         procedure Connect;
  193.         procedure Disconnect;
  194.         function NetWriteString(pszString: PChar; cbString: Integer ): Integer; override;
  195.         procedure SendCommand( cmd: char );
  196.         property Port: Integer read FPort write FPort default 23;
  197.     published
  198.         { Published declarations }
  199.         property Host: string read FHost write FHost;
  200.         property OnConnect: TOnConnectEvent read FOnConnect write FOnConnect;
  201.     end;
  202.