Skip to content

Commit 6c91aef

Browse files
committed
Extract all request parsing/creation to separate function
Also rename all http_server_ to httpd (old naming convention)
1 parent 0fc749e commit 6c91aef

File tree

1 file changed

+35
-34
lines changed

1 file changed

+35
-34
lines changed

http/server.lua

+35-34
Original file line numberDiff line numberDiff line change
@@ -633,19 +633,6 @@ local function normalize_headers(hdrs)
633633
return res
634634
end
635635

636-
local function parse_request(req)
637-
local p = lib._parse_request(req)
638-
if p.error then
639-
return p
640-
end
641-
p.path = uri_unescape(p.path)
642-
if p.path:sub(1, 1) ~= "/" or p.path:find("./", nil, true) ~= nil then
643-
p.error = "invalid uri"
644-
return p
645-
end
646-
return p
647-
end
648-
649636
local function httpd_stop(self)
650637
if type(self) ~= 'table' then
651638
error("httpd: usage: httpd:stop()")
@@ -937,7 +924,25 @@ local function url_for_httpd(httpd, name, args, query)
937924
end
938925
end
939926

940-
local function http_server_http11_handler(session)
927+
local function httpd_http11_parse_request(session, request_raw)
928+
local request_parsed = lib._parse_request(request_raw)
929+
if request_parsed.error then
930+
return nil, request_parsed.error
931+
end
932+
request_parsed.path = uri_unescape(request_parsed.path)
933+
if request_parsed.path:sub(1, 1) ~= "/" or
934+
request_parsed.path:find("./", nil, true) ~= nil then
935+
return nil, "invalid uri"
936+
end
937+
request_parsed.httpd = session.server
938+
request_parsed.s = session.socket
939+
request_parsed.peer = session.peer
940+
setmetatable(request_parsed, request_mt)
941+
942+
return request_parsed
943+
end
944+
945+
local function httpd_http11_handler(session)
941946
local hdrs = ''
942947

943948
while true do
@@ -958,16 +963,12 @@ local function http_server_http11_handler(session)
958963
end
959964

960965
log.debug("request:\n%s", hdrs)
961-
local p = parse_request(hdrs)
962-
if p.error ~= nil then
963-
log.error('failed to parse request: %s', p.error)
964-
session:write(sprintf("HTTP/1.1 400 Bad request\r\n\r\n%s", p.error))
965-
return false
966+
local p, err = httpd_http11_parse_request(session, hdrs)
967+
if not p then
968+
log.error('failed to parse request: %s', err)
969+
session:write(sprintf("HTTP/1.1 400 Bad request\r\n\r\n%s", err))
970+
return
966971
end
967-
p.httpd = session.server
968-
p.s = session.socket
969-
p.peer = session.peer
970-
setmetatable(p, request_mt)
971972

972973
if p.headers['expect'] == '100-continue' then
973974
session:write('HTTP/1.1 100 Continue\r\n\r\n')
@@ -1143,11 +1144,11 @@ local function session_new(self, socket, peer)
11431144
server = self,
11441145
socket = socket,
11451146
peer = peer,
1146-
ctx = { proto = 'HTTP/1.1', handler = http_server_http11_handler },
1147+
ctx = { proto = 'HTTP/1.1', handler = httpd_http11_handler },
11471148
}, session_mt)
11481149
end
11491150

1150-
local function http_server_tcp_handler(self, sckt, peer)
1151+
local function httpd_tcp_handler(self, sckt, peer)
11511152
local session = session_new(self, sckt, peer)
11521153

11531154
local rv = true
@@ -1163,7 +1164,7 @@ local function httpd_start(self)
11631164

11641165
local server = assertf(socket.tcp_server(self.host, self.port, {
11651166
name = 'http',
1166-
handler = function(...) http_server_tcp_handler(self, ...) end
1167+
handler = function(...) httpd_tcp_handler(self, ...) end
11671168
}), "Can't create tcp_server: %s", errno.strerror())
11681169

11691170
rawset(self, 'is_run', true)
@@ -1173,7 +1174,7 @@ local function httpd_start(self)
11731174
return self
11741175
end
11751176

1176-
local http_server_methods = {
1177+
local httpd_methods = {
11771178
stop = httpd_stop,
11781179
start = httpd_start,
11791180
route = add_route,
@@ -1183,11 +1184,11 @@ local http_server_methods = {
11831184
url_for = url_for_httpd,
11841185
}
11851186

1186-
local http_server_mt = {
1187-
__index = http_server_methods
1187+
local httpd_mt = {
1188+
__index = httpd_methods
11881189
}
11891190

1190-
local http_server_options_default = {
1191+
local httpd_options_default = {
11911192
max_header_size = 4096,
11921193
header_timeout = 100,
11931194
handler = handler,
@@ -1201,13 +1202,13 @@ local http_server_options_default = {
12011202
display_errors = true,
12021203
}
12031204

1204-
local function http_server_new(host, port, options)
1205+
local function httpd_new(host, port, options)
12051206
options = options or {}
12061207
local opts_tp = type(options)
12071208
assertf(opts_tp == 'table', "options must be table, not '%s'", opts_tp)
12081209

12091210
-- populate options table with default values
1210-
options = extend(table.copy(http_server_options_default), options, true)
1211+
options = extend(table.copy(httpd_options_default), options, true)
12111212

12121213
local self = setmetatable({
12131214
host = host,
@@ -1222,12 +1223,12 @@ local function http_server_new(host, port, options)
12221223

12231224
-- caches
12241225
cache = { tpl = {}, ctx = {}, static = {}, },
1225-
}, http_server_mt)
1226+
}, httpd_mt)
12261227

12271228
return self
12281229
end
12291230

12301231
return {
12311232
DETACHED = DETACHED,
1232-
new = http_server_new
1233+
new = httpd_new
12331234
}

0 commit comments

Comments
 (0)