Skip to main content
Last updated January 17, 2011 04:03, by Charles Chappell

Welcome to Iced Java. This project is an implementation of RFC 5245 ICE, RFC 5389 STUN and RFC 5766 TURN.

In a nutshell, that means this project is a tool that can be used to establish direct connections between two NATed or Firewalled peers. Usually this can be accomplished without needing an intermediary node to pass data back and forth, although a common intermediary IS required to set up the connection. In the worst case scenario, this project also includes a TURN server that can be used as an intermediary between two peers who would otherwise not be able to communicate.

I made a decision early on NOT to base this project on previous STUN related work such as JSTUN or STUN4J due to the rather dramatic changes between the first STUN RFC 3489 and the current RFC 5389, which de-emphasizes stun as a solution to NAT problems, but instead a tool that when used with other tools like TURN and ICE can form a complete solution.

The goal of this project is to be that complete solution, encompassing as many use cases as possible, while imposing a minimal burden on the users of the library to modify their code. RTP Streaming is the most obvious use case, for this library, though any P2P based service is a good candidate for using Iced Java to reduce the programming burden imposed by NAT devices.

Security is considered a high priority, and the STUN Message-Identity and Fingerprint mechanisms are used both with ICE and TURN connections, where it's reasonable to assume that the parties involved should reasonably know each other before proceeding. This is especially true of TURN, where the relay can reasonably be expected to know both endpoints in advance.

Using IcedJava

IcedJava is Free Software as specified by the Lesser GPL 3.0 license. There is no particular requirement that you ask permission or obtain a license, however, you MUST include the text of the LGPL 3.0 license in your application, specifying that you are using a software library covered by this license. See the LGPL 3.0 license included with IcedJava, or on the Free Software Foundation's web site for more details about how to do this.

As IcedJava is covered by the Lesser GPL, not the GPL, there is no requirement that you ONLY use IcedJava with an open-source project. You are in fact encouraged to use IcedJava with commercial (closed source) projects, provided you give credit where due, and understand there is no warranty provided.

I would like to know if you're using IcedJava in your project, and whether you find it useful.


If you wish to donate code to the IcedJava project, please contact the author through the forums, or email.

I'm looking for help with the TURN server code, refactoring to support DI frameworks, extensibility improvements, and RFC compliance testing. Please be aware that any such code donations will NEED to be made in accordance with the terms of the LGPL 3.0 license, and you will not retain personal ownership of such code, but be donating it to this project. (Being LGPL3 means you can still use it however you please, as long as you license others the same rights) You will be credited for any donations you make to this project.

Please Confirm