mirror of
https://github.com/strukturag/nextcloud-spreed-signaling
synced 2024-05-05 23:33:10 +02:00
Fix issues reported by revive.
This commit is contained in:
parent
267f383bb6
commit
614c5f6e21
|
@ -332,10 +332,10 @@ const (
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
DefaultFeatures []string = []string{
|
DefaultFeatures = []string{
|
||||||
ServerFeatureAudioVideoPermissions,
|
ServerFeatureAudioVideoPermissions,
|
||||||
}
|
}
|
||||||
DefaultFeaturesInternal []string = []string{
|
DefaultFeaturesInternal = []string{
|
||||||
ServerFeatureInternalVirtualSessions,
|
ServerFeatureInternalVirtualSessions,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
@ -467,10 +467,7 @@ type ControlClientMessage struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *ControlClientMessage) CheckValid() error {
|
func (m *ControlClientMessage) CheckValid() error {
|
||||||
if err := m.MessageClientMessage.CheckValid(); err != nil {
|
return m.MessageClientMessage.CheckValid()
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type ControlServerMessage struct {
|
type ControlServerMessage struct {
|
||||||
|
@ -514,10 +511,7 @@ type AddSessionInternalClientMessage struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *AddSessionInternalClientMessage) CheckValid() error {
|
func (m *AddSessionInternalClientMessage) CheckValid() error {
|
||||||
if err := m.CommonSessionInternalClientMessage.CheckValid(); err != nil {
|
return m.CommonSessionInternalClientMessage.CheckValid()
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type UpdateSessionInternalClientMessage struct {
|
type UpdateSessionInternalClientMessage struct {
|
||||||
|
@ -527,10 +521,7 @@ type UpdateSessionInternalClientMessage struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *UpdateSessionInternalClientMessage) CheckValid() error {
|
func (m *UpdateSessionInternalClientMessage) CheckValid() error {
|
||||||
if err := m.CommonSessionInternalClientMessage.CheckValid(); err != nil {
|
return m.CommonSessionInternalClientMessage.CheckValid()
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type RemoveSessionInternalClientMessage struct {
|
type RemoveSessionInternalClientMessage struct {
|
||||||
|
@ -540,10 +531,7 @@ type RemoveSessionInternalClientMessage struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *RemoveSessionInternalClientMessage) CheckValid() error {
|
func (m *RemoveSessionInternalClientMessage) CheckValid() error {
|
||||||
if err := m.CommonSessionInternalClientMessage.CheckValid(); err != nil {
|
return m.CommonSessionInternalClientMessage.CheckValid()
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type InternalClientMessage struct {
|
type InternalClientMessage struct {
|
||||||
|
|
|
@ -139,7 +139,7 @@ func NewBackendConfiguration(config *goconf.ConfigFile) (*BackendConfiguration,
|
||||||
if sessionLimit > 0 {
|
if sessionLimit > 0 {
|
||||||
log.Printf("Allow a maximum of %d sessions", sessionLimit)
|
log.Printf("Allow a maximum of %d sessions", sessionLimit)
|
||||||
}
|
}
|
||||||
numBackends += 1
|
numBackends++
|
||||||
} else if backendIds, _ := config.GetString("backend", "backends"); backendIds != "" {
|
} else if backendIds, _ := config.GetString("backend", "backends"); backendIds != "" {
|
||||||
for host, configuredBackends := range getConfiguredHosts(backendIds, config) {
|
for host, configuredBackends := range getConfiguredHosts(backendIds, config) {
|
||||||
backends[host] = append(backends[host], configuredBackends...)
|
backends[host] = append(backends[host], configuredBackends...)
|
||||||
|
@ -186,7 +186,7 @@ func NewBackendConfiguration(config *goconf.ConfigFile) (*BackendConfiguration,
|
||||||
if sessionLimit > 0 {
|
if sessionLimit > 0 {
|
||||||
log.Printf("Allow a maximum of %d sessions", sessionLimit)
|
log.Printf("Allow a maximum of %d sessions", sessionLimit)
|
||||||
}
|
}
|
||||||
numBackends += 1
|
numBackends++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -143,12 +143,14 @@ func (b *BackendServer) Start(r *mux.Router) error {
|
||||||
"nextcloud-spreed-signaling": "Welcome",
|
"nextcloud-spreed-signaling": "Welcome",
|
||||||
"version": b.version,
|
"version": b.version,
|
||||||
}
|
}
|
||||||
if welcomeMessage, err := json.Marshal(welcome); err != nil {
|
welcomeMessage, err := json.Marshal(welcome)
|
||||||
|
if err != nil {
|
||||||
// Should never happen.
|
// Should never happen.
|
||||||
return err
|
return err
|
||||||
} else {
|
|
||||||
b.welcomeMessage = string(welcomeMessage) + "\n"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
b.welcomeMessage = string(welcomeMessage) + "\n"
|
||||||
|
|
||||||
s := r.PathPrefix("/api/v1").Subrouter()
|
s := r.PathPrefix("/api/v1").Subrouter()
|
||||||
s.HandleFunc("/welcome", b.setComonHeaders(b.welcomeFunc)).Methods("GET")
|
s.HandleFunc("/welcome", b.setComonHeaders(b.welcomeFunc)).Methods("GET")
|
||||||
s.HandleFunc("/room/{roomid}", b.setComonHeaders(b.parseRequestBody(b.roomHandler))).Methods("POST")
|
s.HandleFunc("/room/{roomid}", b.setComonHeaders(b.parseRequestBody(b.roomHandler))).Methods("POST")
|
||||||
|
|
|
@ -51,11 +51,11 @@ const (
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
noCountry string = "no-country"
|
noCountry = "no-country"
|
||||||
|
|
||||||
loopback string = "loopback"
|
loopback = "loopback"
|
||||||
|
|
||||||
unknownCountry string = "unknown-country"
|
unknownCountry = "unknown-country"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
|
|
@ -119,7 +119,7 @@ type MessagePayload struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type SignalingClient struct {
|
type SignalingClient struct {
|
||||||
ready_wg *sync.WaitGroup
|
readyWg *sync.WaitGroup
|
||||||
cookie *securecookie.SecureCookie
|
cookie *securecookie.SecureCookie
|
||||||
|
|
||||||
conn *websocket.Conn
|
conn *websocket.Conn
|
||||||
|
@ -135,14 +135,14 @@ type SignalingClient struct {
|
||||||
userId string
|
userId string
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewSignalingClient(cookie *securecookie.SecureCookie, url string, stats *Stats, ready_wg *sync.WaitGroup, done_wg *sync.WaitGroup) (*SignalingClient, error) {
|
func NewSignalingClient(cookie *securecookie.SecureCookie, url string, stats *Stats, readyWg *sync.WaitGroup, doneWg *sync.WaitGroup) (*SignalingClient, error) {
|
||||||
conn, _, err := websocket.DefaultDialer.Dial(url, nil)
|
conn, _, err := websocket.DefaultDialer.Dial(url, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
client := &SignalingClient{
|
client := &SignalingClient{
|
||||||
ready_wg: ready_wg,
|
readyWg: readyWg,
|
||||||
cookie: cookie,
|
cookie: cookie,
|
||||||
|
|
||||||
conn: conn,
|
conn: conn,
|
||||||
|
@ -151,13 +151,13 @@ func NewSignalingClient(cookie *securecookie.SecureCookie, url string, stats *St
|
||||||
|
|
||||||
stopChan: make(chan bool),
|
stopChan: make(chan bool),
|
||||||
}
|
}
|
||||||
done_wg.Add(2)
|
doneWg.Add(2)
|
||||||
go func() {
|
go func() {
|
||||||
defer done_wg.Done()
|
defer doneWg.Done()
|
||||||
client.readPump()
|
client.readPump()
|
||||||
}()
|
}()
|
||||||
go func() {
|
go func() {
|
||||||
defer done_wg.Done()
|
defer doneWg.Done()
|
||||||
client.writePump()
|
client.writePump()
|
||||||
}()
|
}()
|
||||||
return client, nil
|
return client, nil
|
||||||
|
@ -240,7 +240,7 @@ func (c *SignalingClient) processHelloMessage(message *signaling.ServerMessage)
|
||||||
c.publicSessionId = c.privateToPublicSessionId(c.privateSessionId)
|
c.publicSessionId = c.privateToPublicSessionId(c.privateSessionId)
|
||||||
c.userId = message.Hello.UserId
|
c.userId = message.Hello.UserId
|
||||||
log.Printf("Registered as %s (userid %s)", c.privateSessionId, c.userId)
|
log.Printf("Registered as %s (userid %s)", c.privateSessionId, c.userId)
|
||||||
c.ready_wg.Done()
|
c.readyWg.Done()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *SignalingClient) PublicSessionId() string {
|
func (c *SignalingClient) PublicSessionId() string {
|
||||||
|
@ -381,21 +381,21 @@ func (c *SignalingClient) writePump() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *SignalingClient) SendMessages(clients []*SignalingClient) {
|
func (c *SignalingClient) SendMessages(clients []*SignalingClient) {
|
||||||
session_ids := make(map[*SignalingClient]string)
|
sessionIds := make(map[*SignalingClient]string)
|
||||||
for _, c := range clients {
|
for _, c := range clients {
|
||||||
session_ids[c] = c.PublicSessionId()
|
sessionIds[c] = c.PublicSessionId()
|
||||||
}
|
}
|
||||||
|
|
||||||
for atomic.LoadUint32(&c.closed) == 0 {
|
for atomic.LoadUint32(&c.closed) == 0 {
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
|
|
||||||
sender := c
|
sender := c
|
||||||
recipient_idx := pseudorand.Int() % len(clients)
|
recipientIdx := pseudorand.Int() % len(clients)
|
||||||
// Make sure a client is not sending to himself
|
// Make sure a client is not sending to himself
|
||||||
for clients[recipient_idx] == sender {
|
for clients[recipientIdx] == sender {
|
||||||
recipient_idx = pseudorand.Int() % len(clients)
|
recipientIdx = pseudorand.Int() % len(clients)
|
||||||
}
|
}
|
||||||
recipient := clients[recipient_idx]
|
recipient := clients[recipientIdx]
|
||||||
msgdata := MessagePayload{
|
msgdata := MessagePayload{
|
||||||
Now: now,
|
Now: now,
|
||||||
}
|
}
|
||||||
|
@ -405,7 +405,7 @@ func (c *SignalingClient) SendMessages(clients []*SignalingClient) {
|
||||||
Message: &signaling.MessageClientMessage{
|
Message: &signaling.MessageClientMessage{
|
||||||
Recipient: signaling.MessageClientMessageRecipient{
|
Recipient: signaling.MessageClientMessageRecipient{
|
||||||
Type: "session",
|
Type: "session",
|
||||||
SessionId: session_ids[recipient],
|
SessionId: sessionIds[recipient],
|
||||||
},
|
},
|
||||||
Data: (*json.RawMessage)(&data),
|
Data: (*json.RawMessage)(&data),
|
||||||
},
|
},
|
||||||
|
@ -589,16 +589,16 @@ func main() {
|
||||||
|
|
||||||
log.Printf("Starting %d clients", *maxClients)
|
log.Printf("Starting %d clients", *maxClients)
|
||||||
|
|
||||||
var done_wg sync.WaitGroup
|
var doneWg sync.WaitGroup
|
||||||
var ready_wg sync.WaitGroup
|
var readyWg sync.WaitGroup
|
||||||
|
|
||||||
for i := 0; i < *maxClients; i++ {
|
for i := 0; i < *maxClients; i++ {
|
||||||
client, err := NewSignalingClient(cookie, urls[i%len(urls)].String(), stats, &ready_wg, &done_wg)
|
client, err := NewSignalingClient(cookie, urls[i%len(urls)].String(), stats, &readyWg, &doneWg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
defer client.Close()
|
defer client.Close()
|
||||||
ready_wg.Add(1)
|
readyWg.Add(1)
|
||||||
|
|
||||||
request := &signaling.ClientMessage{
|
request := &signaling.ClientMessage{
|
||||||
Type: "hello",
|
Type: "hello",
|
||||||
|
@ -616,14 +616,14 @@ func main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Println("Clients created")
|
log.Println("Clients created")
|
||||||
ready_wg.Wait()
|
readyWg.Wait()
|
||||||
|
|
||||||
log.Println("All connections established")
|
log.Println("All connections established")
|
||||||
|
|
||||||
for _, c := range clients {
|
for _, c := range clients {
|
||||||
done_wg.Add(1)
|
doneWg.Add(1)
|
||||||
go func(c *SignalingClient) {
|
go func(c *SignalingClient) {
|
||||||
defer done_wg.Done()
|
defer doneWg.Done()
|
||||||
c.SendMessages(clients)
|
c.SendMessages(clients)
|
||||||
}(c)
|
}(c)
|
||||||
}
|
}
|
||||||
|
@ -646,5 +646,5 @@ loop:
|
||||||
for _, c := range clients {
|
for _, c := range clients {
|
||||||
c.Close()
|
c.Close()
|
||||||
}
|
}
|
||||||
done_wg.Wait()
|
doneWg.Wait()
|
||||||
}
|
}
|
||||||
|
|
|
@ -124,9 +124,11 @@ func NewClientSession(hub *Hub, privateId string, publicId string, data *Session
|
||||||
backendUrl += "/"
|
backendUrl += "/"
|
||||||
}
|
}
|
||||||
backendUrl += PathToOcsSignalingBackend
|
backendUrl += PathToOcsSignalingBackend
|
||||||
if u, err := url.Parse(backendUrl); err != nil {
|
u, err := url.Parse(backendUrl)
|
||||||
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else {
|
}
|
||||||
|
|
||||||
if strings.Contains(u.Host, ":") && hasStandardPort(u) {
|
if strings.Contains(u.Host, ":") && hasStandardPort(u) {
|
||||||
u.Host = u.Hostname()
|
u.Host = u.Hostname()
|
||||||
}
|
}
|
||||||
|
@ -134,7 +136,6 @@ func NewClientSession(hub *Hub, privateId string, publicId string, data *Session
|
||||||
s.backendUrl = backendUrl
|
s.backendUrl = backendUrl
|
||||||
s.parsedBackendUrl = u
|
s.parsedBackendUrl = u
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if err := s.SubscribeNats(hub.nats); err != nil {
|
if err := s.SubscribeNats(hub.nats); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -405,9 +406,9 @@ func (s *ClientSession) closeAndWait(wait bool) {
|
||||||
func GetSubjectForUserId(userId string, backend *Backend) string {
|
func GetSubjectForUserId(userId string, backend *Backend) string {
|
||||||
if backend == nil || backend.IsCompat() {
|
if backend == nil || backend.IsCompat() {
|
||||||
return GetEncodedSubject("user", userId)
|
return GetEncodedSubject("user", userId)
|
||||||
} else {
|
|
||||||
return GetEncodedSubject("user", userId+"|"+backend.Id())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return GetEncodedSubject("user", userId+"|"+backend.Id())
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *ClientSession) SubscribeNats(n NatsClient) error {
|
func (s *ClientSession) SubscribeNats(n NatsClient) error {
|
||||||
|
|
|
@ -4,7 +4,7 @@ package signaling
|
||||||
// Source: https://datahub.io/core/country-codes/r/country-codes.json
|
// Source: https://datahub.io/core/country-codes/r/country-codes.json
|
||||||
|
|
||||||
var (
|
var (
|
||||||
ContinentMap map[string][]string = map[string][]string{
|
ContinentMap = map[string][]string{
|
||||||
"AD": {"EU"},
|
"AD": {"EU"},
|
||||||
"AE": {"AS"},
|
"AE": {"AS"},
|
||||||
"AF": {"AS"},
|
"AF": {"AS"},
|
||||||
|
|
|
@ -70,7 +70,7 @@ func TestDeferredExecutor_Order(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
done := make(chan bool)
|
done := make(chan bool)
|
||||||
for x := 0; x < 10; x += 1 {
|
for x := 0; x < 10; x++ {
|
||||||
e.Execute(getFunc(x))
|
e.Execute(getFunc(x))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,7 +79,7 @@ func TestDeferredExecutor_Order(t *testing.T) {
|
||||||
})
|
})
|
||||||
<-done
|
<-done
|
||||||
|
|
||||||
for x := 0; x < 10; x += 1 {
|
for x := 0; x < 10; x++ {
|
||||||
if entries[x] != x {
|
if entries[x] != x {
|
||||||
t.Errorf("Expected %d at position %d, got %d", x, x, entries[x])
|
t.Errorf("Expected %d at position %d, got %d", x, x, entries[x])
|
||||||
}
|
}
|
||||||
|
|
11
geoip.go
11
geoip.go
|
@ -98,9 +98,9 @@ func (g *GeoLookup) Close() {
|
||||||
func (g *GeoLookup) Update() error {
|
func (g *GeoLookup) Update() error {
|
||||||
if g.isFile {
|
if g.isFile {
|
||||||
return g.updateFile()
|
return g.updateFile()
|
||||||
} else {
|
|
||||||
return g.updateUrl()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return g.updateUrl()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GeoLookup) updateFile() error {
|
func (g *GeoLookup) updateFile() error {
|
||||||
|
@ -233,11 +233,12 @@ func (g *GeoLookup) LookupCountry(ip net.IP) (string, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func LookupContinents(country string) []string {
|
func LookupContinents(country string) []string {
|
||||||
if continents, found := ContinentMap[country]; !found {
|
continents, found := ContinentMap[country]
|
||||||
|
if !found {
|
||||||
return nil
|
return nil
|
||||||
} else {
|
|
||||||
return continents
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return continents
|
||||||
}
|
}
|
||||||
|
|
||||||
func IsValidContinent(continent string) bool {
|
func IsValidContinent(continent string) bool {
|
||||||
|
|
14
hub_test.go
14
hub_test.go
|
@ -2061,7 +2061,7 @@ func TestClientMessageToSessionIdWhileDisconnected(t *testing.T) {
|
||||||
defer cancel2()
|
defer cancel2()
|
||||||
|
|
||||||
if err := checkReceiveClientMessage(ctx2, client2, "session", hello1.Hello, &payload); err != nil {
|
if err := checkReceiveClientMessage(ctx2, client2, "session", hello1.Hello, &payload); err != nil {
|
||||||
if err != NoMessageReceivedError {
|
if err != ErrNoMessageReceived {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -2194,7 +2194,7 @@ func TestRoomParticipantsListUpdateWhileDisconnected(t *testing.T) {
|
||||||
defer cancel2()
|
defer cancel2()
|
||||||
|
|
||||||
if err := checkReceiveClientMessage(ctx2, client2, "session", hello1.Hello, &payload); err != nil {
|
if err := checkReceiveClientMessage(ctx2, client2, "session", hello1.Hello, &payload); err != nil {
|
||||||
if err != NoMessageReceivedError {
|
if err != ErrNoMessageReceived {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -2310,7 +2310,7 @@ func TestClientTakeoverRoomSession(t *testing.T) {
|
||||||
ctx2, cancel2 := context.WithTimeout(context.Background(), 200*time.Millisecond)
|
ctx2, cancel2 := context.WithTimeout(context.Background(), 200*time.Millisecond)
|
||||||
defer cancel2()
|
defer cancel2()
|
||||||
|
|
||||||
if message, err := client2.RunUntilMessage(ctx2); err != nil && err != NoMessageReceivedError && err != context.DeadlineExceeded {
|
if message, err := client2.RunUntilMessage(ctx2); err != nil && err != ErrNoMessageReceived && err != context.DeadlineExceeded {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
} else if message != nil {
|
} else if message != nil {
|
||||||
t.Errorf("Expected no message, got %+v", message)
|
t.Errorf("Expected no message, got %+v", message)
|
||||||
|
@ -3049,7 +3049,7 @@ func TestNoSendBetweenSessionsOnDifferentBackends(t *testing.T) {
|
||||||
ctx2, cancel2 := context.WithTimeout(context.Background(), 100*time.Millisecond)
|
ctx2, cancel2 := context.WithTimeout(context.Background(), 100*time.Millisecond)
|
||||||
defer cancel2()
|
defer cancel2()
|
||||||
if err := checkReceiveClientMessage(ctx2, client1, "session", hello2.Hello, &payload); err != nil {
|
if err := checkReceiveClientMessage(ctx2, client1, "session", hello2.Hello, &payload); err != nil {
|
||||||
if err != NoMessageReceivedError {
|
if err != ErrNoMessageReceived {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -3059,7 +3059,7 @@ func TestNoSendBetweenSessionsOnDifferentBackends(t *testing.T) {
|
||||||
ctx3, cancel3 := context.WithTimeout(context.Background(), 100*time.Millisecond)
|
ctx3, cancel3 := context.WithTimeout(context.Background(), 100*time.Millisecond)
|
||||||
defer cancel3()
|
defer cancel3()
|
||||||
if err := checkReceiveClientMessage(ctx3, client2, "session", hello1.Hello, &payload); err != nil {
|
if err := checkReceiveClientMessage(ctx3, client2, "session", hello1.Hello, &payload); err != nil {
|
||||||
if err != NoMessageReceivedError {
|
if err != ErrNoMessageReceived {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -3159,7 +3159,7 @@ func TestNoSameRoomOnDifferentBackends(t *testing.T) {
|
||||||
ctx2, cancel2 := context.WithTimeout(context.Background(), 100*time.Millisecond)
|
ctx2, cancel2 := context.WithTimeout(context.Background(), 100*time.Millisecond)
|
||||||
defer cancel2()
|
defer cancel2()
|
||||||
if err := checkReceiveClientMessage(ctx2, client1, "session", hello2.Hello, &payload); err != nil {
|
if err := checkReceiveClientMessage(ctx2, client1, "session", hello2.Hello, &payload); err != nil {
|
||||||
if err != NoMessageReceivedError {
|
if err != ErrNoMessageReceived {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -3169,7 +3169,7 @@ func TestNoSameRoomOnDifferentBackends(t *testing.T) {
|
||||||
ctx3, cancel3 := context.WithTimeout(context.Background(), 100*time.Millisecond)
|
ctx3, cancel3 := context.WithTimeout(context.Background(), 100*time.Millisecond)
|
||||||
defer cancel3()
|
defer cancel3()
|
||||||
if err := checkReceiveClientMessage(ctx3, client2, "session", hello1.Hello, &payload); err != nil {
|
if err := checkReceiveClientMessage(ctx3, client2, "session", hello1.Hello, &payload); err != nil {
|
||||||
if err != NoMessageReceivedError {
|
if err != ErrNoMessageReceived {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -454,6 +454,7 @@ func (gateway *JanusGateway) recv() {
|
||||||
if base.Handle == 0 {
|
if base.Handle == 0 {
|
||||||
// Nope. No idea what's going on...
|
// Nope. No idea what's going on...
|
||||||
// Error()
|
// Error()
|
||||||
|
log.Printf("Received event without handle, ignoring: %s", decodeBuffer.String())
|
||||||
} else {
|
} else {
|
||||||
// Lookup Session
|
// Lookup Session
|
||||||
gateway.Lock()
|
gateway.Lock()
|
||||||
|
@ -489,6 +490,7 @@ func (gateway *JanusGateway) recv() {
|
||||||
gateway.Unlock()
|
gateway.Unlock()
|
||||||
if transaction == nil {
|
if transaction == nil {
|
||||||
// Error()
|
// Error()
|
||||||
|
log.Printf("Received event for unknown transaction, ignoring: %s", decodeBuffer.String())
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
13
mcu_janus.go
13
mcu_janus.go
|
@ -291,18 +291,17 @@ func (m *mcuJanus) Start() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Printf("Connected to %s %s by %s", info.Name, info.VersionString, info.Author)
|
log.Printf("Connected to %s %s by %s", info.Name, info.VersionString, info.Author)
|
||||||
if plugin, found := info.Plugins[pluginVideoRoom]; !found {
|
plugin, found := info.Plugins[pluginVideoRoom]
|
||||||
|
if !found {
|
||||||
return fmt.Errorf("Plugin %s is not supported", pluginVideoRoom)
|
return fmt.Errorf("Plugin %s is not supported", pluginVideoRoom)
|
||||||
} else {
|
|
||||||
log.Printf("Found %s %s by %s", plugin.Name, plugin.VersionString, plugin.Author)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.Printf("Found %s %s by %s", plugin.Name, plugin.VersionString, plugin.Author)
|
||||||
if !info.DataChannels {
|
if !info.DataChannels {
|
||||||
return fmt.Errorf("Data channels are not supported")
|
return fmt.Errorf("Data channels are not supported")
|
||||||
} else {
|
|
||||||
log.Println("Data channels are supported")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.Println("Data channels are supported")
|
||||||
if !info.FullTrickle {
|
if !info.FullTrickle {
|
||||||
log.Println("WARNING: Full-Trickle is NOT enabled in Janus!")
|
log.Println("WARNING: Full-Trickle is NOT enabled in Janus!")
|
||||||
} else {
|
} else {
|
||||||
|
@ -709,9 +708,9 @@ func (m *mcuJanus) SubscriberDisconnected(id string, publisher string, streamTyp
|
||||||
func min(a, b int) int {
|
func min(a, b int) int {
|
||||||
if a <= b {
|
if a <= b {
|
||||||
return a
|
return a
|
||||||
} else {
|
|
||||||
return b
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return b
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *mcuJanus) getOrCreatePublisherHandle(ctx context.Context, id string, streamType string, bitrate int) (*JanusHandle, uint64, uint64, error) {
|
func (m *mcuJanus) getOrCreatePublisherHandle(ctx context.Context, id string, streamType string, bitrate int) (*JanusHandle, uint64, uint64, error) {
|
||||||
|
|
2
pool.go
2
pool.go
|
@ -42,7 +42,7 @@ func NewHttpClientPool(constructor func() *http.Client, size int) (*HttpClientPo
|
||||||
for size > 0 {
|
for size > 0 {
|
||||||
c := constructor()
|
c := constructor()
|
||||||
p.pool <- c
|
p.pool <- c
|
||||||
size -= 1
|
size--
|
||||||
}
|
}
|
||||||
return p, nil
|
return p, nil
|
||||||
}
|
}
|
||||||
|
|
8
room.go
8
room.go
|
@ -84,17 +84,17 @@ type Room struct {
|
||||||
func GetSubjectForRoomId(roomId string, backend *Backend) string {
|
func GetSubjectForRoomId(roomId string, backend *Backend) string {
|
||||||
if backend == nil || backend.IsCompat() {
|
if backend == nil || backend.IsCompat() {
|
||||||
return GetEncodedSubject("room", roomId)
|
return GetEncodedSubject("room", roomId)
|
||||||
} else {
|
|
||||||
return GetEncodedSubject("room", roomId+"|"+backend.Id())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return GetEncodedSubject("room", roomId+"|"+backend.Id())
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetSubjectForBackendRoomId(roomId string, backend *Backend) string {
|
func GetSubjectForBackendRoomId(roomId string, backend *Backend) string {
|
||||||
if backend == nil || backend.IsCompat() {
|
if backend == nil || backend.IsCompat() {
|
||||||
return GetEncodedSubject("backend.room", roomId)
|
return GetEncodedSubject("backend.room", roomId)
|
||||||
} else {
|
|
||||||
return GetEncodedSubject("backend.room", roomId+"|"+backend.Id())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return GetEncodedSubject("backend.room", roomId+"|"+backend.Id())
|
||||||
}
|
}
|
||||||
|
|
||||||
func getRoomIdForBackend(id string, backend *Backend) string {
|
func getRoomIdForBackend(id string, backend *Backend) string {
|
||||||
|
|
|
@ -69,9 +69,10 @@ func (r *BuiltinRoomSessions) DeleteRoomSession(session Session) {
|
||||||
func (r *BuiltinRoomSessions) GetSessionId(roomSessionId string) (string, error) {
|
func (r *BuiltinRoomSessions) GetSessionId(roomSessionId string) (string, error) {
|
||||||
r.mu.Lock()
|
r.mu.Lock()
|
||||||
defer r.mu.Unlock()
|
defer r.mu.Unlock()
|
||||||
if sid, found := r.roomSessionToSessionid[roomSessionId]; !found {
|
sid, found := r.roomSessionToSessionid[roomSessionId]
|
||||||
|
if !found {
|
||||||
return "", ErrNoSuchRoomSession
|
return "", ErrNoSuchRoomSession
|
||||||
} else {
|
|
||||||
return sid, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return sid, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,7 +72,7 @@ def generate_map(filename):
|
||||||
out.write('// Source: %s\n' % (URL))
|
out.write('// Source: %s\n' % (URL))
|
||||||
out.write('\n')
|
out.write('\n')
|
||||||
out.write('var (\n')
|
out.write('var (\n')
|
||||||
out.write('\tContinentMap map[string][]string = map[string][]string{\n')
|
out.write('\tContinentMap = map[string][]string{\n')
|
||||||
for country, continents in sorted(continents.items()):
|
for country, continents in sorted(continents.items()):
|
||||||
value = []
|
value = []
|
||||||
for continent in continents:
|
for continent in continents:
|
||||||
|
|
|
@ -68,9 +68,9 @@ func createListener(addr string) (net.Listener, error) {
|
||||||
if addr[0] == '/' {
|
if addr[0] == '/' {
|
||||||
os.Remove(addr)
|
os.Remove(addr)
|
||||||
return net.Listen("unix", addr)
|
return net.Listen("unix", addr)
|
||||||
} else {
|
|
||||||
return net.Listen("tcp", addr)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return net.Listen("tcp", addr)
|
||||||
}
|
}
|
||||||
|
|
||||||
func createTLSListener(addr string, certFile, keyFile string) (net.Listener, error) {
|
func createTLSListener(addr string, certFile, keyFile string) (net.Listener, error) {
|
||||||
|
@ -84,9 +84,9 @@ func createTLSListener(addr string, certFile, keyFile string) (net.Listener, err
|
||||||
if addr[0] == '/' {
|
if addr[0] == '/' {
|
||||||
os.Remove(addr)
|
os.Remove(addr)
|
||||||
return tls.Listen("unix", addr, &config)
|
return tls.Listen("unix", addr, &config)
|
||||||
} else {
|
|
||||||
return tls.Listen("tcp", addr, &config)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return tls.Listen("tcp", addr, &config)
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
|
@ -41,7 +41,7 @@ var (
|
||||||
testBackendSecret = []byte("secret")
|
testBackendSecret = []byte("secret")
|
||||||
testInternalSecret = []byte("internal-secret")
|
testInternalSecret = []byte("internal-secret")
|
||||||
|
|
||||||
NoMessageReceivedError = fmt.Errorf("No message was received by the server.")
|
ErrNoMessageReceived = fmt.Errorf("no message was received by the server")
|
||||||
)
|
)
|
||||||
|
|
||||||
type TestBackendClientAuthParams struct {
|
type TestBackendClientAuthParams struct {
|
||||||
|
@ -87,7 +87,7 @@ func toJsonString(o interface{}) string {
|
||||||
|
|
||||||
func checkMessageType(message *ServerMessage, expectedType string) error {
|
func checkMessageType(message *ServerMessage, expectedType string) error {
|
||||||
if message == nil {
|
if message == nil {
|
||||||
return NoMessageReceivedError
|
return ErrNoMessageReceived
|
||||||
}
|
}
|
||||||
|
|
||||||
if message.Type != expectedType {
|
if message.Type != expectedType {
|
||||||
|
@ -546,7 +546,8 @@ func (c *TestClient) checkSingleMessageJoined(message *ServerMessage) error {
|
||||||
func (c *TestClient) checkMessageJoinedSession(message *ServerMessage, sessionId string, userId string) error {
|
func (c *TestClient) checkMessageJoinedSession(message *ServerMessage, sessionId string, userId string) error {
|
||||||
if err := c.checkSingleMessageJoined(message); err != nil {
|
if err := c.checkSingleMessageJoined(message); err != nil {
|
||||||
return err
|
return err
|
||||||
} else {
|
}
|
||||||
|
|
||||||
evt := message.Event.Join[0]
|
evt := message.Event.Join[0]
|
||||||
if sessionId != "" && evt.SessionId != sessionId {
|
if sessionId != "" && evt.SessionId != sessionId {
|
||||||
return fmt.Errorf("Expected join session id %+v, got %+v",
|
return fmt.Errorf("Expected join session id %+v, got %+v",
|
||||||
|
@ -555,15 +556,16 @@ func (c *TestClient) checkMessageJoinedSession(message *ServerMessage, sessionId
|
||||||
if evt.UserId != userId {
|
if evt.UserId != userId {
|
||||||
return fmt.Errorf("Expected join user id %s, got %+v", userId, evt)
|
return fmt.Errorf("Expected join user id %s, got %+v", userId, evt)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *TestClient) RunUntilJoined(ctx context.Context, hello ...*HelloServerMessage) error {
|
func (c *TestClient) RunUntilJoined(ctx context.Context, hello ...*HelloServerMessage) error {
|
||||||
for len(hello) > 0 {
|
for len(hello) > 0 {
|
||||||
if message, err := c.RunUntilMessage(ctx); err != nil {
|
message, err := c.RunUntilMessage(ctx)
|
||||||
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
} else {
|
}
|
||||||
|
|
||||||
if err := c.checkSingleMessageJoined(message); err != nil {
|
if err := c.checkSingleMessageJoined(message); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -579,7 +581,6 @@ func (c *TestClient) RunUntilJoined(ctx context.Context, hello ...*HelloServerMe
|
||||||
return fmt.Errorf("expected one of the passed hello sessions, got %+v", message.Event.Join[0])
|
return fmt.Errorf("expected one of the passed hello sessions, got %+v", message.Event.Join[0])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -604,11 +605,12 @@ func (c *TestClient) checkMessageRoomLeaveSession(message *ServerMessage, sessio
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *TestClient) RunUntilLeft(ctx context.Context, hello *HelloServerMessage) error {
|
func (c *TestClient) RunUntilLeft(ctx context.Context, hello *HelloServerMessage) error {
|
||||||
if message, err := c.RunUntilMessage(ctx); err != nil {
|
message, err := c.RunUntilMessage(ctx)
|
||||||
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
} else {
|
|
||||||
return c.checkMessageRoomLeave(message, hello)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return c.checkMessageRoomLeave(message, hello)
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkMessageRoomlistUpdate(message *ServerMessage) (*RoomEventServerMessage, error) {
|
func checkMessageRoomlistUpdate(message *ServerMessage) (*RoomEventServerMessage, error) {
|
||||||
|
@ -624,11 +626,12 @@ func checkMessageRoomlistUpdate(message *ServerMessage) (*RoomEventServerMessage
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *TestClient) RunUntilRoomlistUpdate(ctx context.Context) (*RoomEventServerMessage, error) {
|
func (c *TestClient) RunUntilRoomlistUpdate(ctx context.Context) (*RoomEventServerMessage, error) {
|
||||||
if message, err := c.RunUntilMessage(ctx); err != nil {
|
message, err := c.RunUntilMessage(ctx)
|
||||||
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else {
|
|
||||||
return checkMessageRoomlistUpdate(message)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return checkMessageRoomlistUpdate(message)
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkMessageRoomlistDisinvite(message *ServerMessage) (*RoomDisinviteEventServerMessage, error) {
|
func checkMessageRoomlistDisinvite(message *ServerMessage) (*RoomDisinviteEventServerMessage, error) {
|
||||||
|
@ -644,11 +647,12 @@ func checkMessageRoomlistDisinvite(message *ServerMessage) (*RoomDisinviteEventS
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *TestClient) RunUntilRoomlistDisinvite(ctx context.Context) (*RoomDisinviteEventServerMessage, error) {
|
func (c *TestClient) RunUntilRoomlistDisinvite(ctx context.Context) (*RoomDisinviteEventServerMessage, error) {
|
||||||
if message, err := c.RunUntilMessage(ctx); err != nil {
|
message, err := c.RunUntilMessage(ctx)
|
||||||
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else {
|
|
||||||
return checkMessageRoomlistDisinvite(message)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return checkMessageRoomlistDisinvite(message)
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkMessageParticipantsInCall(message *ServerMessage) (*RoomEventServerMessage, error) {
|
func checkMessageParticipantsInCall(message *ServerMessage) (*RoomEventServerMessage, error) {
|
||||||
|
@ -688,11 +692,12 @@ func checkMessageRoomMessage(message *ServerMessage) (*RoomEventMessage, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *TestClient) RunUntilRoomMessage(ctx context.Context) (*RoomEventMessage, error) {
|
func (c *TestClient) RunUntilRoomMessage(ctx context.Context) (*RoomEventMessage, error) {
|
||||||
if message, err := c.RunUntilMessage(ctx); err != nil {
|
message, err := c.RunUntilMessage(ctx)
|
||||||
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else {
|
|
||||||
return checkMessageRoomMessage(message)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return checkMessageRoomMessage(message)
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkMessageError(message *ServerMessage, msgid string) error {
|
func checkMessageError(message *ServerMessage, msgid string) error {
|
||||||
|
|
Loading…
Reference in a new issue