Hi all,

> @ring team, what can cause 100% call failure after 45..90s ?

I've often seen this kind of question: what's happening when I do a call, and 
why it fails?
So this is the long answer :-)

When calling a RingID number, following steps happen in order:

1/ The caller initializes a ICE transport:
    - this step blocks until all ICE "services" are initialized/contacted 
(Host/UPnP/STUN/TURN)
    - this step can fail: initialization fails after 5 seconds 
(ICE_INIT_TIMEOUT in src/ringdht/ringaccount.cpp)

2/ The caller does a DHT put with its local ICE attributes as value and the 
callee RingID as key (well a bit more complex, but it's the concept).
    - this step is asynchronous
    - this step can fail: bound on DHT backend failures.

3/ The caller adds a listen point on DHT for the callee's response on our put.
    - this step is asynchronous
    - listen success callback starts ICE negotiation on callee ICE attributes

4/ The call ID is put into a pending list: a paced loop checks the ICE 
transport status.
    - if ICE negotiation succeed before 60 seconds (ICE_NEGOTIATION_TIMEOUT in 
src/ringdht/ringaccount.cpp) the call goes into connected state
      and SIP protocol proceed as in IP2IP/SIP account.
    - after this time: the call is marked as failed and removed.

On the callee, a similar process happens: it starts from a DHT listen that 
trigs when a ICE msg comming (see point 2/).


In short: when a ICE is initialized at the caller side, the callee has 60 
seconds to:
- receive the DHT msg
- start its own ICE transport
- send back its local ICE attributes to caller
- negotiate ICE transport with caller


Only both daemon logs (at each point) can answer where is the problem.


Regards,
Guillaume
_______________________________________________
Ring mailing list
Ring@lists.savoirfairelinux.net
https://lists.savoirfairelinux.net/mailman/listinfo/ring

Reply via email to