1 /** 2 * @file 3 * HTTP server options list 4 */ 5 6 /* 7 * Copyright (c) 2001-2003 Swedish Institute of Computer Science. 8 * All rights reserved. 9 * 10 * Redistribution and use in source and binary forms, with or without modification, 11 * are permitted provided that the following conditions are met: 12 * 13 * 1. Redistributions of source code must retain the above copyright notice, 14 * this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright notice, 16 * this list of conditions and the following disclaimer in the documentation 17 * and/or other materials provided with the distribution. 18 * 3. The name of the author may not be used to endorse or promote products 19 * derived from this software without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 22 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 23 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 24 * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 26 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 29 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 30 * OF SUCH DAMAGE. 31 * 32 * This file is part of the lwIP TCP/IP stack. 33 * 34 * Author: Adam Dunkels <[email protected]> 35 * 36 * This version of the file has been modified by Texas Instruments to offer 37 * simple server-side-include (SSI) and Common Gateway Interface (CGI) 38 * capability. 39 */ 40 41 #ifndef LWIP_HDR_APPS_HTTPD_OPTS_H 42 #define LWIP_HDR_APPS_HTTPD_OPTS_H 43 44 #include "lwip/opt.h" 45 46 /** 47 * @defgroup httpd_opts Options 48 * @ingroup httpd 49 * @{ 50 */ 51 52 /** Set this to 1 to support CGI (old style) */ 53 #if !defined LWIP_HTTPD_CGI || defined __DOXYGEN__ 54 #define LWIP_HTTPD_CGI 0 55 #endif 56 57 /** Set this to 1 to support CGI (new style) */ 58 #if !defined LWIP_HTTPD_CGI_SSI || defined __DOXYGEN__ 59 #define LWIP_HTTPD_CGI_SSI 0 60 #endif 61 62 /** Set this to 1 to support SSI (Server-Side-Includes) */ 63 #if !defined LWIP_HTTPD_SSI || defined __DOXYGEN__ 64 #define LWIP_HTTPD_SSI 0 65 #endif 66 67 /** Set this to 1 to implement an SSI tag handler callback that gets a const char* 68 * to the tag (instead of an index into a pre-registered array of known tags) */ 69 #if !defined LWIP_HTTPD_SSI_RAW || defined __DOXYGEN__ 70 #define LWIP_HTTPD_SSI_RAW 0 71 #endif 72 73 /** Set this to 1 to support HTTP POST */ 74 #if !defined LWIP_HTTPD_SUPPORT_POST || defined __DOXYGEN__ 75 #define LWIP_HTTPD_SUPPORT_POST 0 76 #endif 77 78 /* The maximum number of parameters that the CGI handler can be sent. */ 79 #if !defined LWIP_HTTPD_MAX_CGI_PARAMETERS || defined __DOXYGEN__ 80 #define LWIP_HTTPD_MAX_CGI_PARAMETERS 16 81 #endif 82 83 /** LWIP_HTTPD_SSI_MULTIPART==1: SSI handler function is called with 2 more 84 * arguments indicating a counter for insert string that are too long to be 85 * inserted at once: the SSI handler function must then set 'next_tag_part' 86 * which will be passed back to it in the next call. */ 87 #if !defined LWIP_HTTPD_SSI_MULTIPART || defined __DOXYGEN__ 88 #define LWIP_HTTPD_SSI_MULTIPART 0 89 #endif 90 91 /* The maximum length of the string comprising the tag name */ 92 #if !defined LWIP_HTTPD_MAX_TAG_NAME_LEN || defined __DOXYGEN__ 93 #define LWIP_HTTPD_MAX_TAG_NAME_LEN 8 94 #endif 95 96 /* The maximum length of string that can be returned to replace any given tag */ 97 #if !defined LWIP_HTTPD_MAX_TAG_INSERT_LEN || defined __DOXYGEN__ 98 #define LWIP_HTTPD_MAX_TAG_INSERT_LEN 192 99 #endif 100 101 #if !defined LWIP_HTTPD_POST_MANUAL_WND || defined __DOXYGEN__ 102 #define LWIP_HTTPD_POST_MANUAL_WND 0 103 #endif 104 105 /** This string is passed in the HTTP header as "Server: " */ 106 #if !defined HTTPD_SERVER_AGENT || defined __DOXYGEN__ 107 #define HTTPD_SERVER_AGENT "lwIP/" LWIP_VERSION_STRING " (http://savannah.nongnu.org/projects/lwip)" 108 #endif 109 110 /** Set this to 1 if you want to include code that creates HTTP headers 111 * at runtime. Default is off: HTTP headers are then created statically 112 * by the makefsdata tool. Static headers mean smaller code size, but 113 * the (readonly) fsdata will grow a bit as every file includes the HTTP 114 * header. */ 115 #if !defined LWIP_HTTPD_DYNAMIC_HEADERS || defined __DOXYGEN__ 116 #define LWIP_HTTPD_DYNAMIC_HEADERS 0 117 #endif 118 119 #if !defined HTTPD_DEBUG || defined __DOXYGEN__ 120 #define HTTPD_DEBUG LWIP_DBG_OFF 121 #endif 122 123 /** Set this to 1 to use a memp pool for allocating 124 * struct http_state instead of the heap. 125 */ 126 #if !defined HTTPD_USE_MEM_POOL || defined __DOXYGEN__ 127 #define HTTPD_USE_MEM_POOL 0 128 #endif 129 130 /** The server port for HTTPD to use */ 131 #if !defined HTTPD_SERVER_PORT || defined __DOXYGEN__ 132 #define HTTPD_SERVER_PORT 80 133 #endif 134 135 /** Maximum retries before the connection is aborted/closed. 136 * - number of times pcb->poll is called -> default is 4*500ms = 2s; 137 * - reset when pcb->sent is called 138 */ 139 #if !defined HTTPD_MAX_RETRIES || defined __DOXYGEN__ 140 #define HTTPD_MAX_RETRIES 4 141 #endif 142 143 /** The poll delay is X*500ms */ 144 #if !defined HTTPD_POLL_INTERVAL || defined __DOXYGEN__ 145 #define HTTPD_POLL_INTERVAL 4 146 #endif 147 148 /** Priority for tcp pcbs created by HTTPD (very low by default). 149 * Lower priorities get killed first when running out of memory. 150 */ 151 #if !defined HTTPD_TCP_PRIO || defined __DOXYGEN__ 152 #define HTTPD_TCP_PRIO TCP_PRIO_MIN 153 #endif 154 155 /** Set this to 1 to enable timing each file sent */ 156 #if !defined LWIP_HTTPD_TIMING || defined __DOXYGEN__ 157 #define LWIP_HTTPD_TIMING 0 158 #endif 159 /** Set this to 1 to enable timing each file sent */ 160 #if !defined HTTPD_DEBUG_TIMING || defined __DOXYGEN__ 161 #define HTTPD_DEBUG_TIMING LWIP_DBG_OFF 162 #endif 163 164 /** Set this to one to show error pages when parsing a request fails instead 165 of simply closing the connection. */ 166 #if !defined LWIP_HTTPD_SUPPORT_EXTSTATUS || defined __DOXYGEN__ 167 #define LWIP_HTTPD_SUPPORT_EXTSTATUS 0 168 #endif 169 170 /** Set this to 0 to drop support for HTTP/0.9 clients (to save some bytes) */ 171 #if !defined LWIP_HTTPD_SUPPORT_V09 || defined __DOXYGEN__ 172 #define LWIP_HTTPD_SUPPORT_V09 1 173 #endif 174 175 /** Set this to 1 to enable HTTP/1.1 persistent connections. 176 * ATTENTION: If the generated file system includes HTTP headers, these must 177 * include the "Connection: keep-alive" header (pass argument "-11" to makefsdata). 178 */ 179 #if !defined LWIP_HTTPD_SUPPORT_11_KEEPALIVE || defined __DOXYGEN__ 180 #define LWIP_HTTPD_SUPPORT_11_KEEPALIVE 0 181 #endif 182 183 /** Set this to 1 to support HTTP request coming in in multiple packets/pbufs */ 184 #if !defined LWIP_HTTPD_SUPPORT_REQUESTLIST || defined __DOXYGEN__ 185 #define LWIP_HTTPD_SUPPORT_REQUESTLIST 1 186 #endif 187 188 #if LWIP_HTTPD_SUPPORT_REQUESTLIST 189 /** Number of rx pbufs to enqueue to parse an incoming request (up to the first 190 newline) */ 191 #if !defined LWIP_HTTPD_REQ_QUEUELEN || defined __DOXYGEN__ 192 #define LWIP_HTTPD_REQ_QUEUELEN 5 193 #endif 194 195 /** Number of (TCP payload-) bytes (in pbufs) to enqueue to parse and incoming 196 request (up to the first double-newline) */ 197 #if !defined LWIP_HTTPD_REQ_BUFSIZE || defined __DOXYGEN__ 198 #define LWIP_HTTPD_REQ_BUFSIZE LWIP_HTTPD_MAX_REQ_LENGTH 199 #endif 200 201 /** Defines the maximum length of a HTTP request line (up to the first CRLF, 202 copied from pbuf into this a global buffer when pbuf- or packet-queues 203 are received - otherwise the input pbuf is used directly) */ 204 #if !defined LWIP_HTTPD_MAX_REQ_LENGTH || defined __DOXYGEN__ 205 #define LWIP_HTTPD_MAX_REQ_LENGTH LWIP_MIN(1023, (LWIP_HTTPD_REQ_QUEUELEN * PBUF_POOL_BUFSIZE)) 206 #endif 207 #endif /* LWIP_HTTPD_SUPPORT_REQUESTLIST */ 208 209 /** This is the size of a static buffer used when URIs end with '/'. 210 * In this buffer, the directory requested is concatenated with all the 211 * configured default file names. 212 * Set to 0 to disable checking default filenames on non-root directories. 213 */ 214 #if !defined LWIP_HTTPD_MAX_REQUEST_URI_LEN || defined __DOXYGEN__ 215 #define LWIP_HTTPD_MAX_REQUEST_URI_LEN 63 216 #endif 217 218 /** Maximum length of the filename to send as response to a POST request, 219 * filled in by the application when a POST is finished. 220 */ 221 #if !defined LWIP_HTTPD_POST_MAX_RESPONSE_URI_LEN || defined __DOXYGEN__ 222 #define LWIP_HTTPD_POST_MAX_RESPONSE_URI_LEN 63 223 #endif 224 225 /** Set this to 0 to not send the SSI tag (default is on, so the tag will 226 * be sent in the HTML page */ 227 #if !defined LWIP_HTTPD_SSI_INCLUDE_TAG || defined __DOXYGEN__ 228 #define LWIP_HTTPD_SSI_INCLUDE_TAG 1 229 #endif 230 231 /** Set this to 1 to call tcp_abort when tcp_close fails with memory error. 232 * This can be used to prevent consuming all memory in situations where the 233 * HTTP server has low priority compared to other communication. */ 234 #if !defined LWIP_HTTPD_ABORT_ON_CLOSE_MEM_ERROR || defined __DOXYGEN__ 235 #define LWIP_HTTPD_ABORT_ON_CLOSE_MEM_ERROR 0 236 #endif 237 238 /** Set this to 1 to kill the oldest connection when running out of 239 * memory for 'struct http_state' or 'struct http_ssi_state'. 240 * ATTENTION: This puts all connections on a linked list, so may be kind of slow. 241 */ 242 #if !defined LWIP_HTTPD_KILL_OLD_ON_CONNECTIONS_EXCEEDED || defined __DOXYGEN__ 243 #define LWIP_HTTPD_KILL_OLD_ON_CONNECTIONS_EXCEEDED 0 244 #endif 245 246 /** Set this to 1 to send URIs without extension without headers 247 * (who uses this at all??) */ 248 #if !defined LWIP_HTTPD_OMIT_HEADER_FOR_EXTENSIONLESS_URI || defined __DOXYGEN__ 249 #define LWIP_HTTPD_OMIT_HEADER_FOR_EXTENSIONLESS_URI 0 250 #endif 251 252 /** Default: Tags are sent from struct http_state and are therefore volatile */ 253 #if !defined HTTP_IS_TAG_VOLATILE || defined __DOXYGEN__ 254 #define HTTP_IS_TAG_VOLATILE(ptr) TCP_WRITE_FLAG_COPY 255 #endif 256 257 /* By default, the httpd is limited to send 2*pcb->mss to keep resource usage low 258 when http is not an important protocol in the device. */ 259 #if !defined HTTPD_LIMIT_SENDING_TO_2MSS || defined __DOXYGEN__ 260 #define HTTPD_LIMIT_SENDING_TO_2MSS 1 261 #endif 262 263 /* Define this to a function that returns the maximum amount of data to enqueue. 264 The function have this signature: u16_t fn(struct tcp_pcb* pcb); */ 265 #if !defined HTTPD_MAX_WRITE_LEN || defined __DOXYGEN__ 266 #if HTTPD_LIMIT_SENDING_TO_2MSS 267 #define HTTPD_MAX_WRITE_LEN(pcb) (2 * tcp_mss(pcb)) 268 #endif 269 #endif 270 271 /*------------------- FS OPTIONS -------------------*/ 272 273 /** Set this to 1 and provide the functions: 274 * - "int fs_open_custom(struct fs_file *file, const char *name)" 275 * Called first for every opened file to allow opening files 276 * that are not included in fsdata(_custom).c 277 * - "void fs_close_custom(struct fs_file *file)" 278 * Called to free resources allocated by fs_open_custom(). 279 */ 280 #if !defined LWIP_HTTPD_CUSTOM_FILES || defined __DOXYGEN__ 281 #define LWIP_HTTPD_CUSTOM_FILES 0 282 #endif 283 284 /** Set this to 1 to support fs_read() to dynamically read file data. 285 * Without this (default=off), only one-block files are supported, 286 * and the contents must be ready after fs_open(). 287 */ 288 #if !defined LWIP_HTTPD_DYNAMIC_FILE_READ || defined __DOXYGEN__ 289 #define LWIP_HTTPD_DYNAMIC_FILE_READ 0 290 #endif 291 292 /** Set this to 1 to include an application state argument per file 293 * that is opened. This allows to keep a state per connection/file. 294 */ 295 #if !defined LWIP_HTTPD_FILE_STATE || defined __DOXYGEN__ 296 #define LWIP_HTTPD_FILE_STATE 0 297 #endif 298 299 /** HTTPD_PRECALCULATED_CHECKSUM==1: include precompiled checksums for 300 * predefined (MSS-sized) chunks of the files to prevent having to calculate 301 * the checksums at runtime. */ 302 #if !defined HTTPD_PRECALCULATED_CHECKSUM || defined __DOXYGEN__ 303 #define HTTPD_PRECALCULATED_CHECKSUM 0 304 #endif 305 306 /** LWIP_HTTPD_FS_ASYNC_READ==1: support asynchronous read operations 307 * (fs_read_async returns FS_READ_DELAYED and calls a callback when finished). 308 */ 309 #if !defined LWIP_HTTPD_FS_ASYNC_READ || defined __DOXYGEN__ 310 #define LWIP_HTTPD_FS_ASYNC_READ 0 311 #endif 312 313 /** Set this to 1 to include "fsdata_custom.c" instead of "fsdata.c" for the 314 * file system (to prevent changing the file included in CVS) */ 315 #if !defined HTTPD_USE_CUSTOM_FSDATA || defined __DOXYGEN__ 316 #define HTTPD_USE_CUSTOM_FSDATA 0 317 #endif 318 319 /** 320 * @} 321 */ 322 323 #endif /* LWIP_HDR_APPS_HTTPD_OPTS_H */ 324