1 /** 2 * 3 * @file tftp_common.h 4 * 5 * @author Logan Gunthorpe <logang@deltatee.com> 6 * 7 * @brief Trivial File Transfer Protocol (RFC 1350) 8 * 9 * Copyright (c) Deltatee Enterprises Ltd. 2013 10 * All rights reserved. 11 * 12 */ 13 14 /* 15 * Redistribution and use in source and binary forms, with or without 16 * modification,are permitted provided that the following conditions are met: 17 * 18 * 1. Redistributions of source code must retain the above copyright notice, 19 * this list of conditions and the following disclaimer. 20 * 2. Redistributions in binary form must reproduce the above copyright notice, 21 * this list of conditions and the following disclaimer in the documentation 22 * and/or other materials provided with the distribution. 23 * 3. The name of the author may not be used to endorse or promote products 24 * derived from this software without specific prior written permission. 25 * 26 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 27 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 28 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 29 * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 30 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 31 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 32 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 33 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 34 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 35 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 36 * 37 * Author: Logan Gunthorpe <logang@deltatee.com> 38 * 39 */ 40 41 #ifndef LWIP_HDR_APPS_TFTP_COMMON_H 42 #define LWIP_HDR_APPS_TFTP_COMMON_H 43 44 #include "lwip/apps/tftp_opts.h" 45 #include "lwip/err.h" 46 #include "lwip/pbuf.h" 47 #include "lwip/ip_addr.h" 48 49 #ifdef __cplusplus 50 extern "C" { 51 #endif 52 53 /** @ingroup tftp 54 * TFTP context containing callback functions for TFTP transfers 55 */ 56 struct tftp_context { 57 /** 58 * Open file for read/write (server mode only). 59 * @param fname Filename 60 * @param mode Mode string from TFTP RFC 1350 (netascii, octet, mail) 61 * @param write Flag indicating read (0) or write (!= 0) access 62 * @returns File handle supplied to other functions 63 */ 64 void* (*open)(const char* fname, const char* mode, u8_t write); 65 /** 66 * Close file handle 67 * @param handle File handle returned by open()/tftp_put()/tftp_get() 68 */ 69 void (*close)(void* handle); 70 /** 71 * Read from file 72 * @param handle File handle returned by open()/tftp_put()/tftp_get() 73 * @param buf Target buffer to copy read data to 74 * @param bytes Number of bytes to copy to buf 75 * @returns >= 0: Success; < 0: Error 76 */ 77 int (*read)(void* handle, void* buf, int bytes); 78 /** 79 * Write to file 80 * @param handle File handle returned by open()/tftp_put()/tftp_get() 81 * @param pbuf PBUF adjusted such that payload pointer points 82 * to the beginning of write data. In other words, 83 * TFTP headers are stripped off. 84 * @returns >= 0: Success; < 0: Error 85 */ 86 int (*write)(void* handle, struct pbuf* p); 87 /** 88 * Error indication from client or response from server 89 * @param handle File handle set by open()/tftp_get()/tftp_put() 90 * @param err error code from client or server 91 * @param msg error message from client or server 92 * @param size size of msg 93 */ 94 void (*error)(void* handle, int err, const char* msg, int size); 95 }; 96 97 #define LWIP_TFTP_MODE_SERVER 0x01 98 #define LWIP_TFTP_MODE_CLIENT 0x02 99 #define LWIP_TFTP_MODE_CLIENTSERVER (LWIP_TFTP_MODE_SERVER | LWIP_TFTP_MODE_CLIENT) 100 101 err_t tftp_init_common(u8_t mode, const struct tftp_context* ctx); 102 void tftp_cleanup(void); 103 104 #ifdef __cplusplus 105 } 106 #endif 107 108 #endif /* LWIP_HDR_APPS_TFTP_COMMON_H */ 109