Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package galene for openSUSE:Factory checked 
in at 2022-01-27 23:17:02
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/galene (Old)
 and      /work/SRC/openSUSE:Factory/.galene.new.1898 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "galene"

Thu Jan 27 23:17:02 2022 rev:14 rq:949529 version:0.4.3

Changes:
--------
--- /work/SRC/openSUSE:Factory/galene/galene.changes    2021-12-02 
22:31:08.922466148 +0100
+++ /work/SRC/openSUSE:Factory/.galene.new.1898/galene.changes  2022-01-27 
23:18:54.418173956 +0100
@@ -1,0 +2,11 @@
+Thu Jan 27 18:08:56 UTC 2022 - mich...@stroeder.com
+
+- Update to version 0.4.3
+  * Fix a locking issue that could cause a deadlock when massive numbers
+    of clients join at the same time.
+  * Add support for displaying raised hands.
+  * Update the MIME type for AV1 to track recent browsers.
+  * Avoid overflow during rate estimation.
+  * More fixes to the disk writer.
+
+-------------------------------------------------------------------

Old:
----
  galene-0.4.2.tar.gz

New:
----
  galene-0.4.3.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ galene.spec ++++++
--- /var/tmp/diff_new_pack.kZthvS/_old  2022-01-27 23:18:54.918170501 +0100
+++ /var/tmp/diff_new_pack.kZthvS/_new  2022-01-27 23:18:54.926170446 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package galene
 #
-# Copyright (c) 2021 SUSE LLC
+# Copyright (c) 2022 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -25,7 +25,7 @@
 %bcond_without  apparmor
 
 Name:           galene
-Version:        0.4.2
+Version:        0.4.3
 Release:        0
 Summary:        Gal??ne videoconferencing server
 License:        MIT

++++++ _service ++++++
--- /var/tmp/diff_new_pack.kZthvS/_old  2022-01-27 23:18:54.974170115 +0100
+++ /var/tmp/diff_new_pack.kZthvS/_new  2022-01-27 23:18:54.978170087 +0100
@@ -3,8 +3,8 @@
     <param name="url">git://github.com/jech/galene.git</param>
     <param name="scm">git</param>
     <param name="exclude">.git</param>
-    <param name="revision">galene-0.4.2</param>
-    <param name="version">0.4.2</param>
+    <param name="revision">galene-0.4.3</param>
+    <param name="version">0.4.3</param>
     <param name="changesgenerate">enable</param>
     <!--param name="versionrewrite-pattern">galene-(\d+)</param>
     <param name="versionrewrite-replacement">\1</param-->

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.kZthvS/_old  2022-01-27 23:18:55.002169921 +0100
+++ /var/tmp/diff_new_pack.kZthvS/_new  2022-01-27 23:18:55.010169866 +0100
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param name="url">git://github.com/jech/galene.git</param>
-              <param 
name="changesrevision">0e85552ea776d7d7e8498e599b5655ed9d7a244e</param></service></servicedata>
+              <param 
name="changesrevision">c1eb8a9cb5db7d94d8098d16e0b9cb92108c3da7</param></service></servicedata>
 (No newline at EOF)
 

++++++ galene-0.4.2.tar.gz -> galene-0.4.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/galene-0.4.2/CHANGES new/galene-0.4.3/CHANGES
--- old/galene-0.4.2/CHANGES    2021-12-02 00:09:28.000000000 +0100
+++ new/galene-0.4.3/CHANGES    2022-01-27 14:22:43.000000000 +0100
@@ -1,3 +1,12 @@
+27 January 2021: Gal??ne 0.4.3
+
+  * Fix a locking issue that could cause a deadlock when massive numbers
+    of clients join at the same time.
+  * Add support for displaying raised hands (thanks to Sascha Silbe).
+  * Update the MIME type for AV1 to track recent browsers.
+  * Avoid overflow during rate estimation.
+  * More fixes to the disk writer.
+
 1 December 2021: Gal??ne 0.4.2
 
   * Update the samplebuilder to avoid a crash when a single frame is so
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/galene-0.4.2/README.FRONTEND 
new/galene-0.4.3/README.FRONTEND
--- old/galene-0.4.2/README.FRONTEND    2021-12-02 00:09:28.000000000 +0100
+++ new/galene-0.4.3/README.FRONTEND    2022-01-27 14:22:43.000000000 +0100
@@ -54,23 +54,44 @@
 `ondownstream` is called when the server pushes a stream to the client;
 see the section below about streams.
 
-You may now connect to the server.
+You may now connect to the server:
 
 ```javascript
 serverConnection.connect(`wss://${location.host}/ws`);
 ```
 
-You typically join a group and request media in the `onconnected` callback:
+You typically join a group in the `onconnected` callback:
 
 ```javascript
 serverConnection.onconnected = function() {
     this.join(group, 'join', username, password); 
-    this.request({'':['audio','video']});
 }
 ```
 
-You should not attempt to push a stream to the server until it has granted
-you the `present` permission through the `onjoined` callback.
+After the server has replied to the join request, the `onjoined` callback
+will trigger.  There, you update your user interface and request incoming
+streams:
+
+```javascript
+serverConnection.onjoined = function(kind, group, perms, status, message) {
+    switch(kind) {
+    case 'join':
+        this.request({'':['audio','video']});
+        // then update the UI, possibly taking perms.present into account
+        break;
+    case 'change':
+        // update the UI
+        break;
+    case 'redirect':
+        this.close();
+        document.location.href = message;
+        break;
+    case 'fail':
+        // display the friendly error message
+        break;
+}
+```
+
 
 ## Sending and receiving chat messages
 
@@ -85,6 +106,7 @@
 request that you clear your chat window, in that case the `onclearchat`
 callback will trigger.
 
+
 ## Other messages
 
 The `usermessage` method of the `ServerConnection` is similar to the
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/galene-0.4.2/codecs/codecs.go 
new/galene-0.4.3/codecs/codecs.go
--- old/galene-0.4.2/codecs/codecs.go   2021-12-02 00:09:28.000000000 +0100
+++ new/galene-0.4.3/codecs/codecs.go   2022-01-27 14:22:43.000000000 +0100
@@ -46,7 +46,7 @@
                        return (vp9.Payload[0] & 0xC) == 0, true
                }
                return (vp9.Payload[0] & 0x6) == 0, true
-       } else if strings.EqualFold(codec, "video/av1x") {
+       } else if strings.EqualFold(codec, "video/av1") {
                if len(packet.Payload) < 2 {
                        return false, true
                }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/galene-0.4.2/diskwriter/diskwriter.go 
new/galene-0.4.3/diskwriter/diskwriter.go
--- old/galene-0.4.2/diskwriter/diskwriter.go   2021-12-02 00:09:28.000000000 
+0100
+++ new/galene-0.4.3/diskwriter/diskwriter.go   2022-01-27 14:22:43.000000000 
+0100
@@ -184,8 +184,8 @@
 // called locked
 func (conn *diskConn) reopen(extension string) error {
        for _, t := range conn.tracks {
+               t.writeBuffered(true)
                if t.writer != nil {
-                       t.writeBuffered(true)
                        t.writer.Close()
                        t.writer = nil
                }
@@ -207,8 +207,8 @@
        conn.mu.Lock()
        tracks := make([]*diskTrack, 0, len(conn.tracks))
        for _, t := range conn.tracks {
+               t.writeBuffered(true)
                if t.writer != nil {
-                       t.writeBuffered(true)
                        t.writer.Close()
                        t.writer = nil
                }
@@ -414,7 +414,7 @@
                        count := p.SequenceNumber - lastSeqno
                        if count < 256 {
                                for i := uint16(1); i < count; i++ {
-                                       recover(t, lastSeqno + i)
+                                       fetch(t, lastSeqno+i)
                                }
                        } else {
                                requestKeyframe(t)
@@ -439,10 +439,10 @@
        return len(buf), nil
 }
 
-func recover(t *diskTrack, seqno uint16) {
+func fetch(t *diskTrack, seqno uint16) {
        // since the samplebuilder retains packets, use a fresh buffer
        buf := make([]byte, 1504)
-       n := t.remote.GetPacket(seqno, buf, true)
+       n := t.remote.GetPacket(seqno, buf, false)
        if n == 0 {
                return
        }
@@ -462,7 +462,7 @@
        }
 }
 
-// writeRTP writes the packet without doing any loss recovery.
+// writeRTP writes the packet without fetching lost packets
 // Called locked.
 func (t *diskTrack) writeRTP(p *rtp.Packet) error {
        codec := t.remote.Codec().MimeType
@@ -470,6 +470,9 @@
                kf, _ := gcodecs.Keyframe(codec, p)
                if kf {
                        t.savedKf = p
+                       t.lastKf = time.Now()
+               } else if time.Since(t.lastKf) > 4*time.Second {
+                       requestKeyframe(t)
                }
        }
 
@@ -518,7 +521,6 @@
                                }
                        }
                } else {
-                       keyframe = true
                        if t.writer == nil {
                                if !t.conn.hasVideo {
                                        err := t.conn.initWriter(0, 0)
@@ -533,14 +535,6 @@
                        }
                }
 
-               now := time.Now()
-               if keyframe {
-                       t.lastKf = now
-               } else if t.writer == nil || now.Sub(t.lastKf) > 4*time.Second {
-                       requestKeyframe(t)
-                       return nil
-               }
-
                if t.writer == nil {
                        continue
                }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/galene-0.4.2/go.mod new/galene-0.4.3/go.mod
--- old/galene-0.4.2/go.mod     2021-12-02 00:09:28.000000000 +0100
+++ new/galene-0.4.3/go.mod     2022-01-27 14:22:43.000000000 +0100
@@ -6,14 +6,15 @@
        github.com/at-wat/ebml-go v0.16.0
        github.com/gorilla/websocket v1.4.2
        github.com/jech/cert v0.0.0-20210819231831-aca735647728
-       github.com/jech/samplebuilder v0.0.0-20211128135502-32cf2bc0a2b6
-       github.com/pion/ice/v2 v2.1.14
+       github.com/jech/samplebuilder v0.0.0-20220125212352-4553ed6f9a6c
+       github.com/pion/ice/v2 v2.1.19
+       github.com/pion/interceptor v0.1.7 // indirect
        github.com/pion/rtcp v1.2.9
        github.com/pion/rtp v1.7.4
        github.com/pion/sdp/v3 v3.0.4
-       github.com/pion/turn/v2 v2.0.5
-       github.com/pion/webrtc/v3 v3.1.11
-       golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871
-       golang.org/x/net v0.0.0-20211123203042-d83791d6bcd9 // indirect
-       golang.org/x/sys v0.0.0-20211124211545-fe61309f8881
+       github.com/pion/turn/v2 v2.0.6
+       github.com/pion/webrtc/v3 v3.1.17
+       golang.org/x/crypto v0.0.0-20220112180741-5e0467b6c7ce
+       golang.org/x/net v0.0.0-20220121210141-e204ce36a2ba // indirect
+       golang.org/x/sys v0.0.0-20220114195835-da31bd327af9
 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/galene-0.4.2/go.sum new/galene-0.4.3/go.sum
--- old/galene-0.4.2/go.sum     2021-12-02 00:09:28.000000000 +0100
+++ new/galene-0.4.3/go.sum     2022-01-27 14:22:43.000000000 +0100
@@ -14,10 +14,12 @@
 github.com/golang/protobuf v1.4.0/go.mod 
h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
 github.com/golang/protobuf v1.4.2/go.mod 
h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
 github.com/golang/protobuf v1.4.3/go.mod 
h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.5.0/go.mod 
h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
+github.com/golang/protobuf v1.5.2/go.mod 
h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
 github.com/google/go-cmp v0.3.0/go.mod 
h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
 github.com/google/go-cmp v0.3.1/go.mod 
h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
 github.com/google/go-cmp v0.4.0/go.mod 
h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/uuid v1.2.0/go.mod 
h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/go-cmp v0.5.5/go.mod 
h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
 github.com/google/uuid v1.3.0/go.mod 
h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/gorilla/websocket v1.4.2 
h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
@@ -25,8 +27,8 @@
 github.com/hpcloud/tail v1.0.0/go.mod 
h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
 github.com/jech/cert v0.0.0-20210819231831-aca735647728 
h1:tN+W1ll2oKuJGMCaO1CRK4rr+xSRjVSfWmnKlACdx38=
 github.com/jech/cert v0.0.0-20210819231831-aca735647728/go.mod 
h1:FXUA/zpiQfV4uBVN2kAwkf3X7pU7l1l2ovS45CsSYZs=
-github.com/jech/samplebuilder v0.0.0-20211128135502-32cf2bc0a2b6 
h1:H9gIl/rX1Lb44RxR/9tljyQWC/cvlWGBSSuSb5iOnII=
-github.com/jech/samplebuilder v0.0.0-20211128135502-32cf2bc0a2b6/go.mod 
h1:v8Ft/hAXNMLvYSyhWFcKgKgfqPV4EwOhVwk4oLstjpE=
+github.com/jech/samplebuilder v0.0.0-20220125212352-4553ed6f9a6c 
h1:szaz3cPxulEofkxi5SDehgVF32ceQAi6E2VsRrm348U=
+github.com/jech/samplebuilder v0.0.0-20220125212352-4553ed6f9a6c/go.mod 
h1:U83y/Kl/5BrI9ceNw17+lmguIrlUlMVntxKmZmei5EA=
 github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
 github.com/kr/pretty v0.1.0/go.mod 
h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
 github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
@@ -37,21 +39,27 @@
 github.com/onsi/ginkgo v1.6.0/go.mod 
h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 github.com/onsi/ginkgo v1.12.1/go.mod 
h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
 github.com/onsi/ginkgo v1.16.1/go.mod 
h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E=
+github.com/onsi/ginkgo v1.16.4/go.mod 
h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
+github.com/onsi/ginkgo v1.16.5/go.mod 
h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
 github.com/onsi/gomega v1.7.1/go.mod 
h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
 github.com/onsi/gomega v1.10.1/go.mod 
h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
 github.com/onsi/gomega v1.11.0/go.mod 
h1:azGKhqFUon9Vuj0YmTfLSmx0FUwqXYSTl5re8lQLTUg=
+github.com/onsi/gomega v1.17.0/go.mod 
h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
 github.com/pion/datachannel v1.4.21/go.mod 
h1:oiNyP4gHx2DIwRzX/MFyH0Rz/Gz05OgBlayAI2hAWjg=
 github.com/pion/datachannel v1.5.2 
h1:piB93s8LGmbECrpO84DnkIVWasRMk3IimbcXkTQLE6E=
 github.com/pion/datachannel v1.5.2/go.mod 
h1:FTGQWaHrdCwIJ1rw6xBIfZVkslikjShim5yr05XFuCQ=
 github.com/pion/dtls/v2 v2.0.9/go.mod 
h1:O0Wr7si/Zj5/EBFlDzDd6UtVxx25CE1r7XM7BQKYQho=
-github.com/pion/dtls/v2 v2.0.10 h1:wgys7gPR1NMbWjmjJ3CW7lkUGaun8djgH8nahpNLnxI=
-github.com/pion/dtls/v2 v2.0.10/go.mod 
h1:00OxfeCRWHShcqT9jx8pKKmBWuTt0NCZoVPCaC4VKvU=
-github.com/pion/ice/v2 v2.1.10/go.mod 
h1:kV4EODVD5ux2z8XncbLHIOtcXKtYXVgLVCeVqnpoeP0=
-github.com/pion/ice/v2 v2.1.14 h1:nD9GZs3MiR1/dPa5EiMRMe8hLBG3/qqCdx/hTS2g8VE=
-github.com/pion/ice/v2 v2.1.14/go.mod 
h1:ovgYHUmwYLlRvcCLI67PnQ5YGe+upXZbGgllBDG/ktU=
-github.com/pion/interceptor v0.0.15/go.mod 
h1:pg3J253eGi5bqyKzA74+ej5Y19ez2jkWANVnF+Z9Dfk=
-github.com/pion/interceptor v0.1.2 
h1:1IfrJ+AQ0HhwxNl4hqh9hMvl1hBKiNhAAr7DrUHsC6s=
-github.com/pion/interceptor v0.1.2/go.mod 
h1:Lh3JSl/cbJ2wP8I3ccrjh1K/deRGRn3UlSPuOTiHb6U=
+github.com/pion/dtls/v2 v2.0.13/go.mod 
h1:OaE7eTM+ppaUhJ99OTO4aHl9uY6vPrT1gPY27uNTxRY=
+github.com/pion/dtls/v2 v2.1.0 h1:g6gtKVNLp6URDkv9OijFJl16kqGHzVzZG+Fa4A38GTY=
+github.com/pion/dtls/v2 v2.1.0/go.mod 
h1:qG3gA7ZPZemBqpEFqRKyURYdKEwFZQCGb7gv9T3ON3Y=
+github.com/pion/ice/v2 v2.1.12/go.mod 
h1:ovgYHUmwYLlRvcCLI67PnQ5YGe+upXZbGgllBDG/ktU=
+github.com/pion/ice/v2 v2.1.18/go.mod 
h1:9jDr0iIUg8P6+0Jq8QJ/eFSkX3JnsPd293TjCdkfpTs=
+github.com/pion/ice/v2 v2.1.19 h1:z7iVx/fHlqvPILUbvcj1xjuz/6eVKgEFOM8h1AuLbF8=
+github.com/pion/ice/v2 v2.1.19/go.mod 
h1:E5frMpIJ3zzcQiRo+XyT7z1IiAsGc1hDURcVJQUzGWA=
+github.com/pion/interceptor v0.1.0/go.mod 
h1:j5NIl3tJJPB3u8+Z2Xz8MZs/VV6rc+If9mXEKNuFmEM=
+github.com/pion/interceptor v0.1.6/go.mod 
h1:Lh3JSl/cbJ2wP8I3ccrjh1K/deRGRn3UlSPuOTiHb6U=
+github.com/pion/interceptor v0.1.7 
h1:HThW0tIIKT9RRoDWGURe8rlZVOx0fJHxBHpA0ej0+bo=
+github.com/pion/interceptor v0.1.7/go.mod 
h1:Lh3JSl/cbJ2wP8I3ccrjh1K/deRGRn3UlSPuOTiHb6U=
 github.com/pion/logging v0.2.2 h1:M9+AIj/+pxNsDfAT64+MAVgJO0rsyLnoJKCqf//DoeY=
 github.com/pion/logging v0.2.2/go.mod 
h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms=
 github.com/pion/mdns v0.0.5 h1:Q2oj/JB3NqfzY9xGZ1fPzZzK7sDSD8rZPOvcIQ10BCw=
@@ -59,17 +67,18 @@
 github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA=
 github.com/pion/randutil v0.1.0/go.mod 
h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8=
 github.com/pion/rtcp v1.2.6/go.mod 
h1:52rMNPWFsjr39z9B9MhnkqhPLoeHTv1aN63o/42bWE0=
+github.com/pion/rtcp v1.2.8/go.mod 
h1:qVPhiCzAm4D/rxb6XzKeyZiQK69yJpbUDJSF7TgrqNo=
 github.com/pion/rtcp v1.2.9 h1:1ujStwg++IOLIEoOiIQ2s+qBuJ1VN81KW+9pMPsif+U=
 github.com/pion/rtcp v1.2.9/go.mod 
h1:qVPhiCzAm4D/rxb6XzKeyZiQK69yJpbUDJSF7TgrqNo=
 github.com/pion/rtp v1.7.0/go.mod 
h1:bDb5n+BFZxXx0Ea7E5qe+klMuqiBrP+w8XSjiWtCUko=
-github.com/pion/rtp v1.7.1/go.mod 
h1:bDb5n+BFZxXx0Ea7E5qe+klMuqiBrP+w8XSjiWtCUko=
 github.com/pion/rtp v1.7.2/go.mod 
h1:bDb5n+BFZxXx0Ea7E5qe+klMuqiBrP+w8XSjiWtCUko=
 github.com/pion/rtp v1.7.4 h1:4dMbjb1SuynU5OpA3kz1zHK+u+eOCQjW3MAeVHf1ODA=
 github.com/pion/rtp v1.7.4/go.mod 
h1:bDb5n+BFZxXx0Ea7E5qe+klMuqiBrP+w8XSjiWtCUko=
 github.com/pion/sctp v1.7.10/go.mod 
h1:EhpTUQu1/lcK3xI+eriS6/96fWetHGCvBi9MSsnaBN0=
 github.com/pion/sctp v1.7.12/go.mod 
h1:xFe9cLMZ5Vj6eOzpyiKjT9SwGM4KpK/8Jbw5//jc+0s=
-github.com/pion/sctp v1.8.0 h1:6erMF2qmQwXr+0iB1lm0AUSmDr9LdmpaBzgSVAEgehw=
 github.com/pion/sctp v1.8.0/go.mod 
h1:xFe9cLMZ5Vj6eOzpyiKjT9SwGM4KpK/8Jbw5//jc+0s=
+github.com/pion/sctp v1.8.2 h1:yBBCIrUMJ4yFICL3RIvR4eh/H2BTTvlligmSTy+3kiA=
+github.com/pion/sctp v1.8.2/go.mod 
h1:xFe9cLMZ5Vj6eOzpyiKjT9SwGM4KpK/8Jbw5//jc+0s=
 github.com/pion/sdp/v3 v3.0.4 h1:2Kf+dgrzJflNCSw3TV5v2VLeI0s/qkzy2r5jlR0wzf8=
 github.com/pion/sdp/v3 v3.0.4/go.mod 
h1:bNiSknmJE0HYBprTHXKPQ3+JjacTv5uap92ueJZKsRk=
 github.com/pion/srtp/v2 v2.0.5 h1:ks3wcTvIUE/GHndO3FAvROQ9opy0uLELpwHJaQ1yqhQ=
@@ -78,15 +87,17 @@
 github.com/pion/stun v0.3.5/go.mod 
h1:gDMim+47EeEtfWogA37n6qXZS88L5V6LqFcf+DZA2UA=
 github.com/pion/transport v0.10.1/go.mod 
h1:PBis1stIILMiis0PewDw91WJeLJkyIMcEk+DwKOzf4A=
 github.com/pion/transport v0.12.2/go.mod 
h1:N3+vZQD9HlDP5GWkZ85LohxNsDcNgofQmyL6ojX5d8Q=
-github.com/pion/transport v0.12.3 
h1:vdBfvfU/0Wq8kd2yhUMSDB/x+O4Z9MYVl2fJ5BT4JZw=
 github.com/pion/transport v0.12.3/go.mod 
h1:OViWW9SP2peE/HbwBvARicmAVnesphkNkCVZIWJ6q9A=
-github.com/pion/turn/v2 v2.0.5 h1:iwMHqDfPEDEOFzwWKT56eFmh6DYC6o/+xnLAEzgISbA=
+github.com/pion/transport v0.13.0 
h1:KWTA5ZrQogizzYwPEciGtHPLwpAjE91FgXnyu+Hv2uY=
+github.com/pion/transport v0.13.0/go.mod 
h1:yxm9uXpK9bpBBWkITk13cLo1y5/ur5VQpG22ny6EP7g=
 github.com/pion/turn/v2 v2.0.5/go.mod 
h1:APg43CFyt/14Uy7heYUOGWdkem/Wu4PhCO/bjyrTqMw=
+github.com/pion/turn/v2 v2.0.6 h1:AsXjSPR6Im15DMTB39NlfdTY9BQfieANPBjdg/aVNwY=
+github.com/pion/turn/v2 v2.0.6/go.mod 
h1:+y7xl719J8bAEVpSXBXvTxStjJv3hbz9YFflvkpcGPw=
 github.com/pion/udp v0.1.1 h1:8UAPvyqmsxK8oOjloDk4wUt63TzFe9WEJkg5lChlj7o=
 github.com/pion/udp v0.1.1/go.mod 
h1:6AFo+CMdKQm7UiA0eUPA8/eVCTx8jBIITLZHc9DWX5M=
-github.com/pion/webrtc/v3 v3.1.0-beta.3/go.mod 
h1:I4O6v2pkiXdVmcn7sUhCNwHUAepGU19PVEyR204s1qc=
-github.com/pion/webrtc/v3 v3.1.11 
h1:8Q5BEsxvlDn3botM8U8n/Haln745FBa5TWgm8v2c2FA=
-github.com/pion/webrtc/v3 v3.1.11/go.mod 
h1:h9pbP+CADYb/99s5rfjflEcBLgdVKm55Rm7heQ/gIvY=
+github.com/pion/webrtc/v3 v3.1.0/go.mod 
h1:t51XSam1k56eYLuO1Ubxjs3pDBfGYxkGBFhYf55Mn/s=
+github.com/pion/webrtc/v3 v3.1.17 
h1:6V4Yf5wnvJZKs86401EcpsKmB5Px5pfF1ICXdPIRsC0=
+github.com/pion/webrtc/v3 v3.1.17/go.mod 
h1:kHunUx6HPCbCvGy/HdWQNwtT9LJ2XMS/sBmLwB1A4rs=
 github.com/pkg/errors v0.9.1/go.mod 
h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pmezard/go-difflib v1.0.0 
h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod 
h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
@@ -101,9 +112,10 @@
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod 
h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod 
h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod 
h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
-golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod 
h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871 
h1:/pEO3GD/ABYAjuakUS6xSEmmlyVS4kxBNkeA9tLJiTI=
 golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871/go.mod 
h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
+golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod 
h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
+golang.org/x/crypto v0.0.0-20220112180741-5e0467b6c7ce 
h1:Roh6XWxHFKrPgC/EQhVubSAGQ6Ozk6IdxHSzt1mR0EI=
+golang.org/x/crypto v0.0.0-20220112180741-5e0467b6c7ce/go.mod 
h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod 
h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
@@ -116,13 +128,14 @@
 golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod 
h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
 golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod 
h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
 golang.org/x/net v0.0.0-20210331212208-0fccb6fa2b5c/go.mod 
h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
-golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod 
h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod 
h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
 golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod 
h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20211005001312-d4b1ae081e3b/go.mod 
h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20211020060615-d418f374d309/go.mod 
h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod 
h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod 
h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20211123203042-d83791d6bcd9 
h1:0qxwC5n+ttVOINCBeRHO0nq9X7uy8SDsPoi5OaCdIEI=
-golang.org/x/net v0.0.0-20211123203042-d83791d6bcd9/go.mod 
h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/net v0.0.0-20211201190559-0a0e4e1bb54c/go.mod 
h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod 
h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/net v0.0.0-20220121210141-e204ce36a2ba 
h1:6u6sik+bn/y7vILcYkK3iwTBWN7WtBvB0+SZswQnbf8=
+golang.org/x/net v0.0.0-20220121210141-e204ce36a2ba/go.mod 
h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -139,13 +152,15 @@
 golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20211124211545-fe61309f8881 
h1:TyHqChC80pFkXWraUUf6RuB5IqFdQieMLwwCJokV2pc=
-golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220114195835-da31bd327af9 
h1:XfKQ4OlFl8okEOr5UvAqFRVj8pY/4yfcXrddB8qAbU0=
+golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod 
h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod 
h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod 
h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod 
h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod 
h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
@@ -160,6 +175,8 @@
 google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod 
h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
 google.golang.org/protobuf v1.21.0/go.mod 
h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
 google.golang.org/protobuf v1.23.0/go.mod 
h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.26.0-rc.1/go.mod 
h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
+google.golang.org/protobuf v1.26.0/go.mod 
h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod 
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 
h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod 
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/galene-0.4.2/group/group.go 
new/galene-0.4.3/group/group.go
--- old/galene-0.4.2/group/group.go     2021-12-02 00:09:28.000000000 +0100
+++ new/galene-0.4.3/group/group.go     2022-01-27 14:22:43.000000000 +0100
@@ -64,6 +64,7 @@
 const (
        LowBitrate = 100 * 1024
        MinBitrate = LowBitrate * 2
+       MaxBitrate = 1024 * 1024 * 1024
 )
 
 type Group struct {
@@ -168,7 +169,7 @@
                default:
                        return 0, errors.New("unknown VP9 profile")
                }
-       case "video/av1x":
+       case "video/av1":
                return 35, nil
        case "video/h264":
                profile := fmtpValue(codec.SDPFmtpLine, "profile-level-id")
@@ -231,7 +232,7 @@
        case "av1":
                codecs = []webrtc.RTPCodecCapability{
                        {
-                               "video/AV1X", 90000, 0,
+                               "video/AV1", 90000, 0,
                                "",
                                fb,
                        },
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/galene-0.4.2/rtpconn/rtpconn.go 
new/galene-0.4.3/rtpconn/rtpconn.go
--- old/galene-0.4.2/rtpconn/rtpconn.go 2021-12-02 00:09:28.000000000 +0100
+++ new/galene-0.4.3/rtpconn/rtpconn.go 2022-01-27 14:22:43.000000000 +0100
@@ -881,6 +881,15 @@
        }
 }
 
+// saturating addition
+func sadd(x, y uint64) uint64 {
+       s, c := bits.Add64(x, y, 0)
+       if c != 0 {
+               return ^uint64(0)
+       }
+       return s
+}
+
 func maxUpBitrate(t *rtpUpTrack) uint64 {
        minrate := ^uint64(0)
        maxrate := uint64(group.MinBitrate)
@@ -908,15 +917,13 @@
        // assume that lower spatial layers take up 1/5 of
        // the throughput
        if maxsid > 0 {
-               maxrate = maxrate * 5 / 4
+               maxrate = sadd(maxrate, maxrate / 4)
        }
        // assume that each layer takes two times less
        // throughput than the higher one.  Then we've
        // got enough slack for a factor of 2^(layers-1).
        for i := 0; i < maxtid; i++ {
-               if minrate < ^uint64(0)/2 {
-                       minrate *= 2
-               }
+               minrate = sadd(minrate, minrate)
        }
        if minrate < maxrate {
                return minrate
@@ -990,15 +997,18 @@
                }
                ssrcs = append(ssrcs, uint32(t.track.SSRC()))
                if t.Kind() == webrtc.RTPCodecTypeAudio {
-                       rate += 100 * 1024
+                       rate = sadd(rate, 100 * 1024)
                } else if t.Label() == "l" {
-                       rate += group.LowBitrate
+                       rate = sadd(rate, group.LowBitrate)
                } else {
-                       rate += maxUpBitrate(t)
+                       rate = sadd(rate, maxUpBitrate(t))
                }
        }
 
-       if rate < ^uint64(0) && len(ssrcs) > 0 {
+       if rate > group.MaxBitrate {
+               rate = group.MaxBitrate
+       }
+       if len(ssrcs) > 0 {
                packets = append(packets,
                        &rtcp.ReceiverEstimatedMaximumBitrate{
                                Bitrate: float32(rate),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/galene-0.4.2/rtpconn/rtpconn_test.go 
new/galene-0.4.3/rtpconn/rtpconn_test.go
--- old/galene-0.4.2/rtpconn/rtpconn_test.go    2021-12-02 00:09:28.000000000 
+0100
+++ new/galene-0.4.3/rtpconn/rtpconn_test.go    2022-01-27 14:22:43.000000000 
+0100
@@ -37,3 +37,20 @@
                t.Errorf("Expected %v, got %v", info, info2)
        }
 }
+
+func TestSadd(t *testing.T) {
+       ts := []struct{ x, y, z uint64 }{
+               {0, 0, 0},
+               {1, 2, 3},
+               {^uint64(0) - 10, 5, ^uint64(0) - 5},
+               {^uint64(0) - 10, 15, ^uint64(0)},
+       }
+       for _, tt := range ts {
+               z := sadd(tt.x, tt.y)
+               if z != tt.z {
+                       t.Errorf("%v + %v: expected %v, got %v",
+                               tt.x, tt.y, tt.z, z,
+                       )
+               }
+       }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/galene-0.4.2/rtpconn/webclient.go 
new/galene-0.4.3/rtpconn/webclient.go
--- old/galene-0.4.2/rtpconn/webclient.go       2021-12-02 00:09:28.000000000 
+0100
+++ new/galene-0.4.3/rtpconn/webclient.go       2022-01-27 14:22:43.000000000 
+0100
@@ -64,10 +64,14 @@
        writerDone  chan struct{}
        actionCh    chan struct{}
 
-       mu      sync.Mutex
-       down    map[string]*rtpDownConnection
-       up      map[string]*rtpUpConnection
-       actions []interface{}
+       mu   sync.Mutex
+       down map[string]*rtpDownConnection
+       up   map[string]*rtpUpConnection
+
+       // action may be called with the group mutex taken, and therefore
+       // actions needs to use its own mutex.
+       actionMu sync.Mutex
+       actions  []interface{}
 }
 
 func (c *webClient) Group() *group.Group {
@@ -948,10 +952,10 @@
                                return m
                        }
                case <-c.actionCh:
-                       c.mu.Lock()
+                       c.actionMu.Lock()
                        actions := c.actions
                        c.actions = nil
-                       c.mu.Unlock()
+                       c.actionMu.Unlock()
                        for _, a := range actions {
                                err := handleAction(c, a)
                                if err != nil {
@@ -1759,10 +1763,10 @@
 var ErrClientDead = errors.New("client is dead")
 
 func (c *webClient) action(a interface{}) error {
-       c.mu.Lock()
+       c.actionMu.Lock()
        empty := len(c.actions) == 0
        c.actions = append(c.actions, a)
-       c.mu.Unlock()
+       c.actionMu.Unlock()
 
        if empty {
                select {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/galene-0.4.2/static/galene.css 
new/galene-0.4.3/static/galene.css
--- old/galene-0.4.2/static/galene.css  2021-12-02 00:09:28.000000000 +0100
+++ new/galene-0.4.3/static/galene.css  2022-01-27 14:22:43.000000000 +0100
@@ -1204,6 +1204,10 @@
     font-weight: 900;
 }
 
+#users > div.user-status-raisehand::before {
+    content: "\f256";
+}
+
 .close-icon {
     font: normal 1em/1 Arial, sans-serif;
     display: inline-block;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/galene-0.4.2/static/galene.js 
new/galene-0.4.3/static/galene.js
--- old/galene-0.4.2/static/galene.js   2021-12-02 00:09:28.000000000 +0100
+++ new/galene-0.4.3/static/galene.js   2022-01-27 14:22:43.000000000 +0100
@@ -917,9 +917,9 @@
     this.fixedFramerate = false;
     /** @type {Object} */
     this.userdata = {}
-
-    /** @ts-ignore */
+    /** @type {MediaStream} */
     this.captureStream = this.canvas.captureStream(0);
+
     /** @ts-ignore */
     if(!this.captureStream.getTracks()[0].requestFrame) {
         console.warn('captureFrame not supported, using fixed framerate');
@@ -1141,7 +1141,6 @@
                     t.enabled = false;
             } else if(t.kind == 'video') {
                 if(settings.blackboardMode) {
-                    /** @ts-ignore */
                     t.contentHint = 'detail';
                 }
             }
@@ -1344,7 +1343,6 @@
     try {
         if(!('getDisplayMedia' in navigator.mediaDevices))
             throw new Error('Your browser does not support screen sharing');
-        /** @ts-ignore */
         stream = await navigator.mediaDevices.getDisplayMedia({video: true});
     } catch(e) {
         console.error(e);
@@ -1615,8 +1613,7 @@
 
         media.classList.add('media');
         media.autoplay = true;
-        /** @ts-ignore */
-        media.playsinline = true;
+        media.playsInline = true;
         media.id = 'media-' + c.localId;
         div.appendChild(media);
         addCustomControls(media, div, c, !!video);
@@ -1799,13 +1796,10 @@
 
     let pip = getVideoButton(container, 'pip');
     if(pip) {
-        /** @ts-ignore */
         if(HTMLVideoElement.prototype.requestPictureInPicture) {
             pip.onclick = function(e) {
                 e.preventDefault();
-                /** @ts-ignore */
                 if(media.requestPictureInPicture) {
-                    /** @ts-ignore */
                     media.requestPictureInPicture();
                 } else {
                     displayWarning('Picture in Picture not supported.');
@@ -1997,15 +1991,19 @@
 
 /**
  * @param {string} id
- * @param {string} name
+ * @param {user} userinfo
  */
-function changeUser(id, name) {
+function changeUser(id, userinfo) {
     let user = document.getElementById('user-' + id);
     if(!user) {
         console.warn('Unknown user ' + id);
         return;
     }
-    user.textContent = name ? name : '(anon)';
+    user.textContent = userinfo.username ? userinfo.username : '(anon)';
+    if (userinfo.status.raisehand)
+        user.classList.add('user-status-raisehand');
+    else
+        user.classList.remove('user-status-raisehand');
 }
 
 /**
@@ -2034,7 +2032,7 @@
             scheduleReconsiderParameters();
         break;
     case 'change':
-        changeUser(id, serverConnection.users[id].username);
+        changeUser(id, serverConnection.users[id]);
         break;
     default:
         console.warn('Unknown user kind', kind);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/galene-0.4.2/static/protocol.js 
new/galene-0.4.3/static/protocol.js
--- old/galene-0.4.2/static/protocol.js 2021-12-02 00:09:28.000000000 +0100
+++ new/galene-0.4.3/static/protocol.js 2022-01-27 14:22:43.000000000 +0100
@@ -1215,7 +1215,6 @@
 
     if('restartIce' in c.pc) {
         try {
-            /** @ts-ignore */
             c.pc.restartIce();
             return;
         } catch(e) {

++++++ vendor.tar.gz ++++++
++++ 5815 lines of diff (skipped)

Reply via email to