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-02-02 22:40:48 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/galene (Old) and /work/SRC/openSUSE:Factory/.galene.new.1898 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "galene" Wed Feb 2 22:40:48 2022 rev:15 rq:950560 version:0.4.4 Changes: -------- --- /work/SRC/openSUSE:Factory/galene/galene.changes 2022-01-27 23:18:54.418173956 +0100 +++ /work/SRC/openSUSE:Factory/.galene.new.1898/galene.changes 2022-02-02 22:41:55.223325791 +0100 @@ -1,0 +2,9 @@ +Tue Feb 01 21:10:01 UTC 2022 - mich...@stroeder.com + +- Update to version 0.4.4: + * Update dependencies. Pion WebRTC v3.1.19 fixes a bug that could cause + audio tracks to be discarded under some circumstances. + * Fix a bug that could cause user statuses (raisehand) to be discarded. + * Fix incorrect maxRate value in statistics display. + +------------------------------------------------------------------- Old: ---- galene-0.4.3.tar.gz New: ---- galene-0.4.4.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ galene.spec ++++++ --- /var/tmp/diff_new_pack.I9ZgAb/_old 2022-02-02 22:41:57.115312967 +0100 +++ /var/tmp/diff_new_pack.I9ZgAb/_new 2022-02-02 22:41:57.119312940 +0100 @@ -25,7 +25,7 @@ %bcond_without apparmor Name: galene -Version: 0.4.3 +Version: 0.4.4 Release: 0 Summary: Gal??ne videoconferencing server License: MIT ++++++ _service ++++++ --- /var/tmp/diff_new_pack.I9ZgAb/_old 2022-02-02 22:41:57.159312669 +0100 +++ /var/tmp/diff_new_pack.I9ZgAb/_new 2022-02-02 22:41:57.163312642 +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.3</param> - <param name="version">0.4.3</param> + <param name="revision">galene-0.4.4</param> + <param name="version">0.4.4</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.I9ZgAb/_old 2022-02-02 22:41:57.187312479 +0100 +++ /var/tmp/diff_new_pack.I9ZgAb/_new 2022-02-02 22:41:57.187312479 +0100 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">git://github.com/jech/galene.git</param> - <param name="changesrevision">c1eb8a9cb5db7d94d8098d16e0b9cb92108c3da7</param></service></servicedata> + <param name="changesrevision">6634b7c1e8862d07e42a87973eb9e6099bdbdeef</param></service></servicedata> (No newline at EOF) ++++++ galene-0.4.3.tar.gz -> galene-0.4.4.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/galene-0.4.3/CHANGES new/galene-0.4.4/CHANGES --- old/galene-0.4.3/CHANGES 2022-01-27 14:22:43.000000000 +0100 +++ new/galene-0.4.4/CHANGES 2022-02-01 20:18:44.000000000 +0100 @@ -1,4 +1,11 @@ -27 January 2021: Gal??ne 0.4.3 +1 February 2022: Galene 0.4.4 + + * Update dependencies. Pion WebRTC v3.1.19 fixes a bug that could cause + audio tracks to be discarded under some circumstances. + * Fix a bug that could cause user statuses (raisehand) to be discarded. + * Fix incorrect maxRate value in statistics display. + +27 January 2022: Gal??ne 0.4.3 * Fix a locking issue that could cause a deadlock when massive numbers of clients join at the same time. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/galene-0.4.3/go.mod new/galene-0.4.4/go.mod --- old/galene-0.4.3/go.mod 2022-01-27 14:22:43.000000000 +0100 +++ new/galene-0.4.4/go.mod 2022-02-01 20:18:44.000000000 +0100 @@ -7,13 +7,12 @@ github.com/gorilla/websocket v1.4.2 github.com/jech/cert v0.0.0-20210819231831-aca735647728 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/ice/v2 v2.1.20 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.6 - github.com/pion/webrtc/v3 v3.1.17 + github.com/pion/webrtc/v3 v3.1.19 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.3/go.sum new/galene-0.4.4/go.sum --- old/galene-0.4.3/go.sum 2022-01-27 14:22:43.000000000 +0100 +++ new/galene-0.4.4/go.sum 2022-02-01 20:18:44.000000000 +0100 @@ -49,15 +49,12 @@ 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.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/dtls/v2 v2.1.1 h1:+ak8AXk2Hw0xjBTwC3ZwTmg72nLckNs3kpIugs4R594= +github.com/pion/dtls/v2 v2.1.1/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/ice/v2 v2.1.20 h1:xpxXyX5b4WjCh/D905gzBeW/hbJxMEPx2ptVfrhVE6M= +github.com/pion/ice/v2 v2.1.20/go.mod h1:hEAldRzBhTtAfvlU1V/2/nLCMvveQWFKPNCop+63/Iw= 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= @@ -96,8 +93,8 @@ 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/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/pion/webrtc/v3 v3.1.19 h1:a4mrYskJE9LLUEogSnYVBna0Plg+fwwGLkDraz1WSwI= +github.com/pion/webrtc/v3 v3.1.19/go.mod h1:JRlX2EANa0bbyNzbqhkSiio+tT284fgco03Xw+aS/4Q= 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= @@ -112,7 +109,6 @@ 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-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= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/galene-0.4.3/rtpconn/rtpstats.go new/galene-0.4.4/rtpconn/rtpstats.go --- old/galene-0.4.3/rtpconn/rtpstats.go 2022-01-27 14:22:43.000000000 +0100 +++ new/galene-0.4.4/rtpconn/rtpstats.go 2022-02-01 20:18:44.000000000 +0100 @@ -56,6 +56,7 @@ tid := layer.tid maxTid := layer.maxTid rate, _ := t.rate.Estimate() + maxRate, _, _ := t.GetMaxBitrate() rtt := rtptime.ToDuration(t.getRTT(), rtptime.JiffiesPerSec) loss, jitter := t.stats.Get(jiffies) @@ -67,7 +68,7 @@ Sid: &sid, MaxSid: &maxSid, Bitrate: uint64(rate) * 8, - MaxBitrate: t.maxBitrate.Get(jiffies), + MaxBitrate: maxRate, Loss: float64(loss) / 256.0, Rtt: stats.Duration(rtt), Jitter: stats.Duration(j), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/galene-0.4.3/static/galene.js new/galene-0.4.4/static/galene.js --- old/galene-0.4.3/static/galene.js 2022-01-27 14:22:43.000000000 +0100 +++ new/galene-0.4.4/static/galene.js 2022-02-01 20:18:44.000000000 +0100 @@ -1961,26 +1961,27 @@ /** * @param {string} id - * @param {string} name + * @param {user} userinfo */ -function addUser(id, name) { - if(!name) - name = null; - +function addUser(id, userinfo) { let div = document.getElementById('users'); let user = document.createElement('div'); user.id = 'user-' + id; user.classList.add("user-p"); - 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'); - if(name) { + if(userinfo.username) { let us = div.children; for(let i = 0; i < us.length; i++) { let child = us[i]; let childuser = serverConnection.users[child.id.slice('user-'.length)] || null; let childname = (childuser && childuser.username) || null; - if(!childname || stringCompare(childname, name) > 0) { + if(!childname || stringCompare(childname, userinfo.username) > 0) { div.insertBefore(user, child); return; } @@ -2022,7 +2023,7 @@ function gotUser(id, kind) { switch(kind) { case 'add': - addUser(id, serverConnection.users[id].username); + addUser(id, serverConnection.users[id]); if(Object.keys(serverConnection.users).length == 3) reconsiderSendParameters(); break; ++++++ vendor.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/pion/dtls/v2/AUTHORS.txt new/vendor/github.com/pion/dtls/v2/AUTHORS.txt --- old/vendor/github.com/pion/dtls/v2/AUTHORS.txt 2022-01-27 19:09:03.711526000 +0100 +++ new/vendor/github.com/pion/dtls/v2/AUTHORS.txt 2022-02-01 22:10:04.065418500 +0100 @@ -27,6 +27,8 @@ Julien Salleyron <julien.salley...@gmail.com> Kegan Dougal <ke...@matrix.org> Lander Noterman <lander.noter...@basalte.be> +Len <l...@hpcnt.com> +Lukas Lihotzki <lu...@lihotzki.de> Michael Zabka <zabka.mich...@gmail.com> Michiel De Backker <m...@backkem.me> Robert Eperjesi <eperj...@uber.com> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/pion/dtls/v2/README.md new/vendor/github.com/pion/dtls/v2/README.md --- old/vendor/github.com/pion/dtls/v2/README.md 2022-01-27 19:09:03.711526000 +0100 +++ new/vendor/github.com/pion/dtls/v2/README.md 2022-02-01 22:10:04.065418500 +0100 @@ -35,9 +35,11 @@ * Key export ([RFC 5705][rfc5705]) * Serialization and Resumption of sessions * Extended Master Secret extension ([RFC 7627][rfc7627]) +* ALPN extension ([RFC 7301][rfc7301]) [rfc5705]: https://tools.ietf.org/html/rfc5705 [rfc7627]: https://tools.ietf.org/html/rfc7627 +[rfc7301]: https://tools.ietf.org/html/rfc7301 #### Supported ciphers diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/pion/dtls/v2/cipher_suite.go new/vendor/github.com/pion/dtls/v2/cipher_suite.go --- old/vendor/github.com/pion/dtls/v2/cipher_suite.go 2022-01-27 19:09:03.711526000 +0100 +++ new/vendor/github.com/pion/dtls/v2/cipher_suite.go 2022-02-01 22:10:04.065418500 +0100 @@ -1,6 +1,10 @@ package dtls import ( + "crypto/ecdsa" + "crypto/ed25519" + "crypto/rsa" + "crypto/tls" "fmt" "hash" @@ -67,7 +71,6 @@ // Called when keying material has been generated, should initialize the internal cipher Init(masterSecret, clientRandom, serverRandom []byte, isClient bool) error IsInitialized() bool - Encrypt(pkt *recordlayer.RecordLayer, raw []byte) ([]byte, error) Decrypt(in []byte) ([]byte, error) } @@ -222,3 +225,24 @@ return cipherSuites[:i], nil } + +func filterCipherSuitesForCertificate(cert *tls.Certificate, cipherSuites []CipherSuite) []CipherSuite { + if cert == nil || cert.PrivateKey == nil { + return cipherSuites + } + var certType clientcertificate.Type + switch cert.PrivateKey.(type) { + case ed25519.PrivateKey, *ecdsa.PrivateKey: + certType = clientcertificate.ECDSASign + case *rsa.PrivateKey: + certType = clientcertificate.RSASign + } + + filtered := []CipherSuite{} + for _, c := range cipherSuites { + if c.AuthenticationType() != CipherSuiteAuthenticationTypeCertificate || certType == c.CertificateType() { + filtered = append(filtered, c) + } + } + return filtered +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/pion/dtls/v2/cipher_suite_go114.go new/vendor/github.com/pion/dtls/v2/cipher_suite_go114.go --- old/vendor/github.com/pion/dtls/v2/cipher_suite_go114.go 2022-01-27 19:09:03.711526000 +0100 +++ new/vendor/github.com/pion/dtls/v2/cipher_suite_go114.go 2022-02-01 22:10:04.065418500 +0100 @@ -1,3 +1,4 @@ +//go:build go1.14 // +build go1.14 package dtls diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/pion/dtls/v2/config.go new/vendor/github.com/pion/dtls/v2/config.go --- old/vendor/github.com/pion/dtls/v2/config.go 2022-01-27 19:09:03.711526000 +0100 +++ new/vendor/github.com/pion/dtls/v2/config.go 2022-02-01 22:10:04.065418500 +0100 @@ -127,6 +127,9 @@ // SessionStore is the container to store session for resumption. SessionStore SessionStore + + // List of application protocols the peer supports, for ALPN + SupportedProtocols []string } func defaultConnectContextMaker() (context.Context, func()) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/pion/dtls/v2/conn.go new/vendor/github.com/pion/dtls/v2/conn.go --- old/vendor/github.com/pion/dtls/v2/conn.go 2022-01-27 19:09:03.711526000 +0100 +++ new/vendor/github.com/pion/dtls/v2/conn.go 2022-02-01 22:10:04.065418500 +0100 @@ -162,6 +162,7 @@ extendedMasterSecret: config.ExtendedMasterSecret, localSRTPProtectionProfiles: config.SRTPProtectionProfiles, serverName: serverName, + supportedProtocols: config.SupportedProtocols, clientAuth: config.ClientAuth, localCertificates: config.Certificates, insecureSkipVerify: config.InsecureSkipVerify, @@ -176,6 +177,12 @@ sessionStore: config.SessionStore, } + cert, err := hsCfg.getCertificate(serverName) + if err != nil && !errors.Is(err, errNoCertificates) { + return nil, err + } + hsCfg.localCipherSuites = filterCipherSuitesForCertificate(cert, cipherSuites) + var initialFlight flightVal var initialFSMState handshakeState @@ -564,7 +571,7 @@ var hasHandshake bool for _, p := range pkts { - hs, alert, err := c.handleIncomingPacket(p, true) + hs, alert, err := c.handleIncomingPacket(ctx, p, true) if alert != nil { if alertErr := c.notify(ctx, alert.Level, alert.Description); alertErr != nil { if err == nil { @@ -603,7 +610,7 @@ c.encryptedPackets = nil for _, p := range pkts { - _, alert, err := c.handleIncomingPacket(p, false) // don't re-enqueue + _, alert, err := c.handleIncomingPacket(ctx, p, false) // don't re-enqueue if alert != nil { if alertErr := c.notify(ctx, alert.Level, alert.Description); alertErr != nil { if err == nil { @@ -624,7 +631,7 @@ return nil } -func (c *Conn) handleIncomingPacket(buf []byte, enqueue bool) (bool, *alert.Alert, error) { //nolint:gocognit +func (c *Conn) handleIncomingPacket(ctx context.Context, buf []byte, enqueue bool) (bool, *alert.Alert, error) { //nolint:gocognit h := &recordlayer.Header{} if err := h.Unmarshal(buf); err != nil { // Decode error must be silently discarded @@ -743,6 +750,7 @@ select { case c.decrypted <- content.Data: case <-c.closed.Done(): + case <-ctx.Done(): } default: @@ -844,6 +852,7 @@ select { case c.decrypted <- err: case <-c.closed.Done(): + case <-ctxRead.Done(): } } continue // non-fatal alert must not stop read loop @@ -857,6 +866,7 @@ select { case c.decrypted <- err: case <-c.closed.Done(): + case <-ctxRead.Done(): } continue // non-fatal alert must not stop read loop } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/pion/dtls/v2/errors_errno.go new/vendor/github.com/pion/dtls/v2/errors_errno.go --- old/vendor/github.com/pion/dtls/v2/errors_errno.go 2022-01-27 19:09:03.711526000 +0100 +++ new/vendor/github.com/pion/dtls/v2/errors_errno.go 2022-02-01 22:10:04.069418400 +0100 @@ -1,3 +1,4 @@ +//go:build aix || darwin || dragonfly || freebsd || linux || nacl || nacljs || netbsd || openbsd || solaris || windows // +build aix darwin dragonfly freebsd linux nacl nacljs netbsd openbsd solaris windows // For systems having syscall.Errno. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/pion/dtls/v2/errors_noerrno.go new/vendor/github.com/pion/dtls/v2/errors_noerrno.go --- old/vendor/github.com/pion/dtls/v2/errors_noerrno.go 2022-01-27 19:09:03.711526000 +0100 +++ new/vendor/github.com/pion/dtls/v2/errors_noerrno.go 2022-02-01 22:10:04.069418400 +0100 @@ -1,3 +1,4 @@ +//go:build !aix && !darwin && !dragonfly && !freebsd && !linux && !nacl && !nacljs && !netbsd && !openbsd && !solaris && !windows // +build !aix,!darwin,!dragonfly,!freebsd,!linux,!nacl,!nacljs,!netbsd,!openbsd,!solaris,!windows // For systems without syscall.Errno. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/pion/dtls/v2/flight0handler.go new/vendor/github.com/pion/dtls/v2/flight0handler.go --- old/vendor/github.com/pion/dtls/v2/flight0handler.go 2022-01-27 19:09:03.711526000 +0100 +++ new/vendor/github.com/pion/dtls/v2/flight0handler.go 2022-02-01 22:10:04.069418400 +0100 @@ -64,6 +64,8 @@ } case *extension.ServerName: state.serverName = e.ServerName // remote server name + case *extension.ALPN: + state.peerSupportedProtocols = e.ProtocolNameList } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/pion/dtls/v2/flight1handler.go new/vendor/github.com/pion/dtls/v2/flight1handler.go --- old/vendor/github.com/pion/dtls/v2/flight1handler.go 2022-01-27 19:09:03.711526000 +0100 +++ new/vendor/github.com/pion/dtls/v2/flight1handler.go 2022-02-01 22:10:04.069418400 +0100 @@ -90,6 +90,10 @@ extensions = append(extensions, &extension.ServerName{ServerName: cfg.serverName}) } + if len(cfg.supportedProtocols) > 0 { + extensions = append(extensions, &extension.ALPN{ProtocolNameList: cfg.supportedProtocols}) + } + if cfg.sessionStore != nil { cfg.log.Tracef("[handshake] try to resume session") if s, err := cfg.sessionStore.Get(c.sessionKey()); err != nil { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/pion/dtls/v2/flight3handler.go new/vendor/github.com/pion/dtls/v2/flight3handler.go --- old/vendor/github.com/pion/dtls/v2/flight3handler.go 2022-01-27 19:09:03.711526000 +0100 +++ new/vendor/github.com/pion/dtls/v2/flight3handler.go 2022-02-01 22:10:04.069418400 +0100 @@ -57,6 +57,11 @@ if cfg.extendedMasterSecret != DisableExtendedMasterSecret { state.extendedMasterSecret = true } + case *extension.ALPN: + if len(e.ProtocolNameList) > 1 { // This should be exactly 1, the zero case is handle when unmarshalling + return 0, &alert.Alert{Level: alert.Fatal, Description: alert.InternalError}, extension.ErrALPNInvalidFormat // Meh, internal error? + } + state.NegotiatedProtocol = e.ProtocolNameList[0] } } if cfg.extendedMasterSecret == RequireExtendedMasterSecret && !state.extendedMasterSecret { @@ -239,6 +244,10 @@ extensions = append(extensions, &extension.ServerName{ServerName: cfg.serverName}) } + if len(cfg.supportedProtocols) > 0 { + extensions = append(extensions, &extension.ALPN{ProtocolNameList: cfg.supportedProtocols}) + } + return []*packet{ { record: &recordlayer.RecordLayer{ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/pion/dtls/v2/flight4bhandler.go new/vendor/github.com/pion/dtls/v2/flight4bhandler.go --- old/vendor/github.com/pion/dtls/v2/flight4bhandler.go 2022-01-27 19:09:03.711526000 +0100 +++ new/vendor/github.com/pion/dtls/v2/flight4bhandler.go 2022-02-01 22:10:04.069418400 +0100 @@ -62,6 +62,17 @@ }) } + selectedProto, err := extension.ALPNProtocolSelection(cfg.supportedProtocols, state.peerSupportedProtocols) + if err != nil { + return nil, &alert.Alert{Level: alert.Fatal, Description: alert.NoApplicationProtocol}, err + } + if selectedProto != "" { + extensions = append(extensions, &extension.ALPN{ + ProtocolNameList: []string{selectedProto}, + }) + state.NegotiatedProtocol = selectedProto + } + cipherSuiteID := uint16(state.cipherSuite.ID()) serverHello := &handshake.Handshake{ Message: &handshake.MessageServerHello{ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/pion/dtls/v2/flight4handler.go new/vendor/github.com/pion/dtls/v2/flight4handler.go --- old/vendor/github.com/pion/dtls/v2/flight4handler.go 2022-01-27 19:09:03.711526000 +0100 +++ new/vendor/github.com/pion/dtls/v2/flight4handler.go 2022-02-01 22:10:04.069418400 +0100 @@ -212,6 +212,17 @@ }) } + selectedProto, err := extension.ALPNProtocolSelection(cfg.supportedProtocols, state.peerSupportedProtocols) + if err != nil { + return nil, &alert.Alert{Level: alert.Fatal, Description: alert.NoApplicationProtocol}, err + } + if selectedProto != "" { + extensions = append(extensions, &extension.ALPN{ + ProtocolNameList: []string{selectedProto}, + }) + state.NegotiatedProtocol = selectedProto + } + var pkts []*packet cipherSuiteID := uint16(state.cipherSuite.ID()) @@ -242,7 +253,7 @@ switch { case state.cipherSuite.AuthenticationType() == CipherSuiteAuthenticationTypeCertificate: - certificate, err := cfg.getCertificate(cfg.serverName) + certificate, err := cfg.getCertificate(state.serverName) if err != nil { return nil, &alert.Alert{Level: alert.Fatal, Description: alert.HandshakeFailure}, err } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/pion/dtls/v2/fuzz.go new/vendor/github.com/pion/dtls/v2/fuzz.go --- old/vendor/github.com/pion/dtls/v2/fuzz.go 2022-01-27 19:09:03.711526000 +0100 +++ new/vendor/github.com/pion/dtls/v2/fuzz.go 2022-02-01 22:10:04.069418400 +0100 @@ -1,3 +1,4 @@ +//go:build gofuzz // +build gofuzz package dtls diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/pion/dtls/v2/handshaker.go new/vendor/github.com/pion/dtls/v2/handshaker.go --- old/vendor/github.com/pion/dtls/v2/handshaker.go 2022-01-27 19:09:03.711526000 +0100 +++ new/vendor/github.com/pion/dtls/v2/handshaker.go 2022-02-01 22:10:04.069418400 +0100 @@ -95,6 +95,7 @@ extendedMasterSecret ExtendedMasterSecretType // Policy for the Extended Master Support extension localSRTPProtectionProfiles []SRTPProtectionProfile // Available SRTPProtectionProfiles, if empty no SRTP support serverName string + supportedProtocols []string clientAuth ClientAuthType // If we are a client should we request a client certificate localCertificates []tls.Certificate nameToCertificate map[string]*tls.Certificate diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/pion/dtls/v2/pkg/protocol/alert/alert.go new/vendor/github.com/pion/dtls/v2/pkg/protocol/alert/alert.go --- old/vendor/github.com/pion/dtls/v2/pkg/protocol/alert/alert.go 2022-01-27 19:09:03.719525800 +0100 +++ new/vendor/github.com/pion/dtls/v2/pkg/protocol/alert/alert.go 2022-02-01 22:10:04.073418400 +0100 @@ -60,6 +60,7 @@ UserCanceled Description = 90 NoRenegotiation Description = 100 UnsupportedExtension Description = 110 + NoApplicationProtocol Description = 120 ) func (d Description) String() string { @@ -114,6 +115,8 @@ return "NoRenegotiation" case UnsupportedExtension: return "UnsupportedExtension" + case NoApplicationProtocol: + return "NoApplicationProtocol" default: return "Invalid alert description" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/pion/dtls/v2/pkg/protocol/change_cipher_spec.go new/vendor/github.com/pion/dtls/v2/pkg/protocol/change_cipher_spec.go --- old/vendor/github.com/pion/dtls/v2/pkg/protocol/change_cipher_spec.go 2022-01-27 19:09:03.719525800 +0100 +++ new/vendor/github.com/pion/dtls/v2/pkg/protocol/change_cipher_spec.go 2022-02-01 22:10:04.073418400 +0100 @@ -5,8 +5,7 @@ // which is encrypted and compressed under the current (not the pending) // connection state. The message consists of a single byte of value 1. // https://tools.ietf.org/html/rfc5246#section-7.1 -type ChangeCipherSpec struct { -} +type ChangeCipherSpec struct{} // ContentType returns the ContentType of this content func (c ChangeCipherSpec) ContentType() ContentType { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/pion/dtls/v2/pkg/protocol/extension/alpn.go new/vendor/github.com/pion/dtls/v2/pkg/protocol/extension/alpn.go --- old/vendor/github.com/pion/dtls/v2/pkg/protocol/extension/alpn.go 1970-01-01 01:00:00.000000000 +0100 +++ new/vendor/github.com/pion/dtls/v2/pkg/protocol/extension/alpn.go 2022-02-01 22:10:04.073418400 +0100 @@ -0,0 +1,77 @@ +package extension + +import ( + "golang.org/x/crypto/cryptobyte" +) + +// ALPN is a TLS extension for application-layer protocol negotiation within +// the TLS handshake. +// +// https://tools.ietf.org/html/rfc7301 +type ALPN struct { + ProtocolNameList []string +} + +// TypeValue returns the extension TypeValue +func (a ALPN) TypeValue() TypeValue { + return ALPNTypeValue +} + +// Marshal encodes the extension +func (a *ALPN) Marshal() ([]byte, error) { + var b cryptobyte.Builder + b.AddUint16(uint16(a.TypeValue())) + b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { + b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { + for _, proto := range a.ProtocolNameList { + p := proto // Satisfy range scope lint + b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { + b.AddBytes([]byte(p)) + }) + } + }) + }) + return b.Bytes() +} + +// Unmarshal populates the extension from encoded data +func (a *ALPN) Unmarshal(data []byte) error { + val := cryptobyte.String(data) + + var extension uint16 + val.ReadUint16(&extension) + if TypeValue(extension) != a.TypeValue() { + return errInvalidExtensionType + } + + var extData cryptobyte.String + val.ReadUint16LengthPrefixed(&extData) + + var protoList cryptobyte.String + if !extData.ReadUint16LengthPrefixed(&protoList) || protoList.Empty() { + return ErrALPNInvalidFormat + } + for !protoList.Empty() { + var proto cryptobyte.String + if !protoList.ReadUint8LengthPrefixed(&proto) || proto.Empty() { + return ErrALPNInvalidFormat + } + a.ProtocolNameList = append(a.ProtocolNameList, string(proto)) + } + return nil +} + +// ALPNProtocolSelection negotiates a shared protocol according to #3.2 of rfc7301 +func ALPNProtocolSelection(supportedProtocols, peerSupportedProtocols []string) (string, error) { + if len(supportedProtocols) == 0 || len(peerSupportedProtocols) == 0 { + return "", nil + } + for _, s := range supportedProtocols { + for _, c := range peerSupportedProtocols { + if s == c { + return s, nil + } + } + } + return "", errALPNNoAppProto +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/pion/dtls/v2/pkg/protocol/extension/errors.go new/vendor/github.com/pion/dtls/v2/pkg/protocol/extension/errors.go --- old/vendor/github.com/pion/dtls/v2/pkg/protocol/extension/errors.go 2022-01-27 19:09:03.719525800 +0100 +++ new/vendor/github.com/pion/dtls/v2/pkg/protocol/extension/errors.go 2022-02-01 22:10:04.073418400 +0100 @@ -7,6 +7,9 @@ ) var ( + // ErrALPNInvalidFormat is raised when the ALPN format is invalid + ErrALPNInvalidFormat = &protocol.FatalError{Err: errors.New("invalid alpn format")} //nolint:goerr113 + errALPNNoAppProto = &protocol.FatalError{Err: errors.New("no application protocol")} //nolint:goerr113 errBufferTooSmall = &protocol.TemporaryError{Err: errors.New("buffer is too small")} //nolint:goerr113 errInvalidExtensionType = &protocol.FatalError{Err: errors.New("invalid extension type")} //nolint:goerr113 errInvalidSNIFormat = &protocol.FatalError{Err: errors.New("invalid server name format")} //nolint:goerr113 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/pion/dtls/v2/pkg/protocol/extension/extension.go new/vendor/github.com/pion/dtls/v2/pkg/protocol/extension/extension.go --- old/vendor/github.com/pion/dtls/v2/pkg/protocol/extension/extension.go 2022-01-27 19:09:03.719525800 +0100 +++ new/vendor/github.com/pion/dtls/v2/pkg/protocol/extension/extension.go 2022-02-01 22:10:04.073418400 +0100 @@ -15,6 +15,7 @@ SupportedPointFormatsTypeValue TypeValue = 11 SupportedSignatureAlgorithmsTypeValue TypeValue = 13 UseSRTPTypeValue TypeValue = 14 + ALPNTypeValue TypeValue = 16 UseExtendedMasterSecretTypeValue TypeValue = 23 RenegotiationInfoTypeValue TypeValue = 65281 ) @@ -62,6 +63,8 @@ err = unmarshalAndAppend(buf[offset:], &SupportedEllipticCurves{}) case UseSRTPTypeValue: err = unmarshalAndAppend(buf[offset:], &UseSRTP{}) + case ALPNTypeValue: + err = unmarshalAndAppend(buf[offset:], &ALPN{}) case UseExtendedMasterSecretTypeValue: err = unmarshalAndAppend(buf[offset:], &UseExtendedMasterSecret{}) case RenegotiationInfoTypeValue: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/pion/dtls/v2/pkg/protocol/extension/server_name.go new/vendor/github.com/pion/dtls/v2/pkg/protocol/extension/server_name.go --- old/vendor/github.com/pion/dtls/v2/pkg/protocol/extension/server_name.go 2022-01-27 19:09:03.719525800 +0100 +++ new/vendor/github.com/pion/dtls/v2/pkg/protocol/extension/server_name.go 2022-02-01 22:10:04.073418400 +0100 @@ -9,7 +9,7 @@ const serverNameTypeDNSHostName = 0 // ServerName allows the client to inform the server the specific -// name it wishs to contact. Useful if multiple DNS names resolve +// name it wishes to contact. Useful if multiple DNS names resolve // to one IP // // https://tools.ietf.org/html/rfc6066#section-3 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/pion/dtls/v2/pkg/protocol/handshake/handshake.go new/vendor/github.com/pion/dtls/v2/pkg/protocol/handshake/handshake.go --- old/vendor/github.com/pion/dtls/v2/pkg/protocol/handshake/handshake.go 2022-01-27 19:09:03.719525800 +0100 +++ new/vendor/github.com/pion/dtls/v2/pkg/protocol/handshake/handshake.go 2022-02-01 22:10:04.077418600 +0100 @@ -58,7 +58,6 @@ type Message interface { Marshal() ([]byte, error) Unmarshal(data []byte) error - Type() Type } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/pion/dtls/v2/pkg/protocol/handshake/message_server_hello_done.go new/vendor/github.com/pion/dtls/v2/pkg/protocol/handshake/message_server_hello_done.go --- old/vendor/github.com/pion/dtls/v2/pkg/protocol/handshake/message_server_hello_done.go 2022-01-27 19:09:03.723525800 +0100 +++ new/vendor/github.com/pion/dtls/v2/pkg/protocol/handshake/message_server_hello_done.go 2022-02-01 22:10:04.077418600 +0100 @@ -3,8 +3,7 @@ // MessageServerHelloDone is final non-encrypted message from server // this communicates server has sent all its handshake messages and next // should be MessageFinished -type MessageServerHelloDone struct { -} +type MessageServerHelloDone struct{} // Type returns the Handshake Type func (m MessageServerHelloDone) Type() Type { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/pion/dtls/v2/state.go new/vendor/github.com/pion/dtls/v2/state.go --- old/vendor/github.com/pion/dtls/v2/state.go 2022-01-27 19:09:03.711526000 +0100 +++ new/vendor/github.com/pion/dtls/v2/state.go 2022-02-01 22:10:04.069418400 +0100 @@ -42,6 +42,9 @@ peerCertificatesVerified bool replayDetector []replaydetector.ReplayDetector + + peerSupportedProtocols []string + NegotiatedProtocol string } type serializedState struct { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/pion/ice/v2/agent.go new/vendor/github.com/pion/ice/v2/agent.go --- old/vendor/github.com/pion/ice/v2/agent.go 2022-01-27 19:09:03.723525800 +0100 +++ new/vendor/github.com/pion/ice/v2/agent.go 2022-02-01 22:10:04.077418600 +0100 @@ -109,8 +109,9 @@ extIPMapper *externalIPMapper // State for closing - done chan struct{} - err atomicError + done chan struct{} + taskLoopDone chan struct{} + err atomicError gatherCandidateCancel func() @@ -213,6 +214,7 @@ close(a.chanState) close(a.chanCandidate) close(a.chanCandidatePair) + close(a.taskLoopDone) }() for { @@ -289,6 +291,7 @@ onConnected: make(chan struct{}), buffer: packetio.NewBuffer(), done: make(chan struct{}), + taskLoopDone: make(chan struct{}), startedCh: startedCtx.Done(), startedFn: startedFn, portmin: config.PortMin, @@ -421,12 +424,12 @@ } return } - a.onConnectionStateChange(s) + go a.onConnectionStateChange(s) case c, isOpen := <-a.chanCandidate: if !isOpen { for s := range a.chanState { - a.onConnectionStateChange(s) + go a.onConnectionStateChange(s) } return } @@ -897,20 +900,15 @@ return err } - done := make(chan struct{}) - a.afterRun(func(context.Context) { a.gatherCandidateCancel() - close(done) }) - a.err.Store(ErrClosed) a.removeUfragFromMux() close(a.done) - - <-done + <-a.taskLoopDone return nil } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/pion/ice/v2/go.mod new/vendor/github.com/pion/ice/v2/go.mod --- old/vendor/github.com/pion/ice/v2/go.mod 2022-01-27 19:09:03.723525800 +0100 +++ new/vendor/github.com/pion/ice/v2/go.mod 2022-02-01 22:10:04.077418600 +0100 @@ -5,7 +5,7 @@ require ( github.com/google/uuid v1.3.0 github.com/kr/pretty v0.1.0 // indirect - github.com/pion/dtls/v2 v2.1.0 + github.com/pion/dtls/v2 v2.1.1 github.com/pion/logging v0.2.2 github.com/pion/mdns v0.0.5 github.com/pion/randutil v0.1.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/pion/ice/v2/go.sum new/vendor/github.com/pion/ice/v2/go.sum --- old/vendor/github.com/pion/ice/v2/go.sum 2022-01-27 19:09:03.723525800 +0100 +++ new/vendor/github.com/pion/ice/v2/go.sum 2022-02-01 22:10:04.077418600 +0100 @@ -7,8 +7,8 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -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/dtls/v2 v2.1.1 h1:+ak8AXk2Hw0xjBTwC3ZwTmg72nLckNs3kpIugs4R594= +github.com/pion/dtls/v2 v2.1.1/go.mod h1:qG3gA7ZPZemBqpEFqRKyURYdKEwFZQCGb7gv9T3ON3Y= 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= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/pion/webrtc/v3/AUTHORS.txt new/vendor/github.com/pion/webrtc/v3/AUTHORS.txt --- old/vendor/github.com/pion/webrtc/v3/AUTHORS.txt 2022-01-27 19:09:03.755525600 +0100 +++ new/vendor/github.com/pion/webrtc/v3/AUTHORS.txt 2022-02-01 22:10:04.105418200 +0100 @@ -133,6 +133,7 @@ rob-deutsch <robzyb+altgit...@gmail.com> Robert Eperjesi <eperj...@uber.com> Robin Raymond <robin-raym...@users.noreply.github.com> +Roman Romanenko <roman.romane...@aliexpress.ru> Roman Romanenko <romandaf...@gmail.com> ronan <ronan.jezeq...@gmail.com> Ryan Shumate <ryan.shum...@garmin.com> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/pion/webrtc/v3/api.go new/vendor/github.com/pion/webrtc/v3/api.go --- old/vendor/github.com/pion/webrtc/v3/api.go 2022-01-27 19:09:03.759525500 +0100 +++ new/vendor/github.com/pion/webrtc/v3/api.go 2022-02-01 22:10:04.105418200 +0100 @@ -23,28 +23,21 @@ // NewAPI Creates a new API object for keeping semi-global settings to WebRTC objects func NewAPI(options ...func(*API)) *API { - a := &API{interceptor: &interceptor.NoOp{}} + a := &API{ + interceptor: &interceptor.NoOp{}, + settingEngine: &SettingEngine{}, + mediaEngine: &MediaEngine{}, + interceptorRegistry: &interceptor.Registry{}, + } for _, o := range options { o(a) } - if a.settingEngine == nil { - a.settingEngine = &SettingEngine{} - } - if a.settingEngine.LoggerFactory == nil { a.settingEngine.LoggerFactory = logging.NewDefaultLoggerFactory() } - if a.mediaEngine == nil { - a.mediaEngine = &MediaEngine{} - } - - if a.interceptorRegistry == nil { - a.interceptorRegistry = &interceptor.Registry{} - } - return a } @@ -52,9 +45,8 @@ // Settings can be changed after passing the engine to an API. func WithMediaEngine(m *MediaEngine) func(a *API) { return func(a *API) { - if m != nil { - a.mediaEngine = m - } else { + a.mediaEngine = m + if a.mediaEngine == nil { a.mediaEngine = &MediaEngine{} } } @@ -70,8 +62,11 @@ // WithInterceptorRegistry allows providing Interceptors to the API. // Settings should not be changed after passing the registry to an API. -func WithInterceptorRegistry(interceptorRegistry *interceptor.Registry) func(a *API) { +func WithInterceptorRegistry(ir *interceptor.Registry) func(a *API) { return func(a *API) { - a.interceptorRegistry = interceptorRegistry + a.interceptorRegistry = ir + if a.interceptorRegistry == nil { + a.interceptorRegistry = &interceptor.Registry{} + } } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/pion/webrtc/v3/go.mod new/vendor/github.com/pion/webrtc/v3/go.mod --- old/vendor/github.com/pion/webrtc/v3/go.mod 2022-01-27 19:09:03.759525500 +0100 +++ new/vendor/github.com/pion/webrtc/v3/go.mod 2022-02-01 22:10:04.105418200 +0100 @@ -6,9 +6,9 @@ github.com/onsi/ginkgo v1.16.5 // indirect github.com/onsi/gomega v1.17.0 // indirect github.com/pion/datachannel v1.5.2 - github.com/pion/dtls/v2 v2.1.0 - github.com/pion/ice/v2 v2.1.18 - github.com/pion/interceptor v0.1.6 + github.com/pion/dtls/v2 v2.1.1 + github.com/pion/ice/v2 v2.1.20 + github.com/pion/interceptor v0.1.7 github.com/pion/logging v0.2.2 github.com/pion/randutil v0.1.0 github.com/pion/rtcp v1.2.9 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/pion/webrtc/v3/go.sum new/vendor/github.com/pion/webrtc/v3/go.sum --- old/vendor/github.com/pion/webrtc/v3/go.sum 2022-01-27 19:09:03.759525500 +0100 +++ new/vendor/github.com/pion/webrtc/v3/go.sum 2022-02-01 22:10:04.105418200 +0100 @@ -42,13 +42,12 @@ github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= 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.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.18 h1:mDzd+iPKJmU30p4Kb+RPjK9olORLqJmQdiTUnVba50g= -github.com/pion/ice/v2 v2.1.18/go.mod h1:9jDr0iIUg8P6+0Jq8QJ/eFSkX3JnsPd293TjCdkfpTs= -github.com/pion/interceptor v0.1.6 h1:ZTXN9fApUDmFqifG64g+ar57XY7vlnXUs7/0DjHVtLo= -github.com/pion/interceptor v0.1.6/go.mod h1:Lh3JSl/cbJ2wP8I3ccrjh1K/deRGRn3UlSPuOTiHb6U= +github.com/pion/dtls/v2 v2.1.1 h1:+ak8AXk2Hw0xjBTwC3ZwTmg72nLckNs3kpIugs4R594= +github.com/pion/dtls/v2 v2.1.1/go.mod h1:qG3gA7ZPZemBqpEFqRKyURYdKEwFZQCGb7gv9T3ON3Y= +github.com/pion/ice/v2 v2.1.20 h1:xpxXyX5b4WjCh/D905gzBeW/hbJxMEPx2ptVfrhVE6M= +github.com/pion/ice/v2 v2.1.20/go.mod h1:hEAldRzBhTtAfvlU1V/2/nLCMvveQWFKPNCop+63/Iw= +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= @@ -91,7 +90,6 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= 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-20211117183948-ae814b36b871/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3 h1:0es+/5331RGQPcXlMfP+WrnIIS6dNnNRe0WB02W0F4M= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/pion/webrtc/v3/peerconnection.go new/vendor/github.com/pion/webrtc/v3/peerconnection.go --- old/vendor/github.com/pion/webrtc/v3/peerconnection.go 2022-01-27 19:09:03.759525500 +0100 +++ new/vendor/github.com/pion/webrtc/v3/peerconnection.go 2022-02-01 22:10:04.105418200 +0100 @@ -1450,6 +1450,18 @@ return errPeerConnRemoteDescriptionNil } + // If a SSRC already exists in the RemoteDescription don't perform heuristics upon it + for _, track := range trackDetailsFromSDP(pc.log, remoteDescription.parsed) { + if track.repairSsrc != nil && ssrc == *track.repairSsrc { + return nil + } + for _, trackSsrc := range track.ssrcs { + if ssrc == trackSsrc { + return nil + } + } + } + // If the remote SDP was only one media section the ssrc doesn't have to be explicitly declared if handled, err := pc.handleUndeclaredSSRC(ssrc, remoteDescription); handled || err != nil { return err @@ -1526,12 +1538,6 @@ } } - if readStream != nil { - _ = readStream.Close() - } - if rtcpReadStream != nil { - _ = rtcpReadStream.Close() - } pc.api.interceptor.UnbindRemoteStream(streamInfo) return errPeerConnSimulcastIncomingSSRCFailed } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/pion/webrtc/v3/sdp.go new/vendor/github.com/pion/webrtc/v3/sdp.go --- old/vendor/github.com/pion/webrtc/v3/sdp.go 2022-01-27 19:09:03.759525500 +0100 +++ new/vendor/github.com/pion/webrtc/v3/sdp.go 2022-02-01 22:10:04.105418200 +0100 @@ -25,7 +25,7 @@ streamID string id string ssrcs []SSRC - repairSsrc SSRC + repairSsrc *SSRC rids []string } @@ -168,9 +168,10 @@ trackDetails.id = trackID trackDetails.ssrcs = []SSRC{SSRC(ssrc)} - for repairSsrc, baseSsrc := range rtxRepairFlows { + for r, baseSsrc := range rtxRepairFlows { if baseSsrc == ssrc { - trackDetails.repairSsrc = SSRC(repairSsrc) + repairSsrc := SSRC(r) + trackDetails.repairSsrc = &repairSsrc } } @@ -216,7 +217,9 @@ encodings[i].SSRC = t.ssrcs[i] } - encodings[i].RTX.SSRC = t.repairSsrc + if t.repairSsrc != nil { + encodings[i].RTX.SSRC = *t.repairSsrc + } } return RTPReceiveParameters{Encodings: encodings} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/modules.txt new/vendor/modules.txt --- old/vendor/modules.txt 2022-01-27 19:09:03.807525000 +0100 +++ new/vendor/modules.txt 2022-02-01 22:10:04.153418000 +0100 @@ -12,7 +12,7 @@ github.com/jech/samplebuilder # github.com/pion/datachannel v1.5.2 github.com/pion/datachannel -# github.com/pion/dtls/v2 v2.1.0 +# github.com/pion/dtls/v2 v2.1.1 github.com/pion/dtls/v2 github.com/pion/dtls/v2/internal/ciphersuite github.com/pion/dtls/v2/internal/closer @@ -31,7 +31,7 @@ github.com/pion/dtls/v2/pkg/protocol/extension github.com/pion/dtls/v2/pkg/protocol/handshake github.com/pion/dtls/v2/pkg/protocol/recordlayer -# github.com/pion/ice/v2 v2.1.19 +# github.com/pion/ice/v2 v2.1.20 github.com/pion/ice/v2 # github.com/pion/interceptor v0.1.7 github.com/pion/interceptor @@ -73,7 +73,7 @@ github.com/pion/turn/v2/internal/server # github.com/pion/udp v0.1.1 github.com/pion/udp -# github.com/pion/webrtc/v3 v3.1.17 +# github.com/pion/webrtc/v3 v3.1.19 github.com/pion/webrtc/v3 github.com/pion/webrtc/v3/internal/fmtp github.com/pion/webrtc/v3/internal/mux