Prusa MINI Firmware overview
Main Page
Modules
Classes
Files
File List
File Members
httpd.h
Go to the documentation of this file.
1
/**
2
* @file
3
* HTTP server
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 <adam@sics.se>
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_H
42
#define LWIP_HDR_APPS_HTTPD_H
43
44
#include "
httpd_opts.h
"
45
#include "
lwip/err.h
"
46
#include "
lwip/pbuf.h
"
47
48
#ifdef __cplusplus
49
extern
"C"
{
50
#endif
51
52
#if LWIP_HTTPD_CGI
53
54
/*
55
* Function pointer for a CGI script handler.
56
*
57
* This function is called each time the HTTPD server is asked for a file
58
* whose name was previously registered as a CGI function using a call to
59
* http_set_cgi_handler. The iIndex parameter provides the index of the
60
* CGI within the ppcURLs array passed to http_set_cgi_handler. Parameters
61
* pcParam and pcValue provide access to the parameters provided along with
62
* the URI. iNumParams provides a count of the entries in the pcParam and
63
* pcValue arrays. Each entry in the pcParam array contains the name of a
64
* parameter with the corresponding entry in the pcValue array containing the
65
* value for that parameter. Note that pcParam may contain multiple elements
66
* with the same name if, for example, a multi-selection list control is used
67
* in the form generating the data.
68
*
69
* The function should return a pointer to a character string which is the
70
* path and filename of the response that is to be sent to the connected
71
* browser, for example "/thanks.htm" or "/response/error.ssi".
72
*
73
* The maximum number of parameters that will be passed to this function via
74
* iNumParams is defined by LWIP_HTTPD_MAX_CGI_PARAMETERS. Any parameters in the incoming
75
* HTTP request above this number will be discarded.
76
*
77
* Requests intended for use by this CGI mechanism must be sent using the GET
78
* method (which encodes all parameters within the URI rather than in a block
79
* later in the request). Attempts to use the POST method will result in the
80
* request being ignored.
81
*
82
*/
83
typedef
const
char
*(*tCGIHandler)(
int
iIndex,
int
iNumParams,
char
*pcParam[],
84
char
*pcValue[]);
85
86
/*
87
* Structure defining the base filename (URL) of a CGI and the associated
88
* function which is to be called when that URL is requested.
89
*/
90
typedef
struct
91
{
92
const
char
*pcCGIName;
93
tCGIHandler pfnCGIHandler;
94
} tCGI;
95
96
void
http_set_cgi_handlers(
const
tCGI *pCGIs,
int
iNumHandlers);
97
98
#endif
/* LWIP_HTTPD_CGI */
99
100
#if LWIP_HTTPD_CGI || LWIP_HTTPD_CGI_SSI
101
102
#if LWIP_HTTPD_CGI_SSI
103
/** Define this generic CGI handler in your application.
104
* It is called once for every URI with parameters.
105
* The parameters can be stored to
106
*/
107
extern
void
httpd_cgi_handler(
const
char
* uri,
int
iNumParams,
char
**pcParam,
char
**pcValue
108
#
if
defined(
LWIP_HTTPD_FILE_STATE
) &&
LWIP_HTTPD_FILE_STATE
109
,
void
*connection_state
110
#endif
/* LWIP_HTTPD_FILE_STATE */
111
);
112
#endif
/* LWIP_HTTPD_CGI_SSI */
113
114
#endif
/* LWIP_HTTPD_CGI || LWIP_HTTPD_CGI_SSI */
115
116
#if LWIP_HTTPD_SSI
117
118
/*
119
* Function pointer for the SSI tag handler callback.
120
*
121
* This function will be called each time the HTTPD server detects a tag of the
122
* form <!--#name--> in a .shtml, .ssi or .shtm file where "name" appears as
123
* one of the tags supplied to http_set_ssi_handler in the ppcTags array. The
124
* returned insert string, which will be appended after the the string
125
* "<!--#name-->" in file sent back to the client,should be written to pointer
126
* pcInsert. iInsertLen contains the size of the buffer pointed to by
127
* pcInsert. The iIndex parameter provides the zero-based index of the tag as
128
* found in the ppcTags array and identifies the tag that is to be processed.
129
*
130
* The handler returns the number of characters written to pcInsert excluding
131
* any terminating NULL or a negative number to indicate a failure (tag not
132
* recognized, for example).
133
*
134
* Note that the behavior of this SSI mechanism is somewhat different from the
135
* "normal" SSI processing as found in, for example, the Apache web server. In
136
* this case, the inserted text is appended following the SSI tag rather than
137
* replacing the tag entirely. This allows for an implementation that does not
138
* require significant additional buffering of output data yet which will still
139
* offer usable SSI functionality. One downside to this approach is when
140
* attempting to use SSI within JavaScript. The SSI tag is structured to
141
* resemble an HTML comment but this syntax does not constitute a comment
142
* within JavaScript and, hence, leaving the tag in place will result in
143
* problems in these cases. To work around this, any SSI tag which needs to
144
* output JavaScript code must do so in an encapsulated way, sending the whole
145
* HTML <script>...</script> section as a single include.
146
*/
147
typedef
u16_t
(*tSSIHandler)(
148
#if LWIP_HTTPD_SSI_RAW
149
const
char
* ssi_tag_name,
150
#else
/* LWIP_HTTPD_SSI_RAW */
151
int
iIndex,
152
#endif
/* LWIP_HTTPD_SSI_RAW */
153
char
*pcInsert,
int
iInsertLen
154
#if LWIP_HTTPD_SSI_MULTIPART
155
,
u16_t
current_tag_part,
u16_t
*next_tag_part
156
#endif
/* LWIP_HTTPD_SSI_MULTIPART */
157
#if defined(LWIP_HTTPD_FILE_STATE) && LWIP_HTTPD_FILE_STATE
158
,
void
*connection_state
159
#endif
/* LWIP_HTTPD_FILE_STATE */
160
);
161
162
/** Set the SSI handler function
163
* (if LWIP_HTTPD_SSI_RAW==1, only the first argument is used)
164
*/
165
void
http_set_ssi_handler(tSSIHandler pfnSSIHandler,
166
const
char
**ppcTags,
int
iNumTags);
167
168
/** For LWIP_HTTPD_SSI_RAW==1, return this to indicate the tag is unknown.
169
* In this case, the webserver writes a warning into the page.
170
* You can also just return 0 to write nothing for unknown tags.
171
*/
172
#define HTTPD_SSI_TAG_UNKNOWN 0xFFFF
173
174
#endif
/* LWIP_HTTPD_SSI */
175
176
#if LWIP_HTTPD_SUPPORT_POST
177
178
/* These functions must be implemented by the application */
179
180
/** Called when a POST request has been received. The application can decide
181
* whether to accept it or not.
182
*
183
* @param connection Unique connection identifier, valid until httpd_post_end
184
* is called.
185
* @param uri The HTTP header URI receiving the POST request.
186
* @param http_request The raw HTTP request (the first packet, normally).
187
* @param http_request_len Size of 'http_request'.
188
* @param content_len Content-Length from HTTP header.
189
* @param response_uri Filename of response file, to be filled when denying the
190
* request
191
* @param response_uri_len Size of the 'response_uri' buffer.
192
* @param post_auto_wnd Set this to 0 to let the callback code handle window
193
* updates by calling 'httpd_post_data_recved' (to throttle rx speed)
194
* default is 1 (httpd handles window updates automatically)
195
* @return ERR_OK: Accept the POST request, data may be passed in
196
* another err_t: Deny the POST request, send back 'bad request'.
197
*/
198
err_t
httpd_post_begin(
void
*connection,
const
char
*uri,
const
char
*http_request,
199
u16_t
http_request_len,
int
content_len,
char
*response_uri,
200
u16_t
response_uri_len,
u8_t
*post_auto_wnd);
201
202
/** Called for each pbuf of data that has been received for a POST.
203
* ATTENTION: The application is responsible for freeing the pbufs passed in!
204
*
205
* @param connection Unique connection identifier.
206
* @param p Received data.
207
* @return ERR_OK: Data accepted.
208
* another err_t: Data denied, http_post_get_response_uri will be called.
209
*/
210
err_t
httpd_post_receive_data(
void
*connection,
struct
pbuf
*p);
211
212
/** Called when all data is received or when the connection is closed.
213
* The application must return the filename/URI of a file to send in response
214
* to this POST request. If the response_uri buffer is untouched, a 404
215
* response is returned.
216
*
217
* @param connection Unique connection identifier.
218
* @param response_uri Filename of response file, to be filled when denying the request
219
* @param response_uri_len Size of the 'response_uri' buffer.
220
*/
221
void
httpd_post_finished(
void
*connection,
char
*response_uri,
u16_t
response_uri_len);
222
223
#if LWIP_HTTPD_POST_MANUAL_WND
224
void
httpd_post_data_recved(
void
*connection,
u16_t
recved_len);
225
#endif
/* LWIP_HTTPD_POST_MANUAL_WND */
226
227
#endif
/* LWIP_HTTPD_SUPPORT_POST */
228
229
void
httpd_init
(
void
);
230
231
232
#ifdef __cplusplus
233
}
234
#endif
235
236
#endif
/* LWIP_HTTPD_H */
pbuf.h
u16_t
uint16_t u16_t
Definition:
arch.h:121
u8_t
uint8_t u8_t
Definition:
arch.h:119
err.h
err_t
s8_t err_t
Definition:
err.h:57
httpd_opts.h
httpd_init
void httpd_init(void)
pbuf
Definition:
pbuf.h:142
LWIP_HTTPD_FILE_STATE
#define LWIP_HTTPD_FILE_STATE
Definition:
httpd_opts.h:295
Prusa-Firmware-Buddy-Private1
lib
Middlewares
Third_Party
LwIP
src
include
lwip
apps
httpd.h
Generated by
1.8.16