unregister method

void unregister(
  1. bool unregister_all
)

Implementation

void unregister(bool unregister_all) {
  if (_registered == null) {
    logger.debug('already unregistered');

    return;
  }

  _registered = false;

  // Clear the registration timer.
  if (_registrationTimer != null) {
    clearTimeout(_registrationTimer);
    _registrationTimer = null;
  }

  List<dynamic> extraHeaders =
      List<dynamic>.from(_extraHeaders ?? <dynamic>[]);

  if (unregister_all) {
    extraHeaders.add('Contact: *$_extraContactParams');
  } else {
    extraHeaders.add('Contact: $_contact;expires=0$_extraContactParams');
  }

  extraHeaders.add('Expires: 0');

  OutgoingRequest request = OutgoingRequest(
      SipMethod.REGISTER,
      _registrar,
      _ua,
      <String, dynamic>{
        'to_uri': _toUri,
        'call_id': _callId,
        'cseq': _cseq += 1
      },
      extraHeaders);

  EventManager handlers = EventManager();
  handlers.on(EventOnRequestTimeout(), (EventOnRequestTimeout value) {
    _unregistered(null, dart_sip_c.CausesType.REQUEST_TIMEOUT);
  });
  handlers.on(EventOnTransportError(), (EventOnTransportError value) {
    _unregistered(null, dart_sip_c.CausesType.CONNECTION_ERROR);
  });
  handlers.on(EventOnAuthenticated(), (EventOnAuthenticated response) {
    // Increase the CSeq on authentication.

    _cseq += 1;
  });
  handlers.on(EventOnReceiveResponse(), (EventOnReceiveResponse event) {
    String statusCode = event.response!.status_code.toString();
    if (utils.test2XX(statusCode)) {
      _unregistered(event.response);
    } else if (utils.test1XX(statusCode)) {
      // Ignore provisional responses.
    } else {
      String cause = utils.sipErrorCause(event.response!.status_code);
      _unregistered(event.response, cause);
    }
  });

  RequestSender requestSender = RequestSender(_ua!, request, handlers);

  requestSender.send();
}