Browse Source

Validate Offer and Answer content, so only events without _token key are triggered as channelling event to bus.

pull/265/head
Simon Eisenmann 10 years ago
parent
commit
a2f0830c79
  1. 4
      src/app/spreed-webrtc-server/channelling.go
  2. 21
      src/app/spreed-webrtc-server/channelling_api.go

4
src/app/spreed-webrtc-server/channelling.go

@ -63,7 +63,7 @@ type DataRoom struct {
type DataOffer struct { type DataOffer struct {
Type string Type string
To string To string
Offer interface{} Offer map[string]interface{}
} }
type DataCandidate struct { type DataCandidate struct {
@ -75,7 +75,7 @@ type DataCandidate struct {
type DataAnswer struct { type DataAnswer struct {
Type string Type string
To string To string
Answer interface{} Answer map[string]interface{}
} }
type DataSelf struct { type DataSelf struct {

21
src/app/spreed-webrtc-server/channelling_api.go

@ -88,30 +88,35 @@ func (api *channellingAPI) OnIncoming(sender Sender, session *Session, msg *Data
return api.HandleHello(session, msg.Hello, sender) return api.HandleHello(session, msg.Hello, sender)
case "Offer": case "Offer":
if msg.Offer == nil { if msg.Offer == nil || msg.Offer.Offer == nil {
log.Println("Received invalid offer message.", msg) log.Println("Received invalid offer message.", msg)
break break
} }
api.Trigger(BusManagerOffer, session.Id, msg.Offer.To, nil) if _, ok := msg.Offer.Offer["_token"]; !ok {
// Trigger offer event when offer has no token, so this is
// not triggered for peerxfer and peerscreenshare offers.
api.Trigger(BusManagerOffer, session.Id, msg.Offer.To, nil)
}
// TODO(longsleep): Validate offer
session.Unicast(msg.Offer.To, msg.Offer) session.Unicast(msg.Offer.To, msg.Offer)
case "Candidate": case "Candidate":
if msg.Candidate == nil { if msg.Candidate == nil || msg.Candidate.Candidate == nil {
log.Println("Received invalid candidate message.", msg) log.Println("Received invalid candidate message.", msg)
break break
} }
// TODO(longsleep): Validate candidate
session.Unicast(msg.Candidate.To, msg.Candidate) session.Unicast(msg.Candidate.To, msg.Candidate)
case "Answer": case "Answer":
if msg.Answer == nil { if msg.Answer == nil || msg.Answer.Answer == nil {
log.Println("Received invalid answer message.", msg) log.Println("Received invalid answer message.", msg)
break break
} }
api.Trigger(BusManagerAnswer, session.Id, msg.Answer.To, nil) if _, ok := msg.Answer.Answer["_token"]; !ok {
// Trigger answer event when answer has no token. so this is
// not triggered for peerxfer and peerscreenshare answers.
api.Trigger(BusManagerAnswer, session.Id, msg.Answer.To, nil)
}
// TODO(longsleep): Validate Answer
session.Unicast(msg.Answer.To, msg.Answer) session.Unicast(msg.Answer.To, msg.Answer)
case "Users": case "Users":
return api.HandleUsers(session) return api.HandleUsers(session)

Loading…
Cancel
Save