/*This file has been prepared for Doxygen automatic documentation generation.*/ | |
/*! \file ********************************************************************* | |
* | |
* \brief Basic TFTP Server for AVR32 UC3. | |
* | |
* - Compiler: GNU GCC for AVR32 | |
* - Supported devices: All AVR32 devices can be used. | |
* - AppNote: | |
* | |
* \author Atmel Corporation: http://www.atmel.com \n | |
* Support and FAQ: http://support.atmel.no/ | |
* | |
*****************************************************************************/ | |
/* Copyright (c) 2007, Atmel Corporation All rights reserved. | |
* | |
* Redistribution and use in source and binary forms, with or without | |
* modification, are permitted provided that the following conditions are met: | |
* | |
* 1. Redistributions of source code must retain the above copyright notice, | |
* this list of conditions and the following disclaimer. | |
* | |
* 2. Redistributions in binary form must reproduce the above copyright notice, | |
* this list of conditions and the following disclaimer in the documentation | |
* and/or other materials provided with the distribution. | |
* | |
* 3. The name of ATMEL may not be used to endorse or promote products derived | |
* from this software without specific prior written permission. | |
* | |
* THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR IMPLIED | |
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | |
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND | |
* SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, | |
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | |
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
*/ | |
#ifndef BASIC_TFTP_SERVER_H | |
#define BASIC_TFTP_SERVER_H | |
#include "portmacro.h" | |
/* tftp_support.h */ | |
/* | |
* File transfer modes | |
*/ | |
#define TFTP_NETASCII 0 // Text files | |
#define TFTP_OCTET 1 // Binary files | |
/* | |
* Errors | |
*/ | |
// These initial 7 are passed across the net in "ERROR" packets. | |
#define TFTP_ENOTFOUND 1 /* file not found */ | |
#define TFTP_EACCESS 2 /* access violation */ | |
#define TFTP_ENOSPACE 3 /* disk full or allocation exceeded */ | |
#define TFTP_EBADOP 4 /* illegal TFTP operation */ | |
#define TFTP_EBADID 5 /* unknown transfer ID */ | |
#define TFTP_EEXISTS 6 /* file already exists */ | |
#define TFTP_ENOUSER 7 /* no such user */ | |
// These extensions are return codes in our API, *never* passed on the net. | |
#define TFTP_TIMEOUT 8 /* operation timed out */ | |
#define TFTP_NETERR 9 /* some sort of network error */ | |
#define TFTP_INVALID 10 /* invalid parameter */ | |
#define TFTP_PROTOCOL 11 /* protocol violation */ | |
#define TFTP_TOOLARGE 12 /* file is larger than buffer */ | |
#define TFTP_TIMEOUT_PERIOD 5 // Seconds between retries | |
#define TFTP_TIMEOUT_MAX 50 // Max timeouts over all blocks | |
#define TFTP_RETRIES_MAX 5 // retries per block before giving up | |
/* netdb.h */ | |
// Internet services | |
struct servent { | |
char *s_name; /* official service name */ | |
char **s_aliases; /* alias list */ | |
int s_port; /* port number */ | |
char *s_proto; /* protocol to use */ | |
}; | |
/* arpa/tftp.h */ | |
/* | |
* Trivial File Transfer Protocol (IEN-133) | |
*/ | |
#define SEGSIZE 512 /* data segment size */ | |
/* | |
* Packet types. | |
*/ | |
#define th_block th_u.tu_block | |
#define th_code th_u.tu_code | |
#define th_stuff th_u.tu_stuff | |
#define th_msg th_data | |
/* | |
* Error codes. | |
*/ | |
#define EUNDEF 0 /* not defined */ | |
#define ENOTFOUND 1 /* file not found */ | |
#define EACCESS 2 /* access violation */ | |
#define ENOSPACE 3 /* disk full or allocation exceeded */ | |
#define EBADOP 4 /* illegal TFTP operation */ | |
#define EBADID 5 /* unknown transfer ID */ | |
#define EEXISTS 6 /* file already exists */ | |
#define ENOUSER 7 /* no such user */ | |
#define RRQ 01 /* read request */ | |
#define WRQ 02 /* write request */ | |
#define DATA 03 /* data packet */ | |
#define ACK 04 /* acknowledgement */ | |
#define ERROR 05 /* error code */ | |
#if __ICCAVR32__ | |
#pragma pack(1) | |
#endif | |
struct tftphdr { | |
short th_opcode; /* packet type */ | |
union { | |
unsigned short tu_block; /* block # */ | |
short tu_code; /* error code */ | |
char tu_stuff[1]; /* request packet stuff */ | |
} | |
#if __GNUC__ | |
__attribute__ ((packed)) | |
#endif | |
th_u; | |
char th_data[1]; /* data or error string */ | |
} | |
#if __GNUC__ | |
__attribute__ ((packed)) | |
#endif | |
; | |
#if __ICCAVR32__ | |
#pragma pack() | |
#endif | |
/* The function that implements the TFTP server task. */ | |
portTASK_FUNCTION_PROTO( vBasicTFTPServer, pvParameters ); | |
#endif | |