1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/jitsi_ynh.git synced 2024-09-03 19:35:57 +02:00

Merge pull request #18 from YunoHost-Apps/1.0.3729

Upgrade to 1.0.3729
This commit is contained in:
yalh76 2020-01-19 23:09:23 +01:00 committed by GitHub
commit 75bf43d609
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 76 additions and 85 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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;

View file

@ -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

View file

@ -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": {