File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / axTLS / httpd / axhttp.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Fri Sep 28 11:55:55 2012 UTC (11 years, 9 months ago) by misho
Branches: v1_4_8, MAIN
CVS tags: datecs, HEAD
axTLS

    1: /*
    2:  * Copyright (c) 2007, Cameron Rich
    3:  * 
    4:  * All rights reserved.
    5:  * 
    6:  * Redistribution and use in source and binary forms, with or without 
    7:  * modification, are permitted provided that the following conditions are met:
    8:  *
    9:  * * Redistributions of source code must retain the above copyright notice, 
   10:  *   this list of conditions and the following disclaimer.
   11:  * * Redistributions in binary form must reproduce the above copyright notice, 
   12:  *   this list of conditions and the following disclaimer in the documentation 
   13:  *   and/or other materials provided with the distribution.
   14:  * * Neither the name of the axTLS project nor the names of its contributors 
   15:  *   may be used to endorse or promote products derived from this software 
   16:  *   without specific prior written permission.
   17:  *
   18:  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
   19:  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
   20:  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
   21:  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
   22:  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
   23:  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
   24:  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
   25:  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
   26:  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
   27:  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
   28:  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   29:  */
   30: 
   31: #include "os_port.h"
   32: #include "ssl.h"
   33: 
   34: #define BACKLOG 15
   35: #define VERSION "1.0.0"
   36: #ifdef CONFIG_HTTP_HAS_IPV6
   37: #define HAVE_IPV6
   38: #endif
   39: 
   40: #define MAXPOSTDATASIZE                     30000 /* adjust for file upload
   41:                                                      size*/
   42: #define MAXREQUESTLENGTH                    256
   43: #define MAXREADLENGTH                       8800  /* FF3=4096, IE7=8760 */
   44: #define BLOCKSIZE                           4096
   45: 
   46: #define INITIAL_CONNECTION_SLOTS            10
   47: #define CONFIG_HTTP_DEFAULT_SSL_OPTIONS     SSL_DISPLAY_CERTS
   48: 
   49: #define STATE_WANT_TO_READ_HEAD             1
   50: #define STATE_WANT_TO_SEND_HEAD             2
   51: #define STATE_WANT_TO_READ_FILE             3
   52: #define STATE_WANT_TO_SEND_FILE             4
   53: #define STATE_DOING_DIR                     5
   54: 
   55: enum
   56: {
   57:     TYPE_GET,
   58:     TYPE_HEAD,
   59:     TYPE_POST
   60: };
   61: 
   62: struct connstruct 
   63: {
   64:     struct connstruct *next;
   65:     int state;
   66:     int reqtype;
   67:     int networkdesc;
   68:     int filedesc;
   69:     SSL *ssl;
   70: 
   71: #if defined(CONFIG_HTTP_DIRECTORIES)
   72: #ifdef WIN32
   73:     HANDLE dirp;
   74:     WIN32_FIND_DATA file_data;
   75: #else
   76:     DIR *dirp;
   77: #endif
   78: #endif
   79: 
   80:     time_t timeout;
   81:     char actualfile[MAXREQUESTLENGTH];
   82:     char filereq[MAXREQUESTLENGTH];
   83:     char dirname[MAXREQUESTLENGTH];
   84:     char server_name[MAXREQUESTLENGTH];
   85:     int numbytes;
   86:     char databuf[BLOCKSIZE];
   87:     uint8_t is_ssl;
   88:     uint8_t is_v1_0;
   89:     uint8_t close_when_done;
   90:     time_t if_modified_since;
   91: 
   92: #if defined(CONFIG_HTTP_HAS_CGI)
   93:     uint8_t is_cgi;
   94:     char cgicontenttype[MAXREQUESTLENGTH];
   95:     int content_length;
   96:     char remote_addr[MAXREQUESTLENGTH];
   97:     char uri_request[MAXREQUESTLENGTH];
   98:     char uri_path_info[MAXREQUESTLENGTH];
   99:     char uri_query[MAXREQUESTLENGTH];
  100:     char cookie[MAXREQUESTLENGTH];
  101: #endif
  102: #if defined(CONFIG_HTTP_HAS_AUTHORIZATION)
  103:     char authorization[MAXREQUESTLENGTH];
  104: #endif
  105:   int post_read;
  106:   int post_state;
  107:   char *post_data;
  108: };
  109: 
  110: struct serverstruct 
  111: {
  112:     struct serverstruct *next;
  113:     int sd;
  114:     int is_ssl;
  115:     SSL_CTX *ssl_ctx;
  116: };
  117: 
  118: #if defined(CONFIG_HTTP_HAS_CGI)
  119: struct cgiextstruct 
  120: {
  121:     struct cgiextstruct *next;
  122:     char *ext;
  123: };
  124: #endif
  125: 
  126: /* global prototypes */
  127: extern struct serverstruct *servers;
  128: extern struct connstruct *usedconns;
  129: extern struct connstruct *freeconns;
  130: extern const char * const server_version;
  131: 
  132: #if defined(CONFIG_HTTP_HAS_CGI)
  133: extern struct cgiextstruct *cgiexts;
  134: #endif
  135: 
  136: /* conn.c prototypes */
  137: void removeconnection(struct connstruct *cn);
  138: 
  139: /* proc.c prototypes */
  140: void procdodir(struct connstruct *cn);
  141: void procreadhead(struct connstruct *cn);
  142: void procsendhead(struct connstruct *cn);
  143: void procreadfile(struct connstruct *cn);
  144: void procsendfile(struct connstruct *cn);
  145: #if defined(CONFIG_HTTP_HAS_CGI)
  146: void read_post_data(struct connstruct *cn);
  147: #endif
  148: 
  149: /* misc.c prototypes */
  150: char *my_strncpy(char *dest, const char *src, size_t n);
  151: int isdir(const char *name);
  152: 
  153: /* tdate prototypes */
  154: void tdate_init(void);
  155: time_t tdate_parse(const char* str);
  156: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>