/*! * \interanl * \brief Completes SIPNotify AMI command in Endpoint mode. */ static void manager_notify_endpoint(struct mansession *s, const struct message *m, const char *endpoint_name) { struct ast_variable *vars = astman_get_variables_order(m, ORDER_NATURAL); if (!strncasecmp(endpoint_name, "sip/", 4)) { endpoint_name += 4; } if (!strncasecmp(endpoint_name, "pjsip/", 6)) { endpoint_name += 6; } switch (push_notify(endpoint_name, vars, notify_ami_data_create)) { case INVALID_ENDPOINT: ast_variables_destroy(vars); astman_send_error_va(s, m, "Unable to retrieve endpoint %s", endpoint_name); break; case ALLOC_ERROR: ast_variables_destroy(vars); astman_send_error(s, m, "Unable to allocate NOTIFY task data"); break; case TASK_PUSH_ERROR: /* Don't need to destroy vars since it is handled by cleanup in push_notify */ astman_send_error(s, m, "Unable to push NOTIFY task"); break; case SUCCESS: astman_send_ack(s, m, "NOTIFY sent"); break; } }
void push( const T& item) { lock L(barrier); data.push( item); push_notify(); }
/*! * \internal * \brief CLI command to send a SIP notify to an endpoint. * * \details Attempts to match the "type" given in the CLI command to a * configured one. If found, sends a NOTIFY to the endpoint * with the associated payload. */ static char *cli_notify(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) { RAII_VAR(struct notify_cfg *, cfg, NULL, ao2_cleanup); RAII_VAR(struct notify_option *, option, NULL, ao2_cleanup); int i; int using_uri = 0; switch (cmd) { case CLI_INIT: e->command = "pjsip send notify"; e->usage = "Usage: pjsip send notify <type> {endpoint|uri} <peer> [<peer>...]\n" " Send a NOTIFY request to an endpoint\n" " Message types are defined in pjsip_notify.conf\n"; return NULL; case CLI_GENERATE: if (a->argc > 4 && (!strcasecmp(a->argv[4], "uri"))) { using_uri = 1; } return cli_complete_notify(a->line, a->word, a->pos, a->n, using_uri); } if (a->argc < 6) { return CLI_SHOWUSAGE; } if (!strcasecmp(a->argv[4], "uri")) { using_uri = 1; } else if (strcasecmp(a->argv[4], "endpoint")) { return CLI_SHOWUSAGE; } cfg = ao2_global_obj_ref(globals); if (!(option = notify_option_find(cfg->notify_options, a->argv[3]))) { ast_cli(a->fd, "Unable to find notify type '%s'\n", a->argv[3]); return CLI_FAILURE; } for (i = 5; i < a->argc; ++i) { ast_cli(a->fd, "Sending NOTIFY of type '%s' to '%s'\n", a->argv[3], a->argv[i]); switch (using_uri ? push_notify_uri(a->argv[i], option, notify_cli_uri_data_create) : push_notify(a->argv[i], option, notify_cli_data_create)) { case INVALID_ENDPOINT: ast_cli(a->fd, "Unable to retrieve endpoint %s\n", a->argv[i]); break; case ALLOC_ERROR: ast_cli(a->fd, "Unable to allocate NOTIFY task data\n"); return CLI_FAILURE; case TASK_PUSH_ERROR: ast_cli(a->fd, "Unable to push NOTIFY task\n"); return CLI_FAILURE; default: break; } } return CLI_SUCCESS; }