Ticket #485 (closed enhancement: fixed)

Opened 10 years ago

Last modified 9 years ago

Support for new TURN draft (TURN-07) and latest ICE draft (ICE-19)

Reported by: bennylp Owned by: bennylp
Priority: major Milestone: release-0.9.0
Component: pjnath Version: trunk
Keywords: Cc:
Backport to 1.x milestone: Backported:

Description


Change History

comment:1 Changed 10 years ago by bennylp

  • Status changed from new to assigned

In r1811:

  • Initial modification to STUN messaging to keep it up to date with TURN-06

comment:2 Changed 10 years ago by bennylp

In r1812:

  • Initial TURN server implementation (not yet compilable)

comment:3 Changed 10 years ago by bennylp

More work in r1850

comment:4 Changed 10 years ago by bennylp

  • Summary changed from Support for new TURN draft (TURN-06) and latest ICE draft (ICE-19) to Support for new TURN draft (TURN-07) and latest ICE draft (ICE-19)

In r1852:

  • Updated PJNATH with TURN-07
  • Added authentication in TURN server (pjturn-srv)

comment:5 Changed 10 years ago by bennylp

In r1854:

  • Initial (incomplete) work on TURN client session module

comment:6 Changed 10 years ago by bennylp

In r1862:

  • Initial implementation (untested) of UDP TURN client session.

comment:7 Changed 10 years ago by bennylp

In r1867:

  • Added TURN client application

comment:8 Changed 10 years ago by bennylp

Huge changes in STUN framework to streamline STUN authentication in r1877:

  • server authentication using dynamic credential should not ask for the username from the credential, but rather just verify that the username/password match.
  • STUN session now requires short term or long term credential to be specified in pj_stun_session_set_credentials()
  • moved pj_stun_create_key() from sip_msg.[hc] to stun_auth.[hc]
  • add password_type parameter in pj_stun_create_key(), for calculating key from saved hashed password
  • STUN session now reports incoming requests as rdata rather than the plain request message. The rdata contains additional authentication info/credential that is found in the request, to be used to create response.
  • added unit test for session authentication

comment:9 Changed 10 years ago by bennylp

More changes:

  • r1879: client and server test
  • r1880: fixed wrong UDP code point and REQUESTED-TRANSPORT attribute encoding

comment:10 Changed 10 years ago by bennylp

In r1882:

  • updated Makefiles and fixed compilation warnings with gcc

comment:11 Changed 10 years ago by bennylp

In r1885:

  • fixed wrong encoding of CHANNEL-NUMBER attribute

comment:12 Changed 10 years ago by bennylp

Huge changeset related to TURN in r1913:

STUN:

  • STUN session operations now has something called token, which will be passed back to application in the callbacks. This is very useful if application wants to associate something with the operation, for example, TURN server needs to respond to initial Allocate request using the same transport/socket as where the request came from, and it can put the transport instance as token.
  • Fixed bug: STUN requests still get retransmitted even when TCP is used.

TURN:

  • Support for TURN UDP over TCP in both server and client
  • Merge UDP and TCP TURN client socket abstraction into just one object (turn_sock.c) rather than separately (as turn_udp.c) as they share very similar implementation.
  • Testing
  • Updated build system for VS6, VS8, CE, GNU, and Symbian

comment:13 Changed 10 years ago by bennylp

Enhanced the documentation and added UML class diagram in r1914 and r1915

comment:14 Changed 10 years ago by bennylp

In r1916:

  • Removed pjstun-srv-test project/application and fixed build errors with makefiles

comment:15 Changed 10 years ago by bennylp

In r1917:

  • Now really removed pjstun-srv-test (!)

comment:16 Changed 10 years ago by bennylp

In r1923:

  • fixed REQUESTED-TRANSPORT endianness

comment:17 Changed 10 years ago by bennylp

In r1924:

  • Fixed permission not allowing peer with the same IP address but different port to get through
  • Added option to disable FINGERPRINT verification. This is needed in TURN server since it is currently broken when TURN is used with ICE (which has a FINGERPRINT in its Binding Request)

comment:18 follow-up: ↓ 19 Changed 10 years ago by bennylp

Created new branch branches/projects/ice-turn07.

All new checkins will go here.

comment:19 in reply to: ↑ 18 Changed 10 years ago by bennylp

Replying to bennylp:

Created new branch branches/projects/ice-turn07.

All new checkins will go here.

This was in r1925

comment:20 Changed 10 years ago by bennylp

Huge changeset in r1926 (ice-turn07 branch):

  • Integration and testing of TURN with ICE with PJSUA-LIB with pjsua
  • RTCP via TURN is still broken it seems
  • Many experimental new options were added in PJSUA-LIB/pjsua

Below are the details.

PJNATH:

  • Added relay candidate in ice-strans
  • Changes in ice-strans initialization to support TURN, this is accomplished with pj_ice_strans_cfg structure.
  • Currently DNS SRV resolution for STUN and TURN is not supported. Application (e.g. PJSUA-LIB) must do the SRV resolution.
  • ICE session was also modified to support TURN candidate

PJMEDIA:

  • Support TURN in ICE media transport.
  • Change ICE media transport initialization to support TURN

PJSUA-LIB:

  • Added TURN related settings
  • Added more ICE related settings for testing (ice_options, ice_no_rtcp).

pjsua:

  • --use-turn: To enable TURN. The configuration is still hard-coded in pjsua_app.c
  • --ice-no-host: Disable host candidates in ICE
  • --ice-no-srflx: Disable STUN candidates in ICE
  • --ice-no-rtcp: Disable RTCP in ICE

comment:21 Changed 9 years ago by bennylp

Merging the changes to trunk

Starts below..

comment:22 Changed 9 years ago by bennylp

In r1988:

  • Added STUN socket transport pj_stun_sock
  • Integration of TURN-07 to ICE
  • Major refactoring in ICE stream transport to make it simpler by reusing existing transport classes.
  • Major modification (i.e. API change) in almost everywhere else to support server side authentication, handling/protection of destruction in callback, and generally to make it more robust.
  • More elaborate STUN, TURN, and ICE tests in pjnath-test.

comment:23 Changed 9 years ago by bennylp

In r1989:

  • major modification in pjmedia's ICE transport to support the new ICE API. The new pjmedia's ICE transport API is much simpler now (only one public API is required).

comment:24 Changed 9 years ago by bennylp

In r1990:

  • Added TURN support in PJSUA-LIB API

comment:25 Changed 9 years ago by bennylp

  • Status changed from assigned to closed
  • Resolution set to fixed
Note: See TracTickets for help on using tickets.