                 return
             , constraints
 
+    # Create answer from offer and send the answer to the guest.
     peerConnection.peerCreateAnswer = (offer) =>
         if offer?
             peerConnection.setRemoteDescription new SessionDescription(offer)


###

window.RTCPeerConnection = window.webkitRTCPeerConnection or window.mozRTCPeerConnection or window.RTCPeerConnection
window.SessionDescription = window.RTCSessionDescription or window.mozRTCSessionDescription or window.RTCSessionDescription
window.IceCandidate = window.RTCIceCandidate or window.mozRTCIceCandidate or window.RTCIceCandidate

navigator.getUserMedia = navigator.webkitGetUserMedia or navigator.mozGetUserMedia or navigator.getUserMedia

window.defaults = {
    iceServers: { "iceServers": [{ "url": "stun:stun.ekiga.net" }] },
    constraints: { 'mandatory': { 'OfferToReceiveAudio': true, 'OfferToReceiveVideo': true } }
    optional: { optional: [{ RtpDataChannels: true}] }
}

Runnable                = () ->
    if RTCPeerConnection? and navigator.getUserMedia?
        return true

    peerConnection.peerCreateOffer options.onoffer
    peerConnection.peerCreateAnswer options.offer

    # Set the peerConnection description on answer.
    peerConnection.onanswer         = (sdp) =>
          peerConnection.setRemoteDescription new SessionDescription(sdp)

    # Add new ice candidate.
    peerConnection.addice           = (candidate) => 
          peerConnection.addIceCandidate(new IceCandidate {
                sdpMLineIndex: candidate.sdpMLineIndex,
