doc_mainpage.h 5.9 KB

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