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

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

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

@ -317,7 +317,7 @@ function UIManager:run()
if #self._zeromqs > 0 then
-- pending message queue, wait 100ms for input
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
input_event = zeromq:waitEvent()
if input_event then break end

@ -33,6 +33,10 @@ export TESSDATA_PREFIX="data"
# export dict directory
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
if ! grep /mnt/us/koreader/fonts/host /proc/mounts ; then
mount -o bind /usr/java/lib/fonts /mnt/us/koreader/fonts/host

@ -10,10 +10,14 @@ export TESSDATA_PREFIX="data"
# export dict directory
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
killall nickel
killall hindenburg
# finally call the launcher
./reader.lua /mnt/onboard 2> crash.log

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

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

Loading…
Cancel
Save