From 4321b18b3cf24c6a7b29e430115c32b803f4805c Mon Sep 17 00:00:00 2001 From: Stefan Lankes Date: Wed, 10 Aug 2011 08:02:30 +0200 Subject: [PATCH] at netio server (see http://www.nwlab.net/art/netio/netio.html) --- kernel/Makefile | 2 +- kernel/netio.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 kernel/netio.c diff --git a/kernel/Makefile b/kernel/Makefile index a5aa5b13..9f1eb11f 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -1,4 +1,4 @@ -C_source := main.c tasks.c syscall.c tests.c echo.c ping.c init.c server.c client.c shell.c +C_source := main.c tasks.c syscall.c tests.c echo.c ping.c netio.c init.c server.c client.c shell.c MODULE := kernel include $(TOPDIR)/Makefile.inc diff --git a/kernel/netio.c b/kernel/netio.c new file mode 100644 index 00000000..166bbc18 --- /dev/null +++ b/kernel/netio.c @@ -0,0 +1,62 @@ +/* + * this example is derived from the netio example of the contrib-1.4.0 + * + * see http://download.savannah.gnu.org/releases/lwip/ + */ + +#include +#include + +#if defined(CONFIG_LWIP) + +#include +#include + +/* See http://www.nwlab.net/art/netio/netio.html to get the netio tool */ + +#if LWIP_TCP +static err_t netio_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err) +{ + + LWIP_UNUSED_ARG(arg); + + if (err == ERR_OK && p != NULL) { + tcp_recved(pcb, p->tot_len); + pbuf_free(p); + } else { + pbuf_free(p); + } + + if (err == ERR_OK && p == NULL) { + tcp_arg(pcb, NULL); + tcp_sent(pcb, NULL); + tcp_recv(pcb, NULL); + tcp_close(pcb); + } + + return ERR_OK; +} + +static err_t netio_accept(void *arg, struct tcp_pcb *pcb, err_t err) +{ + LWIP_UNUSED_ARG(arg); + LWIP_UNUSED_ARG(err); + + tcp_arg(pcb, NULL); + tcp_sent(pcb, NULL); + tcp_recv(pcb, netio_recv); + return ERR_OK; +} + +void netio_init(void) +{ + struct tcp_pcb *pcb; + + pcb = tcp_new(); + tcp_bind(pcb, IP_ADDR_ANY, 18767); + pcb = tcp_listen(pcb); + tcp_accept(pcb, netio_accept); +} +#endif /* LWIP_TCP */ + +#endif