@@ -1139,7 +1139,8 @@ class RTCSession extends EventManager {
11391139
11401140 options = options ?? < String , dynamic > {};
11411141
1142- Map <String , dynamic > rtcOfferConstraints = options['rtcOfferConstraints' ];
1142+ Map <String , dynamic > rtcOfferConstraints =
1143+ options['rtcOfferConstraints' ] ?? _rtcOfferConstraints;
11431144
11441145 if (_status != C .STATUS_WAITING_FOR_ACK && _status != C .STATUS_CONFIRMED ) {
11451146 return false ;
@@ -1574,6 +1575,13 @@ class RTCSession extends EventManager {
15741575 }, Timers .TIMER_H );
15751576 }
15761577
1578+ void _iceRestart () async {
1579+ Map <String , dynamic > offerConstraints =
1580+ _rtcOfferConstraints ?? < String , dynamic > {};
1581+ offerConstraints['mandatory' ]['IceRestart' ] = true ;
1582+ renegotiate (offerConstraints);
1583+ }
1584+
15771585 Future <void > _createRTCConnection (Map <String , dynamic > pcConfig,
15781586 Map <String , dynamic > rtcConstraints) async {
15791587 _connection = await createPeerConnection (pcConfig, rtcConstraints);
@@ -1585,6 +1593,9 @@ class RTCSession extends EventManager {
15851593 'status_code' : 408 ,
15861594 'reason_phrase' : DartSIP_C .causes.RTP_TIMEOUT
15871595 });
1596+ } else if (state ==
1597+ RTCIceConnectionState .RTCIceConnectionStateDisconnected ) {
1598+ _iceRestart ();
15881599 }
15891600 };
15901601
@@ -1619,7 +1630,7 @@ class RTCSession extends EventManager {
16191630 FutureOr <RTCSessionDescription > _createLocalDescription (
16201631 String type, Map <String , dynamic > constraints) async {
16211632 logger.debug ('createLocalDescription()' );
1622-
1633+ _iceGatheringState = RTCIceGatheringState . RTCIceGatheringStateNew ;
16231634 Completer <RTCSessionDescription > completer =
16241635 Completer <RTCSessionDescription >();
16251636
@@ -1655,7 +1666,6 @@ class RTCSession extends EventManager {
16551666 Future <Null > Function () ready = () async {
16561667 _connection.onIceCandidate = null ;
16571668 _connection.onIceGatheringState = null ;
1658- _connection.onIceConnectionState = null ;
16591669 _iceGatheringState = RTCIceGatheringState .RTCIceGatheringStateComplete ;
16601670 finished = true ;
16611671 _rtcReady = true ;
0 commit comments