BeRTOS
|
00001 00066 #ifndef TFTP_H 00067 #define TFTP_H 00068 00069 #include <cfg/compiler.h> 00070 #include <lwip/sockets.h> // sockaddr_in, socklen_t 00071 #include <io/kfile.h> 00072 00073 #define TFTP_RRQ 0x0100 /* TFTP read request packet (already in net endianess). */ 00074 #define TFTP_WRQ 0x0200 /* TFTP write request packet (already in net endianess). */ 00075 #define TFTP_DATA 03 /* TFTP data packet. */ 00076 #define TFTP_ACK 0x0400 /* TFTP acknowledgement packet (already in net endianess). */ 00077 #define TFTP_PROTOERR 0x0500 /* TFTP acknowledgement packet (already in net endianess). */ 00078 00079 /* TFTP protocol error codes */ 00080 #define TFTP_PROTOERR_ACCESS_VIOLATION 0x0200 00081 00082 #define TFTP_SERVER_PORT 69 00083 00084 /* Return error codes */ 00085 #define TFTP_ERR_TIMEOUT -2 00086 #define TFTP_ERR -1 00087 00088 struct PACKED TftpHeader 00089 { 00090 short opcode; 00091 union PACKED 00092 { 00093 short block; /* block # */ 00094 short code; /* error code */ 00095 char stuff[1]; /* request packet stuff */ 00096 } th_u; 00097 }; 00098 00099 typedef struct PACKED Tftpframe { 00100 struct TftpHeader hdr; 00101 char data[512]; /* data or error string */ 00102 } Tftpframe; 00103 00104 struct PACKED ackframe 00105 { 00106 short opcode; 00107 short block_num; 00108 }; 00109 00110 struct PACKED errframe 00111 { 00112 short opcode; 00113 short errcode; 00114 char str; 00115 }; 00116 00117 typedef enum 00118 { 00119 TFTP_READ, 00120 TFTP_WRITE, 00121 } TftpOpenMode; 00122 00123 typedef struct TftpSession 00124 { 00125 struct sockaddr_in addr; 00126 socklen_t addr_len; 00127 int sock; 00128 unsigned short block; 00129 mtime_t timeout; 00130 int error; 00131 Tftpframe frame; 00132 size_t bytes_available; 00133 size_t valid_data; 00134 bool is_xfer_end; 00135 bool pending_ack; 00136 KFile kfile_request; 00137 } TftpSession; 00138 00139 int tftp_init(TftpSession *ctx, unsigned short port, mtime_t timeout); 00140 KFile *tftp_listen(TftpSession *ctx, char *filename, size_t len, TftpOpenMode *mode); 00141 00142 #endif // TFTP_H