Software /
code /
prosody
Annotate
net/http/server.lua @ 9450:b890ceb1c24f
util.poll: Increase max epoll events per call
This makes the struct roughly the same size in both epoll and select
mode (64bit).
There doesn’t seem to be much guidance on an appropriate size, it does
not seem to matter too much since if there are more events they will
simply show up in the next epoll_wait call. The number of exactly
concurrent events should be fairly low most of the time anyways.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Mon, 08 Oct 2018 15:33:15 +0200 |
parent | 9379:866cba3689f4 |
child | 9562:acf74ad0b795 |
rev | line source |
---|---|
4631
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
1 |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
2 local t_insert, t_remove, t_concat = table.insert, table.remove, table.concat; |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
3 local parser_new = require "net.http.parser".new; |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
4 local events = require "util.events".new(); |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
5 local addserver = require "net.server".addserver; |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
6 local log = require "util.logger".init("http.server"); |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
7 local os_date = os.date; |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
8 local pairs = pairs; |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
9 local s_upper = string.upper; |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
10 local setmetatable = setmetatable; |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
11 local xpcall = xpcall; |
5505
0b6a99e6c1b1
mod_c2s, mod_s2s, net.http, net.http.server: Improve tracebacks (omit traceback function), to make it clearer where an error occured
Matthew Wild <mwild1@gmail.com>
parents:
5504
diff
changeset
|
12 local traceback = debug.traceback; |
4631
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
13 local tostring = tostring; |
6963
e3be91ccca05
net.http.server: Import util.cache
Matthew Wild <mwild1@gmail.com>
parents:
6950
diff
changeset
|
14 local cache = require "util.cache"; |
4631
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
15 local codes = require "net.http.codes"; |
7541
1d3f9da189b5
net.http.server: Set blocksize for serving data from FDs to 64k (sweet spot of efficiency according to a recent study)
Kim Alvefur <zash@zash.se>
parents:
7489
diff
changeset
|
16 local blocksize = 2^16; |
4631
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
17 |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
18 local _M = {}; |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
19 |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
20 local sessions = {}; |
7489
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
21 local incomplete = {}; |
4631
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
22 local listener = {}; |
4736
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
23 local hosts = {}; |
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
24 local default_host; |
7579
d430573fe9f8
net.http.server: Expose way to set http server options
Kim Alvefur <zash@zash.se>
parents:
6589
diff
changeset
|
25 local options = {}; |
4631
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
26 |
4668
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
27 local function is_wildcard_event(event) |
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
28 return event:sub(-2, -1) == "/*"; |
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
29 end |
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
30 local function is_wildcard_match(wildcard_event, event) |
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
31 return wildcard_event:sub(1, -2) == event:sub(1, #wildcard_event-1); |
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
32 end |
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
33 |
6950
8ab809358922
net.http.server: Use new util.cache to remember wildcard event handlers
Matthew Wild <mwild1@gmail.com>
parents:
6608
diff
changeset
|
34 local _handlers = events._handlers; |
7582
e080b8b4f3cb
net.http.server: Add luacheck annotations
Kim Alvefur <zash@zash.se>
parents:
7581
diff
changeset
|
35 local recent_wildcard_events = cache.new(10000, function (key, value) -- luacheck: ignore 212/value |
6950
8ab809358922
net.http.server: Use new util.cache to remember wildcard event handlers
Matthew Wild <mwild1@gmail.com>
parents:
6608
diff
changeset
|
36 rawset(_handlers, key, nil); |
8ab809358922
net.http.server: Use new util.cache to remember wildcard event handlers
Matthew Wild <mwild1@gmail.com>
parents:
6608
diff
changeset
|
37 end); |
5503
91052e59375c
net.server.http: Ensure that event map cannot grow forever (limit to 10K wildcard-only entries)
Matthew Wild <mwild1@gmail.com>
parents:
5487
diff
changeset
|
38 |
4668
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
39 local event_map = events._event_map; |
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
40 setmetatable(events._handlers, { |
5504
b760b5f0c2b0
net.server.http: Add a comment
Matthew Wild <mwild1@gmail.com>
parents:
5503
diff
changeset
|
41 -- Called when firing an event that doesn't exist (but may match a wildcard handler) |
4668
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
42 __index = function (handlers, curr_event) |
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
43 if is_wildcard_event(curr_event) then return; end -- Wildcard events cannot be fired |
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
44 -- Find all handlers that could match this event, sort them |
4689
e8c357259993
net.http.server: Small fix to comment
Matthew Wild <mwild1@gmail.com>
parents:
4688
diff
changeset
|
45 -- and then put the array into handlers[curr_event] (and return it) |
4668
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
46 local matching_handlers_set = {}; |
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
47 local handlers_array = {}; |
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
48 for event, handlers_set in pairs(event_map) do |
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
49 if event == curr_event or |
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
50 is_wildcard_event(event) and is_wildcard_match(event, curr_event) then |
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
51 for handler, priority in pairs(handlers_set) do |
4704
d6c4e58333cf
net.http.server: Lower score of wildcard handlers to ensure specific handlers beat them
Matthew Wild <mwild1@gmail.com>
parents:
4694
diff
changeset
|
52 matching_handlers_set[handler] = { (select(2, event:gsub("/", "%1"))), is_wildcard_event(event) and 0 or 1, priority }; |
4668
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
53 table.insert(handlers_array, handler); |
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
54 end |
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
55 end |
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
56 end |
4726
917a5ffb73f1
net.http.server: Correctly cache results of handler indexing, and also cache failures
Matthew Wild <mwild1@gmail.com>
parents:
4715
diff
changeset
|
57 if #handlers_array > 0 then |
917a5ffb73f1
net.http.server: Correctly cache results of handler indexing, and also cache failures
Matthew Wild <mwild1@gmail.com>
parents:
4715
diff
changeset
|
58 table.sort(handlers_array, function(b, a) |
917a5ffb73f1
net.http.server: Correctly cache results of handler indexing, and also cache failures
Matthew Wild <mwild1@gmail.com>
parents:
4715
diff
changeset
|
59 local a_score, b_score = matching_handlers_set[a], matching_handlers_set[b]; |
917a5ffb73f1
net.http.server: Correctly cache results of handler indexing, and also cache failures
Matthew Wild <mwild1@gmail.com>
parents:
4715
diff
changeset
|
60 for i = 1, #a_score do |
917a5ffb73f1
net.http.server: Correctly cache results of handler indexing, and also cache failures
Matthew Wild <mwild1@gmail.com>
parents:
4715
diff
changeset
|
61 if a_score[i] ~= b_score[i] then -- If equal, compare next score value |
917a5ffb73f1
net.http.server: Correctly cache results of handler indexing, and also cache failures
Matthew Wild <mwild1@gmail.com>
parents:
4715
diff
changeset
|
62 return a_score[i] < b_score[i]; |
917a5ffb73f1
net.http.server: Correctly cache results of handler indexing, and also cache failures
Matthew Wild <mwild1@gmail.com>
parents:
4715
diff
changeset
|
63 end |
4668
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
64 end |
4726
917a5ffb73f1
net.http.server: Correctly cache results of handler indexing, and also cache failures
Matthew Wild <mwild1@gmail.com>
parents:
4715
diff
changeset
|
65 return false; |
917a5ffb73f1
net.http.server: Correctly cache results of handler indexing, and also cache failures
Matthew Wild <mwild1@gmail.com>
parents:
4715
diff
changeset
|
66 end); |
917a5ffb73f1
net.http.server: Correctly cache results of handler indexing, and also cache failures
Matthew Wild <mwild1@gmail.com>
parents:
4715
diff
changeset
|
67 else |
917a5ffb73f1
net.http.server: Correctly cache results of handler indexing, and also cache failures
Matthew Wild <mwild1@gmail.com>
parents:
4715
diff
changeset
|
68 handlers_array = false; |
917a5ffb73f1
net.http.server: Correctly cache results of handler indexing, and also cache failures
Matthew Wild <mwild1@gmail.com>
parents:
4715
diff
changeset
|
69 end |
917a5ffb73f1
net.http.server: Correctly cache results of handler indexing, and also cache failures
Matthew Wild <mwild1@gmail.com>
parents:
4715
diff
changeset
|
70 rawset(handlers, curr_event, handlers_array); |
5503
91052e59375c
net.server.http: Ensure that event map cannot grow forever (limit to 10K wildcard-only entries)
Matthew Wild <mwild1@gmail.com>
parents:
5487
diff
changeset
|
71 if not event_map[curr_event] then -- Only wildcard handlers match, if any |
6950
8ab809358922
net.http.server: Use new util.cache to remember wildcard event handlers
Matthew Wild <mwild1@gmail.com>
parents:
6608
diff
changeset
|
72 recent_wildcard_events:set(curr_event, true); |
5503
91052e59375c
net.server.http: Ensure that event map cannot grow forever (limit to 10K wildcard-only entries)
Matthew Wild <mwild1@gmail.com>
parents:
5487
diff
changeset
|
73 end |
4668
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
74 return handlers_array; |
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
75 end; |
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
76 __newindex = function (handlers, curr_event, handlers_array) |
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
77 if handlers_array == nil |
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
78 and is_wildcard_event(curr_event) then |
4735
474166c08319
net.http.server: Improve comment
Matthew Wild <mwild1@gmail.com>
parents:
4727
diff
changeset
|
79 -- Invalidate the indexes of all matching events |
4668
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
80 for event in pairs(handlers) do |
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
81 if is_wildcard_match(curr_event, event) then |
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
82 handlers[event] = nil; |
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
83 end |
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
84 end |
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
85 end |
4726
917a5ffb73f1
net.http.server: Correctly cache results of handler indexing, and also cache failures
Matthew Wild <mwild1@gmail.com>
parents:
4715
diff
changeset
|
86 rawset(handlers, curr_event, handlers_array); |
4668
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
87 end; |
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
88 }); |
cce0c739b0d7
net.http.server: Support for wildcard events (events that end with '/*')
Matthew Wild <mwild1@gmail.com>
parents:
4659
diff
changeset
|
89 |
4631
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
90 local handle_request; |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
91 local _1, _2, _3; |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
92 local function _handle_request() return handle_request(_1, _2, _3); end |
4710
54ca6511e699
net.http.server: Make error handling overrideable via 'http-error' event
Matthew Wild <mwild1@gmail.com>
parents:
4709
diff
changeset
|
93 |
54ca6511e699
net.http.server: Make error handling overrideable via 'http-error' event
Matthew Wild <mwild1@gmail.com>
parents:
4709
diff
changeset
|
94 local last_err; |
5505
0b6a99e6c1b1
mod_c2s, mod_s2s, net.http, net.http.server: Improve tracebacks (omit traceback function), to make it clearer where an error occured
Matthew Wild <mwild1@gmail.com>
parents:
5504
diff
changeset
|
95 local function _traceback_handler(err) last_err = err; log("error", "Traceback[httpserver]: %s", traceback(tostring(err), 2)); end |
4710
54ca6511e699
net.http.server: Make error handling overrideable via 'http-error' event
Matthew Wild <mwild1@gmail.com>
parents:
4709
diff
changeset
|
96 events.add_handler("http-error", function (error) |
54ca6511e699
net.http.server: Make error handling overrideable via 'http-error' event
Matthew Wild <mwild1@gmail.com>
parents:
4709
diff
changeset
|
97 return "Error processing request: "..codes[error.code]..". Check your error log for more information."; |
54ca6511e699
net.http.server: Make error handling overrideable via 'http-error' event
Matthew Wild <mwild1@gmail.com>
parents:
4709
diff
changeset
|
98 end, -1); |
4631
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
99 |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
100 function listener.onconnect(conn) |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
101 local secure = conn:ssl() and true or nil; |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
102 local pending = {}; |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
103 local waiting = false; |
4771
31a40da59308
net.http.server: Remove unused imports and variables (fixes traceback due to removed net.httpserver)
Matthew Wild <mwild1@gmail.com>
parents:
4740
diff
changeset
|
104 local function process_next() |
6360
ffcd3992a40c
net.http.server: Comment out a log message
Kim Alvefur <zash@zash.se>
parents:
5754
diff
changeset
|
105 if waiting then return; end -- log("debug", "can't process_next, waiting"); |
5333
760c345dc7a1
net.http.server: Ensure HTTP callbacks are never called recursively for pipelined requests.
Waqas Hussain <waqas20@gmail.com>
parents:
5300
diff
changeset
|
106 waiting = true; |
760c345dc7a1
net.http.server: Ensure HTTP callbacks are never called recursively for pipelined requests.
Waqas Hussain <waqas20@gmail.com>
parents:
5300
diff
changeset
|
107 while sessions[conn] and #pending > 0 do |
4631
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
108 local request = t_remove(pending); |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
109 --log("debug", "process_next: %s", request.path); |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
110 --handle_request(conn, request, process_next); |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
111 _1, _2, _3 = conn, request, process_next; |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
112 if not xpcall(_handle_request, _traceback_handler) then |
4710
54ca6511e699
net.http.server: Make error handling overrideable via 'http-error' event
Matthew Wild <mwild1@gmail.com>
parents:
4709
diff
changeset
|
113 conn:write("HTTP/1.0 500 Internal Server Error\r\n\r\n"..events.fire_event("http-error", { code = 500, private_message = last_err })); |
4631
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
114 conn:close(); |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
115 end |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
116 end |
5333
760c345dc7a1
net.http.server: Ensure HTTP callbacks are never called recursively for pipelined requests.
Waqas Hussain <waqas20@gmail.com>
parents:
5300
diff
changeset
|
117 --log("debug", "ready for more"); |
760c345dc7a1
net.http.server: Ensure HTTP callbacks are never called recursively for pipelined requests.
Waqas Hussain <waqas20@gmail.com>
parents:
5300
diff
changeset
|
118 waiting = false; |
4631
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
119 end |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
120 local function success_cb(request) |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
121 --log("debug", "success_cb: %s", request.path); |
5333
760c345dc7a1
net.http.server: Ensure HTTP callbacks are never called recursively for pipelined requests.
Waqas Hussain <waqas20@gmail.com>
parents:
5300
diff
changeset
|
122 if waiting then |
760c345dc7a1
net.http.server: Ensure HTTP callbacks are never called recursively for pipelined requests.
Waqas Hussain <waqas20@gmail.com>
parents:
5300
diff
changeset
|
123 log("error", "http connection handler is not reentrant: %s", request.path); |
760c345dc7a1
net.http.server: Ensure HTTP callbacks are never called recursively for pipelined requests.
Waqas Hussain <waqas20@gmail.com>
parents:
5300
diff
changeset
|
124 assert(false, "http connection handler is not reentrant"); |
760c345dc7a1
net.http.server: Ensure HTTP callbacks are never called recursively for pipelined requests.
Waqas Hussain <waqas20@gmail.com>
parents:
5300
diff
changeset
|
125 end |
4631
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
126 request.secure = secure; |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
127 t_insert(pending, request); |
5333
760c345dc7a1
net.http.server: Ensure HTTP callbacks are never called recursively for pipelined requests.
Waqas Hussain <waqas20@gmail.com>
parents:
5300
diff
changeset
|
128 process_next(); |
4631
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
129 end |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
130 local function error_cb(err) |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
131 log("debug", "error_cb: %s", err or "<nil>"); |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
132 -- FIXME don't close immediately, wait until we process current stuff |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
133 -- FIXME if err, send off a bad-request response |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
134 sessions[conn] = nil; |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
135 conn:close(); |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
136 end |
7579
d430573fe9f8
net.http.server: Expose way to set http server options
Kim Alvefur <zash@zash.se>
parents:
6589
diff
changeset
|
137 local function options_cb() |
d430573fe9f8
net.http.server: Expose way to set http server options
Kim Alvefur <zash@zash.se>
parents:
6589
diff
changeset
|
138 return options; |
d430573fe9f8
net.http.server: Expose way to set http server options
Kim Alvefur <zash@zash.se>
parents:
6589
diff
changeset
|
139 end |
d430573fe9f8
net.http.server: Expose way to set http server options
Kim Alvefur <zash@zash.se>
parents:
6589
diff
changeset
|
140 sessions[conn] = parser_new(success_cb, error_cb, "server", options_cb); |
4631
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
141 end |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
142 |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
143 function listener.ondisconnect(conn) |
4691
a164fc7057ae
net.http.server: Support for on_destroy callback on response objects, and a 'finished' flag to say when they are destroyed (responded to or connection closed)
Matthew Wild <mwild1@gmail.com>
parents:
4689
diff
changeset
|
144 local open_response = conn._http_open_response; |
a164fc7057ae
net.http.server: Support for on_destroy callback on response objects, and a 'finished' flag to say when they are destroyed (responded to or connection closed)
Matthew Wild <mwild1@gmail.com>
parents:
4689
diff
changeset
|
145 if open_response and open_response.on_destroy then |
a164fc7057ae
net.http.server: Support for on_destroy callback on response objects, and a 'finished' flag to say when they are destroyed (responded to or connection closed)
Matthew Wild <mwild1@gmail.com>
parents:
4689
diff
changeset
|
146 open_response.finished = true; |
a164fc7057ae
net.http.server: Support for on_destroy callback on response objects, and a 'finished' flag to say when they are destroyed (responded to or connection closed)
Matthew Wild <mwild1@gmail.com>
parents:
4689
diff
changeset
|
147 open_response:on_destroy(); |
a164fc7057ae
net.http.server: Support for on_destroy callback on response objects, and a 'finished' flag to say when they are destroyed (responded to or connection closed)
Matthew Wild <mwild1@gmail.com>
parents:
4689
diff
changeset
|
148 end |
7489
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
149 incomplete[conn] = nil; |
4631
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
150 sessions[conn] = nil; |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
151 end |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
152 |
6380
4220ffb87b22
net.http, net.http.server, mod_c2s, mod_s2s, mod_component, mod_admin_telnet, mod_net_multiplex: Add ondetach to release connection from 'sessions' table (or equivalent)
Matthew Wild <mwild1@gmail.com>
parents:
6360
diff
changeset
|
153 function listener.ondetach(conn) |
4220ffb87b22
net.http, net.http.server, mod_c2s, mod_s2s, mod_component, mod_admin_telnet, mod_net_multiplex: Add ondetach to release connection from 'sessions' table (or equivalent)
Matthew Wild <mwild1@gmail.com>
parents:
6360
diff
changeset
|
154 sessions[conn] = nil; |
7489
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
155 incomplete[conn] = nil; |
6380
4220ffb87b22
net.http, net.http.server, mod_c2s, mod_s2s, mod_component, mod_admin_telnet, mod_net_multiplex: Add ondetach to release connection from 'sessions' table (or equivalent)
Matthew Wild <mwild1@gmail.com>
parents:
6360
diff
changeset
|
156 end |
4220ffb87b22
net.http, net.http.server, mod_c2s, mod_s2s, mod_component, mod_admin_telnet, mod_net_multiplex: Add ondetach to release connection from 'sessions' table (or equivalent)
Matthew Wild <mwild1@gmail.com>
parents:
6360
diff
changeset
|
157 |
4631
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
158 function listener.onincoming(conn, data) |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
159 sessions[conn]:feed(data); |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
160 end |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
161 |
7489
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
162 function listener.ondrain(conn) |
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
163 local response = incomplete[conn]; |
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
164 if response and response._send_more then |
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
165 response._send_more(); |
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
166 end |
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
167 end |
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
168 |
4631
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
169 local headerfix = setmetatable({}, { |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
170 __index = function(t, k) |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
171 local v = "\r\n"..k:gsub("_", "-"):gsub("%f[%w].", s_upper)..": "; |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
172 t[k] = v; |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
173 return v; |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
174 end |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
175 }); |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
176 |
7582
e080b8b4f3cb
net.http.server: Add luacheck annotations
Kim Alvefur <zash@zash.se>
parents:
7581
diff
changeset
|
177 function _M.hijack_response(response, listener) -- luacheck: ignore |
4631
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
178 error("TODO"); |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
179 end |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
180 function handle_request(conn, request, finish_cb) |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
181 --log("debug", "handler: %s", request.path); |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
182 local headers = {}; |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
183 for k,v in pairs(request.headers) do headers[k:gsub("-", "_")] = v; end |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
184 request.headers = headers; |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
185 request.conn = conn; |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
186 |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
187 local date_header = os_date('!%a, %d %b %Y %H:%M:%S GMT'); -- FIXME use |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
188 local conn_header = request.headers.connection; |
5300
fcb1be0b4a5c
net.http.server: Properly handle persistent connections
Florian Zeitz <florob@babelmonkeys.de>
parents:
4788
diff
changeset
|
189 conn_header = conn_header and ","..conn_header:gsub("[ \t]", ""):lower().."," or "" |
fcb1be0b4a5c
net.http.server: Properly handle persistent connections
Florian Zeitz <florob@babelmonkeys.de>
parents:
4788
diff
changeset
|
190 local httpversion = request.httpversion |
5754
dee0f05ccf70
net.http.server: Fix Keep-Alive requests with HTTP 1.0
Kim Alvefur <zash@zash.se>
parents:
5505
diff
changeset
|
191 local persistent = conn_header:find(",keep-alive,", 1, true) |
5300
fcb1be0b4a5c
net.http.server: Properly handle persistent connections
Florian Zeitz <florob@babelmonkeys.de>
parents:
4788
diff
changeset
|
192 or (httpversion == "1.1" and not conn_header:find(",close,", 1, true)); |
fcb1be0b4a5c
net.http.server: Properly handle persistent connections
Florian Zeitz <florob@babelmonkeys.de>
parents:
4788
diff
changeset
|
193 |
fcb1be0b4a5c
net.http.server: Properly handle persistent connections
Florian Zeitz <florob@babelmonkeys.de>
parents:
4788
diff
changeset
|
194 local response_conn_header; |
fcb1be0b4a5c
net.http.server: Properly handle persistent connections
Florian Zeitz <florob@babelmonkeys.de>
parents:
4788
diff
changeset
|
195 if persistent then |
fcb1be0b4a5c
net.http.server: Properly handle persistent connections
Florian Zeitz <florob@babelmonkeys.de>
parents:
4788
diff
changeset
|
196 response_conn_header = "Keep-Alive"; |
fcb1be0b4a5c
net.http.server: Properly handle persistent connections
Florian Zeitz <florob@babelmonkeys.de>
parents:
4788
diff
changeset
|
197 else |
fcb1be0b4a5c
net.http.server: Properly handle persistent connections
Florian Zeitz <florob@babelmonkeys.de>
parents:
4788
diff
changeset
|
198 response_conn_header = httpversion == "1.1" and "close" or nil |
fcb1be0b4a5c
net.http.server: Properly handle persistent connections
Florian Zeitz <florob@babelmonkeys.de>
parents:
4788
diff
changeset
|
199 end |
4631
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
200 |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
201 local response = { |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
202 request = request; |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
203 status_code = 200; |
5300
fcb1be0b4a5c
net.http.server: Properly handle persistent connections
Florian Zeitz <florob@babelmonkeys.de>
parents:
4788
diff
changeset
|
204 headers = { date = date_header, connection = response_conn_header }; |
fcb1be0b4a5c
net.http.server: Properly handle persistent connections
Florian Zeitz <florob@babelmonkeys.de>
parents:
4788
diff
changeset
|
205 persistent = persistent; |
4631
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
206 conn = conn; |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
207 send = _M.send_response; |
7489
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
208 send_file = _M.send_file; |
6071
420c0d3b8583
net.http.server: Add prepare_header() and finish_response() to allow sending chunked responses via the API
Daurnimator <quae@daurnimator.com>
parents:
5776
diff
changeset
|
209 done = _M.finish_response; |
4631
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
210 finish_cb = finish_cb; |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
211 }; |
4691
a164fc7057ae
net.http.server: Support for on_destroy callback on response objects, and a 'finished' flag to say when they are destroyed (responded to or connection closed)
Matthew Wild <mwild1@gmail.com>
parents:
4689
diff
changeset
|
212 conn._http_open_response = response; |
4631
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
213 |
4736
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
214 local host = (request.headers.host or ""):match("[^:]+"); |
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
215 |
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
216 -- Some sanity checking |
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
217 local err_code, err; |
4740
bd9c8bc8036f
net.http.server: Try default_host if client sent no host anywhere, otherwise... fail. It's 2012.
Matthew Wild <mwild1@gmail.com>
parents:
4739
diff
changeset
|
218 if not request.path then |
4736
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
219 err_code, err = 400, "Invalid path"; |
4713
9c15fa5192d3
net.http.server: Fire http-error 400 if request fails sanity checks
Matthew Wild <mwild1@gmail.com>
parents:
4710
diff
changeset
|
220 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5754
diff
changeset
|
221 |
4713
9c15fa5192d3
net.http.server: Fire http-error 400 if request fails sanity checks
Matthew Wild <mwild1@gmail.com>
parents:
4710
diff
changeset
|
222 if err then |
4736
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
223 response.status_code = err_code; |
8362
c7d6c2558a24
net.http.server: Include response object in most http-error events
Kim Alvefur <zash@zash.se>
parents:
7582
diff
changeset
|
224 response:send(events.fire_event("http-error", { code = err_code, message = err, response = response })); |
4736
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
225 return; |
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
226 end |
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
227 |
9375
816591db764d
net.http.server: Fire an event without host
Kim Alvefur <zash@zash.se>
parents:
9338
diff
changeset
|
228 local global_event = request.method.." "..request.path:match("[^?]*"); |
9379
866cba3689f4
net.http.server: Delay host checks until after host-less event
Kim Alvefur <zash@zash.se>
parents:
9375
diff
changeset
|
229 |
4736
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
230 local payload = { request = request, response = response }; |
9375
816591db764d
net.http.server: Fire an event without host
Kim Alvefur <zash@zash.se>
parents:
9338
diff
changeset
|
231 log("debug", "Firing event: %s", global_event); |
816591db764d
net.http.server: Fire an event without host
Kim Alvefur <zash@zash.se>
parents:
9338
diff
changeset
|
232 local result = events.fire_event(global_event, payload); |
816591db764d
net.http.server: Fire an event without host
Kim Alvefur <zash@zash.se>
parents:
9338
diff
changeset
|
233 if result == nil then |
9379
866cba3689f4
net.http.server: Delay host checks until after host-less event
Kim Alvefur <zash@zash.se>
parents:
9375
diff
changeset
|
234 if not hosts[host] then |
866cba3689f4
net.http.server: Delay host checks until after host-less event
Kim Alvefur <zash@zash.se>
parents:
9375
diff
changeset
|
235 if hosts[default_host] then |
866cba3689f4
net.http.server: Delay host checks until after host-less event
Kim Alvefur <zash@zash.se>
parents:
9375
diff
changeset
|
236 host = default_host; |
866cba3689f4
net.http.server: Delay host checks until after host-less event
Kim Alvefur <zash@zash.se>
parents:
9375
diff
changeset
|
237 elseif host then |
866cba3689f4
net.http.server: Delay host checks until after host-less event
Kim Alvefur <zash@zash.se>
parents:
9375
diff
changeset
|
238 err_code, err = 404, "Unknown host: "..host; |
866cba3689f4
net.http.server: Delay host checks until after host-less event
Kim Alvefur <zash@zash.se>
parents:
9375
diff
changeset
|
239 else |
866cba3689f4
net.http.server: Delay host checks until after host-less event
Kim Alvefur <zash@zash.se>
parents:
9375
diff
changeset
|
240 err_code, err = 400, "Missing or invalid 'Host' header"; |
866cba3689f4
net.http.server: Delay host checks until after host-less event
Kim Alvefur <zash@zash.se>
parents:
9375
diff
changeset
|
241 end |
866cba3689f4
net.http.server: Delay host checks until after host-less event
Kim Alvefur <zash@zash.se>
parents:
9375
diff
changeset
|
242 end |
866cba3689f4
net.http.server: Delay host checks until after host-less event
Kim Alvefur <zash@zash.se>
parents:
9375
diff
changeset
|
243 local host_event = request.method.." "..host..request.path:match("[^?]*"); |
866cba3689f4
net.http.server: Delay host checks until after host-less event
Kim Alvefur <zash@zash.se>
parents:
9375
diff
changeset
|
244 |
866cba3689f4
net.http.server: Delay host checks until after host-less event
Kim Alvefur <zash@zash.se>
parents:
9375
diff
changeset
|
245 if err then |
866cba3689f4
net.http.server: Delay host checks until after host-less event
Kim Alvefur <zash@zash.se>
parents:
9375
diff
changeset
|
246 response.status_code = err_code; |
866cba3689f4
net.http.server: Delay host checks until after host-less event
Kim Alvefur <zash@zash.se>
parents:
9375
diff
changeset
|
247 response:send(events.fire_event("http-error", { code = err_code, message = err, response = response })); |
866cba3689f4
net.http.server: Delay host checks until after host-less event
Kim Alvefur <zash@zash.se>
parents:
9375
diff
changeset
|
248 return; |
866cba3689f4
net.http.server: Delay host checks until after host-less event
Kim Alvefur <zash@zash.se>
parents:
9375
diff
changeset
|
249 end |
866cba3689f4
net.http.server: Delay host checks until after host-less event
Kim Alvefur <zash@zash.se>
parents:
9375
diff
changeset
|
250 |
9375
816591db764d
net.http.server: Fire an event without host
Kim Alvefur <zash@zash.se>
parents:
9338
diff
changeset
|
251 log("debug", "Firing event: %s", host_event); |
816591db764d
net.http.server: Fire an event without host
Kim Alvefur <zash@zash.se>
parents:
9338
diff
changeset
|
252 result = events.fire_event(host_event, payload); |
816591db764d
net.http.server: Fire an event without host
Kim Alvefur <zash@zash.se>
parents:
9338
diff
changeset
|
253 end |
4736
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
254 if result ~= nil then |
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
255 if result ~= true then |
4788
e14f5a156571
net.http.server: Code cleanup/adjustment now that send_response() accepts response.body
Matthew Wild <mwild1@gmail.com>
parents:
4787
diff
changeset
|
256 local body; |
4736
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
257 local result_type = type(result); |
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
258 if result_type == "number" then |
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
259 response.status_code = result; |
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
260 if result >= 400 then |
8362
c7d6c2558a24
net.http.server: Include response object in most http-error events
Kim Alvefur <zash@zash.se>
parents:
7582
diff
changeset
|
261 payload.code = result; |
c7d6c2558a24
net.http.server: Include response object in most http-error events
Kim Alvefur <zash@zash.se>
parents:
7582
diff
changeset
|
262 body = events.fire_event("http-error", payload); |
4631
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
263 end |
4736
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
264 elseif result_type == "string" then |
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
265 body = result; |
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
266 elseif result_type == "table" then |
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
267 for k, v in pairs(result) do |
5404
ae9a47e579d7
net.http.server: Don't overwrite existing response.headers when returning a response object from a HTTP handler (waqas says it's wrong)
Matthew Wild <mwild1@gmail.com>
parents:
5333
diff
changeset
|
268 if k ~= "headers" then |
ae9a47e579d7
net.http.server: Don't overwrite existing response.headers when returning a response object from a HTTP handler (waqas says it's wrong)
Matthew Wild <mwild1@gmail.com>
parents:
5333
diff
changeset
|
269 response[k] = v; |
ae9a47e579d7
net.http.server: Don't overwrite existing response.headers when returning a response object from a HTTP handler (waqas says it's wrong)
Matthew Wild <mwild1@gmail.com>
parents:
5333
diff
changeset
|
270 else |
ae9a47e579d7
net.http.server: Don't overwrite existing response.headers when returning a response object from a HTTP handler (waqas says it's wrong)
Matthew Wild <mwild1@gmail.com>
parents:
5333
diff
changeset
|
271 for header_name, header_value in pairs(v) do |
ae9a47e579d7
net.http.server: Don't overwrite existing response.headers when returning a response object from a HTTP handler (waqas says it's wrong)
Matthew Wild <mwild1@gmail.com>
parents:
5333
diff
changeset
|
272 response.headers[header_name] = header_value; |
ae9a47e579d7
net.http.server: Don't overwrite existing response.headers when returning a response object from a HTTP handler (waqas says it's wrong)
Matthew Wild <mwild1@gmail.com>
parents:
5333
diff
changeset
|
273 end |
ae9a47e579d7
net.http.server: Don't overwrite existing response.headers when returning a response object from a HTTP handler (waqas says it's wrong)
Matthew Wild <mwild1@gmail.com>
parents:
5333
diff
changeset
|
274 end |
4736
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
275 end |
4683
c1374e083c97
net.http.server: Handle results returned by handlers, and send as a response. Also removes explicit firing of '*', which can now be done via wildcard events.
Matthew Wild <mwild1@gmail.com>
parents:
4682
diff
changeset
|
276 end |
4736
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
277 response:send(body); |
4631
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
278 end |
4736
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
279 return; |
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
280 end |
4631
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
281 |
4736
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
282 -- if handler not called, return 404 |
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
283 response.status_code = 404; |
8362
c7d6c2558a24
net.http.server: Include response object in most http-error events
Kim Alvefur <zash@zash.se>
parents:
7582
diff
changeset
|
284 payload.code = 404; |
c7d6c2558a24
net.http.server: Include response object in most http-error events
Kim Alvefur <zash@zash.se>
parents:
7582
diff
changeset
|
285 response:send(events.fire_event("http-error", payload)); |
4631
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
286 end |
6071
420c0d3b8583
net.http.server: Add prepare_header() and finish_response() to allow sending chunked responses via the API
Daurnimator <quae@daurnimator.com>
parents:
5776
diff
changeset
|
287 local function prepare_header(response) |
4631
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
288 local status_line = "HTTP/"..response.request.httpversion.." "..(response.status or codes[response.status_code]); |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
289 local headers = response.headers; |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
290 local output = { status_line }; |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
291 for k,v in pairs(headers) do |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
292 t_insert(output, headerfix[k]..v); |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
293 end |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
294 t_insert(output, "\r\n\r\n"); |
6071
420c0d3b8583
net.http.server: Add prepare_header() and finish_response() to allow sending chunked responses via the API
Daurnimator <quae@daurnimator.com>
parents:
5776
diff
changeset
|
295 return output; |
420c0d3b8583
net.http.server: Add prepare_header() and finish_response() to allow sending chunked responses via the API
Daurnimator <quae@daurnimator.com>
parents:
5776
diff
changeset
|
296 end |
420c0d3b8583
net.http.server: Add prepare_header() and finish_response() to allow sending chunked responses via the API
Daurnimator <quae@daurnimator.com>
parents:
5776
diff
changeset
|
297 _M.prepare_header = prepare_header; |
420c0d3b8583
net.http.server: Add prepare_header() and finish_response() to allow sending chunked responses via the API
Daurnimator <quae@daurnimator.com>
parents:
5776
diff
changeset
|
298 function _M.send_response(response, body) |
420c0d3b8583
net.http.server: Add prepare_header() and finish_response() to allow sending chunked responses via the API
Daurnimator <quae@daurnimator.com>
parents:
5776
diff
changeset
|
299 if response.finished then return; end |
420c0d3b8583
net.http.server: Add prepare_header() and finish_response() to allow sending chunked responses via the API
Daurnimator <quae@daurnimator.com>
parents:
5776
diff
changeset
|
300 body = body or response.body or ""; |
6082
d0e824a21861
net.http.server: Fix some typos introduced in 420c0d3b8583.
Daurnimator <quae@daurnimator.com>
parents:
6071
diff
changeset
|
301 response.headers.content_length = #body; |
d0e824a21861
net.http.server: Fix some typos introduced in 420c0d3b8583.
Daurnimator <quae@daurnimator.com>
parents:
6071
diff
changeset
|
302 local output = prepare_header(response); |
4631
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
303 t_insert(output, body); |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
304 response.conn:write(t_concat(output)); |
6082
d0e824a21861
net.http.server: Fix some typos introduced in 420c0d3b8583.
Daurnimator <quae@daurnimator.com>
parents:
6071
diff
changeset
|
305 response:done(); |
6071
420c0d3b8583
net.http.server: Add prepare_header() and finish_response() to allow sending chunked responses via the API
Daurnimator <quae@daurnimator.com>
parents:
5776
diff
changeset
|
306 end |
7489
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
307 function _M.send_file(response, f) |
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
308 if response.finished then return; end |
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
309 local chunked = not response.headers.content_length; |
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
310 if chunked then response.headers.transfer_encoding = "chunked"; end |
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
311 incomplete[response.conn] = response; |
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
312 response._send_more = function () |
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
313 if response.finished then |
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
314 incomplete[response.conn] = nil; |
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
315 return; |
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
316 end |
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
317 local chunk = f:read(blocksize); |
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
318 if chunk then |
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
319 if chunked then |
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
320 chunk = ("%x\r\n%s\r\n"):format(#chunk, chunk); |
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
321 end |
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
322 -- io.write("."); io.flush(); |
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
323 response.conn:write(chunk); |
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
324 else |
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
325 if chunked then |
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
326 response.conn:write("0\r\n\r\n"); |
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
327 end |
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
328 -- io.write("\n"); |
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
329 if f.close then f:close(); end |
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
330 incomplete[response.conn] = nil; |
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
331 return response:done(); |
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
332 end |
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
333 end |
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
334 response.conn:write(t_concat(prepare_header(response))); |
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
335 return true; |
d32406f27efd
net.http.server: Add response method for reading response body from a file handle
Kim Alvefur <zash@zash.se>
parents:
7084
diff
changeset
|
336 end |
6071
420c0d3b8583
net.http.server: Add prepare_header() and finish_response() to allow sending chunked responses via the API
Daurnimator <quae@daurnimator.com>
parents:
5776
diff
changeset
|
337 function _M.finish_response(response) |
420c0d3b8583
net.http.server: Add prepare_header() and finish_response() to allow sending chunked responses via the API
Daurnimator <quae@daurnimator.com>
parents:
5776
diff
changeset
|
338 if response.finished then return; end |
420c0d3b8583
net.http.server: Add prepare_header() and finish_response() to allow sending chunked responses via the API
Daurnimator <quae@daurnimator.com>
parents:
5776
diff
changeset
|
339 response.finished = true; |
420c0d3b8583
net.http.server: Add prepare_header() and finish_response() to allow sending chunked responses via the API
Daurnimator <quae@daurnimator.com>
parents:
5776
diff
changeset
|
340 response.conn._http_open_response = nil; |
4691
a164fc7057ae
net.http.server: Support for on_destroy callback on response objects, and a 'finished' flag to say when they are destroyed (responded to or connection closed)
Matthew Wild <mwild1@gmail.com>
parents:
4689
diff
changeset
|
341 if response.on_destroy then |
a164fc7057ae
net.http.server: Support for on_destroy callback on response objects, and a 'finished' flag to say when they are destroyed (responded to or connection closed)
Matthew Wild <mwild1@gmail.com>
parents:
4689
diff
changeset
|
342 response:on_destroy(); |
a164fc7057ae
net.http.server: Support for on_destroy callback on response objects, and a 'finished' flag to say when they are destroyed (responded to or connection closed)
Matthew Wild <mwild1@gmail.com>
parents:
4689
diff
changeset
|
343 response.on_destroy = nil; |
a164fc7057ae
net.http.server: Support for on_destroy callback on response objects, and a 'finished' flag to say when they are destroyed (responded to or connection closed)
Matthew Wild <mwild1@gmail.com>
parents:
4689
diff
changeset
|
344 end |
5300
fcb1be0b4a5c
net.http.server: Properly handle persistent connections
Florian Zeitz <florob@babelmonkeys.de>
parents:
4788
diff
changeset
|
345 if response.persistent then |
4631
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
346 response:finish_cb(); |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
347 else |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
348 response.conn:close(); |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
349 end |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
350 end |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
351 function _M.add_handler(event, handler, priority) |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
352 events.add_handler(event, handler, priority); |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
353 end |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
354 function _M.remove_handler(event, handler) |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
355 events.remove_handler(event, handler); |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
356 end |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
357 |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
358 function _M.listen_on(port, interface, ssl) |
7084
fdbe9ccac17d
net.http.server: Return from listen_on() whatever net.server.addserver() returns
Kim Alvefur <zash@zash.se>
parents:
6963
diff
changeset
|
359 return addserver(interface or "*", port, listener, "*a", ssl); |
4631
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
360 end |
4736
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
361 function _M.add_host(host) |
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
362 hosts[host] = true; |
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
363 end |
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
364 function _M.remove_host(host) |
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
365 hosts[host] = nil; |
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
366 end |
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
367 function _M.set_default_host(host) |
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
368 default_host = host; |
3514338c59c3
net.http.server, mod_http: Support http_default_host config option to specify where to direct requests for unknown HTTP vhosts
Matthew Wild <mwild1@gmail.com>
parents:
4735
diff
changeset
|
369 end |
5439
bd7b314c2301
net.http.server: add API to allow firing events directly on the server.
Marco Cirillo <maranda@lightwitch.org>
parents:
5404
diff
changeset
|
370 function _M.fire_event(event, ...) |
bd7b314c2301
net.http.server: add API to allow firing events directly on the server.
Marco Cirillo <maranda@lightwitch.org>
parents:
5404
diff
changeset
|
371 return events.fire_event(event, ...); |
bd7b314c2301
net.http.server: add API to allow firing events directly on the server.
Marco Cirillo <maranda@lightwitch.org>
parents:
5404
diff
changeset
|
372 end |
7579
d430573fe9f8
net.http.server: Expose way to set http server options
Kim Alvefur <zash@zash.se>
parents:
6589
diff
changeset
|
373 function _M.set_option(name, value) |
d430573fe9f8
net.http.server: Expose way to set http server options
Kim Alvefur <zash@zash.se>
parents:
6589
diff
changeset
|
374 options[name] = value; |
d430573fe9f8
net.http.server: Expose way to set http server options
Kim Alvefur <zash@zash.se>
parents:
6589
diff
changeset
|
375 end |
4631
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
376 |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
377 _M.listener = listener; |
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
378 _M.codes = codes; |
4706
845393c76d17
net.http.server: Expose events object (for debug purposes)
Matthew Wild <mwild1@gmail.com>
parents:
4704
diff
changeset
|
379 _M._events = events; |
4631
fc5d3b053454
net.http.{server|codes|parser}: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
380 return _M; |