aboutsummaryrefslogtreecommitdiff
path: root/src/http.lua
diff options
context:
space:
mode:
authorDiego Nehab <diego@tecgraf.puc-rio.br>2003-05-25 01:54:13 +0000
committerDiego Nehab <diego@tecgraf.puc-rio.br>2003-05-25 01:54:13 +0000
commit0f6c8d50a99997ac7829864b1c93362b50f1bbf3 (patch)
treed0cefe3a05484e65b7b7e79d8cae4a1d2e6d19fb /src/http.lua
parentc1ef3e7103cc652d2004ef1ddc9409b946207f33 (diff)
downloadluasocket-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.lua35
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
9local Public, Private = {}, {} 9local Public, Private = {}, {}
10socket.http = Public 10local socket = _G[LUASOCKET_LIBNAME] -- get LuaSocket namespace
11socket.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-----------------------------------------------------------------------------
32function Private.try_receive(...) 33function 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
40end 37end
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-----------------------------------------------------------------------------
49function Private.try_send(sock, data) 46function 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
53end 50end
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-----------------------------------------------------------------------------
287function Private.send_indirect(data, send_cb, chunk, size) 284function 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
305end 302end