summaryrefslogtreecommitdiffstats
path: root/lem/http/server.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lem/http/server.lua')
-rw-r--r--lem/http/server.lua25
1 files changed, 25 insertions, 0 deletions
diff --git a/lem/http/server.lua b/lem/http/server.lua
index fcab33b..a3cb86b 100644
--- a/lem/http/server.lua
+++ b/lem/http/server.lua
@@ -35,6 +35,29 @@ local M = {}
function M.debug() end
+local Request = {}
+Request.__index = Request
+M.Request = Request
+
+function Request:body()
+ local len, body = self.headers['content-length'], ''
+ if not len then return body end
+
+ len = tonumber(len)
+ if len <= 0 then return body end
+
+ if self.headers['expect'] == '100-continue' then
+ local ok, err = self.client:write('HTTP/1.1 100 Continue\r\n\r\n')
+ if not ok then return nil, err end
+ end
+
+ local err
+ body, err = self.client:read(len)
+ if not body then return nil, err end
+
+ return body
+end
+
do
local gsub, char, tonumber = string.gsub, string.char, tonumber
@@ -67,6 +90,8 @@ local function handleHTTP(self, client)
if not req then self.debug('read', err) break end
local method, uri, version = req.method, req.uri, req.version
+ setmetatable(req, Request)
+ req.client = client
req.path = urldecode(uri:match('^([^?]*)'))
local res = newresponse(req)