tree: d16ba1a32510987d0eb03f4098d34013013768a5 [path history] [tgz]
  1. cand.c
  2. candpair.c
  3. chklist.c
  4. connchk.c
  5. lcand.c
  6. mod.mk
  7. rcand.c
  8. README.md
  9. stunsrv.c
  10. tcpconn.c
  11. trice.c
  12. trice.h
third_party/rawrtc/rew/src/trice/README.md

ICE-NOTES:


Application layer:

  • Can handle any modes (Full, Ice, Trickle)
  • Can implement any nomination-type (regular, aggressive)
  • Can encode/decode SDP attributes
  • Must gather all candidates (including STUN/TURN servers)
  • Application can choose the Default Local Candidate
  • Application can choose the Default Remote Candidate
  • Can measure RTT end-to-end
  • Can apply a STUN consent timer on top of ICE
  • the application should have the freedom to choose any selected candidate-pair
  • can install Keep-Alive timer (Binding Indication) for any pairs
  • can install a consent timer for any pair

ICE layer:

  • All modes (Full-ICE and Trickle-ICE) are implemented
  • ICE-lite is NOT supported
  • agnostic to modes (Full, Trickle)
  • agnostic to nomination-type (regular, aggressive)
  • SDP encoding and decoding of ICE-relavant attributes
  • can handle between 1 and 2 components per media-stream
  • gathering: No candidate gathering, must be done in App
  • agnostic to transport protocol (should handle both UDP and TCP)
  • rel-addr (related address) is supported, but it is not used in the logic
  • ICE-stack does not choose the Default Local Candidate
  • ICE-stack does not choose the Default Remote Candidate
  • no TURN client
  • Each local candidate can have its own listen address/port. Yes
  • Support for UDP-transport
  • Support for TCP-transport
  • Support for IPv4 and IPv6
  • modular design with building blocks.
  • check all components before calling estabh ? no.
  • no support for "default" candidate/candidate-pair
  • component object: NO
  • selected pair: NO
  • must be able to support custom UDP/TCP-transport via helpers

Interop:

OK - Firefox 31.0 OK - Firefox 35.0 OK - Firefox 36.0 OK - Chrome 41 OK - Chrome 58

TODO:

done - remove ICE-lite mode done - remove rel-addr from ICE-code done - interop testing with Chrome done - interop testing with Firefox - seems to be working with 31.0 done - Firefox: test with trickling candidates over Websock done - add support for TCP-candidates (test with Chrome) done - make a new test-client (reicec) and test on a public server done - do we need to support LITE at all? No. done - split EOC flag into local_eoc and remote_eoc done - send trigged request from stunsrv done - new module "icesdp" for SDP encoding/decoding done - add a new module "shim" (RFC 4571) - ICE module should be Conncheck-only, no data-transport - test_ice_tcp: S-O not working on Linux done - check when adding PRFLX that EOC-flag is set/unset (not needed) done - move use_cand flag to checklist_start/send_conncheck ? - verify that APP can grab udp/tcp-sock - consider moving pacing-logic to application?

Architecture Diagram:


.-------. .-------. | App | | App | '-------' '-------' | | \ | .--------. | | +--------+ STUN +--------+ | | '--------' | | "ICE-layer" | .-------. | | | SHIM | | | '-------' | | | / .-------. .-------. | UDP | | TCP | '-------' '-------' | | ! !