I'm looking for best practices about how to detect a) that an ice restart is needed (in verto), and b) how to invoke the restart.

FWIW, we use FS v1.8 and will soon try 1.10.2.

For detection, I think it could be done either of these ways:

a1) In the 1st arg to jQuery.verto(), provide an object with property deviceParams.onICEComplete set to a callback. In the callback, iterate over mediaData.candidateList. For example, check if all candidates are private IPs but all your callers are expected to have public IPs.

a2) In the 2nd arg to jQuery.verto(), provide an object with property 'onDialogState' set to a callback. In the callback, if arg1.state.name is "hangup" and arg1.cause is "INCOMPATIBLE DESTINATION". (Ignoring that this hangup cause occurs for other reasons also.)

To do the actual restart...

In method (a1) we should have access to the peer connection object via arg1.peer. Would it mess up the state of verto to do arg1.peer.createOffer({iceRestart:true}) ? Do we want to limit this reaction to happen just once per call attempt in order to avoid possibly many chained failures?

In method (a2), I'm not sure there's any way to access the peer connection.

I searched jquery.FSRTC.js for "restart" in case there's a standard way of doing this, but found no match.

Cheers,
David