📄 csock_info.cs
字号:
szFloder = String.Format("{0}/{1}{2}/{3}",defcmd.CMS_HOME,m_sAccount_Home,m_sPath,szFloder);
logs(szFloder);
if (!Directory.Exists(szFloder))
{
bResult = ResultPacket(defcmd.RND, defcmd.CWDNOTEXISTS);
stream.Write(bResult, 0, bResult.Length);
break;
}
String szNewFloder = Encoding.GetEncoding(936).GetString(Packet, nIndex+1, SearchChar(Packet, nIndex + 1)-nIndex-1);
szNewFloder = String.Format("{0}/{1}{2}/{3}",defcmd.CMS_HOME,m_sAccount_Home,m_sPath,szNewFloder);
logs(szNewFloder);
if (Directory.Exists(szNewFloder))
{
bResult = ResultPacket(defcmd.RND, defcmd.MKDEXISTS);
stream.Write(bResult, 0, bResult.Length);
break;
}
Directory.Move(szFloder, szNewFloder);
bResult = ResultPacket(defcmd.RND, defcmd.OK);
stream.Write(bResult, 0, bResult.Length);
}
stream.Flush();
break;
case defcmd.RNF:
logs("cc请求修改文件夹名字");
if (!m_Enable)
{
bResult = ResultPacket(defcmd.NOTCONNECT, defcmd.RNF);
stream.Write(bResult, 0, bResult.Length);
}
else
{
//创建目录信息不足
if (Packet.Length <= 8)
{
bResult = ResultPacket(defcmd.RNF, defcmd.RNFERROR);
stream.Write(bResult, 0, bResult.Length);
break;
}
nIndex = SearchChar(Packet, 8);
String szFile = Encoding.GetEncoding(936).GetString(Packet, 8, nIndex - 8);
szFile = String.Format("{0}/{1}{2}/{3}",defcmd.CMS_HOME,m_sAccount_Home,m_sPath,szFile);
logs(szFile);
if (!File.Exists(szFile))
{
bResult = ResultPacket(defcmd.RNF, defcmd.CWDNOTEXISTS);
stream.Write(bResult, 0, bResult.Length);
break;
}
String szNewFile = Encoding.GetEncoding(936).GetString(Packet, nIndex+1, SearchChar(Packet, nIndex + 1)-nIndex-1);
szNewFile = String.Format("{0}/{1}{2}/{3}",defcmd.CMS_HOME,m_sAccount_Home,m_sPath,szNewFile);
logs(szNewFile);
if (File.Exists(szNewFile))
{
bResult = ResultPacket(defcmd.RNF, defcmd.MKDEXISTS);
stream.Write(bResult, 0, bResult.Length);
break;
}
File.Move(szFile, szNewFile);
bResult = ResultPacket(defcmd.RNF, defcmd.OK);
stream.Write(bResult, 0, bResult.Length);
}
stream.Flush();
break;
case defcmd.CWD:
logs("请求改变当前目录");
if (!m_Enable)
{
bResult = ResultPacket(defcmd.NOTCONNECT, defcmd.CWD);
stream.Write(bResult, 0, bResult.Length);
}
else
{
String szFloder = Encoding.GetEncoding(936).GetString(Packet, 8, Packet.Length - 9);
logs(szFloder);
if (szFloder == "/")
{
logs("root");
bResult = ResultPacket(defcmd.CWD, defcmd.OK);
stream.Write(bResult, 0, bResult.Length);
stream.Flush();
m_sPath = "";
break;
}
String szFloder_test = String.Format("{0}/{1}{2}",defcmd.CMS_HOME,m_sAccount_Home,szFloder);
logs(szFloder_test);
if (!Directory.Exists(szFloder_test))
{
bResult = ResultPacket(defcmd.CWD, defcmd.CWDNOTEXISTS);
stream.Write(bResult, 0, bResult.Length);
break;
}
m_sPath = szFloder;
bResult = ResultPacket(defcmd.CWD, defcmd.OK);
stream.Write(bResult, 0, bResult.Length);
}
stream.Flush();
break;
case defcmd.PWD:
logs("请求改变当前目录");
if (!m_Enable)
{
bResult = ResultPacket(defcmd.NOTCONNECT, defcmd.PWD);
stream.Write(bResult, 0, bResult.Length);
}
else
{
if (null == (bResult = ResultPacket(defcmd.PWD, defcmd.OK)))
bResult = ResultPacket(defcmd.UNKNOWERROR, defcmd.PWD);
stream.Write(bResult, 0, bResult.Length);
}
stream.Flush();
break;
case defcmd.DELE:
logs("请求删除文件!");
if (!m_Enable)
{
bResult = ResultPacket(defcmd.NOTCONNECT, defcmd.DELE);
stream.Write(bResult, 0, bResult.Length);
}
else
{
String szFile = Encoding.GetEncoding(936).GetString(Packet, 8, Packet.Length - 9);
String szFilePath = String.Format("{0}/{1}{2}/{3}",defcmd.CMS_HOME,m_sAccount_Home,m_sPath,szFile);
if (!File.Exists(szFilePath))
{
bResult = ResultPacket(defcmd.DELE, defcmd.CWDNOTEXISTS);
stream.Write(bResult, 0, bResult.Length);
break;
}
File.Delete(szFilePath);
if (null == (bResult = ResultPacket(defcmd.DELE, defcmd.OK)))
bResult = ResultPacket(defcmd.UNKNOWERROR, defcmd.DELE);
stream.Write(bResult, 0, bResult.Length);
}
stream.Flush();
break;
default:
if (!m_Enable)
{
bResult = ResultPacket(defcmd.NOTCONNECT, cmd);
stream.Write(bResult, 0, bResult.Length);
}
else
{
bResult = ResultPacket(cmd, defcmd.UNKNOWERROR);
stream.Write(bResult, 0, bResult.Length);
}
stream.Flush();
break;
}
}
catch(Exception ep)
{
logs("[ParseCC_Cmd]error:" + ep.Message);
return;
}
}
private byte [] ResultPacket(int PacketType, int Result)
{
MemoryStream ms = null;
byte [] bTmp = null;
try
{
switch(PacketType)
{
case defcmd.CONNECT:
bTmp = new byte[17];
//包长度
Buffer.BlockCopy(BitConverter.GetBytes(17), 0, bTmp, 0, 4);
//命令类型
Buffer.BlockCopy(BitConverter.GetBytes(defcmd.CONNECT), 0, bTmp, 4, 4);
//seq
Buffer.BlockCopy(BitConverter.GetBytes(0), 0, bTmp, 8, 4);
//result
Buffer.BlockCopy(BitConverter.GetBytes(Result), 0, bTmp, 12, 4);
//Version
bTmp[16] = defcmd.Version;
return bTmp;
case defcmd.ACTIION_TEST:
bTmp = new byte[20];
//包长度
Buffer.BlockCopy(BitConverter.GetBytes(20), 0, bTmp, 0, 4);
//命令类型
Buffer.BlockCopy(BitConverter.GetBytes(defcmd.ACTIION_TEST), 0, bTmp, 4, 4);
//seq
Buffer.BlockCopy(BitConverter.GetBytes(Result), 0, bTmp, 8, 4);
//time
Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);
return bTmp;
case defcmd.NOTCONNECT:
bTmp = new byte[31];
//包长度
Buffer.BlockCopy(BitConverter.GetBytes(31), 0, bTmp, 0, 4);
//命令类型
Buffer.BlockCopy(BitConverter.GetBytes(Result), 0, bTmp, 4, 4);
//seq
Buffer.BlockCopy(BitConverter.GetBytes(defcmd.NOTCONNECT), 0, bTmp, 8, 4);
//time
Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);
//result
Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes("NOTCONNECT\n"), 0, bTmp, 20, 11);
return bTmp;
case defcmd.FLALL:
String szFolder = String.Format("{0}/{1}{2}",defcmd.CMS_HOME,m_sAccount_Home,m_sPath);
logs("当前路径为:"+szFolder);
DirectoryInfo di = new DirectoryInfo(szFolder);
FileSystemInfo[] dirs = di.GetFileSystemInfos();
//打包包体
ms = new MemoryStream();
Type dtype = Type.GetType("System.IO.DirectoryInfo");
foreach (FileSystemInfo fsi in dirs)
{
logs(String.Format("{0}\n", fsi.Name));
byte []bName = null;
if (fsi.GetType().Equals(dtype))
{
bName = Encoding.GetEncoding(936).GetBytes(String.Format("D{0}\n", fsi.Name));
ms.Write(bName, 0, bName.Length);
}
else
{
bName = Encoding.GetEncoding(936).GetBytes(String.Format("F{0}\n", fsi.Name));
ms.Write(bName, 0, bName.Length);
}
}
if (ms.Length <= 0)
ms.Write(Encoding.GetEncoding(936).GetBytes("nofileslist\n"), 0, 12);
bTmp = new byte[ms.Length + 20];
//包长度
Buffer.BlockCopy(BitConverter.GetBytes(ms.Length + 20), 0, bTmp, 0, 4);
//命令类型
Buffer.BlockCopy(BitConverter.GetBytes(defcmd.FLALL), 0, bTmp, 4, 4);
//seq
Buffer.BlockCopy(BitConverter.GetBytes(Result), 0, bTmp, 8, 4);
//time
Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);
//pack body
Buffer.BlockCopy(ms.ToArray(), 0, bTmp, 20, (int)ms.Length);
ms.Close();
di = null;
return bTmp;
case defcmd.MKD:
bTmp = new byte[20];
//包长度
Buffer.BlockCopy(BitConverter.GetBytes(20), 0, bTmp, 0, 4);
//命令类型
Buffer.BlockCopy(BitConverter.GetBytes(defcmd.MKD), 0, bTmp, 4, 4);
//seq
Buffer.BlockCopy(BitConverter.GetBytes(Result), 0, bTmp, 8, 4);
//time
Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);
return bTmp;
case defcmd.RMD:
bTmp = new byte[20];
//包长度
Buffer.BlockCopy(BitConverter.GetBytes(20), 0, bTmp, 0, 4);
//命令类型
Buffer.BlockCopy(BitConverter.GetBytes(defcmd.RMD), 0, bTmp, 4, 4);
//seq
Buffer.BlockCopy(BitConverter.GetBytes(Result), 0, bTmp, 8, 4);
//time
Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);
return bTmp;
case defcmd.RND:
bTmp = new byte[20];
//包长度
Buffer.BlockCopy(BitConverter.GetBytes(20), 0, bTmp, 0, 4);
//命令类型
Buffer.BlockCopy(BitConverter.GetBytes(defcmd.RND), 0, bTmp, 4, 4);
//seq
Buffer.BlockCopy(BitConverter.GetBytes(Result), 0, bTmp, 8, 4);
//time
Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);
return bTmp;
case defcmd.RNF:
bTmp = new byte[20];
//包长度
Buffer.BlockCopy(BitConverter.GetBytes(20), 0, bTmp, 0, 4);
//命令类型
Buffer.BlockCopy(BitConverter.GetBytes(defcmd.RNF), 0, bTmp, 4, 4);
//seq
Buffer.BlockCopy(BitConverter.GetBytes(Result), 0, bTmp, 8, 4);
//time
Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);
return bTmp;
case defcmd.CWD:
bTmp = new byte[20];
//包长度
Buffer.BlockCopy(BitConverter.GetBytes(20), 0, bTmp, 0, 4);
//命令类型
Buffer.BlockCopy(BitConverter.GetBytes(defcmd.CWD), 0, bTmp, 4, 4);
//seq
Buffer.BlockCopy(BitConverter.GetBytes(Result), 0, bTmp, 8, 4);
//time
Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);
return bTmp;
case defcmd.PWD:
ms = new MemoryStream();
if ("" == m_sPath || null == m_sPath)
bTmp = Encoding.GetEncoding(936).GetBytes("/\n");
else
bTmp = Encoding.GetEncoding(936).GetBytes(m_sPath+"\n");
ms.Write(bTmp, 0, bTmp.Length);
//打包
bTmp = new byte[ms.Length + 20];
//包长度
Buffer.BlockCopy(BitConverter.GetBytes(bTmp.Length), 0, bTmp, 0, 4);
//命令类型
Buffer.BlockCopy(BitConverter.GetBytes(defcmd.PWD), 0, bTmp, 4, 4);
//seq
Buffer.BlockCopy(BitConverter.GetBytes(Result), 0, bTmp, 8, 4);
//time
Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);
//curr_path
Buffer.BlockCopy(ms.ToArray(), 0, bTmp, 20, (int)ms.Length);
return bTmp;
case defcmd.DELE:
bTmp = new byte[20];
//包长度
Buffer.BlockCopy(BitConverter.GetBytes(20), 0, bTmp, 0, 4);
//命令类型
Buffer.BlockCopy(BitConverter.GetBytes(defcmd.DELE), 0, bTmp, 4, 4);
//seq
Buffer.BlockCopy(BitConverter.GetBytes(Result), 0, bTmp, 8, 4);
//time
Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);
return bTmp;
default:
bTmp = new byte[20];
//包长度
Buffer.BlockCopy(BitConverter.GetBytes(20), 0, bTmp, 0, 4);
//命令类型
Buffer.BlockCopy(BitConverter.GetBytes(Result), 0, bTmp, 4, 4);
//seq
Buffer.BlockCopy(BitConverter.GetBytes(defcmd.UNKNOWERROR), 0, bTmp, 8, 4);
//time
Buffer.BlockCopy(Encoding.GetEncoding(936).GetBytes(DateTime.Now.ToString("yyyyMMdd")), 0, bTmp, 12, 8);
return bTmp;
}
}
catch(Exception ep)
{
logs("[ResultPacket]error:" + ep.Message);
return null;
}
}
private bool CheckUser(String Account, byte [] Sour, String Timestamp)
{
/*
String szPack = "";
for (int i = 0 ; i < Sour.Length; i ++)
szPack = String.Format("{0}[{1}]", szPack, Sour[i]);
logs(szPack);
*/
//打包AuthenticatorSource
byte [] bTmp = Encoding.GetEncoding(936).GetBytes(String.Format("{0}000000000{1}000000000{2}", Account, "123", Timestamp));
// This is one implementation of the abstract class MD5.
MD5 md5 = new MD5CryptoServiceProvider();
bTmp = md5.ComputeHash(bTmp);
md5 = null;
if (bTmp.Length != Sour.Length)
return false;
for (int i = 0 ; i < Sour.Length; i ++)
if (bTmp[i] != Sour[i])
return false;
return true;
}
/// <summary>
/// 查找数组位置
/// </summary>
/// <param name="Value">源数组</param>
/// <returns>字符'\n'位置</returns>
private int SearchChar(byte [] Value)
{
for(int i=0; i< Value.Length; i++)
{
if (Value[i] == 10)
return i;
}
return -1;
}
/// <summary>
/// 从指定数组位置中开始查找字符位置
/// </summary>
/// <param name="Value">源数组</param>
/// <param name="index">源数组开始位置</param>
/// <returns>字符'\n'位置</returns>
private int SearchChar(byte [] Value, int index)
{
for(int i=index; i< Value.Length; i++)
{
if (Value[i] == 10)
return i;
}
return -1;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -