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

📄 ftpsocket.h

📁 EFI(Extensible Firmware Interface)是下一代BIOS
💻 H
字号:
/*******************************************************
Copyright (c) 2005  Lenovo Corporation
All rights reserved.

Module Name:
    FTPsocket.h    

Abstract:
	建立提供socket通讯

Author: WangZhe
Revision History

********************************************************/
#ifndef FTPSOCKET_H_
#define FTPSOCKET_H_
#include "efi.h"
#include "efilib.h"


#include <unistd.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <sys/time.h>

#include "FileSystem.h"
#include "DiskTool.h"

typedef INT32 SOCKET_ID;
typedef struct sockaddr_in SOCKADDR_IN;
#define SOCKET_ERROR -1
#define FTP_PORTNUM	21
//FTP 命令宏定义
#define	DOWNLOAD_FILE		1	//请求下载文件
#define	UPLOAD_FILE			2	//请求上载文件
#define	LIST_CURDIR			3	//请求浏览当前文件夹
#define	GOUP_DIR			4	//进入当前文件夹的上一级文件夹
#define	GOIN_DIR			5	//进入指定文件夹
#define	CLOSE_SERVER		6	//请求关闭服务器
#define	CHECK_PASSWORD		7	//请求密码验证
#define	CLOSE_CLIENT		8	//请求服务器断开与自己的连接
#define  GET_DPT			9	//请求服务器的磁盘分区表

//状态信息
#define	ACCESS_DENY			0	//请求被拒绝
#define	ACCESS_ALLOW		1	//连接被允许

//无效socket 标识
#define INVALID_SOCKET  -1
#define PAGESIZE	1//单位是KB
#define FILEUNITMAXCOUNT	5	//文件单元一次收发的最大个数
//sub cmd code子命令
#define ERROR				0
#define SUCCESS				1
#define SENDFILE_READY		2	//准备传送文件
#define DOWNLOADFILE_FINISH	3//下载文件完毕
#define CONTINUE			4


//Socket数据包的头
typedef struct _SocketPackageHead {
	INT32 packageLength;		//整个包的长度
	INT32 cmdcode;			//命令代码
	INT32 subcmdcode;		//子命令代码
} SocketPackageHead;

#define MAX_LISTUNIT_TEXT_LENGTH	256
typedef struct _FileListUnit{
	CHAR8 FileName[MAX_LISTUNIT_TEXT_LENGTH];     //item的文本内容
	INT32  FileSize;					//存放参数
	INT32  FileType;					//存放数据
}FileListUnit;


//socket 通讯函数
#define Socket_read( iSocket, pBuffer, n )  read( (iSocket), (pBuffer), (n) )
#define Socket_write( iSocket, pBuffer, n )  write( (iSocket), (pBuffer), (n) )
#define Socket_close( iSocket ) close( iSocket )

void	FtpSocketTest();


//从socket里面读取确定数量的字符
INT32 SocketRecvAll(SOCKET_ID SocketId, CHAR8 *pBuffer, int len);

//接收一个文件
INT32 RecvFile(SOCKET_ID SocketId, CHAR16 *FileName);

//发送一个文件
INT32 SendFile(SOCKET_ID SocketId, CHAR16 *FileName);

//接收一个消息
INTN		RecvMessage(SOCKET_ID SocketId,
				CHAR16 *MessageStr,
				INT32 *CmdCode,
				INT32 *SubCmdCode);

//发送一个消息
BOOLEAN		SendMessage(SOCKET_ID SocketId,
				CHAR16 *MessageStr,
				INT32 CmdCode,
				INT32 SubCmdCode);

//浏览当前目录
INT32	ListCurrentDirectory(SOCKET_ID SocketId,FileMgrControl *m_FileMgr);

//打开一个文件夹,在当前文件夹下
void	OpenSubDirectory(FileMgrControl *m_FileMgr,
		CHAR16 *SubDirectoryName);//文件夹名称

//检查用户名和密码是否正确,正确返回TRUE
BOOLEAN		IsPassWordRight(CHAR16 *strAccess);

//_select defines
#define READ_STATUS  0
#define WRITE_STATUS 1
#define EXCPT_STATUS 2
//使用select模型,判断socket是否可用,根据超时sec,如果sec为-1则代表阻塞等待下去
BOOLEAN		IsSocketEnable(SOCKET_ID socketID, INT32 sec, INT32 usec,INT32 selectmodel);

//包装过的socket接收与发送,使用select模型,根据等待时间,不会死锁
INT32	SocketRecv(SOCKET_ID socketID,CHAR8 *pBuffer,INT32 nLength);
INT32	SocketSend(SOCKET_ID socketID,CHAR8 *pBuffer,INT32 nLength);

//接收一个连接,阻塞等待
INT32	AcceptConnect(SOCKET_ID ListenserSocketID,struct sockaddr* paddr,INT32 *nLength);

//发送磁盘分区表
BOOLEAN		SendDiskPartitionTable(SOCKET_ID SocketId,DiskPartitionTable *DPT);	
#endif

⌨️ 快捷键说明

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