diff options
author | Diego Nehab <diego@tecgraf.puc-rio.br> | 2003-05-25 01:54:13 +0000 |
---|---|---|
committer | Diego Nehab <diego@tecgraf.puc-rio.br> | 2003-05-25 01:54:13 +0000 |
commit | 0f6c8d50a99997ac7829864b1c93362b50f1bbf3 (patch) | |
tree | d0cefe3a05484e65b7b7e79d8cae4a1d2e6d19fb /src/http.lua | |
parent | c1ef3e7103cc652d2004ef1ddc9409b946207f33 (diff) | |
download | luasocket-0f6c8d50a99997ac7829864b1c93362b50f1bbf3.tar.gz luasocket-0f6c8d50a99997ac7829864b1c93362b50f1bbf3.tar.bz2 luasocket-0f6c8d50a99997ac7829864b1c93362b50f1bbf3.zip |
Porting to LUA 5.0 final
Diffstat (limited to 'src/http.lua')
-rw-r--r-- | src/http.lua | 35 |
1 files changed, 16 insertions, 19 deletions
diff --git a/src/http.lua b/src/http.lua index 59645ee..d531a2f 100644 --- a/src/http.lua +++ b/src/http.lua | |||
@@ -7,7 +7,8 @@ | |||
7 | ----------------------------------------------------------------------------- | 7 | ----------------------------------------------------------------------------- |
8 | 8 | ||
9 | local Public, Private = {}, {} | 9 | local Public, Private = {}, {} |
10 | socket.http = Public | 10 | local socket = _G[LUASOCKET_LIBNAME] -- get LuaSocket namespace |
11 | socket.http = Public -- create http sub namespace | ||
11 | 12 | ||
12 | ----------------------------------------------------------------------------- | 13 | ----------------------------------------------------------------------------- |
13 | -- Program constants | 14 | -- Program constants |
@@ -24,19 +25,15 @@ Public.BLOCKSIZE = 8192 | |||
24 | ----------------------------------------------------------------------------- | 25 | ----------------------------------------------------------------------------- |
25 | -- Tries to get a pattern from the server and closes socket on error | 26 | -- Tries to get a pattern from the server and closes socket on error |
26 | -- sock: socket connected to the server | 27 | -- sock: socket connected to the server |
27 | -- ...: pattern to receive | 28 | -- pattern: pattern to receive |
28 | -- Returns | 29 | -- Returns |
29 | -- ...: received pattern | 30 | -- received pattern on success |
30 | -- err: error message if any | 31 | -- nil followed by error message on error |
31 | ----------------------------------------------------------------------------- | 32 | ----------------------------------------------------------------------------- |
32 | function Private.try_receive(...) | 33 | function Private.try_receive(sock, pattern) |
33 | local sock = arg[1] | 34 | local data, err = sock:receive(pattern) |
34 | local data, err = sock.receive(unpack(arg)) | 35 | if not data then sock:close() end |
35 | if err then | 36 | return data, err |
36 | sock:close() | ||
37 | return nil, err | ||
38 | end | ||
39 | return data | ||
40 | end | 37 | end |
41 | 38 | ||
42 | ----------------------------------------------------------------------------- | 39 | ----------------------------------------------------------------------------- |
@@ -47,8 +44,8 @@ end | |||
47 | -- err: error message if any, nil if successfull | 44 | -- err: error message if any, nil if successfull |
48 | ----------------------------------------------------------------------------- | 45 | ----------------------------------------------------------------------------- |
49 | function Private.try_send(sock, data) | 46 | function Private.try_send(sock, data) |
50 | local err = sock:send(data) | 47 | local sent, err = sock:send(data) |
51 | if err then sock:close() end | 48 | if not sent then sock:close() end |
52 | return err | 49 | return err |
53 | end | 50 | end |
54 | 51 | ||
@@ -285,21 +282,21 @@ end | |||
285 | -- nil if successfull, or an error message in case of error | 282 | -- nil if successfull, or an error message in case of error |
286 | ----------------------------------------------------------------------------- | 283 | ----------------------------------------------------------------------------- |
287 | function Private.send_indirect(data, send_cb, chunk, size) | 284 | function Private.send_indirect(data, send_cb, chunk, size) |
288 | local sent, err | 285 | local total, sent, err |
289 | sent = 0 | 286 | total = 0 |
290 | while 1 do | 287 | while 1 do |
291 | if type(chunk) ~= "string" or type(size) ~= "number" then | 288 | if type(chunk) ~= "string" or type(size) ~= "number" then |
292 | data:close() | 289 | data:close() |
293 | if not chunk and type(size) == "string" then return size | 290 | if not chunk and type(size) == "string" then return size |
294 | else return "invalid callback return" end | 291 | else return "invalid callback return" end |
295 | end | 292 | end |
296 | err = data:send(chunk) | 293 | sent, err = data:send(chunk) |
297 | if err then | 294 | if err then |
298 | data:close() | 295 | data:close() |
299 | return err | 296 | return err |
300 | end | 297 | end |
301 | sent = sent + string.len(chunk) | 298 | total = total + sent |
302 | if sent >= size then break end | 299 | if total >= size then break end |
303 | chunk, size = send_cb() | 300 | chunk, size = send_cb() |
304 | end | 301 | end |
305 | end | 302 | end |