blob: d82430670ad42ae34272ec06a2160b1f1f20253e [file] [log] [blame]
Benny Prijono268ca612006-02-07 12:34:11 +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 Prijono268ca612006-02-07 12:34:11 +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#ifndef __PJSUA_H__
21#define __PJSUA_H__
22
Benny Prijono312aff92006-06-17 04:08:30 +000023/**
24 * @file pjsua.h
25 * @brief PJSUA API.
26 */
27
28
Benny Prijono268ca612006-02-07 12:34:11 +000029/* Include all PJSIP core headers. */
30#include <pjsip.h>
31
32/* Include all PJMEDIA headers. */
33#include <pjmedia.h>
34
Benny Prijono1f9afba2006-02-10 15:57:32 +000035/* Include all PJMEDIA-CODEC headers. */
36#include <pjmedia-codec.h>
37
Benny Prijono268ca612006-02-07 12:34:11 +000038/* Include all PJSIP-UA headers */
39#include <pjsip_ua.h>
40
Benny Prijono834aee32006-02-19 01:38:06 +000041/* Include all PJSIP-SIMPLE headers */
42#include <pjsip_simple.h>
43
Benny Prijono4ab9fbb2007-10-12 12:14:27 +000044/* Include all PJNATH headers */
45#include <pjnath.h>
46
Benny Prijono268ca612006-02-07 12:34:11 +000047/* Include all PJLIB-UTIL headers. */
48#include <pjlib-util.h>
49
50/* Include all PJLIB headers. */
51#include <pjlib.h>
52
53
Benny Prijonoe6ead542007-01-31 20:53:31 +000054PJ_BEGIN_DECL
55
56
Benny Prijono312aff92006-06-17 04:08:30 +000057/**
Benny Prijono58163a22009-06-03 08:40:24 +000058 * @defgroup PJSUA_LIB PJSUA API - High Level Softphone API
Benny Prijono312aff92006-06-17 04:08:30 +000059 * @brief Very high level API for constructing SIP UA applications.
60 * @{
61 *
Benny Prijono58163a22009-06-03 08:40:24 +000062 * @section pjsua_api_intro A SIP User Agent API for C/C++
Benny Prijonoe6ead542007-01-31 20:53:31 +000063 *
Benny Prijono58163a22009-06-03 08:40:24 +000064 * PJSUA API is very high level API for constructing SIP multimedia user agent
Benny Prijono312aff92006-06-17 04:08:30 +000065 * applications. It wraps together the signaling and media functionalities
66 * into an easy to use call API, provides account management, buddy
67 * management, presence, instant messaging, along with multimedia
68 * features such as conferencing, file streaming, local playback,
69 * voice recording, and so on.
70 *
Benny Prijonoe6ead542007-01-31 20:53:31 +000071 * @subsection pjsua_for_c_cpp C/C++ Binding
Benny Prijono312aff92006-06-17 04:08:30 +000072 * Application must link with <b>pjsua-lib</b> to use this API. In addition,
73 * this library depends on the following libraries:
74 * - <b>pjsip-ua</b>,
75 * - <b>pjsip-simple</b>,
76 * - <b>pjsip-core</b>,
77 * - <b>pjmedia</b>,
78 * - <b>pjmedia-codec</b>,
79 * - <b>pjlib-util</b>, and
80 * - <b>pjlib</b>,
81 *
Benny Prijonoe6ead542007-01-31 20:53:31 +000082 * so application must also link with these libraries as well. For more
83 * information, please refer to
84 * <A HREF="http://www.pjsip.org/using.htm">Getting Started with PJSIP</A>
85 * page.
Benny Prijono312aff92006-06-17 04:08:30 +000086 *
Benny Prijonoe6ead542007-01-31 20:53:31 +000087 * @section pjsua_samples
88 *
Benny Prijono58163a22009-06-03 08:40:24 +000089 * Few samples are provided:
Benny Prijonoe6ead542007-01-31 20:53:31 +000090 *
91 - @ref page_pjsip_sample_simple_pjsuaua_c\n
92 Very simple SIP User Agent with registration, call, and media, using
93 PJSUA-API, all in under 200 lines of code.
94
95 - @ref page_pjsip_samples_pjsua\n
96 This is the reference implementation for PJSIP and PJMEDIA.
97 PJSUA is a console based application, designed to be simple enough
98 to be readble, but powerful enough to demonstrate all features
99 available in PJSIP and PJMEDIA.\n
100
Benny Prijono312aff92006-06-17 04:08:30 +0000101 * @section root_using_pjsua_lib Using PJSUA API
102 *
Benny Prijonoe6ead542007-01-31 20:53:31 +0000103 * Please refer to @ref PJSUA_LIB_BASE on how to create and initialize the API.
104 * And then see the Modules on the bottom of this page for more information
105 * about specific subject.
Benny Prijono312aff92006-06-17 04:08:30 +0000106 */
107
Benny Prijonoa91a0032006-02-26 21:23:45 +0000108
Benny Prijonof3195072006-02-14 21:15:30 +0000109
Benny Prijono312aff92006-06-17 04:08:30 +0000110/*****************************************************************************
111 * BASE API
112 */
113
Benny Prijonof04ffdd2006-02-21 00:11:18 +0000114/**
Benny Prijonoe6ead542007-01-31 20:53:31 +0000115 * @defgroup PJSUA_LIB_BASE PJSUA-API Basic API
Benny Prijono312aff92006-06-17 04:08:30 +0000116 * @ingroup PJSUA_LIB
117 * @brief Basic application creation/initialization, logging configuration, etc.
118 * @{
119 *
120 * The base PJSUA API controls PJSUA creation, initialization, and startup, and
121 * also provides various auxiliary functions.
122 *
123 * @section using_pjsua_lib Using PJSUA Library
124 *
125 * @subsection creating_pjsua_lib Creating PJSUA
126 *
Benny Prijono58163a22009-06-03 08:40:24 +0000127 * Before anything else, application must create PJSUA by calling
128 * #pjsua_create().
Benny Prijono312aff92006-06-17 04:08:30 +0000129 * This, among other things, will initialize PJLIB, which is crucial before
Benny Prijonoe6ead542007-01-31 20:53:31 +0000130 * any PJLIB functions can be called, PJLIB-UTIL, and create a SIP endpoint.
131 *
132 * After this function is called, application can create a memory pool (with
133 * #pjsua_pool_create()) and read configurations from command line or file to
134 * build the settings to initialize PJSUA below.
Benny Prijono312aff92006-06-17 04:08:30 +0000135 *
136 * @subsection init_pjsua_lib Initializing PJSUA
137 *
138 * After PJSUA is created, application can initialize PJSUA by calling
Benny Prijonoe6ead542007-01-31 20:53:31 +0000139 * #pjsua_init(). This function takes several optional configuration settings
140 * in the argument, if application wants to set them.
Benny Prijono312aff92006-06-17 04:08:30 +0000141 *
Benny Prijonoe6ead542007-01-31 20:53:31 +0000142 * @subsubsection init_pjsua_lib_c_cpp PJSUA-LIB Initialization (in C)
143 * Sample code to initialize PJSUA in C code:
Benny Prijono312aff92006-06-17 04:08:30 +0000144 \code
145
Benny Prijonob5388cf2007-01-04 22:45:08 +0000146 #include <pjsua-lib/pjsua.h>
147
148 #define THIS_FILE __FILE__
149
150 static pj_status_t app_init(void)
151 {
Benny Prijono312aff92006-06-17 04:08:30 +0000152 pjsua_config ua_cfg;
153 pjsua_logging_config log_cfg;
154 pjsua_media_config media_cfg;
Benny Prijonob5388cf2007-01-04 22:45:08 +0000155 pj_status_t status;
156
157 // Must create pjsua before anything else!
158 status = pjsua_create();
159 if (status != PJ_SUCCESS) {
160 pjsua_perror(THIS_FILE, "Error initializing pjsua", status);
161 return status;
162 }
Benny Prijono312aff92006-06-17 04:08:30 +0000163
164 // Initialize configs with default settings.
165 pjsua_config_default(&ua_cfg);
166 pjsua_logging_config_default(&log_cfg);
167 pjsua_media_config_default(&media_cfg);
168
169 // At the very least, application would want to override
170 // the call callbacks in pjsua_config:
171 ua_cfg.cb.on_incoming_call = ...
172 ua_cfg.cb.on_call_state = ..
173 ...
174
175 // Customize other settings (or initialize them from application specific
176 // configuration file):
177 ...
178
179 // Initialize pjsua
180 status = pjsua_init(&ua_cfg, &log_cfg, &media_cfg);
181 if (status != PJ_SUCCESS) {
182 pjsua_perror(THIS_FILE, "Error initializing pjsua", status);
183 return status;
184 }
Benny Prijonob5388cf2007-01-04 22:45:08 +0000185 .
186 ...
187 }
Benny Prijono312aff92006-06-17 04:08:30 +0000188 \endcode
189 *
Benny Prijonoe6ead542007-01-31 20:53:31 +0000190 *
Benny Prijonoe6ead542007-01-31 20:53:31 +0000191
192
Benny Prijono312aff92006-06-17 04:08:30 +0000193 * @subsection other_init_pjsua_lib Other Initialization
194 *
195 * After PJSUA is initialized with #pjsua_init(), application will normally
196 * need/want to perform the following tasks:
197 *
Benny Prijonoe6ead542007-01-31 20:53:31 +0000198 * - create SIP transport with #pjsua_transport_create(). Application would
199 * to call #pjsua_transport_create() for each transport types that it
200 * wants to support (for example, UDP, TCP, and TLS). Please see
Benny Prijono312aff92006-06-17 04:08:30 +0000201 * @ref PJSUA_LIB_TRANSPORT section for more info.
202 * - create one or more SIP accounts with #pjsua_acc_add() or
Benny Prijonoe6ead542007-01-31 20:53:31 +0000203 * #pjsua_acc_add_local(). The SIP account is used for registering with
204 * the SIP server, if any. Please see @ref PJSUA_LIB_ACC for more info.
Benny Prijono312aff92006-06-17 04:08:30 +0000205 * - add one or more buddies with #pjsua_buddy_add(). Please see
206 * @ref PJSUA_LIB_BUDDY section for more info.
207 * - optionally configure the sound device, codec settings, and other
208 * media settings. Please see @ref PJSUA_LIB_MEDIA for more info.
209 *
210 *
211 * @subsection starting_pjsua_lib Starting PJSUA
212 *
213 * After all initializations have been done, application must call
214 * #pjsua_start() to start PJSUA. This function will check that all settings
Benny Prijonoe6ead542007-01-31 20:53:31 +0000215 * have been properly configured, and apply default settings when they haven't,
216 * or report error status when it is unable to recover from missing settings.
Benny Prijono312aff92006-06-17 04:08:30 +0000217 *
218 * Most settings can be changed during run-time. For example, application
219 * may add, modify, or delete accounts, buddies, or change media settings
220 * during run-time.
Benny Prijonob5388cf2007-01-04 22:45:08 +0000221 *
Benny Prijonoe6ead542007-01-31 20:53:31 +0000222 * @subsubsection starting_pjsua_lib_c C Example for Starting PJSUA
Benny Prijonob5388cf2007-01-04 22:45:08 +0000223 * Sample code:
224 \code
225 static pj_status_t app_run(void)
226 {
227 pj_status_t status;
228
229 // Start pjsua
230 status = pjsua_start();
231 if (status != PJ_SUCCESS) {
232 pjsua_destroy();
233 pjsua_perror(THIS_FILE, "Error starting pjsua", status);
234 return status;
235 }
236
237 // Run application loop
238 while (1) {
239 char choice[10];
240
241 printf("Select menu: ");
242 fgets(choice, sizeof(choice), stdin);
243 ...
244 }
245 }
246 \endcode
Benny Prijonoe6ead542007-01-31 20:53:31 +0000247
Benny Prijonof04ffdd2006-02-21 00:11:18 +0000248 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +0000249
Benny Prijono312aff92006-06-17 04:08:30 +0000250/** Constant to identify invalid ID for all sorts of IDs. */
251#define PJSUA_INVALID_ID (-1)
Benny Prijonoeebe9af2006-06-13 22:57:13 +0000252
253/** Call identification */
254typedef int pjsua_call_id;
255
Benny Prijono312aff92006-06-17 04:08:30 +0000256/** Account identification */
257typedef int pjsua_acc_id;
Benny Prijonoeebe9af2006-06-13 22:57:13 +0000258
259/** Buddy identification */
Benny Prijono8b1889b2006-06-06 18:40:40 +0000260typedef int pjsua_buddy_id;
Benny Prijonoeebe9af2006-06-13 22:57:13 +0000261
262/** File player identification */
Benny Prijono8b1889b2006-06-06 18:40:40 +0000263typedef int pjsua_player_id;
Benny Prijonoeebe9af2006-06-13 22:57:13 +0000264
265/** File recorder identification */
Benny Prijono8b1889b2006-06-06 18:40:40 +0000266typedef int pjsua_recorder_id;
Benny Prijonoeebe9af2006-06-13 22:57:13 +0000267
268/** Conference port identification */
Benny Prijono8b1889b2006-06-06 18:40:40 +0000269typedef int pjsua_conf_port_id;
270
Benny Prijono63fba012008-07-17 14:19:10 +0000271/** Opaque declaration for server side presence subscription */
272typedef struct pjsua_srv_pres pjsua_srv_pres;
273
274/** Forward declaration for pjsua_msg_data */
275typedef struct pjsua_msg_data pjsua_msg_data;
Benny Prijono8b1889b2006-06-06 18:40:40 +0000276
Benny Prijonoeebe9af2006-06-13 22:57:13 +0000277
Benny Prijonoa91a0032006-02-26 21:23:45 +0000278/**
Benny Prijono312aff92006-06-17 04:08:30 +0000279 * Maximum proxies in account.
Benny Prijonodc39fe82006-05-26 12:17:46 +0000280 */
Benny Prijono312aff92006-06-17 04:08:30 +0000281#ifndef PJSUA_ACC_MAX_PROXIES
282# define PJSUA_ACC_MAX_PROXIES 8
283#endif
Benny Prijonoeebe9af2006-06-13 22:57:13 +0000284
Benny Prijonod8179652008-01-23 20:39:07 +0000285#if defined(PJMEDIA_HAS_SRTP) && (PJMEDIA_HAS_SRTP != 0)
Benny Prijonoeebe9af2006-06-13 22:57:13 +0000286
Benny Prijonod8179652008-01-23 20:39:07 +0000287/**
288 * Default value of SRTP mode usage. Valid values are PJMEDIA_SRTP_DISABLED,
289 * PJMEDIA_SRTP_OPTIONAL, and PJMEDIA_SRTP_MANDATORY.
290 */
291#ifndef PJSUA_DEFAULT_USE_SRTP
292 #define PJSUA_DEFAULT_USE_SRTP PJMEDIA_SRTP_DISABLED
293#endif
294
295/**
296 * Default value of secure signaling requirement for SRTP.
297 * Valid values are:
298 * 0: SRTP does not require secure signaling
299 * 1: SRTP requires secure transport such as TLS
300 * 2: SRTP requires secure end-to-end transport (SIPS)
301 */
302#ifndef PJSUA_DEFAULT_SRTP_SECURE_SIGNALING
303 #define PJSUA_DEFAULT_SRTP_SECURE_SIGNALING 1
304#endif
305
306#endif
Benny Prijonoeebe9af2006-06-13 22:57:13 +0000307
308/**
Benny Prijono07fe2302010-06-24 12:33:18 +0000309 * Controls whether PJSUA-LIB should add ICE media feature tag
310 * parameter (the ";+sip.ice" parameter) to Contact header if ICE
311 * is enabled in the config.
312 *
313 * Default: 1
314 */
315#ifndef PJSUA_ADD_ICE_TAGS
316# define PJSUA_ADD_ICE_TAGS 1
317#endif
318
Sauw Ming844c1c92010-09-07 05:12:02 +0000319/**
320 * Timeout value used to acquire mutex lock on a particular call.
321 *
322 * Default: 2000 ms
323 */
324#ifndef PJSUA_ACQUIRE_CALL_TIMEOUT
325# define PJSUA_ACQUIRE_CALL_TIMEOUT 2000
326#endif
327
Benny Prijono07fe2302010-06-24 12:33:18 +0000328
329/**
Benny Prijonob5388cf2007-01-04 22:45:08 +0000330 * Logging configuration, which can be (optionally) specified when calling
331 * #pjsua_init(). Application must call #pjsua_logging_config_default() to
332 * initialize this structure with the default values.
Benny Prijonoeebe9af2006-06-13 22:57:13 +0000333 */
334typedef struct pjsua_logging_config
335{
336 /**
337 * Log incoming and outgoing SIP message? Yes!
338 */
339 pj_bool_t msg_logging;
340
341 /**
342 * Input verbosity level. Value 5 is reasonable.
343 */
344 unsigned level;
345
346 /**
347 * Verbosity level for console. Value 4 is reasonable.
348 */
349 unsigned console_level;
350
351 /**
352 * Log decoration.
353 */
354 unsigned decor;
355
356 /**
357 * Optional log filename.
358 */
359 pj_str_t log_filename;
360
361 /**
Benny Prijonodbe3f4b2009-05-07 16:56:04 +0000362 * Additional flags to be given to #pj_file_open() when opening
363 * the log file. By default, the flag is PJ_O_WRONLY. Application
364 * may set PJ_O_APPEND here so that logs are appended to existing
365 * file instead of overwriting it.
366 *
367 * Default is 0.
368 */
369 unsigned log_file_flags;
370
371 /**
Benny Prijonoeebe9af2006-06-13 22:57:13 +0000372 * Optional callback function to be called to write log to
373 * application specific device. This function will be called for
374 * log messages on input verbosity level.
375 */
Benny Prijonofe7d87b2007-11-29 11:35:44 +0000376 void (*cb)(int level, const char *data, int len);
Benny Prijonoeebe9af2006-06-13 22:57:13 +0000377
378
379} pjsua_logging_config;
380
381
382/**
383 * Use this function to initialize logging config.
384 *
385 * @param cfg The logging config to be initialized.
386 */
Benny Prijono1f61a8f2007-08-16 10:11:44 +0000387PJ_DECL(void) pjsua_logging_config_default(pjsua_logging_config *cfg);
Benny Prijonoeebe9af2006-06-13 22:57:13 +0000388
Benny Prijonoeebe9af2006-06-13 22:57:13 +0000389
390/**
391 * Use this function to duplicate logging config.
392 *
393 * @param pool Pool to use.
394 * @param dst Destination config.
395 * @param src Source config.
396 */
Benny Prijono1f61a8f2007-08-16 10:11:44 +0000397PJ_DECL(void) pjsua_logging_config_dup(pj_pool_t *pool,
398 pjsua_logging_config *dst,
399 const pjsua_logging_config *src);
Benny Prijonoeebe9af2006-06-13 22:57:13 +0000400
Benny Prijonodc39fe82006-05-26 12:17:46 +0000401
402/**
Benny Prijono4dd961b2009-10-26 11:21:37 +0000403 * Structure to be passed on MWI callback.
404 */
405typedef struct pjsua_mwi_info
406{
407 pjsip_evsub *evsub; /**< Event subscription session, for
408 reference. */
409 pjsip_rx_data *rdata; /**< The received NOTIFY request. */
410} pjsua_mwi_info;
411
412
413/**
Nanang Izzuddin4ea1bcc2010-09-28 04:57:01 +0000414 * Structure to be passed on registration callback.
415 */
416typedef struct pjsua_reg_info
417{
418 struct pjsip_regc_cbparam *cbparam; /**< Parameters returned by
419 registration callback. */
420} pjsua_reg_info;
421
422
423/**
Benny Prijonob5388cf2007-01-04 22:45:08 +0000424 * This structure describes application callback to receive various event
425 * notification from PJSUA-API. All of these callbacks are OPTIONAL,
426 * although definitely application would want to implement some of
427 * the important callbacks (such as \a on_incoming_call).
Benny Prijonodc39fe82006-05-26 12:17:46 +0000428 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +0000429typedef struct pjsua_callback
Benny Prijonodc39fe82006-05-26 12:17:46 +0000430{
431 /**
Benny Prijono9fc735d2006-05-28 14:58:12 +0000432 * Notify application when invite state has changed.
433 * Application may then query the call info to get the
Benny Prijonoe6ead542007-01-31 20:53:31 +0000434 * detail call states by calling pjsua_call_get_info() function.
Benny Prijono0875ae82006-12-26 00:11:48 +0000435 *
436 * @param call_id The call index.
437 * @param e Event which causes the call state to change.
Benny Prijonodc39fe82006-05-26 12:17:46 +0000438 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +0000439 void (*on_call_state)(pjsua_call_id call_id, pjsip_event *e);
Benny Prijonodc39fe82006-05-26 12:17:46 +0000440
441 /**
Benny Prijono8b1889b2006-06-06 18:40:40 +0000442 * Notify application on incoming call.
Benny Prijono0875ae82006-12-26 00:11:48 +0000443 *
444 * @param acc_id The account which match the incoming call.
445 * @param call_id The call id that has just been created for
446 * the call.
447 * @param rdata The incoming INVITE request.
Benny Prijono8b1889b2006-06-06 18:40:40 +0000448 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +0000449 void (*on_incoming_call)(pjsua_acc_id acc_id, pjsua_call_id call_id,
Benny Prijono8b1889b2006-06-06 18:40:40 +0000450 pjsip_rx_data *rdata);
451
452 /**
Benny Prijonofeb69f42007-10-05 09:12:26 +0000453 * This is a general notification callback which is called whenever
454 * a transaction within the call has changed state. Application can
455 * implement this callback for example to monitor the state of
456 * outgoing requests, or to answer unhandled incoming requests
457 * (such as INFO) with a final response.
458 *
459 * @param call_id Call identification.
460 * @param tsx The transaction which has changed state.
461 * @param e Transaction event that caused the state change.
462 */
463 void (*on_call_tsx_state)(pjsua_call_id call_id,
464 pjsip_transaction *tsx,
465 pjsip_event *e);
466
467 /**
Benny Prijonoeebe9af2006-06-13 22:57:13 +0000468 * Notify application when media state in the call has changed.
469 * Normal application would need to implement this callback, e.g.
Benny Prijono6ba8c542007-10-16 01:34:14 +0000470 * to connect the call's media to sound device. When ICE is used,
471 * this callback will also be called to report ICE negotiation
472 * failure.
Benny Prijono0875ae82006-12-26 00:11:48 +0000473 *
474 * @param call_id The call index.
Benny Prijonoeebe9af2006-06-13 22:57:13 +0000475 */
476 void (*on_call_media_state)(pjsua_call_id call_id);
477
Benny Prijonofc13bf62008-02-20 08:56:15 +0000478
479 /**
480 * Notify application when media session is created and before it is
481 * registered to the conference bridge. Application may return different
482 * media port if it has added media processing port to the stream. This
483 * media port then will be added to the conference bridge instead.
484 *
485 * @param call_id Call identification.
486 * @param sess Media session for the call.
487 * @param stream_idx Stream index in the media session.
488 * @param p_port On input, it specifies the media port of the
489 * stream. Application may modify this pointer to
490 * point to different media port to be registered
491 * to the conference bridge.
Benny Prijonofc13bf62008-02-20 08:56:15 +0000492 */
493 void (*on_stream_created)(pjsua_call_id call_id,
494 pjmedia_session *sess,
495 unsigned stream_idx,
496 pjmedia_port **p_port);
497
498 /**
499 * Notify application when media session has been unregistered from the
500 * conference bridge and about to be destroyed.
501 *
502 * @param call_id Call identification.
503 * @param sess Media session for the call.
504 * @param stream_idx Stream index in the media session.
Benny Prijonofc13bf62008-02-20 08:56:15 +0000505 */
506 void (*on_stream_destroyed)(pjsua_call_id call_id,
507 pjmedia_session *sess,
508 unsigned stream_idx);
509
Benny Prijonoeebe9af2006-06-13 22:57:13 +0000510 /**
Benny Prijono0875ae82006-12-26 00:11:48 +0000511 * Notify application upon incoming DTMF digits.
512 *
513 * @param call_id The call index.
514 * @param digit DTMF ASCII digit.
515 */
516 void (*on_dtmf_digit)(pjsua_call_id call_id, int digit);
517
518 /**
Benny Prijonob5388cf2007-01-04 22:45:08 +0000519 * Notify application on call being transfered (i.e. REFER is received).
Benny Prijono9fc735d2006-05-28 14:58:12 +0000520 * Application can decide to accept/reject transfer request
Benny Prijonoc54dcb32008-04-08 23:33:15 +0000521 * by setting the code (default is 202). When this callback
Benny Prijono9fc735d2006-05-28 14:58:12 +0000522 * is not defined, the default behavior is to accept the
523 * transfer.
Benny Prijono0875ae82006-12-26 00:11:48 +0000524 *
525 * @param call_id The call index.
526 * @param dst The destination where the call will be
527 * transfered to.
528 * @param code Status code to be returned for the call transfer
529 * request. On input, it contains status code 200.
Benny Prijono9fc735d2006-05-28 14:58:12 +0000530 */
Benny Prijono4ddad2c2006-10-18 17:16:34 +0000531 void (*on_call_transfer_request)(pjsua_call_id call_id,
532 const pj_str_t *dst,
533 pjsip_status_code *code);
534
535 /**
536 * Notify application of the status of previously sent call
537 * transfer request. Application can monitor the status of the
538 * call transfer request, for example to decide whether to
539 * terminate existing call.
540 *
541 * @param call_id Call ID.
Benny Prijonoe6ead542007-01-31 20:53:31 +0000542 * @param st_code Status progress of the transfer request.
543 * @param st_text Status progress text.
Benny Prijono4ddad2c2006-10-18 17:16:34 +0000544 * @param final If non-zero, no further notification will
Benny Prijonoe6ead542007-01-31 20:53:31 +0000545 * be reported. The st_code specified in
Benny Prijono4ddad2c2006-10-18 17:16:34 +0000546 * this callback is the final status.
547 * @param p_cont Initially will be set to non-zero, application
548 * can set this to FALSE if it no longer wants
549 * to receie further notification (for example,
550 * after it hangs up the call).
551 */
552 void (*on_call_transfer_status)(pjsua_call_id call_id,
Benny Prijonoe6ead542007-01-31 20:53:31 +0000553 int st_code,
554 const pj_str_t *st_text,
Benny Prijono4ddad2c2006-10-18 17:16:34 +0000555 pj_bool_t final,
556 pj_bool_t *p_cont);
Benny Prijono9fc735d2006-05-28 14:58:12 +0000557
558 /**
Benny Prijono053f5222006-11-11 16:16:04 +0000559 * Notify application about incoming INVITE with Replaces header.
560 * Application may reject the request by setting non-2xx code.
561 *
562 * @param call_id The call ID to be replaced.
563 * @param rdata The incoming INVITE request to replace the call.
564 * @param st_code Status code to be set by application. Application
565 * should only return a final status (200-699).
566 * @param st_text Optional status text to be set by application.
567 */
568 void (*on_call_replace_request)(pjsua_call_id call_id,
569 pjsip_rx_data *rdata,
570 int *st_code,
571 pj_str_t *st_text);
572
573 /**
574 * Notify application that an existing call has been replaced with
575 * a new call. This happens when PJSUA-API receives incoming INVITE
576 * request with Replaces header.
577 *
578 * After this callback is called, normally PJSUA-API will disconnect
579 * \a old_call_id and establish \a new_call_id.
580 *
581 * @param old_call_id Existing call which to be replaced with the
582 * new call.
583 * @param new_call_id The new call.
584 * @param rdata The incoming INVITE with Replaces request.
585 */
586 void (*on_call_replaced)(pjsua_call_id old_call_id,
587 pjsua_call_id new_call_id);
588
589
590 /**
Benny Prijono9fc735d2006-05-28 14:58:12 +0000591 * Notify application when registration status has changed.
592 * Application may then query the account info to get the
593 * registration details.
Benny Prijono0875ae82006-12-26 00:11:48 +0000594 *
Nanang Izzuddin4ea1bcc2010-09-28 04:57:01 +0000595 * @param acc_id The account ID.
Benny Prijonodc39fe82006-05-26 12:17:46 +0000596 */
Benny Prijono8b1889b2006-06-06 18:40:40 +0000597 void (*on_reg_state)(pjsua_acc_id acc_id);
Benny Prijonodc39fe82006-05-26 12:17:46 +0000598
599 /**
Nanang Izzuddin4ea1bcc2010-09-28 04:57:01 +0000600 * Notify application when registration status has changed.
601 * Application may inspect the registration info to get the
602 * registration status details.
603 *
604 * @param acc_id The account ID.
605 * @param info The registration info.
606 */
607 void (*on_reg_state2)(pjsua_acc_id acc_id, pjsua_reg_info *info);
608
609 /**
Benny Prijono63fba012008-07-17 14:19:10 +0000610 * Notification when incoming SUBSCRIBE request is received. Application
611 * may use this callback to authorize the incoming subscribe request
612 * (e.g. ask user permission if the request should be granted).
613 *
614 * If this callback is not implemented, all incoming presence subscription
615 * requests will be accepted.
616 *
617 * If this callback is implemented, application has several choices on
618 * what to do with the incoming request:
619 * - it may reject the request immediately by specifying non-200 class
620 * final response in the \a code argument.
621 * - it may immediately accept the request by specifying 200 as the
622 * \a code argument. This is the default value if application doesn't
623 * set any value to the \a code argument. In this case, the library
624 * will automatically send NOTIFY request upon returning from this
625 * callback.
626 * - it may delay the processing of the request, for example to request
627 * user permission whether to accept or reject the request. In this
628 * case, the application MUST set the \a code argument to 202, and
629 * later calls #pjsua_pres_notify() to accept or reject the
630 * subscription request.
631 *
632 * Any \a code other than 200 and 202 will be treated as 200.
633 *
634 * Application MUST return from this callback immediately (e.g. it must
635 * not block in this callback while waiting for user confirmation).
636 *
637 * @param srv_pres Server presence subscription instance. If
638 * application delays the acceptance of the request,
639 * it will need to specify this object when calling
640 * #pjsua_pres_notify().
641 * @param acc_id Account ID most appropriate for this request.
642 * @param buddy_id ID of the buddy matching the sender of the
643 * request, if any, or PJSUA_INVALID_ID if no
644 * matching buddy is found.
645 * @param from The From URI of the request.
646 * @param rdata The incoming request.
647 * @param code The status code to respond to the request. The
648 * default value is 200. Application may set this
649 * to other final status code to accept or reject
650 * the request.
651 * @param reason The reason phrase to respond to the request.
652 * @param msg_data If the application wants to send additional
653 * headers in the response, it can put it in this
654 * parameter.
655 */
656 void (*on_incoming_subscribe)(pjsua_acc_id acc_id,
657 pjsua_srv_pres *srv_pres,
658 pjsua_buddy_id buddy_id,
659 const pj_str_t *from,
660 pjsip_rx_data *rdata,
661 pjsip_status_code *code,
662 pj_str_t *reason,
663 pjsua_msg_data *msg_data);
664
665 /**
666 * Notification when server side subscription state has changed.
667 * This callback is optional as application normally does not need
668 * to do anything to maintain server side presence subscription.
669 *
670 * @param acc_id The account ID.
671 * @param srv_pres Server presence subscription object.
672 * @param remote_uri Remote URI string.
673 * @param state New subscription state.
674 * @param event PJSIP event that triggers the state change.
675 */
676 void (*on_srv_subscribe_state)(pjsua_acc_id acc_id,
677 pjsua_srv_pres *srv_pres,
678 const pj_str_t *remote_uri,
679 pjsip_evsub_state state,
680 pjsip_event *event);
681
682 /**
Benny Prijono9fc735d2006-05-28 14:58:12 +0000683 * Notify application when the buddy state has changed.
684 * Application may then query the buddy into to get the details.
Benny Prijono0875ae82006-12-26 00:11:48 +0000685 *
686 * @param buddy_id The buddy id.
Benny Prijono9fc735d2006-05-28 14:58:12 +0000687 */
Benny Prijono8b1889b2006-06-06 18:40:40 +0000688 void (*on_buddy_state)(pjsua_buddy_id buddy_id);
Benny Prijono9fc735d2006-05-28 14:58:12 +0000689
Benny Prijono63499892010-10-12 12:45:15 +0000690
691 /**
692 * Notify application when the state of client subscription session
693 * associated with a buddy has changed. Application may use this
694 * callback to retrieve more detailed information about the state
695 * changed event.
696 *
697 * @param buddy_id The buddy id.
698 * @param sub Event subscription session.
699 * @param event The event which triggers state change event.
700 */
701 void (*on_buddy_evsub_state)(pjsua_buddy_id buddy_id,
702 pjsip_evsub *sub,
703 pjsip_event *event);
704
Benny Prijono9fc735d2006-05-28 14:58:12 +0000705 /**
706 * Notify application on incoming pager (i.e. MESSAGE request).
Benny Prijonoeebe9af2006-06-13 22:57:13 +0000707 * Argument call_id will be -1 if MESSAGE request is not related to an
Benny Prijonodc39fe82006-05-26 12:17:46 +0000708 * existing call.
Benny Prijono0875ae82006-12-26 00:11:48 +0000709 *
Benny Prijonobbeb3992007-05-21 13:48:35 +0000710 * See also \a on_pager2() callback for the version with \a pjsip_rx_data
711 * passed as one of the argument.
712 *
Benny Prijono0875ae82006-12-26 00:11:48 +0000713 * @param call_id Containts the ID of the call where the IM was
714 * sent, or PJSUA_INVALID_ID if the IM was sent
715 * outside call context.
716 * @param from URI of the sender.
717 * @param to URI of the destination message.
718 * @param contact The Contact URI of the sender, if present.
719 * @param mime_type MIME type of the message.
720 * @param body The message content.
Benny Prijonodc39fe82006-05-26 12:17:46 +0000721 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +0000722 void (*on_pager)(pjsua_call_id call_id, const pj_str_t *from,
723 const pj_str_t *to, const pj_str_t *contact,
724 const pj_str_t *mime_type, const pj_str_t *body);
725
726 /**
Benny Prijonobbeb3992007-05-21 13:48:35 +0000727 * This is the alternative version of the \a on_pager() callback with
728 * \a pjsip_rx_data argument.
729 *
730 * @param call_id Containts the ID of the call where the IM was
731 * sent, or PJSUA_INVALID_ID if the IM was sent
732 * outside call context.
733 * @param from URI of the sender.
734 * @param to URI of the destination message.
735 * @param contact The Contact URI of the sender, if present.
736 * @param mime_type MIME type of the message.
737 * @param body The message content.
738 * @param rdata The incoming MESSAGE request.
Benny Prijonoba736c42008-07-10 20:45:03 +0000739 * @param acc_id Account ID most suitable for this message.
Benny Prijonobbeb3992007-05-21 13:48:35 +0000740 */
741 void (*on_pager2)(pjsua_call_id call_id, const pj_str_t *from,
742 const pj_str_t *to, const pj_str_t *contact,
743 const pj_str_t *mime_type, const pj_str_t *body,
Benny Prijonoba736c42008-07-10 20:45:03 +0000744 pjsip_rx_data *rdata, pjsua_acc_id acc_id);
Benny Prijonobbeb3992007-05-21 13:48:35 +0000745
746 /**
Benny Prijonoeebe9af2006-06-13 22:57:13 +0000747 * Notify application about the delivery status of outgoing pager
Benny Prijono4da0b1d2007-06-11 18:22:54 +0000748 * request. See also on_pager_status2() callback for the version with
749 * \a pjsip_rx_data in the argument list.
Benny Prijonoeebe9af2006-06-13 22:57:13 +0000750 *
751 * @param call_id Containts the ID of the call where the IM was
752 * sent, or PJSUA_INVALID_ID if the IM was sent
753 * outside call context.
754 * @param to Destination URI.
755 * @param body Message body.
756 * @param user_data Arbitrary data that was specified when sending
757 * IM message.
758 * @param status Delivery status.
759 * @param reason Delivery status reason.
760 */
761 void (*on_pager_status)(pjsua_call_id call_id,
762 const pj_str_t *to,
763 const pj_str_t *body,
764 void *user_data,
765 pjsip_status_code status,
766 const pj_str_t *reason);
Benny Prijonodc39fe82006-05-26 12:17:46 +0000767
768 /**
Benny Prijono4da0b1d2007-06-11 18:22:54 +0000769 * Notify application about the delivery status of outgoing pager
770 * request.
771 *
772 * @param call_id Containts the ID of the call where the IM was
773 * sent, or PJSUA_INVALID_ID if the IM was sent
774 * outside call context.
775 * @param to Destination URI.
776 * @param body Message body.
777 * @param user_data Arbitrary data that was specified when sending
778 * IM message.
779 * @param status Delivery status.
780 * @param reason Delivery status reason.
Benny Prijono0a982002007-06-12 16:22:09 +0000781 * @param tdata The original MESSAGE request.
Benny Prijono4da0b1d2007-06-11 18:22:54 +0000782 * @param rdata The incoming MESSAGE response, or NULL if the
783 * message transaction fails because of time out
784 * or transport error.
Benny Prijonoba736c42008-07-10 20:45:03 +0000785 * @param acc_id Account ID from this the instant message was
786 * send.
Benny Prijono4da0b1d2007-06-11 18:22:54 +0000787 */
788 void (*on_pager_status2)(pjsua_call_id call_id,
789 const pj_str_t *to,
790 const pj_str_t *body,
791 void *user_data,
792 pjsip_status_code status,
793 const pj_str_t *reason,
Benny Prijono0a982002007-06-12 16:22:09 +0000794 pjsip_tx_data *tdata,
Benny Prijonoba736c42008-07-10 20:45:03 +0000795 pjsip_rx_data *rdata,
796 pjsua_acc_id acc_id);
Benny Prijono4da0b1d2007-06-11 18:22:54 +0000797
798 /**
Benny Prijono9fc735d2006-05-28 14:58:12 +0000799 * Notify application about typing indication.
Benny Prijono0875ae82006-12-26 00:11:48 +0000800 *
801 * @param call_id Containts the ID of the call where the IM was
802 * sent, or PJSUA_INVALID_ID if the IM was sent
803 * outside call context.
804 * @param from URI of the sender.
805 * @param to URI of the destination message.
806 * @param contact The Contact URI of the sender, if present.
807 * @param is_typing Non-zero if peer is typing, or zero if peer
808 * has stopped typing a message.
Benny Prijonodc39fe82006-05-26 12:17:46 +0000809 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +0000810 void (*on_typing)(pjsua_call_id call_id, const pj_str_t *from,
811 const pj_str_t *to, const pj_str_t *contact,
812 pj_bool_t is_typing);
Benny Prijonodc39fe82006-05-26 12:17:46 +0000813
Benny Prijono6ba8c542007-10-16 01:34:14 +0000814 /**
Benny Prijonoba736c42008-07-10 20:45:03 +0000815 * Notify application about typing indication.
816 *
817 * @param call_id Containts the ID of the call where the IM was
818 * sent, or PJSUA_INVALID_ID if the IM was sent
819 * outside call context.
820 * @param from URI of the sender.
821 * @param to URI of the destination message.
822 * @param contact The Contact URI of the sender, if present.
823 * @param is_typing Non-zero if peer is typing, or zero if peer
824 * has stopped typing a message.
825 * @param rdata The received request.
826 * @param acc_id Account ID most suitable for this message.
827 */
828 void (*on_typing2)(pjsua_call_id call_id, const pj_str_t *from,
829 const pj_str_t *to, const pj_str_t *contact,
830 pj_bool_t is_typing, pjsip_rx_data *rdata,
831 pjsua_acc_id acc_id);
832
833 /**
Benny Prijono6ba8c542007-10-16 01:34:14 +0000834 * Callback when the library has finished performing NAT type
835 * detection.
836 *
837 * @param res NAT detection result.
838 */
839 void (*on_nat_detect)(const pj_stun_nat_detect_result *res);
840
Benny Prijono5e51a4e2008-11-27 00:06:46 +0000841 /**
842 * This callback is called when the call is about to resend the
843 * INVITE request to the specified target, following the previously
844 * received redirection response.
845 *
846 * Application may accept the redirection to the specified target
847 * (the default behavior if this callback is implemented), reject
848 * this target only and make the session continue to try the next
849 * target in the list if such target exists, stop the whole
850 * redirection process altogether and cause the session to be
851 * disconnected, or defer the decision to ask for user confirmation.
852 *
853 * This callback is optional. If this callback is not implemented,
854 * the default behavior is to NOT follow the redirection response.
855 *
856 * @param call_id The call ID.
857 * @param target The current target to be tried.
Benny Prijono08a48b82008-11-27 12:42:07 +0000858 * @param e The event that caused this callback to be called.
859 * This could be the receipt of 3xx response, or
860 * 4xx/5xx response received for the INVITE sent to
861 * subsequent targets, or NULL if this callback is
862 * called from within #pjsua_call_process_redirect()
863 * context.
864 *
865 * @return Action to be performed for the target. Set this
Benny Prijono5e51a4e2008-11-27 00:06:46 +0000866 * parameter to one of the value below:
867 * - PJSIP_REDIRECT_ACCEPT: immediately accept the
868 * redirection (default value). When set, the
869 * call will immediately resend INVITE request
870 * to the target.
871 * - PJSIP_REDIRECT_REJECT: immediately reject this
872 * target. The call will continue retrying with
873 * next target if present, or disconnect the call
874 * if there is no more target to try.
875 * - PJSIP_REDIRECT_STOP: stop the whole redirection
876 * process and immediately disconnect the call. The
877 * on_call_state() callback will be called with
878 * PJSIP_INV_STATE_DISCONNECTED state immediately
879 * after this callback returns.
880 * - PJSIP_REDIRECT_PENDING: set to this value if
881 * no decision can be made immediately (for example
882 * to request confirmation from user). Application
883 * then MUST call #pjsua_call_process_redirect()
884 * to either accept or reject the redirection upon
885 * getting user decision.
Benny Prijono5e51a4e2008-11-27 00:06:46 +0000886 */
Benny Prijono08a48b82008-11-27 12:42:07 +0000887 pjsip_redirect_op (*on_call_redirected)(pjsua_call_id call_id,
888 const pjsip_uri *target,
889 const pjsip_event *e);
Benny Prijono5e51a4e2008-11-27 00:06:46 +0000890
Benny Prijono4dd961b2009-10-26 11:21:37 +0000891 /**
892 * This callback is called when a NOTIFY request for message summary /
893 * message waiting indication is received.
894 *
895 * @param acc_id The account ID.
896 * @param mwi_info Structure containing details of the event,
897 * including the received NOTIFY request in the
898 * \a rdata field.
899 */
900 void (*on_mwi_info)(pjsua_acc_id acc_id, pjsua_mwi_info *mwi_info);
901
Nanang Izzuddin2fb937e2010-02-24 05:43:34 +0000902 /**
903 * This callback is called when transport state is changed. See also
904 * #pjsip_tp_state_callback.
Nanang Izzuddin2fb937e2010-02-24 05:43:34 +0000905 */
Nanang Izzuddin5e69da52010-02-25 11:58:19 +0000906 pjsip_tp_state_callback on_transport_state;
Nanang Izzuddin2fb937e2010-02-24 05:43:34 +0000907
Benny Prijono4d6ff4d2010-06-19 12:35:33 +0000908 /**
909 * This callback is called to report error in ICE media transport.
910 * Currently it is used to report TURN Refresh error.
911 *
912 * @param index Transport index.
913 * @param op Operation which trigger the failure.
914 * @param status Error status.
915 * @param param Additional info about the event. Currently this will
916 * always be set to NULL.
917 */
918 void (*on_ice_transport_error)(int index, pj_ice_strans_op op,
919 pj_status_t status, void *param);
920
Benny Prijonoeebe9af2006-06-13 22:57:13 +0000921} pjsua_callback;
922
923
Nanang Izzuddin742ef4b2010-09-07 09:36:15 +0000924/**
925 * This enumeration specifies the usage of SIP Session Timers extension.
926 */
927typedef enum pjsua_sip_timer_use
928{
929 /**
930 * When this flag is specified, Session Timers will not be used in any
931 * session, except it is explicitly required in the remote request.
932 */
933 PJSUA_SIP_TIMER_INACTIVE,
934
935 /**
936 * When this flag is specified, Session Timers will be used in all
937 * sessions whenever remote supports and uses it.
938 */
939 PJSUA_SIP_TIMER_OPTIONAL,
940
941 /**
942 * When this flag is specified, Session Timers support will be
943 * a requirement for the remote to be able to establish a session.
944 */
945 PJSUA_SIP_TIMER_REQUIRED,
946
947 /**
948 * When this flag is specified, Session Timers will always be used
949 * in all sessions, regardless whether remote supports/uses it or not.
950 */
951 PJSUA_SIP_TIMER_ALWAYS
952
953} pjsua_sip_timer_use;
Benny Prijonoeebe9af2006-06-13 22:57:13 +0000954
Benny Prijonodc39fe82006-05-26 12:17:46 +0000955
956/**
Benny Prijonob5388cf2007-01-04 22:45:08 +0000957 * This structure describes the settings to control the API and
958 * user agent behavior, and can be specified when calling #pjsua_init().
959 * Before setting the values, application must call #pjsua_config_default()
960 * to initialize this structure with the default values.
Benny Prijonodc39fe82006-05-26 12:17:46 +0000961 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +0000962typedef struct pjsua_config
963{
964
965 /**
Benny Prijonob5388cf2007-01-04 22:45:08 +0000966 * Maximum calls to support (default: 4). The value specified here
967 * must be smaller than the compile time maximum settings
968 * PJSUA_MAX_CALLS, which by default is 32. To increase this
969 * limit, the library must be recompiled with new PJSUA_MAX_CALLS
970 * value.
Benny Prijonoeebe9af2006-06-13 22:57:13 +0000971 */
972 unsigned max_calls;
973
974 /**
975 * Number of worker threads. Normally application will want to have at
976 * least one worker thread, unless when it wants to poll the library
977 * periodically, which in this case the worker thread can be set to
978 * zero.
979 */
980 unsigned thread_cnt;
981
982 /**
Benny Prijonofa9e5b12006-10-08 12:39:34 +0000983 * Number of nameservers. If no name server is configured, the SIP SRV
984 * resolution would be disabled, and domain will be resolved with
985 * standard pj_gethostbyname() function.
986 */
987 unsigned nameserver_count;
988
989 /**
990 * Array of nameservers to be used by the SIP resolver subsystem.
991 * The order of the name server specifies the priority (first name
992 * server will be used first, unless it is not reachable).
993 */
994 pj_str_t nameserver[4];
995
996 /**
Benny Prijono91d06b62008-09-20 12:16:56 +0000997 * Force loose-route to be used in all route/proxy URIs (outbound_proxy
998 * and account's proxy settings). When this setting is enabled, the
999 * library will check all the route/proxy URIs specified in the settings
1000 * and append ";lr" parameter to the URI if the parameter is not present.
1001 *
1002 * Default: 1
1003 */
1004 pj_bool_t force_lr;
1005
1006 /**
Benny Prijonob5388cf2007-01-04 22:45:08 +00001007 * Number of outbound proxies in the \a outbound_proxy array.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001008 */
1009 unsigned outbound_proxy_cnt;
1010
1011 /**
1012 * Specify the URL of outbound proxies to visit for all outgoing requests.
1013 * The outbound proxies will be used for all accounts, and it will
1014 * be used to build the route set for outgoing requests. The final
1015 * route set for outgoing requests will consists of the outbound proxies
1016 * and the proxy configured in the account.
1017 */
1018 pj_str_t outbound_proxy[4];
1019
Benny Prijonoc97608e2007-03-23 16:34:20 +00001020 /**
Benny Prijonobb995fd2009-08-12 11:03:23 +00001021 * Warning: deprecated, please use \a stun_srv field instead. To maintain
1022 * backward compatibility, if \a stun_srv_cnt is zero then the value of
1023 * this field will be copied to \a stun_srv field, if present.
1024 *
Benny Prijonoebbf6892007-03-24 17:37:25 +00001025 * Specify domain name to be resolved with DNS SRV resolution to get the
Benny Prijonof76e1392008-06-06 14:51:48 +00001026 * address of the STUN server. Alternatively application may specify
1027 * \a stun_host instead.
Benny Prijonoebbf6892007-03-24 17:37:25 +00001028 *
1029 * If DNS SRV resolution failed for this domain, then DNS A resolution
1030 * will be performed only if \a stun_host is specified.
Benny Prijonoc97608e2007-03-23 16:34:20 +00001031 */
Benny Prijonoebbf6892007-03-24 17:37:25 +00001032 pj_str_t stun_domain;
1033
1034 /**
Benny Prijonobb995fd2009-08-12 11:03:23 +00001035 * Warning: deprecated, please use \a stun_srv field instead. To maintain
1036 * backward compatibility, if \a stun_srv_cnt is zero then the value of
1037 * this field will be copied to \a stun_srv field, if present.
1038 *
Benny Prijonoaf09dc32007-04-22 12:48:30 +00001039 * Specify STUN server to be used, in "HOST[:PORT]" format. If port is
1040 * not specified, default port 3478 will be used.
Benny Prijonoebbf6892007-03-24 17:37:25 +00001041 */
1042 pj_str_t stun_host;
1043
1044 /**
Benny Prijonobb995fd2009-08-12 11:03:23 +00001045 * Number of STUN server entries in \a stun_srv array.
1046 */
1047 unsigned stun_srv_cnt;
1048
1049 /**
1050 * Array of STUN servers to try. The library will try to resolve and
1051 * contact each of the STUN server entry until it finds one that is
1052 * usable. Each entry may be a domain name, host name, IP address, and
1053 * it may contain an optional port number. For example:
1054 * - "pjsip.org" (domain name)
1055 * - "sip.pjsip.org" (host name)
1056 * - "pjsip.org:33478" (domain name and a non-standard port number)
1057 * - "10.0.0.1:3478" (IP address and port number)
1058 *
1059 * When nameserver is configured in the \a pjsua_config.nameserver field,
1060 * if entry is not an IP address, it will be resolved with DNS SRV
1061 * resolution first, and it will fallback to use DNS A resolution if this
1062 * fails. Port number may be specified even if the entry is a domain name,
1063 * in case the DNS SRV resolution should fallback to a non-standard port.
1064 *
1065 * When nameserver is not configured, entries will be resolved with
1066 * #pj_gethostbyname() if it's not an IP address. Port number may be
1067 * specified if the server is not listening in standard STUN port.
1068 */
1069 pj_str_t stun_srv[8];
1070
1071 /**
1072 * This specifies if the library startup should ignore failure with the
1073 * STUN servers. If this is set to PJ_FALSE, the library will refuse to
1074 * start if it fails to resolve or contact any of the STUN servers.
1075 *
1076 * Default: PJ_TRUE
1077 */
1078 pj_bool_t stun_ignore_failure;
1079
1080 /**
Benny Prijono91a6a172007-10-31 08:59:29 +00001081 * Support for adding and parsing NAT type in the SDP to assist
1082 * troubleshooting. The valid values are:
1083 * - 0: no information will be added in SDP, and parsing is disabled.
Benny Prijono6ba8c542007-10-16 01:34:14 +00001084 * - 1: only the NAT type number is added.
1085 * - 2: add both NAT type number and name.
1086 *
Benny Prijono91a6a172007-10-31 08:59:29 +00001087 * Default: 1
Benny Prijono6ba8c542007-10-16 01:34:14 +00001088 */
1089 int nat_type_in_sdp;
1090
1091 /**
Benny Prijonodcfc0ba2007-09-30 16:50:27 +00001092 * Specify whether support for reliable provisional response (100rel and
1093 * PRACK) should be required by default. Note that this setting can be
1094 * further customized in account configuration (#pjsua_acc_config).
1095 *
1096 * Default: PJ_FALSE
1097 */
1098 pj_bool_t require_100rel;
1099
Nanang Izzuddin59dffb12009-08-11 12:42:38 +00001100 /**
Nanang Izzuddin742ef4b2010-09-07 09:36:15 +00001101 * Specify the usage of Session Timers for all sessions. See the
1102 * #pjsua_sip_timer_use for possible values. Note that this setting can be
1103 * further customized in account configuration (#pjsua_acc_config).
Nanang Izzuddin59dffb12009-08-11 12:42:38 +00001104 *
Nanang Izzuddin742ef4b2010-09-07 09:36:15 +00001105 * Default: PJSUA_SIP_TIMER_OPTIONAL
Nanang Izzuddin59dffb12009-08-11 12:42:38 +00001106 */
Nanang Izzuddin742ef4b2010-09-07 09:36:15 +00001107 pjsua_sip_timer_use use_timer;
Nanang Izzuddin59dffb12009-08-11 12:42:38 +00001108
1109 /**
Benny Prijonofe1bd342009-11-20 23:33:07 +00001110 * Handle unsolicited NOTIFY requests containing message waiting
1111 * indication (MWI) info. Unsolicited MWI is incoming NOTIFY requests
1112 * which are not requested by client with SUBSCRIBE request.
1113 *
1114 * If this is enabled, the library will respond 200/OK to the NOTIFY
1115 * request and forward the request to \a on_mwi_info() callback.
1116 *
1117 * See also \a mwi_enabled field #on pjsua_acc_config.
1118 *
1119 * Default: PJ_TRUE
1120 *
1121 */
1122 pj_bool_t enable_unsolicited_mwi;
1123
1124 /**
Nanang Izzuddin65add622009-08-11 16:26:20 +00001125 * Specify Session Timer settings, see #pjsip_timer_setting.
Nanang Izzuddin59dffb12009-08-11 12:42:38 +00001126 * Note that this setting can be further customized in account
1127 * configuration (#pjsua_acc_config).
Nanang Izzuddin59dffb12009-08-11 12:42:38 +00001128 */
Nanang Izzuddin65add622009-08-11 16:26:20 +00001129 pjsip_timer_setting timer_setting;
Nanang Izzuddin59dffb12009-08-11 12:42:38 +00001130
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001131 /**
1132 * Number of credentials in the credential array.
1133 */
1134 unsigned cred_count;
1135
1136 /**
1137 * Array of credentials. These credentials will be used by all accounts,
Benny Prijonob5388cf2007-01-04 22:45:08 +00001138 * and can be used to authenticate against outbound proxies. If the
1139 * credential is specific to the account, then application should set
1140 * the credential in the pjsua_acc_config rather than the credential
1141 * here.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001142 */
1143 pjsip_cred_info cred_info[PJSUA_ACC_MAX_PROXIES];
1144
1145 /**
Benny Prijonob5388cf2007-01-04 22:45:08 +00001146 * Application callback to receive various event notifications from
1147 * the library.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001148 */
1149 pjsua_callback cb;
1150
Benny Prijono56315612006-07-18 14:39:40 +00001151 /**
Benny Prijonob5388cf2007-01-04 22:45:08 +00001152 * Optional user agent string (default empty). If it's empty, no
1153 * User-Agent header will be sent with outgoing requests.
Benny Prijono56315612006-07-18 14:39:40 +00001154 */
1155 pj_str_t user_agent;
1156
Benny Prijonod8179652008-01-23 20:39:07 +00001157#if defined(PJMEDIA_HAS_SRTP) && (PJMEDIA_HAS_SRTP != 0)
1158 /**
1159 * Specify default value of secure media transport usage.
1160 * Valid values are PJMEDIA_SRTP_DISABLED, PJMEDIA_SRTP_OPTIONAL, and
1161 * PJMEDIA_SRTP_MANDATORY.
1162 *
1163 * Note that this setting can be further customized in account
1164 * configuration (#pjsua_acc_config).
1165 *
1166 * Default: #PJSUA_DEFAULT_USE_SRTP
1167 */
1168 pjmedia_srtp_use use_srtp;
1169
1170 /**
1171 * Specify whether SRTP requires secure signaling to be used. This option
1172 * is only used when \a use_srtp option above is non-zero.
1173 *
1174 * Valid values are:
1175 * 0: SRTP does not require secure signaling
1176 * 1: SRTP requires secure transport such as TLS
1177 * 2: SRTP requires secure end-to-end transport (SIPS)
1178 *
1179 * Note that this setting can be further customized in account
1180 * configuration (#pjsua_acc_config).
1181 *
1182 * Default: #PJSUA_DEFAULT_SRTP_SECURE_SIGNALING
1183 */
1184 int srtp_secure_signaling;
Nanang Izzuddind89cc3a2010-05-13 05:22:51 +00001185
1186 /**
1187 * Specify whether SRTP in PJMEDIA_SRTP_OPTIONAL mode should compose
1188 * duplicated media in SDP offer, i.e: unsecured and secured version.
1189 * Otherwise, the SDP media will be composed as unsecured media but
1190 * with SDP "crypto" attribute.
1191 *
1192 * Default: PJ_FALSE
1193 */
1194 pj_bool_t srtp_optional_dup_offer;
Benny Prijonod8179652008-01-23 20:39:07 +00001195#endif
1196
Benny Prijono3c5e28b2008-09-24 10:10:15 +00001197 /**
1198 * Disconnect other call legs when more than one 2xx responses for
1199 * outgoing INVITE are received due to forking. Currently the library
1200 * is not able to handle simultaneous forked media, so disconnecting
1201 * the other call legs is necessary.
1202 *
1203 * With this setting enabled, the library will handle only one of the
1204 * connected call leg, and the other connected call legs will be
1205 * disconnected.
1206 *
1207 * Default: PJ_TRUE (only disable this setting for testing purposes).
1208 */
1209 pj_bool_t hangup_forked_call;
1210
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001211} pjsua_config;
1212
1213
1214/**
1215 * Use this function to initialize pjsua config.
1216 *
1217 * @param cfg pjsua config to be initialized.
1218 */
Benny Prijono1f61a8f2007-08-16 10:11:44 +00001219PJ_DECL(void) pjsua_config_default(pjsua_config *cfg);
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001220
1221
Benny Prijonoa7b376b2008-01-25 16:06:33 +00001222/** The implementation has been moved to sip_auth.h */
Benny Prijono7977f9f2007-10-10 11:37:56 +00001223#define pjsip_cred_dup pjsip_cred_info_dup
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001224
1225
1226/**
1227 * Duplicate pjsua_config.
Benny Prijonoe6ead542007-01-31 20:53:31 +00001228 *
1229 * @param pool The pool to get memory from.
1230 * @param dst Destination config.
1231 * @param src Source config.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001232 */
Benny Prijono1f61a8f2007-08-16 10:11:44 +00001233PJ_DECL(void) pjsua_config_dup(pj_pool_t *pool,
1234 pjsua_config *dst,
1235 const pjsua_config *src);
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001236
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001237
1238/**
1239 * This structure describes additional information to be sent with
Benny Prijonob5388cf2007-01-04 22:45:08 +00001240 * outgoing SIP message. It can (optionally) be specified for example
1241 * with #pjsua_call_make_call(), #pjsua_call_answer(), #pjsua_call_hangup(),
1242 * #pjsua_call_set_hold(), #pjsua_call_send_im(), and many more.
1243 *
1244 * Application MUST call #pjsua_msg_data_init() to initialize this
1245 * structure before setting its values.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001246 */
Benny Prijono63fba012008-07-17 14:19:10 +00001247struct pjsua_msg_data
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001248{
1249 /**
Benny Prijonoc92ca5c2007-06-11 17:03:41 +00001250 * Additional message headers as linked list. Application can add
1251 * headers to the list by creating the header, either from the heap/pool
1252 * or from temporary local variable, and add the header using
1253 * linked list operation. See pjsip_apps.c for some sample codes.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001254 */
1255 pjsip_hdr hdr_list;
1256
1257 /**
1258 * MIME type of optional message body.
1259 */
1260 pj_str_t content_type;
1261
1262 /**
Benny Prijono1c1d7342010-08-01 09:48:51 +00001263 * Optional message body to be added to the message, only when the
1264 * message doesn't have a body.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001265 */
1266 pj_str_t msg_body;
1267
Benny Prijono1c1d7342010-08-01 09:48:51 +00001268 /**
1269 * Content type of the multipart body. If application wants to send
1270 * multipart message bodies, it puts the parts in \a parts and set
1271 * the content type in \a multipart_ctype. If the message already
1272 * contains a body, the body will be added to the multipart bodies.
1273 */
1274 pjsip_media_type multipart_ctype;
1275
1276 /**
1277 * List of multipart parts. If application wants to send multipart
1278 * message bodies, it puts the parts in \a parts and set the content
1279 * type in \a multipart_ctype. If the message already contains a body,
1280 * the body will be added to the multipart bodies.
1281 */
1282 pjsip_multipart_part multipart_parts;
Benny Prijono63fba012008-07-17 14:19:10 +00001283};
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001284
1285
1286/**
1287 * Initialize message data.
1288 *
1289 * @param msg_data Message data to be initialized.
1290 */
Benny Prijono1f61a8f2007-08-16 10:11:44 +00001291PJ_DECL(void) pjsua_msg_data_init(pjsua_msg_data *msg_data);
Benny Prijono268ca612006-02-07 12:34:11 +00001292
Benny Prijono268ca612006-02-07 12:34:11 +00001293
1294/**
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001295 * Instantiate pjsua application. Application must call this function before
1296 * calling any other functions, to make sure that the underlying libraries
1297 * are properly initialized. Once this function has returned success,
1298 * application must call pjsua_destroy() before quitting.
1299 *
1300 * @return PJ_SUCCESS on success, or the appropriate error code.
Benny Prijonodc39fe82006-05-26 12:17:46 +00001301 */
1302PJ_DECL(pj_status_t) pjsua_create(void);
1303
1304
Benny Prijonoa7b376b2008-01-25 16:06:33 +00001305/** Forward declaration */
Benny Prijonoe6ead542007-01-31 20:53:31 +00001306typedef struct pjsua_media_config pjsua_media_config;
1307
1308
Benny Prijonodc39fe82006-05-26 12:17:46 +00001309/**
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001310 * Initialize pjsua with the specified settings. All the settings are
1311 * optional, and the default values will be used when the config is not
1312 * specified.
Benny Prijonoccf95622006-02-07 18:48:01 +00001313 *
Benny Prijonob5388cf2007-01-04 22:45:08 +00001314 * Note that #pjsua_create() MUST be called before calling this function.
1315 *
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001316 * @param ua_cfg User agent configuration.
1317 * @param log_cfg Optional logging configuration.
1318 * @param media_cfg Optional media configuration.
Benny Prijonoccf95622006-02-07 18:48:01 +00001319 *
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001320 * @return PJ_SUCCESS on success, or the appropriate error code.
Benny Prijono268ca612006-02-07 12:34:11 +00001321 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001322PJ_DECL(pj_status_t) pjsua_init(const pjsua_config *ua_cfg,
1323 const pjsua_logging_config *log_cfg,
1324 const pjsua_media_config *media_cfg);
Benny Prijono268ca612006-02-07 12:34:11 +00001325
1326
1327/**
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001328 * Application is recommended to call this function after all initialization
1329 * is done, so that the library can do additional checking set up
1330 * additional
Benny Prijonoccf95622006-02-07 18:48:01 +00001331 *
Benny Prijonob5388cf2007-01-04 22:45:08 +00001332 * Application may call this function anytime after #pjsua_init().
1333 *
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001334 * @return PJ_SUCCESS on success, or the appropriate error code.
Benny Prijonoccf95622006-02-07 18:48:01 +00001335 */
Benny Prijonodc39fe82006-05-26 12:17:46 +00001336PJ_DECL(pj_status_t) pjsua_start(void);
Benny Prijonoccf95622006-02-07 18:48:01 +00001337
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001338
Benny Prijonoccf95622006-02-07 18:48:01 +00001339/**
Benny Prijonob5388cf2007-01-04 22:45:08 +00001340 * Destroy pjsua. Application is recommended to perform graceful shutdown
1341 * before calling this function (such as unregister the account from the SIP
1342 * server, terminate presense subscription, and hangup active calls), however,
1343 * this function will do all of these if it finds there are active sessions
1344 * that need to be terminated. This function will approximately block for
1345 * one second to wait for replies from remote.
1346 *
1347 * Application.may safely call this function more than once if it doesn't
1348 * keep track of it's state.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001349 *
1350 * @return PJ_SUCCESS on success, or the appropriate error code.
Benny Prijono268ca612006-02-07 12:34:11 +00001351 */
Benny Prijonodc39fe82006-05-26 12:17:46 +00001352PJ_DECL(pj_status_t) pjsua_destroy(void);
Benny Prijonoa91a0032006-02-26 21:23:45 +00001353
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001354
Benny Prijono9fc735d2006-05-28 14:58:12 +00001355/**
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001356 * Poll pjsua for events, and if necessary block the caller thread for
1357 * the specified maximum interval (in miliseconds).
1358 *
Benny Prijonob5388cf2007-01-04 22:45:08 +00001359 * Application doesn't normally need to call this function if it has
1360 * configured worker thread (\a thread_cnt field) in pjsua_config structure,
1361 * because polling then will be done by these worker threads instead.
1362 *
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001363 * @param msec_timeout Maximum time to wait, in miliseconds.
1364 *
1365 * @return The number of events that have been handled during the
1366 * poll. Negative value indicates error, and application
Benny Prijonoe6ead542007-01-31 20:53:31 +00001367 * can retrieve the error as (status = -return_value).
Benny Prijonob9b32ab2006-06-01 12:28:44 +00001368 */
1369PJ_DECL(int) pjsua_handle_events(unsigned msec_timeout);
1370
1371
1372/**
Benny Prijonob5388cf2007-01-04 22:45:08 +00001373 * Create memory pool to be used by the application. Once application
1374 * finished using the pool, it must be released with pj_pool_release().
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001375 *
1376 * @param name Optional pool name.
Benny Prijono312aff92006-06-17 04:08:30 +00001377 * @param init_size Initial size of the pool.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001378 * @param increment Increment size.
1379 *
1380 * @return The pool, or NULL when there's no memory.
1381 */
1382PJ_DECL(pj_pool_t*) pjsua_pool_create(const char *name, pj_size_t init_size,
1383 pj_size_t increment);
1384
1385
1386/**
1387 * Application can call this function at any time (after pjsua_create(), of
1388 * course) to change logging settings.
1389 *
1390 * @param c Logging configuration.
1391 *
1392 * @return PJ_SUCCESS on success, or the appropriate error code.
1393 */
1394PJ_DECL(pj_status_t) pjsua_reconfigure_logging(const pjsua_logging_config *c);
1395
1396
1397/**
1398 * Internal function to get SIP endpoint instance of pjsua, which is
1399 * needed for example to register module, create transports, etc.
Benny Prijonob5388cf2007-01-04 22:45:08 +00001400 * Only valid after #pjsua_init() is called.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001401 *
1402 * @return SIP endpoint instance.
Benny Prijono9fc735d2006-05-28 14:58:12 +00001403 */
1404PJ_DECL(pjsip_endpoint*) pjsua_get_pjsip_endpt(void);
1405
1406/**
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001407 * Internal function to get media endpoint instance.
1408 * Only valid after #pjsua_init() is called.
1409 *
1410 * @return Media endpoint instance.
Benny Prijono9fc735d2006-05-28 14:58:12 +00001411 */
1412PJ_DECL(pjmedia_endpt*) pjsua_get_pjmedia_endpt(void);
1413
Benny Prijono97b87172006-08-24 14:25:14 +00001414/**
1415 * Internal function to get PJSUA pool factory.
Benny Prijonob5388cf2007-01-04 22:45:08 +00001416 * Only valid after #pjsua_create() is called.
Benny Prijono97b87172006-08-24 14:25:14 +00001417 *
1418 * @return Pool factory currently used by PJSUA.
1419 */
1420PJ_DECL(pj_pool_factory*) pjsua_get_pool_factory(void);
1421
1422
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001423
1424/*****************************************************************************
Benny Prijono312aff92006-06-17 04:08:30 +00001425 * Utilities.
1426 *
Benny Prijono9fc735d2006-05-28 14:58:12 +00001427 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001428
1429/**
Benny Prijonobb995fd2009-08-12 11:03:23 +00001430 * This structure is used to represent the result of the STUN server
1431 * resolution and testing, the #pjsua_resolve_stun_servers() function.
1432 * This structure will be passed in #pj_stun_resolve_cb callback.
1433 */
1434typedef struct pj_stun_resolve_result
1435{
1436 /**
1437 * Arbitrary data that was passed to #pjsua_resolve_stun_servers()
1438 * function.
1439 */
1440 void *token;
1441
1442 /**
1443 * This will contain PJ_SUCCESS if at least one usable STUN server
1444 * is found, otherwise it will contain the last error code during
1445 * the operation.
1446 */
1447 pj_status_t status;
1448
1449 /**
1450 * The server name that yields successful result. This will only
1451 * contain value if status is successful.
1452 */
1453 pj_str_t name;
1454
1455 /**
1456 * The server IP address. This will only contain value if status
1457 * is successful.
1458 */
1459 pj_sockaddr addr;
1460
1461} pj_stun_resolve_result;
1462
1463
1464/**
1465 * Typedef of callback to be registered to #pjsua_resolve_stun_servers().
1466 */
1467typedef void (*pj_stun_resolve_cb)(const pj_stun_resolve_result *result);
1468
1469/**
Benny Prijono4ab9fbb2007-10-12 12:14:27 +00001470 * This is a utility function to detect NAT type in front of this
1471 * endpoint. Once invoked successfully, this function will complete
Benny Prijono6ba8c542007-10-16 01:34:14 +00001472 * asynchronously and report the result in \a on_nat_detect() callback
1473 * of pjsua_callback.
Benny Prijono4ab9fbb2007-10-12 12:14:27 +00001474 *
Benny Prijono6ba8c542007-10-16 01:34:14 +00001475 * After NAT has been detected and the callback is called, application can
1476 * get the detected NAT type by calling #pjsua_get_nat_type(). Application
1477 * can also perform NAT detection by calling #pjsua_detect_nat_type()
1478 * again at later time.
Benny Prijono4ab9fbb2007-10-12 12:14:27 +00001479 *
Benny Prijono6ba8c542007-10-16 01:34:14 +00001480 * Note that STUN must be enabled to run this function successfully.
1481 *
1482 * @return PJ_SUCCESS on success, or the appropriate error code.
Benny Prijono4ab9fbb2007-10-12 12:14:27 +00001483 */
Benny Prijono6ba8c542007-10-16 01:34:14 +00001484PJ_DECL(pj_status_t) pjsua_detect_nat_type(void);
1485
1486
1487/**
1488 * Get the NAT type as detected by #pjsua_detect_nat_type() function.
1489 * This function will only return useful NAT type after #pjsua_detect_nat_type()
1490 * has completed successfully and \a on_nat_detect() callback has been called.
1491 *
1492 * @param type NAT type.
1493 *
1494 * @return When detection is in progress, this function will
1495 * return PJ_EPENDING and \a type will be set to
1496 * PJ_STUN_NAT_TYPE_UNKNOWN. After NAT type has been
1497 * detected successfully, this function will return
1498 * PJ_SUCCESS and \a type will be set to the correct
1499 * value. Other return values indicate error and
1500 * \a type will be set to PJ_STUN_NAT_TYPE_ERR_UNKNOWN.
Benny Prijono91a6a172007-10-31 08:59:29 +00001501 *
1502 * @see pjsua_call_get_rem_nat_type()
Benny Prijono6ba8c542007-10-16 01:34:14 +00001503 */
1504PJ_DECL(pj_status_t) pjsua_get_nat_type(pj_stun_nat_type *type);
Benny Prijono4ab9fbb2007-10-12 12:14:27 +00001505
1506
1507/**
Benny Prijonobb995fd2009-08-12 11:03:23 +00001508 * Auxiliary function to resolve and contact each of the STUN server
1509 * entries (sequentially) to find which is usable. The #pjsua_init() must
1510 * have been called before calling this function.
1511 *
1512 * @param count Number of STUN server entries to try.
1513 * @param srv Array of STUN server entries to try. Please see
1514 * the \a stun_srv field in the #pjsua_config
1515 * documentation about the format of this entry.
1516 * @param wait Specify non-zero to make the function block until
1517 * it gets the result. In this case, the function
1518 * will block while the resolution is being done,
1519 * and the callback will be called before this function
1520 * returns.
1521 * @param token Arbitrary token to be passed back to application
1522 * in the callback.
1523 * @param cb Callback to be called to notify the result of
1524 * the function.
1525 *
1526 * @return If \a wait parameter is non-zero, this will return
1527 * PJ_SUCCESS if one usable STUN server is found.
1528 * Otherwise it will always return PJ_SUCCESS, and
1529 * application will be notified about the result in
1530 * the callback.
1531 */
1532PJ_DECL(pj_status_t) pjsua_resolve_stun_servers(unsigned count,
1533 pj_str_t srv[],
1534 pj_bool_t wait,
1535 void *token,
1536 pj_stun_resolve_cb cb);
1537
1538/**
1539 * Cancel pending STUN resolution which match the specified token.
1540 *
1541 * @param token The token to match. This token was given to
1542 * #pjsua_resolve_stun_servers()
1543 * @param notify_cb Boolean to control whether the callback should
1544 * be called for cancelled resolutions. When the
1545 * callback is called, the status in the result
1546 * will be set as PJ_ECANCELLED.
1547 *
1548 * @return PJ_SUCCESS if there is at least one pending STUN
1549 * resolution cancelled, or PJ_ENOTFOUND if there is
1550 * no matching one, or other error.
1551 */
1552PJ_DECL(pj_status_t) pjsua_cancel_stun_resolution(void *token,
1553 pj_bool_t notify_cb);
1554
1555
1556/**
Benny Prijonob5388cf2007-01-04 22:45:08 +00001557 * This is a utility function to verify that valid SIP url is given. If the
Benny Prijonoc7545782010-09-28 07:43:18 +00001558 * URL is a valid SIP/SIPS scheme, PJ_SUCCESS will be returned.
Benny Prijono312aff92006-06-17 04:08:30 +00001559 *
Benny Prijonoe6ead542007-01-31 20:53:31 +00001560 * @param url The URL, as NULL terminated string.
Benny Prijono312aff92006-06-17 04:08:30 +00001561 *
1562 * @return PJ_SUCCESS on success, or the appropriate error code.
Benny Prijonoc7545782010-09-28 07:43:18 +00001563 *
1564 * @see pjsua_verify_url()
Benny Prijono312aff92006-06-17 04:08:30 +00001565 */
Benny Prijonoe6ead542007-01-31 20:53:31 +00001566PJ_DECL(pj_status_t) pjsua_verify_sip_url(const char *url);
Benny Prijono312aff92006-06-17 04:08:30 +00001567
1568
1569/**
Benny Prijonoc7545782010-09-28 07:43:18 +00001570 * This is a utility function to verify that valid URI is given. Unlike
1571 * pjsua_verify_sip_url(), this function will return PJ_SUCCESS if tel: URI
1572 * is given.
1573 *
1574 * @param url The URL, as NULL terminated string.
1575 *
1576 * @return PJ_SUCCESS on success, or the appropriate error code.
1577 *
1578 * @see pjsua_verify_sip_url()
1579 */
1580PJ_DECL(pj_status_t) pjsua_verify_url(const char *url);
1581
1582
1583/**
Benny Prijono73bb7232009-10-20 13:56:26 +00001584 * Schedule a timer entry. Note that the timer callback may be executed
1585 * by different thread, depending on whether worker thread is enabled or
1586 * not.
1587 *
1588 * @param entry Timer heap entry.
1589 * @param delay The interval to expire.
1590 *
1591 * @return PJ_SUCCESS on success, or the appropriate error code.
1592 *
1593 * @see pjsip_endpt_schedule_timer()
1594 */
1595PJ_DECL(pj_status_t) pjsua_schedule_timer(pj_timer_entry *entry,
1596 const pj_time_val *delay);
1597
1598
1599/**
1600 * Cancel the previously scheduled timer.
1601 *
1602 * @param entry Timer heap entry.
1603 *
1604 * @see pjsip_endpt_cancel_timer()
1605 */
1606PJ_DECL(void) pjsua_cancel_timer(pj_timer_entry *entry);
1607
1608
1609/**
Benny Prijonob5388cf2007-01-04 22:45:08 +00001610 * This is a utility function to display error message for the specified
1611 * error code. The error message will be sent to the log.
Benny Prijono312aff92006-06-17 04:08:30 +00001612 *
1613 * @param sender The log sender field.
1614 * @param title Message title for the error.
1615 * @param status Status code.
1616 */
1617PJ_DECL(void) pjsua_perror(const char *sender, const char *title,
1618 pj_status_t status);
1619
1620
Benny Prijonoda9785b2007-04-02 20:43:06 +00001621/**
1622 * This is a utility function to dump the stack states to log, using
1623 * verbosity level 3.
1624 *
1625 * @param detail Will print detailed output (such as list of
1626 * SIP transactions) when non-zero.
1627 */
1628PJ_DECL(void) pjsua_dump(pj_bool_t detail);
Benny Prijono312aff92006-06-17 04:08:30 +00001629
1630/**
1631 * @}
1632 */
1633
1634
1635
1636/*****************************************************************************
1637 * TRANSPORT API
1638 */
1639
1640/**
Benny Prijonoe6ead542007-01-31 20:53:31 +00001641 * @defgroup PJSUA_LIB_TRANSPORT PJSUA-API Signaling Transport
Benny Prijono312aff92006-06-17 04:08:30 +00001642 * @ingroup PJSUA_LIB
1643 * @brief API for managing SIP transports
1644 * @{
Benny Prijonoe6ead542007-01-31 20:53:31 +00001645 *
1646 * PJSUA-API supports creating multiple transport instances, for example UDP,
1647 * TCP, and TLS transport. SIP transport must be created before adding an
1648 * account.
Benny Prijono312aff92006-06-17 04:08:30 +00001649 */
1650
1651
Benny Prijonoe6ead542007-01-31 20:53:31 +00001652/** SIP transport identification.
1653 */
Benny Prijono312aff92006-06-17 04:08:30 +00001654typedef int pjsua_transport_id;
1655
1656
1657/**
Benny Prijono0a5cad82006-09-26 13:21:02 +00001658 * Transport configuration for creating transports for both SIP
Benny Prijonob5388cf2007-01-04 22:45:08 +00001659 * and media. Before setting some values to this structure, application
1660 * MUST call #pjsua_transport_config_default() to initialize its
1661 * values with default settings.
Benny Prijono312aff92006-06-17 04:08:30 +00001662 */
1663typedef struct pjsua_transport_config
1664{
1665 /**
1666 * UDP port number to bind locally. This setting MUST be specified
1667 * even when default port is desired. If the value is zero, the
1668 * transport will be bound to any available port, and application
1669 * can query the port by querying the transport info.
1670 */
1671 unsigned port;
1672
1673 /**
Benny Prijono0a5cad82006-09-26 13:21:02 +00001674 * Optional address to advertise as the address of this transport.
1675 * Application can specify any address or hostname for this field,
1676 * for example it can point to one of the interface address in the
1677 * system, or it can point to the public address of a NAT router
1678 * where port mappings have been configured for the application.
1679 *
1680 * Note: this option can be used for both UDP and TCP as well!
Benny Prijono312aff92006-06-17 04:08:30 +00001681 */
Benny Prijono0a5cad82006-09-26 13:21:02 +00001682 pj_str_t public_addr;
1683
1684 /**
1685 * Optional address where the socket should be bound to. This option
1686 * SHOULD only be used to selectively bind the socket to particular
1687 * interface (instead of 0.0.0.0), and SHOULD NOT be used to set the
1688 * published address of a transport (the public_addr field should be
1689 * used for that purpose).
1690 *
1691 * Note that unlike public_addr field, the address (or hostname) here
1692 * MUST correspond to the actual interface address in the host, since
1693 * this address will be specified as bind() argument.
1694 */
1695 pj_str_t bound_addr;
Benny Prijono312aff92006-06-17 04:08:30 +00001696
1697 /**
Benny Prijonob5388cf2007-01-04 22:45:08 +00001698 * This specifies TLS settings for TLS transport. It is only be used
1699 * when this transport config is being used to create a SIP TLS
1700 * transport.
Benny Prijono6e0e54b2006-12-08 21:58:31 +00001701 */
Benny Prijonof3bbc132006-12-25 06:43:59 +00001702 pjsip_tls_setting tls_setting;
Benny Prijono6e0e54b2006-12-08 21:58:31 +00001703
Benny Prijono4d79b0f2009-10-25 09:02:07 +00001704 /**
1705 * QoS traffic type to be set on this transport. When application wants
1706 * to apply QoS tagging to the transport, it's preferable to set this
1707 * field rather than \a qos_param fields since this is more portable.
1708 *
1709 * Default is QoS not set.
1710 */
1711 pj_qos_type qos_type;
1712
1713 /**
1714 * Set the low level QoS parameters to the transport. This is a lower
1715 * level operation than setting the \a qos_type field and may not be
1716 * supported on all platforms.
1717 *
1718 * Default is QoS not set.
1719 */
1720 pj_qos_params qos_params;
1721
Benny Prijono312aff92006-06-17 04:08:30 +00001722} pjsua_transport_config;
1723
1724
1725/**
1726 * Call this function to initialize UDP config with default values.
1727 *
1728 * @param cfg The UDP config to be initialized.
1729 */
Benny Prijono1f61a8f2007-08-16 10:11:44 +00001730PJ_DECL(void) pjsua_transport_config_default(pjsua_transport_config *cfg);
Benny Prijono312aff92006-06-17 04:08:30 +00001731
1732
1733/**
Benny Prijono312aff92006-06-17 04:08:30 +00001734 * Duplicate transport config.
Benny Prijonoe6ead542007-01-31 20:53:31 +00001735 *
1736 * @param pool The pool.
1737 * @param dst The destination config.
1738 * @param src The source config.
Benny Prijono312aff92006-06-17 04:08:30 +00001739 */
Benny Prijono1f61a8f2007-08-16 10:11:44 +00001740PJ_DECL(void) pjsua_transport_config_dup(pj_pool_t *pool,
1741 pjsua_transport_config *dst,
1742 const pjsua_transport_config *src);
Benny Prijono312aff92006-06-17 04:08:30 +00001743
1744
1745/**
Benny Prijonob5388cf2007-01-04 22:45:08 +00001746 * This structure describes transport information returned by
1747 * #pjsua_transport_get_info() function.
Benny Prijono312aff92006-06-17 04:08:30 +00001748 */
1749typedef struct pjsua_transport_info
1750{
1751 /**
1752 * PJSUA transport identification.
1753 */
1754 pjsua_transport_id id;
1755
1756 /**
1757 * Transport type.
1758 */
1759 pjsip_transport_type_e type;
1760
1761 /**
1762 * Transport type name.
1763 */
1764 pj_str_t type_name;
1765
1766 /**
1767 * Transport string info/description.
1768 */
1769 pj_str_t info;
1770
1771 /**
1772 * Transport flag (see ##pjsip_transport_flags_e).
1773 */
1774 unsigned flag;
1775
1776 /**
1777 * Local address length.
1778 */
1779 unsigned addr_len;
1780
1781 /**
1782 * Local/bound address.
1783 */
1784 pj_sockaddr local_addr;
1785
1786 /**
1787 * Published address (or transport address name).
1788 */
1789 pjsip_host_port local_name;
1790
1791 /**
1792 * Current number of objects currently referencing this transport.
1793 */
1794 unsigned usage_count;
1795
1796
1797} pjsua_transport_info;
1798
1799
1800/**
Benny Prijonob5388cf2007-01-04 22:45:08 +00001801 * Create and start a new SIP transport according to the specified
1802 * settings.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001803 *
1804 * @param type Transport type.
1805 * @param cfg Transport configuration.
1806 * @param p_id Optional pointer to receive transport ID.
1807 *
1808 * @return PJ_SUCCESS on success, or the appropriate error code.
1809 */
1810PJ_DECL(pj_status_t) pjsua_transport_create(pjsip_transport_type_e type,
1811 const pjsua_transport_config *cfg,
1812 pjsua_transport_id *p_id);
1813
1814/**
Benny Prijonoe6ead542007-01-31 20:53:31 +00001815 * Register transport that has been created by application. This function
1816 * is useful if application wants to implement custom SIP transport and use
1817 * it with pjsua.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001818 *
1819 * @param tp Transport instance.
1820 * @param p_id Optional pointer to receive transport ID.
1821 *
1822 * @return PJ_SUCCESS on success, or the appropriate error code.
1823 */
1824PJ_DECL(pj_status_t) pjsua_transport_register(pjsip_transport *tp,
1825 pjsua_transport_id *p_id);
1826
1827
1828/**
Benny Prijonoe6ead542007-01-31 20:53:31 +00001829 * Enumerate all transports currently created in the system. This function
1830 * will return all transport IDs, and application may then call
1831 * #pjsua_transport_get_info() function to retrieve detailed information
1832 * about the transport.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001833 *
1834 * @param id Array to receive transport ids.
1835 * @param count In input, specifies the maximum number of elements.
1836 * On return, it contains the actual number of elements.
1837 *
1838 * @return PJ_SUCCESS on success, or the appropriate error code.
1839 */
1840PJ_DECL(pj_status_t) pjsua_enum_transports( pjsua_transport_id id[],
1841 unsigned *count );
1842
1843
1844/**
1845 * Get information about transports.
1846 *
1847 * @param id Transport ID.
1848 * @param info Pointer to receive transport info.
1849 *
1850 * @return PJ_SUCCESS on success, or the appropriate error code.
1851 */
1852PJ_DECL(pj_status_t) pjsua_transport_get_info(pjsua_transport_id id,
1853 pjsua_transport_info *info);
1854
1855
1856/**
1857 * Disable a transport or re-enable it. By default transport is always
1858 * enabled after it is created. Disabling a transport does not necessarily
1859 * close the socket, it will only discard incoming messages and prevent
1860 * the transport from being used to send outgoing messages.
1861 *
1862 * @param id Transport ID.
1863 * @param enabled Non-zero to enable, zero to disable.
1864 *
1865 * @return PJ_SUCCESS on success, or the appropriate error code.
1866 */
1867PJ_DECL(pj_status_t) pjsua_transport_set_enable(pjsua_transport_id id,
1868 pj_bool_t enabled);
1869
1870
1871/**
1872 * Close the transport. If transport is forcefully closed, it will be
1873 * immediately closed, and any pending transactions that are using the
Benny Prijonob5388cf2007-01-04 22:45:08 +00001874 * transport may not terminate properly (it may even crash). Otherwise,
1875 * the system will wait until all transactions are closed while preventing
1876 * new users from using the transport, and will close the transport when
1877 * it is safe to do so.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001878 *
1879 * @param id Transport ID.
1880 * @param force Non-zero to immediately close the transport. This
1881 * is not recommended!
1882 *
1883 * @return PJ_SUCCESS on success, or the appropriate error code.
1884 */
1885PJ_DECL(pj_status_t) pjsua_transport_close( pjsua_transport_id id,
1886 pj_bool_t force );
Benny Prijono9fc735d2006-05-28 14:58:12 +00001887
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001888/**
Benny Prijono312aff92006-06-17 04:08:30 +00001889 * @}
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001890 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001891
1892
Benny Prijonoeebe9af2006-06-13 22:57:13 +00001893
1894
1895/*****************************************************************************
Benny Prijono312aff92006-06-17 04:08:30 +00001896 * ACCOUNT API
Benny Prijonoa91a0032006-02-26 21:23:45 +00001897 */
1898
Benny Prijono312aff92006-06-17 04:08:30 +00001899
1900/**
Benny Prijonoe6ead542007-01-31 20:53:31 +00001901 * @defgroup PJSUA_LIB_ACC PJSUA-API Accounts Management
Benny Prijono312aff92006-06-17 04:08:30 +00001902 * @ingroup PJSUA_LIB
Benny Prijonoe6ead542007-01-31 20:53:31 +00001903 * @brief PJSUA Accounts management
Benny Prijono312aff92006-06-17 04:08:30 +00001904 * @{
Benny Prijonoe6ead542007-01-31 20:53:31 +00001905 *
Benny Prijono312aff92006-06-17 04:08:30 +00001906 * PJSUA accounts provide identity (or identities) of the user who is currently
Benny Prijonoe6ead542007-01-31 20:53:31 +00001907 * using the application. In SIP terms, the identity is used as the <b>From</b>
1908 * header in outgoing requests.
1909 *
1910 * PJSUA-API supports creating and managing multiple accounts. The maximum
1911 * number of accounts is limited by a compile time constant
1912 * <tt>PJSUA_MAX_ACC</tt>.
Benny Prijono312aff92006-06-17 04:08:30 +00001913 *
1914 * Account may or may not have client registration associated with it.
1915 * An account is also associated with <b>route set</b> and some <b>authentication
1916 * credentials</b>, which are used when sending SIP request messages using the
1917 * account. An account also has presence's <b>online status</b>, which
Benny Prijonoe6ead542007-01-31 20:53:31 +00001918 * will be reported to remote peer when they subscribe to the account's
1919 * presence, or which is published to a presence server if presence
1920 * publication is enabled for the account.
Benny Prijono312aff92006-06-17 04:08:30 +00001921 *
1922 * At least one account MUST be created in the application. If no user
1923 * association is required, application can create a userless account by
1924 * calling #pjsua_acc_add_local(). A userless account identifies local endpoint
Benny Prijonoe6ead542007-01-31 20:53:31 +00001925 * instead of a particular user, and it correspond with a particular
1926 * transport instance.
Benny Prijono312aff92006-06-17 04:08:30 +00001927 *
1928 * Also one account must be set as the <b>default account</b>, which is used as
1929 * the account to use when PJSUA fails to match a request with any other
1930 * accounts.
1931 *
1932 * When sending outgoing SIP requests (such as making calls or sending
1933 * instant messages), normally PJSUA requires the application to specify
1934 * which account to use for the request. If no account is specified,
1935 * PJSUA may be able to select the account by matching the destination
1936 * domain name, and fall back to default account when no match is found.
1937 */
1938
1939/**
1940 * Maximum accounts.
1941 */
1942#ifndef PJSUA_MAX_ACC
1943# define PJSUA_MAX_ACC 8
1944#endif
1945
1946
1947/**
1948 * Default registration interval.
1949 */
1950#ifndef PJSUA_REG_INTERVAL
Benny Prijonobddef2c2007-10-31 13:28:08 +00001951# define PJSUA_REG_INTERVAL 300
Benny Prijono312aff92006-06-17 04:08:30 +00001952#endif
1953
1954
1955/**
Benny Prijono384dab42009-10-14 01:58:04 +00001956 * Default maximum time to wait for account unregistration transactions to
1957 * complete during library shutdown sequence.
1958 *
1959 * Default: 4000 (4 seconds)
1960 */
1961#ifndef PJSUA_UNREG_TIMEOUT
1962# define PJSUA_UNREG_TIMEOUT 4000
1963#endif
1964
1965
1966/**
Benny Prijono3a5e1ab2006-08-15 20:26:34 +00001967 * Default PUBLISH expiration
1968 */
1969#ifndef PJSUA_PUBLISH_EXPIRATION
Benny Prijono53984d12009-04-28 22:19:49 +00001970# define PJSUA_PUBLISH_EXPIRATION PJSIP_PUBC_EXPIRATION_NOT_SPECIFIED
Benny Prijono3a5e1ab2006-08-15 20:26:34 +00001971#endif
1972
1973
1974/**
Benny Prijono093d3022006-09-24 00:07:11 +00001975 * Default account priority.
1976 */
1977#ifndef PJSUA_DEFAULT_ACC_PRIORITY
1978# define PJSUA_DEFAULT_ACC_PRIORITY 0
1979#endif
1980
1981
1982/**
Benny Prijono8058a622007-06-08 04:37:05 +00001983 * This macro specifies the URI scheme to use in Contact header
1984 * when secure transport such as TLS is used. Application can specify
1985 * either "sip" or "sips".
1986 */
1987#ifndef PJSUA_SECURE_SCHEME
Benny Prijono4c82c1e2008-10-16 08:14:51 +00001988# define PJSUA_SECURE_SCHEME "sip"
Benny Prijono8058a622007-06-08 04:37:05 +00001989#endif
1990
1991
1992/**
Benny Prijono534a9ba2009-10-13 14:01:59 +00001993 * Maximum time to wait for unpublication transaction(s) to complete
1994 * during shutdown process, before sending unregistration. The library
1995 * tries to wait for the unpublication (un-PUBLISH) to complete before
1996 * sending REGISTER request to unregister the account, during library
1997 * shutdown process. If the value is set too short, it is possible that
1998 * the unregistration is sent before unpublication completes, causing
1999 * unpublication request to fail.
2000 *
2001 * Default: 2000 (2 seconds)
2002 */
2003#ifndef PJSUA_UNPUBLISH_MAX_WAIT_TIME_MSEC
2004# define PJSUA_UNPUBLISH_MAX_WAIT_TIME_MSEC 2000
2005#endif
2006
2007
2008/**
Nanang Izzuddin36dd5b62010-03-30 11:13:59 +00002009 * Default auto retry re-registration interval, in seconds. Set to 0
2010 * to disable this. Application can set the timer on per account basis
2011 * by setting the pjsua_acc_config.reg_retry_interval field instead.
2012 *
2013 * Default: 300 (5 minutes)
2014 */
2015#ifndef PJSUA_REG_RETRY_INTERVAL
2016# define PJSUA_REG_RETRY_INTERVAL 300
2017#endif
2018
2019
2020/**
Benny Prijonoc6d5fdc2010-06-20 08:58:26 +00002021 * This macro specifies the default value for \a contact_rewrite_method
2022 * field in pjsua_acc_config. I specifies how Contact update will be
2023 * done with the registration, if \a allow_contact_rewrite is enabled in
2024 * the account config.
2025 *
2026 * If set to 1, the Contact update will be done by sending unregistration
2027 * to the currently registered Contact, while simultaneously sending new
2028 * registration (with different Call-ID) for the updated Contact.
2029 *
2030 * If set to 2, the Contact update will be done in a single, current
2031 * registration session, by removing the current binding (by setting its
2032 * Contact's expires parameter to zero) and adding a new Contact binding,
2033 * all done in a single request.
2034 *
2035 * Value 1 is the legacy behavior.
2036 *
2037 * Default value: 2
2038 */
2039#ifndef PJSUA_CONTACT_REWRITE_METHOD
2040# define PJSUA_CONTACT_REWRITE_METHOD 2
2041#endif
2042
2043
2044/**
Benny Prijono29c8ca32010-06-22 06:02:13 +00002045 * Bit value used in pjsua_acc_config.reg_use_proxy field to indicate that
2046 * the global outbound proxy list should be added to the REGISTER request.
2047 */
2048#define PJSUA_REG_USE_OUTBOUND_PROXY 1
2049
2050
2051/**
2052 * Bit value used in pjsua_acc_config.reg_use_proxy field to indicate that
2053 * the account proxy list should be added to the REGISTER request.
2054 */
2055#define PJSUA_REG_USE_ACC_PROXY 2
2056
2057
2058/**
Benny Prijonodd63b992010-10-01 02:03:42 +00002059 * This enumeration specifies how we should offer call hold request to
2060 * remote peer. The default value is set by compile time constant
2061 * PJSUA_CALL_HOLD_TYPE_DEFAULT, and application may control the setting
2062 * on per-account basis by manipulating \a call_hold_type field in
2063 * #pjsua_acc_config.
2064 */
2065typedef enum pjsua_call_hold_type
2066{
2067 /**
2068 * This will follow RFC 3264 recommendation to use a=sendonly,
2069 * a=recvonly, and a=inactive attribute as means to signal call
2070 * hold status. This is the correct value to use.
2071 */
2072 PJSUA_CALL_HOLD_TYPE_RFC3264,
2073
2074 /**
2075 * This will use the old and deprecated method as specified in RFC 2543,
2076 * and will offer c=0.0.0.0 in the SDP instead. Using this has many
2077 * drawbacks such as inability to keep the media transport alive while
2078 * the call is being put on hold, and should only be used if remote
2079 * does not understand RFC 3264 style call hold offer.
2080 */
2081 PJSUA_CALL_HOLD_TYPE_RFC2543
2082
2083} pjsua_call_hold_type;
2084
2085
2086/**
2087 * Specify the default call hold type to be used in #pjsua_acc_config.
2088 *
2089 * Default is PJSUA_CALL_HOLD_TYPE_RFC3264, and there's no reason to change
2090 * this except if you're communicating with an old/non-standard peer.
2091 */
2092#ifndef PJSUA_CALL_HOLD_TYPE_DEFAULT
2093# define PJSUA_CALL_HOLD_TYPE_DEFAULT PJSUA_CALL_HOLD_TYPE_RFC3264
2094#endif
2095
2096
2097/**
Benny Prijonob5388cf2007-01-04 22:45:08 +00002098 * This structure describes account configuration to be specified when
2099 * adding a new account with #pjsua_acc_add(). Application MUST initialize
2100 * this structure first by calling #pjsua_acc_config_default().
Benny Prijono312aff92006-06-17 04:08:30 +00002101 */
2102typedef struct pjsua_acc_config
2103{
Benny Prijono093d3022006-09-24 00:07:11 +00002104 /**
Benny Prijono705e7842008-07-21 18:12:51 +00002105 * Arbitrary user data to be associated with the newly created account.
2106 * Application may set this later with #pjsua_acc_set_user_data() and
2107 * retrieve it with #pjsua_acc_get_user_data().
2108 */
2109 void *user_data;
2110
2111 /**
Benny Prijono093d3022006-09-24 00:07:11 +00002112 * Account priority, which is used to control the order of matching
2113 * incoming/outgoing requests. The higher the number means the higher
2114 * the priority is, and the account will be matched first.
2115 */
2116 int priority;
2117
Benny Prijono312aff92006-06-17 04:08:30 +00002118 /**
2119 * The full SIP URL for the account. The value can take name address or
2120 * URL format, and will look something like "sip:account@serviceprovider".
2121 *
2122 * This field is mandatory.
2123 */
2124 pj_str_t id;
2125
2126 /**
2127 * This is the URL to be put in the request URI for the registration,
2128 * and will look something like "sip:serviceprovider".
2129 *
2130 * This field should be specified if registration is desired. If the
2131 * value is empty, no account registration will be performed.
2132 */
2133 pj_str_t reg_uri;
2134
Nanang Izzuddin60e8aa92010-09-28 10:48:48 +00002135 /**
2136 * The optional custom SIP headers to be put in the registration
2137 * request.
2138 */
2139 pjsip_hdr reg_hdr_list;
2140
Sauw Ming5c2f6da2011-02-11 07:39:14 +00002141 /**
2142 * The optional custom SIP headers to be put in the presence
2143 * subscription request.
2144 */
2145 pjsip_hdr sub_hdr_list;
2146
Benny Prijono3a5e1ab2006-08-15 20:26:34 +00002147 /**
Benny Prijonofe1bd342009-11-20 23:33:07 +00002148 * Subscribe to message waiting indication events (RFC 3842).
2149 *
2150 * See also \a enable_unsolicited_mwi field on #pjsua_config.
Benny Prijono4dd961b2009-10-26 11:21:37 +00002151 *
2152 * Default: no
2153 */
2154 pj_bool_t mwi_enabled;
2155
2156 /**
Benny Prijonob5388cf2007-01-04 22:45:08 +00002157 * If this flag is set, the presence information of this account will
2158 * be PUBLISH-ed to the server where the account belongs.
Benny Prijono48ab2b72007-11-08 09:24:30 +00002159 *
2160 * Default: PJ_FALSE
Benny Prijono3a5e1ab2006-08-15 20:26:34 +00002161 */
2162 pj_bool_t publish_enabled;
2163
Benny Prijonofe04fb52007-08-24 08:28:52 +00002164 /**
Benny Prijonofe50c9e2009-10-12 07:44:14 +00002165 * Event publication options.
2166 */
2167 pjsip_publishc_opt publish_opt;
2168
2169 /**
Benny Prijono534a9ba2009-10-13 14:01:59 +00002170 * Maximum time to wait for unpublication transaction(s) to complete
2171 * during shutdown process, before sending unregistration. The library
2172 * tries to wait for the unpublication (un-PUBLISH) to complete before
2173 * sending REGISTER request to unregister the account, during library
2174 * shutdown process. If the value is set too short, it is possible that
2175 * the unregistration is sent before unpublication completes, causing
2176 * unpublication request to fail.
2177 *
2178 * Default: PJSUA_UNPUBLISH_MAX_WAIT_TIME_MSEC
2179 */
2180 unsigned unpublish_max_wait_time_msec;
2181
2182 /**
Benny Prijono48ab2b72007-11-08 09:24:30 +00002183 * Authentication preference.
2184 */
2185 pjsip_auth_clt_pref auth_pref;
2186
2187 /**
Benny Prijonofe04fb52007-08-24 08:28:52 +00002188 * Optional PIDF tuple ID for outgoing PUBLISH and NOTIFY. If this value
2189 * is not specified, a random string will be used.
2190 */
2191 pj_str_t pidf_tuple_id;
2192
Benny Prijono312aff92006-06-17 04:08:30 +00002193 /**
2194 * Optional URI to be put as Contact for this account. It is recommended
2195 * that this field is left empty, so that the value will be calculated
2196 * automatically based on the transport address.
2197 */
Benny Prijonob4a17c92006-07-10 14:40:21 +00002198 pj_str_t force_contact;
Benny Prijono312aff92006-06-17 04:08:30 +00002199
2200 /**
Nanang Izzuddine2c7e852009-08-04 14:36:17 +00002201 * Additional parameters that will be appended in the Contact header
Benny Prijono30fe4852008-12-10 16:54:16 +00002202 * for this account. This will affect the Contact header in all SIP
2203 * messages sent on behalf of this account, including but not limited to
2204 * REGISTER, INVITE, and SUBCRIBE requests or responses.
2205 *
2206 * The parameters should be preceeded by semicolon, and all strings must
2207 * be properly escaped. Example:
2208 * ";my-param=X;another-param=Hi%20there"
2209 */
2210 pj_str_t contact_params;
2211
2212 /**
Nanang Izzuddine2c7e852009-08-04 14:36:17 +00002213 * Additional URI parameters that will be appended in the Contact URI
2214 * for this account. This will affect the Contact URI in all SIP
2215 * messages sent on behalf of this account, including but not limited to
2216 * REGISTER, INVITE, and SUBCRIBE requests or responses.
2217 *
2218 * The parameters should be preceeded by semicolon, and all strings must
2219 * be properly escaped. Example:
2220 * ";my-param=X;another-param=Hi%20there"
2221 */
2222 pj_str_t contact_uri_params;
2223
2224 /**
Benny Prijonodcfc0ba2007-09-30 16:50:27 +00002225 * Specify whether support for reliable provisional response (100rel and
2226 * PRACK) should be required for all sessions of this account.
2227 *
2228 * Default: PJ_FALSE
2229 */
2230 pj_bool_t require_100rel;
2231
2232 /**
Nanang Izzuddin742ef4b2010-09-07 09:36:15 +00002233 * Specify the usage of Session Timers for all sessions. See the
2234 * #pjsua_sip_timer_use for possible values.
Nanang Izzuddin59dffb12009-08-11 12:42:38 +00002235 *
Nanang Izzuddin742ef4b2010-09-07 09:36:15 +00002236 * Default: PJSUA_SIP_TIMER_OPTIONAL
Nanang Izzuddin59dffb12009-08-11 12:42:38 +00002237 */
Nanang Izzuddin742ef4b2010-09-07 09:36:15 +00002238 pjsua_sip_timer_use use_timer;
Nanang Izzuddin59dffb12009-08-11 12:42:38 +00002239
2240 /**
Nanang Izzuddin65add622009-08-11 16:26:20 +00002241 * Specify Session Timer settings, see #pjsip_timer_setting.
Nanang Izzuddin59dffb12009-08-11 12:42:38 +00002242 */
Nanang Izzuddin65add622009-08-11 16:26:20 +00002243 pjsip_timer_setting timer_setting;
Nanang Izzuddin59dffb12009-08-11 12:42:38 +00002244
2245 /**
Benny Prijono312aff92006-06-17 04:08:30 +00002246 * Number of proxies in the proxy array below.
2247 */
2248 unsigned proxy_cnt;
2249
2250 /**
2251 * Optional URI of the proxies to be visited for all outgoing requests
2252 * that are using this account (REGISTER, INVITE, etc). Application need
2253 * to specify these proxies if the service provider requires that requests
2254 * destined towards its network should go through certain proxies first
2255 * (for example, border controllers).
2256 *
2257 * These proxies will be put in the route set for this account, with
2258 * maintaining the orders (the first proxy in the array will be visited
Benny Prijonob5388cf2007-01-04 22:45:08 +00002259 * first). If global outbound proxies are configured in pjsua_config,
2260 * then these account proxies will be placed after the global outbound
2261 * proxies in the routeset.
Benny Prijono312aff92006-06-17 04:08:30 +00002262 */
2263 pj_str_t proxy[PJSUA_ACC_MAX_PROXIES];
2264
2265 /**
2266 * Optional interval for registration, in seconds. If the value is zero,
Benny Prijonobddef2c2007-10-31 13:28:08 +00002267 * default interval will be used (PJSUA_REG_INTERVAL, 300 seconds).
Benny Prijono312aff92006-06-17 04:08:30 +00002268 */
2269 unsigned reg_timeout;
2270
Benny Prijono384dab42009-10-14 01:58:04 +00002271 /**
2272 * Specify the maximum time to wait for unregistration requests to
2273 * complete during library shutdown sequence.
2274 *
2275 * Default: PJSUA_UNREG_TIMEOUT
2276 */
2277 unsigned unreg_timeout;
2278
Benny Prijono312aff92006-06-17 04:08:30 +00002279 /**
2280 * Number of credentials in the credential array.
2281 */
2282 unsigned cred_count;
2283
2284 /**
2285 * Array of credentials. If registration is desired, normally there should
2286 * be at least one credential specified, to successfully authenticate
2287 * against the service provider. More credentials can be specified, for
2288 * example when the requests are expected to be challenged by the
2289 * proxies in the route set.
2290 */
2291 pjsip_cred_info cred_info[PJSUA_ACC_MAX_PROXIES];
2292
Benny Prijono62c5c5b2007-01-13 23:22:40 +00002293 /**
2294 * Optionally bind this account to specific transport. This normally is
2295 * not a good idea, as account should be able to send requests using
2296 * any available transports according to the destination. But some
2297 * application may want to have explicit control over the transport to
2298 * use, so in that case it can set this field.
2299 *
2300 * Default: -1 (PJSUA_INVALID_ID)
2301 *
2302 * @see pjsua_acc_set_transport()
2303 */
2304 pjsua_transport_id transport_id;
2305
Benny Prijono15b02302007-09-27 14:07:07 +00002306 /**
Benny Prijonocca2e432010-02-25 09:33:18 +00002307 * This option is used to update the transport address and the Contact
Benny Prijonoe8554ef2008-03-22 09:33:52 +00002308 * header of REGISTER request. When this option is enabled, the library
2309 * will keep track of the public IP address from the response of REGISTER
2310 * request. Once it detects that the address has changed, it will
2311 * unregister current Contact, update the Contact with transport address
2312 * learned from Via header, and register a new Contact to the registrar.
2313 * This will also update the public name of UDP transport if STUN is
Benny Prijonocca2e432010-02-25 09:33:18 +00002314 * configured.
Benny Prijono15b02302007-09-27 14:07:07 +00002315 *
Benny Prijonoc6d5fdc2010-06-20 08:58:26 +00002316 * See also contact_rewrite_method field.
2317 *
Benny Prijono15b02302007-09-27 14:07:07 +00002318 * Default: 1 (yes)
2319 */
Benny Prijonoe8554ef2008-03-22 09:33:52 +00002320 pj_bool_t allow_contact_rewrite;
Benny Prijono15b02302007-09-27 14:07:07 +00002321
Benny Prijonobddef2c2007-10-31 13:28:08 +00002322 /**
Benny Prijonoc6d5fdc2010-06-20 08:58:26 +00002323 * Specify how Contact update will be done with the registration, if
2324 * \a allow_contact_rewrite is enabled.
2325 *
2326 * If set to 1, the Contact update will be done by sending unregistration
2327 * to the currently registered Contact, while simultaneously sending new
2328 * registration (with different Call-ID) for the updated Contact.
2329 *
2330 * If set to 2, the Contact update will be done in a single, current
2331 * registration session, by removing the current binding (by setting its
2332 * Contact's expires parameter to zero) and adding a new Contact binding,
2333 * all done in a single request.
2334 *
2335 * Value 1 is the legacy behavior.
2336 *
2337 * Default value: PJSUA_CONTACT_REWRITE_METHOD (2)
2338 */
2339 int contact_rewrite_method;
2340
2341 /**
Benny Prijonob54719f2010-11-16 03:07:46 +00002342 * Control the use of SIP outbound feature. SIP outbound is described in
2343 * RFC 5626 to enable proxies or registrar to send inbound requests back
2344 * to UA using the same connection initiated by the UA for its
2345 * registration. This feature is highly useful in NAT-ed deployemtns,
2346 * hence it is enabled by default.
2347 *
2348 * Note: currently SIP outbound can only be used with TCP and TLS
2349 * transports. If UDP is used for the registration, the SIP outbound
2350 * feature will be silently ignored for the account.
2351 *
2352 * Default: PJ_TRUE
2353 */
2354 unsigned use_rfc5626;
2355
2356 /**
2357 * Specify SIP outbound (RFC 5626) instance ID to be used by this
2358 * application. If empty, an instance ID will be generated based on
2359 * the hostname of this agent. If application specifies this parameter, the
2360 * value will look like "<urn:uuid:00000000-0000-1000-8000-AABBCCDDEEFF>"
2361 * without the doublequote.
2362 *
2363 * Default: empty
2364 */
2365 pj_str_t rfc5626_instance_id;
2366
2367 /**
2368 * Specify SIP outbound (RFC 5626) registration ID. The default value
2369 * is empty, which would cause the library to automatically generate
2370 * a suitable value.
2371 *
2372 * Default: empty
2373 */
2374 pj_str_t rfc5626_reg_id;
2375
2376 /**
Benny Prijonobddef2c2007-10-31 13:28:08 +00002377 * Set the interval for periodic keep-alive transmission for this account.
2378 * If this value is zero, keep-alive will be disabled for this account.
2379 * The keep-alive transmission will be sent to the registrar's address,
2380 * after successful registration.
2381 *
Benny Prijonobddef2c2007-10-31 13:28:08 +00002382 * Default: 15 (seconds)
2383 */
2384 unsigned ka_interval;
2385
2386 /**
2387 * Specify the data to be transmitted as keep-alive packets.
2388 *
2389 * Default: CR-LF
2390 */
2391 pj_str_t ka_data;
2392
Benny Prijonod8179652008-01-23 20:39:07 +00002393#if defined(PJMEDIA_HAS_SRTP) && (PJMEDIA_HAS_SRTP != 0)
2394 /**
2395 * Specify whether secure media transport should be used for this account.
2396 * Valid values are PJMEDIA_SRTP_DISABLED, PJMEDIA_SRTP_OPTIONAL, and
2397 * PJMEDIA_SRTP_MANDATORY.
2398 *
2399 * Default: #PJSUA_DEFAULT_USE_SRTP
2400 */
2401 pjmedia_srtp_use use_srtp;
2402
2403 /**
2404 * Specify whether SRTP requires secure signaling to be used. This option
2405 * is only used when \a use_srtp option above is non-zero.
2406 *
2407 * Valid values are:
2408 * 0: SRTP does not require secure signaling
2409 * 1: SRTP requires secure transport such as TLS
2410 * 2: SRTP requires secure end-to-end transport (SIPS)
2411 *
2412 * Default: #PJSUA_DEFAULT_SRTP_SECURE_SIGNALING
2413 */
2414 int srtp_secure_signaling;
Nanang Izzuddind89cc3a2010-05-13 05:22:51 +00002415
2416 /**
2417 * Specify whether SRTP in PJMEDIA_SRTP_OPTIONAL mode should compose
2418 * duplicated media in SDP offer, i.e: unsecured and secured version.
2419 * Otherwise, the SDP media will be composed as unsecured media but
2420 * with SDP "crypto" attribute.
2421 *
2422 * Default: PJ_FALSE
2423 */
2424 pj_bool_t srtp_optional_dup_offer;
Benny Prijonod8179652008-01-23 20:39:07 +00002425#endif
2426
Nanang Izzuddin36dd5b62010-03-30 11:13:59 +00002427 /**
2428 * Specify interval of auto registration retry upon registration failure
2429 * (including caused by transport problem), in second. Set to 0 to
2430 * disable auto re-registration.
2431 *
2432 * Default: #PJSUA_REG_RETRY_INTERVAL
2433 */
2434 unsigned reg_retry_interval;
2435
2436 /**
2437 * Specify whether calls of the configured account should be dropped
2438 * after registration failure and an attempt of re-registration has
2439 * also failed.
2440 *
2441 * Default: PJ_FALSE (disabled)
2442 */
2443 pj_bool_t drop_calls_on_reg_fail;
2444
Benny Prijono29c8ca32010-06-22 06:02:13 +00002445 /**
2446 * Specify how the registration uses the outbound and account proxy
2447 * settings. This controls if and what Route headers will appear in
2448 * the REGISTER request of this account. The value is bitmask combination
2449 * of PJSUA_REG_USE_OUTBOUND_PROXY and PJSUA_REG_USE_ACC_PROXY bits.
2450 * If the value is set to 0, the REGISTER request will not use any proxy
2451 * (i.e. it will not have any Route headers).
2452 *
2453 * Default: 3 (PJSUA_REG_USE_OUTBOUND_PROXY | PJSUA_REG_USE_ACC_PROXY)
2454 */
2455 unsigned reg_use_proxy;
2456
Nanang Izzuddin5e39a2b2010-09-20 06:13:02 +00002457#if defined(PJMEDIA_STREAM_ENABLE_KA) && (PJMEDIA_STREAM_ENABLE_KA != 0)
2458 /**
2459 * Specify whether stream keep-alive and NAT hole punching with
2460 * non-codec-VAD mechanism (see @ref PJMEDIA_STREAM_ENABLE_KA) is enabled
2461 * for this account.
2462 *
2463 * Default: PJ_FALSE (disabled)
2464 */
2465 pj_bool_t use_stream_ka;
2466#endif
2467
Benny Prijonodd63b992010-10-01 02:03:42 +00002468 /**
2469 * Specify how to offer call hold to remote peer. Please see the
2470 * documentation on #pjsua_call_hold_type for more info.
2471 *
2472 * Default: PJSUA_CALL_HOLD_TYPE_DEFAULT
2473 */
2474 pjsua_call_hold_type call_hold_type;
2475
Benny Prijono312aff92006-06-17 04:08:30 +00002476} pjsua_acc_config;
2477
2478
2479/**
2480 * Call this function to initialize account config with default values.
2481 *
2482 * @param cfg The account config to be initialized.
2483 */
Benny Prijono1f61a8f2007-08-16 10:11:44 +00002484PJ_DECL(void) pjsua_acc_config_default(pjsua_acc_config *cfg);
Benny Prijono312aff92006-06-17 04:08:30 +00002485
2486
2487/**
Benny Prijonobddef2c2007-10-31 13:28:08 +00002488 * Duplicate account config.
2489 *
2490 * @param pool Pool to be used for duplicating the config.
2491 * @param dst Destination configuration.
2492 * @param src Source configuration.
2493 */
2494PJ_DECL(void) pjsua_acc_config_dup(pj_pool_t *pool,
2495 pjsua_acc_config *dst,
2496 const pjsua_acc_config *src);
2497
2498
2499/**
Benny Prijono312aff92006-06-17 04:08:30 +00002500 * Account info. Application can query account info by calling
2501 * #pjsua_acc_get_info().
2502 */
2503typedef struct pjsua_acc_info
2504{
2505 /**
2506 * The account ID.
2507 */
2508 pjsua_acc_id id;
2509
2510 /**
2511 * Flag to indicate whether this is the default account.
2512 */
2513 pj_bool_t is_default;
2514
2515 /**
2516 * Account URI
2517 */
2518 pj_str_t acc_uri;
2519
2520 /**
2521 * Flag to tell whether this account has registration setting
2522 * (reg_uri is not empty).
2523 */
2524 pj_bool_t has_registration;
2525
2526 /**
2527 * An up to date expiration interval for account registration session.
2528 */
2529 int expires;
2530
2531 /**
2532 * Last registration status code. If status code is zero, the account
2533 * is currently not registered. Any other value indicates the SIP
2534 * status code of the registration.
2535 */
2536 pjsip_status_code status;
2537
2538 /**
Sauw Ming48f6dbf2010-09-07 05:10:25 +00002539 * Last registration error code. When the status field contains a SIP
2540 * status code that indicates a registration failure, last registration
2541 * error code contains the error code that causes the failure. In any
2542 * other case, its value is zero.
2543 */
2544 pj_status_t reg_last_err;
2545
2546 /**
Benny Prijono312aff92006-06-17 04:08:30 +00002547 * String describing the registration status.
2548 */
2549 pj_str_t status_text;
2550
2551 /**
2552 * Presence online status for this account.
2553 */
2554 pj_bool_t online_status;
2555
2556 /**
Benny Prijono4461c7d2007-08-25 13:36:15 +00002557 * Presence online status text.
2558 */
2559 pj_str_t online_status_text;
2560
2561 /**
2562 * Extended RPID online status information.
2563 */
2564 pjrpid_element rpid;
2565
2566 /**
Benny Prijono312aff92006-06-17 04:08:30 +00002567 * Buffer that is used internally to store the status text.
2568 */
2569 char buf_[PJ_ERR_MSG_SIZE];
2570
2571} pjsua_acc_info;
2572
2573
2574
2575/**
2576 * Get number of current accounts.
2577 *
2578 * @return Current number of accounts.
2579 */
2580PJ_DECL(unsigned) pjsua_acc_get_count(void);
2581
2582
2583/**
2584 * Check if the specified account ID is valid.
2585 *
2586 * @param acc_id Account ID to check.
2587 *
2588 * @return Non-zero if account ID is valid.
2589 */
2590PJ_DECL(pj_bool_t) pjsua_acc_is_valid(pjsua_acc_id acc_id);
2591
2592
2593/**
Benny Prijono21b9ad92006-08-15 13:11:22 +00002594 * Set default account to be used when incoming and outgoing
2595 * requests doesn't match any accounts.
2596 *
2597 * @param acc_id The account ID to be used as default.
2598 *
2599 * @return PJ_SUCCESS on success.
2600 */
2601PJ_DECL(pj_status_t) pjsua_acc_set_default(pjsua_acc_id acc_id);
2602
2603
2604/**
Benny Prijonob5388cf2007-01-04 22:45:08 +00002605 * Get default account to be used when receiving incoming requests (calls),
2606 * when the destination of the incoming call doesn't match any other
2607 * accounts.
Benny Prijono21b9ad92006-08-15 13:11:22 +00002608 *
2609 * @return The default account ID, or PJSUA_INVALID_ID if no
2610 * default account is configured.
2611 */
2612PJ_DECL(pjsua_acc_id) pjsua_acc_get_default(void);
2613
2614
2615/**
Benny Prijono312aff92006-06-17 04:08:30 +00002616 * Add a new account to pjsua. PJSUA must have been initialized (with
Benny Prijonob5388cf2007-01-04 22:45:08 +00002617 * #pjsua_init()) before calling this function. If registration is configured
2618 * for this account, this function would also start the SIP registration
2619 * session with the SIP registrar server. This SIP registration session
2620 * will be maintained internally by the library, and application doesn't
2621 * need to do anything to maintain the registration session.
2622 *
Benny Prijono312aff92006-06-17 04:08:30 +00002623 *
Benny Prijonoe6ead542007-01-31 20:53:31 +00002624 * @param acc_cfg Account configuration.
Benny Prijono312aff92006-06-17 04:08:30 +00002625 * @param is_default If non-zero, this account will be set as the default
2626 * account. The default account will be used when sending
2627 * outgoing requests (e.g. making call) when no account is
2628 * specified, and when receiving incoming requests when the
2629 * request does not match any accounts. It is recommended
2630 * that default account is set to local/LAN account.
2631 * @param p_acc_id Pointer to receive account ID of the new account.
2632 *
2633 * @return PJ_SUCCESS on success, or the appropriate error code.
2634 */
Benny Prijonoe6ead542007-01-31 20:53:31 +00002635PJ_DECL(pj_status_t) pjsua_acc_add(const pjsua_acc_config *acc_cfg,
Benny Prijono312aff92006-06-17 04:08:30 +00002636 pj_bool_t is_default,
2637 pjsua_acc_id *p_acc_id);
2638
2639
2640/**
2641 * Add a local account. A local account is used to identify local endpoint
2642 * instead of a specific user, and for this reason, a transport ID is needed
2643 * to obtain the local address information.
2644 *
2645 * @param tid Transport ID to generate account address.
2646 * @param is_default If non-zero, this account will be set as the default
2647 * account. The default account will be used when sending
2648 * outgoing requests (e.g. making call) when no account is
2649 * specified, and when receiving incoming requests when the
2650 * request does not match any accounts. It is recommended
2651 * that default account is set to local/LAN account.
2652 * @param p_acc_id Pointer to receive account ID of the new account.
2653 *
2654 * @return PJ_SUCCESS on success, or the appropriate error code.
2655 */
2656PJ_DECL(pj_status_t) pjsua_acc_add_local(pjsua_transport_id tid,
2657 pj_bool_t is_default,
2658 pjsua_acc_id *p_acc_id);
2659
2660/**
Benny Prijono705e7842008-07-21 18:12:51 +00002661 * Set arbitrary data to be associated with the account.
2662 *
2663 * @param acc_id The account ID.
2664 * @param user_data User/application data.
2665 *
2666 * @return PJ_SUCCESS on success, or the appropriate error code.
2667 */
2668PJ_DECL(pj_status_t) pjsua_acc_set_user_data(pjsua_acc_id acc_id,
2669 void *user_data);
2670
2671
2672/**
2673 * Retrieve arbitrary data associated with the account.
2674 *
2675 * @param acc_id The account ID.
2676 *
2677 * @return The user data. In the case where the account ID is
2678 * not valid, NULL is returned.
2679 */
2680PJ_DECL(void*) pjsua_acc_get_user_data(pjsua_acc_id acc_id);
2681
2682
2683/**
Benny Prijonob5388cf2007-01-04 22:45:08 +00002684 * Delete an account. This will unregister the account from the SIP server,
2685 * if necessary, and terminate server side presence subscriptions associated
2686 * with this account.
Benny Prijono312aff92006-06-17 04:08:30 +00002687 *
2688 * @param acc_id Id of the account to be deleted.
2689 *
2690 * @return PJ_SUCCESS on success, or the appropriate error code.
2691 */
2692PJ_DECL(pj_status_t) pjsua_acc_del(pjsua_acc_id acc_id);
2693
2694
2695/**
2696 * Modify account information.
2697 *
2698 * @param acc_id Id of the account to be modified.
Benny Prijonoe6ead542007-01-31 20:53:31 +00002699 * @param acc_cfg New account configuration.
Benny Prijono312aff92006-06-17 04:08:30 +00002700 *
2701 * @return PJ_SUCCESS on success, or the appropriate error code.
2702 */
2703PJ_DECL(pj_status_t) pjsua_acc_modify(pjsua_acc_id acc_id,
Benny Prijonoe6ead542007-01-31 20:53:31 +00002704 const pjsua_acc_config *acc_cfg);
Benny Prijono312aff92006-06-17 04:08:30 +00002705
2706
2707/**
2708 * Modify account's presence status to be advertised to remote/presence
Benny Prijonob5388cf2007-01-04 22:45:08 +00002709 * subscribers. This would trigger the sending of outgoing NOTIFY request
Benny Prijono4461c7d2007-08-25 13:36:15 +00002710 * if there are server side presence subscription for this account, and/or
2711 * outgoing PUBLISH if presence publication is enabled for this account.
2712 *
2713 * @see pjsua_acc_set_online_status2()
Benny Prijono312aff92006-06-17 04:08:30 +00002714 *
2715 * @param acc_id The account ID.
2716 * @param is_online True of false.
2717 *
2718 * @return PJ_SUCCESS on success, or the appropriate error code.
2719 */
2720PJ_DECL(pj_status_t) pjsua_acc_set_online_status(pjsua_acc_id acc_id,
2721 pj_bool_t is_online);
2722
Benny Prijono4461c7d2007-08-25 13:36:15 +00002723/**
2724 * Modify account's presence status to be advertised to remote/presence
2725 * subscribers. This would trigger the sending of outgoing NOTIFY request
2726 * if there are server side presence subscription for this account, and/or
2727 * outgoing PUBLISH if presence publication is enabled for this account.
2728 *
2729 * @see pjsua_acc_set_online_status()
2730 *
2731 * @param acc_id The account ID.
2732 * @param is_online True of false.
2733 * @param pr Extended information in subset of RPID format
2734 * which allows setting custom presence text.
2735 *
2736 * @return PJ_SUCCESS on success, or the appropriate error code.
2737 */
2738PJ_DECL(pj_status_t) pjsua_acc_set_online_status2(pjsua_acc_id acc_id,
2739 pj_bool_t is_online,
2740 const pjrpid_element *pr);
Benny Prijono312aff92006-06-17 04:08:30 +00002741
2742/**
Benny Prijonob5388cf2007-01-04 22:45:08 +00002743 * Update registration or perform unregistration. If registration is
2744 * configured for this account, then initial SIP REGISTER will be sent
2745 * when the account is added with #pjsua_acc_add(). Application normally
2746 * only need to call this function if it wants to manually update the
2747 * registration or to unregister from the server.
Benny Prijono312aff92006-06-17 04:08:30 +00002748 *
2749 * @param acc_id The account ID.
2750 * @param renew If renew argument is zero, this will start
2751 * unregistration process.
2752 *
2753 * @return PJ_SUCCESS on success, or the appropriate error code.
2754 */
2755PJ_DECL(pj_status_t) pjsua_acc_set_registration(pjsua_acc_id acc_id,
2756 pj_bool_t renew);
2757
Benny Prijono312aff92006-06-17 04:08:30 +00002758/**
Benny Prijonob5388cf2007-01-04 22:45:08 +00002759 * Get information about the specified account.
Benny Prijono312aff92006-06-17 04:08:30 +00002760 *
2761 * @param acc_id Account identification.
2762 * @param info Pointer to receive account information.
2763 *
2764 * @return PJ_SUCCESS on success, or the appropriate error code.
2765 */
2766PJ_DECL(pj_status_t) pjsua_acc_get_info(pjsua_acc_id acc_id,
2767 pjsua_acc_info *info);
2768
2769
2770/**
Benny Prijonob5388cf2007-01-04 22:45:08 +00002771 * Enumerate all account currently active in the library. This will fill
2772 * the array with the account Ids, and application can then query the
2773 * account information for each id with #pjsua_acc_get_info().
2774 *
2775 * @see pjsua_acc_enum_info().
Benny Prijono312aff92006-06-17 04:08:30 +00002776 *
2777 * @param ids Array of account IDs to be initialized.
2778 * @param count In input, specifies the maximum number of elements.
2779 * On return, it contains the actual number of elements.
2780 *
2781 * @return PJ_SUCCESS on success, or the appropriate error code.
2782 */
2783PJ_DECL(pj_status_t) pjsua_enum_accs(pjsua_acc_id ids[],
2784 unsigned *count );
2785
2786
2787/**
Benny Prijonob5388cf2007-01-04 22:45:08 +00002788 * Enumerate account informations.
Benny Prijono312aff92006-06-17 04:08:30 +00002789 *
2790 * @param info Array of account infos to be initialized.
2791 * @param count In input, specifies the maximum number of elements.
2792 * On return, it contains the actual number of elements.
2793 *
2794 * @return PJ_SUCCESS on success, or the appropriate error code.
2795 */
2796PJ_DECL(pj_status_t) pjsua_acc_enum_info( pjsua_acc_info info[],
2797 unsigned *count );
2798
2799
2800/**
2801 * This is an internal function to find the most appropriate account to
2802 * used to reach to the specified URL.
2803 *
2804 * @param url The remote URL to reach.
2805 *
2806 * @return Account id.
2807 */
2808PJ_DECL(pjsua_acc_id) pjsua_acc_find_for_outgoing(const pj_str_t *url);
2809
2810
2811/**
2812 * This is an internal function to find the most appropriate account to be
2813 * used to handle incoming calls.
2814 *
2815 * @param rdata The incoming request message.
2816 *
2817 * @return Account id.
2818 */
2819PJ_DECL(pjsua_acc_id) pjsua_acc_find_for_incoming(pjsip_rx_data *rdata);
2820
2821
Benny Prijonoc570f2d2006-07-18 00:33:02 +00002822/**
Benny Prijonofff245c2007-04-02 11:44:47 +00002823 * Create arbitrary requests using the account. Application should only use
2824 * this function to create auxiliary requests outside dialog, such as
2825 * OPTIONS, and use the call or presence API to create dialog related
2826 * requests.
2827 *
2828 * @param acc_id The account ID.
2829 * @param method The SIP method of the request.
2830 * @param target Target URI.
2831 * @param p_tdata Pointer to receive the request.
2832 *
2833 * @return PJ_SUCCESS or the error code.
2834 */
2835PJ_DECL(pj_status_t) pjsua_acc_create_request(pjsua_acc_id acc_id,
2836 const pjsip_method *method,
2837 const pj_str_t *target,
2838 pjsip_tx_data **p_tdata);
2839
2840
2841/**
Nanang Izzuddin5af37ff2009-08-05 18:41:23 +00002842 * Create a suitable Contact header value, based on the specified target URI
2843 * for the specified account.
Benny Prijonoc570f2d2006-07-18 00:33:02 +00002844 *
2845 * @param pool Pool to allocate memory for the string.
Nanang Izzuddin5af37ff2009-08-05 18:41:23 +00002846 * @param contact The string where the Contact will be stored.
Benny Prijonoc570f2d2006-07-18 00:33:02 +00002847 * @param acc_id Account ID.
2848 * @param uri Destination URI of the request.
2849 *
2850 * @return PJ_SUCCESS on success, other on error.
2851 */
2852PJ_DECL(pj_status_t) pjsua_acc_create_uac_contact( pj_pool_t *pool,
2853 pj_str_t *contact,
2854 pjsua_acc_id acc_id,
2855 const pj_str_t *uri);
2856
2857
2858
2859/**
Nanang Izzuddin5af37ff2009-08-05 18:41:23 +00002860 * Create a suitable Contact header value, based on the information in the
2861 * incoming request.
Benny Prijonoc570f2d2006-07-18 00:33:02 +00002862 *
2863 * @param pool Pool to allocate memory for the string.
Nanang Izzuddin5af37ff2009-08-05 18:41:23 +00002864 * @param contact The string where the Contact will be stored.
Benny Prijonoc570f2d2006-07-18 00:33:02 +00002865 * @param acc_id Account ID.
2866 * @param rdata Incoming request.
2867 *
2868 * @return PJ_SUCCESS on success, other on error.
2869 */
2870PJ_DECL(pj_status_t) pjsua_acc_create_uas_contact( pj_pool_t *pool,
2871 pj_str_t *contact,
2872 pjsua_acc_id acc_id,
2873 pjsip_rx_data *rdata );
2874
2875
Benny Prijono62c5c5b2007-01-13 23:22:40 +00002876/**
2877 * Lock/bind this account to a specific transport/listener. Normally
2878 * application shouldn't need to do this, as transports will be selected
2879 * automatically by the stack according to the destination.
2880 *
2881 * When account is locked/bound to a specific transport, all outgoing
2882 * requests from this account will use the specified transport (this
2883 * includes SIP registration, dialog (call and event subscription), and
2884 * out-of-dialog requests such as MESSAGE).
2885 *
2886 * Note that transport_id may be specified in pjsua_acc_config too.
2887 *
2888 * @param acc_id The account ID.
2889 * @param tp_id The transport ID.
2890 *
2891 * @return PJ_SUCCESS on success.
2892 */
2893PJ_DECL(pj_status_t) pjsua_acc_set_transport(pjsua_acc_id acc_id,
2894 pjsua_transport_id tp_id);
2895
Benny Prijono312aff92006-06-17 04:08:30 +00002896
2897/**
2898 * @}
2899 */
2900
2901
2902/*****************************************************************************
2903 * CALLS API
2904 */
2905
2906
2907/**
Benny Prijonoe6ead542007-01-31 20:53:31 +00002908 * @defgroup PJSUA_LIB_CALL PJSUA-API Calls Management
Benny Prijono312aff92006-06-17 04:08:30 +00002909 * @ingroup PJSUA_LIB
2910 * @brief Call manipulation.
2911 * @{
2912 */
2913
2914/**
Benny Prijonob5388cf2007-01-04 22:45:08 +00002915 * Maximum simultaneous calls.
Benny Prijono312aff92006-06-17 04:08:30 +00002916 */
2917#ifndef PJSUA_MAX_CALLS
2918# define PJSUA_MAX_CALLS 32
2919#endif
2920
2921
2922
2923/**
Benny Prijonob5388cf2007-01-04 22:45:08 +00002924 * This enumeration specifies the media status of a call, and it's part
2925 * of pjsua_call_info structure.
Benny Prijono312aff92006-06-17 04:08:30 +00002926 */
2927typedef enum pjsua_call_media_status
2928{
Benny Prijonob5388cf2007-01-04 22:45:08 +00002929 /** Call currently has no media */
Benny Prijono312aff92006-06-17 04:08:30 +00002930 PJSUA_CALL_MEDIA_NONE,
Benny Prijonob5388cf2007-01-04 22:45:08 +00002931
2932 /** The media is active */
Benny Prijono312aff92006-06-17 04:08:30 +00002933 PJSUA_CALL_MEDIA_ACTIVE,
Benny Prijonob5388cf2007-01-04 22:45:08 +00002934
2935 /** The media is currently put on hold by local endpoint */
Benny Prijono312aff92006-06-17 04:08:30 +00002936 PJSUA_CALL_MEDIA_LOCAL_HOLD,
Benny Prijonob5388cf2007-01-04 22:45:08 +00002937
2938 /** The media is currently put on hold by remote endpoint */
Benny Prijono312aff92006-06-17 04:08:30 +00002939 PJSUA_CALL_MEDIA_REMOTE_HOLD,
Benny Prijonob5388cf2007-01-04 22:45:08 +00002940
Benny Prijono096c56c2007-09-15 08:30:16 +00002941 /** The media has reported error (e.g. ICE negotiation) */
2942 PJSUA_CALL_MEDIA_ERROR
2943
Benny Prijono312aff92006-06-17 04:08:30 +00002944} pjsua_call_media_status;
2945
2946
2947/**
Benny Prijonob5388cf2007-01-04 22:45:08 +00002948 * This structure describes the information and current status of a call.
Benny Prijono312aff92006-06-17 04:08:30 +00002949 */
2950typedef struct pjsua_call_info
2951{
2952 /** Call identification. */
2953 pjsua_call_id id;
2954
2955 /** Initial call role (UAC == caller) */
2956 pjsip_role_e role;
2957
Benny Prijono90315512006-09-14 16:05:16 +00002958 /** The account ID where this call belongs. */
2959 pjsua_acc_id acc_id;
2960
Benny Prijono312aff92006-06-17 04:08:30 +00002961 /** Local URI */
2962 pj_str_t local_info;
2963
2964 /** Local Contact */
2965 pj_str_t local_contact;
2966
2967 /** Remote URI */
2968 pj_str_t remote_info;
2969
2970 /** Remote contact */
2971 pj_str_t remote_contact;
2972
2973 /** Dialog Call-ID string. */
2974 pj_str_t call_id;
2975
2976 /** Call state */
2977 pjsip_inv_state state;
2978
2979 /** Text describing the state */
2980 pj_str_t state_text;
2981
2982 /** Last status code heard, which can be used as cause code */
2983 pjsip_status_code last_status;
2984
2985 /** The reason phrase describing the status. */
2986 pj_str_t last_status_text;
2987
2988 /** Call media status. */
2989 pjsua_call_media_status media_status;
2990
2991 /** Media direction */
2992 pjmedia_dir media_dir;
2993
2994 /** The conference port number for the call */
2995 pjsua_conf_port_id conf_slot;
2996
2997 /** Up-to-date call connected duration (zero when call is not
2998 * established)
2999 */
3000 pj_time_val connect_duration;
3001
3002 /** Total call duration, including set-up time */
3003 pj_time_val total_duration;
3004
3005 /** Internal */
3006 struct {
3007 char local_info[128];
3008 char local_contact[128];
3009 char remote_info[128];
3010 char remote_contact[128];
3011 char call_id[128];
3012 char last_status_text[128];
3013 } buf_;
3014
3015} pjsua_call_info;
3016
3017
3018
Benny Prijonoa91a0032006-02-26 21:23:45 +00003019/**
Benny Prijono9fc735d2006-05-28 14:58:12 +00003020 * Get maximum number of calls configured in pjsua.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003021 *
3022 * @return Maximum number of calls configured.
Benny Prijono9fc735d2006-05-28 14:58:12 +00003023 */
Benny Prijono8b1889b2006-06-06 18:40:40 +00003024PJ_DECL(unsigned) pjsua_call_get_max_count(void);
Benny Prijono9fc735d2006-05-28 14:58:12 +00003025
3026/**
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003027 * Get number of currently active calls.
3028 *
3029 * @return Number of currently active calls.
Benny Prijono9fc735d2006-05-28 14:58:12 +00003030 */
Benny Prijono8b1889b2006-06-06 18:40:40 +00003031PJ_DECL(unsigned) pjsua_call_get_count(void);
Benny Prijono9fc735d2006-05-28 14:58:12 +00003032
3033/**
Benny Prijonob5388cf2007-01-04 22:45:08 +00003034 * Enumerate all active calls. Application may then query the information and
3035 * state of each call by calling #pjsua_call_get_info().
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003036 *
3037 * @param ids Array of account IDs to be initialized.
3038 * @param count In input, specifies the maximum number of elements.
3039 * On return, it contains the actual number of elements.
3040 *
3041 * @return PJ_SUCCESS on success, or the appropriate error code.
3042 */
3043PJ_DECL(pj_status_t) pjsua_enum_calls(pjsua_call_id ids[],
3044 unsigned *count);
3045
3046
3047/**
3048 * Make outgoing call to the specified URI using the specified account.
3049 *
3050 * @param acc_id The account to be used.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003051 * @param dst_uri URI to be put in the To header (normally is the same
3052 * as the target URI).
3053 * @param options Options (must be zero at the moment).
3054 * @param user_data Arbitrary user data to be attached to the call, and
3055 * can be retrieved later.
3056 * @param msg_data Optional headers etc to be added to outgoing INVITE
3057 * request, or NULL if no custom header is desired.
3058 * @param p_call_id Pointer to receive call identification.
3059 *
3060 * @return PJ_SUCCESS on success, or the appropriate error code.
3061 */
3062PJ_DECL(pj_status_t) pjsua_call_make_call(pjsua_acc_id acc_id,
3063 const pj_str_t *dst_uri,
3064 unsigned options,
3065 void *user_data,
3066 const pjsua_msg_data *msg_data,
3067 pjsua_call_id *p_call_id);
3068
3069
3070/**
Benny Prijono9fc735d2006-05-28 14:58:12 +00003071 * Check if the specified call has active INVITE session and the INVITE
3072 * session has not been disconnected.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003073 *
3074 * @param call_id Call identification.
3075 *
3076 * @return Non-zero if call is active.
Benny Prijono9fc735d2006-05-28 14:58:12 +00003077 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003078PJ_DECL(pj_bool_t) pjsua_call_is_active(pjsua_call_id call_id);
Benny Prijono9fc735d2006-05-28 14:58:12 +00003079
3080
3081/**
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003082 * Check if call has an active media session.
3083 *
3084 * @param call_id Call identification.
3085 *
3086 * @return Non-zero if yes.
Benny Prijono9fc735d2006-05-28 14:58:12 +00003087 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003088PJ_DECL(pj_bool_t) pjsua_call_has_media(pjsua_call_id call_id);
Benny Prijono9fc735d2006-05-28 14:58:12 +00003089
3090
3091/**
Benny Prijonocf986c42008-09-02 11:25:07 +00003092 * Retrieve the media session associated with this call. Note that the media
3093 * session may not be available depending on the current call's media status
3094 * (the pjsua_call_media_status information in pjsua_call_info). Application
3095 * may use the media session to retrieve more detailed information about the
3096 * call's media.
3097 *
3098 * @param call_id Call identification.
3099 *
3100 * @return Call media session.
3101 */
3102PJ_DECL(pjmedia_session*) pjsua_call_get_media_session(pjsua_call_id call_id);
3103
3104
3105/**
3106 * Retrieve the media transport instance that is used for this call.
3107 * Application may use the media transport to query more detailed information
3108 * about the media transport.
3109 *
3110 * @param cid Call identification (the call_id).
3111 *
3112 * @return Call media transport.
3113 */
3114PJ_DECL(pjmedia_transport*) pjsua_call_get_media_transport(pjsua_call_id cid);
3115
3116
3117/**
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003118 * Get the conference port identification associated with the call.
3119 *
3120 * @param call_id Call identification.
3121 *
3122 * @return Conference port ID, or PJSUA_INVALID_ID when the
3123 * media has not been established or is not active.
Benny Prijono9fc735d2006-05-28 14:58:12 +00003124 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003125PJ_DECL(pjsua_conf_port_id) pjsua_call_get_conf_port(pjsua_call_id call_id);
3126
3127/**
3128 * Obtain detail information about the specified call.
3129 *
3130 * @param call_id Call identification.
3131 * @param info Call info to be initialized.
3132 *
3133 * @return PJ_SUCCESS on success, or the appropriate error code.
3134 */
3135PJ_DECL(pj_status_t) pjsua_call_get_info(pjsua_call_id call_id,
Benny Prijono9fc735d2006-05-28 14:58:12 +00003136 pjsua_call_info *info);
3137
Nanang Izzuddin2a1b9ee2010-06-03 10:41:32 +00003138/**
3139 * Check if remote peer support the specified capability.
3140 *
3141 * @param call_id Call identification.
3142 * @param htype The header type to be checked, which value may be:
3143 * - PJSIP_H_ACCEPT
3144 * - PJSIP_H_ALLOW
3145 * - PJSIP_H_SUPPORTED
3146 * @param hname If htype specifies PJSIP_H_OTHER, then the header
3147 * name must be supplied in this argument. Otherwise the
3148 * value must be set to NULL.
3149 * @param token The capability token to check. For example, if \a
3150 * htype is PJSIP_H_ALLOW, then \a token specifies the
3151 * method names; if \a htype is PJSIP_H_SUPPORTED, then
3152 * \a token specifies the extension names such as
3153 * "100rel".
3154 *
3155 * @return PJSIP_DIALOG_CAP_SUPPORTED if the specified capability
3156 * is explicitly supported, see @pjsip_dialog_cap_status
3157 * for more info.
3158 */
3159PJ_DECL(pjsip_dialog_cap_status) pjsua_call_remote_has_cap(
3160 pjsua_call_id call_id,
3161 int htype,
3162 const pj_str_t *hname,
3163 const pj_str_t *token);
Benny Prijono9fc735d2006-05-28 14:58:12 +00003164
3165/**
Benny Prijonob5388cf2007-01-04 22:45:08 +00003166 * Attach application specific data to the call. Application can then
3167 * inspect this data by calling #pjsua_call_get_user_data().
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003168 *
3169 * @param call_id Call identification.
3170 * @param user_data Arbitrary data to be attached to the call.
3171 *
3172 * @return The user data.
Benny Prijono9fc735d2006-05-28 14:58:12 +00003173 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003174PJ_DECL(pj_status_t) pjsua_call_set_user_data(pjsua_call_id call_id,
3175 void *user_data);
Benny Prijono9fc735d2006-05-28 14:58:12 +00003176
3177
3178/**
Benny Prijonob5388cf2007-01-04 22:45:08 +00003179 * Get user data attached to the call, which has been previously set with
3180 * #pjsua_call_set_user_data().
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003181 *
3182 * @param call_id Call identification.
3183 *
3184 * @return The user data.
Benny Prijono268ca612006-02-07 12:34:11 +00003185 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003186PJ_DECL(void*) pjsua_call_get_user_data(pjsua_call_id call_id);
Benny Prijono84126ab2006-02-09 09:30:09 +00003187
3188
3189/**
Benny Prijono91a6a172007-10-31 08:59:29 +00003190 * Get the NAT type of remote's endpoint. This is a proprietary feature
3191 * of PJSUA-LIB which sends its NAT type in the SDP when \a nat_type_in_sdp
3192 * is set in #pjsua_config.
3193 *
3194 * This function can only be called after SDP has been received from remote,
3195 * which means for incoming call, this function can be called as soon as
3196 * call is received as long as incoming call contains SDP, and for outgoing
3197 * call, this function can be called only after SDP is received (normally in
3198 * 200/OK response to INVITE). As a general case, application should call
3199 * this function after or in \a on_call_media_state() callback.
3200 *
3201 * @param call_id Call identification.
3202 * @param p_type Pointer to store the NAT type. Application can then
3203 * retrieve the string description of the NAT type
3204 * by calling pj_stun_get_nat_name().
3205 *
3206 * @return PJ_SUCCESS on success.
3207 *
3208 * @see pjsua_get_nat_type(), nat_type_in_sdp
3209 */
3210PJ_DECL(pj_status_t) pjsua_call_get_rem_nat_type(pjsua_call_id call_id,
3211 pj_stun_nat_type *p_type);
3212
3213/**
Benny Prijonob5388cf2007-01-04 22:45:08 +00003214 * Send response to incoming INVITE request. Depending on the status
3215 * code specified as parameter, this function may send provisional
3216 * response, establish the call, or terminate the call.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003217 *
3218 * @param call_id Incoming call identification.
3219 * @param code Status code, (100-699).
3220 * @param reason Optional reason phrase. If NULL, default text
3221 * will be used.
3222 * @param msg_data Optional list of headers etc to be added to outgoing
3223 * response message.
3224 *
3225 * @return PJ_SUCCESS on success, or the appropriate error code.
Benny Prijonoa91a0032006-02-26 21:23:45 +00003226 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003227PJ_DECL(pj_status_t) pjsua_call_answer(pjsua_call_id call_id,
3228 unsigned code,
3229 const pj_str_t *reason,
3230 const pjsua_msg_data *msg_data);
Benny Prijonoa91a0032006-02-26 21:23:45 +00003231
3232/**
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003233 * Hangup call by using method that is appropriate according to the
Benny Prijonob5388cf2007-01-04 22:45:08 +00003234 * call state. This function is different than answering the call with
3235 * 3xx-6xx response (with #pjsua_call_answer()), in that this function
3236 * will hangup the call regardless of the state and role of the call,
3237 * while #pjsua_call_answer() only works with incoming calls on EARLY
3238 * state.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003239 *
3240 * @param call_id Call identification.
3241 * @param code Optional status code to be sent when we're rejecting
3242 * incoming call. If the value is zero, "603/Decline"
3243 * will be sent.
3244 * @param reason Optional reason phrase to be sent when we're rejecting
3245 * incoming call. If NULL, default text will be used.
3246 * @param msg_data Optional list of headers etc to be added to outgoing
3247 * request/response message.
3248 *
3249 * @return PJ_SUCCESS on success, or the appropriate error code.
Benny Prijono26ff9062006-02-21 23:47:00 +00003250 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003251PJ_DECL(pj_status_t) pjsua_call_hangup(pjsua_call_id call_id,
3252 unsigned code,
3253 const pj_str_t *reason,
3254 const pjsua_msg_data *msg_data);
Benny Prijono26ff9062006-02-21 23:47:00 +00003255
Benny Prijono5e51a4e2008-11-27 00:06:46 +00003256/**
3257 * Accept or reject redirection response. Application MUST call this function
3258 * after it signaled PJSIP_REDIRECT_PENDING in the \a on_call_redirected()
3259 * callback, to notify the call whether to accept or reject the redirection
3260 * to the current target. Application can use the combination of
3261 * PJSIP_REDIRECT_PENDING command in \a on_call_redirected() callback and
3262 * this function to ask for user permission before redirecting the call.
3263 *
3264 * Note that if the application chooses to reject or stop redirection (by
3265 * using PJSIP_REDIRECT_REJECT or PJSIP_REDIRECT_STOP respectively), the
3266 * call disconnection callback will be called before this function returns.
3267 * And if the application rejects the target, the \a on_call_redirected()
3268 * callback may also be called before this function returns if there is
3269 * another target to try.
3270 *
3271 * @param call_id The call ID.
3272 * @param cmd Redirection operation to be applied to the current
3273 * target. The semantic of this argument is similar
3274 * to the description in the \a on_call_redirected()
3275 * callback, except that the PJSIP_REDIRECT_PENDING is
3276 * not accepted here.
3277 *
3278 * @return PJ_SUCCESS on successful operation.
3279 */
3280PJ_DECL(pj_status_t) pjsua_call_process_redirect(pjsua_call_id call_id,
3281 pjsip_redirect_op cmd);
Benny Prijono26ff9062006-02-21 23:47:00 +00003282
3283/**
Benny Prijonob5388cf2007-01-04 22:45:08 +00003284 * Put the specified call on hold. This will send re-INVITE with the
3285 * appropriate SDP to inform remote that the call is being put on hold.
3286 * The final status of the request itself will be reported on the
3287 * \a on_call_media_state() callback, which inform the application that
3288 * the media state of the call has changed.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003289 *
3290 * @param call_id Call identification.
3291 * @param msg_data Optional message components to be sent with
3292 * the request.
3293 *
3294 * @return PJ_SUCCESS on success, or the appropriate error code.
Benny Prijono26ff9062006-02-21 23:47:00 +00003295 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003296PJ_DECL(pj_status_t) pjsua_call_set_hold(pjsua_call_id call_id,
3297 const pjsua_msg_data *msg_data);
Benny Prijono26ff9062006-02-21 23:47:00 +00003298
3299
3300/**
Benny Prijonob5388cf2007-01-04 22:45:08 +00003301 * Send re-INVITE to release hold.
3302 * The final status of the request itself will be reported on the
3303 * \a on_call_media_state() callback, which inform the application that
3304 * the media state of the call has changed.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003305 *
3306 * @param call_id Call identification.
3307 * @param unhold If this argument is non-zero and the call is locally
3308 * held, this will release the local hold.
3309 * @param msg_data Optional message components to be sent with
3310 * the request.
3311 *
3312 * @return PJ_SUCCESS on success, or the appropriate error code.
Benny Prijono26ff9062006-02-21 23:47:00 +00003313 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003314PJ_DECL(pj_status_t) pjsua_call_reinvite(pjsua_call_id call_id,
3315 pj_bool_t unhold,
3316 const pjsua_msg_data *msg_data);
Benny Prijono26ff9062006-02-21 23:47:00 +00003317
Benny Prijonoc08682e2007-10-04 06:17:58 +00003318/**
3319 * Send UPDATE request.
3320 *
3321 * @param call_id Call identification.
3322 * @param options Must be zero for now.
3323 * @param msg_data Optional message components to be sent with
3324 * the request.
3325 *
3326 * @return PJ_SUCCESS on success, or the appropriate error code.
3327 */
3328PJ_DECL(pj_status_t) pjsua_call_update(pjsua_call_id call_id,
3329 unsigned options,
3330 const pjsua_msg_data *msg_data);
Benny Prijono26ff9062006-02-21 23:47:00 +00003331
3332/**
Benny Prijono053f5222006-11-11 16:16:04 +00003333 * Initiate call transfer to the specified address. This function will send
3334 * REFER request to instruct remote call party to initiate a new INVITE
3335 * session to the specified destination/target.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003336 *
Benny Prijonob5388cf2007-01-04 22:45:08 +00003337 * If application is interested to monitor the successfulness and
3338 * the progress of the transfer request, it can implement
3339 * \a on_call_transfer_status() callback which will report the progress
3340 * of the call transfer request.
3341 *
Benny Prijono053f5222006-11-11 16:16:04 +00003342 * @param call_id The call id to be transfered.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003343 * @param dest Address of new target to be contacted.
3344 * @param msg_data Optional message components to be sent with
3345 * the request.
3346 *
3347 * @return PJ_SUCCESS on success, or the appropriate error code.
Benny Prijono26ff9062006-02-21 23:47:00 +00003348 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003349PJ_DECL(pj_status_t) pjsua_call_xfer(pjsua_call_id call_id,
3350 const pj_str_t *dest,
3351 const pjsua_msg_data *msg_data);
Benny Prijono9fc735d2006-05-28 14:58:12 +00003352
3353/**
Benny Prijono053f5222006-11-11 16:16:04 +00003354 * Flag to indicate that "Require: replaces" should not be put in the
3355 * outgoing INVITE request caused by REFER request created by
3356 * #pjsua_call_xfer_replaces().
3357 */
3358#define PJSUA_XFER_NO_REQUIRE_REPLACES 1
3359
3360/**
3361 * Initiate attended call transfer. This function will send REFER request
3362 * to instruct remote call party to initiate new INVITE session to the URL
3363 * of \a dest_call_id. The party at \a dest_call_id then should "replace"
3364 * the call with us with the new call from the REFER recipient.
3365 *
3366 * @param call_id The call id to be transfered.
3367 * @param dest_call_id The call id to be replaced.
3368 * @param options Application may specify PJSUA_XFER_NO_REQUIRE_REPLACES
3369 * to suppress the inclusion of "Require: replaces" in
3370 * the outgoing INVITE request created by the REFER
3371 * request.
3372 * @param msg_data Optional message components to be sent with
3373 * the request.
3374 *
3375 * @return PJ_SUCCESS on success, or the appropriate error code.
3376 */
3377PJ_DECL(pj_status_t) pjsua_call_xfer_replaces(pjsua_call_id call_id,
3378 pjsua_call_id dest_call_id,
3379 unsigned options,
3380 const pjsua_msg_data *msg_data);
3381
3382/**
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003383 * Send DTMF digits to remote using RFC 2833 payload formats.
3384 *
3385 * @param call_id Call identification.
Benny Prijonoe6ead542007-01-31 20:53:31 +00003386 * @param digits DTMF string digits to be sent.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003387 *
3388 * @return PJ_SUCCESS on success, or the appropriate error code.
Benny Prijono9fc735d2006-05-28 14:58:12 +00003389 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003390PJ_DECL(pj_status_t) pjsua_call_dial_dtmf(pjsua_call_id call_id,
Benny Prijono9fc735d2006-05-28 14:58:12 +00003391 const pj_str_t *digits);
Benny Prijono26ff9062006-02-21 23:47:00 +00003392
Benny Prijono26ff9062006-02-21 23:47:00 +00003393/**
Benny Prijonob0808372006-03-02 21:18:58 +00003394 * Send instant messaging inside INVITE session.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003395 *
3396 * @param call_id Call identification.
3397 * @param mime_type Optional MIME type. If NULL, then "text/plain" is
3398 * assumed.
3399 * @param content The message content.
3400 * @param msg_data Optional list of headers etc to be included in outgoing
3401 * request. The body descriptor in the msg_data is
3402 * ignored.
3403 * @param user_data Optional user data, which will be given back when
3404 * the IM callback is called.
3405 *
3406 * @return PJ_SUCCESS on success, or the appropriate error code.
Benny Prijonob0808372006-03-02 21:18:58 +00003407 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003408PJ_DECL(pj_status_t) pjsua_call_send_im( pjsua_call_id call_id,
3409 const pj_str_t *mime_type,
3410 const pj_str_t *content,
3411 const pjsua_msg_data *msg_data,
3412 void *user_data);
Benny Prijonob0808372006-03-02 21:18:58 +00003413
3414
3415/**
3416 * Send IM typing indication inside INVITE session.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003417 *
3418 * @param call_id Call identification.
3419 * @param is_typing Non-zero to indicate to remote that local person is
3420 * currently typing an IM.
3421 * @param msg_data Optional list of headers etc to be included in outgoing
3422 * request.
3423 *
3424 * @return PJ_SUCCESS on success, or the appropriate error code.
Benny Prijonob0808372006-03-02 21:18:58 +00003425 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003426PJ_DECL(pj_status_t) pjsua_call_send_typing_ind(pjsua_call_id call_id,
3427 pj_bool_t is_typing,
3428 const pjsua_msg_data*msg_data);
Benny Prijonob0808372006-03-02 21:18:58 +00003429
3430/**
Benny Prijonofeb69f42007-10-05 09:12:26 +00003431 * Send arbitrary request with the call. This is useful for example to send
3432 * INFO request. Note that application should not use this function to send
3433 * requests which would change the invite session's state, such as re-INVITE,
3434 * UPDATE, PRACK, and BYE.
3435 *
3436 * @param call_id Call identification.
3437 * @param method SIP method of the request.
3438 * @param msg_data Optional message body and/or list of headers to be
3439 * included in outgoing request.
3440 *
3441 * @return PJ_SUCCESS on success, or the appropriate error code.
3442 */
3443PJ_DECL(pj_status_t) pjsua_call_send_request(pjsua_call_id call_id,
3444 const pj_str_t *method,
3445 const pjsua_msg_data *msg_data);
3446
3447
3448/**
Benny Prijonob5388cf2007-01-04 22:45:08 +00003449 * Terminate all calls. This will initiate #pjsua_call_hangup() for all
3450 * currently active calls.
Benny Prijono834aee32006-02-19 01:38:06 +00003451 */
Benny Prijonodc39fe82006-05-26 12:17:46 +00003452PJ_DECL(void) pjsua_call_hangup_all(void);
Benny Prijono834aee32006-02-19 01:38:06 +00003453
3454
Benny Prijonob9b32ab2006-06-01 12:28:44 +00003455/**
3456 * Dump call and media statistics to string.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003457 *
3458 * @param call_id Call identification.
3459 * @param with_media Non-zero to include media information too.
3460 * @param buffer Buffer where the statistics are to be written to.
3461 * @param maxlen Maximum length of buffer.
3462 * @param indent Spaces for left indentation.
3463 *
3464 * @return PJ_SUCCESS on success.
Benny Prijonob9b32ab2006-06-01 12:28:44 +00003465 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003466PJ_DECL(pj_status_t) pjsua_call_dump(pjsua_call_id call_id,
3467 pj_bool_t with_media,
3468 char *buffer,
3469 unsigned maxlen,
3470 const char *indent);
Benny Prijonob9b32ab2006-06-01 12:28:44 +00003471
Benny Prijono9fc735d2006-05-28 14:58:12 +00003472/**
Benny Prijono312aff92006-06-17 04:08:30 +00003473 * @}
Benny Prijono9fc735d2006-05-28 14:58:12 +00003474 */
Benny Prijono834aee32006-02-19 01:38:06 +00003475
3476
3477/*****************************************************************************
Benny Prijono312aff92006-06-17 04:08:30 +00003478 * BUDDY API
Benny Prijono834aee32006-02-19 01:38:06 +00003479 */
3480
Benny Prijono312aff92006-06-17 04:08:30 +00003481
3482/**
Benny Prijonoe6ead542007-01-31 20:53:31 +00003483 * @defgroup PJSUA_LIB_BUDDY PJSUA-API Buddy, Presence, and Instant Messaging
Benny Prijono312aff92006-06-17 04:08:30 +00003484 * @ingroup PJSUA_LIB
3485 * @brief Buddy management, buddy's presence, and instant messaging.
3486 * @{
Benny Prijonoe6ead542007-01-31 20:53:31 +00003487 *
3488 * This section describes PJSUA-APIs related to buddies management,
3489 * presence management, and instant messaging.
Benny Prijono312aff92006-06-17 04:08:30 +00003490 */
3491
3492/**
3493 * Max buddies in buddy list.
3494 */
3495#ifndef PJSUA_MAX_BUDDIES
3496# define PJSUA_MAX_BUDDIES 256
3497#endif
3498
3499
3500/**
Benny Prijono6ab05322009-10-21 03:03:06 +00003501 * This specifies how long the library should wait before retrying failed
3502 * SUBSCRIBE request, and there is no rule to automatically resubscribe
3503 * (for example, no "retry-after" parameter in Subscription-State header).
3504 *
3505 * This also controls the duration before failed PUBLISH request will be
3506 * retried.
Benny Prijonoa17496a2007-10-31 10:20:31 +00003507 *
3508 * Default: 300 seconds
3509 */
3510#ifndef PJSUA_PRES_TIMER
3511# define PJSUA_PRES_TIMER 300
3512#endif
3513
3514
3515/**
Benny Prijonob5388cf2007-01-04 22:45:08 +00003516 * This structure describes buddy configuration when adding a buddy to
3517 * the buddy list with #pjsua_buddy_add(). Application MUST initialize
3518 * the structure with #pjsua_buddy_config_default() to initialize this
3519 * structure with default configuration.
Benny Prijono312aff92006-06-17 04:08:30 +00003520 */
3521typedef struct pjsua_buddy_config
3522{
3523 /**
3524 * Buddy URL or name address.
3525 */
3526 pj_str_t uri;
3527
3528 /**
3529 * Specify whether presence subscription should start immediately.
3530 */
3531 pj_bool_t subscribe;
3532
Benny Prijono705e7842008-07-21 18:12:51 +00003533 /**
3534 * Specify arbitrary application data to be associated with with
3535 * the buddy object.
3536 */
3537 void *user_data;
3538
Benny Prijono312aff92006-06-17 04:08:30 +00003539} pjsua_buddy_config;
3540
3541
3542/**
Benny Prijonob5388cf2007-01-04 22:45:08 +00003543 * This enumeration describes basic buddy's online status.
Benny Prijono312aff92006-06-17 04:08:30 +00003544 */
3545typedef enum pjsua_buddy_status
3546{
3547 /**
3548 * Online status is unknown (possibly because no presence subscription
3549 * has been established).
3550 */
3551 PJSUA_BUDDY_STATUS_UNKNOWN,
3552
3553 /**
Benny Prijonofc24e692007-01-27 18:31:51 +00003554 * Buddy is known to be online.
Benny Prijono312aff92006-06-17 04:08:30 +00003555 */
3556 PJSUA_BUDDY_STATUS_ONLINE,
3557
3558 /**
3559 * Buddy is offline.
3560 */
3561 PJSUA_BUDDY_STATUS_OFFLINE,
3562
3563} pjsua_buddy_status;
3564
3565
3566
3567/**
Benny Prijonob5388cf2007-01-04 22:45:08 +00003568 * This structure describes buddy info, which can be retrieved by calling
3569 * #pjsua_buddy_get_info().
Benny Prijono312aff92006-06-17 04:08:30 +00003570 */
3571typedef struct pjsua_buddy_info
3572{
3573 /**
3574 * The buddy ID.
3575 */
3576 pjsua_buddy_id id;
3577
3578 /**
3579 * The full URI of the buddy, as specified in the configuration.
3580 */
3581 pj_str_t uri;
3582
3583 /**
3584 * Buddy's Contact, only available when presence subscription has
3585 * been established to the buddy.
3586 */
3587 pj_str_t contact;
3588
3589 /**
3590 * Buddy's online status.
3591 */
3592 pjsua_buddy_status status;
3593
3594 /**
3595 * Text to describe buddy's online status.
3596 */
3597 pj_str_t status_text;
3598
3599 /**
3600 * Flag to indicate that we should monitor the presence information for
3601 * this buddy (normally yes, unless explicitly disabled).
3602 */
3603 pj_bool_t monitor_pres;
3604
3605 /**
Benny Prijono63fba012008-07-17 14:19:10 +00003606 * If \a monitor_pres is enabled, this specifies the last state of the
3607 * presence subscription. If presence subscription session is currently
3608 * active, the value will be PJSIP_EVSUB_STATE_ACTIVE. If presence
3609 * subscription request has been rejected, the value will be
3610 * PJSIP_EVSUB_STATE_TERMINATED, and the termination reason will be
3611 * specified in \a sub_term_reason.
3612 */
3613 pjsip_evsub_state sub_state;
3614
3615 /**
Benny Prijonod06d8c52009-06-30 13:53:47 +00003616 * String representation of subscription state.
3617 */
3618 const char *sub_state_name;
3619
3620 /**
Benny Prijono73bb7232009-10-20 13:56:26 +00003621 * Specifies the last presence subscription termination code. This would
3622 * return the last status of the SUBSCRIBE request. If the subscription
3623 * is terminated with NOTIFY by the server, this value will be set to
3624 * 200, and subscription termination reason will be given in the
3625 * \a sub_term_reason field.
3626 */
3627 unsigned sub_term_code;
3628
3629 /**
3630 * Specifies the last presence subscription termination reason. If
Benny Prijono63fba012008-07-17 14:19:10 +00003631 * presence subscription is currently active, the value will be empty.
3632 */
3633 pj_str_t sub_term_reason;
3634
3635 /**
Benny Prijono4461c7d2007-08-25 13:36:15 +00003636 * Extended RPID information about the person.
3637 */
3638 pjrpid_element rpid;
3639
3640 /**
Benny Prijono28add7e2009-06-15 16:03:40 +00003641 * Extended presence info.
3642 */
3643 pjsip_pres_status pres_status;
3644
3645 /**
Benny Prijono312aff92006-06-17 04:08:30 +00003646 * Internal buffer.
3647 */
Benny Prijono4461c7d2007-08-25 13:36:15 +00003648 char buf_[512];
Benny Prijono312aff92006-06-17 04:08:30 +00003649
3650} pjsua_buddy_info;
3651
3652
Benny Prijono834aee32006-02-19 01:38:06 +00003653/**
Benny Prijonob5388cf2007-01-04 22:45:08 +00003654 * Set default values to the buddy config.
3655 */
Benny Prijono1f61a8f2007-08-16 10:11:44 +00003656PJ_DECL(void) pjsua_buddy_config_default(pjsua_buddy_config *cfg);
Benny Prijonob5388cf2007-01-04 22:45:08 +00003657
3658
3659/**
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003660 * Get total number of buddies.
3661 *
3662 * @return Number of buddies.
Benny Prijono9fc735d2006-05-28 14:58:12 +00003663 */
3664PJ_DECL(unsigned) pjsua_get_buddy_count(void);
3665
3666
3667/**
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003668 * Check if buddy ID is valid.
3669 *
3670 * @param buddy_id Buddy ID to check.
3671 *
3672 * @return Non-zero if buddy ID is valid.
Benny Prijono9fc735d2006-05-28 14:58:12 +00003673 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003674PJ_DECL(pj_bool_t) pjsua_buddy_is_valid(pjsua_buddy_id buddy_id);
3675
3676
3677/**
Benny Prijonob5388cf2007-01-04 22:45:08 +00003678 * Enumerate all buddy IDs in the buddy list. Application then can use
3679 * #pjsua_buddy_get_info() to get the detail information for each buddy
3680 * id.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003681 *
3682 * @param ids Array of ids to be initialized.
3683 * @param count On input, specifies max elements in the array.
3684 * On return, it contains actual number of elements
3685 * that have been initialized.
3686 *
3687 * @return PJ_SUCCESS on success, or the appropriate error code.
3688 */
3689PJ_DECL(pj_status_t) pjsua_enum_buddies(pjsua_buddy_id ids[],
3690 unsigned *count);
3691
3692/**
Benny Prijono705e7842008-07-21 18:12:51 +00003693 * Find the buddy ID with the specified URI.
3694 *
3695 * @param uri The buddy URI.
3696 *
3697 * @return The buddy ID, or PJSUA_INVALID_ID if not found.
3698 */
3699PJ_DECL(pjsua_buddy_id) pjsua_buddy_find(const pj_str_t *uri);
3700
3701
3702/**
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003703 * Get detailed buddy info.
3704 *
3705 * @param buddy_id The buddy identification.
3706 * @param info Pointer to receive information about buddy.
3707 *
3708 * @return PJ_SUCCESS on success, or the appropriate error code.
3709 */
3710PJ_DECL(pj_status_t) pjsua_buddy_get_info(pjsua_buddy_id buddy_id,
Benny Prijono9fc735d2006-05-28 14:58:12 +00003711 pjsua_buddy_info *info);
3712
3713/**
Benny Prijono705e7842008-07-21 18:12:51 +00003714 * Set the user data associated with the buddy object.
3715 *
3716 * @param buddy_id The buddy identification.
3717 * @param user_data Arbitrary application data to be associated with
3718 * the buddy object.
3719 *
3720 * @return PJ_SUCCESS on success, or the appropriate error code.
3721 */
3722PJ_DECL(pj_status_t) pjsua_buddy_set_user_data(pjsua_buddy_id buddy_id,
3723 void *user_data);
3724
3725
3726/**
3727 * Get the user data associated with the budy object.
3728 *
3729 * @param buddy_id The buddy identification.
3730 *
3731 * @return The application data.
3732 */
3733PJ_DECL(void*) pjsua_buddy_get_user_data(pjsua_buddy_id buddy_id);
3734
3735
3736/**
Benny Prijonob5388cf2007-01-04 22:45:08 +00003737 * Add new buddy to the buddy list. If presence subscription is enabled
3738 * for this buddy, this function will also start the presence subscription
3739 * session immediately.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003740 *
Benny Prijonoa7b376b2008-01-25 16:06:33 +00003741 * @param buddy_cfg Buddy configuration.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003742 * @param p_buddy_id Pointer to receive buddy ID.
3743 *
3744 * @return PJ_SUCCESS on success, or the appropriate error code.
Benny Prijono9fc735d2006-05-28 14:58:12 +00003745 */
Benny Prijonoe6ead542007-01-31 20:53:31 +00003746PJ_DECL(pj_status_t) pjsua_buddy_add(const pjsua_buddy_config *buddy_cfg,
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003747 pjsua_buddy_id *p_buddy_id);
Benny Prijono8b1889b2006-06-06 18:40:40 +00003748
3749
3750/**
Benny Prijonob5388cf2007-01-04 22:45:08 +00003751 * Delete the specified buddy from the buddy list. Any presence subscription
3752 * to this buddy will be terminated.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003753 *
3754 * @param buddy_id Buddy identification.
3755 *
3756 * @return PJ_SUCCESS on success, or the appropriate error code.
Benny Prijono8b1889b2006-06-06 18:40:40 +00003757 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003758PJ_DECL(pj_status_t) pjsua_buddy_del(pjsua_buddy_id buddy_id);
Benny Prijono9fc735d2006-05-28 14:58:12 +00003759
3760
3761/**
Benny Prijonob5388cf2007-01-04 22:45:08 +00003762 * Enable/disable buddy's presence monitoring. Once buddy's presence is
3763 * subscribed, application will be informed about buddy's presence status
3764 * changed via \a on_buddy_state() callback.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003765 *
3766 * @param buddy_id Buddy identification.
3767 * @param subscribe Specify non-zero to activate presence subscription to
3768 * the specified buddy.
3769 *
3770 * @return PJ_SUCCESS on success, or the appropriate error code.
Benny Prijono9fc735d2006-05-28 14:58:12 +00003771 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003772PJ_DECL(pj_status_t) pjsua_buddy_subscribe_pres(pjsua_buddy_id buddy_id,
3773 pj_bool_t subscribe);
Benny Prijono9fc735d2006-05-28 14:58:12 +00003774
3775
3776/**
Benny Prijono10861432007-10-31 10:54:53 +00003777 * Update the presence information for the buddy. Although the library
3778 * periodically refreshes the presence subscription for all buddies, some
3779 * application may want to refresh the buddy's presence subscription
3780 * immediately, and in this case it can use this function to accomplish
3781 * this.
3782 *
3783 * Note that the buddy's presence subscription will only be initiated
3784 * if presence monitoring is enabled for the buddy. See
3785 * #pjsua_buddy_subscribe_pres() for more info. Also if presence subscription
3786 * for the buddy is already active, this function will not do anything.
3787 *
3788 * Once the presence subscription is activated successfully for the buddy,
3789 * application will be notified about the buddy's presence status in the
3790 * on_buddy_state() callback.
3791 *
3792 * @param buddy_id Buddy identification.
3793 *
3794 * @return PJ_SUCCESS on success, or the appropriate error code.
3795 */
3796PJ_DECL(pj_status_t) pjsua_buddy_update_pres(pjsua_buddy_id buddy_id);
3797
3798
3799/**
Benny Prijono63fba012008-07-17 14:19:10 +00003800 * Send NOTIFY to inform account presence status or to terminate server
3801 * side presence subscription. If application wants to reject the incoming
3802 * request, it should set the \a state to PJSIP_EVSUB_STATE_TERMINATED.
3803 *
3804 * @param acc_id Account ID.
3805 * @param srv_pres Server presence subscription instance.
3806 * @param state New state to set.
3807 * @param state_str Optionally specify the state string name, if state
3808 * is not "active", "pending", or "terminated".
3809 * @param reason If the new state is PJSIP_EVSUB_STATE_TERMINATED,
3810 * optionally specify the termination reason.
3811 * @param with_body If the new state is PJSIP_EVSUB_STATE_TERMINATED,
3812 * this specifies whether the NOTIFY request should
3813 * contain message body containing account's presence
3814 * information.
3815 * @param msg_data Optional list of headers to be sent with the NOTIFY
3816 * request.
3817 *
3818 * @return PJ_SUCCESS on success.
3819 */
3820PJ_DECL(pj_status_t) pjsua_pres_notify(pjsua_acc_id acc_id,
3821 pjsua_srv_pres *srv_pres,
3822 pjsip_evsub_state state,
3823 const pj_str_t *state_str,
3824 const pj_str_t *reason,
3825 pj_bool_t with_body,
3826 const pjsua_msg_data *msg_data);
3827
3828/**
Benny Prijonob5388cf2007-01-04 22:45:08 +00003829 * Dump presence subscriptions to log.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003830 *
3831 * @param verbose Yes or no.
Benny Prijono834aee32006-02-19 01:38:06 +00003832 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003833PJ_DECL(void) pjsua_pres_dump(pj_bool_t verbose);
Benny Prijono834aee32006-02-19 01:38:06 +00003834
3835
Benny Prijonob0808372006-03-02 21:18:58 +00003836/**
3837 * The MESSAGE method (defined in pjsua_im.c)
3838 */
3839extern const pjsip_method pjsip_message_method;
3840
3841
Benny Prijonob0808372006-03-02 21:18:58 +00003842
3843/**
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003844 * Send instant messaging outside dialog, using the specified account for
3845 * route set and authentication.
3846 *
3847 * @param acc_id Account ID to be used to send the request.
3848 * @param to Remote URI.
3849 * @param mime_type Optional MIME type. If NULL, then "text/plain" is
3850 * assumed.
3851 * @param content The message content.
3852 * @param msg_data Optional list of headers etc to be included in outgoing
3853 * request. The body descriptor in the msg_data is
3854 * ignored.
3855 * @param user_data Optional user data, which will be given back when
3856 * the IM callback is called.
3857 *
3858 * @return PJ_SUCCESS on success, or the appropriate error code.
Benny Prijonob0808372006-03-02 21:18:58 +00003859 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003860PJ_DECL(pj_status_t) pjsua_im_send(pjsua_acc_id acc_id,
3861 const pj_str_t *to,
3862 const pj_str_t *mime_type,
3863 const pj_str_t *content,
3864 const pjsua_msg_data *msg_data,
3865 void *user_data);
Benny Prijonob0808372006-03-02 21:18:58 +00003866
3867
3868/**
3869 * Send typing indication outside dialog.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003870 *
3871 * @param acc_id Account ID to be used to send the request.
3872 * @param to Remote URI.
3873 * @param is_typing If non-zero, it tells remote person that local person
3874 * is currently composing an IM.
3875 * @param msg_data Optional list of headers etc to be added to outgoing
3876 * request.
3877 *
3878 * @return PJ_SUCCESS on success, or the appropriate error code.
Benny Prijonob0808372006-03-02 21:18:58 +00003879 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +00003880PJ_DECL(pj_status_t) pjsua_im_typing(pjsua_acc_id acc_id,
3881 const pj_str_t *to,
3882 pj_bool_t is_typing,
3883 const pjsua_msg_data *msg_data);
Benny Prijonob0808372006-03-02 21:18:58 +00003884
3885
Benny Prijonof3195072006-02-14 21:15:30 +00003886
Benny Prijono312aff92006-06-17 04:08:30 +00003887/**
3888 * @}
Benny Prijono9fc735d2006-05-28 14:58:12 +00003889 */
3890
Benny Prijono312aff92006-06-17 04:08:30 +00003891
3892/*****************************************************************************
3893 * MEDIA API
3894 */
3895
3896
3897/**
Benny Prijonoe6ead542007-01-31 20:53:31 +00003898 * @defgroup PJSUA_LIB_MEDIA PJSUA-API Media Manipulation
Benny Prijono312aff92006-06-17 04:08:30 +00003899 * @ingroup PJSUA_LIB
3900 * @brief Media manipulation.
3901 * @{
3902 *
3903 * PJSUA has rather powerful media features, which are built around the
Benny Prijonoe6ead542007-01-31 20:53:31 +00003904 * PJMEDIA conference bridge. Basically, all media "ports" (such as calls, WAV
3905 * players, WAV playlist, file recorders, sound device, tone generators, etc)
Benny Prijono312aff92006-06-17 04:08:30 +00003906 * are terminated in the conference bridge, and application can manipulate
Benny Prijonoe6ead542007-01-31 20:53:31 +00003907 * the interconnection between these terminations freely.
3908 *
3909 * The conference bridge provides powerful switching and mixing functionality
3910 * for application. With the conference bridge, each conference slot (e.g.
3911 * a call) can transmit to multiple destinations, and one destination can
3912 * receive from multiple sources. If more than one media terminations are
3913 * terminated in the same slot, the conference bridge will mix the signal
3914 * automatically.
Benny Prijono312aff92006-06-17 04:08:30 +00003915 *
3916 * Application connects one media termination/slot to another by calling
3917 * #pjsua_conf_connect() function. This will establish <b>unidirectional</b>
Benny Prijonoe6ead542007-01-31 20:53:31 +00003918 * media flow from the source termination to the sink termination. To
3919 * establish bidirectional media flow, application wound need to make another
3920 * call to #pjsua_conf_connect(), this time inverting the source and
3921 * destination slots in the parameter.
3922 *
3923 * For example, to stream a WAV file to remote call, application may use
Benny Prijono312aff92006-06-17 04:08:30 +00003924 * the following steps:
3925 *
3926 \code
3927
3928 pj_status_t stream_to_call( pjsua_call_id call_id )
3929 {
3930 pjsua_player_id player_id;
3931
3932 status = pjsua_player_create("mysong.wav", 0, NULL, &player_id);
3933 if (status != PJ_SUCCESS)
3934 return status;
3935
3936 status = pjsua_conf_connect( pjsua_player_get_conf_port(),
3937 pjsua_call_get_conf_port() );
3938 }
3939 \endcode
3940 *
3941 *
3942 * Other features of PJSUA media:
3943 * - efficient N to M interconnections between media terminations.
3944 * - media termination can be connected to itself to create loopback
3945 * media.
3946 * - the media termination may have different clock rates, and resampling
3947 * will be done automatically by conference bridge.
3948 * - media terminations may also have different frame time; the
3949 * conference bridge will perform the necessary bufferring to adjust
3950 * the difference between terminations.
3951 * - interconnections are removed automatically when media termination
3952 * is removed from the bridge.
3953 * - sound device may be changed even when there are active media
3954 * interconnections.
3955 * - correctly report call's media quality (in #pjsua_call_dump()) from
3956 * RTCP packet exchange.
3957 */
3958
3959/**
Benny Prijono37c710b2008-01-10 12:09:26 +00003960 * Max ports in the conference bridge. This setting is the default value
3961 * for pjsua_media_config.max_media_ports.
Benny Prijono312aff92006-06-17 04:08:30 +00003962 */
3963#ifndef PJSUA_MAX_CONF_PORTS
Benny Prijono12a669c2006-11-23 07:32:13 +00003964# define PJSUA_MAX_CONF_PORTS 254
Benny Prijono312aff92006-06-17 04:08:30 +00003965#endif
3966
Benny Prijonob5388cf2007-01-04 22:45:08 +00003967/**
Benny Prijono37c710b2008-01-10 12:09:26 +00003968 * The default clock rate to be used by the conference bridge. This setting
3969 * is the default value for pjsua_media_config.clock_rate.
Benny Prijonob5388cf2007-01-04 22:45:08 +00003970 */
Benny Prijono12a669c2006-11-23 07:32:13 +00003971#ifndef PJSUA_DEFAULT_CLOCK_RATE
3972# define PJSUA_DEFAULT_CLOCK_RATE 16000
3973#endif
3974
Benny Prijonob5388cf2007-01-04 22:45:08 +00003975/**
Benny Prijono37c710b2008-01-10 12:09:26 +00003976 * Default frame length in the conference bridge. This setting
3977 * is the default value for pjsua_media_config.audio_frame_ptime.
3978 */
3979#ifndef PJSUA_DEFAULT_AUDIO_FRAME_PTIME
Nanang Izzuddinaf974842008-05-08 09:51:16 +00003980# define PJSUA_DEFAULT_AUDIO_FRAME_PTIME 20
Benny Prijono37c710b2008-01-10 12:09:26 +00003981#endif
3982
3983
3984/**
3985 * Default codec quality settings. This setting is the default value
3986 * for pjsua_media_config.quality.
Benny Prijonob5388cf2007-01-04 22:45:08 +00003987 */
Benny Prijono12a669c2006-11-23 07:32:13 +00003988#ifndef PJSUA_DEFAULT_CODEC_QUALITY
Nanang Izzuddin9dbad152008-06-10 18:56:10 +00003989# define PJSUA_DEFAULT_CODEC_QUALITY 8
Benny Prijono12a669c2006-11-23 07:32:13 +00003990#endif
3991
Benny Prijonob5388cf2007-01-04 22:45:08 +00003992/**
Benny Prijono37c710b2008-01-10 12:09:26 +00003993 * Default iLBC mode. This setting is the default value for
3994 * pjsua_media_config.ilbc_mode.
Benny Prijonob5388cf2007-01-04 22:45:08 +00003995 */
Benny Prijono12a669c2006-11-23 07:32:13 +00003996#ifndef PJSUA_DEFAULT_ILBC_MODE
Benny Prijono37c710b2008-01-10 12:09:26 +00003997# define PJSUA_DEFAULT_ILBC_MODE 30
Benny Prijono12a669c2006-11-23 07:32:13 +00003998#endif
3999
Benny Prijonob5388cf2007-01-04 22:45:08 +00004000/**
Benny Prijono37c710b2008-01-10 12:09:26 +00004001 * The default echo canceller tail length. This setting
4002 * is the default value for pjsua_media_config.ec_tail_len.
Benny Prijonob5388cf2007-01-04 22:45:08 +00004003 */
Benny Prijono12a669c2006-11-23 07:32:13 +00004004#ifndef PJSUA_DEFAULT_EC_TAIL_LEN
Benny Prijono427439c2007-10-21 09:41:24 +00004005# define PJSUA_DEFAULT_EC_TAIL_LEN 200
Benny Prijono12a669c2006-11-23 07:32:13 +00004006#endif
Benny Prijono312aff92006-06-17 04:08:30 +00004007
4008
4009/**
Benny Prijonocba59d92007-02-16 09:22:56 +00004010 * The maximum file player.
4011 */
4012#ifndef PJSUA_MAX_PLAYERS
4013# define PJSUA_MAX_PLAYERS 32
4014#endif
4015
4016
4017/**
4018 * The maximum file player.
4019 */
4020#ifndef PJSUA_MAX_RECORDERS
4021# define PJSUA_MAX_RECORDERS 32
4022#endif
4023
4024
4025/**
Benny Prijonob5388cf2007-01-04 22:45:08 +00004026 * This structure describes media configuration, which will be specified
4027 * when calling #pjsua_init(). Application MUST initialize this structure
4028 * by calling #pjsua_media_config_default().
Benny Prijono312aff92006-06-17 04:08:30 +00004029 */
4030struct pjsua_media_config
4031{
4032 /**
4033 * Clock rate to be applied to the conference bridge.
Benny Prijonob5388cf2007-01-04 22:45:08 +00004034 * If value is zero, default clock rate will be used
4035 * (PJSUA_DEFAULT_CLOCK_RATE, which by default is 16KHz).
Benny Prijono312aff92006-06-17 04:08:30 +00004036 */
4037 unsigned clock_rate;
4038
4039 /**
Benny Prijonof3758ee2008-02-26 15:32:16 +00004040 * Clock rate to be applied when opening the sound device.
4041 * If value is zero, conference bridge clock rate will be used.
4042 */
4043 unsigned snd_clock_rate;
4044
4045 /**
Benny Prijono7d60d052008-03-29 12:24:20 +00004046 * Channel count be applied when opening the sound device and
4047 * conference bridge.
4048 */
4049 unsigned channel_count;
4050
4051 /**
Benny Prijonocf0b4b22007-10-06 17:31:09 +00004052 * Specify audio frame ptime. The value here will affect the
4053 * samples per frame of both the sound device and the conference
4054 * bridge. Specifying lower ptime will normally reduce the
4055 * latency.
4056 *
Benny Prijono37c710b2008-01-10 12:09:26 +00004057 * Default value: PJSUA_DEFAULT_AUDIO_FRAME_PTIME
Benny Prijonocf0b4b22007-10-06 17:31:09 +00004058 */
4059 unsigned audio_frame_ptime;
4060
4061 /**
Benny Prijono312aff92006-06-17 04:08:30 +00004062 * Specify maximum number of media ports to be created in the
4063 * conference bridge. Since all media terminate in the bridge
4064 * (calls, file player, file recorder, etc), the value must be
4065 * large enough to support all of them. However, the larger
4066 * the value, the more computations are performed.
Benny Prijono37c710b2008-01-10 12:09:26 +00004067 *
4068 * Default value: PJSUA_MAX_CONF_PORTS
Benny Prijono312aff92006-06-17 04:08:30 +00004069 */
4070 unsigned max_media_ports;
4071
4072 /**
4073 * Specify whether the media manager should manage its own
4074 * ioqueue for the RTP/RTCP sockets. If yes, ioqueue will be created
4075 * and at least one worker thread will be created too. If no,
4076 * the RTP/RTCP sockets will share the same ioqueue as SIP sockets,
4077 * and no worker thread is needed.
4078 *
4079 * Normally application would say yes here, unless it wants to
4080 * run everything from a single thread.
4081 */
4082 pj_bool_t has_ioqueue;
4083
4084 /**
4085 * Specify the number of worker threads to handle incoming RTP
4086 * packets. A value of one is recommended for most applications.
4087 */
4088 unsigned thread_cnt;
4089
Benny Prijono0498d902006-06-19 14:49:14 +00004090 /**
4091 * Media quality, 0-10, according to this table:
Benny Prijono7ca96da2006-08-07 12:11:40 +00004092 * 5-10: resampling use large filter,
4093 * 3-4: resampling use small filter,
Benny Prijono0498d902006-06-19 14:49:14 +00004094 * 1-2: resampling use linear.
4095 * The media quality also sets speex codec quality/complexity to the
4096 * number.
4097 *
Benny Prijono70972992006-08-05 11:13:58 +00004098 * Default: 5 (PJSUA_DEFAULT_CODEC_QUALITY).
Benny Prijono0498d902006-06-19 14:49:14 +00004099 */
4100 unsigned quality;
Benny Prijono0a12f002006-07-26 17:05:39 +00004101
4102 /**
Benny Prijonocf0b4b22007-10-06 17:31:09 +00004103 * Specify default codec ptime.
Benny Prijono0a12f002006-07-26 17:05:39 +00004104 *
4105 * Default: 0 (codec specific)
4106 */
4107 unsigned ptime;
4108
4109 /**
4110 * Disable VAD?
4111 *
4112 * Default: 0 (no (meaning VAD is enabled))
4113 */
4114 pj_bool_t no_vad;
Benny Prijono00cae612006-07-31 15:19:36 +00004115
4116 /**
4117 * iLBC mode (20 or 30).
4118 *
Benny Prijono37c710b2008-01-10 12:09:26 +00004119 * Default: 30 (PJSUA_DEFAULT_ILBC_MODE)
Benny Prijono00cae612006-07-31 15:19:36 +00004120 */
4121 unsigned ilbc_mode;
4122
4123 /**
4124 * Percentage of RTP packet to drop in TX direction
4125 * (to simulate packet lost).
4126 *
4127 * Default: 0
4128 */
4129 unsigned tx_drop_pct;
4130
4131 /**
4132 * Percentage of RTP packet to drop in RX direction
4133 * (to simulate packet lost).
4134 *
4135 * Default: 0
4136 */
4137 unsigned rx_drop_pct;
4138
Benny Prijonoc8e24a12006-08-02 18:22:22 +00004139 /**
Benny Prijono5da50432006-08-07 10:24:52 +00004140 * Echo canceller options (see #pjmedia_echo_create())
4141 *
4142 * Default: 0.
4143 */
4144 unsigned ec_options;
4145
4146 /**
Benny Prijonoc8e24a12006-08-02 18:22:22 +00004147 * Echo canceller tail length, in miliseconds.
4148 *
Benny Prijono669643c2006-09-20 20:02:18 +00004149 * Default: PJSUA_DEFAULT_EC_TAIL_LEN
Benny Prijonoc8e24a12006-08-02 18:22:22 +00004150 */
4151 unsigned ec_tail_len;
Benny Prijono1d0ca0c2006-11-21 09:06:47 +00004152
Benny Prijono10454dc2009-02-21 14:21:59 +00004153 /**
4154 * Audio capture buffer length, in milliseconds.
4155 *
4156 * Default: PJMEDIA_SND_DEFAULT_REC_LATENCY
4157 */
4158 unsigned snd_rec_latency;
4159
4160 /**
4161 * Audio playback buffer length, in milliseconds.
4162 *
4163 * Default: PJMEDIA_SND_DEFAULT_PLAY_LATENCY
4164 */
4165 unsigned snd_play_latency;
4166
Benny Prijono1d0ca0c2006-11-21 09:06:47 +00004167 /**
4168 * Jitter buffer initial prefetch delay in msec. The value must be
4169 * between jb_min_pre and jb_max_pre below.
4170 *
4171 * Default: -1 (to use default stream settings, currently 150 msec)
4172 */
4173 int jb_init;
4174
4175 /**
4176 * Jitter buffer minimum prefetch delay in msec.
4177 *
4178 * Default: -1 (to use default stream settings, currently 60 msec)
4179 */
4180 int jb_min_pre;
4181
4182 /**
4183 * Jitter buffer maximum prefetch delay in msec.
4184 *
4185 * Default: -1 (to use default stream settings, currently 240 msec)
4186 */
4187 int jb_max_pre;
4188
4189 /**
4190 * Set maximum delay that can be accomodated by the jitter buffer msec.
4191 *
4192 * Default: -1 (to use default stream settings, currently 360 msec)
4193 */
4194 int jb_max;
4195
Benny Prijonoc97608e2007-03-23 16:34:20 +00004196 /**
4197 * Enable ICE
4198 */
4199 pj_bool_t enable_ice;
4200
4201 /**
Benny Prijono329d6382009-05-29 13:04:03 +00004202 * Set the maximum number of host candidates.
4203 *
4204 * Default: -1 (maximum not set)
Benny Prijonoc97608e2007-03-23 16:34:20 +00004205 */
Benny Prijono329d6382009-05-29 13:04:03 +00004206 int ice_max_host_cands;
4207
4208 /**
4209 * ICE session options.
4210 */
4211 pj_ice_sess_options ice_opt;
Benny Prijonof76e1392008-06-06 14:51:48 +00004212
4213 /**
Benny Prijono551af422008-08-07 09:55:52 +00004214 * Disable RTCP component.
4215 *
4216 * Default: no
4217 */
4218 pj_bool_t ice_no_rtcp;
4219
4220 /**
Benny Prijonof76e1392008-06-06 14:51:48 +00004221 * Enable TURN relay candidate in ICE.
4222 */
4223 pj_bool_t enable_turn;
4224
4225 /**
4226 * Specify TURN domain name or host name, in in "DOMAIN:PORT" or
4227 * "HOST:PORT" format.
4228 */
4229 pj_str_t turn_server;
4230
4231 /**
4232 * Specify the connection type to be used to the TURN server. Valid
4233 * values are PJ_TURN_TP_UDP or PJ_TURN_TP_TCP.
4234 *
4235 * Default: PJ_TURN_TP_UDP
4236 */
4237 pj_turn_tp_type turn_conn_type;
4238
4239 /**
4240 * Specify the credential to authenticate with the TURN server.
4241 */
4242 pj_stun_auth_cred turn_auth_cred;
Nanang Izzuddin68559c32008-06-13 17:01:46 +00004243
4244 /**
4245 * Specify idle time of sound device before it is automatically closed,
Benny Prijonof798e502009-03-09 13:08:16 +00004246 * in seconds. Use value -1 to disable the auto-close feature of sound
4247 * device
Nanang Izzuddin68559c32008-06-13 17:01:46 +00004248 *
Benny Prijonof798e502009-03-09 13:08:16 +00004249 * Default : 1
Nanang Izzuddin68559c32008-06-13 17:01:46 +00004250 */
4251 int snd_auto_close_time;
Benny Prijono312aff92006-06-17 04:08:30 +00004252};
4253
4254
4255/**
4256 * Use this function to initialize media config.
4257 *
4258 * @param cfg The media config to be initialized.
4259 */
Benny Prijono1f61a8f2007-08-16 10:11:44 +00004260PJ_DECL(void) pjsua_media_config_default(pjsua_media_config *cfg);
Benny Prijono312aff92006-06-17 04:08:30 +00004261
4262
4263/**
Benny Prijonob5388cf2007-01-04 22:45:08 +00004264 * This structure describes codec information, which can be retrieved by
4265 * calling #pjsua_enum_codecs().
Benny Prijono312aff92006-06-17 04:08:30 +00004266 */
4267typedef struct pjsua_codec_info
4268{
4269 /**
4270 * Codec unique identification.
4271 */
4272 pj_str_t codec_id;
4273
4274 /**
4275 * Codec priority (integer 0-255).
4276 */
4277 pj_uint8_t priority;
4278
4279 /**
4280 * Internal buffer.
4281 */
4282 char buf_[32];
4283
4284} pjsua_codec_info;
4285
4286
4287/**
Benny Prijonob5388cf2007-01-04 22:45:08 +00004288 * This structure descibes information about a particular media port that
4289 * has been registered into the conference bridge. Application can query
4290 * this info by calling #pjsua_conf_get_port_info().
Benny Prijono312aff92006-06-17 04:08:30 +00004291 */
4292typedef struct pjsua_conf_port_info
4293{
4294 /** Conference port number. */
4295 pjsua_conf_port_id slot_id;
4296
4297 /** Port name. */
4298 pj_str_t name;
4299
4300 /** Clock rate. */
4301 unsigned clock_rate;
4302
4303 /** Number of channels. */
4304 unsigned channel_count;
4305
4306 /** Samples per frame */
4307 unsigned samples_per_frame;
4308
4309 /** Bits per sample */
4310 unsigned bits_per_sample;
4311
4312 /** Number of listeners in the array. */
4313 unsigned listener_cnt;
4314
4315 /** Array of listeners (in other words, ports where this port is
4316 * transmitting to.
4317 */
4318 pjsua_conf_port_id listeners[PJSUA_MAX_CONF_PORTS];
4319
4320} pjsua_conf_port_info;
4321
4322
4323/**
4324 * This structure holds information about custom media transport to
4325 * be registered to pjsua.
4326 */
4327typedef struct pjsua_media_transport
4328{
4329 /**
4330 * Media socket information containing the address information
4331 * of the RTP and RTCP socket.
4332 */
4333 pjmedia_sock_info skinfo;
4334
4335 /**
4336 * The media transport instance.
4337 */
4338 pjmedia_transport *transport;
4339
4340} pjsua_media_transport;
4341
4342
4343
4344
Benny Prijono9fc735d2006-05-28 14:58:12 +00004345/**
4346 * Get maxinum number of conference ports.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004347 *
4348 * @return Maximum number of ports in the conference bridge.
Benny Prijono9fc735d2006-05-28 14:58:12 +00004349 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004350PJ_DECL(unsigned) pjsua_conf_get_max_ports(void);
Benny Prijono9fc735d2006-05-28 14:58:12 +00004351
4352
4353/**
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004354 * Get current number of active ports in the bridge.
4355 *
4356 * @return The number.
Benny Prijono9fc735d2006-05-28 14:58:12 +00004357 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004358PJ_DECL(unsigned) pjsua_conf_get_active_ports(void);
4359
4360
4361/**
4362 * Enumerate all conference ports.
4363 *
4364 * @param id Array of conference port ID to be initialized.
4365 * @param count On input, specifies max elements in the array.
4366 * On return, it contains actual number of elements
4367 * that have been initialized.
4368 *
4369 * @return PJ_SUCCESS on success, or the appropriate error code.
4370 */
4371PJ_DECL(pj_status_t) pjsua_enum_conf_ports(pjsua_conf_port_id id[],
4372 unsigned *count);
Benny Prijono8b1889b2006-06-06 18:40:40 +00004373
4374
4375/**
4376 * Get information about the specified conference port
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004377 *
Benny Prijonoe6ead542007-01-31 20:53:31 +00004378 * @param port_id Port identification.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004379 * @param info Pointer to store the port info.
4380 *
4381 * @return PJ_SUCCESS on success, or the appropriate error code.
Benny Prijono8b1889b2006-06-06 18:40:40 +00004382 */
Benny Prijonoe6ead542007-01-31 20:53:31 +00004383PJ_DECL(pj_status_t) pjsua_conf_get_port_info( pjsua_conf_port_id port_id,
Benny Prijono8b1889b2006-06-06 18:40:40 +00004384 pjsua_conf_port_info *info);
Benny Prijono9fc735d2006-05-28 14:58:12 +00004385
4386
4387/**
Benny Prijonoe909eac2006-07-27 22:04:56 +00004388 * Add arbitrary media port to PJSUA's conference bridge. Application
4389 * can use this function to add the media port that it creates. For
4390 * media ports that are created by PJSUA-LIB (such as calls, file player,
4391 * or file recorder), PJSUA-LIB will automatically add the port to
4392 * the bridge.
4393 *
4394 * @param pool Pool to use.
4395 * @param port Media port to be added to the bridge.
4396 * @param p_id Optional pointer to receive the conference
4397 * slot id.
4398 *
4399 * @return PJ_SUCCESS on success, or the appropriate error code.
4400 */
4401PJ_DECL(pj_status_t) pjsua_conf_add_port(pj_pool_t *pool,
4402 pjmedia_port *port,
4403 pjsua_conf_port_id *p_id);
4404
4405
4406/**
4407 * Remove arbitrary slot from the conference bridge. Application should only
Benny Prijonob5388cf2007-01-04 22:45:08 +00004408 * call this function if it registered the port manually with previous call
4409 * to #pjsua_conf_add_port().
Benny Prijonoe909eac2006-07-27 22:04:56 +00004410 *
Benny Prijonoe6ead542007-01-31 20:53:31 +00004411 * @param port_id The slot id of the port to be removed.
Benny Prijonoe909eac2006-07-27 22:04:56 +00004412 *
4413 * @return PJ_SUCCESS on success, or the appropriate error code.
4414 */
Benny Prijonoe6ead542007-01-31 20:53:31 +00004415PJ_DECL(pj_status_t) pjsua_conf_remove_port(pjsua_conf_port_id port_id);
Benny Prijonoe909eac2006-07-27 22:04:56 +00004416
4417
4418/**
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004419 * Establish unidirectional media flow from souce to sink. One source
4420 * may transmit to multiple destinations/sink. And if multiple
4421 * sources are transmitting to the same sink, the media will be mixed
4422 * together. Source and sink may refer to the same ID, effectively
4423 * looping the media.
4424 *
4425 * If bidirectional media flow is desired, application needs to call
4426 * this function twice, with the second one having the arguments
4427 * reversed.
4428 *
4429 * @param source Port ID of the source media/transmitter.
4430 * @param sink Port ID of the destination media/received.
4431 *
4432 * @return PJ_SUCCESS on success, or the appropriate error code.
Benny Prijono9fc735d2006-05-28 14:58:12 +00004433 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004434PJ_DECL(pj_status_t) pjsua_conf_connect(pjsua_conf_port_id source,
4435 pjsua_conf_port_id sink);
Benny Prijono9fc735d2006-05-28 14:58:12 +00004436
4437
4438/**
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004439 * Disconnect media flow from the source to destination port.
4440 *
4441 * @param source Port ID of the source media/transmitter.
4442 * @param sink Port ID of the destination media/received.
4443 *
4444 * @return PJ_SUCCESS on success, or the appropriate error code.
Benny Prijono9fc735d2006-05-28 14:58:12 +00004445 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004446PJ_DECL(pj_status_t) pjsua_conf_disconnect(pjsua_conf_port_id source,
4447 pjsua_conf_port_id sink);
Benny Prijono9fc735d2006-05-28 14:58:12 +00004448
4449
Benny Prijono6dd967c2006-12-26 02:27:14 +00004450/**
4451 * Adjust the signal level to be transmitted from the bridge to the
4452 * specified port by making it louder or quieter.
4453 *
4454 * @param slot The conference bridge slot number.
4455 * @param level Signal level adjustment. Value 1.0 means no level
4456 * adjustment, while value 0 means to mute the port.
4457 *
4458 * @return PJ_SUCCESS on success, or the appropriate error code.
4459 */
4460PJ_DECL(pj_status_t) pjsua_conf_adjust_tx_level(pjsua_conf_port_id slot,
4461 float level);
4462
4463/**
4464 * Adjust the signal level to be received from the specified port (to
4465 * the bridge) by making it louder or quieter.
4466 *
4467 * @param slot The conference bridge slot number.
4468 * @param level Signal level adjustment. Value 1.0 means no level
4469 * adjustment, while value 0 means to mute the port.
4470 *
4471 * @return PJ_SUCCESS on success, or the appropriate error code.
4472 */
4473PJ_DECL(pj_status_t) pjsua_conf_adjust_rx_level(pjsua_conf_port_id slot,
4474 float level);
4475
4476/**
4477 * Get last signal level transmitted to or received from the specified port.
4478 * The signal level is an integer value in zero to 255, with zero indicates
4479 * no signal, and 255 indicates the loudest signal level.
4480 *
4481 * @param slot The conference bridge slot number.
4482 * @param tx_level Optional argument to receive the level of signal
4483 * transmitted to the specified port (i.e. the direction
4484 * is from the bridge to the port).
4485 * @param rx_level Optional argument to receive the level of signal
4486 * received from the port (i.e. the direction is from the
4487 * port to the bridge).
4488 *
4489 * @return PJ_SUCCESS on success.
4490 */
4491PJ_DECL(pj_status_t) pjsua_conf_get_signal_level(pjsua_conf_port_id slot,
4492 unsigned *tx_level,
4493 unsigned *rx_level);
4494
Benny Prijono6dd967c2006-12-26 02:27:14 +00004495
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004496/*****************************************************************************
Benny Prijonoa66c3312007-01-21 23:12:40 +00004497 * File player and playlist.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004498 */
4499
Benny Prijono9fc735d2006-05-28 14:58:12 +00004500/**
Benny Prijonoa66c3312007-01-21 23:12:40 +00004501 * Create a file player, and automatically add this player to
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004502 * the conference bridge.
4503 *
4504 * @param filename The filename to be played. Currently only
Benny Prijono312aff92006-06-17 04:08:30 +00004505 * WAV files are supported, and the WAV file MUST be
4506 * formatted as 16bit PCM mono/single channel (any
4507 * clock rate is supported).
Benny Prijono58add7c2008-01-18 13:24:07 +00004508 * @param options Optional option flag. Application may specify
4509 * PJMEDIA_FILE_NO_LOOP to prevent playback loop.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004510 * @param p_id Pointer to receive player ID.
4511 *
4512 * @return PJ_SUCCESS on success, or the appropriate error code.
Benny Prijono9fc735d2006-05-28 14:58:12 +00004513 */
4514PJ_DECL(pj_status_t) pjsua_player_create(const pj_str_t *filename,
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004515 unsigned options,
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004516 pjsua_player_id *p_id);
Benny Prijono9fc735d2006-05-28 14:58:12 +00004517
4518
4519/**
Benny Prijonoa66c3312007-01-21 23:12:40 +00004520 * Create a file playlist media port, and automatically add the port
4521 * to the conference bridge.
4522 *
4523 * @param file_names Array of file names to be added to the play list.
4524 * Note that the files must have the same clock rate,
4525 * number of channels, and number of bits per sample.
4526 * @param file_count Number of files in the array.
4527 * @param label Optional label to be set for the media port.
4528 * @param options Optional option flag. Application may specify
4529 * PJMEDIA_FILE_NO_LOOP to prevent looping.
4530 * @param p_id Optional pointer to receive player ID.
4531 *
4532 * @return PJ_SUCCESS on success, or the appropriate error code.
4533 */
4534PJ_DECL(pj_status_t) pjsua_playlist_create(const pj_str_t file_names[],
4535 unsigned file_count,
4536 const pj_str_t *label,
4537 unsigned options,
4538 pjsua_player_id *p_id);
4539
4540/**
4541 * Get conference port ID associated with player or playlist.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004542 *
4543 * @param id The file player ID.
4544 *
4545 * @return Conference port ID associated with this player.
Benny Prijono9fc735d2006-05-28 14:58:12 +00004546 */
Benny Prijono8b1889b2006-06-06 18:40:40 +00004547PJ_DECL(pjsua_conf_port_id) pjsua_player_get_conf_port(pjsua_player_id id);
Benny Prijono9fc735d2006-05-28 14:58:12 +00004548
4549
4550/**
Benny Prijonoa66c3312007-01-21 23:12:40 +00004551 * Get the media port for the player or playlist.
Benny Prijono469b1522006-12-26 03:05:17 +00004552 *
4553 * @param id The player ID.
4554 * @param p_port The media port associated with the player.
4555 *
4556 * @return PJ_SUCCESS on success.
4557 */
Benny Prijono58add7c2008-01-18 13:24:07 +00004558PJ_DECL(pj_status_t) pjsua_player_get_port(pjsua_player_id id,
Benny Prijono469b1522006-12-26 03:05:17 +00004559 pjmedia_port **p_port);
4560
4561/**
Benny Prijonoa66c3312007-01-21 23:12:40 +00004562 * Set playback position. This operation is not valid for playlist.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004563 *
4564 * @param id The file player ID.
4565 * @param samples The playback position, in samples. Application can
4566 * specify zero to re-start the playback.
4567 *
4568 * @return PJ_SUCCESS on success, or the appropriate error code.
Benny Prijono9fc735d2006-05-28 14:58:12 +00004569 */
4570PJ_DECL(pj_status_t) pjsua_player_set_pos(pjsua_player_id id,
4571 pj_uint32_t samples);
4572
4573
4574/**
Benny Prijonoa66c3312007-01-21 23:12:40 +00004575 * Close the file of playlist, remove the player from the bridge, and free
4576 * resources associated with the file player or playlist.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004577 *
4578 * @param id The file player ID.
4579 *
4580 * @return PJ_SUCCESS on success, or the appropriate error code.
Benny Prijono9fc735d2006-05-28 14:58:12 +00004581 */
4582PJ_DECL(pj_status_t) pjsua_player_destroy(pjsua_player_id id);
4583
4584
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004585/*****************************************************************************
4586 * File recorder.
4587 */
Benny Prijono9fc735d2006-05-28 14:58:12 +00004588
4589/**
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004590 * Create a file recorder, and automatically connect this recorder to
Benny Prijonoc95a0f02007-04-09 07:06:08 +00004591 * the conference bridge. The recorder currently supports recording WAV file.
4592 * The type of the recorder to use is determined by the extension of the file
4593 * (e.g. ".wav").
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004594 *
Benny Prijonob3cdb2b2006-10-19 15:49:47 +00004595 * @param filename Output file name. The function will determine the
4596 * default format to be used based on the file extension.
Benny Prijonoc95a0f02007-04-09 07:06:08 +00004597 * Currently ".wav" is supported on all platforms.
Benny Prijono8f310522006-10-20 11:08:49 +00004598 * @param enc_type Optionally specify the type of encoder to be used to
4599 * compress the media, if the file can support different
4600 * encodings. This value must be zero for now.
4601 * @param enc_param Optionally specify codec specific parameter to be
Benny Prijonoc95a0f02007-04-09 07:06:08 +00004602 * passed to the file writer.
Benny Prijono8f310522006-10-20 11:08:49 +00004603 * For .WAV recorder, this value must be NULL.
4604 * @param max_size Maximum file size. Specify zero or -1 to remove size
4605 * limitation. This value must be zero or -1 for now.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004606 * @param options Optional options.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004607 * @param p_id Pointer to receive the recorder instance.
4608 *
4609 * @return PJ_SUCCESS on success, or the appropriate error code.
Benny Prijono9fc735d2006-05-28 14:58:12 +00004610 */
4611PJ_DECL(pj_status_t) pjsua_recorder_create(const pj_str_t *filename,
Benny Prijono8f310522006-10-20 11:08:49 +00004612 unsigned enc_type,
4613 void *enc_param,
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004614 pj_ssize_t max_size,
4615 unsigned options,
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004616 pjsua_recorder_id *p_id);
Benny Prijono9fc735d2006-05-28 14:58:12 +00004617
4618
4619/**
4620 * Get conference port associated with recorder.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004621 *
4622 * @param id The recorder ID.
4623 *
4624 * @return Conference port ID associated with this recorder.
Benny Prijono9fc735d2006-05-28 14:58:12 +00004625 */
Benny Prijono8b1889b2006-06-06 18:40:40 +00004626PJ_DECL(pjsua_conf_port_id) pjsua_recorder_get_conf_port(pjsua_recorder_id id);
Benny Prijono9fc735d2006-05-28 14:58:12 +00004627
4628
4629/**
Benny Prijono469b1522006-12-26 03:05:17 +00004630 * Get the media port for the recorder.
4631 *
4632 * @param id The recorder ID.
4633 * @param p_port The media port associated with the recorder.
4634 *
4635 * @return PJ_SUCCESS on success.
4636 */
4637PJ_DECL(pj_status_t) pjsua_recorder_get_port(pjsua_recorder_id id,
4638 pjmedia_port **p_port);
4639
4640
4641/**
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004642 * Destroy recorder (this will complete recording).
4643 *
4644 * @param id The recorder ID.
4645 *
4646 * @return PJ_SUCCESS on success, or the appropriate error code.
Benny Prijono9fc735d2006-05-28 14:58:12 +00004647 */
4648PJ_DECL(pj_status_t) pjsua_recorder_destroy(pjsua_recorder_id id);
4649
4650
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004651/*****************************************************************************
4652 * Sound devices.
4653 */
4654
Benny Prijono9fc735d2006-05-28 14:58:12 +00004655/**
Benny Prijonof798e502009-03-09 13:08:16 +00004656 * Enum all audio devices installed in the system.
4657 *
4658 * @param info Array of info to be initialized.
4659 * @param count On input, specifies max elements in the array.
4660 * On return, it contains actual number of elements
4661 * that have been initialized.
4662 *
4663 * @return PJ_SUCCESS on success, or the appropriate error code.
4664 */
4665PJ_DECL(pj_status_t) pjsua_enum_aud_devs(pjmedia_aud_dev_info info[],
4666 unsigned *count);
4667
4668/**
4669 * Enum all sound devices installed in the system (old API).
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004670 *
4671 * @param info Array of info to be initialized.
4672 * @param count On input, specifies max elements in the array.
4673 * On return, it contains actual number of elements
4674 * that have been initialized.
4675 *
4676 * @return PJ_SUCCESS on success, or the appropriate error code.
Benny Prijono9fc735d2006-05-28 14:58:12 +00004677 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004678PJ_DECL(pj_status_t) pjsua_enum_snd_devs(pjmedia_snd_dev_info info[],
4679 unsigned *count);
Benny Prijonoa3cbb1c2006-08-25 12:41:05 +00004680
4681/**
4682 * Get currently active sound devices. If sound devices has not been created
4683 * (for example when pjsua_start() is not called), it is possible that
4684 * the function returns PJ_SUCCESS with -1 as device IDs.
4685 *
4686 * @param capture_dev On return it will be filled with device ID of the
4687 * capture device.
4688 * @param playback_dev On return it will be filled with device ID of the
4689 * device ID of the playback device.
4690 *
4691 * @return PJ_SUCCESS on success, or the appropriate error code.
4692 */
4693PJ_DECL(pj_status_t) pjsua_get_snd_dev(int *capture_dev,
4694 int *playback_dev);
4695
4696
Benny Prijono9fc735d2006-05-28 14:58:12 +00004697/**
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004698 * Select or change sound device. Application may call this function at
4699 * any time to replace current sound device.
4700 *
4701 * @param capture_dev Device ID of the capture device.
4702 * @param playback_dev Device ID of the playback device.
4703 *
4704 * @return PJ_SUCCESS on success, or the appropriate error code.
Benny Prijono9fc735d2006-05-28 14:58:12 +00004705 */
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004706PJ_DECL(pj_status_t) pjsua_set_snd_dev(int capture_dev,
4707 int playback_dev);
4708
4709
4710/**
4711 * Set pjsua to use null sound device. The null sound device only provides
4712 * the timing needed by the conference bridge, and will not interract with
4713 * any hardware.
4714 *
4715 * @return PJ_SUCCESS on success, or the appropriate error code.
4716 */
4717PJ_DECL(pj_status_t) pjsua_set_null_snd_dev(void);
4718
4719
Benny Prijonoe909eac2006-07-27 22:04:56 +00004720/**
4721 * Disconnect the main conference bridge from any sound devices, and let
4722 * application connect the bridge to it's own sound device/master port.
4723 *
4724 * @return The port interface of the conference bridge,
4725 * so that application can connect this to it's own
4726 * sound device or master port.
4727 */
4728PJ_DECL(pjmedia_port*) pjsua_set_no_snd_dev(void);
4729
4730
Benny Prijonof20687a2006-08-04 18:27:19 +00004731/**
Benny Prijonoe506c8c2009-03-10 13:28:43 +00004732 * Change the echo cancellation settings.
Benny Prijonof798e502009-03-09 13:08:16 +00004733 *
4734 * The behavior of this function depends on whether the sound device is
4735 * currently active, and if it is, whether device or software AEC is
4736 * being used.
Benny Prijono10454dc2009-02-21 14:21:59 +00004737 *
4738 * If the sound device is currently active, and if the device supports AEC,
4739 * this function will forward the change request to the device and it will
4740 * be up to the device on whether support the request. If software AEC is
4741 * being used (the software EC will be used if the device does not support
4742 * AEC), this function will change the software EC settings. In all cases,
4743 * the setting will be saved for future opening of the sound device.
4744 *
4745 * If the sound device is not currently active, this will only change the
4746 * default AEC settings and the setting will be applied next time the
4747 * sound device is opened.
Benny Prijonof20687a2006-08-04 18:27:19 +00004748 *
4749 * @param tail_ms The tail length, in miliseconds. Set to zero to
4750 * disable AEC.
Benny Prijonoa7b376b2008-01-25 16:06:33 +00004751 * @param options Options to be passed to pjmedia_echo_create().
Benny Prijono5da50432006-08-07 10:24:52 +00004752 * Normally the value should be zero.
Benny Prijonof20687a2006-08-04 18:27:19 +00004753 *
4754 * @return PJ_SUCCESS on success.
4755 */
Benny Prijono5da50432006-08-07 10:24:52 +00004756PJ_DECL(pj_status_t) pjsua_set_ec(unsigned tail_ms, unsigned options);
Benny Prijonof20687a2006-08-04 18:27:19 +00004757
4758
4759/**
Benny Prijonoe506c8c2009-03-10 13:28:43 +00004760 * Get current echo canceller tail length.
Benny Prijonof20687a2006-08-04 18:27:19 +00004761 *
4762 * @param p_tail_ms Pointer to receive the tail length, in miliseconds.
4763 * If AEC is disabled, the value will be zero.
4764 *
4765 * @return PJ_SUCCESS on success.
4766 */
Benny Prijono22dfe592006-08-06 12:07:13 +00004767PJ_DECL(pj_status_t) pjsua_get_ec_tail(unsigned *p_tail_ms);
Benny Prijonof20687a2006-08-04 18:27:19 +00004768
4769
Nanang Izzuddin0cb3b022009-02-27 17:37:35 +00004770/**
Benny Prijonof798e502009-03-09 13:08:16 +00004771 * Check whether the sound device is currently active. The sound device
4772 * may be inactive if the application has set the auto close feature to
4773 * non-zero (the snd_auto_close_time setting in #pjsua_media_config), or
4774 * if null sound device or no sound device has been configured via the
4775 * #pjsua_set_no_snd_dev() function.
Nanang Izzuddin0cb3b022009-02-27 17:37:35 +00004776 */
Benny Prijonof798e502009-03-09 13:08:16 +00004777PJ_DECL(pj_bool_t) pjsua_snd_is_active(void);
4778
4779
4780/**
4781 * Configure sound device setting to the sound device being used. If sound
4782 * device is currently active, the function will forward the setting to the
4783 * sound device instance to be applied immediately, if it supports it.
4784 *
4785 * The setting will be saved for future opening of the sound device, if the
4786 * "keep" argument is set to non-zero. If the sound device is currently
4787 * inactive, and the "keep" argument is false, this function will return
4788 * error.
4789 *
4790 * Note that in case the setting is kept for future use, it will be applied
4791 * to any devices, even when application has changed the sound device to be
4792 * used.
4793 *
Benny Prijonoe506c8c2009-03-10 13:28:43 +00004794 * Note also that the echo cancellation setting should be set with
4795 * #pjsua_set_ec() API instead.
4796 *
Benny Prijonof798e502009-03-09 13:08:16 +00004797 * See also #pjmedia_aud_stream_set_cap() for more information about setting
4798 * an audio device capability.
4799 *
4800 * @param cap The sound device setting to change.
4801 * @param pval Pointer to value. Please see #pjmedia_aud_dev_cap
4802 * documentation about the type of value to be
4803 * supplied for each setting.
4804 * @param keep Specify whether the setting is to be kept for future
4805 * use.
4806 *
4807 * @return PJ_SUCCESS on success or the appropriate error code.
4808 */
4809PJ_DECL(pj_status_t) pjsua_snd_set_setting(pjmedia_aud_dev_cap cap,
4810 const void *pval,
4811 pj_bool_t keep);
4812
4813/**
4814 * Retrieve a sound device setting. If sound device is currently active,
4815 * the function will forward the request to the sound device. If sound device
4816 * is currently inactive, and if application had previously set the setting
4817 * and mark the setting as kept, then that setting will be returned.
4818 * Otherwise, this function will return error.
4819 *
Benny Prijonoe506c8c2009-03-10 13:28:43 +00004820 * Note that echo cancellation settings should be retrieved with
4821 * #pjsua_get_ec_tail() API instead.
4822 *
Benny Prijonof798e502009-03-09 13:08:16 +00004823 * @param cap The sound device setting to retrieve.
4824 * @param pval Pointer to receive the value.
4825 * Please see #pjmedia_aud_dev_cap documentation about
4826 * the type of value to be supplied for each setting.
4827 *
4828 * @return PJ_SUCCESS on success or the appropriate error code.
4829 */
4830PJ_DECL(pj_status_t) pjsua_snd_get_setting(pjmedia_aud_dev_cap cap,
4831 void *pval);
Nanang Izzuddin0cb3b022009-02-27 17:37:35 +00004832
4833
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004834/*****************************************************************************
4835 * Codecs.
4836 */
4837
4838/**
4839 * Enum all supported codecs in the system.
4840 *
4841 * @param id Array of ID to be initialized.
4842 * @param count On input, specifies max elements in the array.
4843 * On return, it contains actual number of elements
4844 * that have been initialized.
4845 *
4846 * @return PJ_SUCCESS on success, or the appropriate error code.
4847 */
4848PJ_DECL(pj_status_t) pjsua_enum_codecs( pjsua_codec_info id[],
4849 unsigned *count );
4850
4851
4852/**
4853 * Change codec priority.
4854 *
Benny Prijonoe6ead542007-01-31 20:53:31 +00004855 * @param codec_id Codec ID, which is a string that uniquely identify
4856 * the codec (such as "speex/8000"). Please see pjsua
4857 * manual or pjmedia codec reference for details.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004858 * @param priority Codec priority, 0-255, where zero means to disable
4859 * the codec.
4860 *
4861 * @return PJ_SUCCESS on success, or the appropriate error code.
4862 */
Benny Prijonoe6ead542007-01-31 20:53:31 +00004863PJ_DECL(pj_status_t) pjsua_codec_set_priority( const pj_str_t *codec_id,
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004864 pj_uint8_t priority );
4865
4866
4867/**
4868 * Get codec parameters.
4869 *
Benny Prijonoe6ead542007-01-31 20:53:31 +00004870 * @param codec_id Codec ID.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004871 * @param param Structure to receive codec parameters.
4872 *
4873 * @return PJ_SUCCESS on success, or the appropriate error code.
4874 */
Benny Prijonoe6ead542007-01-31 20:53:31 +00004875PJ_DECL(pj_status_t) pjsua_codec_get_param( const pj_str_t *codec_id,
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004876 pjmedia_codec_param *param );
4877
4878
4879/**
4880 * Set codec parameters.
4881 *
Benny Prijonoe6ead542007-01-31 20:53:31 +00004882 * @param codec_id Codec ID.
Nanang Izzuddin06839e72010-01-27 11:48:31 +00004883 * @param param Codec parameter to set. Set to NULL to reset
4884 * codec parameter to library default settings.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004885 *
4886 * @return PJ_SUCCESS on success, or the appropriate error code.
4887 */
Benny Prijonoe6ead542007-01-31 20:53:31 +00004888PJ_DECL(pj_status_t) pjsua_codec_set_param( const pj_str_t *codec_id,
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004889 const pjmedia_codec_param *param);
4890
4891
4892
Benny Prijono9fc735d2006-05-28 14:58:12 +00004893
Benny Prijono312aff92006-06-17 04:08:30 +00004894/**
4895 * Create UDP media transports for all the calls. This function creates
4896 * one UDP media transport for each call.
Benny Prijonof3195072006-02-14 21:15:30 +00004897 *
Benny Prijono312aff92006-06-17 04:08:30 +00004898 * @param cfg Media transport configuration. The "port" field in the
4899 * configuration is used as the start port to bind the
4900 * sockets.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004901 *
4902 * @return PJ_SUCCESS on success, or the appropriate error code.
Benny Prijonof3195072006-02-14 21:15:30 +00004903 */
Benny Prijono312aff92006-06-17 04:08:30 +00004904PJ_DECL(pj_status_t)
4905pjsua_media_transports_create(const pjsua_transport_config *cfg);
Benny Prijonof3195072006-02-14 21:15:30 +00004906
Benny Prijonodc39fe82006-05-26 12:17:46 +00004907
4908/**
Benny Prijono312aff92006-06-17 04:08:30 +00004909 * Register custom media transports to be used by calls. There must
4910 * enough media transports for all calls.
Benny Prijonoeebe9af2006-06-13 22:57:13 +00004911 *
Benny Prijono312aff92006-06-17 04:08:30 +00004912 * @param tp The media transport array.
4913 * @param count Number of elements in the array. This number MUST
4914 * match the number of maximum calls configured when
4915 * pjsua is created.
4916 * @param auto_delete Flag to indicate whether the transports should be
4917 * destroyed when pjsua is shutdown.
4918 *
4919 * @return PJ_SUCCESS on success, or the appropriate error code.
Benny Prijonodc39fe82006-05-26 12:17:46 +00004920 */
Benny Prijono312aff92006-06-17 04:08:30 +00004921PJ_DECL(pj_status_t)
4922pjsua_media_transports_attach( pjsua_media_transport tp[],
4923 unsigned count,
4924 pj_bool_t auto_delete);
Benny Prijonodc39fe82006-05-26 12:17:46 +00004925
4926
Benny Prijono312aff92006-06-17 04:08:30 +00004927/**
4928 * @}
4929 */
4930
Benny Prijonof3195072006-02-14 21:15:30 +00004931
Benny Prijono268ca612006-02-07 12:34:11 +00004932
Benny Prijono312aff92006-06-17 04:08:30 +00004933/**
4934 * @}
4935 */
4936
Benny Prijonoe6ead542007-01-31 20:53:31 +00004937PJ_END_DECL
4938
Benny Prijono312aff92006-06-17 04:08:30 +00004939
Benny Prijono268ca612006-02-07 12:34:11 +00004940#endif /* __PJSUA_H__ */