1. 23 Mar, 2018 11 commits
  2. 22 Mar, 2018 1 commit
  3. 28 Nov, 2017 4 commits
  4. 27 Nov, 2017 2 commits
  5. 12 Sep, 2017 3 commits
  6. 05 Sep, 2017 8 commits
    • Fabrice Bellet's avatar
      conncheck: change state before updating nominated pairs · 14102d44
      Fabrice Bellet authored
      When a pair is nominated while in state failed, we first move
      back to state connecting, then we update the selected pair, and
      finally we move to state connected.
      14102d44
    • Fabrice Bellet's avatar
      conncheck: forgot to put a pair in triggered check list · 72dd26a3
      Fabrice Bellet authored
      When a new pair is created from an unknown remote candidate, it
      should be enqueue for a triggered check, to allow it to be marked
      as nominated on response arrival in priv_mark_pair_nominated().
      Creating it in waiting state is not sufficient since the update
      in priv_mark_pair_nominated() from previous commits.
      
      Differential Revision: https://phabricator.freedesktop.org/D1763
      72dd26a3
    • Fabrice Bellet's avatar
      conncheck: update the state of triggered checks pairs · 6fe64fdb
      Fabrice Bellet authored
      With this patch, we fix an ambiguity of some parts of the spec, when
      the document refers to in-progress pairs, that also concern pairs in
      the triggered checks list.
      
      The first cast is in section 7.1.2.5, "Updating the Nominated Flag",
      when the in-progress pair will be nominated on response arrival. This is
      handled in function priv_mark_pair_nominated(), when a pair is put to
      the triggered check list in reaction to a matching inbound stun request.
      Such a pair in priv_mark_pair_nominated() will _always_ be in the
      triggered check list, from the previously called function
      priv_schedule_triggered_check().
      
      The second case is in section 8.1.2, "Updating State" when an in-progress
      pair stops its retransmission when another pair of higher priority is
      already nominated. This is handled by function priv_prune_pending_checks().
      
      Until now, pairs enqueued in the triggered check list move transiently
      to state waiting, according to 7.2.1.4. But this state causes wrong
      decisions in the two previous cases, because such pairs should in fact
      rather be considered "like in-progress", to avoid discarding them
      inadvertantly.
      
      This patch update the state of the triggered check list
      pairs to in-progress. It allows to remove exception handling cited
      above: the code is a bit more simple, and allows some refactoring
      in priv_mark_pair_nominated() between RFC and compatibility modes.
      
      Differential Revision: https://phabricator.freedesktop.org/D1762
      6fe64fdb
    • Fabrice Bellet's avatar
      conncheck: support several stun requests per pair · 36f306f4
      Fabrice Bellet authored
      This patch should improve the reliabily of the connection check by
      keeping the record of several simultaneous ongoing stun requests per
      pair. A new stun request on an in-progress pair typically is caused by
      in inbound stun request from the peer on this same pair. This is named
      "Triggered Checks" in the spec. When this situation arises, it is fair
      to handle these two stun requests simultaneously, the triggered check,
      and the initial ordinary check, since both can potentially succeed.
      
      Differential Revision: https://phabricator.freedesktop.org/D1761
      36f306f4
    • Fabrice Bellet's avatar
      conncheck: use stun_timer_remainder less frequently · e860948b
      Fabrice Bellet authored
      We try to use stun_timer_remainder() less frequently, particularily
      in the debug messages, and favour of the next_tick value associated
      to the pair.
      
      Differential Revision: https://phabricator.freedesktop.org/D1760
      e860948b
    • Fabrice Bellet's avatar
      conncheck: make debug sentences more accurate · ce33747e
      Fabrice Bellet authored
      We add a helper function to print the pair state in-extenso.
      
      Differential Revision: https://phabricator.freedesktop.org/D1759
      ce33747e
    • Fabrice Bellet's avatar
      conncheck: reorder some chunks of code · 25be0027
      Fabrice Bellet authored
      With this patch we simplify the levels of code indentation.
      
      Differential Revision: https://phabricator.freedesktop.org/D1758
      25be0027
    • Olivier Crête's avatar
      agent: Set error if it isn't set · 5a42089a
      Olivier Crête authored
      5a42089a
  7. 22 Jun, 2017 2 commits
  8. 21 Jun, 2017 9 commits
    • Olivier Crête's avatar
      component: Use non-GClosure dummy callbacks · 63d273ce
      Olivier Crête authored
      GClosures are not that cheap to setup
      63d273ce
    • Olivier Crête's avatar
      2c50d73b
    • Olivier Crête's avatar
      Repleace UNRELEASED with 0.1.15 · dcb0d647
      Olivier Crête authored
      dcb0d647
    • Olivier Crête's avatar
      agent: Adjust the nice_agent_new_full() to use flags · e3ddaa28
      Olivier Crête authored
      This makes it easier to read and more extensible.
      e3ddaa28
    • Fabrice Bellet's avatar
      agent: remove spurious newlines · c7a5a92b
      Fabrice Bellet authored
      Differential Revision: https://phabricator.freedesktop.org/D1756
      c7a5a92b
    • Fabrice Bellet's avatar
      b4b8d662
    • Fabrice Bellet's avatar
      agent: add new pairs only for gathering streams · 195db6b3
      Fabrice Bellet authored
      At the end of the local candidate gathering process, we only create new
      pairs for streams that are in gathering state.
      
      Other stream that may be in ready state for example, due to a
      previously succeeded conncheck process, may have accumulated some
      couples (local,remote) candidates that have not resulted in the creation
      a new pair during this previous conncheck process, and we don't want
      these new pairs to be added now, because it would generate unneeded
      transition changes for a stream unconcerned by this gathering.
      
      Differential Revision: https://phabricator.freedesktop.org/D1755
      195db6b3
    • Fabrice Bellet's avatar
      conncheck: fix the component failed transition · 07366a5b
      Fabrice Bellet authored
      This patch fixes the transition of a component from connecting to
      failed, that previously occured due to the propagation of the
      keep_timer_going variable, and to the final call to function
      priv_update_check_list_failed_components(), after the global agent
      timer was stopped.
      
      Previously, the code almost never entered to failed state, because the
      timer was going one, as long as the number of nominated pair was not
      enough, and as long as there were valid pairs not yet nominated. Even
      if all pair timers were over.
      
      The definition of the Failed state of a conncheck list is somewhat
      contradictory in the spec, depending on weather you read :
      
       * sect 5.7.4. "Computing States",
       "Failed:  In this state, the ICE checks have not completed successfully
       for this media stream."
      
       or
      
       * sect 7.1.3.3. "Check List and Timer State Updates",
       "If all of the pairs in the check list are now either in the Failed or
       Succeeded state: If there is not a pair in the valid list for each
       component of the media stream, the state of the check list is set to
       Failed."
      
      Our understanding of the ICE spec is that, the proper way to enter failed
      state instead in when all connchecks have no longer in-progress pairs.
      All pairs are either in state succeeded, discovered, or failed. No timer
      is still running, and we have no hope that the conncheck list changes
      again, except if an unexpected STUN packet arrives later. All pairs in
      frozen state is a special case, that is handled separately (sect
      7.1.3.3).
      
      A special grace delay is added before declaring a component in state
      Failed. This delay is not part of the RFC, and it is aimed to limit the
      cases when a conncheck list is reactivated just after it's been declared
      failed, causing a user visible transition from connecting to failed, and
      back from failed to connecting again. This is also required by the test
      suite, that counts exactly the number of time each state is entered, and
      doesn't expect these transcient failed states to happen (frequent due to
      the nature of the testsuite, less frequent in real life).
      
      Differential Revision: https://phabricator.freedesktop.org/D1111
      07366a5b
    • Fabrice Bellet's avatar
      conncheck: remove cancelled pair state · 95f8805e
      Fabrice Bellet authored
      Pairs with the state NICE_CHECK_CANCELLED are the pairs targeted for
      removal after the nomination of a pair with an higher priority,
      described in Section 8.1.2 "Updating States", item 2 of RFC 5245. They
      include also pairs that overflow the conncheck list size, but this is a
      somewhat more marginal situation. So we are mainly interested in the
      first use case of this state.
      
      This state mixes two different situations, that deserve a distinct
      handling : on one side, there are waiting or frozen pairs that must be
      removed, this is an immediate action that doesn't need a dedicated state
      for that. And on the other side, there are in-progress pairs that
      should no longer be retransmitted, because another pair with a higher
      priority has already been nominated.
      
      This patch removes the cancelled state, and adds a flag
      retransmit_on_timeout to deal with this last situation. Note that this
      case should not generate a triggered check, as per described in section
      7.2.1.4, when the state of the pair is In-Progress or Failed, since this
      pair of lower priority has no hope to replace the nominated one.
      
      Differential Revision: https://phabricator.freedesktop.org/D1114
      95f8805e