78 lines
1.7 KiB
Lua
78 lines
1.7 KiB
Lua
local curl = require "lcurl"
|
|
|
|
local WAIT_COUNT = 1
|
|
|
|
local RESOURCE_URL = "http://www.rfc-editor.org/rfc/rfc2543.txt"
|
|
|
|
local State = {
|
|
PAUSE = 0, -- write function should return CURL_WRITEFUNC_PAUSE
|
|
WAIT = 1, -- waiting for CURLPAUSE_CONT
|
|
WRITE = 2, -- write function should perform write
|
|
WRITTEN = 3, -- write function have performed write
|
|
}
|
|
|
|
-- Current state
|
|
local state = State.PAUSE
|
|
|
|
-- Countdown to continue writes
|
|
local waitCount = 0
|
|
|
|
-- Received data and data size
|
|
local data, datasize = {}, 0
|
|
|
|
local function WriteFunction(str)
|
|
if state == State.PAUSE then
|
|
state = State.WAIT
|
|
waitCount = WAIT_COUNT
|
|
print('Pause')
|
|
return curl.WRITEFUNC_PAUSE
|
|
end
|
|
|
|
if state == State.WAIT then
|
|
-- callback shouldn't be called in this state
|
|
print("WARNING: write-callback called in STATE_WAIT")
|
|
return curl.WRITEFUNC_PAUSE
|
|
end
|
|
|
|
if state == State.WRITE then
|
|
state = State.WRITTEN
|
|
end
|
|
|
|
datasize = datasize + #str
|
|
data[#data + 1] = str
|
|
end
|
|
|
|
local progress = 0
|
|
local function ProgressFunction()
|
|
|
|
progress = progress + 1
|
|
|
|
if state == State.WAIT then
|
|
-- Wait until unpause
|
|
waitCount = waitCount - 1
|
|
if waitCount == 0 then
|
|
state = State.WRITE
|
|
print('Unpause :', progress)
|
|
easy:pause(curl.PAUSE_CONT)
|
|
end
|
|
end
|
|
|
|
-- WriteFunction written some data
|
|
if state == State.WRITTEN then
|
|
-- send pause to WriteFunction
|
|
state = State.PAUSE
|
|
progress = 0
|
|
end
|
|
|
|
end
|
|
|
|
easy = curl.easy{
|
|
url = RESOURCE_URL,
|
|
accept_encoding = "gzip,deflate",
|
|
writefunction = WriteFunction,
|
|
progressfunction = ProgressFunction,
|
|
noprogress = false,
|
|
followlocation = true,
|
|
}
|
|
|
|
easy:perform() |