Dear all,

Our apologies if you receive multiple copies of this announcement.

We are glad to announce the first release of our TURN server, called TurnServer. This implementation has started in the Louis Paster university during mid July 2008. The software is OpenSource under the GPLv3 license (with an exception for OpenSSL).

Our implementation supports all the methods from the latest TURN draft at this day (ietf-draft-behave-turn-09) and the Binding method from STUN (draft-ietf-behave-rfc3489bis-17). All the messages and attributes from STUN and TURN can be forged. The transport protocol from the client to the server can be UDP, TCP or TLS over TCP. The server requires the long-term authentication for TURN requests. The ietf-draft-behave-turn-ipv6 is also implemented. The flags E and R are supported but not P flag (Preserving allocation) for the moment.

I have been in contact with the SIP Communicator community and they are very interested in this project. Together, we have begin a new project called Ice4J which is based on the Stun4J stack. Ice4J will provide a Java implementation of STUN, STUN2 (rfc3489bis), TURN and ICE protocols. The goal of the project is to provide VoIP Java developers with a means of handling NATs and firewalls.

TurnServer code can be retrieved from the project page on sourceforge.net :
https://sourceforge.net/projects/turnserver/

TurnServer website is available at http://www.turnserver.org/ and two mailing lists at http://sourceforge.net/mail/?group_id=234986

Any feedback is very welcome in order to improve our implementation.

Best regards,
Sebastien Vincent
Network Research Team, University of Strasbourg, France

----
Technical details about the implementation :

- Written in pure C in respects of the C99 and POSIX + XSI standards;
- Written with security in mind;
- Documented with Doxygen;
- Use the autoconf / automake build system;
- Use select() to multiplex sockets;
- Can set the maximum number of socket for select() at compilation time (./configure --enable-fdsetsize=2048) -> Add a replacement of fd_set which can be set _at_compilation_time_ without modifying system headers.
- Use realtime signals (POSIX 1.b) for the object timeout;
-> When an object timeout, it is placed in a expired list that will be purged on the next loop. - Single thread, to avoid having some kind of mutexes in software and in functions like malloc(); - Use the following librairies : OpenSSL (for cryptographics parts and TLS), Confuse (configuration parsing), librt (POSIX realtime support);
- Asynchronous TLS socket;
- TLS and TCP socket are the same, the difference between TLS and TCP stream is made on comparing the first three bytes; - The accounts is stored in a plain text file that is parsed when the server is launched; - Memory leaks free :) (ok just 48 bytes when using TLS but they could not be avoided);
- STUN2 + TURN parser patch for Wireshark.

Portability notes :
TurnServer should compile and work on POSIX systems with real-time extensions support. It is known to work on GNU/Linux 2.6 and FreeBSD 7.0. TurnServer will not work on MacOS X because it does not have realtime extension and no replacement exists for the functions used (timer_create, timer_delete, ...), and Microsoft Windows for the same reason.

Next steps I plan to do in late august :
- P flag support;
- Add a userspace system to simulate timer_create / timer_delete and realtime signals for MacOS X. - Add a list of alternate servers with capabilities (IPv4 / IPv6, flags) in configuration file.

Maybe in september :
- Add mecanisms to support other methods to get the accounts (databases, PAM, XML, ...); - Add a userspace system to simulate timer_create / timer_delete and realtime signals for Microsoft Windows;
- Think about replace linked-list by hashtable.
- draft-ietf-behave-turn-tcp;
_______________________________________________
P2PSIP mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/p2psip

Reply via email to