RTCSession constructor
      
      RTCSession(
    
    
- PitelUA? ua
Implementation
RTCSession(PitelUA? ua) {
  logger.debug('new');
  _id = null;
  _ua = ua;
  _status = C.statusNull;
  _dialog = null;
  _earlyDialogs = <String?, Dialog>{};
  _contact = null;
  _from_tag = null;
  _to_tag = null;
  // The RTCPeerConnection instance (public attribute).
  _connection = null;
  // Incoming/Outgoing request being currently processed.
  _request = null;
  // Cancel state for initial outgoing request.
  _is_canceled = false;
  _cancel_reason = '';
  // RTCSession confirmation flag.
  _is_confirmed = false;
  // Is late SDP being negotiated.
  _late_sdp = false;
  // Default rtcOfferConstraints and rtcAnswerConstrainsts (passed in connect() or answer()).
  _rtcOfferConstraints = null;
  _rtcAnswerConstraints = null;
  // Local MediaStream.
  _localMediaStream = null;
  _localMediaStreamLocallyGenerated = false;
  // Flag to indicate PeerConnection ready for actions.
  _rtcReady = true;
  // SIP Timers.
  _timers = SIPTimers();
  // Session info.
  _direction = null;
  _local_identity = null;
  _remote_identity = null;
  _start_time = null;
  _end_time = null;
  _tones = null;
  // Mute/Hold state.
  _audioMuted = false;
  _videoMuted = false;
  _localHold = false;
  _remoteHold = false;
  // Session Timers (RFC 4028).
  _sessionTimers = RFC4028Timers(
      _ua!.configuration!.sessionTimers,
      _ua!.configuration!.sessionTimersRefreshMethod,
      dart_sip_c.SESSION_EXPIRES,
      null,
      false,
      false,
      null);
  // Map of ReferSubscriber instances indexed by the REFER's CSeq number.
  _referSubscribers = <int?, ReferSubscriber>{};
  // Custom session empty object for high level use.
  data = <String, dynamic>{};
  receiveRequest = _receiveRequest;
}