anchor.diff:            }
           }
           break;
  -      case 'ringing':
  -        {
  -          var id = data['id'];
  -          var media = data['media'];
  -
  -          if (this.onStateChange != null) {
  -            this.onStateChange(SignalingState.CallStateNew);
  -          }
  -
  -          _createPeerConnection(id, media).then((pc) {
  -            _peerConnections[id] = pc;
  -            _createOffer(id, pc);
  -          });
  -        }
  -        break;
  -      case 'invite':
  +      case 'offer':
           {
             var id = data['from'];
  +          var description = data['description'];
             var media = data['media'];
             var session_id = data['session_id'];
             this._session_id = session_id;
  
positive.code: 
            _createPeerConnection(id, media).then((pc) {
              _peerConnections[id] = pc;
            });
          }
          break;
        case 'offer':
          {
            var id = data['from'];
            var description = data['description'];
  
            RTCPeerConnection pc = _peerConnections[id];
            if (pc != null) {
              await pc.setRemoteDescription(
                  new RTCSessionDescription(description['sdp'], description['type']));
              _createAnswer(id, pc);
            }
          }
          break;
        case 'answer':
  
negative.code:     _addDataChannel(id, channel);
    }
  
    _createOffer(String id, RTCPeerConnection pc, String media) async {
      try {
        RTCSessionDescription s = await pc.createOffer(_constraints);
        pc.setLocalDescription(s);
  