rev |
line source |
jbe@0
|
1
|
jbe@0
|
2 Moonbridge reference
|
jbe@0
|
3 ====================
|
jbe@0
|
4
|
jbe@0
|
5
|
jbe@0
|
6
|
jbe@52
|
7 Global function listen{...}
|
jbe@0
|
8 ---------------------------
|
jbe@0
|
9
|
jbe@0
|
10 This function initializes the Moonbridge Network Server. It may be called
|
jbe@0
|
11 multiple times. However, it is not allowed to register additional listeners by
|
jbe@0
|
12 calling listen(...) from a "prepare", "connect", or "finish" handler.
|
jbe@0
|
13
|
jbe@0
|
14 See file "example.lua" for parametrization of the listen(...) function.
|
jbe@0
|
15
|
jbe@0
|
16 Warning: Moonbridge will fork the Lua environment to handle parallel requests.
|
jbe@0
|
17 Functions provided as "prepare", "connect", and "finish" handlers may access
|
jbe@0
|
18 global variables, but for every child process these global variables will not
|
jbe@0
|
19 be shared! If you require a global state, a DBMS, cache server, or similar is
|
jbe@0
|
20 necessary.
|
jbe@0
|
21
|
jbe@0
|
22
|
jbe@0
|
23
|
jbe@50
|
24 Global function timeout(...)
|
jbe@50
|
25 ----------------------------
|
jbe@50
|
26
|
jbe@50
|
27 Calling this function with a positive number (time in seconds) sets a timer
|
jbe@50
|
28 that kills the current process after the selected time runs out. The remaining
|
jbe@50
|
29 time can be queried by calling this function without arguments.
|
jbe@50
|
30
|
jbe@50
|
31 Calling this function with a single argument that is the number zero will
|
jbe@50
|
32 disable the timeout.
|
jbe@50
|
33
|
jbe@50
|
34 Another mode of operation is selected by passing two arguments: a time (in
|
jbe@50
|
35 seconds) as first argument and a function as second argument. In this case, a
|
jbe@50
|
36 sub-timer will be used to limit the execution time of the function. In case of
|
jbe@50
|
37 timeout, the process will be killed (and the timeout function does not return).
|
jbe@50
|
38 If the time for the sub-timer is longer than a previously set timeout (using
|
jbe@50
|
39 the timeout(...) function with one argument), the shorter timeout (of the
|
jbe@50
|
40 previous call of timeout(...)) will have precedence.
|
jbe@50
|
41
|
jbe@52
|
42 Timers are also automatically reset (disabled) when a handler (prepare handler
|
jbe@52
|
43 or connect handler) returns. To shutdown processes after a certain time waiting
|
jbe@52
|
44 for a new request, use the idle_time parameter of the listen function.
|
jbe@52
|
45
|
jbe@50
|
46
|
jbe@50
|
47
|
jbe@66
|
48 Function io.poll(read_fds, write_fds, timeout)
|
jbe@66
|
49 ----------------------------------------------
|
jbe@66
|
50
|
jbe@66
|
51 This function allows to wait for file descriptors to become ready for reading
|
jbe@66
|
52 or writing. It accepts the following arguments:
|
jbe@66
|
53
|
jbe@66
|
54 1. Table of file descriptors to wait for reading (optional, may be nil)
|
jbe@66
|
55 2. Table of file descriptors to wait for writing (optional, may be nil)
|
jbe@66
|
56 3. Timeout in seconds (optional, may be nil or zero to disable timeout)
|
jbe@66
|
57
|
jbe@74
|
58 Alternatively to file descriptors, the tables may contain file handles, in
|
jbe@74
|
59 which case the file descriptor is automatically extracted from the file handle
|
jbe@77
|
60 and, in case of waiting for reading, the file handle's buffer is additionally
|
jbe@77
|
61 tested for pending data.
|
jbe@66
|
62
|
jbe@66
|
63 Please note that support for non-blocking I/O operations is limited if you use
|
jbe@66
|
64 ordinary file handles (as Moonbridge does). It is possible, however, to wait
|
jbe@66
|
65 until the first byte to read is available at a file handle. For more
|
jbe@66
|
66 information, see socket.input:pending().
|
jbe@66
|
67
|
jbe@66
|
68
|
jbe@66
|
69
|
jbe@0
|
70 Socket object passed to "connect" handler
|
jbe@0
|
71 -----------------------------------------
|
jbe@0
|
72
|
jbe@0
|
73 For every incoming connection, the registered "connect" handler is called with
|
jbe@0
|
74 a single socket object as argument, which is described below:
|
jbe@0
|
75
|
jbe@0
|
76
|
jbe@0
|
77 ### socket:cancel()
|
jbe@0
|
78
|
jbe@0
|
79 Closes the socket connection by sending a TCP RST package if possible to
|
jbe@43
|
80 indicate error condition. Returns true on success, or nil plus error message in
|
jbe@43
|
81 case of an I/O error. Using this method on sockets that have already been
|
jbe@43
|
82 closed (or canceled) will throw an error.
|
jbe@0
|
83
|
jbe@0
|
84 Warning: Previously sent (and flushed) data may be lost during transmission.
|
jbe@0
|
85
|
jbe@0
|
86
|
jbe@0
|
87 ### socket:close(timeout)
|
jbe@0
|
88
|
jbe@0
|
89 Closes the socket connection (input and output stream) by flushing all data and
|
jbe@43
|
90 sending a TCP FIN package. Returns true on success, or nil plus error message
|
jbe@43
|
91 in case of an I/O error. Using this method on sockets that have already been
|
jbe@43
|
92 closed (or canceled) will throw an error.
|
jbe@0
|
93
|
jbe@0
|
94 Warning: Pending data on the input stream may cause connection aborts (TCP RST)
|
jbe@0
|
95 depending on the particular operating system used. All pending input data
|
jbe@0
|
96 should have been read before calling socket:close().
|
jbe@0
|
97
|
jbe@0
|
98 The optional timeout parameter may be used to wait until all data has been sent
|
jbe@0
|
99 out, or until the timeout elapses (in which case a TCP RST is sent) whichever
|
jbe@0
|
100 happens first. A timeout value of 0 or nil causes immediate return and sending
|
jbe@0
|
101 of pending data in background (recommended).
|
jbe@0
|
102
|
jbe@0
|
103
|
jbe@0
|
104 ### socket:flush()
|
jbe@0
|
105
|
jbe@0
|
106 Alias for socket.output:flush()
|
jbe@0
|
107
|
jbe@0
|
108
|
jbe@0
|
109 ### socket.input
|
jbe@0
|
110
|
jbe@0
|
111 Lua file handle representing the input stream of the socket connection.
|
jbe@0
|
112 Supports the same methods as io.open()'s return values.
|
jbe@0
|
113
|
jbe@0
|
114
|
jbe@71
|
115 ### socket.input:xread(maxlen, terminator)
|
jbe@66
|
116
|
jbe@71
|
117 Reads as many bytes until either the maximum length is reached (first argument)
|
jbe@71
|
118 or a terminating character (second argument as string with a length of 1) is
|
jbe@71
|
119 encountered. In the latter case, the terminating character will be included in
|
jbe@71
|
120 the result.
|
jbe@66
|
121
|
jbe@71
|
122 On EOF, false (as first result value) and an error message (as second result
|
jbe@71
|
123 value) are returned. In case of an I/O error, nil and an error message are
|
jbe@71
|
124 returned.
|
jbe@71
|
125
|
jbe@71
|
126 This method is also available for any other Lua file handle.
|
jbe@66
|
127
|
jbe@66
|
128
|
jbe@71
|
129 ### socket.input:xread_nb(maxlen, terminator)
|
jbe@66
|
130
|
jbe@71
|
131 Same as socket.input:xread(maxlen, terminator), but non-blocking. If no more
|
jbe@71
|
132 data can be read due to blocking, this method returns a string containing the
|
jbe@71
|
133 data which has already been read. If no data could be read due to blocking,
|
jbe@71
|
134 then an empty string is returned.
|
jbe@66
|
135
|
jbe@71
|
136 On EOF, false (as first result value) and an error message (as second result
|
jbe@71
|
137 value) are returned. In case of an I/O error, nil and an error message are
|
jbe@71
|
138 returned.
|
jbe@66
|
139
|
jbe@71
|
140 This method is also available for any other Lua file handle.
|
jbe@66
|
141
|
jbe@66
|
142
|
jbe@0
|
143 ### socket.interval
|
jbe@0
|
144
|
jbe@0
|
145 Set to the name of an interval timer if the "connect" handler was called due to
|
jbe@0
|
146 an elapsed interval timer. Otherwise nil.
|
jbe@0
|
147
|
jbe@0
|
148
|
jbe@0
|
149 ### socket:lines()
|
jbe@0
|
150
|
jbe@0
|
151 Alias for socket.input:lines()
|
jbe@0
|
152
|
jbe@0
|
153
|
jbe@0
|
154 ### socket.local_ip4
|
jbe@0
|
155
|
jbe@0
|
156 Local IPv4 address used for the connection. Encoded as 4 raw bytes in form of a
|
jbe@0
|
157 string.
|
jbe@0
|
158
|
jbe@0
|
159
|
jbe@0
|
160 ### socket.local_ip6
|
jbe@0
|
161
|
jbe@0
|
162 Local IPv6 address used for the connection. Encoded as 16 raw bytes in form of
|
jbe@0
|
163 a string.
|
jbe@0
|
164
|
jbe@0
|
165
|
jbe@0
|
166 ### socket.local_tcpport
|
jbe@0
|
167
|
jbe@0
|
168 Local TCP port used for the connection.
|
jbe@0
|
169
|
jbe@0
|
170
|
jbe@0
|
171 ### socket.output
|
jbe@0
|
172
|
jbe@0
|
173 Lua file handle representing the output stream of the socket connection.
|
jbe@0
|
174 Supports the same methods as io.open()'s return values.
|
jbe@0
|
175
|
jbe@0
|
176
|
jbe@66
|
177 ### socket.output:close()
|
jbe@66
|
178
|
jbe@66
|
179 Performs a half-close (i.e. sends a TCP FIN package in case of a TCP socket).
|
jbe@66
|
180
|
jbe@66
|
181 Note: In order to shut down a TCP connection properly, it may be necessary to
|
jbe@66
|
182 read any pending data from socket.input before closing the socket completely
|
jbe@66
|
183 (e.g. with socket:close() or by returning from the connect handler). If there
|
jbe@66
|
184 is still incoming data, a TCP RST packet might be sent which can cause loss of
|
jbe@66
|
185 transmitted data.
|
jbe@66
|
186
|
jbe@66
|
187
|
jbe@71
|
188 ### socket.output:write_nb(...)
|
jbe@71
|
189
|
jbe@71
|
190 Non-blocking write. This function attempts to write as many bytes as possible,
|
jbe@71
|
191 returning a string containing all data that could not be written due to
|
jbe@71
|
192 blocking (potentially concatenating some or all remaining arguments to create
|
jbe@71
|
193 that string).
|
jbe@71
|
194
|
jbe@71
|
195 In case of an I/O error, nil (as first result value) and an error message (as
|
jbe@71
|
196 second result value) are returned.
|
jbe@71
|
197
|
jbe@77
|
198 Note: Using this method will automatically flush any unflushed data written
|
jbe@77
|
199 through previous socket.output:write(...) calls. Thus, if any data was
|
jbe@77
|
200 previously written in a blocking fashion and has not been flushed, then the
|
jbe@77
|
201 socket.output:write_nb(...) call may block.
|
jbe@77
|
202
|
jbe@71
|
203 This method is also available for any other Lua file handle.
|
jbe@71
|
204
|
jbe@71
|
205
|
jbe@0
|
206 ### socket:read(...)
|
jbe@0
|
207
|
jbe@0
|
208 Alias for socket.input:read()
|
jbe@0
|
209
|
jbe@0
|
210
|
jbe@0
|
211 ### socket.remote_ip4
|
jbe@0
|
212
|
jbe@0
|
213 Remote IPv4 address used for the connection. Encoded as 4 raw bytes in form of
|
jbe@0
|
214 a string.
|
jbe@0
|
215
|
jbe@0
|
216
|
jbe@0
|
217 ### socket.remote_ip6
|
jbe@0
|
218
|
jbe@0
|
219 Remote IPv6 address used for the connection. Encoded as 16 raw bytes in form of
|
jbe@0
|
220 a string.
|
jbe@0
|
221
|
jbe@0
|
222
|
jbe@0
|
223 ### socket.remote_tcpport
|
jbe@0
|
224
|
jbe@0
|
225 Remote TCP port used for the connection.
|
jbe@0
|
226
|
jbe@0
|
227
|
jbe@0
|
228 ### socket:write(...)
|
jbe@0
|
229
|
jbe@0
|
230 Alias for socket.output:write(...)
|
jbe@0
|
231
|
jbe@0
|
232
|
jbe@71
|
233 ### socket:write_nb(...)
|
jbe@71
|
234
|
jbe@71
|
235 Alias for socket.output:write(...)
|
jbe@71
|
236
|
jbe@71
|
237
|
jbe@71
|
238 ### socket:xread(maxlen, terminator)
|
jbe@71
|
239
|
jbe@71
|
240 Alias for socket.input:xread(...)
|
jbe@71
|
241
|
jbe@71
|
242
|
jbe@71
|
243 ### socket:xread_nb(maxlen, terminator)
|
jbe@71
|
244
|
jbe@71
|
245 Alias for socket.input:xread_nb(...)
|
jbe@71
|
246
|
jbe@71
|
247
|
jbe@0
|
248
|
jbe@0
|
249 HTTP module
|
jbe@0
|
250 -----------
|
jbe@0
|
251
|
jbe@0
|
252 The http module exports the function http.generate_handler(callback) that
|
jbe@0
|
253 converts an HTTP handler to a "connect" handler. See file "example.lua" for an
|
jbe@0
|
254 example of invocation. A table with options may be passed either as a second
|
jbe@0
|
255 argument, or as a first argument preceeding the callback function (whichever is
|
jbe@0
|
256 more convenient).
|
jbe@0
|
257
|
jbe@0
|
258 The following options are supported:
|
jbe@0
|
259
|
jbe@0
|
260 - request_body_size_limit: maximum size of payload of HTTP request body
|
jbe@0
|
261 (transfer encoding is allowed to add a limited amount of extra data)
|
jbe@0
|
262 - chunk_size: optional default value for maximum_input_chunk_size and
|
jbe@0
|
263 minimum_output_chunk_size
|
jbe@0
|
264 - request_header_size_limit: maximum size of HTTP request headers
|
jbe@0
|
265 - maximum_input_chunk_size: maximum chunk size when streaming a request body or
|
jbe@0
|
266 certain POST fields (bigger chunks will be fragmented automatically)
|
jbe@0
|
267 - minimum_output_chunk_size: minimum size for a chunk when sending a response
|
jbe@0
|
268 body (smaller chunks will be buffered and concatenated with future data;
|
jbe@0
|
269 ignored when request:flush() is called)
|
jbe@0
|
270 - static_headers: a set of headers to be included in every HTTP response
|
jbe@0
|
271 (may be a string, a table or strings, or a table of key-value pairs)
|
jbe@0
|
272
|
jbe@0
|
273 The callback function receives a single request object as argument, which is
|
jbe@0
|
274 described below.
|
jbe@0
|
275
|
jbe@0
|
276
|
jbe@0
|
277 ### request.body
|
jbe@0
|
278
|
jbe@0
|
279 The request body (without headers) as a string. Accessing this value makes
|
jbe@0
|
280 further access to request.post_params and request.post_params_list, or
|
jbe@0
|
281 invocation of request:stream_request_body(...) impossible.
|
jbe@0
|
282
|
jbe@0
|
283
|
jbe@60
|
284 ### request:close_after_finish()
|
jbe@60
|
285
|
jbe@60
|
286 Closes the connection after answering the request.
|
jbe@60
|
287
|
jbe@60
|
288 This method can only be called before the HTTP response header section has been
|
jbe@60
|
289 finished (i.e. before request:finish_headers(), request:send_data(...), or
|
jbe@60
|
290 request:finish() were called), but it may be called before a status code has
|
jbe@60
|
291 been sent using request:send_status(...).
|
jbe@60
|
292
|
jbe@60
|
293 A corresponding "Connection: close" header is automatically sent.
|
jbe@60
|
294
|
jbe@60
|
295
|
jbe@0
|
296 ### request.cookies
|
jbe@0
|
297
|
jbe@0
|
298 A table with all cookies sent by the client.
|
jbe@0
|
299
|
jbe@0
|
300
|
jbe@0
|
301 ### request.defer_reading()
|
jbe@0
|
302
|
jbe@0
|
303 Disables automatic request body processing on write. Can be called before
|
jbe@0
|
304 sending a HTTP status code to send a response before the request has been fully
|
jbe@0
|
305 received.
|
jbe@0
|
306
|
jbe@0
|
307 CAUTION: Responding to a request before the request body has been processed may
|
jbe@0
|
308 lead to a deadlock if the browser does not process the response while trying to
|
jbe@0
|
309 send the request. Therefore, this function should only be used if:
|
jbe@0
|
310
|
jbe@0
|
311 - the TCP stack has enough buffer space for the response (i.e. if the response
|
jbe@0
|
312 is small enough), and if
|
jbe@0
|
313 - a timer is used to cancel the response in case of a deadlock.
|
jbe@0
|
314
|
jbe@0
|
315 It is recommended to not use this function unless certain performance tweaks
|
jbe@0
|
316 are desired.
|
jbe@0
|
317
|
jbe@0
|
318
|
jbe@50
|
319 ### request.faulty
|
jbe@50
|
320
|
jbe@50
|
321 Normally set to false. In case of a read or write error on the client
|
jbe@50
|
322 connection, this value is set to true before a Lua error is raised.
|
jbe@50
|
323
|
jbe@50
|
324 A faulty request handle must not be used, or another Lua error will be raised.
|
jbe@50
|
325
|
jbe@50
|
326
|
jbe@0
|
327 ### request:finish()
|
jbe@0
|
328
|
jbe@0
|
329 Finishes and flushes a HTTP response. May be called multiple times. An
|
jbe@0
|
330 HTTP status, all headers, and the response body (if applicable) must have been
|
jbe@0
|
331 previously sent. After calling this method, no further data may be written.
|
jbe@0
|
332
|
jbe@0
|
333
|
jbe@0
|
334 ### request:finish_headers()
|
jbe@0
|
335
|
jbe@0
|
336 Finishes and flushes the HTTP response header section. May be called multiple
|
jbe@0
|
337 times, as long as the request is not finished completely. This method is
|
jbe@0
|
338 automatically invoked if the application is beginning to send a response body.
|
jbe@0
|
339 After calling this method, no further headers may be sent.
|
jbe@0
|
340
|
jbe@0
|
341
|
jbe@0
|
342 ### request:flush()
|
jbe@0
|
343
|
jbe@0
|
344 Flushes any pending output data. Note: In order to mark the end of a response
|
jbe@0
|
345 body, it is required to call request:finish().
|
jbe@0
|
346
|
jbe@0
|
347
|
jbe@0
|
348 ### request.get_params
|
jbe@0
|
349
|
jbe@0
|
350 A table that maps field names to their corresponding GET value. If there are
|
jbe@0
|
351 several GET values with the given field name, then the first value is used.
|
jbe@0
|
352
|
jbe@35
|
353 Note: May be implemented through metamethods, but does support iteration
|
jbe@35
|
354 through pairs(...).
|
jbe@35
|
355
|
jbe@0
|
356
|
jbe@0
|
357 ### request.get_params_list
|
jbe@0
|
358
|
jbe@0
|
359 A table that maps field names to a sequence of their corresponding GET values.
|
jbe@0
|
360
|
jbe@35
|
361 Note: May be implemented through metamethods, but does support iteration
|
jbe@35
|
362 through pairs(...).
|
jbe@35
|
363
|
jbe@0
|
364
|
jbe@0
|
365 ### request.headers
|
jbe@0
|
366
|
jbe@0
|
367 A table that maps (case-insensitively) a HTTP header field name to a sequence
|
jbe@0
|
368 of values. One entry is created for every occurrence of a header line with the
|
jbe@0
|
369 given field name).
|
jbe@0
|
370
|
jbe@0
|
371
|
jbe@0
|
372 ### request.headers_csv_string
|
jbe@0
|
373
|
jbe@0
|
374 A table that maps (case-insensitively) a HTTP header field name to a comma
|
jbe@0
|
375 separated string. Multiple occurrences of the header with the given field name
|
jbe@0
|
376 are automatically merged into the comma separated string.
|
jbe@0
|
377
|
jbe@0
|
378
|
jbe@0
|
379 ### request.headers_csv_table
|
jbe@0
|
380
|
jbe@0
|
381 A table that maps (case-insensitively) a HTTP header field name to a sequence
|
jbe@0
|
382 of values. One entry is created for every comma separated value of each header
|
jbe@0
|
383 with the given field name.
|
jbe@0
|
384
|
jbe@0
|
385
|
jbe@0
|
386 ### request.headers_flags
|
jbe@0
|
387
|
jbe@0
|
388 A table that maps (case-insensitively) a HTTP header field name to another
|
jbe@0
|
389 table which (again case-insensitively) maps a string to a boolean, depending on
|
jbe@0
|
390 whether this string occurred in the list of comma separated values of one
|
jbe@0
|
391 header line with the given field name that was the key in the first table.
|
jbe@0
|
392
|
jbe@0
|
393
|
jbe@0
|
394 ### request.headers_value
|
jbe@0
|
395
|
jbe@0
|
396 A table that maps (case-insensitively) a HTTP header field name to a value. If
|
jbe@0
|
397 multiple header lines with the given field name have been received, false is
|
jbe@0
|
398 used as value.
|
jbe@0
|
399
|
jbe@0
|
400
|
jbe@0
|
401 ### request.method
|
jbe@0
|
402
|
jbe@0
|
403 The HTTP request method, e.g. "HEAD", "GET", or "POST".
|
jbe@0
|
404
|
jbe@0
|
405
|
jbe@0
|
406 ### request.path
|
jbe@0
|
407
|
jbe@10
|
408 The requested path without a leading slash and without the query part (e.g.
|
jbe@10
|
409 "index.html" if "/index.html?a=b&c=d" has been requested). For the query part,
|
jbe@10
|
410 see request.query.
|
jbe@10
|
411
|
jbe@10
|
412 This value will be nil if (and only if) the request method is "OPTIONS" with a
|
jbe@10
|
413 request target equal to "*" (see also asterisk-form of request-target in
|
jbe@10
|
414 section 5.3.4 in RFC 7230).
|
jbe@0
|
415
|
jbe@0
|
416
|
jbe@0
|
417 ### request.post_metadata
|
jbe@0
|
418
|
jbe@0
|
419 Only set for multipart/form-data POST requests. A table that maps field names
|
jbe@0
|
420 to their corresponding POST metadata table which contains two entries:
|
jbe@0
|
421 "file_name" and "content_type". If there are several POST values with the given
|
jbe@0
|
422 field name, then the first value/file is used.
|
jbe@0
|
423
|
jbe@0
|
424
|
jbe@0
|
425 ### request.post_metadata_list
|
jbe@0
|
426
|
jbe@0
|
427 Only set for multipart/form-data POST requests. A table that maps field names
|
jbe@0
|
428 to a sequence with their corresponding POST metadata tables. Needed if multiple
|
jbe@0
|
429 files are uploaded with the same field name.
|
jbe@0
|
430
|
jbe@0
|
431
|
jbe@0
|
432 ### request.post_params
|
jbe@0
|
433
|
jbe@0
|
434 A table that maps field names to their corresponding POST value. If there are
|
jbe@0
|
435 several POST values with the given field name, then the first value is used.
|
jbe@0
|
436
|
jbe@35
|
437 Note: May be implemented through metamethods, but does support iteration
|
jbe@35
|
438 through pairs(...).
|
jbe@35
|
439
|
jbe@0
|
440
|
jbe@0
|
441 ### request.post_params_list
|
jbe@0
|
442
|
jbe@0
|
443 A table that maps field names to a sequence of their corresponding POST values.
|
jbe@0
|
444
|
jbe@35
|
445 Note: May be implemented through metamethods, but does support iteration
|
jbe@35
|
446 through pairs(...).
|
jbe@35
|
447
|
jbe@0
|
448
|
jbe@0
|
449 ### request.query
|
jbe@0
|
450
|
jbe@12
|
451 Query part of the request target including the leading question mark, e.g.
|
jbe@12
|
452 "?a=b&c=d" if the requested target is "/index.html?a=b&c=d". The data is
|
jbe@10
|
453 automatically parsed and made available through request.get_params and
|
jbe@10
|
454 request.get_params_list.
|
jbe@10
|
455
|
jbe@10
|
456 If there is no query part given in the request target, then this string is
|
jbe@10
|
457 the empty string. This value will be nil if (and only if) the request method
|
jbe@10
|
458 is "OPTIONS" with a request target equal to "*" (see also asterisk-form of
|
jbe@10
|
459 request-target in section 5.3.4 in RFC 7230).
|
jbe@0
|
460
|
jbe@0
|
461
|
jbe@0
|
462 ### request:process_request_body()
|
jbe@0
|
463
|
jbe@0
|
464 Starts processing the request body (if existent) to set the values
|
jbe@0
|
465 request.post_params, request.post_params_list, request.post_metadata, and
|
jbe@0
|
466 and request.post_metadata_list and/or to call POST field stream handlers that
|
jbe@0
|
467 have been previously registered with request:stream_post_param(...) or
|
jbe@0
|
468 request:stream_post_params(...).
|
jbe@0
|
469
|
jbe@0
|
470 This method gets invoked automatically when the POST param tables
|
jbe@0
|
471 (request.post_params, etc.) are accessed, or if a response is sent (to avoid
|
jbe@0
|
472 deadlocks with the webbrowser). (Note: Automatic request body processing on
|
jbe@0
|
473 write may be disabled by calling request:defer_reading().)
|
jbe@0
|
474
|
jbe@0
|
475 After this method returned, all registered POST field stream handlers have
|
jbe@0
|
476 received all data. Registration of other POST field stream handlers is not
|
jbe@0
|
477 possible after this method has been called (or after request.post_params_list
|
jbe@0
|
478 or request.post_params have been accessed).
|
jbe@0
|
479
|
jbe@0
|
480
|
jbe@0
|
481 ### request:send_data(...)
|
jbe@0
|
482
|
jbe@0
|
483 Sends data as response body. All arguments are converted via tostring(...) and
|
jbe@0
|
484 concatenated. May be called multiple times until the request has been finished
|
jbe@0
|
485 by calling request:finish().
|
jbe@0
|
486
|
jbe@0
|
487 If the request method (see request.method) is "HEAD", then calls to
|
jbe@0
|
488 request:send_data(...) are automatically ignored.
|
jbe@0
|
489
|
jbe@0
|
490
|
jbe@0
|
491 ### request:send_header(key, value)
|
jbe@0
|
492
|
jbe@0
|
493 Sends a HTTP response header that consists of the given key and the given
|
jbe@0
|
494 value. Note: Key and value must be provided as separate arguments. Before any
|
jbe@0
|
495 headers can be sent, a HTTP status must have been set with
|
jbe@0
|
496 request:send_status(status_string).
|
jbe@0
|
497
|
jbe@0
|
498
|
jbe@0
|
499 ### request:send_status(status_string)
|
jbe@0
|
500
|
jbe@0
|
501 Sends a HTTP response status that is given as a string consisting of a 3-digit
|
jbe@0
|
502 number and an explanatory string, e.g. "200 OK" or "404 Not Found". This
|
jbe@0
|
503 function must be called once before any headers or response body data may be
|
jbe@0
|
504 sent.
|
jbe@0
|
505
|
jbe@0
|
506
|
jbe@0
|
507 ### request.socket
|
jbe@0
|
508
|
jbe@0
|
509 The underlaying socket. Can be used to force a TCP RST, etc.
|
jbe@0
|
510
|
jbe@0
|
511
|
jbe@0
|
512 ### request:stream_post_param(field_name, callback)
|
jbe@0
|
513
|
jbe@0
|
514 Registers a stream handler for the given POST parameter. The callback function
|
jbe@0
|
515 will be called in the following manner:
|
jbe@0
|
516
|
jbe@0
|
517 - For the initial chunk, the first chunk gets passed as first argument while a
|
jbe@0
|
518 table with metadata ("field_name" and "content_type") gets passed as second
|
jbe@0
|
519 argument. In case of an immediate EOF (i.e. an empty file), the passed
|
jbe@0
|
520 chunk is the empty string. In all other cases the chunk has a length greater
|
jbe@0
|
521 than zero.
|
jbe@0
|
522 - For any remaining chunks, the respective chunk gets passed as first and only
|
jbe@0
|
523 argument (no metadata). Here, the chunk has always a length greater than
|
jbe@0
|
524 zero.
|
jbe@0
|
525 - To indicate the end of the stream, the callback function is called without
|
jbe@0
|
526 arguments. This also happens in case of an immediate EOF (see above).
|
jbe@0
|
527
|
jbe@0
|
528 In case of an immediate EOF (i.e. an empty file), the callback function is thus
|
jbe@0
|
529 called as follows:
|
jbe@0
|
530
|
jbe@0
|
531 - The first time with an empty string as first argument, and with the metadata
|
jbe@0
|
532 as second argument.
|
jbe@0
|
533 - The second time without any arguments.
|
jbe@0
|
534
|
jbe@0
|
535
|
jbe@0
|
536 ### request:stream_post_params(pattern, callback)
|
jbe@0
|
537
|
jbe@0
|
538 Same as request:stream_post_param(...) but providing a string pattern to match
|
jbe@0
|
539 multiple field names (e.g. "^file_[0-9]+$").
|
jbe@0
|
540
|
jbe@0
|
541
|
jbe@0
|
542 ### request:stream_request_body(callback)
|
jbe@0
|
543
|
jbe@0
|
544 Start streaming of request body. For each chunk of the request body, the
|
jbe@0
|
545 callback function is called with the corresponding chunk. End of data is
|
jbe@0
|
546 indicated through return of request:stream_request_body(...) (not by calling
|
jbe@0
|
547 the callback without arguments).
|
jbe@0
|
548
|
jbe@44
|
549 The function may be called with nil instead of a callback function. In this
|
jbe@44
|
550 case, the request body is read and discarded. Only if nil is passed instead of
|
jbe@44
|
551 a callback, then the function may also be invoked when the request body has
|
jbe@44
|
552 already been read and/or processed. In the latter case, the function performs
|
jbe@44
|
553 no operation.
|
jbe@0
|
554
|
jbe@44
|
555
|