diff packages/net/athttpd/current/include/http.h @ 2250:0830ae6acddc

Add ATHTTPD server from Anthony Tonizzo.
author jlarmour
date Tue, 18 Jul 2006 16:37:23 +0000
parents
children bd648d8929f6
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/packages/net/athttpd/current/include/http.h
@@ -0,0 +1,202 @@
+/* =================================================================
+ *
+ *      http.h
+ *
+ *      Improved HTTPD server.
+ *
+ * ================================================================= 
+ * ####ECOSGPLCOPYRIGHTBEGIN####
+ * -------------------------------------------
+ * This file is part of eCos, the Embedded Configurable Operating
+ * System.
+ * Copyright (C) 2005 eCosCentric Ltd.
+ * 
+ * eCos is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 or (at your option)
+ * any later version.
+ * 
+ * eCos is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with eCos; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ * 
+ * As a special exception, if other files instantiate templates or
+ * use macros or inline functions from this file, or you compile this
+ * file and link it with other works to produce a work based on this
+ * file, this file does not by itself cause the resulting work to be
+ * covered by the GNU General Public License. However the source code
+ * for this file must still be made available in accordance with
+ * section (3) of the GNU General Public License.
+ * 
+ * This exception does not invalidate any other reasons why a work
+ * based on this file might be covered by the GNU General Public
+ * License.
+ *
+ * -------------------------------------------
+ * ####ECOSGPLCOPYRIGHTEND####
+ * =================================================================
+ * #####DESCRIPTIONBEGIN####
+ * 
+ *  Author(s):    Anthony Tonizzo (atonizzo@gmail.com)
+ *  Contributors: 
+ *  Date:         2006-06-12
+ *  Purpose:      
+ *  Description:  
+ *               
+ * ####DESCRIPTIONEND####
+ * 
+ * =================================================================
+ */
+#ifndef __HTTP_H__
+#define __HTTP_H__
+
+#include <pkgconf/system.h>
+#include <pkgconf/isoinfra.h>
+#include <cyg/hal/hal_tables.h>
+
+#include <pkgconf/athttpd.h>
+#include <cyg/athttpd/auth.h>
+
+#ifdef CYGOPT_NET_ATHTTPD_USE_CGIBIN_TCL
+#include <cyg/athttpd/jim.h>
+#endif
+
+
+typedef enum cyg_httpd_req_type
+{
+    CYG_HTTPD_METHOD_GET = 1,
+    CYG_HTTPD_METHOD_HEAD = 2,
+    CYG_HTTPD_METHOD_POST = 3
+} cyg_httpd_req_type;
+
+#define CYG_HTTPD_MAXURL                    128
+#define CYG_HTTPD_MAXPATH                   128
+
+#define CYG_HTTPD_MAXINBUFFER               CYGNUM_ATHTTPD_SERVER_BUFFER_SIZE
+#define CYG_HTTPD_MAXOUTBUFFER              CYGNUM_ATHTTPD_SERVER_BUFFER_SIZE
+
+#define CYG_HTTPD_DEFAULT_CGIBIN_OBJLOADER_EXTENSION ".o"
+#define CYG_HTTPD_DEFAULT_CGIBIN_TCL_EXTENSION       ".tcl"
+
+#define CYG_HTTPD_TIME_STRING_LEN                 32
+
+#define CYG_HTTPD_STATUS_OK                      200
+#define CYG_HTTPD_STATUS_MOVED_PERMANENTLY       301
+#define CYG_HTTPD_STATUS_NOT_MODIFIED            304
+#define CYG_HTTPD_STATUS_BAD_REQUEST             400
+#define CYG_HTTPD_STATUS_NOT_AUTHORIZED          401
+#define CYG_HTTPD_STATUS_FORBIDDEN               403
+#define CYG_HTTPD_STATUS_NOT_FOUND               404
+#define CYG_HTTPD_STATUS_METHOD_NOT_ALLOWED      405
+#define CYG_HTTPD_STATUS_SYSTEM_ERROR            500
+#define CYG_HTTPD_STATUS_NOT_IMPLEMENTED         501
+
+#define CYG_HTTPD_MODE_CLOSE_CONN             0x0001
+#define CYG_HTTPD_MODE_TRANSFER_CHUNKED       0x0002
+#define CYG_HTTPD_SEND_HEADER_ONLY            0x0004
+
+// This must be generated at random...
+#define CYG_HTTPD_MD5_AUTH_NAME                "MD5"
+#define CYG_HTTPD_MD5_AUTH_QOP                 "auth"
+#define CYG_HTTPD_MD5_AUTH_OPAQUE              "0000000000000000"
+
+typedef struct __socket_entry
+{
+    cyg_int32 descriptor;
+    time_t    timestamp;
+} socket_entry; 
+
+// =============================================================================
+// Main HTTP structure.
+// =============================================================================
+typedef struct
+{
+    cyg_httpd_req_type method;    
+    fd_set       rfds;
+
+    cyg_int32    host[4];
+
+    char         url[CYG_HTTPD_MAXURL+1];
+    char         inbuffer[CYG_HTTPD_MAXINBUFFER+1];  
+    cyg_int32    inbuffer_len;
+
+
+    // Packet status.
+    //
+    //   bit      Description
+    // -------------------------------------------------------------------------
+    //    0       When set inserts 'Pragma: no-cache' and 
+    //             'Cache-control: no-cache' in the header. Default for callback
+    //             functions.
+    //    1       When to close the connection: 
+    //             'Connection: close' when 0, 'Connection: keep-alive' when 1.
+    cyg_uint16   mode;
+    
+    // Ouptut data.
+    cyg_uint16   status_code;
+    char        *mime_type;
+    cyg_int32    payload_len;
+    char         outbuffer[CYG_HTTPD_MAXOUTBUFFER+1];
+
+    socket_entry sockets[CYGNUM_FILEIO_NFILE];
+    cyg_int32    fdmax;
+    
+    // Socket handle.
+    cyg_int32    client_index;
+
+    time_t       modified_since;
+    time_t       last_modified;
+    
+#ifdef CYGOPT_NET_ATHTTPD_USE_CGIBIN_TCL
+    Jim_Interp *jim_interp;
+#endif    
+
+    // This pointer points to the information about the domain that needs
+    //  to be authenticated. It is only used by the function that builds the
+    //  header.
+    cyg_httpd_auth_table_entry *needs_auth;
+
+    struct sockaddr_in server_conn;
+    struct sockaddr_in client_conn;
+} CYG_HTTPD_STATE;
+
+extern CYG_HTTPD_STATE httpstate;
+
+extern const char *day_of_week[];
+extern const char *month_of_year[]; 
+
+struct cyg_httpd_mime_table_entry
+{
+    char *extension;
+    char *mime_string;
+} CYG_HAL_TABLE_TYPE;
+
+typedef struct cyg_httpd_mime_table_entry cyg_httpd_mime_table_entry;
+
+#define CYG_HTTPD_MIME_TABLE_ENTRY(__name, __pattern, __arg) \
+cyg_httpd_mime_table_entry __name CYG_HAL_TABLE_ENTRY(httpd_mime_table) = \
+                                                          { __pattern, __arg } 
+
+extern cyg_int32 debug_print;
+
+void cyg_httpd_format_time_string(char*, time_t*);
+void cyg_httpd_set_home_page(cyg_int8*);
+char* cyg_httpd_find_mime_string(char*);
+cyg_int32 cyg_httpd_initialize(void);
+void cyg_httpd_cleanup_filename(char*);
+char* cyg_httpd_parse_GET(char*);
+char* cyg_httpd_parse_POST(char*);
+char* cyg_httpd_parse_HEAD(char*);
+void cyg_httpd_handle_method_GET(void);
+void cyg_httpd_handle_method_HEAD(void);
+cyg_int32 cyg_httpd_process_method(void);
+void cyg_httpd_send_file(char*);
+void cyg_httpd_send_error(cyg_int32);
+cyg_int32 cyg_httpd_format_header(void);
+
+#endif