Asterisk - The Open Source Telephony Project GIT-master-f36a736
|
#include "asterisk.h"
#include <pjsip.h>
#include <pjsip_ua.h>
#include "asterisk/app.h"
#include "asterisk/cli.h"
#include "asterisk/config.h"
#include "asterisk/manager.h"
#include "asterisk/module.h"
#include "asterisk/pbx.h"
#include "asterisk/res_pjsip.h"
#include "asterisk/res_pjsip_session.h"
#include "asterisk/sorcery.h"
Go to the source code of this file.
Data Structures | |
struct | notify_cfg |
struct | notify_channel_data |
struct | notify_data |
struct | notify_option |
struct | notify_option_item |
struct | notify_uri_data |
Macros | |
#define | CONTENT_SIZE 512 |
#define | CONTENT_TYPE_SIZE 64 |
Typedefs | |
typedef struct notify_channel_data *(* | task_channel_data_create) (struct ast_sip_session *session, void *info) |
typedef struct notify_data *(* | task_data_create) (struct ast_sip_endpoint *, void *info) |
typedef struct notify_uri_data *(* | task_uri_data_create) (const char *uri, void *info) |
Enumerations | |
enum | notify_result { SUCCESS , INVALID_ENDPOINT , INVALID_CHANNEL , ALLOC_ERROR , TASK_PUSH_ERROR } |
enum | notify_type { NOTIFY_ENDPOINT , NOTIFY_URI , NOTIFY_CHANNEL } |
Functions | |
static void | __reg_module (void) |
static void | __unreg_module (void) |
AO2_GLOBAL_OBJ_STATIC (globals) | |
static int | app_notify (struct ast_channel *chan, const char *data) |
Application entry point to send a SIP notify to an endpoint. More... | |
struct ast_module * | AST_MODULE_SELF_SYM (void) |
static void | build_ami_notify (pjsip_tx_data *tdata, void *info) |
static void | build_cli_notify (pjsip_tx_data *tdata, void *info) |
static void | build_notify (pjsip_tx_data *tdata, const char *name, const char *value, struct ast_str **content_type, struct ast_str **content) |
static void | build_notify_body (pjsip_tx_data *tdata, struct ast_str *content_type, struct ast_str *content) |
static char * | cli_complete_endpoint (const char *word) |
static char * | cli_complete_notify (struct ast_cli_args *a) |
static char * | cli_notify (struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) |
CONFIG_INFO_STANDARD (notify_cfg, globals, notify_cfg_alloc,.files=ACO_FILES(&module_conf)) | |
static struct ast_variable * | headers_to_variables (const char *headers) |
Convert headers string such as "Event=hold&Event=answer&..." into ast variable list. More... | |
static int | load_module (void) |
static int | manager_notify (struct mansession *s, const struct message *m) |
static void | manager_notify_channel (struct mansession *s, const struct message *m, const char *channel) |
static void | manager_notify_endpoint (struct mansession *s, const struct message *m, const char *endpoint_name) |
static void | manager_notify_uri (struct mansession *s, const struct message *m, const char *uri) |
static void | manager_send_response (struct mansession *s, const struct message *m, enum notify_type type, enum notify_result res, struct ast_variable *vars, const char *endpoint_name) |
static int | multiple_headers_allowed (const char *name) |
static int | not_allowed (const char *name) |
static struct notify_channel_data * | notify_ami_channel_data_create (struct ast_sip_session *session, void *info) |
static void | notify_ami_channel_data_destroy (void *obj) |
static struct notify_data * | notify_ami_data_create (struct ast_sip_endpoint *endpoint, void *info) |
static void | notify_ami_data_destroy (void *obj) |
static struct notify_uri_data * | notify_ami_uri_data_create (const char *uri, void *info) |
static void | notify_ami_uri_data_destroy (void *obj) |
static void * | notify_cfg_alloc (void) |
static void | notify_cfg_destroy (void *obj) |
static int | notify_channel (void *obj) |
static struct notify_channel_data * | notify_cli_channel_data_create (struct ast_sip_session *session, void *info) |
static void | notify_cli_channel_data_destroy (void *obj) |
static struct notify_data * | notify_cli_data_create (struct ast_sip_endpoint *endpoint, void *info) |
static void | notify_cli_data_destroy (void *obj) |
static struct notify_uri_data * | notify_cli_uri_data_create (const char *uri, void *info) |
static void | notify_cli_uri_data_destroy (void *obj) |
static int | notify_contact (void *obj, void *arg, int flags) |
static int | notify_endpoint (void *obj) |
static void * | notify_option_alloc (const char *category) |
static int | notify_option_cmp (void *obj, void *arg, int flags) |
static void | notify_option_destroy (void *obj) |
static void * | notify_option_find (struct ao2_container *container, const char *category) |
static int | notify_option_handler (const struct aco_option *opt, struct ast_variable *var, void *obj) |
static int | notify_option_hash (const void *obj, int flags) |
static int | notify_uri (void *obj) |
static enum notify_result | push_notify (const char *endpoint_name, void *info, task_data_create data_create) |
static enum notify_result | push_notify_channel (const char *channel_name, void *info, task_channel_data_create data_create) |
static enum notify_result | push_notify_uri (const char *uri, void *info, task_uri_data_create data_create) |
static int | reload_module (void) |
static int | unload_module (void) |
Variables | |
static struct ast_module_info | __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "CLI/AMI PJSIP NOTIFY Support" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = AST_BUILDOPT_SUM, .support_level = AST_MODULE_SUPPORT_CORE, .load = load_module, .reload = reload_module, .unload = unload_module, .load_pri = AST_MODPRI_APP_DEPEND, .requires = "res_pjsip", } |
static const struct ast_module_info * | ast_module_info = &__mod_info |
static struct ast_cli_entry | cli_options [] |
static struct aco_file | module_conf |
static const char | notify_config [] = "pjsip_notify.conf" |
static struct aco_type | notify_option |
static struct aco_type * | notify_options [] = ACO_TYPES(¬ify_option) |
#define CONTENT_SIZE 512 |
Definition at line 122 of file res_pjsip_notify.c.
#define CONTENT_TYPE_SIZE 64 |
Definition at line 121 of file res_pjsip_notify.c.
typedef struct notify_channel_data *(* task_channel_data_create) (struct ast_sip_session *session, void *info) |
Definition at line 788 of file res_pjsip_notify.c.
typedef struct notify_data *(* task_data_create) (struct ast_sip_endpoint *, void *info) |
Definition at line 788 of file res_pjsip_notify.c.
typedef struct notify_uri_data *(* task_uri_data_create) (const char *uri, void *info) |
Definition at line 788 of file res_pjsip_notify.c.
enum notify_result |
Enumerator | |
---|---|
SUCCESS | |
INVALID_ENDPOINT | |
INVALID_CHANNEL | |
ALLOC_ERROR | |
TASK_PUSH_ERROR |
Definition at line 819 of file res_pjsip_notify.c.
enum notify_type |
Enumerator | |
---|---|
NOTIFY_ENDPOINT | |
NOTIFY_URI | |
NOTIFY_CHANNEL |
Definition at line 1129 of file res_pjsip_notify.c.
|
static |
Definition at line 1438 of file res_pjsip_notify.c.
|
static |
Definition at line 1438 of file res_pjsip_notify.c.
AO2_GLOBAL_OBJ_STATIC | ( | globals | ) |
|
static |
Application entry point to send a SIP notify to an endpoint.
Definition at line 1329 of file res_pjsip_notify.c.
References ALLOC_ERROR, ao2_cleanup, ao2_global_obj_ref, args, AST_APP_ARG, ast_channel_name(), AST_DECLARE_APP_ARGS, ast_log, AST_STANDARD_APP_ARGS, ast_strdupa, ast_strlen_zero(), ast_variables_destroy(), globals, headers_to_variables(), INVALID_CHANNEL, INVALID_ENDPOINT, LOG_WARNING, notify_ami_channel_data_create(), notify_ami_uri_data_create(), notify_cli_channel_data_create(), notify_cli_uri_data_create(), notify_option_find(), NULL, push_notify_channel(), push_notify_uri(), RAII_VAR, SUCCESS, TASK_PUSH_ERROR, and tmp().
Referenced by load_module().
struct ast_module * AST_MODULE_SELF_SYM | ( | void | ) |
Definition at line 1438 of file res_pjsip_notify.c.
|
static |
Definition at line 659 of file res_pjsip_notify.c.
References ast_free, ast_log, build_notify(), build_notify_body(), sip_to_pjsip::info(), LOG_NOTICE, ast_variable::name, ast_variable::next, NULL, RAII_VAR, and ast_variable::value.
Referenced by notify_ami_channel_data_create(), notify_ami_data_create(), and notify_ami_uri_data_create().
|
static |
Definition at line 635 of file res_pjsip_notify.c.
References ao2_cleanup, ao2_iterator_destroy(), ao2_iterator_init(), ao2_iterator_next, ast_free, build_notify(), build_notify_body(), sip_to_pjsip::info(), item, notify_option::items, aco_type::name, NULL, and RAII_VAR.
Referenced by notify_cli_channel_data_create(), notify_cli_data_create(), and notify_cli_uri_data_create().
|
static |
Definition at line 590 of file res_pjsip_notify.c.
References ast_log, ast_sip_add_header(), ast_str_append(), ast_str_create, ast_str_set(), ast_str_strlen(), CONTENT_SIZE, CONTENT_TYPE_SIZE, LOG_ERROR, LOG_WARNING, multiple_headers_allowed(), name, not_allowed(), NULL, and value.
Referenced by build_ami_notify(), and build_cli_notify().
|
static |
Definition at line 566 of file res_pjsip_notify.c.
References ast_sip_add_body(), ast_str_buffer(), ast_sip_body::body_text, ast_sip_body::subtype, and ast_sip_body::type.
Referenced by build_ami_notify(), and build_cli_notify().
|
static |
Definition at line 950 of file res_pjsip_notify.c.
References ao2_cleanup, ao2_iterator_destroy(), ao2_iterator_init(), ao2_iterator_next, ao2_ref, ast_cli_completion_add(), ast_sip_get_sorcery(), ast_sorcery_object_get_id(), ast_sorcery_retrieve_by_prefix(), ast_strdup, endpoints, and NULL.
Referenced by cli_complete_notify().
|
static |
Definition at line 980 of file res_pjsip_notify.c.
References a, ao2_cleanup, ao2_global_obj_ref, ao2_iterator_destroy(), ao2_iterator_init(), ao2_iterator_next, ast_complete_channels(), ast_strdup, ast_strlen_zero(), c, cli_complete_endpoint(), globals, notify_option::name, NULL, and RAII_VAR.
Referenced by cli_notify().
|
static |
Definition at line 1050 of file res_pjsip_notify.c.
References a, ALLOC_ERROR, ao2_cleanup, ao2_global_obj_ref, ast_cli(), cli_complete_notify(), CLI_FAILURE, CLI_GENERATE, CLI_INIT, CLI_SHOWUSAGE, CLI_SUCCESS, ast_cli_entry::command, globals, INVALID_CHANNEL, INVALID_ENDPOINT, notify_cli_channel_data_create(), notify_cli_data_create(), notify_cli_uri_data_create(), notify_option_find(), NULL, push_notify(), push_notify_channel(), push_notify_uri(), RAII_VAR, result, TASK_PUSH_ERROR, and ast_cli_entry::usage.
CONFIG_INFO_STANDARD | ( | notify_cfg | , |
globals | , | ||
notify_cfg_alloc | , | ||
. | files = ACO_FILES(&module_conf) |
||
) |
|
static |
Convert headers string such as "Event=hold&Event=answer&..." into ast variable list.
Definition at line 1301 of file res_pjsip_notify.c.
References ast_strlen_zero(), ast_variable_new, name, NULL, strsep(), value, and var.
Referenced by app_notify().
|
static |
Definition at line 1390 of file res_pjsip_notify.c.
References aco_info_destroy(), aco_info_init(), aco_option_register_custom, ACO_PREFIX, aco_process_config(), app_notify(), ARRAY_LEN, ast_cli_register_multiple, ast_manager_register_xml, AST_MODULE_LOAD_DECLINE, AST_MODULE_LOAD_SUCCESS, ast_register_application_xml, cli_options, EVENT_FLAG_SYSTEM, manager_notify(), notify_option_handler(), and notify_options.
|
static |
Definition at line 1258 of file res_pjsip_notify.c.
References ast_strlen_zero(), astman_get_header(), astman_send_error(), manager_notify_channel(), manager_notify_endpoint(), and manager_notify_uri().
Referenced by load_module().
|
static |
Definition at line 1242 of file res_pjsip_notify.c.
References astman_get_variables_order(), manager_send_response(), notify_ami_channel_data_create(), NOTIFY_CHANNEL, NULL, ORDER_NATURAL, and push_notify_channel().
Referenced by manager_notify().
|
static |
Definition at line 1174 of file res_pjsip_notify.c.
References ao2_cleanup, ao2_global_obj_ref, ast_strlen_zero(), astman_get_header(), astman_get_variables_order(), astman_send_error_va(), globals, manager_send_response(), notify_ami_data_create(), notify_cli_data_create(), NOTIFY_ENDPOINT, notify_option_find(), NULL, ORDER_NATURAL, push_notify(), and RAII_VAR.
Referenced by manager_notify().
|
static |
Definition at line 1212 of file res_pjsip_notify.c.
References ao2_cleanup, ao2_global_obj_ref, ast_strlen_zero(), astman_get_header(), astman_get_variables_order(), astman_send_error_va(), globals, manager_send_response(), notify_ami_uri_data_create(), notify_cli_uri_data_create(), notify_option_find(), NOTIFY_URI, NULL, ORDER_NATURAL, push_notify_uri(), and RAII_VAR.
Referenced by manager_notify().
|
static |
Definition at line 1135 of file res_pjsip_notify.c.
References ALLOC_ERROR, ast_assert, ast_variables_destroy(), astman_send_ack(), astman_send_error(), astman_send_error_va(), INVALID_CHANNEL, INVALID_ENDPOINT, NOTIFY_CHANNEL, NOTIFY_ENDPOINT, SUCCESS, TASK_PUSH_ERROR, and type.
Referenced by manager_notify_channel(), manager_notify_endpoint(), and manager_notify_uri().
|
static |
Definition at line 555 of file res_pjsip_notify.c.
References name.
Referenced by build_notify().
|
static |
Definition at line 528 of file res_pjsip_notify.c.
References ARRAY_LEN, and name.
Referenced by build_notify().
|
static |
Definition at line 502 of file res_pjsip_notify.c.
References AO2_ALLOC_OPT_LOCK_NOLOCK, ao2_alloc_options, build_ami_notify(), notify_channel_data::build_notify, sip_to_pjsip::info(), notify_channel_data::info, notify_ami_channel_data_destroy(), NULL, notify_channel_data::session, and session.
Referenced by app_notify(), and manager_notify_channel().
|
static |
Definition at line 440 of file res_pjsip_notify.c.
References ao2_cleanup, ast_variables_destroy(), sip_to_pjsip::info(), notify_channel_data::info, and notify_channel_data::session.
Referenced by notify_ami_channel_data_create().
|
static |
Definition at line 455 of file res_pjsip_notify.c.
References ao2_alloc, ao2_ref, build_ami_notify(), notify_data::build_notify, notify_data::endpoint, sip_to_pjsip::info(), notify_data::info, notify_ami_data_destroy(), and NULL.
Referenced by manager_notify_endpoint().
|
static |
Definition at line 414 of file res_pjsip_notify.c.
References ao2_cleanup, ast_variables_destroy(), notify_data::endpoint, sip_to_pjsip::info(), and notify_data::info.
Referenced by notify_ami_data_create().
|
static |
Definition at line 477 of file res_pjsip_notify.c.
References ao2_alloc, ao2_ref, ast_strdup, build_ami_notify(), notify_uri_data::build_notify, sip_to_pjsip::info(), notify_uri_data::info, notify_ami_uri_data_destroy(), NULL, and notify_uri_data::uri.
Referenced by app_notify(), and manager_notify_uri().
|
static |
Definition at line 427 of file res_pjsip_notify.c.
References ast_free, ast_variables_destroy(), sip_to_pjsip::info(), notify_uri_data::info, and notify_uri_data::uri.
Referenced by notify_ami_uri_data_create().
|
static |
Definition at line 227 of file res_pjsip_notify.c.
References ao2_alloc, AO2_ALLOC_OPT_LOCK_NOLOCK, ao2_cleanup, ao2_container_alloc_hash, notify_cfg_destroy(), notify_option_cmp(), notify_option_hash(), notify_cfg::notify_options, and NULL.
|
static |
Definition at line 221 of file res_pjsip_notify.c.
References ao2_cleanup, and notify_cfg::notify_options.
Referenced by notify_cfg_alloc().
|
static |
Definition at line 788 of file res_pjsip_notify.c.
References ao2_cleanup, ast_channel_name(), ast_debug, ast_sip_add_header(), ast_sip_create_request(), ast_sip_send_request(), NULL, and RAII_VAR.
Referenced by build_calendar(), and push_notify_channel().
|
static |
Definition at line 391 of file res_pjsip_notify.c.
References AO2_ALLOC_OPT_LOCK_NOLOCK, ao2_alloc_options, ao2_ref, build_cli_notify(), notify_channel_data::build_notify, sip_to_pjsip::info(), notify_channel_data::info, notify_cli_channel_data_destroy(), NULL, notify_channel_data::session, and session.
Referenced by app_notify(), and cli_notify().
|
static |
Definition at line 321 of file res_pjsip_notify.c.
References ao2_cleanup, notify_channel_data::info, and notify_channel_data::session.
Referenced by notify_cli_channel_data_create().
|
static |
Definition at line 339 of file res_pjsip_notify.c.
References ao2_alloc, ao2_ref, build_cli_notify(), notify_data::build_notify, notify_data::endpoint, sip_to_pjsip::info(), notify_data::info, notify_cli_data_destroy(), and NULL.
Referenced by cli_notify(), and manager_notify_endpoint().
|
static |
Definition at line 285 of file res_pjsip_notify.c.
References ao2_cleanup, notify_data::endpoint, and notify_data::info.
Referenced by notify_cli_data_create().
|
static |
Definition at line 363 of file res_pjsip_notify.c.
References ao2_alloc, ao2_ref, ast_strdup, build_cli_notify(), notify_uri_data::build_notify, sip_to_pjsip::info(), notify_uri_data::info, notify_cli_uri_data_destroy(), NULL, and notify_uri_data::uri.
Referenced by app_notify(), cli_notify(), and manager_notify_uri().
|
static |
Definition at line 313 of file res_pjsip_notify.c.
References ao2_cleanup, ast_free, notify_uri_data::info, and notify_uri_data::uri.
Referenced by notify_cli_uri_data_create().
|
static |
Definition at line 682 of file res_pjsip_notify.c.
References ast_log, ast_sip_add_header(), ast_sip_create_request(), ast_sip_send_request(), notify_data::build_notify, notify_data::endpoint, notify_data::info, LOG_ERROR, LOG_WARNING, NULL, and ast_sip_contact::uri.
Referenced by notify_endpoint().
|
static |
Definition at line 714 of file res_pjsip_notify.c.
References ao2_callback, ao2_cleanup, ast_log, ast_sip_location_retrieve_aor(), ast_sip_location_retrieve_aor_contacts(), ast_strdupa, ast_strip(), ast_strlen_zero(), LOG_WARNING, notify_contact(), NULL, OBJ_NODATA, RAII_VAR, and strsep().
Referenced by push_notify().
|
static |
Definition at line 164 of file res_pjsip_notify.c.
References ao2_alloc, AO2_ALLOC_OPT_LOCK_NOLOCK, ao2_cleanup, ao2_container_alloc_list, AO2_CONTAINER_ALLOC_OPT_DUPS_ALLOW, ast_copy_string(), notify_option::items, notify_option::name, notify_option_destroy(), and NULL.
|
static |
Definition at line 149 of file res_pjsip_notify.c.
References CMP_MATCH, notify_option::name, and OBJ_KEY.
Referenced by notify_cfg_alloc().
|
static |
Definition at line 158 of file res_pjsip_notify.c.
References ao2_cleanup, and notify_option::items.
Referenced by notify_option_alloc().
|
static |
Definition at line 187 of file res_pjsip_notify.c.
References ao2_find, container, and OBJ_KEY.
Referenced by app_notify(), cli_notify(), manager_notify_endpoint(), and manager_notify_uri().
|
static |
Definition at line 192 of file res_pjsip_notify.c.
References ao2_alloc, ao2_cleanup, ao2_link, ast_copy_string(), item, notify_option::items, aco_type::name, NULL, RAII_VAR, and var.
Referenced by load_module().
|
static |
Definition at line 143 of file res_pjsip_notify.c.
References ast_str_case_hash(), notify_option::name, and OBJ_KEY.
Referenced by notify_cfg_alloc().
|
static |
Definition at line 746 of file res_pjsip_notify.c.
References ao2_cleanup, ast_log, ast_sip_add_header(), ast_sip_create_request(), ast_sip_default_outbound_endpoint(), ast_sip_send_request(), ast_strlen_zero(), notify_data::endpoint, LOG_ERROR, LOG_WARNING, NULL, and RAII_VAR.
Referenced by push_notify_uri().
|
static |
Definition at line 840 of file res_pjsip_notify.c.
References ALLOC_ERROR, ao2_cleanup, ast_sip_get_sorcery(), ast_sip_push_task(), ast_sorcery_retrieve_by_id(), ast_sip_session::endpoint, notify_data::endpoint, sip_to_pjsip::info(), INVALID_ENDPOINT, notify_endpoint(), NULL, RAII_VAR, SUCCESS, and TASK_PUSH_ERROR.
Referenced by cli_notify(), and manager_notify_endpoint().
|
static |
Definition at line 888 of file res_pjsip_notify.c.
References ALLOC_ERROR, ao2_ref, ast_channel_get_by_name(), ast_channel_lock, ast_channel_tech(), ast_channel_tech_pvt(), ast_channel_unlock, ast_channel_unref, ast_debug, ast_log, ast_sip_push_task(), sip_to_pjsip::info(), INVALID_CHANNEL, LOG_WARNING, notify_channel(), ast_sip_channel_pvt::session, session, SUCCESS, TASK_PUSH_ERROR, and type.
Referenced by app_notify(), cli_notify(), and manager_notify_channel().
|
static |
Definition at line 867 of file res_pjsip_notify.c.
References ALLOC_ERROR, ao2_cleanup, ast_sip_push_task(), sip_to_pjsip::info(), notify_uri(), NULL, SUCCESS, TASK_PUSH_ERROR, and notify_uri_data::uri.
Referenced by app_notify(), cli_notify(), and manager_notify_uri().
|
static |
Definition at line 1411 of file res_pjsip_notify.c.
References aco_process_config(), ACO_PROCESS_ERROR, and AST_MODULE_LOAD_DECLINE.
|
static |
Definition at line 1420 of file res_pjsip_notify.c.
References aco_info_destroy(), ao2_global_obj_release, ARRAY_LEN, ast_cli_unregister_multiple(), ast_manager_unregister(), ast_unregister_application(), cli_options, and globals.
|
static |
Definition at line 1438 of file res_pjsip_notify.c.
|
static |
Definition at line 1438 of file res_pjsip_notify.c.
|
static |
Definition at line 1125 of file res_pjsip_notify.c.
Referenced by load_module(), and unload_module().
|
static |
Definition at line 257 of file res_pjsip_notify.c.
|
static |
Definition at line 128 of file res_pjsip_notify.c.
|
static |
Definition at line 245 of file res_pjsip_notify.c.
|
static |
Definition at line 255 of file res_pjsip_notify.c.
Referenced by load_module().