mirror of
https://github.com/lunarmodules/luasocket.git
synced 2025-04-30 20:26:44 +02:00
Compare commits
4 Commits
c51bd39b70
...
2901029471
Author | SHA1 | Date | |
---|---|---|---|
|
2901029471 | ||
|
13f2b3c663 | ||
|
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 */
|
||||||
|
@ -62,7 +62,7 @@ local function receiveheaders(sock, headers)
|
|||||||
-- unfold any folded values
|
-- unfold any folded values
|
||||||
while string.find(line, "^%s") do
|
while string.find(line, "^%s") do
|
||||||
value = value .. line
|
value = value .. line
|
||||||
line = sock:receive()
|
line, err = sock:receive()
|
||||||
if err then return nil, err end
|
if err then return nil, err end
|
||||||
end
|
end
|
||||||
-- save pair in table
|
-- save pair in table
|
||||||
|
Loading…
x
Reference in New Issue
Block a user