@@ -276,11 +276,11 @@ class Registrator {
276
276
request_sender.send ();
277
277
}
278
278
279
- void unregister (bool unregister_all) {
279
+ Future < bool > unregister (bool unregister_all) async {
280
280
if (_registered == false ) {
281
281
logger.d ('already unregistered' );
282
282
283
- return ;
283
+ return true ;
284
284
}
285
285
286
286
_registered = false ;
@@ -314,11 +314,14 @@ class Registrator {
314
314
extraHeaders);
315
315
316
316
EventManager handlers = EventManager ();
317
+ Completer <bool > completer = Completer <bool >();
317
318
handlers.on (EventOnRequestTimeout (), (EventOnRequestTimeout value) {
318
319
_unregistered (null , DartSIP_C .CausesType .REQUEST_TIMEOUT );
320
+ completer.complete (false );
319
321
});
320
322
handlers.on (EventOnTransportError (), (EventOnTransportError value) {
321
323
_unregistered (null , DartSIP_C .CausesType .CONNECTION_ERROR );
324
+ completer.complete (false );
322
325
});
323
326
handlers.on (EventOnAuthenticated (), (EventOnAuthenticated response) {
324
327
// Increase the CSeq on authentication.
@@ -329,17 +332,20 @@ class Registrator {
329
332
String status_code = event.response! .status_code.toString ();
330
333
if (utils.test2XX (status_code)) {
331
334
_unregistered (event.response);
335
+ completer.complete (true );
332
336
} else if (utils.test1XX (status_code)) {
333
337
// Ignore provisional responses.
334
338
} else {
335
339
String cause = utils.sipErrorCause (event.response! .status_code);
336
340
_unregistered (event.response, cause);
341
+ completer.complete (true );
337
342
}
338
343
});
339
344
340
345
RequestSender request_sender = RequestSender (_ua, request, handlers);
341
346
342
347
request_sender.send ();
348
+ return completer.future;
343
349
}
344
350
345
351
void close () {
0 commit comments