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

📄 public.h

📁 福建博洋教育C/C++软件项目实战Linux网络编程阶段:FTP服务器开发
💻 H
字号:
#ifndef __FTP_PUBLIC_H__
#define __FTP_PUBLIC_H__

#define MAX_BUF_SIZE 1024
#define MIN_BUF_SIZE  128
#define FIL_BUF_SIZE  512

#include <pwd.h>
#include <sys/ipc.h>

#define FTP_DATACONN	    "150 Here comes the derectory listing!\r\n"

#define FTP_NOOPOK		    "200 NOOP OK\r\n"
#define FTP_PORTOK		    "200 Port Command successfully\r\n"
#define FTP_EPRTOK	        "200"
#define FTP_UMASKOK		    "200"
#define FTP_CHMODOK	 	    "200"
#define FTP_EPSVALLOK       "200"
#define FTP_STRUOK          "200"
#define FTP_MODEOK          "200"
#define FTP_PBSZOK          "200"
#define FTP_PROTOK          "200"
#define FTP_ALLOOK          "202"
#define FTP_FEAT            "211"
#define FTP_STATOK          "211 End of status.\r\n"
#define FTP_MDTMOK          "213"
#define FTP_STATFILE_OK     "213"
#define FTP_SITEHELP        "214"
#define FTP_HELP            "214 All implement Command\r\n"
#define FTP_SYSTOK          "215 Unix Type L8!\r\n"
#define FTP_GREET           "220 Connect Successfully!\r\n"
#define FTP_REINOK			"220 Services ready for new user\r\n"
#define FTP_GOODBYE         "221 GoodBye!\r\n"
#define FTP_ABOR_NOCONN     "225 Not file on trans\r\n"
#define FTP_TRANSFEROK      "226 File send OK\r\n"
#define FTP_ABOROK          "226 About successfully!\r\n"
#define FTP_EPSVOK          "229"
#define FTP_LOGINOK         "230 Login Successfully!\r\n"
#define FTP_AUTHOK          "234"
#define FTP_CWDOK           "250 Directory successfully changed\r\n"
#define FTP_RMDIROK         "250 Delete directory successfully!\r\n"
#define FTP_DELEOK          "250 Delete file successfully!\r\n"
#define FTP_RENAMEOK        "250 Rename successfully!\r\n"
#define FTP_PWDOK           "257"
#define FTP_MKDIROK         "257 Make directory successfully!\r\n"

#define FTP_GIVEPWORD       "331 User's name OK, next checking password!\r\n"
#define FTP_RESTOK          "350 Rest is successfully!\r\n"
#define FTP_RNFROK          "350 Ready for RNTO!\r\n"
#define FTP_IDLE_TIMEOUT    "421"
#define FTP_DATA_TIMEOUT    "421"
#define FTP_TOO_MANY_USERS  "421"
#define FTP_IP_LIMIT        "421"
#define FTP_IP_DENY         "421"
#define FTP_TLS_FAIL        "421"
#define FTP_BADSENDCONN     "425"
#define FTP_BADSENDNET      "426 Trans abort!\r\n"
#define FTP_BADSENDFILE     "451"

#define FTP_BADCMD          "500 Undnown Command!\r\n"
#define FTP_BADOPTS         "501"
#define FTP_COMMANDNOTIMPL  "502 Ftp Command Not Implement\r\n"
#define FTP_NEEDUSER        "503 You must USER first\r\n"
#define FTP_NEEDRNFR        "503 You must RNFR first!\r\n"
#define FTP_BADPBSZ         "503"
#define FTP_BADPROT         "503"
#define FTP_BADSTRU         "504"
#define FTP_BADMODE         "504"
#define FTP_BADAUTH         "504"
#define FTP_NOSUCHPROT      "504"
#define FTP_NEEDENCRYPT     "521"
#define FTP_EPSVBAD         "522"
#define FTP_DATATLSBAD      "522"
#define FTP_LOGINERR        "530 Login Fail!\r\n"
#define FTP_NOHANDLEPROT    "536"
#define FTP_RMDIRFAIL		"550 Remove directory fail!\r\n"
#define FTP_FILEFAIL        "550 Change dir error Fail!\r\n"
#define FTP_DELEFAIL		"550 Delete fail fail!\r\n"
#define FTP_MKDIRFAIL		"550 Make directory fail!\r\n"
#define FTP_NOPERM          "550 Failed to change directory\r\n"
#define FTP_RENAMEFAIL		"550 rename fail!\r\n"
#define FTP_UPLOADFAIL      "553 Upload fail!\r\n"

struct state_struct
{
	int						upFiles;
	int					  downFiles;
	long				  upTraffic;
	long				downTraffic;
};

union semun
{
	int val;
	struct semid_ds *buf;
	unsigned short *array;
};

/* 登入状态 */
typedef struct loginstat_struct
{
	int		  				      s;
	int					     Socket;
	int					    sSocket;
	char		uname[MAX_BUF_SIZE];
	char	    upass[MAX_BUF_SIZE];
	char		  dir[MAX_BUF_SIZE];
	char	  homeDir[MAX_BUF_SIZE];
	char	 	 type[MIN_BUF_SIZE];
	char  		   ip[MIN_BUF_SIZE];
	char	    oFile[MAX_BUF_SIZE];
	int						   port;
	int	   				    isLogin;
	int					  needParam;
	long				 	 offset;
	int						   mode;
	int						upFiles;
	int					  downFiles;
	long				  upTraffic;
	long				downTraffic;
	int					   anologin;
	int					  anoupload;
	int					  anodwload;
	int						 MAX_UP;
	int						 MAX_DW;
	int					   MAX_TIME;
} LoginState;

extern int shmkey;
extern int semkey;
extern struct loginstat_struct State;
extern void *sMemory;
extern struct state_struct *ftpState;
extern int sid;

/* 返回类型 */
enum LOGIN {USER_EMPTY, PWD_EMPTY, NO_THIS_USER, GET_PASSWORD_FAIL, PASSWORD_ERROR, USER_OK,PASS_OK};

/* 验证用户 */
int Login(char *user, char *pwd, struct passwd *userInfo);
/* 写入数据 */
int Read(int fd, char *buf, int size);
/* 读取数据 */
int Write(int fd, char *buf, int size);
/* 去除换行和回车 */
void rmlncr(char *str);
/* 得到命令 */
int GetCommand(char **buf, char **cmd);
/* 得到当前路径 */
int GetHomeDir(char *user, char *path);
/* 去除换行和回车 */
void Rmlfcr(char *str);
/* 得到ip和端口 */
int GetIpPort(char *text, char *ip, int *port);
/* ip和端口 */
int PutIpPort(char *sIp, char *ip, int port);
/* 去除右空格 */
int RTrim(char *str);
/* 读取配置文件 */
int GetConfig(char *flag, char *value);
/* 得到本地IP */
int GetLocalIp(char *ip);
/* 传输完毕 */
void TransOK(int i);
/* 得到共享内存 */
struct state_struct *GetFtpStateMomory(int *sid, int flag);
/* 读取配置信息 */
int GetSysConfig();
/* 用户 */
int GetUser(char *user, struct passwd **userInfo);
/* 字符串大写 */
char *strupp(char *str);
/* 初始化信号量 */
int initSem();

#endif

⌨️ 快捷键说明

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