📄 tftpserver.h.txt
字号:
#include <sys/socket.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <string.h>
// packet opcode
#define RRQ_OPCODE 1
#define WRQ_OPCODE 2
#define DATA_OPCODE 3
#define ACK_OPCODE 4
#define ERROR_OPCODE 5
// mode value
#define ASCII "netascii"
#define BIN "octet"
// tftp state
#define CLOSED_STATE 0
#define SEND_DATA_STATE 1
#define RECV_DATA_STATE 2
#define WAITING_CLOSE_STATE 3
#define ERROR_STATE 4
struct RRQ {
unsigned short OpCode;
char FileName[80];
char Mode[10];
};
struct WRQ {
unsigned short OpCode;
char FileName[80];
char Mode[10];
};
struct DATA {
unsigned short OpCode;
unsigned short BlockNumber;
char Data[1];
};
struct ACK {
unsigned short OpCode;
unsigned short BlockNumber;
};
struct ERROR {
unsigned short OpCode;
unsigned short ErrorNumber;
char ErrorData[1];
};
struct CONTEXT {
int State;
int RecvNumber;
int SendNumber;
int CurrentByteSize;
char FileName[80];
FILE *fp;
struct sockaddr_in ClientAddr;
struct CONTEXT *next;
};
int process_RRQ(int socket, char *msg, int recvsize,
struct sockaddr_in *clientaddr, int clientaddrsize);
int process_WRQ(int socket, char *msg, int recvsize,
struct sockaddr_in *clientaddr, int clientaddrsize);
int process_ACK(int socket, char *msg, int recvsize,
struct sockaddr_in *clientaddr, int clientaddrsize);
int process_DATA(int socket, char *msg, int recvsize,
struct sockaddr_in *clientaddr, int clientaddrsize);
int process_ERROR(int socket, char *msg, int recvsize,
struct sockaddr_in *clientaddr, int clientaddrsize);
struct CONTEXT *find_context(struct sockaddr_in *clientaddr);
int remove_context(struct CONTEXT *pContext);
int remove_all_context(void);
int send_error(int socket, struct sockaddr_in *clientaddr, int clientaddrsize,
unsigned short errorcode, char *errormsg);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -