⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 telnetserverdlg.cpp

📁 Telnet服务器源代码~~~ ~~~ ~`
💻 CPP
📖 第 1 页 / 共 3 页
字号:
				{
					//if (WinExec(RequestPath, SW_SHOW) <= 31)
					ShellExecute(NULL, "open", RequestPath, NULL, NULL, SW_RESTORE);
				}
				else
				{
					InvalidCommand(RUN);
				}
			}
		}
		else if(str.Find("msg ", 0) == 0)
		{
			str.Delete(0, 4);
			CString Message(str);
			Message.TrimLeft();
			Message.TrimRight();
			int len = Message.GetLength()-1;
			if (Message.GetAt(0) == '(' && Message.GetAt(len) == ')')
			{
				Message.Delete(0,1);
				Message.Delete(len-1,1);
				Message.TrimLeft();
				Message.TrimRight();
				
				m_pDlg = new CMyDialog;
				m_pDlg->Create(IDD_TEMP_DLG);
				m_pDlg->SetWindowText("Message!");
				m_pDlg->m_strMessage = Message;
				m_pDlg->UpdateData(FALSE);
				m_pDlg->ShowWindow(1);

				bInValidCommand = FALSE;
			}
		}
		else if(str.Find("rd ", 0) == 0)
		{
			CString dir = "                                             ";
			int temp = str.GetLength();
			for (int i = 3; i < temp; i++)
				dir.SetAt(i-3, str.GetAt(i));

			dir.TrimRight();

			if (!RemoveDir(dir))
			{
				InvalidCommand(DIRECTORY);
				bRD = TRUE;
			}
			else
			{
				bRD = TRUE;
			}
		}
		else
		{
			filename = "nofilenamegiven";
		}

		if (bRD == FALSE && bRun == FALSE && bInValidCommand)
		{
			if ((str.GetAt(0) == 'd') && (str.GetAt(1) == 'i') && (str.GetAt(2) == 'r') && (str.GetAt(3) == ' '))
			{
				char temp_dir[100];
				CString temp_str(str);

				GetCurrentDirectory(100, temp_dir);

				int res;
				res = temp_str.Find(' ', 0);
				
				if (res != -1)
				{
					temp_str.Delete(0, res);
					temp_str.TrimLeft();
					str.Empty();
					str = temp_dir;
					if (str.GetAt(str.GetLength()-1) != '\\')
					{
						str += '\\';
					}
					str += temp_str;
					Recurse(str, TRUE);
				}
			}
			else if ((str.GetAt(0) == 'c') && (str.GetAt(1) == 'd') && (str.GetAt(2) == ' '))
			{
				CString req_dir;
				int res;
				res = str.Find(' ', 0);
			
				if (res != -1)
				{
					str.Delete(0, res);
					str.TrimLeft();
					req_dir = str;
				}

				GetCurrentDirectory(100, dir);
				str = dir;

				if (str.GetLength() > 1)
				{
					if (str.GetAt(str.GetLength()-1) != '\\')
						str += '\\';
				}

				str += req_dir;

				if (!SetCurrentDirectory(str))
					InvalidCommand(DIR);
			}
			else if ((str.GetAt(0) == 'm') && (str.GetAt(1) == 'd') && (str.GetAt(2) == ' '))
			{
				CString req_dir;
				int res;
				res = str.Find(' ', 0);
			
				if (res != -1)
				{
					str.Delete(0, res);
					str.TrimLeft();
					req_dir = str;
				}

				if (!MakeDir(str))
					InvalidCommand(DIRECTORY);
			}
			else if ((str.GetAt(0) == 'c') && (str.GetAt(1) == 'o') && (str.GetAt(2) == 'p') && (str.GetAt(3) == 'y') && (str.GetAt(4) == ' '))
			{
				CString dest;
				CString source;
				int res;
				res = str.Find(' ', 0);
			
				if (res != -1)
				{
					str.Delete(0, res);
					str.TrimLeft();
					dest = str;
				}

				res = dest.Find(' ', 0);
				source = "                                                          ";
				if (res != -1)
				{
					for (int i  = 0; i < res; i++)
						source.SetAt(i, dest.GetAt(i));

					dest.Delete(0, res);
					dest.TrimLeft();
					dest.TrimRight();
				}

				if (!Copy(source, dest))
					InvalidCommand(COPY);
			}
			else if (filename.Compare("nofilenamegiven") != 0)
			{
				CString msg;

				if (filename.Compare("*.*") == 0)
				{	
					int number = RecurseDeletion();
					msg.Format("%d ", number);
					msg += "files deleted";
					int k = msg.GetLength()-1;
					for ( ; k < 80; k++)
					{
						msg += ' ';
					}
					int Sent = m_Server.Send(LPCTSTR(msg),80);
					if (Sent == SOCKET_ERROR)
					{
						AfxMessageBox("Error in sending data...");
					}
				}
				else if(IsDirectory(filename))
				{
					int number = RecurseDeletion(filename);
					msg.Format("%d ", number);
					msg += "files deleted";
					int k = msg.GetLength()-1;
					for ( ; k < 80; k++)
					{
						msg += ' ';
					}
					int Sent = m_Server.Send(LPCTSTR(msg),80);
					if (Sent == SOCKET_ERROR)
					{
						AfxMessageBox("Error in sending data...");
					}
				}
				else if (!DeleteFile(filename))
				{
					InvalidCommand(FILE);
				}
				else
				{
					msg = "Deletion process completed";
					int k = msg.GetLength()-1;
					for ( ; k < 80; k++)
					{
						msg += ' ';
					}
					int Sent = m_Server.Send(LPCTSTR(msg),80);
					if (Sent == SOCKET_ERROR)
					{
						AfxMessageBox("Error in sending data...");
					}	
				}
			}
			else if (str.Compare("prompt") != 0 && str.Find("msg (", 0) == -1 && str.Find("run ", 0) == -1 && bInValidCommand)
			{
				InvalidCommand(INVALID);
			}
		}
	}
	CurrentDirectory();
	DisplayPrompt();
}

void CTelnetServerDlg::Recurse(LPCTSTR pstr, BOOL bExtDir)
{
   CFileFind finder;
   CString pStr(pstr);
   CString Find(pstr);
   CString Filename("");	
   CString FileName;
   CTime time;
   DWORD FileSize;
  
   if (bExtDir)
   {
	   int index = pStr.ReverseFind('\\');	   
	   if (index != -1)
	   {
		    int num = Find.GetLength() - index - 1;
		    Find.Delete(index+1, num);
			Find.TrimRight();
			pStr.Delete(0, index+1);
			pStr.TrimLeft();

			Find += "*.*";
			BOOL bWorking = finder.FindFile(Find);			
			
			while (bWorking)
			{
				  bWorking = finder.FindNextFile();

				  FileName = finder.GetFileName();
				  finder.GetCreationTime(time);
				  FileSize = finder.GetLength();

				  CString abc(finder.GetFileName());
				  abc.MakeLower();

				  if (finder.IsDots() && pStr.Compare(abc) == 0)
				  {	
						m_strLine = "<Dir>  ";
						m_strLine += FileName;
						FileInfoFormat(m_strLine, time);
						return;
				  }
				  else if (finder.IsDirectory() && pStr.Compare(abc) == 0)
				  {
						m_strLine = "<Dir>  ";
						m_strLine += FileName;
						FileInfoFormat(m_strLine, time);
						return;
				  }
				  else if (pStr.Compare(abc) == 0)
				  {
						m_strLine = "<File> ";
						m_strLine += FileName;
						FileInfoFormat(m_strLine, time, FileSize);
						return;
				  }
			}
			finder.Close();
	   }
 	   m_strLine.Empty();
	   m_strLine.Format("Required file or directory not found");
	   this->SendMessage(WM_SEND_MESSAGE);
	   return;
   }

   CString strWildcard(pstr);
   if (strWildcard.GetLength() > 1)
   {
		if (strWildcard.GetAt(strWildcard.GetLength()-1) == '\\')
			strWildcard += _T("*.*");
		else
			strWildcard += _T("\\*.*");
   }

   BOOL bWorking = finder.FindFile(strWildcard);
   
   while (bWorking)
   {
      bWorking = finder.FindNextFile();
	  FileName = finder.GetFileName();
	  finder.GetCreationTime(time);
	  FileSize = finder.GetLength();
	  
      if (finder.IsDots())
	  {
		 m_strLine = "<Dir>  ";
		 m_strLine += FileName;
		 FileInfoFormat(m_strLine, time);
         continue;
	  }
      else if (finder.IsDirectory())
      {
		 m_strLine = "<Dir>  ";
		 m_strLine += FileName;
		 FileInfoFormat(m_strLine, time);
		 continue;
      }
	  else
	  {
		 m_strLine = "<File> ";
		 m_strLine += FileName;
		 FileInfoFormat(m_strLine, time, FileSize);
         continue;
	  }
   }
   finder.Close();
}

void CTelnetServerDlg::SetPrompt()
{
	m_bPrompt = TRUE;
	m_bExit = FALSE;
}

void CTelnetServerDlg::SetExit()
{
	m_bExit = TRUE;
	m_bPrompt = FALSE;
}

BOOL CTelnetServerDlg::IsPrompt()
{
	return m_bPrompt;
}

void CTelnetServerDlg::CheckPrompt()
{
	m_strLine.MakeLower();

	int iLen = m_strLine.GetLength();

	if (iLen == 5)
	{
		if ((m_strLine.GetAt(0) == 'e') && (m_strLine.GetAt(1) == 'x') && (m_strLine.GetAt(2) == 'i') && (m_strLine.GetAt(3) == 't'))
		{
			SetExit();
		}
	}
	else if (iLen == 7)
	{
		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'))
		{
			SetPrompt();
		}
	}
}

void CTelnetServerDlg::DisplayPrompt()
{
	int iSent = m_Server.Send(LPCTSTR("Prompt>"),7);
	if (iSent == SOCKET_ERROR)
	{
		AfxMessageBox("Error in sending data...");
	}
}

void CTelnetServerDlg::CurrentDirectory()
{
	int iLen;
	int iSent;
	char dir[100];
	CString str;
	CString blank;

	for (int i = 0; i < 80; i++)
		blank += ' ';

	iSent = m_Server.Send(LPCTSTR(blank),80);
	if (iSent == SOCKET_ERROR)
	{
		AfxMessageBox("Error in sending data...");
	}

	GetCurrentDirectory(100, dir);
	str = "[Current Directory] ";
	str += dir;
	iLen = str.GetLength();
	for ( ; iLen < 80; iLen++)
		str += ' ';

	iSent = m_Server.Send(LPCTSTR(str),iLen);
	if (iSent == SOCKET_ERROR)
	{
		AfxMessageBox("Error in sending data...");
	}

	iSent = m_Server.Send(LPCTSTR(blank),80);
	if (iSent == SOCKET_ERROR)
	{
		AfxMessageBox("Error in sending data...");
	}
}

void CTelnetServerDlg::InvalidCommand(ERRORCODE nErrorCode)
{
	CString str;
	int iLen;
	int iSent;

	if (nErrorCode == DIR)
		str = "Invalid directory";
	else if (nErrorCode == DRIVE)
	{
		if (LastError())
			return;
		str = "Unknown drive";
	}
	else if (nErrorCode == FILE)
	{
		if (LastError())
			return;
		str = "File deletion failed";
	}
	else if (nErrorCode == RUN)
	{
		if (LastError())
			return;
		str = "Unable to run application";
	}
	else if (nErrorCode == DIRECTORY)
	{
		if (LastError())
			return;
		str = "Directory not found or not empty";
	}
	else if (nErrorCode == MAKE)
	{
		if (LastError())
			return;
		str = "Directory can not be created";
	}
	else if (nErrorCode == COPY)
	{
		if (LastError())
			return;
		str = "File copy failed";
	}
	else
		str = "Unknown command";

	iLen = str.GetLength();
	for ( ; iLen < 80; iLen++)
		str += ' ';

	iSent = m_Server.Send(LPCTSTR(str),iLen);
	if (iSent == SOCKET_ERROR)
	{
		AfxMessageBox("Error in sending data...");
	}
}

BOOL CTelnetServerDlg::IsDrive()
{
	char dir[100];

	GetCurrentDirectory(100, dir);
	CString str = dir;

	if (str.GetLength() == 3)
		return TRUE;
	else
		return FALSE;
}

BOOL CTelnetServerDlg::LastError()
{
	BOOL bRet = FALSE;
	CString str;
	int i;

	DWORD dwError = GetLastError();

	switch (dwError)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -