-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFTP.h
More file actions
84 lines (77 loc) · 2.12 KB
/
FTP.h
File metadata and controls
84 lines (77 loc) · 2.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/*************************************************************************
> File Name: FTP.h
> Author: MidCHeck
> Mail: midcheck@foxmail.com
> Created Time: 2019年07月01日 星期一 20时25分18秒
************************************************************************/
#ifndef MIDCHECK_FTP_H
#define MIDCHECK_FTP_H
#include <unordered_map>
#include <iostream>
#include <string.h>
#include "debug.h"
namespace MidCHeck{
typedef enum {
USER, PASS, CWD, REIN, QUIT, PORT, PASV, TYPE,
STRU, MODE, SIZE, RETR, STOR, ALLO, REST, RNFT,
RNTO, ABOR, DELE, RMD, MKD, PWD, LIST, NLST,
SYST, HELP, NOOP, CDUP, ERRCOMMAND
} COMMAND;
/*用户状态*/
typedef enum {
/*语法错误, 非法用户,合法用户*/
SYNTAXERR, ILLEGAL, LEGAL,
/*未登录,已登录,已退出*/
NOTLOGGED, LOGGED, QUITED,
/*正在传输中, PORT模式,PASV模式*/
TRANSING, MODEPORT, MODEPASV,
} Usrstat;
inline void InitMap(std::unordered_map<std::string, COMMAND>& cmd_map){
cmd_map["USER"] = USER;
cmd_map["PASS"] = PASS;
cmd_map["CWD"] = CWD;
cmd_map["CDUP"] = CDUP;
cmd_map["QUIT"] = QUIT;
cmd_map["REIN"] = REIN;
cmd_map["PORT"] = PORT;
cmd_map["PASV"] = PASV;
cmd_map["TYPE"] = TYPE;
cmd_map["STRU"] = STRU;
cmd_map["MODE"] = MODE;
cmd_map["SIZE"] = SIZE;
cmd_map["RETR"] = RETR;
cmd_map["STOR"] = STOR;
cmd_map["ALLO"] = ALLO;
cmd_map["REST"] = REST;
cmd_map["RNFT"] = RNFT;
cmd_map["RNTO"] = RNTO;
cmd_map["ABOR"] = ABOR;
cmd_map["DELE"] = DELE;
cmd_map["RMD"] = RMD;
cmd_map["MKD"] = MKD;
cmd_map["PWD"] = PWD;
cmd_map["LIST"] = LIST;
cmd_map["NLST"] = NLST;
cmd_map["SYST"] = SYST;
cmd_map["HELP"] = HELP;
cmd_map["NOOP"] = NOOP;
}
/*
* 为了使用默认参,使用inline
* 功能: 把在buf里wd指定的子字符串的首位替换成'\0',去掉结束标志
*/
inline char* replace(char *buf, const char* wd = "\n"){
if(buf == nullptr) return nullptr;
char *_ptr_ = strstr(buf, wd);
if(_ptr_ == nullptr){
return nullptr;
}else if(*(_ptr_-1) == '\r'){
*(_ptr_-1) = '\0';
}else{
*_ptr_ = '\0';
}
return ++_ptr_;
}
void parse_ip(char *src, uint16_t& port);
} // end namespace MidCHeck
#endif