summaryrefslogtreecommitdiff
path: root/apps/examples/webserver
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2014-07-03 17:31:17 -0600
committerGregory Nutt <gnutt@nuttx.org>2014-07-03 17:31:17 -0600
commitcd6c5655e4b5434f599db4472f62d22e252c50ab (patch)
tree95652750690f554bca94da8e63c4e27687ddbf5e /apps/examples/webserver
parent4b59193e39baf25f2923ef64745c44a7f2d55027 (diff)
downloadnuttx-cd6c5655e4b5434f599db4472f62d22e252c50ab.tar.gz
nuttx-cd6c5655e4b5434f599db4472f62d22e252c50ab.tar.bz2
nuttx-cd6c5655e4b5434f599db4472f62d22e252c50ab.zip
Rename apps/examples/uip to apps/examples/webserver
Diffstat (limited to 'apps/examples/webserver')
-rw-r--r--apps/examples/webserver/.gitignore12
-rw-r--r--apps/examples/webserver/Kconfig39
-rw-r--r--apps/examples/webserver/Makefile101
-rw-r--r--apps/examples/webserver/cgi.c109
-rw-r--r--apps/examples/webserver/cgi.h43
-rw-r--r--apps/examples/webserver/httpd-fs/.gitignore12
-rw-r--r--apps/examples/webserver/httpd-fs/404.html8
-rw-r--r--apps/examples/webserver/httpd-fs/fade.pngbin0 -> 196 bytes
-rw-r--r--apps/examples/webserver/httpd-fs/files.shtml31
-rw-r--r--apps/examples/webserver/httpd-fs/footer.html3
-rw-r--r--apps/examples/webserver/httpd-fs/header.html16
-rw-r--r--apps/examples/webserver/httpd-fs/index.shtml10
-rw-r--r--apps/examples/webserver/httpd-fs/stats.shtml31
-rw-r--r--apps/examples/webserver/httpd-fs/style.css92
-rw-r--r--apps/examples/webserver/httpd-fs/tcp.shtml5
-rw-r--r--apps/examples/webserver/webserver_main.c215
16 files changed, 727 insertions, 0 deletions
diff --git a/apps/examples/webserver/.gitignore b/apps/examples/webserver/.gitignore
new file mode 100644
index 000000000..12109c08d
--- /dev/null
+++ b/apps/examples/webserver/.gitignore
@@ -0,0 +1,12 @@
+/Make.dep
+/.depend
+/.built
+/httpd_fsdata.c
+/*.asm
+/*.obj
+/*.rel
+/*.lst
+/*.sym
+/*.adb
+/*.lib
+/*.src
diff --git a/apps/examples/webserver/Kconfig b/apps/examples/webserver/Kconfig
new file mode 100644
index 000000000..1a1323022
--- /dev/null
+++ b/apps/examples/webserver/Kconfig
@@ -0,0 +1,39 @@
+#
+# For a description of the syntax of this configuration file,
+# see misc/tools/kconfig-language.txt.
+#
+
+config EXAMPLES_WEBSERVER
+ bool "uIP web server example"
+ default n
+ ---help---
+ Enable the uIP web server example
+
+if EXAMPLES_WEBSERVER
+
+config EXAMPLES_WEBSERVER_IPADDR
+ hex "Device IP"
+ default 0x0a000002
+ ---help---
+ This is the IP address of your board.
+
+config EXAMPLES_WEBSERVER_DRIPADDR
+ hex "Default Router IP"
+ default 0x0a000001
+ ---help---
+ This is the IP address of your router/gateway.
+
+config EXAMPLES_WEBSERVER_NETMASK
+ hex "Network Mask"
+ default 0xffffff00
+ ---help---
+ This is the network mask to use on this device.
+
+config EXAMPLES_WEBSERVER_NOMAC
+ bool "No hardware MAC"
+ default y
+ ---help---
+ Some devices don't have hardware MAC then we need to define a
+ software MAC.
+
+endif
diff --git a/apps/examples/webserver/Makefile b/apps/examples/webserver/Makefile
new file mode 100644
index 000000000..a1589936e
--- /dev/null
+++ b/apps/examples/webserver/Makefile
@@ -0,0 +1,101 @@
+############################################################################
+# apps/examples/webserver/Makefile
+#
+# Copyright (C) 2007-2008, 2010-2012 Gregory Nutt. All rights reserved.
+# Author: Gregory Nutt <gnutt@nuttx.org>
+#
+# 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. Neither the name NuttX nor the names of its contributors may be
+# used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "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
+# COPYRIGHT OWNER OR CONTRIBUTORS 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.
+#
+############################################################################
+
+-include $(TOPDIR)/.config
+-include $(TOPDIR)/Make.defs
+include $(APPDIR)/Make.defs
+
+# uIP very tiny web server example
+
+ASRCS =
+CSRCS = webserver_main.c cgi.c httpd_fsdata.c
+
+AOBJS = $(ASRCS:.S=$(OBJEXT))
+COBJS = $(CSRCS:.c=$(OBJEXT))
+
+SRCS = $(ASRCS) $(CSRCS)
+OBJS = $(AOBJS) $(COBJS)
+
+ifeq ($(CONFIG_WINDOWS_NATIVE),y)
+ BIN = ..\..\libapps$(LIBEXT)
+else
+ifeq ($(WINTOOL),y)
+ BIN = ..\\..\\libapps$(LIBEXT)
+else
+ BIN = ../../libapps$(LIBEXT)
+endif
+endif
+
+ROOTDEPPATH = --dep-path .
+
+# Common build
+
+VPATH =
+
+all: .built
+.PHONY: clean depend distclean
+
+$(AOBJS): %$(OBJEXT): %.S
+ $(call ASSEMBLE, $<, $@)
+
+$(COBJS): %$(OBJEXT): %.c
+ $(call COMPILE, $<, $@)
+
+.built: $(OBJS)
+ $(call ARCHIVE, $(BIN), $(OBJS))
+ @touch .built
+
+httpd_fsdata.c: httpd-fs/*
+ $(TOPDIR)/tools/mkfsdata.pl
+
+context:
+
+.depend: Makefile $(SRCS)
+ @$(MKDEP) $(ROOTDEPPATH) "$(CC)" -- $(CFLAGS) -- $(SRCS) >Make.dep
+ @touch $@
+
+epend: .depend
+
+clean:
+ $(call DELFILE, .built)
+ $(call DELFILE, httpd_fsdata.c)
+ $(call CLEAN)
+
+distclean: clean
+ $(call DELFILE, Make.dep)
+ $(call DELFILE, .depend)
+
+-include Make.dep
+
diff --git a/apps/examples/webserver/cgi.c b/apps/examples/webserver/cgi.c
new file mode 100644
index 000000000..bdb290b7e
--- /dev/null
+++ b/apps/examples/webserver/cgi.c
@@ -0,0 +1,109 @@
+/****************************************************************************
+ * apps/examples/webserver/cgi.c
+ * Web server script interface
+ * Author: Adam Dunkels <adam@sics.se>
+ *
+ * Copyright (c) 2001-2006, Adam Dunkels.
+ * 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.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <stdio.h>
+#include <string.h>
+#include <sys/socket.h>
+
+#include <nuttx/net/netstats.h>
+#include <apps/netutils/httpd.h>
+
+#include "cgi.h"
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+#ifdef CONFIG_NETUTILS_HTTPDFILESTATS
+HTTPD_CGI_CALL(file, "file-stats", file_stats);
+#endif
+
+#ifdef CONFIG_NETUTILS_HTTPDNETSTATS
+HTTPD_CGI_CALL(net, "net-stats", net_stats);
+#endif
+
+/****************************************************************************
+ * Name: net_stats
+ ****************************************************************************/
+
+#ifdef CONFIG_NETUTILS_HTTPDNETSTATS
+static void net_stats(struct httpd_state *pstate, char *ptr)
+{
+ char buffer[16];
+ int i;
+
+ for (i = 0; i < sizeof(g_netstats) / sizeof(net_stats_t); i++)
+ {
+ snprintf(buffer, 16, "%5u\n", ((net_stats_t *)&g_netstats)[i]);
+ send(pstate->ht_sockfd, buffer, strlen(buffer), 0);
+ }
+}
+#endif
+
+/****************************************************************************
+ * Name: file_stats
+ ****************************************************************************/
+
+#ifdef CONFIG_NETUTILS_HTTPDFILESTATS
+static void file_stats(struct httpd_state *pstate, char *ptr)
+{
+ char buffer[16];
+ char *pcount = strchr(ptr, ' ') + 1;
+ snprintf(buffer, 16, "%5u", httpd_fs_count(pcount));
+ send(pstate->ht_sockfd, buffer, strlen(buffer), 0);
+}
+#endif
+
+/****************************************************************************
+ * Name: cgi_register
+ ****************************************************************************/
+
+void cgi_register()
+{
+#ifdef CONFIG_NETUTILS_HTTPDFILESTATS
+ httpd_cgi_register(&file);
+#endif
+
+#ifdef CONFIG_NETUTILS_HTTPDNETSTATS
+ httpd_cgi_register(&net);
+#endif
+}
diff --git a/apps/examples/webserver/cgi.h b/apps/examples/webserver/cgi.h
new file mode 100644
index 000000000..a71d306b3
--- /dev/null
+++ b/apps/examples/webserver/cgi.h
@@ -0,0 +1,43 @@
+/****************************************************************************
+ * apps/examples/webserver/cgi.h
+ * Web server script interface header file
+ * Author: Adam Dunkels <adam@sics.se>
+ *
+ * Copyright (c) 2001, Adam Dunkels.
+ * 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.
+ ****************************************************************************/
+
+#ifndef __EXAMPLES_WEBSERVER_CGI_H
+#define __EXAMPLES_WEBSERVER_CGI_H
+
+/****************************************************************************
+ * Public Function Prototypes
+ ****************************************************************************/
+
+void cgi_register(void);
+
+#endif /* __EXAMPLES_WEBSERVER_CGI_H */
diff --git a/apps/examples/webserver/httpd-fs/.gitignore b/apps/examples/webserver/httpd-fs/.gitignore
new file mode 100644
index 000000000..e75e705d4
--- /dev/null
+++ b/apps/examples/webserver/httpd-fs/.gitignore
@@ -0,0 +1,12 @@
+/Make.dep
+/.context
+/.depend
+/.built
+/*.asm
+/*.obj
+/*.rel
+/*.lst
+/*.sym
+/*.adb
+/*.lib
+/*.src
diff --git a/apps/examples/webserver/httpd-fs/404.html b/apps/examples/webserver/httpd-fs/404.html
new file mode 100644
index 000000000..a17711d02
--- /dev/null
+++ b/apps/examples/webserver/httpd-fs/404.html
@@ -0,0 +1,8 @@
+<html>
+ <body bgcolor="white">
+ <center>
+ <h1>404 - file not found</h1>
+ <h3>Go <a href="/">here</a> instead.</h3>
+ </center>
+ </body>
+</html> \ No newline at end of file
diff --git a/apps/examples/webserver/httpd-fs/fade.png b/apps/examples/webserver/httpd-fs/fade.png
new file mode 100644
index 000000000..a9e69f75d
--- /dev/null
+++ b/apps/examples/webserver/httpd-fs/fade.png
Binary files differ
diff --git a/apps/examples/webserver/httpd-fs/files.shtml b/apps/examples/webserver/httpd-fs/files.shtml
new file mode 100644
index 000000000..8a90dbd6d
--- /dev/null
+++ b/apps/examples/webserver/httpd-fs/files.shtml
@@ -0,0 +1,31 @@
+%!: /header.html
+<h1>File statistics</h1>
+<center>
+<table width="300">
+<tr><td><a href="/index.shtml">/index.shtml</a></td>
+<td>%! file-stats /index.shtml
+</td><td><img src="/fade.png" height=10 width=%! file-stats /index.shtml
+> </td></tr>
+<tr><td><a href="/files.shtml">/files.shtml</a></td>
+<td>%! file-stats /files.shtml
+</td><td><img src="/fade.png" height=10 width=%! file-stats /files.shtml
+> </td></tr>
+<tr><td><a href="/stats.shtml">/stats.shtml</a></td>
+<td>%! file-stats /stats.shtml
+</td><td><img src="/fade.png" height=10 width=%! file-stats /stats.shtml
+> </td></tr>
+<tr><td><a href="/style.css">/style.css</a></td>
+<td>%! file-stats /style.css
+</td><td><img src="/fade.png" height=10 width=%! file-stats /style.css
+> </td></tr>
+<tr><td><a href="/404.html">/404.html</a></td>
+<td>%! file-stats /404.html
+</td><td><img src="/fade.png" height=10 width=%! file-stats /404.html
+> </td></tr>
+<tr><td><a href="/fade.png">/fade.png</a></td>
+<td>%! file-stats /fade.png
+</td><td><img src="/fade.png" height=10 width=%! file-stats /fade.png
+> </td></tr>
+</table>
+</center>
+%!: /footer.html
diff --git a/apps/examples/webserver/httpd-fs/footer.html b/apps/examples/webserver/httpd-fs/footer.html
new file mode 100644
index 000000000..5b6e2d653
--- /dev/null
+++ b/apps/examples/webserver/httpd-fs/footer.html
@@ -0,0 +1,3 @@
+ </div>
+ </body>
+</html>
diff --git a/apps/examples/webserver/httpd-fs/header.html b/apps/examples/webserver/httpd-fs/header.html
new file mode 100644
index 000000000..ce2659cd4
--- /dev/null
+++ b/apps/examples/webserver/httpd-fs/header.html
@@ -0,0 +1,16 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <head>
+ <title>Welcome to the uIP web server!</title>
+ <link rel="stylesheet" type="text/css" href="style.css">
+ </head>
+ <body bgcolor="#fffeec" text="black">
+
+ <div class="menu">
+ <div class="menubox"><a href="/">Front page</a></div>
+ <div class="menubox"><a href="files.shtml">File statistics</a></div>
+ <div class="menubox"><a href="stats.shtml">Network statistics</a></div>
+ <br>
+ </div>
+
+ <div class="contentblock">
diff --git a/apps/examples/webserver/httpd-fs/index.shtml b/apps/examples/webserver/httpd-fs/index.shtml
new file mode 100644
index 000000000..7f19358ce
--- /dev/null
+++ b/apps/examples/webserver/httpd-fs/index.shtml
@@ -0,0 +1,10 @@
+%!: /header.html
+ <p>
+ These web pages are served by a small web server running on top of
+ the <a href="http://www.sics.se/~adam/uip/">uIP embedded TCP/IP
+ stack</a>.
+ </p>
+ <p>
+ Click on the links above for web server statistics.
+ </p>
+%!: /footer.html
diff --git a/apps/examples/webserver/httpd-fs/stats.shtml b/apps/examples/webserver/httpd-fs/stats.shtml
new file mode 100644
index 000000000..c63ed4afd
--- /dev/null
+++ b/apps/examples/webserver/httpd-fs/stats.shtml
@@ -0,0 +1,31 @@
+%!: /header.html
+<h1>Network statistics</h1>
+<center>
+<table width="300" border="0">
+<tr><td><pre>
+IP Packets received
+ Packets sent
+ Packets dropped
+IP errors IP version/header length
+ IP length, high byte
+ IP length, low byte
+ IP fragments
+ Header checksum
+ Wrong protocol
+ICMP Packets received
+ Packets sent
+ Packets dropped
+ Type errors
+TCP Packets received
+ Packets sent
+ Packets dropped
+ Checksum errors
+ Data packets without ACKs
+ Resets
+ Retransmissions
+ No connection avaliable
+ Connection attempts to closed ports
+</pre></td><td><pre>%! net-stats
+</pre></table>
+</center>
+%!: /footer.html
diff --git a/apps/examples/webserver/httpd-fs/style.css b/apps/examples/webserver/httpd-fs/style.css
new file mode 100644
index 000000000..b35cd7efc
--- /dev/null
+++ b/apps/examples/webserver/httpd-fs/style.css
@@ -0,0 +1,92 @@
+h1
+{
+ text-align: center;
+ font-size:14pt;
+ font-family:arial,helvetica;
+ font-weight:bold;
+ padding:10px;
+}
+
+body
+{
+
+ background-color: #fffeec;
+ color:black;
+
+ font-size:8pt;
+ font-family:arial,helvetica;
+}
+
+.menu
+{
+ margin: 4px;
+ width:60%;
+
+ padding:2px;
+
+ border: solid 1px;
+ background-color: #fffcd2;
+ text-align:left;
+
+ font-size:9pt;
+ font-family:arial,helvetica;
+}
+
+div.menubox
+{
+ width: 25%;
+ border: 0;
+ float: left;
+text-align: center;
+}
+
+.contentblock
+{
+ margin: 4px;
+ width:60%;
+
+ padding:2px;
+
+ border: 1px dotted;
+ background-color: white;
+
+ font-size:8pt;
+ font-family:arial,helvetica;
+
+}
+
+p.intro
+{
+ margin-left:20px;
+ margin-right:20px;
+
+ font-size:10pt;
+/* font-weight:bold; */
+ font-family:arial,helvetica;
+}
+
+p.clink
+{
+ font-size:12pt;
+ font-family:courier,monospace;
+ text-align:center;
+}
+
+p.clink9
+{
+ font-size:9pt;
+ font-family:courier,monospace;
+ text-align:center;
+}
+
+
+p
+{
+ padding-left:10px;
+}
+
+p.right
+{
+ text-align:right;
+}
+
diff --git a/apps/examples/webserver/httpd-fs/tcp.shtml b/apps/examples/webserver/httpd-fs/tcp.shtml
new file mode 100644
index 000000000..4c4bffe97
--- /dev/null
+++ b/apps/examples/webserver/httpd-fs/tcp.shtml
@@ -0,0 +1,5 @@
+%!: /header.html
+<h1>Current connections</h1><br><table width="100%">
+<tr><th>Local</th><th>Remote</th><th>State</th><th>Retransmissions</th><th>Timer</th><th>Flags</th></tr>
+%! tcp-connections
+%!: /footer.html \ No newline at end of file
diff --git a/apps/examples/webserver/webserver_main.c b/apps/examples/webserver/webserver_main.c
new file mode 100644
index 000000000..15d162a30
--- /dev/null
+++ b/apps/examples/webserver/webserver_main.c
@@ -0,0 +1,215 @@
+/****************************************************************************
+ * examples/webserver/webserver_main.c
+ *
+ * Copyright (C) 2007, 2009-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Based on uIP which also has a BSD style license:
+ *
+ * Copyright (c) 2001, Adam Dunkels.
+ * 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. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Adam Dunkels.
+ * 4. 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.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/ioctl.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <time.h>
+#include <debug.h>
+
+#include <net/if.h>
+#include <nuttx/net/uip.h>
+#include <nuttx/net/arp.h>
+
+#include <apps/netutils/netlib.h>
+
+#ifdef CONFIG_EXAMPLES_WEBSERVER_DHCPC
+#include <arpa/inet.h>
+#endif
+
+/* Here we include the header file for the application(s) we use in
+ * our project as defined in the config/<board-name>/defconfig file
+ */
+
+/* DHCPC may be used in conjunction with any other feature (or not) */
+
+#ifdef CONFIG_EXAMPLES_WEBSERVER_DHCPC
+# include <apps/netutils/dnsclient.h>
+# include <apps/netutils/dhcpc.h>
+#endif
+
+/* Include uIP webserver definitions */
+
+#include <apps/netutils/httpd.h>
+
+#include "cgi.h"
+
+/****************************************************************************
+ * Definitions
+ ****************************************************************************/
+
+#ifdef CONFIG_CPP_HAVE_VARARGS
+# ifdef CONFIG_DEBUG
+# define message(...) lowsyslog(__VA_ARGS__)
+# else
+# define message(...) printf(__VA_ARGS__)
+# endif
+#else
+# ifdef CONFIG_DEBUG
+# define message lowsyslog
+# else
+# define message (void)
+# endif
+#endif
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * webserver_main
+ ****************************************************************************/
+
+int webserver_main(int argc, char *argv[])
+{
+ struct in_addr addr;
+#if defined(CONFIG_EXAMPLES_WEBSERVER_DHCPC) || defined(CONFIG_EXAMPLES_WEBSERVER_NOMAC)
+ uint8_t mac[IFHWADDRLEN];
+#endif
+#ifdef CONFIG_EXAMPLES_WEBSERVER_DHCPC
+ void *handle;
+#endif
+
+/* Many embedded network interfaces must have a software assigned MAC */
+
+#ifdef CONFIG_EXAMPLES_WEBSERVER_NOMAC
+ mac[0] = 0x00;
+ mac[1] = 0xe0;
+ mac[2] = 0xde;
+ mac[3] = 0xad;
+ mac[4] = 0xbe;
+ mac[5] = 0xef;
+ netlib_setmacaddr("eth0", mac);
+#endif
+
+ /* Set up our host address */
+
+#ifdef CONFIG_EXAMPLES_WEBSERVER_DHCPC
+ addr.s_addr = 0;
+#else
+ addr.s_addr = HTONL(CONFIG_EXAMPLES_WEBSERVER_IPADDR);
+#endif
+ netlib_sethostaddr("eth0", &addr);
+
+ /* Set up the default router address */
+
+ addr.s_addr = HTONL(CONFIG_EXAMPLES_WEBSERVER_DRIPADDR);
+ netlib_setdraddr("eth0", &addr);
+
+ /* Setup the subnet mask */
+
+ addr.s_addr = HTONL(CONFIG_EXAMPLES_WEBSERVER_NETMASK);
+ netlib_setnetmask("eth0", &addr);
+
+#ifdef CONFIG_EXAMPLES_WEBSERVER_DHCPC
+ /* Set up the resolver */
+
+ dns_bind();
+
+ /* Get the MAC address of the NIC */
+
+ netlib_getmacaddr("eth0", mac);
+
+ /* Set up the DHCPC modules */
+
+ handle = dhcpc_open(&mac, IFHWADDRLEN);
+
+ /* Get an IP address. Note: there is no logic here for renewing the address in this
+ * example. The address should be renewed in ds.lease_time/2 seconds.
+ */
+
+ printf("Getting IP address\n");
+ if (handle)
+ {
+ struct dhcpc_state ds;
+ (void)dhcpc_request(handle, &ds);
+ netlib_sethostaddr("eth1", &ds.ipaddr);
+
+ if (ds.netmask.s_addr != 0)
+ {
+ netlib_setnetmask("eth0", &ds.netmask);
+ }
+
+ if (ds.default_router.s_addr != 0)
+ {
+ netlib_setdraddr("eth0", &ds.default_router);
+ }
+
+ if (ds.dnsaddr.s_addr != 0)
+ {
+ dns_setserver(&ds.dnsaddr);
+ }
+
+ dhcpc_close(handle);
+ printf("IP: %s\n", inet_ntoa(ds.ipaddr));
+ }
+#endif
+
+#ifdef CONFIG_NET_TCP
+ printf("Starting webserver\n");
+ httpd_init();
+ cgi_register();
+ httpd_listen();
+#endif
+
+ while (1)
+ {
+ sleep(3);
+ printf("webserver_main: Still running\n");
+#if CONFIG_NFILE_DESCRIPTORS > 0
+ fflush(stdout);
+#endif
+ }
+
+ return 0;
+}