📄 mystr.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 + -