Browse Source

Ignore incoming channelling messages larger than 1MB.

pull/198/head
Simon Eisenmann 11 years ago
parent
commit
56b2aa093e
  1. 3
      src/app/spreed-webrtc-server/client.go
  2. 10
      src/app/spreed-webrtc-server/incoming_codec.go
  3. 5
      src/app/spreed-webrtc-server/main.go

3
src/app/spreed-webrtc-server/client.go

@ -71,8 +71,7 @@ func (client *client) OnText(b Buffer) { @@ -71,8 +71,7 @@ func (client *client) OnText(b Buffer) {
if incoming, err := client.DecodeIncoming(b); err == nil {
client.OnIncoming(client, client.session, incoming)
} else {
log.Println("OnText error while decoding JSON", err)
log.Printf("JSON:\n%s\n", b)
log.Println("OnText error while processing incoming message", err)
}
}

10
src/app/spreed-webrtc-server/incoming_codec.go

@ -24,6 +24,7 @@ package main @@ -24,6 +24,7 @@ package main
import (
"bytes"
"encoding/json"
"errors"
"log"
)
@ -43,10 +44,11 @@ type Codec interface { @@ -43,10 +44,11 @@ type Codec interface {
type incomingCodec struct {
buffers BufferCache
incomingLimit int
}
func NewCodec() Codec {
return &incomingCodec{NewBufferCache(1024, bytes.MinRead)}
func NewCodec(incomingLimit int) Codec {
return &incomingCodec{NewBufferCache(1024, bytes.MinRead), incomingLimit}
}
func (codec incomingCodec) NewBuffer() Buffer {
@ -54,6 +56,10 @@ func (codec incomingCodec) NewBuffer() Buffer { @@ -54,6 +56,10 @@ func (codec incomingCodec) NewBuffer() Buffer {
}
func (codec incomingCodec) DecodeIncoming(b Buffer) (*DataIncoming, error) {
length := b.GetBuffer().Len()
if length > codec.incomingLimit {
return nil, errors.New("Incoming message size limit exceeded")
}
incoming := &DataIncoming{}
return incoming, json.Unmarshal(b.Bytes(), incoming)
}

5
src/app/spreed-webrtc-server/main.go

@ -280,6 +280,9 @@ func runner(runtime phoenix.Runtime) error { @@ -280,6 +280,9 @@ func runner(runtime phoenix.Runtime) error {
log.Printf("Loaded extra templates from: %s", extraFolder)
}
// Define incoming channeling API limit it byte. Larger messages will be discarded.
incomingCodecLimit := 1024 * 1024 // 1MB
// Create realm string from config.
computedRealm := fmt.Sprintf("%s.%s", serverRealm, config.Token)
@ -336,7 +339,7 @@ func runner(runtime phoenix.Runtime) error { @@ -336,7 +339,7 @@ func runner(runtime phoenix.Runtime) error {
// Add handlers.
buddyImages := NewImageCache()
codec := NewCodec()
codec := NewCodec(incomingCodecLimit)
roomManager := NewRoomManager(config, codec)
hub := NewHub(config, sessionSecret, encryptionSecret, turnSecret, codec)
tickets := NewTickets(sessionSecret, encryptionSecret, computedRealm)

Loading…
Cancel
Save