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

📄 mystr.c

📁 Linux下的ftp服务器
💻 C
字号:
#include "mystr.h"

/*===============================================================================
function:将以windows下的以\r\n结束的字符串转换为linux下的以\n结束字符串
===============================================================================*/
void myftp_ascii_to_bin(char* cmd_line)
{
	int i=0;
	while (*(cmd_line+i)!='\r')
	{
		i++;
	}
	if (*(cmd_line+i+1)=='\n')
	{
		cmd_line[i]='\0';
		cmd_line[i+1]='\0';
	}
}

/*===============================================================================
function:申请空间存放命令行
===============================================================================*/
void myftp_alloc_mystr(pMYSTR *pmystr)
{
	*pmystr=(pMYSTR)malloc(sizeof(MYSTR));
	
	if(!(*pmystr))
	{	
#ifdef __MYDEBUG
		die("alloc str mem error.\n");
#endif
	}
}

/*===============================================================================
function:分割客户端命令行字符串
===============================================================================*/
int myftp_splite_cmd_line(pMYSTR pmystr)
//这里的设计,只允许客户端输入的命令格式为:command arguments,即命令和参数之间只能有一个\
空格,且命令行字符串头尾不允许有空格。
{
	char tmp=*pmystr->cmd_line;
	/******************************************************************************************************************************
	** FTP的ABOR:
	** 在FTP中,有一个ABOR命令,用来中断前面正在执行的命令。譬如在上传下载的过程中,可以在Control 
	** Connection上发送ABOR命令来中断上传或者下载。关于ABOR命令的正确用法,在RFC959中有详细描述:
	** 1. 在Control Connection上发送Telnet的IP命令,
	** 2. 在Control Connection上发送Telnet的Synch信号,
	** 3. 在Control Connection上发送ABOR命令
	** 4. 在Control Connection上接受ABOR命令的结果
	** IP 和Synch都是Telnet的控制信号,在Telnet中,发送控制信号前需要发送一个字符255,然后跟着控制信号的字符。IP的字符是244,因 
	** 此,在发送的时候就是 sendall(chr(255)+chr(244))。
	** 而Synch信号则是以TCP urgent的方式发送的DM命令,DM的字符是242,在socket编程中,通过MSG_OOB选项来提示TCP以urgent方式发送命令。因此, 
	** 发送DM的命令就是 sendall(chr(255)+chr(242), MSG_OOB)。

	** 再结合Minisniffer工具,发现,确实在每次发送ABOR命令之前有两组数据,用hex进制表示,即为:
	** FF F4 和FF F2。其中 FF F4 就是IP控制信号、FF F2则为Synch信号。
	*******************************************************************************************************************************/
	if(tmp&0x80)//根据以上注释,ftp服务器在解释命令时,必须判断第一个字符的高半字节是否为1。若为1,则表示客户端\
		发送的是IP、synch信号,说明客户端即将发送ABOR信号。所以必须返回去读取接下来的ABOR信号。
	{
		return FALSE;
	}
	else
	{
		char* tmp=pmystr->cmd_line;
		while (*tmp!=' '&&*tmp!='\r')
		{
			tmp++;
		}
		strncpy(pmystr->cmd,pmystr->cmd_line,tmp-pmystr->cmd_line);
 		tmp++;
		strcpy(pmystr->arg,tmp);
		myftp_ascii_to_bin(pmystr->arg);
		return TRUE;
	}
}

⌨️ 快捷键说明

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