anchor.diff:      }]
     };
   
  +  var _dataConfig = {
  +    'optional': [{
  +      'RtpDataChannels': true
  +    }, {
  +      'DtlsSrtpKeyAgreement': true
  +    }]
  +  };
  +
     /* dart2js doesn't do recursive convertDartToNative_Dictionary()
      * and it fails in Chrome
      * so I had to remove constraints for now
     var _constraints = {
  +    'optional': [],
       'mandatory': {
         'OfferToReceiveAudio': true,
         'OfferToReceiveVideo': true
  
positive.code:   int _self;
  
    var _connections = new Map<int,RtcPeerConnection>();
    var _streams = new List<MediaStream>();
  
    var _messageController = new StreamController();
  
negative.code:       });
      });
  
      pc.onDataChannel.listen((e) {
        _addDataChannel(id, e.channel);
      });
  
      return pc;
    }
  
    _addDataChannel(id, RtcDataChannel channel) {
      channel.onOpen.listen((e){});
  
      channel.onMessage.listen((e){
        _messageController.add({
          'type': 'data',
          'id': id,
          'data': e.data
        });
      });
  
      channel.onClose.listen((e){});
  
      _data[id] = channel;
    }
  
    _createDataChannel(id, RtcPeerConnection pc, { label: 'fileTransfer' }) {
      var channel = pc.createDataChannel(label, { 'reliable': false });
      _addDataChannel(id, channel);
    }
  
    _createOffer(int socket, RtcPeerConnection pc) {
  