⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pjsua.h

📁 基于sip协议的网络电话源码
💻 H
📖 第 1 页 / 共 5 页
字号:
/* $Id: pjsua.h 1122 2007-04-02 11:22:49Z bennylp $ *//*  * Copyright (C) 2003-2007 Benny Prijono <benny@prijono.org> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA  */#ifndef __PJSUA_H__#define __PJSUA_H__/** * @file pjsua.h * @brief PJSUA API. *//* Include all PJSIP core headers. */#include <pjsip.h>/* Include all PJMEDIA headers. */#include <pjmedia.h>/* Include all PJMEDIA-CODEC headers. */#include <pjmedia-codec.h>/* Include all PJSIP-UA headers */#include <pjsip_ua.h>/* Include all PJSIP-SIMPLE headers */#include <pjsip_simple.h>/* Include all PJLIB-UTIL headers. */#include <pjlib-util.h>/* Include all PJLIB headers. */#include <pjlib.h>PJ_BEGIN_DECL/** * @defgroup PJSUA_LIB PJSUA API - High Level Softphone API for C/C++ and Python * @ingroup PJSIP * @brief Very high level API for constructing SIP UA applications. * @{ * * @section pjsua_api_intro A SIP User Agent API for C/C++ and Python * * PJSUA API is very high level API, available for C/C++ and Python language, * for constructing SIP multimedia user agent * applications. It wraps together the signaling and media functionalities * into an easy to use call API, provides account management, buddy * management, presence, instant messaging, along with multimedia * features such as conferencing, file streaming, local playback, * voice recording, and so on. * * @subsection pjsua_for_c_cpp C/C++ Binding * Application must link with <b>pjsua-lib</b> to use this API. In addition, * this library depends on the following libraries: *  - <b>pjsip-ua</b>,  *  - <b>pjsip-simple</b>,  *  - <b>pjsip-core</b>,  *  - <b>pjmedia</b>, *  - <b>pjmedia-codec</b>,  *  - <b>pjlib-util</b>, and *  - <b>pjlib</b>,  * * so application must also link with these libraries as well. For more  * information, please refer to  * <A HREF="http://www.pjsip.org/using.htm">Getting Started with PJSIP</A> * page. * * @subsection pjsua_for_python Python Binding * * The Python binding for PJSUA-API is implemented by <b>py_pjsua</b> * module, in <tt>pjsip-apps/py_pjsua</tt> directory. This module is * built by building <tt>py_pjsua</tt> project in <tt>pjsip_apps</tt> * Visual Studio workspace, or by invoking the usual <tt>setup.py</tt> * Python installer script. * * The Python script then can import the PJSUA-API Python module by * using <b>import py_pjsua</b> construct as usual. * * * @section pjsua_samples * * Few samples are provided both in C and Python. *  - @ref page_pjsip_sample_simple_pjsuaua_c\n    Very simple SIP User Agent with registration, call, and media, using    PJSUA-API, all in under 200 lines of code.  - @ref page_pjsip_samples_pjsua\n    This is the reference implementation for PJSIP and PJMEDIA.    PJSUA is a console based application, designed to be simple enough    to be readble, but powerful enough to demonstrate all features    available in PJSIP and PJMEDIA.\n  - Python sample\n    For a real simple Python sample application, have a look at    <A HREF="http://www.pjsip.org/trac/browser/pjproject/trunk/pjsip-apps/src/py_pjsua/pjsua_app.py">    <tt>pjsip-apps/src/py_pjsua/pjsua_app.py</tt></A> file. * @section root_using_pjsua_lib Using PJSUA API * * Please refer to @ref PJSUA_LIB_BASE on how to create and initialize the API. * And then see the Modules on the bottom of this page for more information * about specific subject. */ /***************************************************************************** * BASE API *//** * @defgroup PJSUA_LIB_BASE PJSUA-API Basic API * @ingroup PJSUA_LIB * @brief Basic application creation/initialization, logging configuration, etc. * @{ * * The base PJSUA API controls PJSUA creation, initialization, and startup, and * also provides various auxiliary functions. * * @section using_pjsua_lib Using PJSUA Library * * @subsection creating_pjsua_lib Creating PJSUA * * Before anything else, application must create PJSUA by calling #pjsua_create() * (or <tt>py_pjsua.create()</tt> from Python). * This, among other things, will initialize PJLIB, which is crucial before  * any PJLIB functions can be called, PJLIB-UTIL, and create a SIP endpoint. * * After this function is called, application can create a memory pool (with * #pjsua_pool_create()) and read configurations from command line or file to * build the settings to initialize PJSUA below. * * @subsection init_pjsua_lib Initializing PJSUA * * After PJSUA is created, application can initialize PJSUA by calling * #pjsua_init(). This function takes several optional configuration settings  * in the argument, if application wants to set them. * * @subsubsection init_pjsua_lib_c_cpp PJSUA-LIB Initialization (in C) * Sample code to initialize PJSUA in C code: \code #include <pjsua-lib/pjsua.h> #define THIS_FILE  __FILE__ static pj_status_t app_init(void) {    pjsua_config	 ua_cfg;    pjsua_logging_config log_cfg;    pjsua_media_config   media_cfg;    pj_status_t status;    // Must create pjsua before anything else!    status = pjsua_create();    if (status != PJ_SUCCESS) {	pjsua_perror(THIS_FILE, "Error initializing pjsua", status);	return status;    }    // Initialize configs with default settings.    pjsua_config_default(&ua_cfg);    pjsua_logging_config_default(&log_cfg);    pjsua_media_config_default(&media_cfg);    // At the very least, application would want to override    // the call callbacks in pjsua_config:    ua_cfg.cb.on_incoming_call = ...    ua_cfg.cb.on_call_state = ..    ...    // Customize other settings (or initialize them from application specific    // configuration file):    ...    // Initialize pjsua    status = pjsua_init(&ua_cfg, &log_cfg, &media_cfg);    if (status != PJ_SUCCESS) {          pjsua_perror(THIS_FILE, "Error initializing pjsua", status);	  return status;    }    .    ... } \endcode * * * @subsubsection init_pjsua_lib_python PJSUA-LIB Initialization (in Python) * Sample code to initialize PJSUA in Python code: \codeimport py_pjsua## Initialize pjsua.#def app_init():	# Create pjsua before anything else	status = py_pjsua.create()	if status != 0:		err_exit("pjsua create() error", status)	# We use default logging config for this sample	log_cfg = py_pjsua.logging_config_default()	# Create and initialize pjsua config	# Note: for this Python module, thread_cnt must be 0 since Python	#       doesn't like to be called from alien thread (pjsua's thread	#       in this case)	    	ua_cfg = py_pjsua.config_default()	ua_cfg.thread_cnt = 0	ua_cfg.user_agent = "PJSUA/Python 0.1"	# Override callbacks. At the very least application would want to	# override the call callbacks in pjsua_config	ua_cfg.cb.on_incoming_call = ...	ua_cfg.cb.on_call_state = ...	# Use default media config for this cample	med_cfg = py_pjsua.media_config_default()	#	# Initialize pjsua!!	#	status = py_pjsua.init(ua_cfg, log_cfg, med_cfg)	if status != 0:		err_exit("pjsua init() error", status)# Utility: display PJ error and exit#def err_exit(title, rc):	py_pjsua.perror(THIS_FILE, title, rc)	exit(1) \endcode * @subsection other_init_pjsua_lib Other Initialization * * After PJSUA is initialized with #pjsua_init(), application will normally * need/want to perform the following tasks: * *  - create SIP transport with #pjsua_transport_create(). Application would *    to call #pjsua_transport_create() for each transport types that it *    wants to support (for example, UDP, TCP, and TLS). Please see *    @ref PJSUA_LIB_TRANSPORT section for more info. *  - create one or more SIP accounts with #pjsua_acc_add() or *    #pjsua_acc_add_local(). The SIP account is used for registering with *    the SIP server, if any. Please see @ref PJSUA_LIB_ACC for more info. *  - add one or more buddies with #pjsua_buddy_add(). Please see *    @ref PJSUA_LIB_BUDDY section for more info. *  - optionally configure the sound device, codec settings, and other *    media settings. Please see @ref PJSUA_LIB_MEDIA for more info. * * * @subsection starting_pjsua_lib Starting PJSUA * * After all initializations have been done, application must call * #pjsua_start() to start PJSUA. This function will check that all settings * have been properly configured, and apply default settings when they haven't, * or report error status when it is unable to recover from missing settings. * * Most settings can be changed during run-time. For example, application * may add, modify, or delete accounts, buddies, or change media settings * during run-time. * * @subsubsection starting_pjsua_lib_c C Example for Starting PJSUA * Sample code: \code static pj_status_t app_run(void) {    pj_status_t status;    // Start pjsua    status = pjsua_start();    if (status != PJ_SUCCESS) {	pjsua_destroy();	pjsua_perror(THIS_FILE, "Error starting pjsua", status);	return status;    }    // Run application loop    while (1) {	char choice[10];		printf("Select menu: ");	fgets(choice, sizeof(choice), stdin);	...    } } \endcode * @subsubsection starting_pjsua_lib_python Python Example for starting PJSUA * For Python, starting PJSUA-LIB takes one more step, that is to initialize * Python worker thread to poll PJSUA-LIB. This step is necessary because * Python doesn't like it when it is called by an "alien" thread (that is, * thread that is not created using Python API). * * Because of this, we cannot use a worker thread in PJSUA-LIB, because then * the Python callback will be called by an "alien" thread and this would * crash Python (or raise assert() probably). * * So because worker thread is disabled, we need to create a worker thread * in Python. Note that this may not be necessary if we're creating a * GUI application, because then we can attach, for example, a GUI timer * object to poll the PJSUA-LIB. But because we're creating a console  * application which will block at <tt>sys.stdin.readline()</tt>, we need * to have a worker thread to poll PJSUA-LIB. \codeimport threadC_QUIT = 0def app_start():	# Done with initialization, start pjsua!!	#	status = py_pjsua.start()	if status != 0:		py_pjsua.destroy()		err_exit("Error starting pjsua!", status)	# Start worker thread	thr = thread.start_new(worker_thread_main, (0,))    	print "PJSUA Started!!"## Worker thread function.# Python doesn't like it when it's called from an alien thread# (pjsua's worker thread, in this case), so for Python we must# disable worker thread in pjsua and poll pjsua from Python instead.#def worker_thread_main(arg):	global C_QUIT	thread_desc = 0	status = py_pjsua.thread_register("python worker", thread_desc)	if status != 0:		py_pjsua.perror(THIS_FILE, "Error registering thread", status)	else:		while C_QUIT == 0:			py_pjsua.handle_events(50)		print "Worker thread quitting.."		C_QUIT = 2 \endcode *//** Constant to identify invalid ID for all sorts of IDs. */#define PJSUA_INVALID_ID	    (-1)/** Call identification */typedef int pjsua_call_id;/** Account identification */typedef int pjsua_acc_id;/** Buddy identification */typedef int pjsua_buddy_id;/** File player identification */typedef int pjsua_player_id;/** File recorder identification */typedef int pjsua_recorder_id;/** Conference port identification */typedef int pjsua_conf_port_id;/** * Maximum proxies in account. */#ifndef PJSUA_ACC_MAX_PROXIES#   define PJSUA_ACC_MAX_PROXIES    8#endif/** * Logging configuration, which can be (optionally) specified when calling * #pjsua_init(). Application must call #pjsua_logging_config_default() to * initialize this structure with the default values. * * \par Sample Python Syntax: * \code    # Python type: py_pjsua.Logging_Config     log_cfg = py_pjsua.logging_config_default()    log_cfg.level = 4 * \endcode */typedef struct pjsua_logging_config{    /**     * Log incoming and outgoing SIP message? Yes!     */    pj_bool_t	msg_logging;    /**     * Input verbosity level. Value 5 is reasonable.     */    unsigned	level;    /**     * Verbosity level for console. Value 4 is reasonable.     */    unsigned	console_level;    /**     * Log decoration.     */    unsigned	decor;    /**     * Optional log filename.     */    pj_str_t	log_filename;    /**     * Optional callback function to be called to write log to      * application specific device. This function will be called for     * log messages on input verbosity level.     *     * \par Sample Python Syntax:     * \code     # level:	integer     # data:	string     # len:	integer     def cb(level, data, len):	    print data,     * \endcode     */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -