TelnetServerDlg.cpp
上传用户:cjwgreen1
上传日期:2013-01-27
资源大小:24k
文件大小:31k
源码类别:

Telnet服务器

开发平台:

Unix_Linux

  1. // TelnetServerDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "ListenerSocket.h"
  5. #include "ServerSocket.h"
  6. #include "TelnetServer.h"
  7. #include "TelnetServerDlg.h"
  8. #include "shlobj.h" //for IActiveDesktop
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CTelnetServerDlg dialog
  16. CTelnetServerDlg::CTelnetServerDlg(CWnd* pParent /*=NULL*/)
  17. : CDialog(CTelnetServerDlg::IDD, pParent)
  18. {
  19. //{{AFX_DATA_INIT(CTelnetServerDlg)
  20. m_dwPort = 0;
  21. //}}AFX_DATA_INIT
  22. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  23. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  24. }
  25. void CTelnetServerDlg::DoDataExchange(CDataExchange* pDX)
  26. {
  27. CDialog::DoDataExchange(pDX);
  28. //{{AFX_DATA_MAP(CTelnetServerDlg)
  29. DDX_Text(pDX, IDC_EDIT_PORT, m_dwPort);
  30. DDV_MinMaxDWord(pDX, m_dwPort, 0, 65635);
  31. //}}AFX_DATA_MAP
  32. }
  33. BEGIN_MESSAGE_MAP(CTelnetServerDlg, CDialog)
  34. //{{AFX_MSG_MAP(CTelnetServerDlg)
  35. ON_WM_PAINT()
  36. ON_WM_QUERYDRAGICON()
  37. ON_BN_CLICKED(IDC_BUTTON_LISTEN, OnButtonListen)
  38. ON_MESSAGE(WM_SEND_MESSAGE,OnSend)
  39. //}}AFX_MSG_MAP
  40. END_MESSAGE_MAP()
  41. /////////////////////////////////////////////////////////////////////////////
  42. // CTelnetServerDlg message handlers
  43. BOOL CTelnetServerDlg::OnInitDialog()
  44. {
  45. CDialog::OnInitDialog();
  46. // Set the icon for this dialog.  The framework does this automatically
  47. //  when the application's main window is not a dialog
  48. SetIcon(m_hIcon, TRUE); // Set big icon
  49. SetIcon(m_hIcon, FALSE); // Set small icon
  50. // TODO: Add extra initialization here
  51. // Including bitmap buttons
  52. // Starting program initializations
  53. m_dwPort = 4000;
  54. UpdateData(FALSE);
  55. m_nCnt = 0;
  56. m_strLine.Empty();
  57. m_bExit = TRUE;
  58. m_bPrompt = FALSE;
  59. m_Listener.SetParent(this);
  60. m_Server.SetParent(this);
  61. return TRUE;  // return TRUE  unless you set the focus to a control
  62. }
  63. // If you add a minimize button to your dialog, you will need the code below
  64. //  to draw the icon.  For MFC applications using the document/view model,
  65. //  this is automatically done for you by the framework.
  66. void CTelnetServerDlg::OnPaint() 
  67. {
  68. if (IsIconic())
  69. {
  70. CPaintDC dc(this); // device context for painting
  71. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  72. // Center icon in client rectangle
  73. int cxIcon = GetSystemMetrics(SM_CXICON);
  74. int cyIcon = GetSystemMetrics(SM_CYICON);
  75. CRect rect;
  76. GetClientRect(&rect);
  77. int x = (rect.Width() - cxIcon + 1) / 2;
  78. int y = (rect.Height() - cyIcon + 1) / 2;
  79. // Draw the icon
  80. dc.DrawIcon(x, y, m_hIcon);
  81. }
  82. else
  83. {
  84. CDialog::OnPaint();
  85. }
  86. }
  87. // The system calls this to obtain the cursor to display while the user drags
  88. //  the minimized window.
  89. HCURSOR CTelnetServerDlg::OnQueryDragIcon()
  90. {
  91. return (HCURSOR) m_hIcon;
  92. }
  93. void CTelnetServerDlg::OnButtonListen() 
  94. {
  95. // TODO: Add your control notification handler code here
  96. UpdateData(TRUE);
  97. m_Listener.Create(m_dwPort);
  98. if (m_Listener.Listen())
  99. {
  100. GetDlgItem(IDC_BUTTON_LISTEN)->EnableWindow(FALSE);
  101. GetDlgItem(IDC_EDIT_PORT)->EnableWindow(FALSE);
  102. GetDlgItem(IDC_STATIC_PORT)->EnableWindow(FALSE);
  103. CString str;
  104. str.Format("Listening on port %d", m_dwPort);
  105. SetWindowText(str);
  106. ShowWindow(SW_SHOWMINIMIZED);
  107. }
  108. else
  109. AfxMessageBox("Failed to listen on requested port...");
  110. }
  111. void CTelnetServerDlg::OnAccept()
  112. {
  113. m_Listener.Accept(m_Server);
  114. SetWindowText("Connected with Client...");
  115. CString str;
  116. str = "                        *******************************                         ";
  117. int iLen = str.GetLength();
  118. int iSent = m_Server.Send(LPCTSTR(str),iLen);
  119. if (iSent == SOCKET_ERROR)
  120. {
  121. AfxMessageBox("Error in sending data...");
  122. }
  123. str = "                        ** WELCOME TO TELNET SERVER! **                         ";
  124. iLen = str.GetLength();
  125. iSent = m_Server.Send(LPCTSTR(str),iLen);
  126. if (iSent == SOCKET_ERROR)
  127. {
  128. AfxMessageBox("Error in sending data...");
  129. }
  130. str = "                        *******************************                         ";
  131. iLen = str.GetLength();
  132. iSent = m_Server.Send(LPCTSTR(str),iLen);
  133. if (iSent == SOCKET_ERROR)
  134. {
  135. AfxMessageBox("Error in sending data...");
  136. }
  137. }
  138. void CTelnetServerDlg::OnSend()
  139. {
  140. int iLen;
  141. int iSent;
  142. iLen = m_strLine.GetLength();
  143. if (iLen < 80)
  144. {
  145. for ( ; iLen < 80; iLen++)
  146. m_strLine += ' ';
  147. }
  148. else if ((iLen >= 80) && (iLen < 160))
  149. {
  150. for ( ; iLen < 160; iLen++)
  151. m_strLine += ' ';
  152. }
  153. else if ((iLen >= 160) && (iLen < 240))
  154. {
  155. for ( ; iLen < 240; iLen++)
  156. m_strLine += ' ';
  157. }
  158. else if ((iLen >= 240) && (iLen < 320))
  159. {
  160. for ( ; iLen < 320; iLen++)
  161. m_strLine += ' ';
  162. }
  163. else if ((iLen >= 320) && (iLen < 400))
  164. {
  165. for ( ; iLen < 400; iLen++)
  166. m_strLine += ' ';
  167. }
  168. iSent = m_Server.Send(LPCTSTR(m_strLine),iLen);
  169. if (iSent == SOCKET_ERROR)
  170. {
  171. AfxMessageBox("Error in sending data...");
  172. }
  173. }
  174. void CTelnetServerDlg::OnReceive()
  175. {
  176. char ch;
  177. int iRcvd;
  178. iRcvd = m_Server.Receive(&ch, 1);
  179. if(iRcvd == SOCKET_ERROR)
  180. {
  181. AfxMessageBox("Error in receiving data...");
  182. }
  183. else if (m_nCnt == 0)
  184. {
  185. m_strLine = ch;
  186. m_nCnt = 100;
  187. }
  188. else
  189. {
  190. if (ch != 'n')
  191. m_strLine += ch;
  192. else
  193. {
  194. CheckPrompt();
  195. if (IsPrompt())
  196. Command(m_strLine);
  197. // adding string to list
  198. if (m_strLine.GetLength() > 1)
  199. m_strLine.SetAt(m_strLine.GetLength()-1, NULL);
  200. m_strLine.Empty();
  201. }
  202. }
  203. }
  204. void CTelnetServerDlg::OnClose()
  205. {
  206. m_Server.Close();
  207. CString str;
  208. str.Format("Listening on port %d", m_dwPort);
  209. SetWindowText(str);
  210. }
  211. void CTelnetServerDlg::Command(CString str)
  212. {
  213. BOOL bRD = FALSE;
  214. BOOL bRun = FALSE;
  215. char dir[100];
  216. str.TrimLeft();
  217. str.TrimRight();
  218. str.MakeLower();
  219. int len = str.GetLength();
  220. if (len == 0)
  221. {
  222. return;
  223. }
  224. if ((str.Compare("cd.") == 0) || (str.Compare("cd .") == 0))
  225. {
  226. // do nothing
  227. }
  228. else if ((str.GetAt(len-1) == ':') || ((str.GetAt(len-1) == '\') && (str.GetAt(len-2) == ':')))
  229. {
  230. if (str.GetAt(0) == ':')
  231. InvalidCommand(INVALID);
  232. else if (SetCurrentDirectory(str) == 0)
  233. InvalidCommand(DRIVE);
  234. }
  235. else if (len == 3)
  236. {
  237. if ((str.GetAt(0) == 'd') && (str.GetAt(1) == 'i') && (str.GetAt(2) == 'r'))
  238. {
  239. GetCurrentDirectory(100, dir);
  240. str = dir;
  241. Recurse(str, FALSE);
  242. }
  243. else if ((str.GetAt(0) == 'c') && (str.GetAt(1) == 'd') && (str.GetAt(2) == '\'))
  244. {
  245. GetCurrentDirectory(100, dir);
  246. str = dir;
  247. int i = str.Find('\');
  248. for (int cnt = 0; cnt < i; cnt++)
  249. {
  250. dir[cnt] = str[cnt];
  251. }
  252. dir[cnt] = NULL;
  253. str = dir;
  254. str += '\';
  255. if (SetCurrentDirectory(str) == 0)
  256. InvalidCommand(DRIVE);
  257. }
  258. else
  259. {
  260. InvalidCommand(INVALID);
  261. }
  262. }
  263. else if (len == 4)
  264. {
  265. if ((str.GetAt(0) == 'c') && (str.GetAt(1) == 'd') && (str.GetAt(2) == '.') && (str.GetAt(3) == '.'))
  266. {
  267. if (IsDrive())
  268. {
  269. InvalidCommand(DIR);
  270. }
  271. else
  272. {
  273. GetCurrentDirectory(100, dir);
  274. str = dir;
  275. int i = str.ReverseFind('\');
  276. for (int cnt = 0; cnt < i; cnt++)
  277. {
  278. dir[cnt] = str[cnt];
  279. }
  280. dir[cnt] = NULL;
  281. str = dir;
  282. str += "\";
  283. if (!SetCurrentDirectory(str))
  284. InvalidCommand(DIR);
  285. }
  286. }
  287. else if ((str.GetAt(0) == 'c') && (str.GetAt(1) == 'd') && (str.GetAt(2) == ' ') && (str.GetAt(3) != ' '))
  288. {
  289. CString req_dir;
  290. req_dir = str.GetAt(3);
  291. GetCurrentDirectory(100, dir);
  292. str = dir;
  293. if (str.GetLength() > 1)
  294. {
  295. if (str.GetAt(str.GetLength()-1) != '\')
  296. str += '\';
  297. }
  298. str += req_dir;
  299. if (!SetCurrentDirectory(str))
  300. InvalidCommand(DIR);
  301. }
  302. else if((str.Find("rd ", 0) == 0) & (str.GetAt(3) != ' '))
  303. {
  304. CString dir = "                                     ";
  305. int temp = str.GetLength();
  306. for (int i = 3; i < temp; i++)
  307. dir.SetAt(i-3, str.GetAt(i));
  308. dir.TrimRight();
  309. if (!RemoveDir(dir))
  310. InvalidCommand(DIRECTORY);
  311. }
  312. else if((str.Find("md ", 0) == 0) & (str.GetAt(3) != ' '))
  313. {
  314. CString temp = str.GetAt(3);
  315. if (!MakeDir(temp))
  316. InvalidCommand(DIRECTORY);
  317. }
  318. else
  319. {
  320. InvalidCommand(INVALID);
  321. }
  322. }
  323. else if (len > 4)
  324. {
  325. BOOL bInValidCommand = TRUE;
  326. CString filename = "                                   ";
  327. if (str.Compare("shutdown") == 0)
  328. {
  329. bInValidCommand = FALSE;
  330. WinOperation(EWX_SHUTDOWN);
  331. }
  332. else if (str.Compare("restart") == 0)
  333. {
  334. bInValidCommand = FALSE;
  335. WinOperation(EWX_REBOOT);
  336. }
  337. else if (str.Compare("logoff") == 0)
  338. {
  339. bInValidCommand = FALSE;
  340. WinOperation(EWX_LOGOFF);
  341. }
  342. else if (str.Compare("poweroff") == 0)
  343. {
  344. bInValidCommand = FALSE;
  345. WinOperation(EWX_POWEROFF);
  346. }
  347. else if (str.Compare("disable_ss") == 0)
  348. {
  349. bInValidCommand = FALSE;
  350. ScreenSaver(DISABLE);
  351. }
  352. else if (str.Compare("enable_ss") == 0)
  353. {
  354. bInValidCommand = FALSE;
  355. ScreenSaver(ENABLE);
  356. }
  357. else if (str.Compare("activate_ss") == 0)
  358. {
  359. bInValidCommand = FALSE;
  360. ScreenSaver(ACTIVATE);
  361. }
  362. else if (str.Compare("deactivate_ss") == 0)
  363. {
  364. bInValidCommand = FALSE;
  365. ScreenSaver(DEACTIVATE);
  366. }
  367. else if (str.Compare("mouse_invert") == 0)
  368. {
  369. bInValidCommand = FALSE;
  370. SwapMouseButton(TRUE);
  371. }
  372. else if (str.Compare("mouse_normal") == 0)
  373. {
  374. bInValidCommand = FALSE;
  375. SwapMouseButton(FALSE);
  376. }
  377. else if (str.Find("setwallpaper ", 0) == 0)
  378. {
  379. str.Delete(0, 13);
  380. str.TrimLeft();
  381. if (str.Compare("blank") == 0)
  382. {
  383. if (!SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "", 0))
  384. {
  385. LastError();
  386. }
  387. }
  388. else
  389. {
  390. CString path;
  391. char buff[100];
  392. DWORD len = GetCurrentDirectory(100, buff);
  393. buff[len] = NULL;
  394. path = buff;
  395. path += '\';
  396. path += str;
  397. SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, NULL, 0);
  398. }
  399. bInValidCommand = FALSE;
  400. }
  401. else if (str.Find("find ", 0) == 0)
  402. {
  403. str.Delete(0, 5);
  404. if (!Find("C:", str))
  405. {
  406. if (!Find("D:", str))
  407. {
  408. if (!Find("E:", str))
  409. {
  410. if (!Find("F:", str))
  411. {
  412. Find("G:", str);
  413. }
  414. }
  415. }
  416. }
  417. bInValidCommand = FALSE;
  418. }
  419. else if (str.Find("del ", 0) == 0)
  420. {
  421. // getting the filename out of string
  422. int temp = str.GetLength();
  423. for (int i = 4; i < temp; i++)
  424. filename.SetAt(i-4, str.GetAt(i));
  425. filename.TrimRight();
  426. }
  427. else if(str.Find("run ", 0) == 0)
  428. {
  429. bRun = TRUE;
  430. str.Delete(0, 4);
  431. CString Application(str);
  432. CString Request;
  433. Application.TrimLeft();
  434. Application.TrimRight();
  435. Request = Application;
  436. Application += ".exe";
  437. if (WinExec(Application, SW_SHOW) <= 31)
  438. {
  439. // here we can use the search algorithm and then if the file is found
  440. // we can run it
  441. CString RequestPath = "NULL";
  442. RequestPath = Search("C:", Request);
  443. if (RequestPath.Compare("NULL") != 0)
  444. {
  445. //if (WinExec(RequestPath, SW_SHOW) <= 31)
  446. ShellExecute(NULL, "open", RequestPath, NULL, NULL, SW_RESTORE);
  447. }
  448. else
  449. {
  450. InvalidCommand(RUN);
  451. }
  452. }
  453. }
  454. else if(str.Find("msg ", 0) == 0)
  455. {
  456. str.Delete(0, 4);
  457. CString Message(str);
  458. Message.TrimLeft();
  459. Message.TrimRight();
  460. int len = Message.GetLength()-1;
  461. if (Message.GetAt(0) == '(' && Message.GetAt(len) == ')')
  462. {
  463. Message.Delete(0,1);
  464. Message.Delete(len-1,1);
  465. Message.TrimLeft();
  466. Message.TrimRight();
  467. m_pDlg = new CMyDialog;
  468. m_pDlg->Create(IDD_TEMP_DLG);
  469. m_pDlg->SetWindowText("Message!");
  470. m_pDlg->m_strMessage = Message;
  471. m_pDlg->UpdateData(FALSE);
  472. m_pDlg->ShowWindow(1);
  473. bInValidCommand = FALSE;
  474. }
  475. }
  476. else if(str.Find("rd ", 0) == 0)
  477. {
  478. CString dir = "                                             ";
  479. int temp = str.GetLength();
  480. for (int i = 3; i < temp; i++)
  481. dir.SetAt(i-3, str.GetAt(i));
  482. dir.TrimRight();
  483. if (!RemoveDir(dir))
  484. {
  485. InvalidCommand(DIRECTORY);
  486. bRD = TRUE;
  487. }
  488. else
  489. {
  490. bRD = TRUE;
  491. }
  492. }
  493. else
  494. {
  495. filename = "nofilenamegiven";
  496. }
  497. if (bRD == FALSE && bRun == FALSE && bInValidCommand)
  498. {
  499. if ((str.GetAt(0) == 'd') && (str.GetAt(1) == 'i') && (str.GetAt(2) == 'r') && (str.GetAt(3) == ' '))
  500. {
  501. char temp_dir[100];
  502. CString temp_str(str);
  503. GetCurrentDirectory(100, temp_dir);
  504. int res;
  505. res = temp_str.Find(' ', 0);
  506. if (res != -1)
  507. {
  508. temp_str.Delete(0, res);
  509. temp_str.TrimLeft();
  510. str.Empty();
  511. str = temp_dir;
  512. if (str.GetAt(str.GetLength()-1) != '\')
  513. {
  514. str += '\';
  515. }
  516. str += temp_str;
  517. Recurse(str, TRUE);
  518. }
  519. }
  520. else if ((str.GetAt(0) == 'c') && (str.GetAt(1) == 'd') && (str.GetAt(2) == ' '))
  521. {
  522. CString req_dir;
  523. int res;
  524. res = str.Find(' ', 0);
  525. if (res != -1)
  526. {
  527. str.Delete(0, res);
  528. str.TrimLeft();
  529. req_dir = str;
  530. }
  531. GetCurrentDirectory(100, dir);
  532. str = dir;
  533. if (str.GetLength() > 1)
  534. {
  535. if (str.GetAt(str.GetLength()-1) != '\')
  536. str += '\';
  537. }
  538. str += req_dir;
  539. if (!SetCurrentDirectory(str))
  540. InvalidCommand(DIR);
  541. }
  542. else if ((str.GetAt(0) == 'm') && (str.GetAt(1) == 'd') && (str.GetAt(2) == ' '))
  543. {
  544. CString req_dir;
  545. int res;
  546. res = str.Find(' ', 0);
  547. if (res != -1)
  548. {
  549. str.Delete(0, res);
  550. str.TrimLeft();
  551. req_dir = str;
  552. }
  553. if (!MakeDir(str))
  554. InvalidCommand(DIRECTORY);
  555. }
  556. else if ((str.GetAt(0) == 'c') && (str.GetAt(1) == 'o') && (str.GetAt(2) == 'p') && (str.GetAt(3) == 'y') && (str.GetAt(4) == ' '))
  557. {
  558. CString dest;
  559. CString source;
  560. int res;
  561. res = str.Find(' ', 0);
  562. if (res != -1)
  563. {
  564. str.Delete(0, res);
  565. str.TrimLeft();
  566. dest = str;
  567. }
  568. res = dest.Find(' ', 0);
  569. source = "                                                          ";
  570. if (res != -1)
  571. {
  572. for (int i  = 0; i < res; i++)
  573. source.SetAt(i, dest.GetAt(i));
  574. dest.Delete(0, res);
  575. dest.TrimLeft();
  576. dest.TrimRight();
  577. }
  578. if (!Copy(source, dest))
  579. InvalidCommand(COPY);
  580. }
  581. else if (filename.Compare("nofilenamegiven") != 0)
  582. {
  583. CString msg;
  584. if (filename.Compare("*.*") == 0)
  585. {
  586. int number = RecurseDeletion();
  587. msg.Format("%d ", number);
  588. msg += "files deleted";
  589. int k = msg.GetLength()-1;
  590. for ( ; k < 80; k++)
  591. {
  592. msg += ' ';
  593. }
  594. int Sent = m_Server.Send(LPCTSTR(msg),80);
  595. if (Sent == SOCKET_ERROR)
  596. {
  597. AfxMessageBox("Error in sending data...");
  598. }
  599. }
  600. else if(IsDirectory(filename))
  601. {
  602. int number = RecurseDeletion(filename);
  603. msg.Format("%d ", number);
  604. msg += "files deleted";
  605. int k = msg.GetLength()-1;
  606. for ( ; k < 80; k++)
  607. {
  608. msg += ' ';
  609. }
  610. int Sent = m_Server.Send(LPCTSTR(msg),80);
  611. if (Sent == SOCKET_ERROR)
  612. {
  613. AfxMessageBox("Error in sending data...");
  614. }
  615. }
  616. else if (!DeleteFile(filename))
  617. {
  618. InvalidCommand(FILE);
  619. }
  620. else
  621. {
  622. msg = "Deletion process completed";
  623. int k = msg.GetLength()-1;
  624. for ( ; k < 80; k++)
  625. {
  626. msg += ' ';
  627. }
  628. int Sent = m_Server.Send(LPCTSTR(msg),80);
  629. if (Sent == SOCKET_ERROR)
  630. {
  631. AfxMessageBox("Error in sending data...");
  632. }
  633. }
  634. }
  635. else if (str.Compare("prompt") != 0 && str.Find("msg (", 0) == -1 && str.Find("run ", 0) == -1 && bInValidCommand)
  636. {
  637. InvalidCommand(INVALID);
  638. }
  639. }
  640. }
  641. CurrentDirectory();
  642. DisplayPrompt();
  643. }
  644. void CTelnetServerDlg::Recurse(LPCTSTR pstr, BOOL bExtDir)
  645. {
  646.    CFileFind finder;
  647.    CString pStr(pstr);
  648.    CString Find(pstr);
  649.    CString Filename("");
  650.    CString FileName;
  651.    CTime time;
  652.    DWORD FileSize;
  653.   
  654.    if (bExtDir)
  655.    {
  656.    int index = pStr.ReverseFind('\');    
  657.    if (index != -1)
  658.    {
  659.     int num = Find.GetLength() - index - 1;
  660.     Find.Delete(index+1, num);
  661. Find.TrimRight();
  662. pStr.Delete(0, index+1);
  663. pStr.TrimLeft();
  664. Find += "*.*";
  665. BOOL bWorking = finder.FindFile(Find);
  666. while (bWorking)
  667. {
  668.   bWorking = finder.FindNextFile();
  669.   FileName = finder.GetFileName();
  670.   finder.GetCreationTime(time);
  671.   FileSize = finder.GetLength();
  672.   CString abc(finder.GetFileName());
  673.   abc.MakeLower();
  674.   if (finder.IsDots() && pStr.Compare(abc) == 0)
  675.   {
  676. m_strLine = "<Dir>  ";
  677. m_strLine += FileName;
  678. FileInfoFormat(m_strLine, time);
  679. return;
  680.   }
  681.   else if (finder.IsDirectory() && pStr.Compare(abc) == 0)
  682.   {
  683. m_strLine = "<Dir>  ";
  684. m_strLine += FileName;
  685. FileInfoFormat(m_strLine, time);
  686. return;
  687.   }
  688.   else if (pStr.Compare(abc) == 0)
  689.   {
  690. m_strLine = "<File> ";
  691. m_strLine += FileName;
  692. FileInfoFormat(m_strLine, time, FileSize);
  693. return;
  694.   }
  695. }
  696. finder.Close();
  697.    }
  698.      m_strLine.Empty();
  699.    m_strLine.Format("Required file or directory not found");
  700.    this->SendMessage(WM_SEND_MESSAGE);
  701.    return;
  702.    }
  703.    CString strWildcard(pstr);
  704.    if (strWildcard.GetLength() > 1)
  705.    {
  706. if (strWildcard.GetAt(strWildcard.GetLength()-1) == '\')
  707. strWildcard += _T("*.*");
  708. else
  709. strWildcard += _T("\*.*");
  710.    }
  711.    BOOL bWorking = finder.FindFile(strWildcard);
  712.    
  713.    while (bWorking)
  714.    {
  715.       bWorking = finder.FindNextFile();
  716.   FileName = finder.GetFileName();
  717.   finder.GetCreationTime(time);
  718.   FileSize = finder.GetLength();
  719.   
  720.       if (finder.IsDots())
  721.   {
  722.  m_strLine = "<Dir>  ";
  723.  m_strLine += FileName;
  724.  FileInfoFormat(m_strLine, time);
  725.          continue;
  726.   }
  727.       else if (finder.IsDirectory())
  728.       {
  729.  m_strLine = "<Dir>  ";
  730.  m_strLine += FileName;
  731.  FileInfoFormat(m_strLine, time);
  732.  continue;
  733.       }
  734.   else
  735.   {
  736.  m_strLine = "<File> ";
  737.  m_strLine += FileName;
  738.  FileInfoFormat(m_strLine, time, FileSize);
  739.          continue;
  740.   }
  741.    }
  742.    finder.Close();
  743. }
  744. void CTelnetServerDlg::SetPrompt()
  745. {
  746. m_bPrompt = TRUE;
  747. m_bExit = FALSE;
  748. }
  749. void CTelnetServerDlg::SetExit()
  750. {
  751. m_bExit = TRUE;
  752. m_bPrompt = FALSE;
  753. }
  754. BOOL CTelnetServerDlg::IsPrompt()
  755. {
  756. return m_bPrompt;
  757. }
  758. void CTelnetServerDlg::CheckPrompt()
  759. {
  760. m_strLine.MakeLower();
  761. int iLen = m_strLine.GetLength();
  762. if (iLen == 5)
  763. {
  764. if ((m_strLine.GetAt(0) == 'e') && (m_strLine.GetAt(1) == 'x') && (m_strLine.GetAt(2) == 'i') && (m_strLine.GetAt(3) == 't'))
  765. {
  766. SetExit();
  767. }
  768. }
  769. else if (iLen == 7)
  770. {
  771. if ((m_strLine.GetAt(0) == 'p') && (m_strLine.GetAt(1) == 'r') && (m_strLine.GetAt(2) == 'o') && (m_strLine.GetAt(3) == 'm') && (m_strLine.GetAt(4) == 'p') && (m_strLine.GetAt(5) == 't'))
  772. {
  773. SetPrompt();
  774. }
  775. }
  776. }
  777. void CTelnetServerDlg::DisplayPrompt()
  778. {
  779. int iSent = m_Server.Send(LPCTSTR("Prompt>"),7);
  780. if (iSent == SOCKET_ERROR)
  781. {
  782. AfxMessageBox("Error in sending data...");
  783. }
  784. }
  785. void CTelnetServerDlg::CurrentDirectory()
  786. {
  787. int iLen;
  788. int iSent;
  789. char dir[100];
  790. CString str;
  791. CString blank;
  792. for (int i = 0; i < 80; i++)
  793. blank += ' ';
  794. iSent = m_Server.Send(LPCTSTR(blank),80);
  795. if (iSent == SOCKET_ERROR)
  796. {
  797. AfxMessageBox("Error in sending data...");
  798. }
  799. GetCurrentDirectory(100, dir);
  800. str = "[Current Directory] ";
  801. str += dir;
  802. iLen = str.GetLength();
  803. for ( ; iLen < 80; iLen++)
  804. str += ' ';
  805. iSent = m_Server.Send(LPCTSTR(str),iLen);
  806. if (iSent == SOCKET_ERROR)
  807. {
  808. AfxMessageBox("Error in sending data...");
  809. }
  810. iSent = m_Server.Send(LPCTSTR(blank),80);
  811. if (iSent == SOCKET_ERROR)
  812. {
  813. AfxMessageBox("Error in sending data...");
  814. }
  815. }
  816. void CTelnetServerDlg::InvalidCommand(ERRORCODE nErrorCode)
  817. {
  818. CString str;
  819. int iLen;
  820. int iSent;
  821. if (nErrorCode == DIR)
  822. str = "Invalid directory";
  823. else if (nErrorCode == DRIVE)
  824. {
  825. if (LastError())
  826. return;
  827. str = "Unknown drive";
  828. }
  829. else if (nErrorCode == FILE)
  830. {
  831. if (LastError())
  832. return;
  833. str = "File deletion failed";
  834. }
  835. else if (nErrorCode == RUN)
  836. {
  837. if (LastError())
  838. return;
  839. str = "Unable to run application";
  840. }
  841. else if (nErrorCode == DIRECTORY)
  842. {
  843. if (LastError())
  844. return;
  845. str = "Directory not found or not empty";
  846. }
  847. else if (nErrorCode == MAKE)
  848. {
  849. if (LastError())
  850. return;
  851. str = "Directory can not be created";
  852. }
  853. else if (nErrorCode == COPY)
  854. {
  855. if (LastError())
  856. return;
  857. str = "File copy failed";
  858. }
  859. else
  860. str = "Unknown command";
  861. iLen = str.GetLength();
  862. for ( ; iLen < 80; iLen++)
  863. str += ' ';
  864. iSent = m_Server.Send(LPCTSTR(str),iLen);
  865. if (iSent == SOCKET_ERROR)
  866. {
  867. AfxMessageBox("Error in sending data...");
  868. }
  869. }
  870. BOOL CTelnetServerDlg::IsDrive()
  871. {
  872. char dir[100];
  873. GetCurrentDirectory(100, dir);
  874. CString str = dir;
  875. if (str.GetLength() == 3)
  876. return TRUE;
  877. else
  878. return FALSE;
  879. }
  880. BOOL CTelnetServerDlg::LastError()
  881. {
  882. BOOL bRet = FALSE;
  883. CString str;
  884. int i;
  885. DWORD dwError = GetLastError();
  886. switch (dwError)
  887. {
  888. case ERROR_SEM_USER_LIMIT:
  889. str = "Cannot read from specified drive ";
  890. bRet = TRUE;
  891. break;
  892. case ERROR_ALREADY_EXISTS:
  893. str = "File already exists ";
  894. bRet = TRUE;
  895. break;
  896. case ERROR_NOT_READY:
  897. str = "Device not ready ";
  898. bRet = TRUE;
  899. break;
  900. case ERROR_BAD_FORMAT:
  901. str = "Bad disk format ";
  902. bRet = TRUE;
  903. break;
  904. case ERROR_GEN_FAILURE:
  905. str = "Device not responding ";
  906. bRet = TRUE;
  907. break;
  908. case ERROR_PATH_NOT_FOUND:
  909. str = "Path not found ";
  910. bRet = TRUE;
  911. break;
  912. case ERROR_ACCESS_DENIED:
  913. str = "Access denied ";
  914. bRet = TRUE;
  915. break;
  916. case ERROR_FILE_NOT_FOUND:
  917. str = "File not found ";
  918. bRet = TRUE;
  919. break;
  920. case ERROR_OUTOFMEMORY:
  921. str = "System out of memory ";
  922. bRet = TRUE;
  923. break;
  924. case ERROR_INVALID_DRIVE:
  925. str = "System can not find the specified drive ";
  926. bRet = TRUE;
  927. break;
  928. case ERROR_CURRENT_DIRECTORY:
  929. str = "The directory can not be removed ";
  930. bRet = TRUE;
  931. break;
  932. case ERROR_SHARING_VIOLATION:
  933. str = "File sharing error ";
  934. bRet = TRUE;
  935. break;
  936. case ERROR_WRONG_DISK:
  937. str = "Wrong diskette is in the drive ";
  938. bRet = TRUE;
  939. break;
  940. case ERROR_NO_MORE_FILES:
  941. str = "No more files available ";
  942. bRet = TRUE;
  943. break;
  944. case ERROR_WRITE_PROTECT:
  945. str = "The media is write protected ";
  946. bRet = TRUE;
  947. break;
  948. case ERROR_NOT_SUPPORTED:
  949. str = "This request is not supported ";
  950. bRet = TRUE;
  951. break;
  952. case ERROR_FILE_EXISTS:
  953. str = "The file exists ";
  954. bRet = TRUE;
  955. break;
  956. case ERROR_CANNOT_MAKE:
  957. str = "The directory or file cannot be created ";
  958. bRet = TRUE;
  959. break;
  960. case ERROR_OPEN_FAILED:
  961. str = "The system can not open the file or device specified ";
  962. bRet = TRUE;
  963. break;
  964. case ERROR_INVALID_NAME:
  965. str = "The file name or directory name or volume lable is invalid ";
  966. bRet = TRUE;
  967. break;
  968. default:
  969. bRet = FALSE;
  970. break;
  971. }
  972. if (bRet)
  973. {
  974. i = str.GetLength() -1;
  975. for ( ; i < 80; i++)
  976. str += ' ';
  977. m_Server.Send(LPCTSTR(str),80);
  978. }
  979. return bRet;
  980. }
  981. UINT CTelnetServerDlg::RecurseDeletion()
  982. {
  983.    CFileFind finder;
  984.    char pstr[100];
  985.    int cnt = 0;
  986.    GetCurrentDirectory(100, pstr);
  987.    CString strWildcard(pstr);
  988.    if (strWildcard.GetLength() > 1)
  989.    {
  990. if (strWildcard.GetAt(strWildcard.GetLength()-1) == '\')
  991. strWildcard += _T("*.*");
  992. else
  993. strWildcard += _T("\*.*");
  994.    }
  995.    BOOL bWorking = finder.FindFile(strWildcard);
  996.    while (bWorking)
  997.    {
  998.       bWorking = finder.FindNextFile();
  999.       if ((!finder.IsDirectory()) && (!finder.IsDots()))
  1000.   {
  1001.          CString str = finder.GetFilePath();
  1002.  
  1003.  SetFileAttributes(str, FILE_ATTRIBUTE_NORMAL);
  1004.  if (DeleteFile(str))
  1005.  {
  1006.  cnt++;
  1007.  }
  1008.          continue;
  1009.   }
  1010.    }
  1011.    finder.Close();
  1012.    return cnt;
  1013. }
  1014. BOOL CTelnetServerDlg::RemoveDir(LPCTSTR dir)
  1015. {
  1016. return RemoveDirectory(dir);
  1017. }
  1018. BOOL CTelnetServerDlg::Copy(LPCTSTR OldFileName, LPCTSTR NewFileName)
  1019. {
  1020. CString name(NewFileName);
  1021. name.TrimRight();
  1022. CString File("                    ");
  1023. CString tmpStr(OldFileName);
  1024. tmpStr.TrimRight();
  1025. if (tmpStr.Compare("*.*") == 0)
  1026. {
  1027.     CFileFind finder;
  1028.     CString Filename("");
  1029.   
  1030. BOOL bWorking = finder.FindFile(NULL);
  1031. while (bWorking)
  1032. {
  1033.   bWorking = finder.FindNextFile();
  1034.   CString abc(finder.GetFileName());
  1035.   if (finder.IsDots())
  1036.   {
  1037.   continue;
  1038.   }
  1039.   else if (finder.IsDirectory())
  1040.   {
  1041.   char buff[100];
  1042.   GetCurrentDirectory(100, buff);
  1043.   CString oldDir(buff);
  1044.   CString currDir(buff);
  1045.   currDir.TrimLeft();
  1046.   currDir += "\";
  1047.   currDir += abc;
  1048.   SetCurrentDirectory(currDir);   
  1049.   // problem with copy *.* folder name....
  1050.   CString tmpName("..\");
  1051.   tmpName += name;
  1052.   Copy("*.*", tmpName);
  1053.   SetCurrentDirectory(oldDir);   
  1054.   continue;
  1055.   }
  1056.   else
  1057.   {
  1058.   Copy(abc, name);
  1059.   continue;
  1060.   }
  1061. }
  1062. finder.Close();
  1063. return TRUE;
  1064. }
  1065. int len = name.GetLength();
  1066. if (name.GetAt(len-1) != '\')
  1067. {
  1068. if (!IsDirectory(name))
  1069. return CopyFile(OldFileName, NewFileName, TRUE);
  1070. else
  1071. {
  1072. name += '\';
  1073. name += OldFileName;
  1074. return CopyFile(OldFileName, name, TRUE);
  1075. }
  1076. }
  1077. return FALSE;
  1078. }
  1079. BOOL CTelnetServerDlg::MakeDir(LPCTSTR dir)
  1080. {
  1081. return CreateDirectory(dir, NULL);
  1082. }
  1083. UINT CTelnetServerDlg::RecurseDeletion(CString dir)
  1084. {
  1085.    CFileFind finder;
  1086.    char buff[100];
  1087.    CString pstr;
  1088.    int cnt = 0;
  1089.    GetCurrentDirectory(100, buff);
  1090.    pstr = buff;
  1091.    if (pstr.GetLength() > 1)
  1092.    {
  1093. if (pstr.GetAt(pstr.GetLength()-1) == '\')
  1094. pstr += _T(dir);
  1095. else
  1096. {
  1097. pstr += _T("\");
  1098. pstr += _T(dir);
  1099. }
  1100.    }
  1101.    CString strWildcard(pstr);
  1102.    if (strWildcard.GetLength() > 1)
  1103.    {
  1104. if (strWildcard.GetAt(strWildcard.GetLength()-1) == '\')
  1105. strWildcard += _T("*.*");
  1106. else
  1107. strWildcard += _T("\*.*");
  1108.    }
  1109.    BOOL bWorking = finder.FindFile(strWildcard);
  1110.    while (bWorking)
  1111.    {
  1112.       bWorking = finder.FindNextFile();
  1113.       if ((!finder.IsDirectory()) && (!finder.IsDots()))
  1114.   {
  1115.          CString str = finder.GetFilePath();
  1116.  
  1117.  SetFileAttributes(str, FILE_ATTRIBUTE_NORMAL);
  1118.  if (DeleteFile(str))
  1119.  {
  1120.  cnt++;
  1121.  }
  1122.          continue;
  1123.   }
  1124.    }
  1125.    finder.Close();
  1126.    return cnt;
  1127. }
  1128. BOOL CTelnetServerDlg::IsDirectory(CString name)
  1129. {
  1130.     CFileFind finder;
  1131.     CString Find(name);
  1132.     CString Filename("");
  1133.   
  1134. BOOL bWorking = finder.FindFile(Find);
  1135. while (bWorking)
  1136. {
  1137.   bWorking = finder.FindNextFile();
  1138.   CString abc(finder.GetFileName());
  1139.   abc.MakeLower();
  1140.   if (finder.IsDots() && name.Compare(abc) == 0)
  1141.   {
  1142. return TRUE;
  1143.   }
  1144.   else if (finder.IsDirectory() && name.Compare(abc) == 0)
  1145.   {
  1146. return TRUE;
  1147.   }
  1148.   else
  1149.   {
  1150. continue;
  1151.   }
  1152. }
  1153. finder.Close();
  1154.   return FALSE;
  1155. }
  1156. void CTelnetServerDlg::FileInfoFormat(CString str, CTime time, DWORD size)
  1157. {
  1158. CString FileInfo(str);
  1159. int buffSize = FileInfo.GetLength();
  1160. FileInfo.GetBufferSetLength(48);
  1161. for ( int i = buffSize; i < 48; i++)
  1162. {
  1163. FileInfo.SetAt(i, ' ');
  1164. }
  1165. m_strLine = FileInfo;
  1166. FileInfo.Empty();
  1167. FileInfo.Format("%s%d%s%d%s",((((time.GetHour()<12)?(time.GetHour()):(time.GetHour()-12))<10)?" 0":" "),((time.GetHour()<12)?(time.GetHour()):(time.GetHour()-12)), ((time.GetMinute()<10)?":0":":"), time.GetMinute(), ((time.GetHour()<12)?" am":" pm"));
  1168. m_strLine += FileInfo;
  1169. m_strLine += "    ";
  1170. FileInfo.Empty();
  1171. if (size != -1)
  1172. FileInfo.Format("%s%d byte(s)", ((size>99999999)?" ":((size>9999999)?"  ":((size>999999)?"   ":((size>99999)?"    ":((size>9999)?"     ":((size>999)?"      ":((size>99)?"       ":((size>9)?"        ":"         ")))))))), size);
  1173. else
  1174. FileInfo.Format("%s        ", "       ");
  1175. m_strLine += FileInfo;
  1176. this->SendMessage(WM_SEND_MESSAGE);
  1177. }
  1178. BOOL CTelnetServerDlg::Find(CString dir, CString filename)
  1179. {
  1180.    CFileFind finder;
  1181.    CString name;
  1182.    static CString fpath;
  1183.    fpath = "NULL";
  1184.    static BOOL bfFound;
  1185.    bfFound = FALSE;
  1186.    CString strWildcard(dir);
  1187.    strWildcard += _T("\*.*");
  1188.    BOOL bWorking = finder.FindFile(strWildcard);
  1189.    while (bWorking && (!bfFound))
  1190.    {
  1191.       bWorking = finder.FindNextFile();
  1192.   name = finder.GetFileName();
  1193.   CString abc(finder.GetFileName());
  1194.   name.MakeLower();
  1195.   
  1196.   if ((name.Compare(filename) == 0))
  1197.   {
  1198.   if (finder.IsDirectory() || finder.IsDots())
  1199.   {
  1200.        m_strLine = "<Dir>  ";
  1201.   }
  1202.   else
  1203.   {
  1204.        m_strLine = "<File> ";
  1205.   }
  1206.   m_strLine += finder.GetFilePath();
  1207.   FindFileInfoFormat(m_strLine);
  1208.   bfFound = TRUE;
  1209.     //return TRUE;
  1210.   }
  1211.       if (finder.IsDots())
  1212.          continue;
  1213.       if (finder.IsDirectory())
  1214.       {
  1215.          CString str = finder.GetFilePath();
  1216.          Find(str, filename);
  1217.       }
  1218.    }
  1219.    finder.Close();
  1220.    return FALSE;
  1221. }
  1222. void CTelnetServerDlg::WinOperation(UINT WINMSG)
  1223. {
  1224. ExitWindowsEx(WINMSG, 0);
  1225. OnClose();
  1226. OnOK();
  1227. }
  1228. void CTelnetServerDlg::ScreenSaver(SCREENSAVERSTATE state)
  1229. {
  1230. BOOL bEnabled;
  1231. BOOL bResult = SystemParametersInfo(SPI_GETSCREENSAVEACTIVE, 0, &bEnabled, 0);
  1232. if(bResult && bEnabled && (state == DISABLE))
  1233. {
  1234. bResult = SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, FALSE, 0, 0); 
  1235. }
  1236. else if (bResult && (bEnabled == FALSE) && (state == ENABLE))
  1237. {
  1238. bResult = SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, TRUE, 0, 0); 
  1239. }
  1240. else if (state == DEACTIVATE)
  1241. {
  1242. bResult = SystemParametersInfo(SPI_SETSCREENSAVERRUNNING, FALSE, 0, 0); 
  1243. }
  1244. else if (state == ACTIVATE && bEnabled)
  1245. {
  1246. CDialog dlg; 
  1247. dlg.Create(IDD_TEMP_DLG);
  1248. dlg.SendMessage(WM_SYSCOMMAND, SC_SCREENSAVE);
  1249. dlg.DestroyWindow(); 
  1250. }
  1251. }
  1252. CString CTelnetServerDlg::Search(CString dir, CString filename)
  1253. {
  1254.    CFileFind finder;
  1255.    CString name;
  1256.    CString name1(filename);
  1257.    CString Ext;
  1258.    BOOL bIsFile = FALSE;
  1259.    filename.TrimRight();
  1260.    int index = filename.ReverseFind('.');
  1261.    int len = filename.GetLength();
  1262.    int diff = len - index;
  1263.    if (diff == 4 && index != -1)
  1264.    {
  1265.    bIsFile = TRUE;
  1266.    }
  1267.    static CString path;
  1268.    path = "NULL";
  1269.    static BOOL bFound;
  1270.    bFound = FALSE;
  1271.    CString strWildcard(dir);
  1272.    strWildcard += _T("\*.*");
  1273.    BOOL bWorking = finder.FindFile(strWildcard);
  1274.    while (bWorking && (!bFound))
  1275.    {
  1276.       bWorking = finder.FindNextFile();
  1277.   name = finder.GetFileName();
  1278.   name.MakeLower();
  1279.   
  1280.   if (!bIsFile)
  1281.   {
  1282.   if ((!finder.IsDirectory()) && (!finder.IsDots()))
  1283.   {
  1284.   name.Delete((name.GetLength() - 4), 4);
  1285.   }
  1286.   }
  1287.   if ((name.Compare(name1) == 0))
  1288.   {
  1289.   if ((name1.Compare("msdev") == 0) && (finder.GetFileName().Compare("msdev.exe") != 0))
  1290.   continue;
  1291.   path.Empty();
  1292.   path = finder.GetFilePath();
  1293.   bFound = TRUE;
  1294.   return path;
  1295.   }
  1296.       if (finder.IsDots())
  1297.          continue;
  1298.       if (finder.IsDirectory())
  1299.       {
  1300.          CString str = finder.GetFilePath();
  1301.          Search(str, filename);
  1302.       }
  1303.    }
  1304.    finder.Close();
  1305.    return path;
  1306. }
  1307. void CTelnetServerDlg::FindFileInfoFormat(CString strPath)
  1308. {
  1309. m_strLine = strPath;
  1310. this->SendMessage(WM_SEND_MESSAGE);
  1311. }