/* $Id$ */ /* * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /** @mainpage PJNATH - Open Source ICE, STUN, and TURN Library PJNATH (PJSIP NAT Helper) is an open source library providing NAT traversal functionalities by using standard based protocols such as STUN, TURN, and ICE. \section background Background Network Address Translation (NAT) is commonly deployed everywhere primarily to alleviate the exhaustion of IPv4 address space by allowing multiple hosts to share a public/Internet address. While NAT would work well for typical client server communications (such as web and email), since it's always the client that initiates the conversation and normally client doesn't need to maintain the connection for a long time, installation of NAT would cause major problem for peer-to-peer communication, such as (and especially) VoIP. \ref nat_intro "Read more.." \section intro Introduction to PJNATH PJSIP NAT Helper (PJNATH) is a library which contains the implementation of standard based NAT traversal solutions. PJNATH can be used as a stand-alone library for your software, or you may use PJSUA-LIB library, a very high level library integrating PJSIP, PJMEDIA, and PJNATH into simple to use APIs. PJNATH has the following features: - STUNbis implementation,\n providing both ready to use STUN-aware socket and framework to implement higher level STUN based protocols such as TURN and ICE. The implementation complies to RFC 5389 standard.\n\n - NAT type detection, \n performs detection of the NAT type in front of the endpoint, according to RFC 3489. While the practice to detect the NAT type to assist NAT traversal has been deprecated in favor of ICE, the information may still be useful for troubleshooting purposes, hence the utility is provided.\n\n - Traversal Using Relays around NAT (TURN) implementation.\n TURN is a protocol for relaying communications by means of using relay, and combined with ICE it provides efficient last effort alternative for the communication path. The TURN implementation in PJNATH complies to draft-ietf-behave-turn-14 draft.\n\n - Interactive Connectivity Establishmen (ICE) implementation.\n ICE is a protocol for discovering communication path(s) between two endpoints. The implementation in PJNATH complies to draft-ietf-mmusic-ice-19.txt draft In the future, more protocols will be implemented (such as UPnP IGD, and SOCKS5). \section pjnath_organization_sec Library Organization The library provides the following main component groups: - \ref PJNATH_STUN\n\n - \ref PJNATH_TURN\n\n - \ref PJNATH_ICE\n\n - \ref PJNATH_NAT_DETECT\n\n Apart from the \ref PJNATH_NAT_DETECT, each component group are further divided into two functionalities: - Transport objects\n The transport objects (such as STUN transport, TURN transport, and ICE stream transport) are the implementation of the session object with particular transport/sockets. They are provided as ready to use objects for applications.\n\n - Transport independent/session layer\n The session objects (such as STUN session, TURN session, and ICE session) are the core object for maintaining the protocol session, and it is independent of transport (i.e. it does not "own" a socket). This way developers can reuse these session objects for any kind of transports, such as UDP, TCP, or TLS, with or without using PJLIB socket API. The session objects provide function and callback to send and receive packets respectively. For more information about each component groups, please click the component link above. \section pjnath_start_sec Getting Started with PJNATH \subsection dependency Library Dependencies The PJNATH library depends (and only depends) on PJLIB and PJLIB-UTIL libraries. All these libraries should have been packaged together with the main PJSIP distribution. You can download the PJSIP distribution from PJSIP website \subsection pjnath_using_sec Using the libraries Please click on the appropriate component under \ref pjnath_organization_sec section above, which will take you to the documentation on how to use the component. \subsection samples_sec Samples We attempt to provide simple samples to use each functionality of the PJNATH library. Please see \ref samples_page page for the list of samples. */ /** @defgroup samples_page PJNATH Samples and screenshots @brief Sample applications and screenshots */