📄 tftp.c
字号:
/* Beholder RMON ethernet network monitor,Copyright (C) 1993 DNPAP group *//* See file COPYING 'GNU General Public Licence' for copyright details */#include <chain.h>#include <udp.h>#include "tftp.h"struct _TFTP_DESCR{ UDP_DESCR *udp; FILE *file; WORD block;}struct _TFTP_REQUEST{ BYTE *name; BYTE *mode;};struct _TFTP_DATA{ WORD block; BYTE *data;};struct _TFTP_ACK{ WORD block;};struct _TFTP_ERROR{ WORD code; BYTE *message;}static BOOLEAN Rcve(UDP_DESCR *descr, CHAIN *chain, UDP_HDR *udpHdr, IP_HDR *ipHdr);UDP_DESCR tftpUdp ={ Rcve, 69, UDP_ADDR_ANY, UDP_PORT_ANY, UDP_ADDR_ANY, 0};TFTP_STAT tftpStat;BOOLEAN TftpInit(void){ static BOOLEAN init = FALSE; if (!init) { init = UdpRegister(&tftpUdp); } return init;}static BOOLEAN RcveServer(UDP_DESCR *descr, CHAIN *chain, UDP_HDR *udpHdr, IP_HDR *ipHdr){ new = chain; h = ChainPop(&new, -1); if (h!=0) { switch () if (new!=chain) ChainFree(new); } return FALSE; code = IpN2HWord(h); switch (code) { } { } { } if ()}static BOOLEAN RcveRead(UDP_DESCR *descr, CHAIN *chain, UDP_HDR *udpHdr, IP_HDR *ipHdr){ h = ChainPop(&new, 2); if (h!=0) opcode = IpN2HWord(*h); switch (opcode) { case TFTP_ACK: new = AckDecode(chain, &ack); if (new != 0) { if (ack.block > tftp->block) fread } case TFTP_ERROR: case TFTP_READ: case TFTP_WRITE: case TFTP_DATA: } if( { }}static BOOLEAN RcveWrite(CHAIN *chain, UDP_HDR *udpHdr, IP_HDR *ipHdr){}HdrDecode
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -