From 81147c4bc6095fdc74cab10889ae6adfa1f8a5d8 Mon Sep 17 00:00:00 2001 From: Corey Johnson & Matt Colyer Date: Tue, 23 Jul 2013 13:45:38 -0700 Subject: [PATCH] Add TURN server support for all WebRTC connections --- src/packages/collaboration/lib/guest-session.coffee | 9 ++++----- src/packages/collaboration/lib/host-session.coffee | 9 ++++----- src/packages/collaboration/lib/session-utils.coffee | 8 ++++++-- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/packages/collaboration/lib/guest-session.coffee b/src/packages/collaboration/lib/guest-session.coffee index b847862f3..3fe7c70fd 100644 --- a/src/packages/collaboration/lib/guest-session.coffee +++ b/src/packages/collaboration/lib/guest-session.coffee @@ -7,7 +7,7 @@ patrick = require 'patrick' telepath = require 'telepath' Project = require 'project' -{connectDocument, createPeer} = require './session-utils' +sessionUtils = require './session-utils' module.exports = class GuestSession @@ -19,7 +19,7 @@ class GuestSession stream: null constructor: (sessionId) -> - @peer = createPeer() + @peer = sessionUtils.createPeer() connection = @peer.connect(sessionId, reliable: true) connection.on 'open', => @@ -35,12 +35,11 @@ class GuestSession window.site = new telepath.Site(@getId()) doc = window.site.deserializeDocument(data.doc) - servers = {iceServers: [{url: "stun:54.218.196.152:3478"}, {url: "turn:ninefingers@54.218.196.152:3478", credential:"youhavetoberealistic"}]} mediaConnection = null constraints = {video: true, audio: true} success = (stream) => - mediaConnection = new webkitRTCPeerConnection(servers) + mediaConnection = new webkitRTCPeerConnection(sessionUtils.getIceServers()) mediaConnection.onicecandidate = (event) => return unless event.candidate? console.log "Set Guest Candidate", event.candidate @@ -86,7 +85,7 @@ class GuestSession else throw new Error("Unknown host key '#{key}'") - connectDocument(doc, connection) + sessionUtils.connectDocument(doc, connection) @mirrorRepository(data.repoSnapshot) mirrorRepository: (repoSnapshot) -> diff --git a/src/packages/collaboration/lib/host-session.coffee b/src/packages/collaboration/lib/host-session.coffee index 62dfbd042..c640ed1c1 100644 --- a/src/packages/collaboration/lib/host-session.coffee +++ b/src/packages/collaboration/lib/host-session.coffee @@ -4,7 +4,7 @@ _ = require 'underscore' patrick = require 'patrick' telepath = require 'telepath' -{createPeer, connectDocument} = require './session-utils' +sessionUtils = require './session-utils' module.exports = class HostSession @@ -19,12 +19,11 @@ class HostSession start: -> return if @peer? - servers = {iceServers: [{url: "stun:54.218.196.152:3478"}, {url: "turn:ninefingers@54.218.196.152:3478", credential:"youhavetoberealistic"}]} mediaConnection = null constraints = {video: true, audio: true} success = (stream) => - mediaConnection = new webkitRTCPeerConnection(servers) + mediaConnection = new webkitRTCPeerConnection(sessionUtils.getIceServers()) mediaConnection.onicecandidate = (event) => return unless event.candidate? console.log "Set Host Candidate", event.candidate @@ -37,7 +36,7 @@ class HostSession mediaConnection.addStream(stream) navigator.webkitGetUserMedia constraints, success, console.error - @peer = createPeer() + @peer = sessionUtils.createPeer() @doc = site.createDocument({}) @doc.set('windowState', atom.windowState) patrick.snapshot project.getPath(), (error, repoSnapshot) => @@ -96,7 +95,7 @@ class HostSession connection.on 'open', => console.log 'sending document' connection.send({repoSnapshot, doc: @doc.serialize()}) - connectDocument(@doc, connection) + sessionUtils.connectDocument(@doc, connection) connection.on 'close', => console.log 'sharing session stopped' diff --git a/src/packages/collaboration/lib/session-utils.coffee b/src/packages/collaboration/lib/session-utils.coffee index d0dd8f137..ca6b0c00f 100644 --- a/src/packages/collaboration/lib/session-utils.coffee +++ b/src/packages/collaboration/lib/session-utils.coffee @@ -21,11 +21,15 @@ module.exports = getSessionUrl: (sessionId) -> "atom://session/#{sessionId}" + getIceServers: -> + stunServer = {url: "stun:54.218.196.152:3478"} + turnServer = {url: "turn:ninefingers@54.218.196.152:3478", credential:"youhavetoberealistic"} + iceServers: [stunServer, turnServer] + createPeer: -> id = Guid.create().toString() key = '0njqmaln320dlsor' - # config = {iceServers: [{url: "turn:ninefingers@54.218.196.152:3478", credential:"youhavetoberealistic"}]} - config = {iceServers: [{url: "stun:54.218.196.152:3478"}, {url: "turn:ninefingers@54.218.196.152:3478", credential:"youhavetoberealistic"}]} + config = @getIceServers() new Peer(id, {key, config}) connectDocument: (doc, connection) ->