mirror of
https://github.com/YunoHost-Apps/jitsi_ynh.git
synced 2024-09-03 19:35:57 +02:00
commit
75bf43d609
8 changed files with 76 additions and 85 deletions
|
@ -9,7 +9,7 @@
|
||||||
## Overview
|
## Overview
|
||||||
Jitsi Meet is a libre software (Apache) WebRTC JavaScript app that uses Jitsi Videobridge to provide high quality, secure, and scalable video conferences.
|
Jitsi Meet is a libre software (Apache) WebRTC JavaScript app that uses Jitsi Videobridge to provide high quality, secure, and scalable video conferences.
|
||||||
|
|
||||||
**Shipped version:** 1.0.3387
|
**Shipped version:** 1.0.3729
|
||||||
|
|
||||||
## Important points before installing
|
## Important points before installing
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
SOURCE_URL=https://github.com/jitsi/jicofo/archive/84698893c333b386438de9c69616e1cc5c7df243.tar.gz
|
SOURCE_URL=https://github.com/jitsi/jicofo/archive/517.tar.gz
|
||||||
SOURCE_SUM=569898ba95579c59a7e4e6ee467a99c90e9170c7c2596c3461d2652f8cda3b7a
|
SOURCE_SUM=5239a8a4c8519a9362cabf151a1bb34138ba5083d652bc2c44a397484d6ffe08
|
||||||
SOURCE_SUM_PRG=sha256sum
|
SOURCE_SUM_PRG=sha256sum
|
||||||
SOURCE_FORMAT=tar.gz
|
SOURCE_FORMAT=tar.gz
|
||||||
SOURCE_IN_SUBDIR=true
|
SOURCE_IN_SUBDIR=true
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
SOURCE_URL=https://download.jitsi.org/stable/jitsi-meet-web_1.0.3387-1_all.deb
|
SOURCE_URL=https://download.jitsi.org/stable/jitsi-meet-web_1.0.3729-1_all.deb
|
||||||
SOURCE_SUM=f10fe9ab7f07beaf2eea0cf052cbc500b32c088d1288808443c99323713f1dbb
|
SOURCE_SUM=067ff38ef484063db6756a1f06e3e55226a9a01b9ad60f4a2cbe7021423eece4
|
||||||
SOURCE_SUM_PRG=sha256sum
|
SOURCE_SUM_PRG=sha256sum
|
||||||
SOURCE_FORMAT=deb
|
SOURCE_FORMAT=deb
|
||||||
SOURCE_IN_SUBDIR=true
|
SOURCE_IN_SUBDIR=true
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
SOURCE_URL=https://download.jitsi.org/jitsi-videobridge/linux/jitsi-videobridge-linux-x64-1120.zip
|
SOURCE_URL=https://download.jitsi.org/jitsi-videobridge/linux/jitsi-videobridge-linux-x64-1130.zip
|
||||||
SOURCE_SUM=6f00ce479d7f010b42fef3f262b1ecd42d11e6a5872c164231ea38db7216d680
|
SOURCE_SUM=792db05e61e36d8811e7b132581b95b1022a8bf5689189e6206bc05888b54ec4
|
||||||
SOURCE_SUM_PRG=sha256sum
|
SOURCE_SUM_PRG=sha256sum
|
||||||
SOURCE_FORMAT=zip
|
SOURCE_FORMAT=zip
|
||||||
SOURCE_IN_SUBDIR=true
|
SOURCE_IN_SUBDIR=true
|
||||||
|
|
|
@ -1,52 +1,46 @@
|
||||||
-- XEP-0280: Message Carbons implementation for Prosody
|
-- XEP-0280: Message Carbons implementation for Prosody
|
||||||
-- Copyright (C) 2011 Kim Alvefur
|
-- Copyright (C) 2011-2016 Kim Alvefur
|
||||||
--
|
--
|
||||||
-- This file is MIT/X11 licensed.
|
-- This file is MIT/X11 licensed.
|
||||||
|
|
||||||
local st = require "util.stanza";
|
local st = require "util.stanza";
|
||||||
local jid_bare = require "util.jid".bare;
|
local jid_bare = require "util.jid".bare;
|
||||||
local xmlns_carbons = "urn:xmpp:carbons:2";
|
local xmlns_carbons = "urn:xmpp:carbons:2";
|
||||||
local xmlns_carbons_old = "urn:xmpp:carbons:1";
|
|
||||||
local xmlns_carbons_really_old = "urn:xmpp:carbons:0";
|
|
||||||
local xmlns_forward = "urn:xmpp:forward:0";
|
local xmlns_forward = "urn:xmpp:forward:0";
|
||||||
local full_sessions, bare_sessions = full_sessions, bare_sessions;
|
local full_sessions, bare_sessions = prosody.full_sessions, prosody.bare_sessions;
|
||||||
|
|
||||||
local function toggle_carbons(event)
|
local function toggle_carbons(event)
|
||||||
local origin, stanza = event.origin, event.stanza;
|
local origin, stanza = event.origin, event.stanza;
|
||||||
local state = stanza.tags[1].attr.mode or stanza.tags[1].name;
|
local state = stanza.tags[1].name;
|
||||||
module:log("debug", "%s %sd carbons", origin.full_jid, state);
|
module:log("debug", "%s %sd carbons", origin.full_jid, state);
|
||||||
origin.want_carbons = state == "enable" and stanza.tags[1].attr.xmlns;
|
origin.want_carbons = state == "enable" and stanza.tags[1].attr.xmlns;
|
||||||
return origin.send(st.reply(stanza));
|
origin.send(st.reply(stanza));
|
||||||
|
return true;
|
||||||
end
|
end
|
||||||
module:hook("iq-set/self/"..xmlns_carbons..":disable", toggle_carbons);
|
module:hook("iq-set/self/"..xmlns_carbons..":disable", toggle_carbons);
|
||||||
module:hook("iq-set/self/"..xmlns_carbons..":enable", toggle_carbons);
|
module:hook("iq-set/self/"..xmlns_carbons..":enable", toggle_carbons);
|
||||||
|
|
||||||
-- COMPAT
|
|
||||||
module:hook("iq-set/self/"..xmlns_carbons_old..":disable", toggle_carbons);
|
|
||||||
module:hook("iq-set/self/"..xmlns_carbons_old..":enable", toggle_carbons);
|
|
||||||
module:hook("iq-set/self/"..xmlns_carbons_really_old..":carbons", toggle_carbons);
|
|
||||||
|
|
||||||
local function message_handler(event, c2s)
|
local function message_handler(event, c2s)
|
||||||
local origin, stanza = event.origin, event.stanza;
|
local origin, stanza = event.origin, event.stanza;
|
||||||
local orig_type = stanza.attr.type;
|
local orig_type = stanza.attr.type or "normal";
|
||||||
local orig_from = stanza.attr.from;
|
local orig_from = stanza.attr.from;
|
||||||
|
local bare_from = jid_bare(orig_from);
|
||||||
local orig_to = stanza.attr.to;
|
local orig_to = stanza.attr.to;
|
||||||
|
local bare_to = jid_bare(orig_to);
|
||||||
|
|
||||||
if not (orig_type == nil
|
if not(orig_type == "chat" or (orig_type == "normal" and stanza:get_child("body"))) then
|
||||||
or orig_type == "normal"
|
return -- Only chat type messages
|
||||||
or orig_type == "chat") then
|
|
||||||
return -- No carbons for messages of type error or headline
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Stanza sent by a local client
|
-- Stanza sent by a local client
|
||||||
local bare_jid = jid_bare(orig_from);
|
local bare_jid = bare_from; -- JID of the local user
|
||||||
local target_session = origin;
|
local target_session = origin;
|
||||||
local top_priority = false;
|
local top_priority = false;
|
||||||
local user_sessions = bare_sessions[bare_jid];
|
local user_sessions = bare_sessions[bare_from];
|
||||||
|
|
||||||
-- Stanza about to be delivered to a local client
|
-- Stanza about to be delivered to a local client
|
||||||
if not c2s then
|
if not c2s then
|
||||||
bare_jid = jid_bare(orig_to);
|
bare_jid = bare_to;
|
||||||
target_session = full_sessions[orig_to];
|
target_session = full_sessions[orig_to];
|
||||||
user_sessions = bare_sessions[bare_jid];
|
user_sessions = bare_sessions[bare_jid];
|
||||||
if not target_session and user_sessions then
|
if not target_session and user_sessions then
|
||||||
|
@ -75,29 +69,12 @@ local function message_handler(event, c2s)
|
||||||
elseif stanza:get_child("no-copy", "urn:xmpp:hints") then
|
elseif stanza:get_child("no-copy", "urn:xmpp:hints") then
|
||||||
module:log("debug", "Message has no-copy hint, ignoring");
|
module:log("debug", "Message has no-copy hint, ignoring");
|
||||||
return
|
return
|
||||||
elseif stanza:get_child("x", "http://jabber.org/protocol/muc#user") then
|
elseif not c2s and bare_jid == orig_from and stanza:get_child("x", "http://jabber.org/protocol/muc#user") then
|
||||||
module:log("debug", "MUC PM, ignoring");
|
module:log("debug", "MUC PM, ignoring");
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Create the carbon copy and wrap it as per the Stanza Forwarding XEP
|
local carbon;
|
||||||
local copy = st.clone(stanza);
|
|
||||||
copy.attr.xmlns = "jabber:client";
|
|
||||||
local carbon = st.message{ from = bare_jid, type = orig_type, }
|
|
||||||
:tag(c2s and "sent" or "received", { xmlns = xmlns_carbons })
|
|
||||||
:tag("forwarded", { xmlns = xmlns_forward })
|
|
||||||
:add_child(copy):reset();
|
|
||||||
|
|
||||||
-- COMPAT
|
|
||||||
local carbon_old = st.message{ from = bare_jid, type = orig_type, }
|
|
||||||
:tag(c2s and "sent" or "received", { xmlns = xmlns_carbons_old }):up()
|
|
||||||
:tag("forwarded", { xmlns = xmlns_forward })
|
|
||||||
:add_child(copy):reset();
|
|
||||||
|
|
||||||
-- COMPAT
|
|
||||||
local carbon_really_old = st.clone(stanza)
|
|
||||||
:tag(c2s and "sent" or "received", { xmlns = xmlns_carbons_really_old }):up()
|
|
||||||
|
|
||||||
user_sessions = user_sessions and user_sessions.sessions;
|
user_sessions = user_sessions and user_sessions.sessions;
|
||||||
for _, session in pairs(user_sessions) do
|
for _, session in pairs(user_sessions) do
|
||||||
-- Carbons are sent to resources that have enabled it
|
-- Carbons are sent to resources that have enabled it
|
||||||
|
@ -105,14 +82,23 @@ local function message_handler(event, c2s)
|
||||||
-- but not the resource that sent the message, or the one that it's directed to
|
-- but not the resource that sent the message, or the one that it's directed to
|
||||||
and session ~= target_session
|
and session ~= target_session
|
||||||
-- and isn't among the top resources that would receive the message per standard routing rules
|
-- and isn't among the top resources that would receive the message per standard routing rules
|
||||||
and (c2s or session.priority ~= top_priority)
|
and (c2s or session.priority ~= top_priority) then
|
||||||
-- don't send v0 carbons (or copies) for c2s
|
if not carbon then
|
||||||
and (not c2s or session.want_carbons ~= xmlns_carbons_really_old) then
|
-- Create the carbon copy and wrap it as per the Stanza Forwarding XEP
|
||||||
|
local copy = st.clone(stanza);
|
||||||
|
if c2s and not orig_to then
|
||||||
|
stanza.attr.to = bare_from;
|
||||||
|
end
|
||||||
|
copy.attr.xmlns = "jabber:client";
|
||||||
|
carbon = st.message{ from = bare_jid, type = orig_type, }
|
||||||
|
:tag(c2s and "sent" or "received", { xmlns = xmlns_carbons })
|
||||||
|
:tag("forwarded", { xmlns = xmlns_forward })
|
||||||
|
:add_child(copy):reset();
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
carbon.attr.to = session.full_jid;
|
carbon.attr.to = session.full_jid;
|
||||||
module:log("debug", "Sending carbon to %s", session.full_jid);
|
module:log("debug", "Sending carbon to %s", session.full_jid);
|
||||||
local carbon = session.want_carbons == xmlns_carbons_old and carbon_old -- COMPAT
|
|
||||||
or session.want_carbons == xmlns_carbons_really_old and carbon_really_old -- COMPAT
|
|
||||||
or carbon;
|
|
||||||
session.send(carbon);
|
session.send(carbon);
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -123,15 +109,11 @@ local function c2s_message_handler(event)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Stanzas sent by local clients
|
-- Stanzas sent by local clients
|
||||||
module:hook("pre-message/host", c2s_message_handler, 1);
|
module:hook("pre-message/host", c2s_message_handler, -0.5);
|
||||||
module:hook("pre-message/bare", c2s_message_handler, 1);
|
module:hook("pre-message/bare", c2s_message_handler, -0.5);
|
||||||
module:hook("pre-message/full", c2s_message_handler, 1);
|
module:hook("pre-message/full", c2s_message_handler, -0.5);
|
||||||
-- Stanzas to local clients
|
-- Stanzas to local clients
|
||||||
module:hook("message/bare", message_handler, 1);
|
module:hook("message/bare", message_handler, -0.5);
|
||||||
module:hook("message/full", message_handler, 1);
|
module:hook("message/full", message_handler, -0.5);
|
||||||
|
|
||||||
module:add_feature(xmlns_carbons);
|
module:add_feature(xmlns_carbons);
|
||||||
module:add_feature(xmlns_carbons_old);
|
|
||||||
if module:get_option_boolean("carbons_v0") then
|
|
||||||
module:add_feature(xmlns_carbons_really_old);
|
|
||||||
end
|
|
||||||
|
|
|
@ -3,18 +3,17 @@
|
||||||
|
|
||||||
module:depends"http";
|
module:depends"http";
|
||||||
|
|
||||||
|
local mm = require "core.modulemanager";
|
||||||
local json = require"util.json";
|
local json = require"util.json";
|
||||||
local st = require"util.stanza";
|
local st = require"util.stanza";
|
||||||
local array = require"util.array";
|
local array = require"util.array";
|
||||||
|
|
||||||
local host_modules = hosts[module.host].modules;
|
|
||||||
|
|
||||||
local function get_supported()
|
local function get_supported()
|
||||||
local uris = array();
|
local uris = array();
|
||||||
if host_modules["bosh"] then
|
if mm.is_loaded(module.host, "bosh") or mm.is_loaded("*", "bosh") then
|
||||||
uris:push({ rel = "urn:xmpp:alt-connections:xbosh", href = module:http_url("bosh", "/http-bind") });
|
uris:push({ rel = "urn:xmpp:alt-connections:xbosh", href = module:http_url("bosh", "/http-bind") });
|
||||||
end
|
end
|
||||||
if host_modules["websocket"] then
|
if mm.is_loaded(module.host, "websocket") or mm.is_loaded("*", "websocket") then
|
||||||
uris:push({ rel = "urn:xmpp:alt-connections:websocket", href = module:http_url("websocket", "xmpp-websocket"):gsub("^http", "ws") });
|
uris:push({ rel = "urn:xmpp:alt-connections:websocket", href = module:http_url("websocket", "xmpp-websocket"):gsub("^http", "ws") });
|
||||||
end
|
end
|
||||||
return uris;
|
return uris;
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
-- XEP-0198: Stream Management for metronome IM
|
-- XEP-0198: Stream Management for Prosody IM
|
||||||
--
|
--
|
||||||
-- Copyright (C) 2010-2015 Matthew Wild
|
-- Copyright (C) 2010-2015 Matthew Wild
|
||||||
-- Copyright (C) 2010 Waqas Hussain
|
-- Copyright (C) 2010 Waqas Hussain
|
||||||
-- Copyright (C) 2012-2015 Kim Alvefur
|
-- Copyright (C) 2012-2015 Kim Alvefur
|
||||||
-- Copyright (C) 2012 Thijs Alkemade
|
-- Copyright (C) 2012 Thijs Alkemade
|
||||||
-- Copyright (C) 2014 Florian Zeitz
|
-- Copyright (C) 2014 Florian Zeitz
|
||||||
-- Copyright (C) 2016-2017 Thilo Molitor
|
-- Copyright (C) 2016-2020 Thilo Molitor
|
||||||
--
|
--
|
||||||
-- This project is MIT/X11 licensed. Please see the
|
-- This project is MIT/X11 licensed. Please see the
|
||||||
-- COPYING file in the source package for more information.
|
-- COPYING file in the source package for more information.
|
||||||
|
@ -13,7 +13,7 @@
|
||||||
|
|
||||||
local st = require "util.stanza";
|
local st = require "util.stanza";
|
||||||
local dep = require "util.dependencies";
|
local dep = require "util.dependencies";
|
||||||
local cache = dep.softreq("util.cache"); -- only available in metronome 0.10+
|
local cache = dep.softreq("util.cache"); -- only available in prosody 0.10+
|
||||||
local uuid_generate = require "util.uuid".generate;
|
local uuid_generate = require "util.uuid".generate;
|
||||||
local jid = require "util.jid";
|
local jid = require "util.jid";
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ local max_unacked_stanzas = module:get_option_number("smacks_max_unacked_stanzas
|
||||||
local delayed_ack_timeout = module:get_option_number("smacks_max_ack_delay", 60);
|
local delayed_ack_timeout = module:get_option_number("smacks_max_ack_delay", 60);
|
||||||
local max_hibernated_sessions = module:get_option_number("smacks_max_hibernated_sessions", 10);
|
local max_hibernated_sessions = module:get_option_number("smacks_max_hibernated_sessions", 10);
|
||||||
local max_old_sessions = module:get_option_number("smacks_max_old_sessions", 10);
|
local max_old_sessions = module:get_option_number("smacks_max_old_sessions", 10);
|
||||||
local core_process_stanza = metronome.core_process_stanza;
|
local core_process_stanza = prosody.core_process_stanza;
|
||||||
local sessionmanager = require"core.sessionmanager";
|
local sessionmanager = require"core.sessionmanager";
|
||||||
|
|
||||||
assert(max_hibernated_sessions > 0, "smacks_max_hibernated_sessions must be greater than 0");
|
assert(max_hibernated_sessions > 0, "smacks_max_hibernated_sessions must be greater than 0");
|
||||||
|
@ -50,7 +50,7 @@ assert(max_old_sessions > 0, "smacks_old_sessions must be greater than 0");
|
||||||
local c2s_sessions = module:shared("/*/c2s/sessions");
|
local c2s_sessions = module:shared("/*/c2s/sessions");
|
||||||
|
|
||||||
local function init_session_cache(max_entries, evict_callback)
|
local function init_session_cache(max_entries, evict_callback)
|
||||||
-- old metronome version < 0.10 (no limiting at all!)
|
-- old prosody version < 0.10 (no limiting at all!)
|
||||||
if not cache then
|
if not cache then
|
||||||
local store = {};
|
local store = {};
|
||||||
return {
|
return {
|
||||||
|
@ -67,7 +67,7 @@ local function init_session_cache(max_entries, evict_callback)
|
||||||
};
|
};
|
||||||
end
|
end
|
||||||
|
|
||||||
-- use per user limited cache for metronome >= 0.10
|
-- use per user limited cache for prosody >= 0.10
|
||||||
local stores = {};
|
local stores = {};
|
||||||
return {
|
return {
|
||||||
get = function(user, key)
|
get = function(user, key)
|
||||||
|
@ -108,7 +108,7 @@ local function stoppable_timer(delay, callback)
|
||||||
if stopped then return; end
|
if stopped then return; end
|
||||||
return callback(t);
|
return callback(t);
|
||||||
end);
|
end);
|
||||||
if timer and timer.stop then return timer; end -- new metronome api includes stop() function
|
if timer and timer.stop then return timer; end -- new prosody api includes stop() function
|
||||||
return {
|
return {
|
||||||
stop = function () stopped = true end;
|
stop = function () stopped = true end;
|
||||||
timer;
|
timer;
|
||||||
|
@ -116,7 +116,7 @@ local function stoppable_timer(delay, callback)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function delayed_ack_function(session)
|
local function delayed_ack_function(session)
|
||||||
-- fire event only if configured to do so and our session is not hibernated or destroyed
|
-- fire event only if configured to do so and our session is not already hibernated or destroyed
|
||||||
if delayed_ack_timeout > 0 and session.awaiting_ack
|
if delayed_ack_timeout > 0 and session.awaiting_ack
|
||||||
and not session.hibernating and not session.destroyed then
|
and not session.hibernating and not session.destroyed then
|
||||||
session.log("debug", "Firing event 'smacks-ack-delayed', queue = %d",
|
session.log("debug", "Firing event 'smacks-ack-delayed', queue = %d",
|
||||||
|
@ -159,16 +159,26 @@ module:hook("s2s-stream-features",
|
||||||
|
|
||||||
local function request_ack_if_needed(session, force, reason)
|
local function request_ack_if_needed(session, force, reason)
|
||||||
local queue = session.outgoing_stanza_queue;
|
local queue = session.outgoing_stanza_queue;
|
||||||
|
local expected_h = session.last_acknowledged_stanza + #queue;
|
||||||
|
-- session.log("debug", "*** SMACKS(1) ***: awaiting_ack=%s, hibernating=%s", tostring(session.awaiting_ack), tostring(session.hibernating));
|
||||||
if session.awaiting_ack == nil and not session.hibernating then
|
if session.awaiting_ack == nil and not session.hibernating then
|
||||||
if (#queue > max_unacked_stanzas and session.last_queue_count ~= #queue) or force then
|
-- this check of last_requested_h prevents ack-loops if missbehaving clients report wrong
|
||||||
|
-- stanza counts. it is set when an <r> is really sent (e.g. inside timer), preventing any
|
||||||
|
-- further requests until a higher h-value would be expected.
|
||||||
|
-- session.log("debug", "*** SMACKS(2) ***: #queue=%s, max_unacked_stanzas=%s, expected_h=%s, last_requested_h=%s", tostring(#queue), tostring(max_unacked_stanzas), tostring(expected_h), tostring(session.last_requested_h));
|
||||||
|
if (#queue > max_unacked_stanzas and expected_h ~= session.last_requested_h) or force then
|
||||||
session.log("debug", "Queuing <r> (in a moment) from %s - #queue=%d", reason, #queue);
|
session.log("debug", "Queuing <r> (in a moment) from %s - #queue=%d", reason, #queue);
|
||||||
session.awaiting_ack = false;
|
session.awaiting_ack = false;
|
||||||
session.awaiting_ack_timer = stoppable_timer(1e-06, function ()
|
session.awaiting_ack_timer = stoppable_timer(1e-06, function ()
|
||||||
if not session.awaiting_ack and not session.hibernating then
|
-- session.log("debug", "*** SMACKS(3) ***: awaiting_ack=%s, hibernating=%s", tostring(session.awaiting_ack), tostring(session.hibernating));
|
||||||
session.log("debug", "Sending <r> (inside timer, before send)");
|
-- only request ack if needed and our session is not already hibernated or destroyed
|
||||||
|
if not session.awaiting_ack and not session.hibernating and not session.destroyed then
|
||||||
|
session.log("debug", "Sending <r> (inside timer, before send) from %s - #queue=%d", reason, #queue);
|
||||||
(session.sends2s or session.send)(st.stanza("r", { xmlns = session.smacks }))
|
(session.sends2s or session.send)(st.stanza("r", { xmlns = session.smacks }))
|
||||||
session.log("debug", "Sending <r> (inside timer, after send)");
|
|
||||||
session.awaiting_ack = true;
|
session.awaiting_ack = true;
|
||||||
|
-- expected_h could be lower than this expression e.g. more stanzas added to the queue meanwhile)
|
||||||
|
session.last_requested_h = session.last_acknowledged_stanza + #queue;
|
||||||
|
session.log("debug", "Sending <r> (inside timer, after send) from %s - #queue=%d", reason, #queue);
|
||||||
if not session.delayed_ack_timer then
|
if not session.delayed_ack_timer then
|
||||||
session.delayed_ack_timer = stoppable_timer(delayed_ack_timeout, function()
|
session.delayed_ack_timer = stoppable_timer(delayed_ack_timeout, function()
|
||||||
delayed_ack_function(session);
|
delayed_ack_function(session);
|
||||||
|
@ -187,8 +197,6 @@ local function request_ack_if_needed(session, force, reason)
|
||||||
session.log("debug", "Calling delayed_ack_function directly (still waiting for ack)");
|
session.log("debug", "Calling delayed_ack_function directly (still waiting for ack)");
|
||||||
delayed_ack_function(session);
|
delayed_ack_function(session);
|
||||||
end
|
end
|
||||||
|
|
||||||
session.last_queue_count = #queue;
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local function outgoing_stanza_filter(stanza, session)
|
local function outgoing_stanza_filter(stanza, session)
|
||||||
|
@ -329,8 +337,9 @@ function handle_r(origin, stanza, xmlns_sm)
|
||||||
module:log("debug", "Received ack request, acking for %d", origin.handled_stanza_count);
|
module:log("debug", "Received ack request, acking for %d", origin.handled_stanza_count);
|
||||||
-- Reply with <a>
|
-- Reply with <a>
|
||||||
(origin.sends2s or origin.send)(st.stanza("a", { xmlns = xmlns_sm, h = string.format("%d", origin.handled_stanza_count) }));
|
(origin.sends2s or origin.send)(st.stanza("a", { xmlns = xmlns_sm, h = string.format("%d", origin.handled_stanza_count) }));
|
||||||
-- piggyback our own ack request
|
-- piggyback our own ack request if needed (see request_ack_if_needed() for explanation of last_requested_h)
|
||||||
if #origin.outgoing_stanza_queue > 0 and origin.last_queue_count ~= #origin.outgoing_stanza_queue then
|
local expected_h = origin.last_acknowledged_stanza + #origin.outgoing_stanza_queue;
|
||||||
|
if #origin.outgoing_stanza_queue > 0 and expected_h ~= origin.last_requested_h then
|
||||||
request_ack_if_needed(origin, true, "piggybacked by handle_r");
|
request_ack_if_needed(origin, true, "piggybacked by handle_r");
|
||||||
end
|
end
|
||||||
return true;
|
return true;
|
||||||
|
@ -549,12 +558,14 @@ function handle_resume(session, stanza, xmlns_sm)
|
||||||
|
|
||||||
-- Ok, we need to re-send any stanzas that the client didn't see
|
-- Ok, we need to re-send any stanzas that the client didn't see
|
||||||
-- ...they are what is now left in the outgoing stanza queue
|
-- ...they are what is now left in the outgoing stanza queue
|
||||||
|
-- We have to use the send of "session" because we don't want to add our resent stanzas
|
||||||
|
-- to the outgoing queue again
|
||||||
local queue = original_session.outgoing_stanza_queue;
|
local queue = original_session.outgoing_stanza_queue;
|
||||||
original_session.log("debug", "#queue = %d", #queue);
|
session.log("debug", "resending all unacked stanzas that are still queued after resume, #queue = %d", #queue);
|
||||||
for i=1,#queue do
|
for i=1,#queue do
|
||||||
original_session.send(queue[i]);
|
session.send(queue[i]);
|
||||||
end
|
end
|
||||||
original_session.log("debug", "#queue = %d -- after send", #queue);
|
session.log("debug", "all stanzas resent, now disabling send() in this session, #queue = %d", #queue);
|
||||||
function session.send(stanza)
|
function session.send(stanza)
|
||||||
session.log("warn", "Tried to send stanza on old session migrated by smacks resume (maybe there is a bug?): %s", tostring(stanza));
|
session.log("warn", "Tried to send stanza on old session migrated by smacks resume (maybe there is a bug?): %s", tostring(stanza));
|
||||||
return false;
|
return false;
|
||||||
|
@ -587,7 +598,6 @@ local function handle_read_timeout(event)
|
||||||
return false; -- Kick the session
|
return false; -- Kick the session
|
||||||
end
|
end
|
||||||
session.log("debug", "Sending <r> (read timeout)");
|
session.log("debug", "Sending <r> (read timeout)");
|
||||||
session.awaiting_ack = false;
|
|
||||||
(session.sends2s or session.send)(st.stanza("r", { xmlns = session.smacks }));
|
(session.sends2s or session.send)(st.stanza("r", { xmlns = session.smacks }));
|
||||||
session.awaiting_ack = true;
|
session.awaiting_ack = true;
|
||||||
if not session.delayed_ack_timer then
|
if not session.delayed_ack_timer then
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
"en": "Video conferencing web application",
|
"en": "Video conferencing web application",
|
||||||
"fr": "Application web de conférence vidéo"
|
"fr": "Application web de conférence vidéo"
|
||||||
},
|
},
|
||||||
"version": "1.0.3387~ynh2",
|
"version": "1.0.3729~ynh1",
|
||||||
"url": "https://jitsi.org/Projects/JitMeet",
|
"url": "https://jitsi.org/Projects/JitMeet",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"maintainer": {
|
"maintainer": {
|
||||||
|
|
Loading…
Reference in a new issue