11 Commits

Author SHA1 Message Date
c51bd39b70 Merge b0470f4a0e into 453a5207ed 2023-11-13 13:15:02 +03:00
453a5207ed style(docs): Trim trailing whitespace in HTML docs
Many editors remove these automatically anyway which makes opening and
editng the docs cause a bunch of noise. This is just to get the noise
out of the way in a style commit so it doesn't leak into other PRs
2023-11-11 08:07:38 +03:00
de359ea408 chore(core): Update version markers to last released version
Closes #401
2023-11-11 00:48:02 +03:00
c93f9154e1 feat(rockspec): Ship mbox parser with LuaRocks, already packaged in some distros
Closes #324
2023-11-11 00:44:22 +03:00
8a5368b659 Merge pull request #418 from alerque/url-empty-path 2023-11-09 14:11:33 +03:00
22b8202d70 fix(wsocket): Properly report CONNRESET (#81) 2023-11-09 14:00:09 +03:00
3a817a56eb fix(url): Avoid fragment being part of authority, allows parsing empty paths 2023-11-08 23:27:58 +03:00
7eaf648056 fix(url): Avoid query string being part of authority, allows parsing empty paths 2023-11-08 14:50:43 +03:00
bef62aeb50 fix(inet): Return port as number in getsockname (#392) 2023-11-08 14:29:06 +03:00
b0470f4a0e Receive line with ending 2020-01-17 12:17:32 +10:00
c27c23074c TCP Receive without *
The TCP Receive code now uses a switch statement and allows dropping the * at the start of the string, like Lua's io library
2020-01-17 12:08:54 +10:00
11 changed files with 110 additions and 94 deletions

View File

@ -89,7 +89,7 @@ it should be easy to use LuaSocket. Just fire the interpreter and use the
Lua 5.2.2 Copyright (C) 1994-2013 Lua.org, PUC-Rio
> socket = require("socket")
> print(socket._VERSION)
--> LuaSocket 3.0.0
--> LuaSocket 3.1.0
</pre>
<p> Each module loads their dependencies automatically, so you only need to

View File

@ -69,6 +69,7 @@ local function make_plat(plat)
["socket.smtp"] = "src/smtp.lua",
ltn12 = "src/ltn12.lua",
socket = "src/socket.lua",
mbox = "src/mbox.lua",
mime = "src/mime.lua"
}
if plat == "unix"

View File

@ -1,7 +1,7 @@
#--------------------------------------------------------------------------
# Distribution makefile
#--------------------------------------------------------------------------
DIST = luasocket-3.0.0
DIST = luasocket-3.1.0
TEST = \
test/README \

View File

@ -9,7 +9,7 @@
* Internal function prototypes
\*=========================================================================*/
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 buffer_get(p_buffer buf, const char **data, 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);
/* receive new patterns */
if (!lua_isnumber(L, 2)) {
const char *p= luaL_optstring(L, 2, "*l");
if (p[0] == '*' && p[1] == 'l') err = recvline(buf, &b);
else if (p[0] == '*' && p[1] == 'a') err = recvall(buf, &b);
else luaL_argcheck(L, 0, 2, "invalid receive pattern");
const char *p = luaL_optstring(L, 2, "l");
if (*p == '*') p++; /* skip optional '*' (for compatibility) */
switch (*p) {
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
* received) */
} 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
* 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;
while (err == IO_DONE) {
size_t count, pos; const char *data;
@ -234,6 +245,8 @@ static int recvline(p_buffer buf, luaL_Buffer *b) {
pos++;
}
if (pos < count) { /* found '\n' */
if (!chop)
luaL_addchar(b, '\n');
buffer_skip(buf, pos+1); /* skip '\n' too */
break; /* we are done */
} else /* reached the end of the buffer */

View File

@ -290,7 +290,7 @@ int inet_meth_getsockname(lua_State *L, p_socket ps, int family)
return 2;
}
lua_pushstring(L, name);
lua_pushstring(L, port);
lua_pushinteger(L, (int) strtol(port, (char **) NULL, 10));
switch (family) {
case AF_INET: lua_pushliteral(L, "inet"); break;
case AF_INET6: lua_pushliteral(L, "inet6"); break;

View File

@ -10,7 +10,7 @@
/*-------------------------------------------------------------------------* \
* Current socket library version
\*-------------------------------------------------------------------------*/
#define LUASOCKET_VERSION "LuaSocket 3.0.0"
#define LUASOCKET_VERSION "LuaSocket 3.1.0"
#define LUASOCKET_COPYRIGHT "Copyright (C) 1999-2013 Diego Nehab"
/*-------------------------------------------------------------------------*\

View File

@ -272,7 +272,7 @@ SOCKET_win64=wsocket.obj
#
SO=$(SO_$(PLAT))
O=$(O_$(PLAT))
SOCKET_V=3.0.0
SOCKET_V=3.1.0
MIME_V=1.0.3
SOCKET_SO=socket-$(SOCKET_V).$(SO)
MIME_SO=mime-$(MIME_V).$(SO)

View File

@ -152,7 +152,7 @@ function _M.parse(url, default)
url = string.gsub(url, "^([%w][%w%+%-%.]*)%:",
function(s) parsed.scheme = s; return "" end)
-- get authority
url = string.gsub(url, "^//([^/]*)", function(n)
url = string.gsub(url, "^//([^/%?#]*)", function(n)
parsed.authority = n
return ""
end)

View File

@ -262,6 +262,7 @@ int socket_recv(p_socket ps, char *data, size_t count, size_t *got,
if (err != WSAEWOULDBLOCK) {
if (err != WSAECONNRESET || prev == WSAECONNRESET) return err;
prev = err;
continue;
}
if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err;
}
@ -291,6 +292,7 @@ int socket_recvfrom(p_socket ps, char *data, size_t count, size_t *got,
if (err != WSAEWOULDBLOCK) {
if (err != WSAECONNRESET || prev == WSAECONNRESET) return err;
prev = err;
continue;
}
if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err;
}