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 9 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 { @@ -63,7 +63,7 @@ type DataRoom struct {
type DataOffer struct {
Type string
To string
Offer interface{}
Offer map[string]interface{}
}
type DataCandidate struct {
@ -75,7 +75,7 @@ type DataCandidate struct { @@ -75,7 +75,7 @@ type DataCandidate struct {
type DataAnswer struct {
Type string
To string
Answer interface{}
Answer map[string]interface{}
}
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 @@ -88,30 +88,35 @@ func (api *channellingAPI) OnIncoming(sender Sender, session *Session, msg *Data
return api.HandleHello(session, msg.Hello, sender)
case "Offer":
if msg.Offer == nil {
if msg.Offer == nil || msg.Offer.Offer == nil {
log.Println("Received invalid offer message.", msg)
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)
case "Candidate":
if msg.Candidate == nil {
if msg.Candidate == nil || msg.Candidate.Candidate == nil {
log.Println("Received invalid candidate message.", msg)
break
}
// TODO(longsleep): Validate candidate
session.Unicast(msg.Candidate.To, msg.Candidate)
case "Answer":
if msg.Answer == nil {
if msg.Answer == nil || msg.Answer.Answer == nil {
log.Println("Received invalid answer message.", msg)
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)
case "Users":
return api.HandleUsers(session)

Loading…
Cancel
Save