Giter VIP home page Giter VIP logo

rtc-tools's Introduction

rtc-tools

The rtc-tools module does most of the heavy lifting within the rtc.io suite. Primarily it handles the logic of coupling a local RTCPeerConnection with it's remote counterpart via an rtc-signaller signalling channel.

NPM

Build Status unstable bitHound Score Gitter chat

Getting Started

If you decide that the rtc-tools module is a better fit for you than either rtc-quickconnect or rtc then the code snippet below will provide you a guide on how to get started using it in conjunction with the rtc-signaller (version 5.0 and above) and rtc-media modules:

var messenger = require('rtc-switchboard-messenger');
var signaller = require('rtc-signaller')(messenger('https://switchboard.rtc.io/'));
var rtc = require('rtc-tools');
var getUserMedia = require('getusermedia');
var attachMedia = require('attachmediastream');

// capture local media first as firefox
// will want a local stream and doesn't support onnegotiationneeded event
getUserMedia({ video: true, audio: true }, function(err, localStream) {
  if (err) {
    return console.error('could not capture media: ', err);
  }

  document.body.appendChild(attachMedia(localStream));

  // look for friends
  signaller.on('peer:announce', function(data) {
    var pc = rtc.createConnection();
    var monitor = rtc.couple(pc, data.id, signaller);

    // add the stream to the connection
    pc.addStream(localStream);

    // once the connection is active, log a console message
    monitor.once('connected', function() {
      console.log('connection active to: ' + data.id);

      pc.getRemoteStreams().forEach(function(stream) {
        document.body.appendChild(attachMedia(stream));
      });
    });


    monitor.createOffer();
  });

  // announce ourself in the rtc-getting-started room
  signaller.announce({ room: 'rtc-getting-started' });
});

This code definitely doesn't cover all the cases that you need to consider (i.e. peers leaving, etc) but it should demonstrate how to:

  1. Capture video and add it to a peer connection
  2. Couple a local peer connection with a remote peer connection
  3. Deal with the remote steam being discovered and how to render that to the local interface.

Reference

createConnection

createConnection(opts?, constraints?) => RTCPeerConnection

Create a new RTCPeerConnection auto generating default opts as required.

var conn;

// this is ok
conn = rtc.createConnection();

// and so is this
conn = rtc.createConnection({
  iceServers: []
});

rtc-tools/cleanup

cleanup(pc)

The cleanup function is used to ensure that a peer connection is properly closed and ready to be cleaned up by the browser.

rtc-tools/couple

couple(pc, targetId, signaller, opts?)

Couple a WebRTC connection with another webrtc connection identified by targetId via the signaller.

The following options can be provided in the opts argument:

  • sdpfilter (default: null)

    A simple function for filtering SDP as part of the peer connection handshake (see the Using Filters details below).

Example Usage
var couple = require('rtc/couple');

couple(pc, '54879965-ce43-426e-a8ef-09ac1e39a16d', signaller);
Using Filters

In certain instances you may wish to modify the raw SDP that is provided by the createOffer and createAnswer calls. This can be done by passing a sdpfilter function (or array) in the options. For example:

// run the sdp from through a local tweakSdp function.
couple(pc, '54879965-ce43-426e-a8ef-09ac1e39a16d', signaller, {
  sdpfilter: tweakSdp
});

rtc-tools/detect

Provide the rtc-core/detect functionality.

rtc-tools/generators

The generators package provides some utility methods for generating constraint objects and similar constructs.

var generators = require('rtc/generators');

generators.config(config)

Generate a configuration object suitable for passing into an W3C RTCPeerConnection constructor first argument, based on our custom config.

In the event that you use short term authentication for TURN, and you want to generate new iceServers regularly, you can specify an iceServerGenerator that will be used prior to coupling. This generator should return a fully compliant W3C (RTCIceServer dictionary)[http://www.w3.org/TR/webrtc/#idl-def-RTCIceServer].

If you pass in both a generator and iceServers, the iceServers _will be ignored and the generator used instead.

generators.connectionConstraints(flags, constraints)

This is a helper function that will generate appropriate connection constraints for a new RTCPeerConnection object which is constructed in the following way:

var conn = new RTCPeerConnection(flags, constraints);

In most cases the constraints object can be left empty, but when creating data channels some additional options are required. This function can generate those additional options and intelligently combine any user defined constraints (in constraints) with shorthand flags that might be passed while using the rtc.createConnection helper.

rtc-tools/monitor

monitor(pc, targetId, signaller, parentBus) => mbus

The monitor is a useful tool for determining the state of pc (an RTCPeerConnection) instance in the context of your application. The monitor uses both the iceConnectionState information of the peer connection and also the various signaller events to determine when the connection has been connected and when it has been disconnected.

A monitor created mbus is returned as the result of a couple between a local peer connection and it's remote counterpart.

License(s)

Apache 2.0

Copyright 2015 National ICT Australia Limited (NICTA)

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

 http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

rtc-tools's People

Contributors

damonoehlman avatar nathanatcoviu avatar nathanoehlman avatar vkosh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

rtc-tools's Issues

Coupling Race Condition

When a connection has multiple streams it is very easy for a race condition to occur. The coupling logic needs to be rewritten using a negotiation queue.

Currently considering whether this should be implemented as a separate module.

Data Channel Helpers

Primarily in the rtc.io suite I have been working with the pure browser methods for creating data channels, i.e. one connection call the createDataChannel method and the other side wait for the ondatachannel event to fire to pick up the new channel.

With changes in the coupling logic within rtc however, I have noticed that there are additional edge cases that need to be handled when creating a data channel.

This include, but are not limited to the following:

  • The answerer cannot be a party that creates a new data channel. While it will appear to succeed (the createDataChannel function succeeds and a renegotiation event fires) when it generates a new answer in response to the remote offer there is no data channel information in the SDP. As such only the master connection in the coupling relationship should create new data channels.

Changelog

Would be nice if there was a HISTORY.md file or release notes within the releases/git-tags of what has changed between the releases.

Handle Ice Candidates received before matching remote desc

The current couple logic only caters for the case where an ice candidate is received prior to the connections remoteDescription being set. However, there are cases (during peer connection renegotiation) where the new ice candidates will be received prior to receiving the sdp for the renegotiated connection.

This is currently demonstrated in the test/coupling.js file:

  • peer connections are created and connected, no streams or data channels are created on the connections.
  • the master peer connection has a data channel created which triggers renegotiation
  • the master peer connection begins looking for new ice candidates and discovers valid candidates with the sdpMid type of data and sdpMLineIndex of 1. These candidates are sent across (as they are discovered) to the "slave" peer connection.
  • the slave peer connection receives the candidates and attempts to apply them. The slave peer connection, however, only has sdp at this stage with 1 m line (index 0) and thus attempting to add the new candidate fails with a Syntax Error being raised.

Remote peers can't connect to each other

Not sure where this issue should go exactly, but we've discovered that remote peers never show up for each other.

Local peers work fine, but remote peers don't work.

E.g.

  • Ben and Rob in the myplanet office can connect to each other
  • Ben and Tim on different sides of the world, can't connect to each other
  • Everyone can open multiple tabs and connect to the different tabs

Not sure what could be causing this, but I suspect the signalling server perhaps? As the clientside logs don't show anything, however I don't have debug: true enabled at this stage.

You can try it out on:

Signaller needs a `call:end` event

The peer:leave event is useful for determining when a call should be terminated, however, given the concept of calls and call id, it would probably be pragmatic to provide some call centric events also.

Disentangle the "peer:leave" signalling state from connection closing

I've been encountering some unstable signalling server behaviour today and it's brought to light that peer:leave events are still used to determine when peer to peer connectivity is determined as being no longer viable.

For example, the monitor code specifically looks for peer:leave events and if encountered flags that a peerconnection should be closed. This is in fact an error, as the state of the signalling channel is not representative of the P2P connectivity and this should be correctly dealt with.

Consider removing bundled media from the package

At present rtc-media is bundled into rtc but I am currently thinking there is two issues created by doing this.

  1. When documenting usage of media capture sometimes we talk about using media by requiring rtc/media and others (specifically in the rtc-media docs) using by requiring rtc-media. For consistencies sake it would probably be better just to reference rtc-media.
  2. A lot of interest in WebRTC is non media capture related (i.e. data channels). The rtc module provides a lot of useful tooling around making peer connections talk to each other so the inclusion of the media module adds baggage.

Retries occurring after a successful connection is established

Currently seeing the coupling logic retry a connection after a connection has been established. Tends to occur when a second connection is created (connect, disconnect, connect). On the other end of the connection the retry logic will be invoked, but then stop proceeding...

This has pretty much no impact on negotiating connections, but should not be happening regardless.

Refactor couple logic

The current coupling logic has some issues with glare and other state issues. After some good conversations combined with progress that has been made in rtc-signaller we have the potential to lock parties into offerer and answerer roles and negotiate connections always in this way.

In short, the offerer will always be responsible for creating an offer, and the answerer replies. In the event that the answerer requires renegotiation with the offerer it sends the offerer a /renegotiate message to rerun the connection flow.

This reduces the need for complicated locks during the signalling process and hopefully should be more reliable. This should, in theory improve the reliability of both rtc-glue and rtc-quickconnect also. In particular, I'm hoping it helps resolve the following issues:

cog needs updating

When I run an app that uses cog itself, I get the following on deploy:

remote: npm WARN unmet dependency /srv/apps/rfw/master/node_modules/rtc requires cog@'~0.4.1' but will load
remote: npm WARN unmet dependency /srv/apps/rfw/master/node_modules/cog,
remote: npm WARN unmet dependency which is version 0.5.1

Prevent Failed Coupling Attempts due to Session Description Mismatch

I think this is due to the way the trickle-ice is implemented, need to hunt it down so it doesn't happen:

rtc/couple error (setLocalDesc):  Failed to parse SessionDescription. a=candidate:2365396244 1 udp 1853300479 10.17.131.21 35042 typ  raddr 172.17.42.1 rport 35042 generation 0 Unsupported candidate type. couple.js:119
ok 97 channel found zuul.js:42
rtc/couple error (setLocalDesc):  Failed to parse SessionDescription. a=candidate:2365396244 1 udp 1853300479 10.17.131.21 35042 typ  raddr 172.17.42.1 rport 35042 generation 0 Unsupported candidate type. couple.js:119
ok 98 channel found zuul.js:42
rtc/couple error (setLocalDesc):  Failed to parse SessionDescription. a=candidate:2365396244 1 udp 1853300479 10.17.131.21 35042 typ  raddr 172.17.42.1 rport 35042 generation 0 Unsupported candidate type.

Connectivity is established even with the error being displayed, however, it is unsettling...

This : (opts || {}).RTCPeerConnection || RTCPeerConnection sometimes returns undefined on ios

On an environment with quickconnect together with cordova + libwebrtc on an ios device, this statement returns undefined sometimes and causes an error of which the application never recovers resulting in failure of call initialization.

The scenario where this happens is when opts does not have RTCPeerConnection property, however RTCPeerConnection exists as a global variable, therefore that indicates this in-line statement is wrong.

Maybe a clearer code would be

(opts && opts.RTCPeerConnection) ? opts.RTCPeerConnection : RTCPeerConnection

PS : I dont understand the {}.RTCPeerConnection from this logic, it will always return undefined.

Manual Decoupling

Provide a mechanism for manually decoupling. This will be used in rtc-quickconnect to manually terminate a coupling in response to the appropriate peer:leave event.

Consider removing rtc-signaller from the package

As per #6, consider removing rtc-signaller from the rtc library. With higher level abstractions such as rtc-glue and rtc-quickconnect I'm not sure that it makes sense to bundle at the rtc level any more...

Detect invalid candidates before applying

While these errors generally done result in an error, it would be nice to ensure that they don't happen:

captured invalid candidate:  
DOMException {message: "Failed to execute 'addIceCandidate' on 'RTCPeerConnection': The ICE candidate could not be added.", name: "SyntaxError", code: 12, stack: "Error: Failed to execute 'addIceCandidate' on 'RTCโ€ฆms (http://localhost:8080/rtc.io/primus.js:867:4)", INDEX_SIZE_ERR: 1โ€ฆ}
 couple.js:444

Rename to `rtc-utils`

The rtc package is the place where most people would probably start their journey with rtc.io. As a technical piece, though, it is not the first place that people should start. This needs to be fixed.

Robust Connection Close Detection Required

It's becoming important to be able to properly clean-up a connection that has been disconnected by it's remote peer. The currently status of browser implementation for connection disconnection isn't ideal so I'm considering how I might implement some logic as part of the coupling logic to message disconnection via the signalling channel.

Request flow flooding signalling channel?

Just picked this up while developing the new rtc-switchboard. Seems like an awful lot of requests being sent given there are only two active clients :/

  rtc-switchboard-room writing message to spark: b6e92497-402c-407b-bb06-fc94430c2ab8 +43ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 8d49fb51-723f-40b4-9aaa-458c749b0008 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: b6e92497-402c-407b-bb06-fc94430c2ab8 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 7c9bd225-76a0-4edd-8669-53436b79cd4b +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 7c9bd225-76a0-4edd-8669-53436b79cd4b +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 13b1d0cd-daf5-4ebf-9ec1-14046588799a +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 7c9bd225-76a0-4edd-8669-53436b79cd4b +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: b90e1bb8-0854-450d-a335-573bfcf29da9 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 7c9bd225-76a0-4edd-8669-53436b79cd4b +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 6a3082b1-1a7a-4676-a0a0-7dfe69fed5fa +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 6a3082b1-1a7a-4676-a0a0-7dfe69fed5fa +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 0a261ca9-42c9-43f3-b7c2-a3e185b07c5e +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 0a261ca9-42c9-43f3-b7c2-a3e185b07c5e +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 91666dd2-bf5e-4f30-b46c-411cb3055063 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 0a261ca9-42c9-43f3-b7c2-a3e185b07c5e +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 3664fc99-f2c6-4713-a710-9ab52e19f3ba +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 0a261ca9-42c9-43f3-b7c2-a3e185b07c5e +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 45aaf1ce-d767-4ad6-891d-dabfe5a75dc9 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 45aaf1ce-d767-4ad6-891d-dabfe5a75dc9 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 53e1b68f-4229-49b9-bafb-97886f57e5ec +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 53e1b68f-4229-49b9-bafb-97886f57e5ec +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: a862915a-116f-4eef-9d35-c940f7096f7f +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 53e1b68f-4229-49b9-bafb-97886f57e5ec +1ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 7c4e324b-e28b-4a02-9511-fe4f2768961d +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 53e1b68f-4229-49b9-bafb-97886f57e5ec +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: e5119a69-5b9f-49e4-a021-3b9cd764449f +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: e5119a69-5b9f-49e4-a021-3b9cd764449f +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 66d43cae-3bf6-4293-a3c6-a50bd55f993c +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: f948257f-c7b8-46c5-97bb-55e1bc794eed +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 66d43cae-3bf6-4293-a3c6-a50bd55f993c +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: d52b5ae4-e9b6-4362-964d-3e2dac9ca2e7 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 66d43cae-3bf6-4293-a3c6-a50bd55f993c +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 2619178c-8e33-4dc1-be3b-ea54f91af585 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 66d43cae-3bf6-4293-a3c6-a50bd55f993c +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: da22877a-d13d-45b5-a0e4-22edb0e4f670 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 66d43cae-3bf6-4293-a3c6-a50bd55f993c +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: e52026ac-1105-4470-bf05-5379175c797c +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: e52026ac-1105-4470-bf05-5379175c797c +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 468f6712-d79c-4a85-a24a-4a4a9cc598b5 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: e52026ac-1105-4470-bf05-5379175c797c +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: ce0c4551-3e78-4fa5-9f5e-d152ee76b7f0 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: ce0c4551-3e78-4fa5-9f5e-d152ee76b7f0 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: e2170c7c-6923-4aae-b4c6-5d5542b39ff3 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: ce0c4551-3e78-4fa5-9f5e-d152ee76b7f0 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 216b352a-43a0-4d0a-af3a-2b40f93fdfe1 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 216b352a-43a0-4d0a-af3a-2b40f93fdfe1 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: e8860fc0-81eb-4b2a-ae73-72dfb433d235 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: e8860fc0-81eb-4b2a-ae73-72dfb433d235 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: e92275fc-bf14-4cb5-94f2-c05e1e524693 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: e8860fc0-81eb-4b2a-ae73-72dfb433d235 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 6a48fd32-6478-447e-b8e9-fafd46f786c6 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: e8860fc0-81eb-4b2a-ae73-72dfb433d235 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: ad6180f2-a156-4d8d-8ac3-ef62398de750 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: ad6180f2-a156-4d8d-8ac3-ef62398de750 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: a0d15335-7758-4d12-a239-e72cb347bab0 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: a0d15335-7758-4d12-a239-e72cb347bab0 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: d82656a4-faf8-454b-97ae-eeef5ed8b07e +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: d82656a4-faf8-454b-97ae-eeef5ed8b07e +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: cf0e2803-1b5f-447f-b654-db2d96dd3d34 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: cf0e2803-1b5f-447f-b654-db2d96dd3d34 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: f98de063-95dc-4503-bc31-e2180ae79e89 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: cf0e2803-1b5f-447f-b654-db2d96dd3d34 +17ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 1a4b3b65-f114-4431-8bf7-8b04c009ef61 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: cf0e2803-1b5f-447f-b654-db2d96dd3d34 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: db8ddf59-6e85-473c-a987-875339f56381 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: cf0e2803-1b5f-447f-b654-db2d96dd3d34 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 5ca4ad1a-2f25-4bb3-a1a1-ff2aacd0b69c +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 5ca4ad1a-2f25-4bb3-a1a1-ff2aacd0b69c +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: a0cfb875-2e58-43d3-869f-09aa4f1892ec +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: a0cfb875-2e58-43d3-869f-09aa4f1892ec +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 73ce7a46-9b7f-435c-8892-948c24c24d17 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: a0cfb875-2e58-43d3-869f-09aa4f1892ec +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: c874c656-f7ea-47a4-95d8-59f095a08c6b +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: a0cfb875-2e58-43d3-869f-09aa4f1892ec +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: ca6e7bd4-dcd9-4334-909f-0fa35f456a89 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: a0cfb875-2e58-43d3-869f-09aa4f1892ec +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 5feea6f7-38c9-4d8d-854f-5b4b8c612392 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: a0cfb875-2e58-43d3-869f-09aa4f1892ec +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 6fa99cd3-96dc-4fd6-98ea-c946c5d38be9 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 6fa99cd3-96dc-4fd6-98ea-c946c5d38be9 +1ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 9d9515f2-7772-4356-9aa9-dd5e484c0806 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 9d9515f2-7772-4356-9aa9-dd5e484c0806 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: eae54ecf-0d27-470f-8d56-c199242f6f0c +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 9d9515f2-7772-4356-9aa9-dd5e484c0806 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 63cf1a59-8295-4e32-9089-d9b6cd6fca18 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 9d9515f2-7772-4356-9aa9-dd5e484c0806 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 63a059d6-271d-4b04-8e77-6723d690fa9d +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 9d9515f2-7772-4356-9aa9-dd5e484c0806 +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 6a747b78-222e-4583-9067-c49021a4d79d +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 6a747b78-222e-4583-9067-c49021a4d79d +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: d8dfe2f3-aa36-4c28-a9bd-000670772bbc +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: e500ef62-509d-4f18-85f1-809530d0ff2f +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: 6a747b78-222e-4583-9067-c49021a4d79d +3ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: e500ef62-509d-4f18-85f1-809530d0ff2f +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}
  rtc-switchboard-room writing message to spark: e500ef62-509d-4f18-85f1-809530d0ff2f +0ms /request|{"id":"e500ef62-509d-4f18-85f1-809530d0ff2f","__srcid":"b2ade77d-2715-46d1-9aa7-b7be9386d4a9","__reqid":"04475d5c-1c04-4150-9896-b97744f63598"}

Need to track couple attempt failure

Need to know about the instances where:

  • the connection could not be established
  • the requested client (with matching data) could not be found

Ideally this logic will be completed on the client, but may require slight tweaks to the server side implementation.

Only implement reactive connections (using onnegotiationneeded behaviour) when an option is set

Currently doing firefox testing and the onnegotiationneeded handling is well and truly not there (currently testing in 28, stable is 26) so it looks like it will be sometime before reactive peer connections is something that will work across both chrome and firefox.

The problem isn't just that firefox doesn't trigger onnegotiationneeded events but rather that once a connection has been established, the connection cannot be renegotiated - see:

https://bugzilla.mozilla.org/show_bug.cgi?id=840728

SetLocalDescription failed: Failed to push down answer transport description

As the rtc.io library has embraced the concept of regular renegotiation of peer connections we seem to be turning up a few edge cases in the browser source code. Either that or there is an error in the way our coupling logic is setup.

Related Issues:

Irrespective of the cause, the case is now reliably recreated in the coupling tests of rtc:

https://github.com/rtc-io/rtc/blob/master/test/coupling.js

Which generates the following chrome debug output when run with chrome logging enabled (--enable-logging --v=1 --vmodule=*third_party/libjingle/*=3,*=0):

[25598:25598:0108/170906:INFO:gpu_info_collector_x11.cc(80)] NVCtrl extension does not exist.
[25598:25623:0108/170906:WARNING:external_pref_loader.cc(127)] You are using an old-style extension deployment method (external_extensions.json), which will soon be deprecated. (see http://code.google.com/chrome/extensions/external_extensions.html )
[7:7:0108/170907:VERBOSE3:webrtcsession.cc(489)] Allowing SCTP data engine.
[7:7:0108/170907:VERBOSE3:webrtcsession.cc(489)] Allowing SCTP data engine.
[25598:25598:0108/170907:INFO:CONSOLE(13989)] "TAP version 13", source: http://localhost:9966/test/coupling.js (13989)
[25598:25598:0108/170907:INFO:CONSOLE(13989)] "# create peer connections", source: http://localhost:9966/test/coupling.js (13989)
[25598:25598:0108/170907:INFO:CONSOLE(13989)] "ok 1 created a", source: http://localhost:9966/test/coupling.js (13989)
[25598:25598:0108/170907:INFO:CONSOLE(13989)] "ok 2 created b", source: http://localhost:9966/test/coupling.js (13989)
[25598:25598:0108/170907:INFO:CONSOLE(13989)] "# create test messengers", source: http://localhost:9966/test/coupling.js (13989)
[25598:25598:0108/170907:INFO:CONSOLE(13989)] "ok 3 created", source: http://localhost:9966/test/coupling.js (13989)
[25598:25598:0108/170907:INFO:CONSOLE(13989)] "# create signallers", source: http://localhost:9966/test/coupling.js (13989)
[25598:25598:0108/170907:INFO:CONSOLE(13989)] "ok 4 created signaller a", source: http://localhost:9966/test/coupling.js (13989)
[25598:25598:0108/170907:INFO:CONSOLE(13989)] "ok 5 created signaller b", source: http://localhost:9966/test/coupling.js (13989)
[25598:25598:0108/170907:INFO:CONSOLE(13989)] "# announce signallers", source: http://localhost:9966/test/coupling.js (13989)
[25598:25598:0108/170908:INFO:CONSOLE(13989)] "ok 6 done", source: http://localhost:9966/test/coupling.js (13989)
[25598:25598:0108/170908:INFO:CONSOLE(13989)] "# couple a --> b", source: http://localhost:9966/test/coupling.js (13989)
[7:7:0108/170908:ERROR:rtc_peer_connection_handler.cc(114)] Native session description is null.
[7:7:0108/170908:ERROR:rtc_peer_connection_handler.cc(114)] Native session description is null.
[7:7:0108/170908:ERROR:rtc_peer_connection_handler.cc(114)] Native session description is null.
[7:7:0108/170908:ERROR:rtc_peer_connection_handler.cc(114)] Native session description is null.
[7:7:0108/170908:ERROR:rtc_peer_connection_handler.cc(114)] Native session description is null.
[7:7:0108/170908:ERROR:rtc_peer_connection_handler.cc(114)] Native session description is null.
[25598:25598:0108/170908:INFO:CONSOLE(13989)] "ok 7 ok", source: http://localhost:9966/test/coupling.js (13989)
[7:7:0108/170908:ERROR:rtc_peer_connection_handler.cc(114)] Native session description is null.
[25598:25598:0108/170908:INFO:CONSOLE(13989)] "# couple b --> a", source: http://localhost:9966/test/coupling.js (13989)
[7:7:0108/170908:ERROR:rtc_peer_connection_handler.cc(114)] Native session description is null.
[25598:25598:0108/170908:INFO:CONSOLE(13989)] "ok 8 ok", source: http://localhost:9966/test/coupling.js (13989)
[25598:25598:0108/170908:INFO:CONSOLE(13989)] "# activate connection", source: http://localhost:9966/test/coupling.js (13989)
[25598:25598:0108/170908:INFO:CONSOLE(8931)] "couple: calling createOffer", source: http://localhost:9966/test/coupling.js (8931)
[25598:25598:0108/170908:INFO:CONSOLE(8931)] "couple: setting local description", source: http://localhost:9966/test/coupling.js (8931)
[7:7:0108/170908:VERBOSE3:webrtcsdp.cc(2424)] Ignored line: c=IN IP4 0.0.0.0
[7:29:0108/170908:VERBOSE3:channel.cc(455)] Created channel for audio
[7:7:0108/170908:VERBOSE3:session.cc(789)] Session:1496128048707005842 Old state:STATE_INIT New state:STATE_SENTINITIATE Type:urn:xmpp:jingle:apps:rtp:1 Transport:http://www.google.com/transport/p2p
[7:29:0108/170908:VERBOSE3:channel.cc(1727)] Setting local voice description
[7:29:0108/170908:VERBOSE3:channel.cc(1716)] Changing voice state, recv=0 send=0
[7:7:0108/170908:VERBOSE3:webrtcsession.cc(568)] Local and Remote descriptions must be applied to get SSL Role of the session.
[7:7:0108/170908:ERROR:rtc_peer_connection_handler.cc(114)] Native session description is null.
[7:7:0108/170908:ERROR:rtc_peer_connection_handler.cc(114)] Native session description is null.
[7:7:0108/170908:VERBOSE3:transport.cc(504)] Transport: audio, allocating candidates
[7:7:0108/170908:VERBOSE3:transport.cc(504)] Transport: audio, allocating candidates
[7:29:0108/170908:VERBOSE3:basicportallocator.cc(793)] Jingle:Net[eth0:202.9.2.16/32]: Allocation Phase=Udp
[7:29:0108/170908:VERBOSE3:port.cc(224)] Jingle:Port[:1:0::Net[eth0:202.9.2.16/32]]: Port created
[7:29:0108/170908:VERBOSE3:basicportallocator.cc(482)] Adding allocated port for audio
[7:29:0108/170908:VERBOSE3:basicportallocator.cc(512)] Jingle:Port[audio:1:0::Net[eth0:202.9.2.16/32]]: Added port to allocator
[7:7:0108/170908:ERROR:rtc_peer_connection_handler.cc(114)] Native session description is null.
[7:7:0108/170908:ERROR:rtc_peer_connection_handler.cc(114)] Native session description is null.
[7:7:0108/170908:ERROR:rtc_peer_connection_handler.cc(114)] Native session description is null.
[7:7:0108/170908:ERROR:rtc_peer_connection_handler.cc(114)] Native session description is null.
[7:7:0108/170908:VERBOSE3:webrtcsdp.cc(2424)] Ignored line: c=IN IP4 0.0.0.0
[7:29:0108/170908:VERBOSE3:channel.cc(455)] Created channel for audio
[7:7:0108/170908:VERBOSE3:session.cc(789)] Session:569809682047368406 Old state:STATE_INIT New state:STATE_RECEIVEDINITIATE Type:urn:xmpp:jingle:apps:rtp:1 Transport:http://www.google.com/transport/p2p
[7:29:0108/170908:VERBOSE3:channel.cc(1754)] Setting remote voice description
[7:29:0108/170908:VERBOSE3:channel.cc(1716)] Changing voice state, recv=0 send=0
[7:7:0108/170908:VERBOSE3:webrtcsession.cc(568)] Local and Remote descriptions must be applied to get SSL Role of the session.
[25598:25598:0108/170908:INFO:CONSOLE(8931)] "couple: applying queued candidate", source: http://localhost:9966/test/coupling.js (8931)
[7:7:0108/170908:VERBOSE3:webrtcsession.cc(777)] ProcessIceMessage: Remote description not set, save the candidate for later use.
[7:7:0108/170908:VERBOSE3:webrtcsession.cc(777)] ProcessIceMessage: Remote description not set, save the candidate for later use.
[7:7:0108/170908:VERBOSE3:webrtcsession.cc(568)] Local and Remote descriptions must be applied to get SSL Role of the session.
[7:7:0108/170908:VERBOSE3:mediasession.cc(1362)] Video is not available in the offer.
[7:7:0108/170908:VERBOSE3:mediasession.cc(1411)] Data is not available in the offer.
[7:7:0108/170908:ERROR:rtc_peer_connection_handler.cc(114)] Native session description is null.
[7:7:0108/170908:ERROR:rtc_peer_connection_handler.cc(114)] Native session description is null.
[25598:25598:0108/170908:INFO:CONSOLE(8931)] "couple: applying queued candidate", source: http://localhost:9966/test/coupling.js (8931)
[25598:25598:0108/170908:INFO:CONSOLE(8931)] "couple: calling createAnswer", source: http://localhost:9966/test/coupling.js (8931)
[7:7:0108/170908:VERBOSE3:webrtcsdp.cc(2424)] Ignored line: c=IN IP4 0.0.0.0
[7:29:0108/170908:VERBOSE3:dtlstransportchannel.cc(286)] Jingle:Channel[audio|1|__]: DTLS setup complete.
[7:29:0108/170908:VERBOSE3:dtlstransportchannel.cc(286)] Jingle:Channel[audio|2|__]: DTLS setup complete.
[25598:25598:0108/170908:INFO:CONSOLE(8931)] "couple: setting local description", source: http://localhost:9966/test/coupling.js (8931)
[7:7:0108/170908:VERBOSE3:session.cc(701)] Enabling BUNDLE, bundling onto transport: audio
[7:29:0108/170908:VERBOSE3:channel.cc(924)] Channel enabled
[7:29:0108/170908:VERBOSE3:channel.cc(1716)] Changing voice state, recv=0 send=0
[7:7:0108/170908:VERBOSE3:session.cc(789)] Session:569809682047368406 Old state:STATE_RECEIVEDINITIATE New state:STATE_SENTACCEPT Type:urn:xmpp:jingle:apps:rtp:1 Transport:http://www.google.com/transport/p2p
[7:29:0108/170908:VERBOSE3:channel.cc(1727)] Setting local voice description
[7:29:0108/170908:VERBOSE3:nssidentity.h(119)] Destroying NSS identity
[7:29:0108/170908:VERBOSE3:channel.cc(1716)] Changing voice state, recv=0 send=0
[7:7:0108/170908:VERBOSE2:webrtcsession.cc(1295)] Candidate has unknown component: Cand[:2:local:udp::202.9.2.16:34087:cBmcO+a0+O1GunKX:7vbECUgwbloIl2fQb8YOhHHk] for content: audio
[7:7:0108/170908:VERBOSE3:transport.cc(504)] Transport: audio, allocating candidates
[7:7:0108/170908:VERBOSE3:transport.cc(504)] Transport: audio, allocating candidates
[7:7:0108/170908:VERBOSE3:session.cc(789)] Session:569809682047368406 Old state:STATE_SENTACCEPT New state:STATE_INPROGRESS Type:urn:xmpp:jingle:apps:rtp:1 Transport:http://www.google.com/transport/p2p
[7:29:0108/170908:VERBOSE3:basicportallocator.cc(793)] Jingle:Net[eth0:202.9.2.16/32]: Allocation Phase=Udp
[7:29:0108/170908:VERBOSE3:port.cc(224)] Jingle:Port[:1:0::Net[eth0:202.9.2.16/32]]: Port created
[7:29:0108/170908:VERBOSE3:basicportallocator.cc(482)] Adding allocated port for audio
[7:29:0108/170908:VERBOSE3:basicportallocator.cc(512)] Jingle:Port[audio:1:0::Net[eth0:202.9.2.16/32]]: Added port to allocator
[7:29:0108/170908:VERBOSE3:port.cc(843)] Jingle:Conn[audio:FyLxvGDY:1:0:local:udp:202.9.2.16:42578->:1:0:local:udp:202.9.2.16:34087|C--W|-]: Connection created
[7:29:0108/170908:VERBOSE3:p2ptransportchannel.cc(704)] Jingle:Channel[audio|1|__]: Created connection with origin=2, (1 total)
[7:29:0108/170908:VERBOSE3:basicportallocator.cc(793)] Jingle:Net[eth0:202.9.2.16/32]: Allocation Phase=Relay
[7:29:0108/170908:VERBOSE3:basicportallocator.cc(793)] Jingle:Net[eth0:202.9.2.16/32]: Allocation Phase=Relay
[7:29:0108/170908:VERBOSE3:basicportallocator.cc(793)] Jingle:Net[eth0:202.9.2.16/32]: Allocation Phase=Tcp
[7:29:0108/170908:VERBOSE3:port.cc(224)] Jingle:Port[:1:0:local:Net[eth0:202.9.2.16/32]]: Port created
[7:29:0108/170908:VERBOSE3:basicportallocator.cc(482)] Adding allocated port for audio
[7:29:0108/170908:VERBOSE3:basicportallocator.cc(512)] Jingle:Port[audio:1:0:local:Net[eth0:202.9.2.16/32]]: Added port to allocator
[7:29:0108/170908:VERBOSE3:tcpport.cc(127)] Jingle:Port[audio:1:0:local:Net[eth0:202.9.2.16/32]]: Not listening due to firewall restrictions.
[7:29:0108/170908:VERBOSE3:p2ptransportchannel.cc(756)] Duplicate candidate: 202.9.2.16:34087
[7:7:0108/170908:VERBOSE2:webrtcsession.cc(1295)] Candidate has unknown component: Cand[:2:local:udp::202.9.2.16:34087:cBmcO+a0+O1GunKX:7vbECUgwbloIl2fQb8YOhHHk] for content: audio
[7:7:0108/170908:VERBOSE2:webrtcsession.cc(1295)] candidate has port below 1024, but not 80 or 443
[7:29:0108/170908:VERBOSE3:p2ptransportchannel.cc(756)] Duplicate candidate: 202.9.2.16:34087
[7:7:0108/170908:VERBOSE2:webrtcsession.cc(1295)] Candidate has unknown component: Cand[:2:local:udp::202.9.2.16:34087:cBmcO+a0+O1GunKX:7vbECUgwbloIl2fQb8YOhHHk] for content: audio
[7:7:0108/170908:VERBOSE2:webrtcsession.cc(1295)] candidate has port below 1024, but not 80 or 443
[7:7:0108/170908:VERBOSE2:webrtcsession.cc(1295)] candidate has port below 1024, but not 80 or 443
[7:29:0108/170908:VERBOSE3:basicportallocator.cc(793)] Jingle:Net[eth0:202.9.2.16/32]: Allocation Phase=Tcp
[7:29:0108/170908:VERBOSE3:port.cc(224)] Jingle:Port[:1:0:local:Net[eth0:202.9.2.16/32]]: Port created
[7:29:0108/170908:VERBOSE3:basicportallocator.cc(482)] Adding allocated port for audio
[7:29:0108/170908:VERBOSE3:basicportallocator.cc(512)] Jingle:Port[audio:1:0:local:Net[eth0:202.9.2.16/32]]: Added port to allocator
[7:29:0108/170908:VERBOSE3:tcpport.cc(127)] Jingle:Port[audio:1:0:local:Net[eth0:202.9.2.16/32]]: Not listening due to firewall restrictions.
[7:7:0108/170908:ERROR:rtc_peer_connection_handler.cc(114)] Native session description is null.
[7:7:0108/170908:ERROR:rtc_peer_connection_handler.cc(114)] Native session description is null.
[7:7:0108/170908:VERBOSE3:webrtcsdp.cc(2424)] Ignored line: c=IN IP4 0.0.0.0
[7:7:0108/170908:VERBOSE3:nssidentity.h(119)] Destroying NSS identity
[7:29:0108/170908:VERBOSE3:dtlstransportchannel.cc(286)] Jingle:Channel[audio|1|__]: DTLS setup complete.
[7:29:0108/170908:VERBOSE3:dtlstransportchannel.cc(286)] Jingle:Channel[audio|2|__]: DTLS setup complete.
[7:7:0108/170908:VERBOSE3:session.cc(701)] Enabling BUNDLE, bundling onto transport: audio
[7:29:0108/170908:VERBOSE3:channel.cc(924)] Channel enabled
[7:29:0108/170908:VERBOSE3:channel.cc(1716)] Changing voice state, recv=1 send=0
[7:7:0108/170908:VERBOSE3:session.cc(789)] Session:1496128048707005842 Old state:STATE_SENTINITIATE New state:STATE_RECEIVEDACCEPT Type:urn:xmpp:jingle:apps:rtp:1 Transport:http://www.google.com/transport/p2p
[7:29:0108/170908:VERBOSE3:basicportallocator.cc(793)] Jingle:Net[eth0:202.9.2.16/32]: Allocation Phase=SslTcp
[7:29:0108/170908:VERBOSE3:basicportallocator.cc(638)] All candidates gathered for audio:1:0
[7:29:0108/170908:VERBOSE3:transport.cc(565)] Transport: audio, component 1 allocation complete
[7:29:0108/170908:VERBOSE3:transport.cc(565)] Transport: audio, component 2 allocation complete
[7:29:0108/170908:VERBOSE3:channel.cc(1754)] Setting remote voice description
[7:29:0108/170908:VERBOSE3:nssidentity.h(119)] Destroying NSS identity
[7:29:0108/170908:VERBOSE3:channel.cc(1716)] Changing voice state, recv=1 send=0
[7:7:0108/170908:VERBOSE3:session.cc(789)] Session:1496128048707005842 Old state:STATE_RECEIVEDACCEPT New state:STATE_INPROGRESS Type:urn:xmpp:jingle:apps:rtp:1 Transport:http://www.google.com/transport/p2p
[7:7:0108/170908:VERBOSE3:transport.cc(581)] Transport: audio allocation complete
[7:7:0108/170908:VERBOSE3:session.cc(768)] Candidate gathering is complete.
[25598:25598:0108/170908:INFO:CONSOLE(8931)] "couple: applying queued candidate", source: http://localhost:9966/test/coupling.js (8931)
[7:29:0108/170908:VERBOSE3:port.cc(843)] Jingle:Conn[audio:RnzW/Zwd:1:0:local:udp:202.9.2.16:34087->:1:0:local:udp:202.9.2.16:42578|C--W|-]: Connection created
[7:29:0108/170908:VERBOSE3:p2ptransportchannel.cc(704)] Jingle:Channel[audio|1|__]: Created connection with origin=2, (1 total)
[7:29:0108/170908:VERBOSE3:p2ptransportchannel.cc(978)] Jingle:Channel[audio|1|__]: New best connection: Conn[audio:RnzW/Zwd:1:0:local:udp:202.9.2.16:34087->:1:0:local:udp:202.9.2.16:42578|C--W|-]
[25598:25598:0108/170908:INFO:CONSOLE(8931)] "couple: ice gathering state complete", source: http://localhost:9966/test/coupling.js (8931)
[7:29:0108/170908:VERBOSE3:basicportallocator.cc(793)] Jingle:Net[eth0:202.9.2.16/32]: Allocation Phase=SslTcp
[7:29:0108/170908:VERBOSE3:basicportallocator.cc(638)] All candidates gathered for audio:1:0
[7:29:0108/170908:VERBOSE3:transport.cc(565)] Transport: audio, component 1 allocation complete
[7:7:0108/170908:VERBOSE3:transport.cc(581)] Transport: audio allocation complete
[7:7:0108/170908:VERBOSE3:session.cc(768)] Candidate gathering is complete.
[25598:25598:0108/170908:INFO:CONSOLE(8931)] "couple: ice gathering state complete", source: http://localhost:9966/test/coupling.js (8931)
[7:29:0108/170908:VERBOSE3:p2ptransportchannel.cc(978)] Jingle:Channel[audio|1|__]: New best connection: Conn[audio:FyLxvGDY:1:0:local:udp:202.9.2.16:42578->:1:0:local:udp:202.9.2.16:34087|CRWS|2250]
[7:29:0108/170908:VERBOSE3:nssstreamadapter.cc(466)] BeginSSL: with peer
[7:29:0108/170908:VERBOSE3:nssstreamadapter.cc(471)] BeginSSL: as client
[7:29:0108/170908:VERBOSE3:nssstreamadapter.cc(554)] ContinueSSL
[7:29:0108/170908:VERBOSE3:nssstreamadapter.cc(587)] Would have blocked
[7:29:0108/170908:VERBOSE3:nssstreamadapter.cc(593)] Timeout is 1000 ms
[7:29:0108/170908:VERBOSE3:dtlstransportchannel.cc(562)] Jingle:Channel[audio|1|__]: DtlsTransportChannelWrapper: Started DTLS handshake
[7:29:0108/170908:VERBOSE3:dtlstransportchannel.cc(473)] Jingle:Channel[audio|1|__]: Dropping packet received before DTLS started.
[7:29:0108/170908:VERBOSE3:nssstreamadapter.cc(466)] BeginSSL: with peer
[7:29:0108/170908:VERBOSE3:nssstreamadapter.cc(480)] BeginSSL: as server
[7:29:0108/170908:VERBOSE3:nssstreamadapter.cc(554)] ContinueSSL
[7:29:0108/170908:VERBOSE3:nssstreamadapter.cc(587)] Would have blocked
[7:29:0108/170908:VERBOSE3:dtlstransportchannel.cc(562)] Jingle:Channel[audio|1|__]: DtlsTransportChannelWrapper: Started DTLS handshake
[7:29:0108/170908:VERBOSE3:p2ptransportchannel.cc(756)] Duplicate candidate: 202.9.2.16:42578
[7:7:0108/170908:VERBOSE2:webrtcsession.cc(1295)] candidate has port below 1024, but not 80 or 443
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(770)] DTLS timeout expired
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(554)] ContinueSSL
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(587)] Would have blocked
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(593)] Timeout is 2000 ms
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(734)] NSSStreamAdapter::OnEvent SE_READ
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(554)] ContinueSSL
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(587)] Would have blocked
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(593)] Timeout is 1000 ms
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(734)] NSSStreamAdapter::OnEvent SE_READ
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(554)] ContinueSSL
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(587)] Would have blocked
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(593)] Timeout is 1000 ms
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(734)] NSSStreamAdapter::OnEvent SE_READ
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(554)] ContinueSSL
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(782)] NSSStreamAdapter::AuthCertificateHook
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(800)] Checking against specified digest
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(812)] Accepted peer certificate
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(849)] Client cert requested
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(587)] Would have blocked
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(593)] Timeout is 2000 ms
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(734)] NSSStreamAdapter::OnEvent SE_READ
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(554)] ContinueSSL
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(587)] Would have blocked
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(593)] Timeout is 1999 ms
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(734)] NSSStreamAdapter::OnEvent SE_READ
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(554)] ContinueSSL
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(782)] NSSStreamAdapter::AuthCertificateHook
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(800)] Checking against specified digest
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(812)] Accepted peer certificate
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(563)] Handshake complete
[7:29:0108/170909:VERBOSE3:dtlstransportchannel.cc(524)] Jingle:Channel[audio|1|__]: DTLS handshake complete.
[7:29:0108/170909:VERBOSE3:channel.cc(961)] Channel socket writable (audio, 1) for the first time
[7:29:0108/170909:VERBOSE3:channel.cc(971)] Using Cand[RnzW/Zwd:1:local:udp:eth0:202.9.2.16:34087:cBmcO+a0+O1GunKX:7vbECUgwbloIl2fQb8YOhHHk]->Cand[:1:local:udp::202.9.2.16:42578:0Hdjcsn3TlTJpUR7:bWar9LcrI4HJ6+SeMSyOrf64]
[7:29:0108/170909:VERBOSE3:channel.cc(1038)] Installing keys from DTLS-SRTP on audio RTP
[7:29:0108/170909:VERBOSE3:srtpfilter.cc(158)] SRTP activated with negotiated parameters: send cipher_suite AES_CM_128_HMAC_SHA1_32 recv cipher_suite AES_CM_128_HMAC_SHA1_32
[25598:25598:0108/170909:INFO:CONSOLE(13989)] "ok 9 connection 0 active", source: http://localhost:9966/test/coupling.js (13989)
[7:29:0108/170909:VERBOSE3:channel.cc(1716)] Changing voice state, recv=1 send=0
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(734)] NSSStreamAdapter::OnEvent SE_READ
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(750)]  -- onStreamReadable
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(734)] NSSStreamAdapter::OnEvent SE_READ
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(554)] ContinueSSL
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(563)] Handshake complete
[7:29:0108/170909:VERBOSE3:dtlstransportchannel.cc(524)] Jingle:Channel[audio|1|__]: DTLS handshake complete.
[7:29:0108/170909:VERBOSE3:channel.cc(961)] Channel socket writable (audio, 1) for the first time
[7:29:0108/170909:VERBOSE3:channel.cc(971)] Using Cand[FyLxvGDY:1:local:udp:eth0:202.9.2.16:42578:0Hdjcsn3TlTJpUR7:bWar9LcrI4HJ6+SeMSyOrf64]->Cand[:1:local:udp::202.9.2.16:34087:cBmcO+a0+O1GunKX:7vbECUgwbloIl2fQb8YOhHHk]
[7:29:0108/170909:VERBOSE3:channel.cc(1038)] Installing keys from DTLS-SRTP on audio RTP
[7:29:0108/170909:VERBOSE3:srtpfilter.cc(158)] SRTP activated with negotiated parameters: send cipher_suite AES_CM_128_HMAC_SHA1_32 recv cipher_suite AES_CM_128_HMAC_SHA1_32
[7:29:0108/170909:VERBOSE3:channel.cc(1716)] Changing voice state, recv=0 send=1
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(734)] NSSStreamAdapter::OnEvent SE_READ
[7:29:0108/170909:VERBOSE3:nssstreamadapter.cc(750)]  -- onStreamReadable
[25598:25598:0108/170909:INFO:CONSOLE(13989)] "ok 10 connection 1 active", source: http://localhost:9966/test/coupling.js (13989)
[25598:25598:0108/170909:INFO:CONSOLE(13989)] "# create an offer from the other party", source: http://localhost:9966/test/coupling.js (13989)
[25598:25598:0108/170909:INFO:CONSOLE(8931)] "couple: got negotiate request from a2d20a64-0bec-437e-8fe9-f2ecd47ad583, creating offer", source: http://localhost:9966/test/coupling.js (8931)
[25598:25598:0108/170909:INFO:CONSOLE(8931)] "couple: calling createOffer", source: http://localhost:9966/test/coupling.js (8931)
[25598:25598:0108/170909:INFO:CONSOLE(8931)] "couple: setting local description", source: http://localhost:9966/test/coupling.js (8931)
[7:7:0108/170909:VERBOSE3:webrtcsdp.cc(2424)] Ignored line: c=IN IP4 202.9.2.16
[7:7:0108/170909:VERBOSE3:nssidentity.h(119)] Destroying NSS identity
[7:7:0108/170909:VERBOSE3:session.cc(789)] Session:1496128048707005842 Old state:STATE_INPROGRESS New state:STATE_SENTINITIATE Type:urn:xmpp:jingle:apps:rtp:1 Transport:http://www.google.com/transport/p2p
[7:29:0108/170909:VERBOSE3:channel.cc(1727)] Setting local voice description
[7:29:0108/170909:VERBOSE3:channel.cc(1716)] Changing voice state, recv=1 send=0
[7:29:0108/170909:VERBOSE3:p2ptransportchannel.cc(756)] Duplicate candidate: 202.9.2.16:42578
[7:7:0108/170909:VERBOSE2:webrtcsession.cc(1295)] candidate has port below 1024, but not 80 or 443
[7:7:0108/170909:VERBOSE3:webrtcsdp.cc(2424)] Ignored line: c=IN IP4 202.9.2.16
[7:7:0108/170909:VERBOSE3:nssidentity.h(119)] Destroying NSS identity
[7:7:0108/170909:VERBOSE3:session.cc(789)] Session:569809682047368406 Old state:STATE_INPROGRESS New state:STATE_RECEIVEDINITIATE Type:urn:xmpp:jingle:apps:rtp:1 Transport:http://www.google.com/transport/p2p
[7:29:0108/170909:VERBOSE3:channel.cc(1754)] Setting remote voice description
[7:29:0108/170909:VERBOSE3:channel.cc(1716)] Changing voice state, recv=0 send=1
[7:29:0108/170909:VERBOSE3:p2ptransportchannel.cc(756)] Duplicate candidate: 202.9.2.16:34087
[7:7:0108/170909:VERBOSE2:webrtcsession.cc(1295)] Candidate has unknown component: Cand[:2:local:udp::202.9.2.16:34087:cBmcO+a0+O1GunKX:7vbECUgwbloIl2fQb8YOhHHk] for content: audio
[7:7:0108/170909:VERBOSE2:webrtcsession.cc(1295)] candidate has port below 1024, but not 80 or 443
[7:7:0108/170909:VERBOSE2:webrtcsession.cc(1295)] candidate has port below 1024, but not 80 or 443
[25598:25598:0108/170909:INFO:CONSOLE(8931)] "couple: calling createAnswer", source: http://localhost:9966/test/coupling.js (8931)
[7:7:0108/170909:VERBOSE3:mediasession.cc(1362)] Video is not available in the offer.
[7:7:0108/170909:VERBOSE3:mediasession.cc(1411)] Data is not available in the offer.
[25598:25598:0108/170909:INFO:CONSOLE(8931)] "couple: setting local description", source: http://localhost:9966/test/coupling.js (8931)
[7:7:0108/170909:VERBOSE3:webrtcsdp.cc(2424)] Ignored line: c=IN IP4 202.9.2.16
[7:7:0108/170909:VERBOSE3:session.cc(701)] Enabling BUNDLE, bundling onto transport: audio
[7:7:0108/170909:VERBOSE3:session.cc(789)] Session:569809682047368406 Old state:STATE_RECEIVEDINITIATE New state:STATE_SENTACCEPT Type:urn:xmpp:jingle:apps:rtp:1 Transport:http://www.google.com/transport/p2p
[7:29:0108/170909:VERBOSE3:channel.cc(1727)] Setting local voice description
[7:29:0108/170909:VERBOSE3:channel.cc(1716)] Changing voice state, recv=0 send=1
[7:29:0108/170909:VERBOSE3:p2ptransportchannel.cc(756)] Duplicate candidate: 202.9.2.16:34087
[7:7:0108/170909:VERBOSE2:webrtcsession.cc(1295)] Candidate has unknown component: Cand[:2:local:udp::202.9.2.16:34087:cBmcO+a0+O1GunKX:7vbECUgwbloIl2fQb8YOhHHk] for content: audio
[7:7:0108/170909:VERBOSE2:webrtcsession.cc(1295)] candidate has port below 1024, but not 80 or 443
[7:7:0108/170909:VERBOSE2:webrtcsession.cc(1295)] candidate has port below 1024, but not 80 or 443
[7:7:0108/170909:VERBOSE3:session.cc(789)] Session:569809682047368406 Old state:STATE_SENTACCEPT New state:STATE_INPROGRESS Type:urn:xmpp:jingle:apps:rtp:1 Transport:http://www.google.com/transport/p2p
[7:7:0108/170909:VERBOSE3:webrtcsdp.cc(2424)] Ignored line: c=IN IP4 202.9.2.16
[7:7:0108/170909:VERBOSE3:nssidentity.h(119)] Destroying NSS identity
[7:7:0108/170909:VERBOSE3:session.cc(701)] Enabling BUNDLE, bundling onto transport: audio
[7:7:0108/170909:VERBOSE3:session.cc(789)] Session:1496128048707005842 Old state:STATE_SENTINITIATE New state:STATE_RECEIVEDACCEPT Type:urn:xmpp:jingle:apps:rtp:1 Transport:http://www.google.com/transport/p2p
[7:29:0108/170909:VERBOSE3:channel.cc(1754)] Setting remote voice description
[7:29:0108/170909:VERBOSE3:channel.cc(1716)] Changing voice state, recv=1 send=0
[7:29:0108/170909:VERBOSE3:p2ptransportchannel.cc(756)] Duplicate candidate: 202.9.2.16:42578
[7:7:0108/170909:VERBOSE2:webrtcsession.cc(1295)] candidate has port below 1024, but not 80 or 443
[7:7:0108/170909:VERBOSE3:session.cc(789)] Session:1496128048707005842 Old state:STATE_RECEIVEDACCEPT New state:STATE_INPROGRESS Type:urn:xmpp:jingle:apps:rtp:1 Transport:http://www.google.com/transport/p2p
[25598:25598:0108/170909:INFO:CONSOLE(13989)] "ok 11 signaling state stable again", source: http://localhost:9966/test/coupling.js (13989)
[25598:25598:0108/170909:INFO:CONSOLE(13989)] "# create a data channel on the master connection", source: http://localhost:9966/test/coupling.js (13989)
[7:7:0108/170909:VERBOSE1:webrtcsession.cc(981)] ConnectDataChannel called when data_channel_ is NULL.
[7:7:0108/170909:VERBOSE1:webrtcsession.cc(1002)] AddDataChannelStreams called when data_channel_ is NULL.
[25598:25598:0108/170909:INFO:CONSOLE(8931)] "couple: renegotiation required, will create offer in 50ms", source: http://localhost:9966/test/coupling.js (8931)
[25598:25598:0108/170909:INFO:CONSOLE(8931)] "couple: calling createOffer", source: http://localhost:9966/test/coupling.js (8931)
[25598:25598:0108/170909:INFO:CONSOLE(8931)] "couple: setting local description", source: http://localhost:9966/test/coupling.js (8931)
[7:7:0108/170909:VERBOSE3:webrtcsdp.cc(2424)] Ignored line: c=IN IP4 202.9.2.16
[7:7:0108/170909:VERBOSE3:webrtcsdp.cc(2424)] Ignored line: c=IN IP4 0.0.0.0
[7:7:0108/170909:VERBOSE3:webrtcsdp.cc(2547)] Ignored line: a=sctpmap:5000 webrtc-datachannel 1024
[7:7:0108/170909:VERBOSE3:webrtcsdp.cc(2128)] ParseMediaDescription: Got SCTP Port Number 5000
[7:7:0108/170909:VERBOSE3:nssidentity.h(119)] Destroying NSS identity
[7:29:0108/170909:VERBOSE3:channel.cc(455)] Created channel for data
[7:29:0108/170909:VERBOSE2:sctpdataengine.cc(422)] SctpDataMediaChannel->AddSendStream(...): Not adding data send stream '' with ssrc=1 because stream already exists.
[7:7:0108/170909:VERBOSE3:session.cc(789)] Session:1496128048707005842 Old state:STATE_INPROGRESS New state:STATE_SENTINITIATE Type:urn:xmpp:jingle:apps:rtp:1 Transport:http://www.google.com/transport/p2p
[7:29:0108/170909:VERBOSE3:channel.cc(1727)] Setting local voice description
[7:29:0108/170909:VERBOSE3:channel.cc(1716)] Changing voice state, recv=1 send=0
[7:29:0108/170909:VERBOSE3:channel.cc(2629)] Setting local data description
[7:29:0108/170909:VERBOSE3:channel.cc(2743)] Changing data state, recv=0 send=0
[7:29:0108/170909:VERBOSE3:p2ptransportchannel.cc(756)] Duplicate candidate: 202.9.2.16:42578
[7:7:0108/170909:VERBOSE2:webrtcsession.cc(1295)] candidate has port below 1024, but not 80 or 443
[7:7:0108/170909:VERBOSE3:transport.cc(504)] Transport: data, allocating candidates
[7:29:0108/170909:VERBOSE3:transport.cc(565)] Transport: data, component 1 allocation complete
[7:7:0108/170909:VERBOSE3:transport.cc(581)] Transport: data allocation complete
[7:7:0108/170909:VERBOSE3:session.cc(768)] Candidate gathering is complete.
[25598:25598:0108/170909:INFO:CONSOLE(8931)] "couple: ice gathering state complete", source: http://localhost:9966/test/coupling.js (8931)
[7:7:0108/170909:VERBOSE3:webrtcsdp.cc(2424)] Ignored line: c=IN IP4 202.9.2.16
[7:7:0108/170909:VERBOSE3:webrtcsdp.cc(2424)] Ignored line: c=IN IP4 0.0.0.0
[7:7:0108/170909:VERBOSE3:webrtcsdp.cc(2547)] Ignored line: a=sctpmap:5000 webrtc-datachannel 1024
[7:7:0108/170909:VERBOSE3:webrtcsdp.cc(2128)] ParseMediaDescription: Got SCTP Port Number 5000
[7:7:0108/170909:VERBOSE3:nssidentity.h(119)] Destroying NSS identity
[7:29:0108/170909:VERBOSE3:channel.cc(455)] Created channel for data
[7:7:0108/170909:VERBOSE3:session.cc(789)] Session:569809682047368406 Old state:STATE_INPROGRESS New state:STATE_RECEIVEDINITIATE Type:urn:xmpp:jingle:apps:rtp:1 Transport:http://www.google.com/transport/p2p
[7:29:0108/170909:VERBOSE3:channel.cc(1754)] Setting remote voice description
[7:29:0108/170909:VERBOSE3:channel.cc(1716)] Changing voice state, recv=0 send=1
[7:29:0108/170909:VERBOSE3:channel.cc(2682)] Setting SCTP remote data description
[7:29:0108/170909:VERBOSE3:channel.cc(2743)] Changing data state, recv=0 send=0
[7:29:0108/170909:VERBOSE3:p2ptransportchannel.cc(756)] Duplicate candidate: 202.9.2.16:34087
[7:7:0108/170909:VERBOSE2:webrtcsession.cc(1295)] Candidate has unknown component: Cand[:2:local:udp::202.9.2.16:34087:cBmcO+a0+O1GunKX:7vbECUgwbloIl2fQb8YOhHHk] for content: audio
[7:7:0108/170909:VERBOSE2:webrtcsession.cc(1295)] candidate has port below 1024, but not 80 or 443
[7:7:0108/170909:VERBOSE2:webrtcsession.cc(1295)] candidate has port below 1024, but not 80 or 443
[7:7:0108/170909:VERBOSE3:mediasession.cc(1362)] Video is not available in the offer.
[7:29:0108/170909:VERBOSE3:p2ptransportchannel.cc(756)] Duplicate candidate: 202.9.2.16:34087
[25598:25598:0108/170909:INFO:CONSOLE(8931)] "couple: calling createAnswer", source: http://localhost:9966/test/coupling.js (8931)
[7:7:0108/170909:VERBOSE2:webrtcsession.cc(1295)] Candidate has unknown component: Cand[:2:local:udp::202.9.2.16:34087:cBmcO+a0+O1GunKX:7vbECUgwbloIl2fQb8YOhHHk] for content: audio
[7:7:0108/170909:VERBOSE2:webrtcsession.cc(1295)] candidate has port below 1024, but not 80 or 443
[7:7:0108/170909:VERBOSE2:webrtcsession.cc(1295)] candidate has port below 1024, but not 80 or 443
[7:29:0108/170909:VERBOSE3:transport.cc(272)] Transport::ConnectChannels_w: No local description has been set. Will generate one.
[7:29:0108/170909:VERBOSE3:dtlstransportchannel.cc(171)] Jingle:Channel[data|1|__]: NULL DTLS identity supplied. Not doing DTLS
[7:29:0108/170909:VERBOSE3:p2ptransportchannel.cc(756)] Duplicate candidate: 202.9.2.16:34087
[7:7:0108/170909:VERBOSE2:webrtcsession.cc(1295)] Candidate has unknown component: Cand[:2:local:udp::202.9.2.16:34087:cBmcO+a0+O1GunKX:7vbECUgwbloIl2fQb8YOhHHk] for content: audio
[7:7:0108/170909:VERBOSE2:webrtcsession.cc(1295)] candidate has port below 1024, but not 80 or 443
[7:7:0108/170909:VERBOSE2:webrtcsession.cc(1295)] candidate has port below 1024, but not 80 or 443
[7:29:0108/170909:VERBOSE3:p2ptransportchannel.cc(756)] Duplicate candidate: 202.9.2.16:34087
[7:7:0108/170909:VERBOSE2:webrtcsession.cc(1295)] candidate has port below 1024, but not 80 or 443
[7:7:0108/170909:VERBOSE3:webrtcsdp.cc(2424)] Ignored line: c=IN IP4 202.9.2.16
[25598:25598:0108/170909:INFO:CONSOLE(8931)] "couple: setting local description", source: http://localhost:9966/test/coupling.js (8931)
[7:7:0108/170909:VERBOSE3:webrtcsdp.cc(2424)] Ignored line: c=IN IP4 0.0.0.0
[7:7:0108/170909:VERBOSE3:webrtcsdp.cc(2547)] Ignored line: a=sctpmap:5000 webrtc-datachannel 1024
[7:7:0108/170909:VERBOSE3:webrtcsdp.cc(2128)] ParseMediaDescription: Got SCTP Port Number 5000
[7:29:0108/170909:VERBOSE2:dtlstransport.h(86)] Local fingerprint provided but no identity available
[7:7:0108/170909:VERBOSE1:webrtcsession.cc(269)] SetLocalDescription failed: Failed to push down answer transport description.
[7:7:0108/170909:VERBOSE3:transport.cc(504)] Transport: data, allocating candidates
[7:29:0108/170909:VERBOSE3:basicportallocator.cc(793)] Jingle:Net[eth0:202.9.2.16/32]: Allocation Phase=Udp
[7:29:0108/170909:VERBOSE3:port.cc(224)] Jingle:Port[:1:0::Net[eth0:202.9.2.16/32]]: Port created
[7:29:0108/170909:VERBOSE3:basicportallocator.cc(482)] Adding allocated port for data
[7:29:0108/170909:VERBOSE3:basicportallocator.cc(512)] Jingle:Port[data:1:0::Net[eth0:202.9.2.16/32]]: Added port to allocator
[7:29:0108/170909:VERBOSE3:port.cc(843)] Jingle:Conn[data:e9yWTMpz:1:0:local:udp:202.9.2.16:37672->:1:0:local:udp:202.9.2.16:34087|C--W|-]: Connection created
[7:29:0108/170909:VERBOSE3:p2ptransportchannel.cc(704)] Jingle:Channel[data|1|__]: Created connection with origin=2, (1 total)
[25598:25598:0108/170909:INFO:CONSOLE(7175)] "rtc/couple error (setLocalDesc): ", source: http://localhost:9966/test/coupling.js (7175)
[7:29:0108/170909:VERBOSE3:p2ptransportchannel.cc(978)] Jingle:Channel[data|1|__]: New best connection: Conn[data:e9yWTMpz:1:0:local:udp:202.9.2.16:37672->:1:0:local:udp:202.9.2.16:34087|C--W|-]
[7:29:0108/170909:VERBOSE3:basicportallocator.cc(793)] Jingle:Net[eth0:202.9.2.16/32]: Allocation Phase=Relay
[7:29:0108/170909:VERBOSE1:port.cc(992)] Jingle:Conn[audio:RnzW/Zwd:1:0:local:udp:202.9.2.16:34087->:1:0:local:udp:202.9.2.16:42578|CRWS|951]: Received STUN request with bad remote username :0Hdjcsn3TlTJpUR7
[7:29:0108/170909:VERBOSE3:port.cc(666)] Jingle:Port[audio:1:0::Net[eth0:202.9.2.16/32]]: Sending STUN binding error: reason=Unauthorized to 202.9.2.16:42578
[7:29:0108/170909:VERBOSE1:dtlstransportchannel.cc(495)] Jingle:Channel[audio|1|RW]: Received unexpected non-DTLS packet.
[7:29:0108/170909:VERBOSE1:dtlstransportchannel.cc(495)] Jingle:Channel[audio|1|RW]: Received unexpected non-DTLS packet.
[7:29:0108/170909:VERBOSE3:basicportallocator.cc(793)] Jingle:Net[eth0:202.9.2.16/32]: Allocation Phase=Tcp
[7:29:0108/170909:VERBOSE3:port.cc(224)] Jingle:Port[:1:0:local:Net[eth0:202.9.2.16/32]]: Port created
[7:29:0108/170909:VERBOSE3:basicportallocator.cc(482)] Adding allocated port for data
[7:29:0108/170909:VERBOSE3:basicportallocator.cc(512)] Jingle:Port[data:1:0:local:Net[eth0:202.9.2.16/32]]: Added port to allocator
[7:29:0108/170909:VERBOSE3:tcpport.cc(127)] Jingle:Port[data:1:0:local:Net[eth0:202.9.2.16/32]]: Not listening due to firewall restrictions.
[7:7:0108/170909:VERBOSE1:webrtcsession.cc(787)] ProcessIceMessage: Candidate cannot be used
[7:7:0108/170909:ERROR:rtc_peer_connection_handler.cc(506)] Error processing ICE candidate.
[25598:25598:0108/170909:INFO:CONSOLE(8931)] "couple: invalidate candidate specified: ", source: http://localhost:9966/test/coupling.js (8931)
[7:29:0108/170909:VERBOSE3:basicportallocator.cc(793)] Jingle:Net[eth0:202.9.2.16/32]: Allocation Phase=SslTcp
[7:29:0108/170909:VERBOSE3:basicportallocator.cc(638)] All candidates gathered for data:1:0
[7:29:0108/170909:VERBOSE3:transport.cc(565)] Transport: data, component 1 allocation complete
[7:7:0108/170909:VERBOSE3:transport.cc(581)] Transport: data allocation complete
[7:7:0108/170909:VERBOSE3:session.cc(768)] Candidate gathering is complete.
[25598:25598:0108/170909:INFO:CONSOLE(8931)] "couple: ice gathering state complete", source: http://localhost:9966/test/coupling.js (8931)
[7:7:0108/170909:VERBOSE1:webrtcsession.cc(787)] ProcessIceMessage: Candidate cannot be used
[7:7:0108/170909:ERROR:rtc_peer_connection_handler.cc(506)] Error processing ICE candidate.
[25598:25598:0108/170909:INFO:CONSOLE(8931)] "couple: invalidate candidate specified: ", source: http://localhost:9966/test/coupling.js (8931)
[7:29:0108/170910:VERBOSE1:port.cc(992)] Jingle:Conn[audio:RnzW/Zwd:1:0:local:udp:202.9.2.16:34087->:1:0:local:udp:202.9.2.16:42578|CRWI|951]: Received STUN request with bad remote username :0Hdjcsn3TlTJpUR7
[7:29:0108/170910:VERBOSE3:port.cc(666)] Jingle:Port[audio:1:0::Net[eth0:202.9.2.16/32]]: Sending STUN binding error: reason=Unauthorized to 202.9.2.16:42578
[7:29:0108/170910:VERBOSE1:dtlstransportchannel.cc(495)] Jingle:Channel[audio|1|RW]: Received unexpected non-DTLS packet.
[7:29:0108/170910:VERBOSE1:dtlstransportchannel.cc(495)] Jingle:Channel[audio|1|RW]: Received unexpected non-DTLS packet.
[7:29:0108/170910:VERBOSE1:port.cc(992)] Jingle:Conn[audio:RnzW/Zwd:1:0:local:udp:202.9.2.16:34087->:1:0:local:udp:202.9.2.16:42578|CRWI|951]: Received STUN request with bad remote username :0Hdjcsn3TlTJpUR7
[7:29:0108/170910:VERBOSE3:port.cc(666)] Jingle:Port[audio:1:0::Net[eth0:202.9.2.16/32]]: Sending STUN binding error: reason=Unauthorized to 202.9.2.16:42578
[7:29:0108/170910:VERBOSE1:dtlstransportchannel.cc(495)] Jingle:Channel[audio|1|RW]: Received unexpected non-DTLS packet.
[7:29:0108/170910:VERBOSE1:dtlstransportchannel.cc(495)] Jingle:Channel[audio|1|RW]: Received unexpected non-DTLS packet.
[7:29:0108/170911:VERBOSE1:port.cc(992)] Jingle:Conn[audio:RnzW/Zwd:1:0:local:udp:202.9.2.16:34087->:1:0:local:udp:202.9.2.16:42578|CRWI|951]: Received STUN request with bad remote username :0Hdjcsn3TlTJpUR7
[7:29:0108/170911:VERBOSE3:port.cc(666)] Jingle:Port[audio:1:0::Net[eth0:202.9.2.16/32]]: Sending STUN binding error: reason=Unauthorized to 202.9.2.16:42578
[7:29:0108/170911:VERBOSE1:dtlstransportchannel.cc(495)] Jingle:Channel[audio|1|RW]: Received unexpected non-DTLS packet.
[7:29:0108/170911:VERBOSE1:dtlstransportchannel.cc(495)] Jingle:Channel[audio|1|RW]: Received unexpected non-DTLS packet.

The two lines that are of most significance relate to DTLS identity:

[7:29:0108/170909:VERBOSE2:dtlstransport.h(86)] Local fingerprint provided but no identity available
[7:7:0108/170909:VERBOSE1:webrtcsession.cc(269)] SetLocalDescription failed: Failed to push down answer transport description.

Will look to recreate the condition outside of the rtc library so that feedback can be passed back to the chrome devs regarding issue 1718.

Will also look to see what can be done to implement a workaround in rtc.

Duplicate handlers calls in couple.js

I found that every "message:*" event addressing to some peer is handled by the other peers too. For example, "message:candidate" handled by couple.handleCandidate of all peers, which leads to adding a task to all peers queues and applying candidates to all of the pc's.
I made a test page: http://vkosh.github.io/rtc-quickconnect-demo/ built from https://github.com/vkosh/rtc-quickconnect-demo/ with console.error("handleCandidate call: " + JSON.stringify(data)) injection at https://github.com/rtc-io/rtc-tools/blob/master/couple.js#L104
To reproduce the behavior open the page and console, click on "clone" and wait for peers coupling. Then click on "clone" again and note the double handleCandidate messages with the same candidate values.

Renegotiation gets stuck in iceConnectionState of checking

This is another but that occurs intermittently. During renegotiation of connections there are instances where the one party in the connection will get stuck in an iceConnectionState of checking.

In every case where I have observed this behaviour it has been the result of adding a new type of media to the connection. For instance, if you have set up a connection with no streams then chrome automagically creates a single audio stream for you (which you can see in the SDP). Thus the initial ICE negotiation occurs for audio only.

Then when you allow local media capture and add your webcam, this adds both video and audio streams to the peer connection (I'm pretty sure at this point the real audio replaces the original dummy audio stream). When this occurs new ice candidates are discovered for transmission of video and the peer connections attempt to reconnect via these new candidates.

This also occurs if you attempt to add a data channel which triggers the need for connection renegotiation.

I think this will boil down to a browser bug somewhere, looking into recreating now.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.