This is a simple but complete TFTP server capable to run on MBED-OS5. It can receive and send files and listens on port 69. Please notice that it supports only octet (raw 8 bit bytes) mode transfers. It is part of the LaOS (Laser Open Source) project: http://www.laoslaser.org/
Fork of TFTPServer by
Import programTFTPServerTest
This is an example code for using the TFTPServer library.
A simple TFTP server. NOTE: Supports only octet (raw 8 bit bytes) mode transfers.
TFTPServer.h
- Committer:
- hudakz
- Date:
- 2018-03-20
- Revision:
- 2:f7c0fbc8c5aa
- Parent:
- 1:9c973065a97e
File content as of revision 2:f7c0fbc8c5aa:
/* * TFTPServer.h * Simple TFTP server * * Copyright (c) 2011 Jaap Vermaas * Modified by Zoltan Hudak 2018 for MBED-OS5 * * This file is part of the LaOS project (see: http://wiki.laoslaser.org * * LaOS is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * LaOS is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with LaOS. If not, see <http://www.gnu.org/licenses/>. * * Minimal TFTP Server * * Receive and send files via TFTP * * Server handles only one transfer at a time * * Supports only octet (raw 8 bit bytes) mode transfers * * fixed block size: 512 bytes * * http://spectral.mscs.mu.edu/RFC/rfc1350.html * * Example: * @code * TFTPServer *server; * ... * server = new TFTPServer(); * ... * @endcode * */ #ifndef _TFTPSERVER_H_ #define _TFTPSERVER_H_ #include <stdio.h> #include <ctype.h> #include "mbed.h" class EthernetInterface; #define TFTP_PORT 69 class TFTPServer { public: enum State { LISTENING, READING, WRITING, ERROR, SUSPENDED, DELETED }; // Creates a new TFTP server listening on myPort. TFTPServer(EthernetInterface* net, uint16_t myPort = TFTP_PORT); // Destroys this instance of the TFTP server. ~TFTPServer(); // Resets the TFTP server. void reset(); // Gets current TFTP status State getState(); // Temporarily disables incoming TFTP connections. void suspend(); // Resumes incoming TFTP connections after suspension. void resume(); // Polls for data or new connection. void poll(); // Gets the filename during read and write. void getFileName(char* name); // Returns number of received files. int fileCount(); private: // Creates a new connection reading a file from server. void connectRead(char* buff); // Creates a new connection writing a file to the server. void connectWrite(char* buff); // Gets DATA block from file on disk into memory. void getBlock(); // Sends DATA block to remote client. void sendBlock(); // Compares host's IP and Port with connected remote machine. int cmpHost(); // Sends ACK to remote client. void ack(int val); // Sends ERROR message to remote client. void sendError(const char* msg); // Checks if connection mode of client is octet/binary. int modeOctet(char* buff); uint16_t port; // TFTP port UDPSocket* socket; // Main listening socket (dflt: UDP port 69) State state; // Current TFTP server state char* remoteIP; // Connected remote Host IP int remotePort; // Connected remote Host Port uint16_t blockCounter, dupCounter; // Block counter, and DUP counter FILE* file; // Current file to read or write char blockBuff[516]; // Current DATA block; int blockSize; // Last DATA block size while sending char fileName[256]; // Current (or most recent) filename int fileCounter; // Received file counter char errorBuff[128]; // Error message buffer SocketAddress socketAddr; // Socket's addres (used to get remote host's address) }; #endif