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. 12
      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) {
if incoming, err := client.DecodeIncoming(b); err == nil { if incoming, err := client.DecodeIncoming(b); err == nil {
client.OnIncoming(client, client.session, incoming) client.OnIncoming(client, client.session, incoming)
} else { } else {
log.Println("OnText error while decoding JSON", err) log.Println("OnText error while processing incoming message", err)
log.Printf("JSON:\n%s\n", b)
} }
} }

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

@ -24,6 +24,7 @@ package main
import ( import (
"bytes" "bytes"
"encoding/json" "encoding/json"
"errors"
"log" "log"
) )
@ -42,11 +43,12 @@ type Codec interface {
} }
type incomingCodec struct { type incomingCodec struct {
buffers BufferCache buffers BufferCache
incomingLimit int
} }
func NewCodec() Codec { func NewCodec(incomingLimit int) Codec {
return &incomingCodec{NewBufferCache(1024, bytes.MinRead)} return &incomingCodec{NewBufferCache(1024, bytes.MinRead), incomingLimit}
} }
func (codec incomingCodec) NewBuffer() Buffer { func (codec incomingCodec) NewBuffer() Buffer {
@ -54,6 +56,10 @@ func (codec incomingCodec) NewBuffer() Buffer {
} }
func (codec incomingCodec) DecodeIncoming(b Buffer) (*DataIncoming, error) { 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{} incoming := &DataIncoming{}
return incoming, json.Unmarshal(b.Bytes(), incoming) 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 {
log.Printf("Loaded extra templates from: %s", extraFolder) 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. // Create realm string from config.
computedRealm := fmt.Sprintf("%s.%s", serverRealm, config.Token) computedRealm := fmt.Sprintf("%s.%s", serverRealm, config.Token)
@ -336,7 +339,7 @@ func runner(runtime phoenix.Runtime) error {
// Add handlers. // Add handlers.
buddyImages := NewImageCache() buddyImages := NewImageCache()
codec := NewCodec() codec := NewCodec(incomingCodecLimit)
roomManager := NewRoomManager(config, codec) roomManager := NewRoomManager(config, codec)
hub := NewHub(config, sessionSecret, encryptionSecret, turnSecret, codec) hub := NewHub(config, sessionSecret, encryptionSecret, turnSecret, codec)
tickets := NewTickets(sessionSecret, encryptionSecret, computedRealm) tickets := NewTickets(sessionSecret, encryptionSecret, computedRealm)

Loading…
Cancel
Save