fix zsync cannot run properly in Kindle due to firewall

pull/666/head
chrox 10 years ago
parent 3433241c1a
commit 2773ca9386

@ -5,6 +5,7 @@ local Event = require("ui/event")
local MessageQueue = require("ui/message/messagequeue") local MessageQueue = require("ui/message/messagequeue")
local dummy = require("ffi/zeromq_h") local dummy = require("ffi/zeromq_h")
local czmq = ffi.load("libs/libczmq.so.1")
local filemq = ffi.load("libs/libfmq.so.1") local filemq = ffi.load("libs/libfmq.so.1")
local FileMessageQueue = MessageQueue:new{ local FileMessageQueue = MessageQueue:new{
@ -14,11 +15,15 @@ local FileMessageQueue = MessageQueue:new{
function FileMessageQueue:init() function FileMessageQueue:init()
if self.client ~= nil then if self.client ~= nil then
self.fmq_recv = filemq.fmq_client_recv_nowait self.fmq_recv = filemq.fmq_client_recv
self.filemq = self.client self.filemq = self.client
self.poller = czmq.zpoller_new(filemq.fmq_client_handle(self.client), nil)
elseif self.server ~= nil then elseif self.server ~= nil then
self.fmq_recv = filemq.fmq_server_recv_nowait -- TODO: currently fmq_server_recv API is not available
--self.fmq_recv = filemq.fmq_server_recv
self.filemq = self.server self.filemq = self.server
-- TODO: currently fmq_server_handle API is not available
--self.poller = czmq.zpoller_new(filemq.fmq_server_handle(self.server), nil)
end end
end end
@ -31,13 +36,18 @@ function FileMessageQueue:stop()
DEBUG("stop filemq server") DEBUG("stop filemq server")
filemq.fmq_server_destroy(ffi.new('fmq_server_t *[1]', self.server)) filemq.fmq_server_destroy(ffi.new('fmq_server_t *[1]', self.server))
end end
if self.poller ~= nil then
czmq.zpoller_destroy(ffi.new('zpoller_t *[1]', self.poller))
end
end end
function FileMessageQueue:waitEvent() function FileMessageQueue:waitEvent()
local msg = self.fmq_recv(self.filemq) if not self.poller then return end
while msg ~= nil do if czmq.zpoller_wait(self.poller, 0) ~= nil then
table.insert(self.messages, msg) local msg = self.fmq_recv(self.filemq)
msg = self.fmq_recv(self.filemq) if msg ~= nil then
table.insert(self.messages, msg)
end
end end
return self:handleZMsgs(self.messages) return self:handleZMsgs(self.messages)
end end

@ -67,7 +67,7 @@ function MessageQueue:handleZMsgs(messages)
local message_size = czmq.zmsg_size(messages[1]) local message_size = czmq.zmsg_size(messages[1])
local command = pop_string() local command = pop_string()
DEBUG("ØMQ message", command) DEBUG("ØMQ message", command)
if command == "ENTER" and #messages >= 4 then if command == "ENTER" then
local id = pop_string() local id = pop_string()
local name = pop_string() local name = pop_string()
local header = pop_header() local header = pop_header()

@ -5,6 +5,7 @@ local Event = require("ui/event")
local MessageQueue = require("ui/message/messagequeue") local MessageQueue = require("ui/message/messagequeue")
local dummy = require("ffi/zeromq_h") local dummy = require("ffi/zeromq_h")
local czmq = ffi.load("libs/libczmq.so.1")
local zyre = ffi.load("libs/libzyre.so.1") local zyre = ffi.load("libs/libzyre.so.1")
local ZyreMessageQueue = MessageQueue:new{ local ZyreMessageQueue = MessageQueue:new{
@ -13,12 +14,15 @@ local ZyreMessageQueue = MessageQueue:new{
function ZyreMessageQueue:start() function ZyreMessageQueue:start()
self.node = zyre.zyre_new() self.node = zyre.zyre_new()
self.poller = czmq.zpoller_new(zyre.zyre_socket(self.node), nil)
for key, value in pairs(self.header) do for key, value in pairs(self.header) do
zyre.zyre_set_header(self.node, key, value) zyre.zyre_set_header(self.node, key, value)
end end
zyre.zyre_set_verbose(self.node) --zyre.zyre_set_verbose(self.node)
zyre.zyre_set_interface(self.node, "wlan0")
zyre.zyre_start(self.node) zyre.zyre_start(self.node)
zyre.zyre_join(self.node, "GLOBAL") zyre.zyre_join(self.node, "GLOBAL")
--zyre.zyre_dump(self.node)
end end
function ZyreMessageQueue:stop() function ZyreMessageQueue:stop()
@ -27,13 +31,17 @@ function ZyreMessageQueue:stop()
zyre.zyre_stop(self.node) zyre.zyre_stop(self.node)
zyre.zyre_destroy(ffi.new('zyre_t *[1]', self.node)) zyre.zyre_destroy(ffi.new('zyre_t *[1]', self.node))
end end
if self.poller ~= nil then
czmq.zpoller_destroy(ffi.new('zpoller_t *[1]', self.poller))
end
end end
function ZyreMessageQueue:waitEvent() function ZyreMessageQueue:waitEvent()
local msg = zyre.zyre_recv_nowait(self.node) if czmq.zpoller_wait(self.poller, 0) ~= nil then
while msg ~= nil do local msg = zyre.zyre_recv(self.node)
table.insert(self.messages, msg) if msg ~= nil then
msg = zyre.zyre_recv_nowait(self.node) table.insert(self.messages, msg)
end
end end
return self:handleZMsgs(self.messages) return self:handleZMsgs(self.messages)
end end

@ -317,7 +317,7 @@ function UIManager:run()
if #self._zeromqs > 0 then if #self._zeromqs > 0 then
-- pending message queue, wait 100ms for input -- pending message queue, wait 100ms for input
input_event = Input:waitEvent(1000*100) input_event = Input:waitEvent(1000*100)
if input_event and input_event.handler == "onInputError" then if not input_event or input_event.handler == "onInputError" then
for _, zeromq in ipairs(self._zeromqs) do for _, zeromq in ipairs(self._zeromqs) do
input_event = zeromq:waitEvent() input_event = zeromq:waitEvent()
if input_event then break end if input_event then break end

@ -33,6 +33,10 @@ export TESSDATA_PREFIX="data"
# export dict directory # export dict directory
export STARDICT_DATA_DIR="data/dict" export STARDICT_DATA_DIR="data/dict"
# accept input ports for zsync plugin
iptables -A INPUT -i wlan0 -p udp --dport 5670 -j ACCEPT
iptables -A INPUT -i wlan0 -p tcp --dport 49152:49162 -j ACCEPT
# bind-mount system fonts # bind-mount system fonts
if ! grep /mnt/us/koreader/fonts/host /proc/mounts ; then if ! grep /mnt/us/koreader/fonts/host /proc/mounts ; then
mount -o bind /usr/java/lib/fonts /mnt/us/koreader/fonts/host mount -o bind /usr/java/lib/fonts /mnt/us/koreader/fonts/host

@ -10,10 +10,14 @@ export TESSDATA_PREFIX="data"
# export dict directory # export dict directory
export STARDICT_DATA_DIR="data/dict" export STARDICT_DATA_DIR="data/dict"
# accept input ports for zsync plugin
iptables -A INPUT -i wlan0 -p udp --dport 5670 -j ACCEPT
iptables -A INPUT -i wlan0 -p tcp --dport 49152:49162 -j ACCEPT
# exit from nickel # exit from nickel
killall nickel killall nickel
killall hindenburg killall hindenburg
# finally call the launcher # finally call the launcher
./reader.lua /mnt/onboard 2> crash.log ./reader.lua /mnt/onboard 2> crash.log

@ -1 +1 @@
Subproject commit 7108ec4fd145d32d7abe32c25f5811001f5f570c Subproject commit a276f2fde1fb118f3104b10077fb8a38f2855120

@ -300,12 +300,14 @@ end
function ZSync:subscribe() function ZSync:subscribe()
DEBUG("subscribe documents") DEBUG("subscribe documents")
self.received = {}
self.inbox_chooser = InboxChooser:new{zsync = self} self.inbox_chooser = InboxChooser:new{zsync = self}
UIManager:show(self.inbox_chooser) UIManager:show(self.inbox_chooser)
end end
function ZSync:unsubscribe() function ZSync:unsubscribe()
DEBUG("ZSync unsubscribe") DEBUG("ZSync unsubscribe")
self.received = {}
self:stopFileMQ() self:stopFileMQ()
self:stopZyreMQ() self:stopZyreMQ()
end end
@ -329,10 +331,13 @@ function ZSync:onZyreEnter(id, name, header, endpoint)
end end
function ZSync:onFileDeliver(filename, fullname) function ZSync:onFileDeliver(filename, fullname)
-- sometimes several FileDelever msgs are sent from filemq
if self.received[filename] then return end
UIManager:show(InfoMessage:new{ UIManager:show(InfoMessage:new{
text = _("Received file:") .. "\n" .. filename, text = _("Received file:") .. "\n" .. filename,
timeout = 1, timeout = 1,
}) })
self.received[filename] = true
end end
--[[ --[[

Loading…
Cancel
Save