VTTelnetSession.h
上传用户:wsk323
上传日期:2007-01-05
资源大小:403k
文件大小:4k
源码类别:

Telnet服务器

开发平台:

Visual C++

  1. /*---------------------------------------------------------------------------
  2. Copyright:    E. Brady Trexler
  3. Creation:     March 13, 1998 (based on MicroSoft Win32.hlp code snippet
  4.               and F. Piette's telnet server demo).
  5. Description:  VTTelnetSession -- class starting a command interpreter with pipes
  6.               inherited from main application.  Anonymous pipes are created for
  7.               STDIN, STDOUT, and STDERR.  Then, the child process (the command
  8.               interpreter) is started.  One thread is started that continuously
  9.               checks for data from a socket and feeds this data to STDIN.  Two
  10.               other threads continously check for output from STDOUT and
  11.               STDERR feed that back to the socket.  If the "exit" command is
  12.               given to the command interpreter, the STDOUT listening thread is
  13.               exited and the socket is disconnected.
  14. Legal issues: Copyright (C) 1998 by E. Brady Trexler and Fran鏾is Piette
  15.               This software is provided 'as-is', without any express or
  16.               implied warranty.  In no event will the author be held liable
  17.               for any  damages arising from the use of this software.
  18.               Permission is granted to anyone to use this software for any
  19.               purpose, excluding commercial applications, and to alter it
  20.               and redistribute it freely, subject to the following
  21.               restrictions:
  22.               1. The origin of this software must not be misrepresented,
  23.                  you must not claim that you wrote the original software.
  24.                  If you use this software in a product, an acknowledgment
  25.                  in the product documentation would be appreciated but is
  26.                  not required.
  27.               2. Altered source versions must be plainly marked as such, and
  28.                  must not be misrepresented as being the original software.
  29.               3. This notice may not be removed or altered from any source
  30.                  distribution.
  31. Updates:
  32. ---------------------------------------------------------------------------*/
  33. //---------------------------------------------------------------------------
  34. #ifndef VTSessionH
  35. #define VTSessionH
  36. //---------------------------------------------------------------------------
  37. #include <vclvcl.h>
  38. #pragma hdrstop
  39. #include "WSocket.hpp"
  40. #include "VTTelnetDaemon.h"
  41. #define BUFSIZE 4096
  42. //---------------------------------------------------------------------------
  43. //---------------------------------------------------------------------------
  44. class VTSession : public TObject
  45. {
  46. private:
  47.    PROCESS_INFORMATION  piProcInfo;
  48.    STARTUPINFO          siStartInfo;
  49. protected:
  50. public:
  51. TVTDaemon* TheDaemon;
  52.   HANDLE          hChildStdinRd, hChildStdinWr, hChildStdinWrDup,
  53. hChildStdoutRd, hChildStdoutWr,
  54. hInputFile, hSaveStdin, hSaveStdout,
  55. hChildStderrRd, hChildStderrWr, hSaveStderr;
  56.   HANDLE          UserToken;
  57.   TWSocket*       Socket;
  58.   AnsiString      FCommand;
  59.   AnsiString      Connected, UserName, PassWord;
  60.   AnsiString      HomeDirectory;
  61.   bool            Leko;
  62.   bool            LoginSuccessful, userOK, passOK;
  63.   bool            SocketDataIsHere;
  64.   bool            SocketSessionIsOpen;
  65.   bool            FlushSocket;
  66.   bool            ChildProcessCreated;
  67.   int             EscSeq;
  68.   int             BufferLength;
  69.   int             numtries;
  70.   char            Buffer[4096];
  71.   char            hostname[256];
  72.   sockaddr_in     ConnectedAddr;
  73.   void __fastcall ErrorExit (LPTSTR lpszMessage);
  74.   void __fastcall SocketDataAvailable(TObject *Sender, WORD Error);
  75.   void __fastcall SocketSessionClosed(TObject *Sender, WORD Error);
  76. void __fastcall StartCommandInterpreterAsChild();
  77.   bool __fastcall CreateChildProcess();
  78.   void __fastcall CommandInterpreter();
  79.   void __fastcall ProcessChar(char Ch);
  80.   bool __fastcall WaitForSocketData(char *data, DWORD &numchar);
  81.   void __fastcall Validate();
  82.   __fastcall VTSession(TVTDaemon *daemon);
  83.   __fastcall ~VTSession(){}
  84. };
  85. void FeedSocketDataToSTDIN(void *session);
  86. void FeedSTDOUTDataToSocket(void *session);
  87. void FeedSTDERRDataToSocket(void *session);
  88. //---------------------------------------------------------------------------
  89. #endif