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

📄 public.h

📁 linux下的FTP服务器。支持现在主流的FTP客户端软件。增加了一些额外的功能。
💻 H
字号:
/*
	基础公共函数 - 头文件
*/

#ifndef PUBLIC_H_
#define PUBLIC_H_


#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <dirent.h>
#include <sys/time.h>
#include <time.h>
#include<stdio.h>
#include<stdlib.h>
#include<signal.h>
#include<fcntl.h>
#include<netdb.h>
#include<sys/param.h>
#include<sys/stat.h>
#include<errno.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <errno.h>
#include<unistd.h>
#include<sys/types.h>
#include<stdlib.h>
#include<stdio.h>
#include <linux/limits.h>
#include <signal.h>
#include <limits.h>
#include<unistd.h>
#include<pwd.h>
#include<shadow.h>
#include<string.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <fcntl.h>
#include <netdb.h>
#include <sys/stat.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <arpa/inet.h>
#include <net/if_arp.h>
#include <net/if.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>

#define MAX_BUFF_LEN 1024
#define SHORT_STR_LEN 256
#define MAX_CONNECT_COUNT 10

#define FTP_DATACONN          150
#define FTP_NOOPOK            200
#define FTP_TYPEOK            200
#define FTP_PORTOK            200
#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
#define FTP_SIZEOK            213
#define FTP_MDTMOK            213
#define FTP_STATFILE_OK       213
#define FTP_SITEHELP          214
#define FTP_HELP              214
#define FTP_SYSTOK            215
#define FTP_GREET             220
#define FTP_GOODBYE           221
#define FTP_ABOR_NOCONN       225
#define FTP_TRANSFEROK        226
#define FTP_ABOROK            226
#define FTP_PASVOK            227
#define FTP_EPSVOK            229
#define FTP_LOGINOK           230
#define FTP_AUTHOK            234
#define FTP_CWDOK             250
#define FTP_RMDIROK           250
#define FTP_DELEOK            250
#define FTP_RENAMEOK          250
#define FTP_PWDOK             257
#define FTP_MKDIROK           257

#define FTP_GIVEPWORD         331
#define FTP_RESTOK            350
#define FTP_RNFROK            350

#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
#define FTP_BADSENDFILE       451

#define FTP_BADCMD            500
#define FTP_BADOPTS           501
#define FTP_COMMANDNOTIMPL    502
#define FTP_NEEDUSER          503
#define FTP_NEEDRNFR          503
#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
#define FTP_NOHANDLEPROT      536
#define FTP_FILEFAIL          550
#define FTP_NOPERM            550
#define FTP_UPLOADFAIL        553

// ftp 全局变量
typedef struct ftp_global_var
{
	int CtrSockfd; // 控制链接套接口
	int DataSockfd; // 数据链接套接口
	int IsLogin; // 是否已经登入
	char username[80]; // 用户名
	char pass[20]; // 密码
	int isanonymous;

	char currpath[PATH_MAX]; // 当前路径
	char rootpath[100]; // 根目录
	char homepath[100]; // 家目录

	int uid;  // 用户ID
	int gid; // 组ID
	
	char datacon_ip[16]; // 数据连接Ip
	int datacon_port; // 数据连接端口

	int IsPasv; // 是否时被动
	int IsPort;
	//主动模式
	int port_mode_sockfd;
	char port_ip[16]; // ip
	int port_port; // 端口

	// 被动模式
	int pasv_mode_sockfd;
	char transmode;
	
	// 旧、新文件名
	char oldpathname[100];	
	char newpathname[100];

	//是否追加
	int  isappe;

	//
	long endseek;
	//
	int  istrans;

}FtpGlobalVar;




// ftp配置文件 结构体 定义
typedef struct ftp_struct_config
{
	char service_name[30]; // 服务名
	int	ctrl_connect_port; // 控制链接端口
	int anonymous_enable; // 是否允许匿名用户
	int connect_from_port_20; // 主动模式 数据连接端口
	int local_enable; // 本地用户登入
	int write_enable; // 是否允许写操作
	int local_umask; // 上传文件掩码
	int anon_upload_enable; // 是否允许上传文件
	int anon_mkdir_write_enable; // 是否允许创建目录
	int idle_session_timeout; // 控制连接超时情况
	int data_connection_timeout; // 数据连接超时情况
}FtpConfig;


extern FtpGlobalVar ftp_global_var;
extern FtpConfig  ftp_config;
// 读写
int read_loop(int sockfd,void * buf ,int size);
int write_loop(int sockfd,void * buf ,int size);
int readline(int fd, char* buf, int maxlen);
int recv_peek(int fd, void* buf, int len);

// 文件拷贝
int getfile(int argc,char ** argv);
int sendfile();
void trap(int n);

int Login();

// 输入到文件里面
int inputfile(char * filename,char * msg);



// 共享内存方面
// 共享内存

//extern void * pshare_memory;
extern struct shared_count * pshm;

struct shared_count
{
	long upload_count; // 上传个数
	long download_count; // 下载个数
	long upload_bytes; // 上传字节总数
	long download_bytes; // 下载个数
};


#endif /* PUBLIC.H */


⌨️ 快捷键说明

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