From 6f9272bdabcda81425ec1aaecf26a160535d4749 Mon Sep 17 00:00:00 2001 From: Joshua Wise Date: Mon, 10 Nov 2008 23:35:23 -0500 Subject: [PATCH] Add httpd. --- aseg-paging/Makefile | 2 + include/minilib.h | 1 + lib/minilib.c | 10 ++ lwip/src/include/lwipopts.h | 37 +----- net/http/fs.c | 96 ++++++++++++++ net/http/fs.h | 44 ++++++ net/http/fsdata.c | 14 ++ net/http/fsdata.h | 42 ++++++ net/http/httpd.c | 258 ++++++++++++++++++++++++++++++++++++ net/http/httpd.h | 37 ++++++ net/net.c | 3 + 11 files changed, 509 insertions(+), 35 deletions(-) create mode 100644 net/http/fs.c create mode 100644 net/http/fs.h create mode 100644 net/http/fsdata.c create mode 100644 net/http/fsdata.h create mode 100644 net/http/httpd.c create mode 100644 net/http/httpd.h diff --git a/aseg-paging/Makefile b/aseg-paging/Makefile index a8d72cd..2a50935 100644 --- a/aseg-paging/Makefile +++ b/aseg-paging/Makefile @@ -40,6 +40,8 @@ OBJS = ../ich2/smi.o \ ../pci/pci-raw.o \ ../pci/pci-bother.o \ ../net/net.o \ + ../net/http/fs.o \ + ../net/http/httpd.o \ ../net/3c90x.o \ ../lib/minilib.o \ ../lib/doprnt.o \ diff --git a/include/minilib.h b/include/minilib.h index ef4f302..7d66efb 100644 --- a/include/minilib.h +++ b/include/minilib.h @@ -8,6 +8,7 @@ extern void memset(void *dest, int data, int bytes); extern void memmove(void *dest, void *src, int bytes); extern int memcmp(const char *a2, const char *a1, int bytes); extern int strcmp(const char *a2, const char *a1); +extern int strncmp(const char *a2, const char *a1, int n); extern int strlen(const char *c); extern void strcpy(char *a2, const char *a1); extern void puts(const char *c); diff --git a/lib/minilib.c b/lib/minilib.c index c1d36b6..e90f7af 100644 --- a/lib/minilib.c +++ b/lib/minilib.c @@ -50,6 +50,16 @@ int strcmp (const char *a2, const char *a1) { } } +int strncmp (const char *a2, const char *a1, int n) { + while (n--) { + if (*a2 != *a1) return 1; + if (*a2 == 0) return 0; + a1++; + a2++; + } + return 0; +} + int strlen(const char *c) { int l = 0; diff --git a/lwip/src/include/lwipopts.h b/lwip/src/include/lwipopts.h index 4ad4440..c2ef625 100644 --- a/lwip/src/include/lwipopts.h +++ b/lwip/src/include/lwipopts.h @@ -11,40 +11,7 @@ #define LWIP_DHCP 1 -#undef LWIP_DEBUG - -#define ETHARP_DEBUG LWIP_DBG_ON -#define NETIF_DEBUG LWIP_DBG_ON -#define PBUF_DEBUG LWIP_DBG_ON -#define API_LIB_DEBUG LWIP_DBG_OFF -#define API_MSG_DEBUG LWIP_DBG_OFF -#define SOCKETS_DEBUG LWIP_DBG_OFF -#define ICMP_DEBUG LWIP_DBG_OFF -#define IGMP_DEBUG LWIP_DBG_OFF -#define INET_DEBUG LWIP_DBG_OFF -#define IP_DEBUG LWIP_DBG_ON -#define IP_REASS_DEBUG LWIP_DBG_OFF -#define RAW_DEBUG LWIP_DBG_OFF -#define MEM_DEBUG LWIP_DBG_ON -#define MEMP_DEBUG LWIP_DBG_ON -#define SYS_DEBUG LWIP_DBG_OFF -#define TCP_DEBUG LWIP_DBG_ON -#define TCP_INPUT_DEBUG LWIP_DBG_ON -#define TCP_FR_DEBUG LWIP_DBG_OFF -#define TCP_RTO_DEBUG LWIP_DBG_OFF -#define TCP_CWND_DEBUG LWIP_DBG_OFF -#define TCP_WND_DEBUG LWIP_DBG_OFF -#define TCP_OUTPUT_DEBUG LWIP_DBG_OFF -#define TCP_RST_DEBUG LWIP_DBG_OFF -#define TCP_QLEN_DEBUG LWIP_DBG_OFF -#define UDP_DEBUG LWIP_DBG_OFF -#define TCPIP_DEBUG LWIP_DBG_OFF -#define PPP_DEBUG LWIP_DBG_OFF -#define SLIP_DEBUG LWIP_DBG_OFF -#define DHCP_DEBUG LWIP_DBG_OFF -#define AUTOIP_DEBUG LWIP_DBG_OFF -#define SNMP_MSG_DEBUG LWIP_DBG_OFF -#define SNMP_MIB_DEBUG LWIP_DBG_OFF -#define DNS_DEBUG LWIP_DBG_OFF +#define MEM_SIZE 65536 +#define TCP_SND_BUF 2048 #endif diff --git a/net/http/fs.c b/net/http/fs.c new file mode 100644 index 0000000..9e6358d --- /dev/null +++ b/net/http/fs.c @@ -0,0 +1,96 @@ +/* + * 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 + * + */ +#include "lwip/def.h" +#include "fs.h" +#include "fsdata.h" +#include "fsdata.c" + +/*-----------------------------------------------------------------------------------*/ + +void fill_regs(struct fs_file *file) +{ + static unsigned char buf[2048]; + + sprintf(buf, + "Registers" + "

At the time you requested this page, the system's registers were:

" + "
"
+    "%%eax: 0x%08x    %%ebx: 0x%08x    %%ecx: 0x%08x    %%edx: 0x%08x\n"
+    "%%ebp: 0x%08x    %%esi: 0x%08x    %%edi: 0x%08x    %%esp: 0x%08x\n"
+    "%%cr0: 0x%08x    %%cr3: 0x%08x    %%eip: 0x%08x    %%eflags: 0x%08x\n"
+    "
", + *(unsigned long*)0xAFFD0, + *(unsigned long*)0xAFFDC, + *(unsigned long*)0xAFFD4, + *(unsigned long*)0xAFFD8, + *(unsigned long*)0xAFFE4, + *(unsigned long*)0xAFFE8, + *(unsigned long*)0xAFFEC, + *(unsigned long*)0xAFFE0, + *(unsigned long*)0xAFFFC, + *(unsigned long*)0xAFFF8, + *(unsigned long*)0xAFFF0, + *(unsigned long*)0xAFFF4); + + + file->data = buf; + file->len = strlen(buf); +} + + +/*-----------------------------------------------------------------------------------*/ +int +fs_open(const char *name, struct fs_file *file) +{ + const struct fsdata_file *f; + + /* /registers.html is CGI */ + if (!strcmp(name, "/registers.html")) + { + fill_regs(file); + return 1; + } + + for(f = FS_ROOT; + f != NULL; + f = f->next) { + if (!strcmp(name, (const char*)f->name)) { + file->data = f->data; + file->len = f->len; + return 1; + } + } + file->data = "You clown..."; + file->len = 9; + return 0; +} +/*-----------------------------------------------------------------------------------*/ diff --git a/net/http/fs.h b/net/http/fs.h new file mode 100644 index 0000000..1f7d434 --- /dev/null +++ b/net/http/fs.h @@ -0,0 +1,44 @@ +/* + * 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 + * + */ +#ifndef __FS_H__ +#define __FS_H__ + +struct fs_file { + const unsigned char *data; + int len; +}; + +/* file must be allocated by caller and will be filled in + by the function. */ +int fs_open(const char *name, struct fs_file *file); + +#endif /* __FS_H__ */ diff --git a/net/http/fsdata.c b/net/http/fsdata.c new file mode 100644 index 0000000..7195a70 --- /dev/null +++ b/net/http/fsdata.c @@ -0,0 +1,14 @@ +static const unsigned char data_404_html[] = + "404 Not Found" + "

404 Not Found

This is probably not the machine you're looking for...

" + ""; + +static const unsigned char data_index_html[] = + "NetWatch!" + "

NetWatch!