1
Fork 0

SFU is now called Galène.

This commit is contained in:
Juliusz Chroboczek 2020-12-06 19:43:17 +01:00
parent 2d07c5d317
commit ef1c211b7f
23 changed files with 56 additions and 55 deletions

4
.gitignore vendored
View File

@ -1,7 +1,7 @@
*~ *~
data/*.pem data/*.pem
sfu galene
sfu-password-generator/sfu-password-generator galene-password-generator/galene-password-generator
passwd passwd
groups/*.json groups/*.json
static/*.d.ts static/*.d.ts

14
README
View File

@ -63,21 +63,21 @@ options are described below.
## Copy the necessary files to your server: ## Copy the necessary files to your server:
Assuming you have set up a user *sfu*: Assuming you have set up a user *galene*:
rsync -a sfu static data groups sfu@server.example.org: rsync -a galene static data groups galene@server.example.org:
## Run the server binary: ## Run the server binary:
ssh sfu@server.example.org ssh galene@server.example.org
nohup ./sfu & nohup ./galene &
If you are using *runit*, use a script like the following: If you are using *runit*, use a script like the following:
#!/bin/sh #!/bin/sh
exec 2>&1 exec 2>&1
cd ~sfu cd ~galene
exec setuidgid sfu ./sfu exec setuidgid galene ./galene
If you are using *systemd*, use `Type=simple` in your service file. If you are using *systemd*, use `Type=simple` in your service file.
@ -130,7 +130,7 @@ A user definition is a dictionary with the following fields:
allowed; allowed;
- `password`: if omitted, then no password is required. Otherwise, this - `password`: if omitted, then no password is required. Otherwise, this
can either be a string, specifying a plain text password, or can either be a string, specifying a plain text password, or
a dictionary generated by the `sfu-password-generator` utility. a dictionary generated by the `galene-password-generator` utility.
For example, For example,

View File

@ -4,7 +4,7 @@ The frontend is written in JavaScript and is split into two files:
- `protocol.js` contains the low-level functions that interact with the - `protocol.js` contains the low-level functions that interact with the
server; server;
- `sfu.js` contains the user interface. - `galene.js` contains the user interface.
If you wish to develop your own frontend, I recommend using `protocol.js`, If you wish to develop your own frontend, I recommend using `protocol.js`,
which is likely to remain reasonably stable as the protocol evolves. This which is likely to remain reasonably stable as the protocol evolves. This

View File

@ -16,8 +16,8 @@ import (
"github.com/pion/rtp/codecs" "github.com/pion/rtp/codecs"
"github.com/pion/webrtc/v3/pkg/media/samplebuilder" "github.com/pion/webrtc/v3/pkg/media/samplebuilder"
"sfu/conn" "galene/conn"
"sfu/group" "galene/group"
) )
var Directory string var Directory string

View File

@ -4,7 +4,7 @@ import (
"sync/atomic" "sync/atomic"
"time" "time"
"sfu/rtptime" "galene/rtptime"
) )
type Estimator struct { type Estimator struct {

View File

@ -3,7 +3,7 @@ package estimator
import ( import (
"testing" "testing"
"sfu/rtptime" "galene/rtptime"
) )
func TestEstimator(t *testing.T) { func TestEstimator(t *testing.T) {

View File

@ -11,7 +11,7 @@ import (
"golang.org/x/crypto/pbkdf2" "golang.org/x/crypto/pbkdf2"
"sfu/group" "galene/group"
) )
func main() { func main() {

View File

@ -16,9 +16,9 @@ import (
"syscall" "syscall"
"time" "time"
"sfu/diskwriter" "galene/diskwriter"
"sfu/group" "galene/group"
"sfu/webserver" "galene/webserver"
) )
func main() { func main() {

2
go.mod
View File

@ -1,4 +1,4 @@
module sfu module galene
go 1.13 go 1.13

View File

@ -7,9 +7,10 @@ import (
"encoding/json" "encoding/json"
"errors" "errors"
"hash" "hash"
"sfu/conn"
"golang.org/x/crypto/pbkdf2" "golang.org/x/crypto/pbkdf2"
"galene/conn"
) )
type RawPassword struct { type RawPassword struct {

View File

@ -3,7 +3,7 @@ package jitter
import ( import (
"sync/atomic" "sync/atomic"
"sfu/rtptime" "galene/rtptime"
) )
type Estimator struct { type Estimator struct {

View File

@ -13,12 +13,12 @@ import (
"github.com/pion/rtp" "github.com/pion/rtp"
"github.com/pion/webrtc/v3" "github.com/pion/webrtc/v3"
"sfu/conn" "galene/conn"
"sfu/estimator" "galene/estimator"
"sfu/group" "galene/group"
"sfu/jitter" "galene/jitter"
"sfu/packetcache" "galene/packetcache"
"sfu/rtptime" "galene/rtptime"
) )
type bitrate struct { type bitrate struct {

View File

@ -9,8 +9,8 @@ import (
"github.com/pion/rtp/codecs" "github.com/pion/rtp/codecs"
"github.com/pion/webrtc/v3" "github.com/pion/webrtc/v3"
"sfu/packetcache" "galene/packetcache"
"sfu/rtptime" "galene/rtptime"
) )
func isVP8Keyframe(packet *rtp.Packet) bool { func isVP8Keyframe(packet *rtp.Packet) bool {

View File

@ -5,8 +5,8 @@ import (
"sync/atomic" "sync/atomic"
"time" "time"
"sfu/rtptime" "galene/rtptime"
"sfu/stats" "galene/stats"
) )
func (c *webClient) GetStats() *stats.Client { func (c *webClient) GetStats() *stats.Client {

View File

@ -9,9 +9,9 @@ import (
"github.com/pion/rtp" "github.com/pion/rtp"
"sfu/conn" "galene/conn"
"sfu/packetcache" "galene/packetcache"
"sfu/rtptime" "galene/rtptime"
) )
// packetIndex is a request to send a packet from the cache. // packetIndex is a request to send a packet from the cache.

View File

@ -12,10 +12,10 @@ import (
"github.com/gorilla/websocket" "github.com/gorilla/websocket"
"github.com/pion/webrtc/v3" "github.com/pion/webrtc/v3"
"sfu/conn" "galene/conn"
"sfu/diskwriter" "galene/diskwriter"
"sfu/estimator" "galene/estimator"
"sfu/group" "galene/group"
) )
func errorToWSCloseMessage(id string, err error) (*clientMessage, []byte) { func errorToWSCloseMessage(id string, err error) (*clientMessage, []byte) {

View File

@ -1020,7 +1020,7 @@ legend {
z-index: 1039; z-index: 1039;
} }
#left-sidebar .sfu-header { #left-sidebar .galene-header {
display: inline-block; display: inline-block;
} }
@ -1033,7 +1033,7 @@ header .collapse {
margin-left: 5px; margin-left: 5px;
} }
.sfu-header { .galene-header {
font-size: 1.3rem; font-size: 1.3rem;
font-weight: 900; font-weight: 900;
color: #dbd9d9; color: #dbd9d9;

View File

@ -1,11 +1,11 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<title>SFU</title> <title>Galène</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="ScreenOrientation" content="autoRotate:disabled"> <meta http-equiv="ScreenOrientation" content="autoRotate:disabled">
<link rel="stylesheet" type="text/css" href="/common.css"/> <link rel="stylesheet" type="text/css" href="/common.css"/>
<link rel="stylesheet" type="text/css" href="/sfu.css"/> <link rel="stylesheet" type="text/css" href="/galene.css"/>
<link rel="author" href="https://www.irif.fr/~jch/"/> <link rel="author" href="https://www.irif.fr/~jch/"/>
<!-- Font Awesome File --> <!-- Font Awesome File -->
<link href="/css/fontawesome.min.css" rel="stylesheet" type="text/css"> <link href="/css/fontawesome.min.css" rel="stylesheet" type="text/css">
@ -19,7 +19,7 @@
<div class="row full-height"> <div class="row full-height">
<nav id="left-sidebar"> <nav id="left-sidebar">
<div class="users-header"> <div class="users-header">
<div class="sfu-header">SFU</div> <div class="galene-header">Galène</div>
</div> </div>
<div class="header-sep"></div> <div class="header-sep"></div>
<div id="users"></div> <div id="users"></div>
@ -232,6 +232,6 @@
<script src="/protocol.js" defer></script> <script src="/protocol.js" defer></script>
<script src="/scripts/toastify.js" defer></script> <script src="/scripts/toastify.js" defer></script>
<script src="/sfu.js" defer></script> <script src="/galene.js" defer></script>
</body> </body>
</html> </html>

View File

@ -1,12 +1,12 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<title>SFU</title> <title>Galène</title>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/common.css"> <link rel="stylesheet" href="/common.css">
<link rel="stylesheet" href="/mainpage.css"> <link rel="stylesheet" href="/mainpage.css">
<link rel="stylesheet" type="text/css" href="/sfu.css"/> <link rel="stylesheet" type="text/css" href="/galene.css"/>
<link rel="author" href="https://www.irif.fr/~jch/"/> <link rel="author" href="https://www.irif.fr/~jch/"/>
<!-- Font Awesome File --> <!-- Font Awesome File -->
<link href="/css/fontawesome.min.css" rel="stylesheet" type="text/css"> <link href="/css/fontawesome.min.css" rel="stylesheet" type="text/css">
@ -16,7 +16,7 @@
<body> <body>
<div class="home"> <div class="home">
<h1 id="title" class="navbar-brand">SFU</h1> <h1 id="title" class="navbar-brand">Galène</h1>
<form id="groupform"> <form id="groupform">
<label for="group">Group:</label> <label for="group">Group:</label>
@ -31,7 +31,7 @@
</div> </div>
</div> </div>
<footer class="signature"> <footer class="signature">
<p><a href="https://www.irif.fr/~jch/software/sfu/">Unnamed SFU</a> by <a href="https://www.irif.fr/~jch/" rel="author">Juliusz Chroboczek</a> <p><a href="https://www.irif.fr/~jch/software/galene/">Galène</a> by <a href="https://www.irif.fr/~jch/" rel="author">Juliusz Chroboczek</a>
</footer> </footer>
<script src="/mainpage.js" defer></script> <script src="/mainpage.js" defer></script>

View File

@ -14,6 +14,6 @@
}, },
"files": [ "files": [
"protocol.js", "protocol.js",
"sfu.js" "galene.js"
] ]
} }

View File

@ -4,7 +4,7 @@ import (
"sort" "sort"
"time" "time"
"sfu/group" "galene/group"
) )
type GroupStats struct { type GroupStats struct {

View File

@ -21,10 +21,10 @@ import (
"github.com/gorilla/websocket" "github.com/gorilla/websocket"
"sfu/diskwriter" "galene/diskwriter"
"sfu/group" "galene/group"
"sfu/rtpconn" "galene/rtpconn"
"sfu/stats" "galene/stats"
) )
var server atomic.Value var server atomic.Value
@ -267,7 +267,7 @@ func groupHandler(w http.ResponseWriter, r *http.Request) {
return return
} }
serveFile(w, r, filepath.Join(StaticRoot, "sfu.html")) serveFile(w, r, filepath.Join(StaticRoot, "galene.html"))
} }
func publicHandler(w http.ResponseWriter, r *http.Request) { func publicHandler(w http.ResponseWriter, r *http.Request) {