diff options
Diffstat (limited to 'contrib/apps/udpecho/udpecho.c')
-rw-r--r-- | contrib/apps/udpecho/udpecho.c | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/contrib/apps/udpecho/udpecho.c b/contrib/apps/udpecho/udpecho.c new file mode 100644 index 00000000000..b68301e38b7 --- /dev/null +++ b/contrib/apps/udpecho/udpecho.c @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * 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 the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels <adam@sics.se> + * + */ + +#include "udpecho.h" + +#include "lwip/opt.h" + +#if LWIP_NETCONN + +#include "lwip/api.h" +#include "lwip/sys.h" + +/*-----------------------------------------------------------------------------------*/ +static void +udpecho_thread(void *arg) +{ + struct netconn *conn; + struct netbuf *buf; + char buffer[4096]; + err_t err; + LWIP_UNUSED_ARG(arg); + +#if LWIP_IPV6 + conn = netconn_new(NETCONN_UDP_IPV6); + LWIP_ERROR("udpecho: invalid conn", (conn != NULL), return;); + netconn_bind(conn, IP6_ADDR_ANY, 7); +#else /* LWIP_IPV6 */ + conn = netconn_new(NETCONN_UDP); + LWIP_ERROR("udpecho: invalid conn", (conn != NULL), return;); + netconn_bind(conn, IP_ADDR_ANY, 7); +#endif /* LWIP_IPV6 */ + + while (1) { + err = netconn_recv(conn, &buf); + if (err == ERR_OK) { + /* no need netconn_connect here, since the netbuf contains the address */ + if(netbuf_copy(buf, buffer, sizeof(buffer)) != buf->p->tot_len) { + LWIP_DEBUGF(LWIP_DBG_ON, ("netbuf_copy failed\n")); + } else { + buffer[buf->p->tot_len] = '\0'; + err = netconn_send(conn, buf); + if(err != ERR_OK) { + LWIP_DEBUGF(LWIP_DBG_ON, ("netconn_send failed: %d\n", (int)err)); + } else { + LWIP_DEBUGF(LWIP_DBG_ON, ("got %s\n", buffer)); + } + } + netbuf_delete(buf); + } + } +} +/*-----------------------------------------------------------------------------------*/ +void +udpecho_init(void) +{ + sys_thread_new("udpecho_thread", udpecho_thread, NULL, DEFAULT_THREAD_STACKSIZE, DEFAULT_THREAD_PRIO); +} + +#endif /* LWIP_NETCONN */ |