Annotation of embedaddon/axTLS/httpd/axhttp.h, revision 1.1.1.1

1.1       misho       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>