mirror of
https://github.com/lunarmodules/luasocket.git
synced 2025-04-30 12:16:45 +02:00
Compare commits
4 Commits
7fef902bfd
...
9aa01250a7
Author | SHA1 | Date | |
---|---|---|---|
|
9aa01250a7 | ||
|
98be8d9fc1 | ||
|
b0470f4a0e | ||
|
c27c23074c |
25
src/buffer.c
25
src/buffer.c
@ -9,7 +9,7 @@
|
|||||||
* Internal function prototypes
|
* Internal function prototypes
|
||||||
\*=========================================================================*/
|
\*=========================================================================*/
|
||||||
static int recvraw(p_buffer buf, size_t wanted, luaL_Buffer *b);
|
static int recvraw(p_buffer buf, size_t wanted, luaL_Buffer *b);
|
||||||
static int recvline(p_buffer buf, luaL_Buffer *b);
|
static int recvline(p_buffer buf, luaL_Buffer *b, int chop);
|
||||||
static int recvall(p_buffer buf, luaL_Buffer *b);
|
static int recvall(p_buffer buf, luaL_Buffer *b);
|
||||||
static int buffer_get(p_buffer buf, const char **data, size_t *count);
|
static int buffer_get(p_buffer buf, const char **data, size_t *count);
|
||||||
static void buffer_skip(p_buffer buf, size_t count);
|
static void buffer_skip(p_buffer buf, size_t count);
|
||||||
@ -117,10 +117,21 @@ int buffer_meth_receive(lua_State *L, p_buffer buf) {
|
|||||||
luaL_addlstring(&b, part, size);
|
luaL_addlstring(&b, part, size);
|
||||||
/* receive new patterns */
|
/* receive new patterns */
|
||||||
if (!lua_isnumber(L, 2)) {
|
if (!lua_isnumber(L, 2)) {
|
||||||
const char *p= luaL_optstring(L, 2, "*l");
|
const char *p = luaL_optstring(L, 2, "l");
|
||||||
if (p[0] == '*' && p[1] == 'l') err = recvline(buf, &b);
|
if (*p == '*') p++; /* skip optional '*' (for compatibility) */
|
||||||
else if (p[0] == '*' && p[1] == 'a') err = recvall(buf, &b);
|
switch (*p) {
|
||||||
else luaL_argcheck(L, 0, 2, "invalid receive pattern");
|
case 'l': /* line */
|
||||||
|
err = recvline(buf, &b, 1);
|
||||||
|
break;
|
||||||
|
case 'L': /* line with \n */
|
||||||
|
err = recvline(buf, &b, 0);
|
||||||
|
break;
|
||||||
|
case 'a': /* all */
|
||||||
|
err = recvall(buf, &b);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
luaL_argcheck(L, 0, 2, "invalid receive pattern");
|
||||||
|
}
|
||||||
/* get a fixed number of bytes (minus what was already partially
|
/* get a fixed number of bytes (minus what was already partially
|
||||||
* received) */
|
* received) */
|
||||||
} else {
|
} else {
|
||||||
@ -222,7 +233,7 @@ static int recvall(p_buffer buf, luaL_Buffer *b) {
|
|||||||
* Reads a line terminated by a CR LF pair or just by a LF. The CR and LF
|
* Reads a line terminated by a CR LF pair or just by a LF. The CR and LF
|
||||||
* are not returned by the function and are discarded from the buffer
|
* are not returned by the function and are discarded from the buffer
|
||||||
\*-------------------------------------------------------------------------*/
|
\*-------------------------------------------------------------------------*/
|
||||||
static int recvline(p_buffer buf, luaL_Buffer *b) {
|
static int recvline(p_buffer buf, luaL_Buffer *b, int chop) {
|
||||||
int err = IO_DONE;
|
int err = IO_DONE;
|
||||||
while (err == IO_DONE) {
|
while (err == IO_DONE) {
|
||||||
size_t count, pos; const char *data;
|
size_t count, pos; const char *data;
|
||||||
@ -234,6 +245,8 @@ static int recvline(p_buffer buf, luaL_Buffer *b) {
|
|||||||
pos++;
|
pos++;
|
||||||
}
|
}
|
||||||
if (pos < count) { /* found '\n' */
|
if (pos < count) { /* found '\n' */
|
||||||
|
if (!chop)
|
||||||
|
luaL_addchar(b, '\n');
|
||||||
buffer_skip(buf, pos+1); /* skip '\n' too */
|
buffer_skip(buf, pos+1); /* skip '\n' too */
|
||||||
break; /* we are done */
|
break; /* we are done */
|
||||||
} else /* reached the end of the buffer */
|
} else /* reached the end of the buffer */
|
||||||
|
@ -54,7 +54,7 @@ local function receiveheaders(sock, headers)
|
|||||||
while line ~= "" do
|
while line ~= "" do
|
||||||
-- get field-name and value
|
-- get field-name and value
|
||||||
name, value = socket.skip(2, string.find(line, "^(.-):%s*(.*)"))
|
name, value = socket.skip(2, string.find(line, "^(.-):%s*(.*)"))
|
||||||
if not (name and value) then return nil, "malformed reponse headers" end
|
if not (name and value) then return nil, "malformed response headers" end
|
||||||
name = string.lower(name)
|
name = string.lower(name)
|
||||||
-- get next line (value might be folded)
|
-- get next line (value might be folded)
|
||||||
line, err = sock:receive()
|
line, err = sock:receive()
|
||||||
@ -81,7 +81,7 @@ socket.sourcet["http-chunked"] = function(sock, headers)
|
|||||||
dirty = function() return sock:dirty() end
|
dirty = function() return sock:dirty() end
|
||||||
}, {
|
}, {
|
||||||
__call = function()
|
__call = function()
|
||||||
-- get chunk size, skip extention
|
-- get chunk size, skip extension
|
||||||
local line, err = sock:receive()
|
local line, err = sock:receive()
|
||||||
if err then return nil, err end
|
if err then return nil, err end
|
||||||
local size = base.tonumber(string.gsub(line, ";.*", ""), 16)
|
local size = base.tonumber(string.gsub(line, ";.*", ""), 16)
|
||||||
@ -281,7 +281,7 @@ local function adjustrequest(reqt)
|
|||||||
if not (host and host ~= "") then
|
if not (host and host ~= "") then
|
||||||
socket.try(nil, "invalid host '" .. base.tostring(nreqt.host) .. "'")
|
socket.try(nil, "invalid host '" .. base.tostring(nreqt.host) .. "'")
|
||||||
end
|
end
|
||||||
-- compute uri if user hasn't overriden
|
-- compute uri if user hasn't overridden
|
||||||
nreqt.uri = reqt.uri or adjusturi(nreqt)
|
nreqt.uri = reqt.uri or adjusturi(nreqt)
|
||||||
-- adjust headers in request
|
-- adjust headers in request
|
||||||
nreqt.headers = adjustheaders(nreqt)
|
nreqt.headers = adjustheaders(nreqt)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# luasocket src/makefile
|
# luasocket src/makefile
|
||||||
#
|
#
|
||||||
# Definitions in this section can be overriden on the command line or in the
|
# Definitions in this section can be overridden on the command line or in the
|
||||||
# environment.
|
# environment.
|
||||||
#
|
#
|
||||||
# These are equivalent:
|
# These are equivalent:
|
||||||
|
@ -225,7 +225,7 @@ local function adjust_headers(mesgt)
|
|||||||
lower["date"] = lower["date"] or
|
lower["date"] = lower["date"] or
|
||||||
os.date("!%a, %d %b %Y %H:%M:%S ") .. (mesgt.zone or _M.ZONE)
|
os.date("!%a, %d %b %Y %H:%M:%S ") .. (mesgt.zone or _M.ZONE)
|
||||||
lower["x-mailer"] = lower["x-mailer"] or socket._VERSION
|
lower["x-mailer"] = lower["x-mailer"] or socket._VERSION
|
||||||
-- this can't be overriden
|
-- this can't be overridden
|
||||||
lower["mime-version"] = "1.0"
|
lower["mime-version"] = "1.0"
|
||||||
return lower
|
return lower
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user