unregister method
void
unregister(
- 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();
}