blob: 58f27dad96ec1d3e9f5d20776acbeddbe037e6a1 [file] [log] [blame]
Alexandre Lision8af73cb2013-12-10 14:11:20 -05001/* $Id: doc_mainpage.h 3553 2011-05-05 06:14:19Z nanang $ */
Tristan Matthews0a329cc2013-07-17 13:20:14 -04002/*
3 * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 */
19
20
21/**
22
23@mainpage PJNATH - Open Source ICE, STUN, and TURN Library
24
25PJNATH (PJSIP NAT Helper) is an open source library providing NAT traversal
26functionalities by using standard based protocols such as STUN, TURN, and ICE.
27
28
29\section background Background
30
31
32Network Address Translation (NAT) is commonly deployed everywhere primarily to
33alleviate the exhaustion of IPv4 address space by allowing multiple hosts to
34share a public/Internet address. While NAT would work well for typical client
35server communications (such as web and email), since it's always the client
36that initiates the conversation and normally client doesn't need to maintain
37the connection for a long time, installation of NAT would cause major problem
38for peer-to-peer communication, such as (and especially) VoIP.
39
40<strong>\ref nat_intro "Read more.."</strong>
41
42
43\section intro Introduction to PJNATH
44
45PJSIP NAT Helper (PJNATH) is a library which contains the implementation of
46standard based NAT traversal solutions. PJNATH can be used as a stand-alone
47library for your software, or you may use PJSUA-LIB library, a very high level
48 library integrating PJSIP, PJMEDIA, and PJNATH into simple to use APIs.
49
50PJNATH has the following features:
51
52 - <strong>STUNbis</strong> implementation,\n
53 providing both ready to use
54 STUN-aware socket and framework to implement higher level STUN based
55 protocols such as TURN and ICE. The implementation complies to
56 <A HREF="http://www.ietf.org/rfc/rfc5389.txt">RFC 5389</A>
57 standard.\n\n
58
59 - <strong>NAT type detection</strong>, \n
60 performs detection of the NAT type in front of the endpoint, according
61 to <A HREF="http://www.ietf.org/rfc/rfc3489.txt">RFC 3489</A>.
62 While the practice to detect the NAT type to assist NAT
63 traversal has been deprecated in favor of ICE, the information may still
64 be useful for troubleshooting purposes, hence the utility is provided.\n\n
65
66 - <strong>Traversal Using Relays around NAT (TURN)</strong> implementation.\n
67 TURN is a protocol for relaying communications by means of using relay,
68 and combined with ICE it provides efficient last effort alternative for
69 the communication path. The TURN implementation in PJNATH complies to
70 <A HREF="http://www.ietf.org/internet-drafts/draft-ietf-behave-turn-14.txt">
71 draft-ietf-behave-turn-14</A> draft.\n\n
72
73 - <strong>Interactive Connectivity Establishmen (ICE)</strong> implementation.\n
74 ICE is a protocol for discovering communication path(s) between two
75 endpoints. The implementation in PJNATH complies to
76 <A HREF="http://www.ietf.org/internet-drafts/draft-ietf-mmusic-ice-19.txt">
77 draft-ietf-mmusic-ice-19.txt</A> draft
78
79In the future, more protocols will be implemented (such as UPnP IGD, and
80SOCKS5).
81
82
83\section pjnath_organization_sec Library Organization
84
85The library provides the following main component groups:
86
87 - \ref PJNATH_STUN\n\n
88 - \ref PJNATH_TURN\n\n
89 - \ref PJNATH_ICE\n\n
90 - \ref PJNATH_NAT_DETECT\n\n
91
92Apart from the \ref PJNATH_NAT_DETECT, each component group are further
93divided into two functionalities:
94
95 - <b>Transport objects</b>\n
96 The transport objects (such as STUN transport, TURN transport, and ICE
97 stream transport) are the implementation of the session object
98 <strong>with</strong> particular transport/sockets. They are provided
99 as ready to use objects for applications.\n\n
100
101 - <b>Transport independent/session layer</b>\n
102 The session objects (such as STUN session, TURN session, and ICE session)
103 are the core object for maintaining the protocol session, and it is
104 independent of transport (i.e. it does not "own" a socket). This way
105 developers can reuse these session objects for any kind of transports,
106 such as UDP, TCP, or TLS, with or without using PJLIB socket API.
107 The session objects provide function and callback to send and receive
108 packets respectively.
109
110For more information about each component groups, please click the component
111link above.
112
113
114\section pjnath_start_sec Getting Started with PJNATH
115
116\subsection dependency Library Dependencies
117
118The PJNATH library depends (and only depends) on PJLIB and PJLIB-UTIL
119libraries. All these libraries should have been packaged together with
120the main PJSIP distribution. You can download the PJSIP distribution
121from <A HREF="http://www.pjsip.org">PJSIP website</A>
122
123
124\subsection pjnath_using_sec Using the libraries
125
126Please click on the appropriate component under \ref pjnath_organization_sec
127section above, which will take you to the documentation on how to use the
128component.
129
130
131\subsection samples_sec Samples
132
133We attempt to provide simple samples to use each functionality of the PJNATH
134library.
135
136Please see <b>\ref samples_page</b> page for the list of samples.
137
138
139*/
140
141
142
143/**
144@defgroup samples_page PJNATH Samples and screenshots
145@brief Sample applications and screenshots
146 */
147
148