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