From b1362405e2ee5ee5b78cdb53d81d93dc92e1e7fb Mon Sep 17 00:00:00 2001 From: armink Date: Thu, 17 Aug 2017 15:56:33 +0800 Subject: [PATCH] [LWIP] Add TFTP server to LWIP 2.0.2 . --- components/net/lwip-2.0.2/apps/tftp_server.c | 83 ++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 components/net/lwip-2.0.2/apps/tftp_server.c diff --git a/components/net/lwip-2.0.2/apps/tftp_server.c b/components/net/lwip-2.0.2/apps/tftp_server.c new file mode 100644 index 0000000000..f5667ef0ad --- /dev/null +++ b/components/net/lwip-2.0.2/apps/tftp_server.c @@ -0,0 +1,83 @@ +/* + * File : tftp_server.c + * This file is part of RT-Thread RTOS + * COPYRIGHT (C) 2006 - 2017, RT-Thread Development Team + * + * This program 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 2 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Change Logs: + * Date Author Notes + * 2017-08-17 armink first version. + */ + + +#include +#include +#include + +static struct tftp_context ctx; + +static void* tftp_open(const char* fname, const char* mode, u8_t write) +{ + int fd = -1; + + if (!rt_strcmp(mode, "octet")) + { + if (write) + { + fd = open(fname, O_WRONLY | O_CREAT, 0); + } + else + { + fd = open(fname, O_RDONLY, 0); + } + } + else + { + rt_kprintf("tftp: No support this mode(%s).", mode); + } + + return (void *) fd; +} + +static int tftp_write(void* handle, struct pbuf* p) +{ + int fd = (int) handle; + + return write(fd, p->payload, p->len); +} + +#if defined(RT_USING_FINSH) && defined(FINSH_USING_MSH) +#include + +static void tftp_server(uint8_t argc, char **argv) +{ + ctx.open = tftp_open; + ctx.close = (void (*)(void *)) close; + ctx.read = (int (*)(void *, void *, int)) read; + ctx.write = tftp_write; + + if (tftp_init(&ctx) == ERR_OK) + { + rt_kprintf("TFTP server start successfully.\n"); + } + else + { + rt_kprintf("TFTP server start failed.\n"); + } +} +MSH_CMD_EXPORT(tftp_server, start tftp server.); + +#endif /* defined(RT_USING_FINSH) && defined(FINSH_USING_MSH) */ -- GitLab