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

Telnet服务器

开发平台:

Visual C++

  1. /*---------------------------------------------------------------------------
  2. Copyright:    E. Brady Trexler
  3. Creation:     March 13, 1998 (based on F. Piette's telnet server demo).
  4.               A lot of code was lifted from his sources.
  5. Description:  VTTelnetDaemon -- a class that owns a TWSocket component.
  6.               The TWSocket listens to the telnet port and creates an
  7.               instance of a VTTelnetSession to start the session.
  8. Legal issues: Copyright (C) 1998 by E. Brady Trexler and Fran鏾is Piette
  9.               This software is provided 'as-is', without any express or
  10.               implied warranty.  In no event will the author be held liable
  11.               for any  damages arising from the use of this software.
  12.               Permission is granted to anyone to use this software for any
  13.               purpose, excluding commercial applications, and to alter it
  14.               and redistribute it freely, subject to the following
  15.               restrictions:
  16.               1. The origin of this software must not be misrepresented,
  17.                  you must not claim that you wrote the original software.
  18.                  If you use this software in a product, an acknowledgment
  19.                  in the product documentation would be appreciated but is
  20.                  not required.
  21.               2. Altered source versions must be plainly marked as such, and
  22.                  must not be misrepresented as being the original software.
  23.               3. This notice may not be removed or altered from any source
  24.                  distribution.
  25. Updates:
  26. ---------------------------------------------------------------------------*/
  27. //---------------------------------------------------------------------------
  28. #include <vclvcl.h>
  29. #pragma hdrstop
  30. #include <stdio.h>
  31. #include <stdlib.h>
  32. #include <LMACCESS.H>
  33. #include <LMERR.H>
  34. #include "VTTelnetDaemon.h"
  35. #include "VTTelnetSession.h"
  36. //---------------------------------------------------------------------------
  37. #pragma link "WSocket"
  38. #pragma resource "*.dfm"
  39. TVTDaemon *VTDaemon;
  40. //---------------------------------------------------------------------------
  41. __fastcall TVTDaemon::TVTDaemon(TComponent* Owner)
  42. : TForm(Owner)
  43. {
  44. TheSessions = new TList;
  45. char inifile[1024];
  46. char *temp;
  47. int port;
  48.    FILE *fd = NULL;
  49. //try application directory
  50.    AnsiString s = Application->ExeName;
  51. int ext = s.LastDelimiter("\.:");
  52. s.SetLength(ext);
  53. s = s + "ini";
  54. fd = fopen(s.c_str(), "rt");
  55. if (fd == NULL){
  56. strcpy(inifile, getenv("SYSTEMROOT"));
  57. strcat(inifile, "\system32\telnetd.ini");
  58. fd = fopen(inifile, "rt");
  59. }
  60.    if (fd != NULL){
  61. fscanf(fd, "port=%dn", &port);
  62. fread(inifile, 1024, 1, fd);
  63. strtok(inifile, "=");
  64. temp = strtok(NULL, "~");
  65. strcpy(WelcomeMessage, temp);
  66. temp = strtok(NULL, "=");
  67. temp = strtok(NULL, "~");
  68. strcpy(ExitMessage, temp);
  69. fclose(fd);
  70. SrvSocket->Port = port;
  71.    }
  72. SrvSocket->Listen();
  73. }
  74. //---------------------------------------------------------------------------
  75. void __fastcall TVTDaemon::SrvSocketSessionAvailable(TObject *Sender, WORD Error)
  76. {
  77. TheSessions->Add(new VTSession(this));
  78. }
  79. //---------------------------------------------------------------------------
  80. void __fastcall TVTDaemon::SrvSocketSessionClosed(TObject *Sender, WORD Error)
  81. {
  82.   if (SrvSocket->State == wsOpened) SrvSocket->Close();
  83.   Close();
  84. }
  85. //---------------------------------------------------------------------------
  86. void __fastcall TVTDaemon::WMDisconnect(TMessage Message)
  87. {
  88.     VTSession *Session = (VTSession *)(Message.LParam);
  89. #ifdef SERVICE
  90.     CloseHandle(Session->UserToken);
  91. #endif
  92.     Session->Socket->Shutdown(2);
  93.     Session->Socket->Close();
  94.     Session->Socket->Free();
  95.     TheSessions->Remove(Session);
  96. }
  97. //---------------------------------------------------------------------------
  98. int __fastcall TVTDaemon::GetNumSessions()
  99. {
  100. return TheSessions->Count;
  101. }
  102. //---------------------------------------------------------------------------
  103.