better checks on receiveOffer (#11)

This commit is contained in:
Serene Han 2016-03-15 20:13:39 -07:00
parent b1e76420bd
commit 490b8b33b7
3 changed files with 30 additions and 25 deletions

View file

@ -51,7 +51,9 @@ class ProxyPair
@client = channel
receiveWebRTCOffer: (offer) ->
console.assert 'offer' == offer.type
if 'offer' != offer.type
log 'Invalid SDP received -- was not an offer.'
return false
try
err = @pc.setRemoteDescription offer
catch e

View file

@ -52,7 +52,6 @@ class Snowflake
relayAddr: null
proxyPairs: []
rateLimit: null
state: MODE.INIT
retries: 0
@ -108,16 +107,8 @@ class Snowflake
log 'No more available ProxyPair slots.'
countdown(err, DEFAULT_BROKER_POLL_INTERVAL / 1000)
return
log 'Polling for ' + pair.id
recv = @broker.getClientOffer pair.id
recv.then (desc) =>
offer = JSON.parse desc
dbg 'Received:\n\n' + offer.sdp + '\n'
console.log desc
sdp = new RTCSessionDescription offer
# @receiveOffer offer
if pair.receiveWebRTCOffer sdp
@sendAnswer pair if 'offer' == sdp.type
recv.then (desc) => @receiveOffer pair, desc
, (err) ->
countdown(err, DEFAULT_BROKER_POLL_INTERVAL / 1000)
@retries++
@ -129,12 +120,16 @@ class Snowflake
return @proxyPairs.find (pp, i, arr) -> return !pp.active
# Receive an SDP offer from some client assigned by the Broker,
# TODO: remove
receiveOffer: (desc) =>
sdp = new RTCSessionDescription desc
pair = @nextAvailableProxyPair()
if pair.receiveWebRTCOffer sdp
@sendAnswer pair if 'offer' == sdp.type
# |pair| - an available ProxyPair.
receiveOffer: (pair, desc) =>
console.assert !pair.active
try
offer = JSON.parse desc
dbg 'Received:\n\n' + offer.sdp + '\n'
sdp = new RTCSessionDescription offer
@sendAnswer pair if pair.receiveWebRTCOffer sdp
catch e
log 'ERROR: Unable to receive Offer: ' + e
sendAnswer: (pair) ->
next = (sdp) ->

View file

@ -47,14 +47,22 @@ describe 'Snowflake', ->
expect(s.retries).toBe 1
expect(s.broker.getClientOffer).toHaveBeenCalled()
it 'receives SDP offer', ->
it 'receives SDP offer and sends answer', ->
s = new Snowflake(new FakeBroker(), fakeUI)
s.proxyPairs[0] = { receiveWebRTCOffer: -> }
spyOn(s.proxyPairs[0], 'receiveWebRTCOffer').and.returnValue true
pair = { receiveWebRTCOffer: -> }
spyOn(pair, 'receiveWebRTCOffer').and.returnValue true
spyOn(s, 'sendAnswer')
s.receiveOffer { 'type': 'offer', 'sdp': 'foo' }
s.receiveOffer pair, '{"type":"offer","sdp":"foo"}'
expect(s.sendAnswer).toHaveBeenCalled()
it 'does not send answer when receiving invalid offer', ->
s = new Snowflake(new FakeBroker(), fakeUI)
pair = { receiveWebRTCOffer: -> }
spyOn(pair, 'receiveWebRTCOffer').and.returnValue false
spyOn(s, 'sendAnswer')
s.receiveOffer pair, '{"type":"not a good offer","sdp":"foo"}'
expect(s.sendAnswer).not.toHaveBeenCalled()
it 'can make a proxypair', ->
s = new Snowflake(new FakeBroker(), fakeUI)
s.makeProxyPair()