📄 telnetserverdlg.cpp
字号:
{
//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 + -