blob: d7a0da9e570273a6eef142d483fc12eb4b0b824f [file] [log] [blame]
Benny Prijono312aff92006-06-17 04:08:30 +00001/* $Id$ */
2/*
Benny Prijono844653c2008-12-23 17:27:53 +00003 * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
Benny Prijono32177c02008-06-20 22:44:47 +00004 * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
Benny Prijono312aff92006-06-17 04:08:30 +00005 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */
20
21/**
22 * @file doxygen.h
23 * @brief PJSIP Doxygen's mainpage.
24 */
25
26/*////////////////////////////////////////////////////////////////////////// */
27/*
28 INTRODUCTION PAGE
29 */
30
31/**
Benny Prijono5ee1f2e2006-09-22 20:43:00 +000032 \n
Benny Prijono312aff92006-06-17 04:08:30 +000033
Benny Prijono5ee1f2e2006-09-22 20:43:00 +000034 @mainpage PJSIP - Open Source SIP Stack
Benny Prijono312aff92006-06-17 04:08:30 +000035
36 \n
37 \n
38 @section intro_sec Introduction
39
40 PJSIP is an Open Source SIP prototol stack, designed to be very small in
41 footprint, have high performance, and very flexible.
42
43 @subsection hist_sec History
44
45 PJSIP has been actively developed since 2003, but its history goes well
46 beyond that. The author has been developing SIP stack since 1999 during
47 RFC 2543 era, and after several experimentation with different approaches
48 in the programming (the first stack actually was in C++!), and also with
49 the evolution of the SIP protocol itself, the current/third generation
50 of PJSIP (the 0.2.9 version is the second generation) can be considered
51 as pretty stable in term of design, and should
52 incorporate all design considerations (and implementation tricks!) that
53 have been learned over the years. Of course only time will tell if this
54 statement can still be held true in the future.
55
56
57
58
59 \n
60 \n
61 @section pjsipgetting_started Getting Started
62
63 PJSIP consists of multiple levels of APIs, which each of them layered on
64 top of another. Because of this, new readers may find it a bit difficult
65 to find the place to start.
66
67 In general, I think perhaps I can recommend two approaches on using PJSIP.
68
69
70 \n
71 @subsection getting_started_high Using PJSUA API
72
73 @ref PJSUA_LIB wraps together all SIP components and media into a high level
74 API, suitable for creating typical SIP user agent applications. It
75 features easy to use API for:
76 - multiple client registration (accounts),
77 - high level SIP and media session (calls),
78 - buddy list, presence and instant messaging,
79 - powerful and very easy to use media manipulation,
80
81 while maintaining some space for customization (custom SIP
82 transport, custom SIP media, etc.) needed by some types of applications.
83 @ref PJSUA_LIB is also aimed to be able to run on devices such as PDA
84 or mobile phones, by carefully allowing application to set the appropriate
85 threading strategy and memory limits (number of calls, media ports, etc.).
86
87 However, @ref PJSUA_LIB may not be the most suitable API for some types
88 of applications, since it is directed towards an easy to use API. For
89 more more advanced use, you may better implement the application by using
90 PJSIP + PJMEDIA directly, as described below.
91
92
93 \n
94 @subsection getting_started_pjsip_pjmedia Using PJSIP and PJMEDIA Directly
95
96 For the ultimate flexibility and power, using PJSIP and PJMEDIA directly
97 is the way to go. The drawback will be, of course, steeper learning curve.
98
99 However, the following links may provide some useful information:
100 - <A HREF="/docs.htm">PJSIP Developer's Guide</A> PDF
101 document is the ultimate guide to understand PJSIP design concept.
102 - there are some samples in <A HREF="/cgi-bin/viewcvs.cgi/pjproject/trunk/pjsip-apps/src/samples/">
103 <b>pjsip-apps/src/samples</b></A> directory.
104 - @ref PJSUA_LIB source code may also be useful to see how high level
105 API are implemented with PJSIP/PJMEDIA.
106 - and finally, you can always <b>Use the Source</b>!
107
108
109
110 \n
111 \n
112 @section this_doc About This Document
113
114 This document contains the reference information about PJSIP. For
115 more in-depth guide (and information in general), readers are
116 encouraged to read the <A HREF="/docs.htm">
117 <b>PJSIP Developer's Guide</b></A> PDF document
118 which can be downloaded from http://www.pjsip.org/docs.htm.
119
120 \n
121 @subsection doc_ver Version
122
Benny Prijonoe80cdf02007-01-25 01:38:03 +0000123 This document corresponds to PJSIP version 0.5.10.
Benny Prijono312aff92006-06-17 04:08:30 +0000124
125 \n
126 @subsection doc_how_to_read How to Read This Document
127
128 For main navigation, please go to <A HREF="modules.htm"><b>Modules</b></A>
129 link on top of this page.
130
131 This document was generated with <A HREF="http://www.doxygen.org">Doxygen</A>
132 from PJSIP header files.
133
134
135 \n
136 \n
137 @section pjsip_toc Documentation Contents
138
139 Click on <A HREF="modules.htm"><b>Modules</b></A> link on top of this page
140 to get the detailed table of contents.
141
142 The following are top level sections in the <A HREF="modules.htm">
143 <b>Modules</b></A>, as laid out in the following diagram:
144
145 \image html pjsip-arch.jpg "Static Library Layout"
146
147 Enumerating the static libraries from the bottom:
148
149 - <A HREF="/pjlib/docs/main.htm">PJLIB</A>, is the platform abstraction
150 and framework library, on which all other libraries depend,
151
152 - PJLIB-UTIL, provides auxiliary functions such as text scanning,
153 XML, and STUN,
154
155 - PJMEDIA is the multimedia framework,
156
157 - PJMEDIA-CODEC is the placeholder for media codecs,
158
159 - @ref PJSIP_CORE (<b>PJSIP-CORE</b>) is the very core of the PJSIP library,
160 and contains the SIP @ref PJSIP_ENDPT, which is the owner/manager for all
161 SIP objects in the application, messaging elements, parsing, transport
162 management, module management, and stateless operations, and also
163 contains:
164
165 - The @ref PJSIP_TRANSACT module inside <b>PJSIP-CORE</b> provides
166 stateful operation, and is the base for higher layer features such as
167 dialogs,
168
169 - The @ref PJSIP_UA module inside <b>PJSIP-CORE</b> manages dialogs, and supports dialog
170 usages,
171
172 - @ref PJSIP_SIMPLE (<b>PJSIP-SIMPLE</b>) provides the base SIP event framework
173 (which uses the common/base dialog framework) and implements presence
174 on top of it, and is also used by call transfer functions,
175
176 - @ref PJSIP_HIGH_UA (<b>PJSIP-UA</b>) is the high level abstraction of INVITE sessions
177 (using the common/base dialog framework). This library also provides
178 SIP client registration and call transfer functionality,
179
180 - and finally, @ref PJSUA_LIB (<b>PJSUA-LIB</b>) is the highest level of abstraction,
181 which wraps together all above functionalities into high level, easy to
182 use API.
183*/
184
185
Benny Prijono1ec70b32006-06-20 15:39:07 +0000186/**
187 @page page_pjsip_samples PJSIP Samples
188
189 I wish I could write more samples, but for now here are some samples or
190 working applications that are available from the source tree:
191
192 - @ref page_pjsip_sample_sipstateless_c\n
193 This is about the simplest SIP application with PJSIP, all it does is
194 respond all incoming requests with 501 (Not Implemented) response
195 statelessly.
196
197 - @ref page_pjsip_sample_simple_ua_c\n
198 This is a very simple SIP User Agent application that only use PJSIP
199 (without PJSIP-UA). It's able to make and receive call, and play
200 media to the sound device.
201
Benny Prijonof77ba882007-01-08 01:20:07 +0000202 - @ref page_pjsip_sample_simple_pjsuaua_c\n
203 Very simple SIP User Agent with registration, call, and media, using
204 PJSUA-API, all in under 200 lines of code.
205
Benny Prijono1ec70b32006-06-20 15:39:07 +0000206 - @ref page_pjsip_samples_pjsua\n
207 This is the reference implementation for PJSIP and PJMEDIA.
208 PJSUA is a console based application, designed to be simple enough
209 to be readble, but powerful enough to demonstrate all features
210 available in PJSIP and PJMEDIA.\n
211 Screenshot on WinXP: \image html pjsua.jpg "pjsua on WinXP"
212
213 - @ref page_pjmedia_samples_siprtp_c\n
214 This is a useful program (integrated with PJSIP) to actively measure
215 the network quality/impairment parameters by making one or more SIP
216 calls (or receiving one or more SIP calls) and display the network
217 impairment of each stream direction at the end of the call.
218 The program is able to measure network quality parameters such as
219 jitter, packet lost/reorder/duplicate, round trip time, etc.\n
220 Note that the remote peer MUST support RTCP so that network quality
221 of each direction can be calculated. Using siprtp for both endpoints
222 is recommended.\n
223 Screenshots on WinXP: \image html siprtp.jpg "siprtp screenshot on WinXP"
224
Benny Prijono5ee1f2e2006-09-22 20:43:00 +0000225 - @ref page_pjsip_perf_c\n
226 This sample contains a complete implementation of a SIP performance
227 measurement tool. Unlike other tool such SIPp, pjsip-perf is geared
228 more towards finding the performance of an endpoint by flooding the
229 endpoint with some requests and time the completion of the requests.\n
230 Screenshots on Linux console: \image html pjsip-perf.jpg "pjsip-perf screenshot on Linux"
Benny Prijono1ec70b32006-06-20 15:39:07 +0000231 */
232
233/**
234 * \page page_pjsip_samples_pjsua PJSUA
235 *
236 * This is the reference implementation for PJSIP and PJMEDIA.
237 * PJSUA is a console based application, designed to be simple enough
238 * to be readble, but powerful enough to demonstrate all features
239 * available in PJSIP and PJMEDIA.
240 *
241 * This file is pjsip-apps/src/pjsua/pjsua_app.c
242 *
243 * Screenshot on WinXP: \image html pjsua.jpg "pjsua on WinXP"
244 *
245 * \includelineno pjsua_app.c
246 */
247
248/**
249 * \page page_pjsip_sample_simple_ua_c Samples: Simple UA
250 *
251 * This is a very simple SIP User Agent application that only use PJSIP
252 * (without PJSIP-UA). It's able to make and receive call, and play
253 * media to the sound device.
254 *
255 * \includelineno simpleua.c
256 */
257
258/**
Benny Prijonof77ba882007-01-08 01:20:07 +0000259 * \page page_pjsip_sample_simple_pjsuaua_c Samples: Simple PJSUA
260 *
261 * Very simple SIP User Agent with registration, call, and media, all
262 * in under 200 lines of code.
263 *
264 * \includelineno simple_pjsua.c
265 */
266
267/**
Benny Prijono1ec70b32006-06-20 15:39:07 +0000268 * \page page_pjsip_sample_sipstateless_c Samples: Stateless SIP Endpoint
269 *
270 * This is about the simplest SIP application with PJSIP, all it does is
271 * respond all incoming requests with 501 (Not Implemented) response
272 * statelessly.
273 *
274 * \includelineno sipstateless.c
275 */
276
277/**
Benny Prijono5ee1f2e2006-09-22 20:43:00 +0000278 * \page page_pjmedia_samples_siprtp_c Samples: siprtp - SIP with RTCP Quality Monitoring
Benny Prijono1ec70b32006-06-20 15:39:07 +0000279 *
280 * This source is an example to demonstrate using SIP and RTP/RTCP framework
281 * to measure the network quality/impairment from the SIP call. This
282 * program can be used to make calls or to receive calls from other
283 * SIP endpoint (or other siprtp program), and to display the media
284 * quality statistics at the end of the call.
285 *
286 * Note that the remote peer must support RTCP.
287 *
288 * The layout of the program has been designed so that custom reporting
289 * can be generated instead of plain human readable text.
290 *
291 * The source code of the file is pjsip-apps/src/samples/siprtp.c
292 *
293 * Screenshots on WinXP: \image html siprtp.jpg
294 *
295 * \includelineno siprtp.c
296 */
297
Benny Prijono5ee1f2e2006-09-22 20:43:00 +0000298/**
299 * \page page_pjsip_perf_c Samples: pjsip-perf - SIP Performance Benchmarking Tool
300 *
301 * This sample contains a complete implementation of a SIP performance
302 * measurement tool. Unlike other tool such SIPp, pjsip-perf is geared
303 * more towards finding the performance of an endpoint by flooding the
304 * endpoint with some requests and time the completion of the requests.
305 *
306 * The source code of the file is pjsip-apps/src/samples/pjsip-perf.c
307 *
308 * Screenshots on Linux console: \image html pjsip-perf.jpg
309 *
310 * \includelineno pjsip-perf.c
311 */
312