aboutsummaryrefslogtreecommitdiffstats
path: root/net/http.lua
diff options
context:
space:
mode:
authorMatthew Wild <mwild1@gmail.com>2013-04-12 00:32:10 +0100
committerMatthew Wild <mwild1@gmail.com>2013-04-12 00:32:10 +0100
commitf823a63ce870f3b464e06d15a41e5ecbbc88b583 (patch)
tree8d6271d7aa6669750651b16347b61448eda8e0b6 /net/http.lua
parent890bf7ab7466264a1d334bc0aa8a84c22a4ebf56 (diff)
parentef9b86202eb5ed42cefe788b01b1f09895d6899e (diff)
downloadprosody-f823a63ce870f3b464e06d15a41e5ecbbc88b583.tar.gz
prosody-f823a63ce870f3b464e06d15a41e5ecbbc88b583.zip
Merge 0.9->trunk
Diffstat (limited to 'net/http.lua')
-rw-r--r--net/http.lua53
1 files changed, 9 insertions, 44 deletions
diff --git a/net/http.lua b/net/http.lua
index ec55af92..4eb4a2ac 100644
--- a/net/http.lua
+++ b/net/http.lua
@@ -9,7 +9,8 @@
local socket = require "socket"
local b64 = require "util.encodings".base64.encode;
local url = require "socket.url"
-local httpstream_new = require "util.httpstream".new;
+local httpstream_new = require "net.http.parser".new;
+local util_http = require "util.http";
local ssl_available = pcall(require, "ssl");
@@ -70,52 +71,12 @@ function listener.ondisconnect(conn, err)
requests[conn] = nil;
end
-function urlencode(s) return s and (s:gsub("[^a-zA-Z0-9.~_-]", function (c) return format("%%%02x", c:byte()); end)); end
-function urldecode(s) return s and (s:gsub("%%(%x%x)", function (c) return char(tonumber(c,16)); end)); end
-
-local function _formencodepart(s)
- return s and (s:gsub("%W", function (c)
- if c ~= " " then
- return format("%%%02x", c:byte());
- else
- return "+";
- end
- end));
-end
-
-function formencode(form)
- local result = {};
- if form[1] then -- Array of ordered { name, value }
- for _, field in ipairs(form) do
- t_insert(result, _formencodepart(field.name).."=".._formencodepart(field.value));
- end
- else -- Unordered map of name -> value
- for name, value in pairs(form) do
- t_insert(result, _formencodepart(name).."=".._formencodepart(value));
- end
- end
- return t_concat(result, "&");
-end
-
-function formdecode(s)
- if not s:match("=") then return urldecode(s); end
- local r = {};
- for k, v in s:gmatch("([^=&]*)=([^&]*)") do
- k, v = k:gsub("%+", "%%20"), v:gsub("%+", "%%20");
- k, v = urldecode(k), urldecode(v);
- t_insert(r, { name = k, value = v });
- r[k] = v;
- end
- return r;
-end
-
-local function request_reader(request, data, startpos)
+local function request_reader(request, data)
if not request.parser then
if not data then return; end
local function success_cb(r)
if request.callback then
- for k,v in pairs(r) do request[k] = v; end
- request.callback(r.body, r.code, request, r);
+ request.callback(r.body, r.code, r, request);
request.callback = nil;
end
destroy_request(request);
@@ -216,6 +177,10 @@ function destroy_request(request)
end
end
-_M.urlencode = urlencode;
+local urlencode, urldecode = util_http.urlencode, util_http.urldecode;
+local formencode, formdecode = util_http.formencode, util_http.formdecode;
+
+_M.urlencode, _M.urldecode = urlencode, urldecode;
+_M.formencode, _M.formdecode = formencode, formdecode;
return _M;