diff options
author | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2009-09-16 15:04:58 +0000 |
---|---|---|
committer | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2009-09-16 15:04:58 +0000 |
commit | 56b549a07277af7e0cffad11a6025e0a5ca5bf28 (patch) | |
tree | 30f70ae0d21d0fd0c4b135386bcbf271174b9754 /nuttx/examples/thttpd | |
parent | 22de6d5b99468199dd36c2839572df4d6c35f28e (diff) | |
download | px4-nuttx-56b549a07277af7e0cffad11a6025e0a5ca5bf28.tar.gz px4-nuttx-56b549a07277af7e0cffad11a6025e0a5ca5bf28.tar.bz2 px4-nuttx-56b549a07277af7e0cffad11a6025e0a5ca5bf28.zip |
THTTPD CGI works
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@2063 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/examples/thttpd')
-rw-r--r-- | nuttx/examples/thttpd/content/Makefile | 2 | ||||
-rw-r--r-- | nuttx/examples/thttpd/content/hello/hello.c | 31 | ||||
-rw-r--r-- | nuttx/examples/thttpd/content/index.html | 6 | ||||
-rwxr-xr-x | nuttx/examples/thttpd/content/tasks/Makefile | 78 | ||||
-rwxr-xr-x | nuttx/examples/thttpd/content/tasks/tasks.c | 168 |
5 files changed, 271 insertions, 14 deletions
diff --git a/nuttx/examples/thttpd/content/Makefile b/nuttx/examples/thttpd/content/Makefile index 1e9937aa6..36974ad5a 100644 --- a/nuttx/examples/thttpd/content/Makefile +++ b/nuttx/examples/thttpd/content/Makefile @@ -33,7 +33,7 @@ # ############################################################################ -SUBDIRS = hello +SUBDIRS = hello tasks INSTALL_FILES = index.html style.css THTTPD_DIR = $(TOPDIR)/examples/thttpd diff --git a/nuttx/examples/thttpd/content/hello/hello.c b/nuttx/examples/thttpd/content/hello/hello.c index 9028d8fb9..e13817993 100644 --- a/nuttx/examples/thttpd/content/hello/hello.c +++ b/nuttx/examples/thttpd/content/hello/hello.c @@ -52,18 +52,29 @@ int main(int argc, char *argv[]) { fprintf(stderr, "Hello requested from: %s\n", getenv("REMOTE_ADDR")); - (void)printf( + puts( "Content-type: text/html\r\n" "Status: 200/html\r\n" "\r\n" - "<HTML>" - "<HEAD>" - "<TITLE>Hello</TITLE>" - "</HEAD>\r\n" - "<BODY>" - "<H2>Hello, World!</H2>" - "<P>Requested by: %s</P>" - "</BODY></HTML>\r\n", - getenv("REMOTE_ADDR")); + "<html>\r\n" + "<head>\r\n" + "<title>Hello!</title>\r\n" + "<link rel=\"stylesheet\" type=\"text/css\" href=\"/style.css\">\r\n" + "</head>\r\n" + "<body bgcolor=\"#fffeec\" text=\"black\">\r\n" + "<div class=\"menu\">\r\n" + "<div class=\"menubox\"><a href=\"/index.html\">Front page</a></div>\r\n" + "<div class=\"menubox\"><a href=\"hello\">Say Hello</a></div>\r\n" + "<div class=\"menubox\"><a href=\"tasks\">Tasks</a></div>\r\n" + "<div class=\"menubox\"><a href=\"netstat\">Network status</a></div>\r\n" + "<br>\r\n" + "</div>\r\n" + "<div class=\"contentblock\">\r\n"); + printf( + "<h2>Hello, World!</h2><p>Requested by: %s</p>\r\n", + getenv("REMOTE_ADDR")); + puts( + "</body>\r\n" + "</html>\r\n"); return 0; } diff --git a/nuttx/examples/thttpd/content/index.html b/nuttx/examples/thttpd/content/index.html index 3c9d21f00..1fba1fbf6 100644 --- a/nuttx/examples/thttpd/content/index.html +++ b/nuttx/examples/thttpd/content/index.html @@ -1,7 +1,7 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> - <title>NuttX examples/thttpd!</title> + <title>NuttX examples/thttpd</title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body bgcolor="#fffeec" text="black"> @@ -9,8 +9,8 @@ <div class="menu"> <div class="menubox"><a href="index.html">Front page</a></div> <div class="menubox"><a href="cgi-bin/hello">Say Hello</a></div> - <div class="menubox"><a href="cgi-bin/test1">Test1</a></div> - <div class="menubox"><a href="cgi-bin/test2">Test2</a></div> + <div class="menubox"><a href="cgi-bin/tasks">Tasks</a></div> + <div class="menubox"><a href="cgi-bin/netstat">Network status</a></div> <br> </div> diff --git a/nuttx/examples/thttpd/content/tasks/Makefile b/nuttx/examples/thttpd/content/tasks/Makefile new file mode 100755 index 000000000..2666e0b69 --- /dev/null +++ b/nuttx/examples/thttpd/content/tasks/Makefile @@ -0,0 +1,78 @@ +############################################################################ +# examples/thttpd/content/tasks/Makefile +# +# Copyright (C) 2009 Gregory Nutt. All rights reserved. +# Author: Gregory Nutt <spudmonkey@racsa.co.cr> +# +# 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 # Current configuration +-include $(TOPDIR)/Make.defs # Basic make info + +BIN = tasks + +R1SRCS = $(BIN).c +R1OBJS = $(R1SRCS:.c=.o) + +R2SRC = $(BIN)-thunk.S +R2OBJ = $(R2SRC:.S=.o) + +all: $(BIN) + +$(R1OBJS): %.o: %.c + @echo "CC: $<" + @$(CC) -c $(CPICFLAGS) $< -o $@ + +$(R2OBJ): %.o: %.S + @echo "AS: $<" + @$(CC) -c $(CPICFLAGS) $< -o $@ + +$(BIN).r1: $(R1OBJS) + @echo "LD: $<" + @$(LD) $(NXFLATLDFLAGS1) -o $@ $^ + +$(R2SRC): $(BIN).r1 + @echo "MK: $<" + @$(MKNXFLAT) -o $@ $^ + +$(BIN).r2: $(R2OBJ) + @echo "LD: $<" + @$(LD) $(NXFLATLDFLAGS2) -o $@ $(R1OBJS) $(R2OBJ) + +$(BIN): $(BIN).r2 + @echo "LD: $<" + @$(LDNXFLAT) $(LDNXFLATFLAGS) -o $@ $^ + +clean: + @rm -f $(BIN) $(R2SRC) *.o *.r1 *.r2 *~ .*.swp core + +install: + @install -m 0755 -D $(BIN) $(CGI_DIR)/$(BIN) + diff --git a/nuttx/examples/thttpd/content/tasks/tasks.c b/nuttx/examples/thttpd/content/tasks/tasks.c new file mode 100755 index 000000000..912c8df0a --- /dev/null +++ b/nuttx/examples/thttpd/content/tasks/tasks.c @@ -0,0 +1,168 @@ +/**************************************************************************** + * examples/thttpd/tasks.c + * + * Copyright (C) 2009 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt <spudmonkey@racsa.co.cr> + * + * 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. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include <nuttx/config.h> +#include <sys/types.h> + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <sched.h> + +/**************************************************************************** + * Definitions + ****************************************************************************/ + +/**************************************************************************** + * Private Types + ****************************************************************************/ + +/**************************************************************************** + * Private Function Prototypes + ****************************************************************************/ + +/**************************************************************************** + * Private Data + ****************************************************************************/ + +static const char *g_statenames[] = +{ + "INVALID ", + "PENDING ", + "READY ", + "RUNNING ", + "INACTIVE", + "WAITSEM ", +#ifndef CONFIG_DISABLE_MQUEUE + "WAITSIG ", +#endif +#ifndef CONFIG_DISABLE_MQUEUE + "MQNEMPTY", + "MQNFULL " +#endif +}; + +/**************************************************************************** + * Public Data + ****************************************************************************/ + +/**************************************************************************** + * Private Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: show_task + ****************************************************************************/ + +/* NOTE: One limitation in the use of NXFLAT is that functions that are + * referenced as a pointer-to-a-function must have global scope. Otherwise + * ARM GCC will generate some bad logic. + */ + +/* static */ void show_task(FAR _TCB *tcb, FAR void *arg) +{ + int i; + + /* Show task status */ + + printf("%5d %3d %4s %7s%c%c %8s ", + tcb->pid, tcb->sched_priority, + tcb->flags & TCB_FLAG_ROUND_ROBIN ? "RR " : "FIFO", + tcb->flags & TCB_FLAG_PTHREAD ? "PTHREAD" : "TASK ", + tcb->flags & TCB_FLAG_NONCANCELABLE ? 'N' : ' ', + tcb->flags & TCB_FLAG_CANCEL_PENDING ? 'P' : ' ', + g_statenames[tcb->task_state]); + + /* Show task name and arguments */ + + printf("%s(", tcb->argv[0]); + + /* Special case 1st argument (no comma) */ + + if (tcb->argv[1]) + { + printf("%p", tcb->argv[1]); + } + + /* Then any additional arguments */ + +#if CONFIG_MAX_TASK_ARGS > 2 + for (i = 2; i <= CONFIG_MAX_TASK_ARGS && tcb->argv[i]; i++) + { + printf(", %p", tcb->argv[i]); + } +#endif + printf(")\n"); +} + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +int main(int argc, char *argv[]) +{ + puts( + "Content-type: text/html\r\n" + "Status: 200/html\r\n" + "\r\n" + "<html>\r\n" + "<head>\r\n" + "<title>Hello!</title>\r\n" + "<link rel=\"stylesheet\" type=\"text/css\" href=\"/style.css\">\r\n" + "</head>\r\n" + "<body bgcolor=\"#fffeec\" text=\"black\">\r\n" + "<div class=\"menu\">\r\n" + "<div class=\"menubox\"><a href=\"/index.html\">Front page</a></div>\r\n" + "<div class=\"menubox\"><a href=\"hello\">Say Hello</a></div>\r\n" + "<div class=\"menubox\"><a href=\"tasks\">Tasks</a></div>\r\n" + "<div class=\"menubox\"><a href=\"netstat\">Network status</a></div>\r\n" + "<br>\r\n" + "</div>\r\n" + "<div class=\"contentblock\">\r\n" + "<pre>\r\n" + "PID PRI SCHD TYPE NP STATE NAME\r\n"); + + sched_foreach(show_task, NULL); + + puts( + "</pre>\r\n" + "</body>\r\n" + "</html>\r\n"); + return 0; +} |