📄 sip_endpoint.h
字号:
/* $Id: sip_endpoint.h 1098 2007-03-23 16:34:20Z 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 __PJSIP_SIP_ENDPOINT_H__
#define __PJSIP_SIP_ENDPOINT_H__
/**
* @file sip_endpoint.h
* @brief SIP Endpoint.
*/
#include <pjsip/sip_transport.h>
#include <pjsip/sip_resolve.h>
/**
* @defgroup PJSIP_CORE_CORE At the Very Core
* @ingroup PJSIP_CORE
* @brief The very core of PJSIP.
*/
PJ_BEGIN_DECL
/**
* @defgroup PJSIP_ENDPT Endpoint
* @ingroup PJSIP_CORE_CORE
* @brief The master, owner of all objects
*
* SIP Endpoint instance (pjsip_endpoint) can be viewed as the master/owner of
* all SIP objects in an application. It performs the following roles:
* - it manages the allocation/deallocation of memory pools for all objects.
* - it manages listeners and transports, and how they are used by
* transactions.
* - it receives incoming messages from transport layer and automatically
* dispatches them to the correct transaction (or create a new one).
* - it has a single instance of timer management (timer heap).
* - it manages modules, which is the primary means of extending the library.
* - it provides single polling function for all objects and distributes
* events.
* - it automatically handles incoming requests which can not be handled by
* existing modules (such as when incoming request has unsupported method).
* - and so on..
*
* Theoritically application can have multiple instances of SIP endpoint,
* although it's not clear why application may want to do it.
*
* @{
*/
/**
* Create an instance of SIP endpoint from the specified pool factory.
* The pool factory reference then will be kept by the endpoint, so that
* future memory allocations by SIP components will be taken from the same
* pool factory.
*
* @param pf Pool factory that will be used for the lifetime of
* endpoint.
* @param name Optional name to be specified for the endpoint.
* If this parameter is NULL, then the name will use
* local host name.
* @param endpt Pointer to receive endpoint instance.
*
* @return PJ_SUCCESS on success.
*/
PJ_DECL(pj_status_t) pjsip_endpt_create(pj_pool_factory *pf,
const char *name,
pjsip_endpoint **endpt);
/**
* Destroy endpoint instance. Application must make sure that all pending
* transactions have been terminated properly, because this function does not
* check for the presence of pending transactions.
*
* @param endpt The SIP endpoint to be destroyed.
*/
PJ_DECL(void) pjsip_endpt_destroy(pjsip_endpoint *endpt);
/**
* Get endpoint name.
*
* @param endpt The SIP endpoint instance.
*
* @return Endpoint name, as was registered during endpoint
* creation. The string is NULL terminated.
*/
PJ_DECL(const pj_str_t*) pjsip_endpt_name(const pjsip_endpoint *endpt);
/**
* Poll for events. Application must call this function periodically to ensure
* that all events from both transports and timer heap are handled in timely
* manner. This function, like all other endpoint functions, is thread safe,
* and application may have more than one thread concurrently calling this function.
*
* @param endpt The endpoint.
* @param max_timeout Maximum time to wait for events, or NULL to wait forever
* until event is received.
*
* @return PJ_SUCCESS on success.
*/
PJ_DECL(pj_status_t) pjsip_endpt_handle_events( pjsip_endpoint *endpt,
const pj_time_val *max_timeout);
/**
* Handle events with additional info about number of events that
* have been handled.
*
* @param endpt The endpoint.
* @param max_timeout Maximum time to wait for events, or NULL to wait forever
* until event is received.
* @param count Optional argument to receive the number of events that
* have been handled by the function.
*
* @return PJ_SUCCESS on success.
*/
PJ_DECL(pj_status_t) pjsip_endpt_handle_events2(pjsip_endpoint *endpt,
const pj_time_val *max_timeout,
unsigned *count);
/**
* Schedule timer to endpoint's timer heap. Application must poll the endpoint
* periodically (by calling #pjsip_endpt_handle_events) to ensure that the
* timer events are handled in timely manner. When the timeout for the timer
* has elapsed, the callback specified in the entry argument will be called.
* This function, like all other endpoint functions, is thread safe.
*
* @param endpt The endpoint.
* @param entry The timer entry.
* @param delay The relative delay of the timer.
* @return PJ_OK (zero) if successfull.
*/
PJ_DECL(pj_status_t) pjsip_endpt_schedule_timer( pjsip_endpoint *endpt,
pj_timer_entry *entry,
const pj_time_val *delay );
/**
* Cancel the previously registered timer.
* This function, like all other endpoint functions, is thread safe.
*
* @param endpt The endpoint.
* @param entry The timer entry previously registered.
*/
PJ_DECL(void) pjsip_endpt_cancel_timer( pjsip_endpoint *endpt,
pj_timer_entry *entry );
/**
* Get the timer heap instance of the SIP endpoint.
*
* @param endpt The endpoint.
*
* @return The timer heap instance.
*/
PJ_DECL(pj_timer_heap_t*) pjsip_endpt_get_timer_heap(pjsip_endpoint *endpt);
/**
* Register new module to the endpoint.
* The endpoint will then call the load and start function in the module to
* properly initialize the module, and assign a unique module ID for the
* module.
*
* @param endpt The endpoint.
* @param module The module to be registered.
*
* @return PJ_SUCCESS on success.
*/
PJ_DECL(pj_status_t) pjsip_endpt_register_module( pjsip_endpoint *endpt,
pjsip_module *module );
/**
* Unregister a module from the endpoint.
* The endpoint will then call the stop and unload function in the module to
* properly shutdown the module.
*
* @param endpt The endpoint.
* @param module The module to be registered.
*
* @return PJ_SUCCESS on success.
*/
PJ_DECL(pj_status_t) pjsip_endpt_unregister_module( pjsip_endpoint *endpt,
pjsip_module *module );
/**
* Create pool from the endpoint. All SIP components should allocate their
* memory pool by calling this function, to make sure that the pools are
* allocated from the same pool factory. This function, like all other endpoint
* functions, is thread safe.
*
* @param endpt The SIP endpoint.
* @param pool_name Name to be assigned to the pool.
* @param initial The initial size of the pool.
* @param increment The resize size.
* @return Memory pool, or NULL on failure.
*
* @see pj_pool_create
*/
PJ_DECL(pj_pool_t*) pjsip_endpt_create_pool( pjsip_endpoint *endpt,
const char *pool_name,
pj_size_t initial,
pj_size_t increment );
/**
* Return back pool to endpoint to be released back to the pool factory.
* This function, like all other endpoint functions, is thread safe.
*
* @param endpt The endpoint.
* @param pool The pool to be destroyed.
*/
PJ_DECL(void) pjsip_endpt_release_pool( pjsip_endpoint *endpt,
pj_pool_t *pool );
/**
* Create a new transaction. After creating the transaction, application MUST
* initialize the transaction as either UAC or UAS (by calling
* #pjsip_tsx_init_uac or #pjsip_tsx_init_uas), then must register the
* transaction to endpoint with #pjsip_endpt_register_tsx.
* This function, like all other endpoint functions, is thread safe.
*
* @param endpt The SIP endpoint.
* @param p_tsx Pointer to receive the transaction.
*
* @return PJ_SUCCESS or the appropriate error code.
*/
PJ_DECL(pj_status_t) pjsip_endpt_create_tsx(pjsip_endpoint *endpt,
pjsip_transaction **p_tsx);
/**
* Find transaction in endpoint's transaction table by the transaction's key.
* This function normally is only used by modules. The key for a transaction
* can be created by calling #pjsip_tsx_create_key.
*
* @param endpt The endpoint instance.
* @param key Transaction key, as created with #pjsip_tsx_create_key.
*
* @return The transaction, or NULL if it's not found.
*/
PJ_DECL(pjsip_transaction*) pjsip_endpt_find_tsx( pjsip_endpoint *endpt,
const pj_str_t *key );
/**
* Register the transaction to the endpoint's transaction table.
* This function should only be used internally by the stack.
*
* @param endpt The SIP endpoint.
* @param tsx The transaction.
*/
PJ_DECL(void) pjsip_endpt_register_tsx( pjsip_endpoint *endpt,
pjsip_transaction *tsx);
/**
* Forcefull destroy the transaction. This function should only be used
* internally by the stack.
*
* @param endpt The endpoint.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -