Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
httpd.h
00001 /** 00002 * @file 00003 * HTTP server 00004 */ 00005 00006 /* 00007 * Copyright (c) 2001-2003 Swedish Institute of Computer Science. 00008 * All rights reserved. 00009 * 00010 * Redistribution and use in source and binary forms, with or without modification, 00011 * are permitted provided that the following conditions are met: 00012 * 00013 * 1. Redistributions of source code must retain the above copyright notice, 00014 * this list of conditions and the following disclaimer. 00015 * 2. Redistributions in binary form must reproduce the above copyright notice, 00016 * this list of conditions and the following disclaimer in the documentation 00017 * and/or other materials provided with the distribution. 00018 * 3. The name of the author may not be used to endorse or promote products 00019 * derived from this software without specific prior written permission. 00020 * 00021 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 00022 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 00023 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 00024 * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 00025 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 00026 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 00027 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 00028 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 00029 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 00030 * OF SUCH DAMAGE. 00031 * 00032 * This file is part of the lwIP TCP/IP stack. 00033 * 00034 * Author: Adam Dunkels <adam@sics.se> 00035 * 00036 * This version of the file has been modified by Texas Instruments to offer 00037 * simple server-side-include (SSI) and Common Gateway Interface (CGI) 00038 * capability. 00039 */ 00040 00041 #ifndef LWIP_HDR_APPS_HTTPD_H 00042 #define LWIP_HDR_APPS_HTTPD_H 00043 00044 #include "httpd_opts.h" 00045 #include "lwip/err.h" 00046 #include "lwip/pbuf.h" 00047 00048 #ifdef __cplusplus 00049 extern "C" { 00050 #endif 00051 00052 #if LWIP_HTTPD_CGI 00053 00054 /* 00055 * Function pointer for a CGI script handler. 00056 * 00057 * This function is called each time the HTTPD server is asked for a file 00058 * whose name was previously registered as a CGI function using a call to 00059 * http_set_cgi_handler. The iIndex parameter provides the index of the 00060 * CGI within the ppcURLs array passed to http_set_cgi_handler. Parameters 00061 * pcParam and pcValue provide access to the parameters provided along with 00062 * the URI. iNumParams provides a count of the entries in the pcParam and 00063 * pcValue arrays. Each entry in the pcParam array contains the name of a 00064 * parameter with the corresponding entry in the pcValue array containing the 00065 * value for that parameter. Note that pcParam may contain multiple elements 00066 * with the same name if, for example, a multi-selection list control is used 00067 * in the form generating the data. 00068 * 00069 * The function should return a pointer to a character string which is the 00070 * path and filename of the response that is to be sent to the connected 00071 * browser, for example "/thanks.htm" or "/response/error.ssi". 00072 * 00073 * The maximum number of parameters that will be passed to this function via 00074 * iNumParams is defined by LWIP_HTTPD_MAX_CGI_PARAMETERS. Any parameters in the incoming 00075 * HTTP request above this number will be discarded. 00076 * 00077 * Requests intended for use by this CGI mechanism must be sent using the GET 00078 * method (which encodes all parameters within the URI rather than in a block 00079 * later in the request). Attempts to use the POST method will result in the 00080 * request being ignored. 00081 * 00082 */ 00083 typedef const char *(*tCGIHandler)(int iIndex, int iNumParams, char *pcParam[], 00084 char *pcValue[]); 00085 00086 /* 00087 * Structure defining the base filename (URL) of a CGI and the associated 00088 * function which is to be called when that URL is requested. 00089 */ 00090 typedef struct 00091 { 00092 const char *pcCGIName; 00093 tCGIHandler pfnCGIHandler; 00094 } tCGI; 00095 00096 void http_set_cgi_handlers(const tCGI *pCGIs, int iNumHandlers); 00097 00098 #endif /* LWIP_HTTPD_CGI */ 00099 00100 #if LWIP_HTTPD_CGI || LWIP_HTTPD_CGI_SSI 00101 00102 #if LWIP_HTTPD_CGI_SSI 00103 /** Define this generic CGI handler in your application. 00104 * It is called once for every URI with parameters. 00105 * The parameters can be stored to 00106 */ 00107 extern void httpd_cgi_handler(const char* uri, int iNumParams, char **pcParam, char **pcValue 00108 #if defined(LWIP_HTTPD_FILE_STATE) && LWIP_HTTPD_FILE_STATE 00109 , void *connection_state 00110 #endif /* LWIP_HTTPD_FILE_STATE */ 00111 ); 00112 #endif /* LWIP_HTTPD_CGI_SSI */ 00113 00114 #endif /* LWIP_HTTPD_CGI || LWIP_HTTPD_CGI_SSI */ 00115 00116 #if LWIP_HTTPD_SSI 00117 00118 /* 00119 * Function pointer for the SSI tag handler callback. 00120 * 00121 * This function will be called each time the HTTPD server detects a tag of the 00122 * form <!--#name--> in a .shtml, .ssi or .shtm file where "name" appears as 00123 * one of the tags supplied to http_set_ssi_handler in the ppcTags array. The 00124 * returned insert string, which will be appended after the the string 00125 * "<!--#name-->" in file sent back to the client,should be written to pointer 00126 * pcInsert. iInsertLen contains the size of the buffer pointed to by 00127 * pcInsert. The iIndex parameter provides the zero-based index of the tag as 00128 * found in the ppcTags array and identifies the tag that is to be processed. 00129 * 00130 * The handler returns the number of characters written to pcInsert excluding 00131 * any terminating NULL or a negative number to indicate a failure (tag not 00132 * recognized, for example). 00133 * 00134 * Note that the behavior of this SSI mechanism is somewhat different from the 00135 * "normal" SSI processing as found in, for example, the Apache web server. In 00136 * this case, the inserted text is appended following the SSI tag rather than 00137 * replacing the tag entirely. This allows for an implementation that does not 00138 * require significant additional buffering of output data yet which will still 00139 * offer usable SSI functionality. One downside to this approach is when 00140 * attempting to use SSI within JavaScript. The SSI tag is structured to 00141 * resemble an HTML comment but this syntax does not constitute a comment 00142 * within JavaScript and, hence, leaving the tag in place will result in 00143 * problems in these cases. To work around this, any SSI tag which needs to 00144 * output JavaScript code must do so in an encapsulated way, sending the whole 00145 * HTML <script>...</script> section as a single include. 00146 */ 00147 typedef u16_t (*tSSIHandler)( 00148 #if LWIP_HTTPD_SSI_RAW 00149 const char* ssi_tag_name, 00150 #else /* LWIP_HTTPD_SSI_RAW */ 00151 int iIndex, 00152 #endif /* LWIP_HTTPD_SSI_RAW */ 00153 char *pcInsert, int iInsertLen 00154 #if LWIP_HTTPD_SSI_MULTIPART 00155 , u16_t current_tag_part, u16_t *next_tag_part 00156 #endif /* LWIP_HTTPD_SSI_MULTIPART */ 00157 #if defined(LWIP_HTTPD_FILE_STATE) && LWIP_HTTPD_FILE_STATE 00158 , void *connection_state 00159 #endif /* LWIP_HTTPD_FILE_STATE */ 00160 ); 00161 00162 /** Set the SSI handler function 00163 * (if LWIP_HTTPD_SSI_RAW==1, only the first argument is used) 00164 */ 00165 void http_set_ssi_handler(tSSIHandler pfnSSIHandler, 00166 const char **ppcTags, int iNumTags); 00167 00168 /** For LWIP_HTTPD_SSI_RAW==1, return this to indicate the tag is unknown. 00169 * In this case, the webserver writes a warning into the page. 00170 * You can also just return 0 to write nothing for unknown tags. 00171 */ 00172 #define HTTPD_SSI_TAG_UNKNOWN 0xFFFF 00173 00174 #endif /* LWIP_HTTPD_SSI */ 00175 00176 #if LWIP_HTTPD_SUPPORT_POST 00177 00178 /* These functions must be implemented by the application */ 00179 00180 /** Called when a POST request has been received. The application can decide 00181 * whether to accept it or not. 00182 * 00183 * @param connection Unique connection identifier, valid until httpd_post_end 00184 * is called. 00185 * @param uri The HTTP header URI receiving the POST request. 00186 * @param http_request The raw HTTP request (the first packet, normally). 00187 * @param http_request_len Size of 'http_request'. 00188 * @param content_len Content-Length from HTTP header. 00189 * @param response_uri Filename of response file, to be filled when denying the 00190 * request 00191 * @param response_uri_len Size of the 'response_uri' buffer. 00192 * @param post_auto_wnd Set this to 0 to let the callback code handle window 00193 * updates by calling 'httpd_post_data_recved' (to throttle rx speed) 00194 * default is 1 (httpd handles window updates automatically) 00195 * @return ERR_OK: Accept the POST request, data may be passed in 00196 * another err_t: Deny the POST request, send back 'bad request'. 00197 */ 00198 err_t httpd_post_begin(void *connection, const char *uri, const char *http_request, 00199 u16_t http_request_len, int content_len, char *response_uri, 00200 u16_t response_uri_len, u8_t *post_auto_wnd); 00201 00202 /** Called for each pbuf of data that has been received for a POST. 00203 * ATTENTION: The application is responsible for freeing the pbufs passed in! 00204 * 00205 * @param connection Unique connection identifier. 00206 * @param p Received data. 00207 * @return ERR_OK: Data accepted. 00208 * another err_t: Data denied, http_post_get_response_uri will be called. 00209 */ 00210 err_t httpd_post_receive_data(void *connection, struct pbuf *p); 00211 00212 /** Called when all data is received or when the connection is closed. 00213 * The application must return the filename/URI of a file to send in response 00214 * to this POST request. If the response_uri buffer is untouched, a 404 00215 * response is returned. 00216 * 00217 * @param connection Unique connection identifier. 00218 * @param response_uri Filename of response file, to be filled when denying the request 00219 * @param response_uri_len Size of the 'response_uri' buffer. 00220 */ 00221 void httpd_post_finished(void *connection, char *response_uri, u16_t response_uri_len); 00222 00223 #if LWIP_HTTPD_POST_MANUAL_WND 00224 void httpd_post_data_recved(void *connection, u16_t recved_len); 00225 #endif /* LWIP_HTTPD_POST_MANUAL_WND */ 00226 00227 #endif /* LWIP_HTTPD_SUPPORT_POST */ 00228 00229 void httpd_init(void); 00230 00231 00232 #ifdef __cplusplus 00233 } 00234 #endif 00235 00236 #endif /* LWIP_HTTPD_H */
Generated on Tue Jul 12 2022 12:21:55 by
