tftp: added example for tftp client

Signed-off-by: Simon Goldschmidt <goldsimon@gmx.de>
This commit is contained in:
Simon Goldschmidt 2018-10-17 21:39:37 +02:00
parent 0ee4784d0c
commit f098c4515e
5 changed files with 62 additions and 9 deletions

View File

@ -66,6 +66,7 @@
* otherwise the raw api server will be used. */
/*#define LWIP_TCPECHO_APP_NETCONN */
#define LWIP_TFTP_APP 0
#define LWIP_TFTP_CLIENT_APP 0
#define LWIP_UDPECHO_APP 0
#define LWIP_LWIPERF_APP 0

View File

@ -62,6 +62,7 @@
* otherwise the raw api server will be used. */
/*#define LWIP_TCPECHO_APP_NETCONN */
#define LWIP_TFTP_APP 1
#define LWIP_TFTP_CLIENT_APP 1
#define LWIP_UDPECHO_APP 1
#define LWIP_LWIPERF_APP 1

View File

@ -576,7 +576,10 @@ apps_init(void)
sntp_example_init();
#endif
#if LWIP_TFTP_APP
tftp_example_init();
tftp_example_init_server();
#endif
#if LWIP_TFTP_CLIENT_APP
tftp_example_init_client();
#endif
#if LWIP_LWIPERF_APP
lwiperf_example_init();

View File

@ -29,6 +29,7 @@
#include <stdio.h>
#include "lwip/apps/tftp_client.h"
#include "lwip/apps/tftp_server.h"
#include "tftp_example.h"
@ -36,16 +37,43 @@
#if LWIP_UDP
/* Define a base directory for TFTP access
* ATTENTION: This code does NOT check for sandboxing,
* i.e. '..' in paths is not checked! */
#ifndef LWIP_TFTP_EXAMPLE_BASE_DIR
#define LWIP_TFTP_EXAMPLE_BASE_DIR ""
#endif
/* Define this to a file to get via tftp client */
#ifndef LWIP_TFTP_EXAMPLE_CLIENT_FILENAME
#define LWIP_TFTP_EXAMPLE_CLIENT_FILENAME "test.bin"
#endif
/* Define this to a server IP string */
#ifndef LWIP_TFTP_EXAMPLE_CLIENT_REMOTEIP
#define LWIP_TFTP_EXAMPLE_CLIENT_REMOTEIP "192.168.0.1"
#endif
static char full_filename[256];
static void *
tftp_open_file(const char* fname, u8_t is_write)
{
snprintf(full_filename, sizeof(full_filename), "%s%s", LWIP_TFTP_EXAMPLE_BASE_DIR, fname);
full_filename[sizeof(full_filename)-1] = 0;
if (is_write) {
return (void*)fopen(full_filename, "wb");
} else {
return (void*)fopen(full_filename, "rb");
}
}
static void*
tftp_open(const char* fname, const char* mode, u8_t is_write)
{
LWIP_UNUSED_ARG(mode);
if (is_write) {
return (void*)fopen(fname, "wb");
} else {
return (void*)fopen(fname, "rb");
}
return tftp_open_file(fname, is_write);
}
static void
@ -100,9 +128,28 @@ static const struct tftp_context tftp = {
};
void
tftp_example_init(void)
tftp_example_init_server(void)
{
tftp_init_server(&tftp);
}
void
tftp_example_init_client(void)
{
void *f;
err_t err;
ip_addr_t srv;
int ret = ipaddr_aton(LWIP_TFTP_EXAMPLE_CLIENT_REMOTEIP, &srv);
LWIP_ASSERT("ipaddr_aton failed", ret == 1);
err = tftp_init_client(&tftp);
LWIP_ASSERT("tftp_init_client failed", err == ERR_OK);
f = tftp_open_file(LWIP_TFTP_EXAMPLE_CLIENT_FILENAME, 1);
LWIP_ASSERT("failed to create file", f != NULL);
err = tftp_get(f, &srv, TFTP_PORT, LWIP_TFTP_EXAMPLE_CLIENT_FILENAME, TFTP_MODE_OCTET);
LWIP_ASSERT("tftp_get failed", err == ERR_OK);
}
#endif /* LWIP_UDP */

View File

@ -18,7 +18,8 @@
extern "C" {
#endif
void tftp_example_init(void);
void tftp_example_init_server(void);
void tftp_example_init_client(void);
#ifdef __cplusplus
}