Subject: [P2PSIP] TurnServer - An OpenSource TURN server implementation

From: Sébastien Vincent<[email-masked]>
Date: Sat, 26 Jul 2008 19:39:16 +0200

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-masked]
https://www.ietf.org/mailman/listinfo/p2psip