--- Functionality changes from Asterisk 13.24.0 to Asterisk 13.25.0 ----------
------------------------------------------------------------------------------
+ARI
+------------------
+ * Whenever an ARI application is started, a context will be created for it
+ automatically as long as one does not already exist, following the format
+ 'stasis-<app_name>'. Two extensions are also added to this context: a match-all
+ extension, and the 'h' extension. Any phone that registers under this context
+ will place all calls to the corresponding Stasis application.
+
res_pjsip
------------------
* Added "send_contact_status_on_update_registration" global configuration option
static void app_dtor(void *obj)
{
struct stasis_app *app = obj;
+ size_t size = strlen("stasis-") + strlen(app->name) + 1;
+ char context_name[size];
ast_verb(1, "Destroying Stasis app %s\n", app->name);
ast_assert(app->bridge_router == NULL);
ast_assert(app->endpoint_router == NULL);
+ /* If we created a context for this application, remove it */
+ strcpy(context_name, "stasis-");
+ strcat(context_name, app->name);
+ ast_context_destroy_by_name(context_name, "res_stasis");
+
ao2_cleanup(app->topic);
app->topic = NULL;
ao2_cleanup(app->forwards);
RAII_VAR(struct stasis_app *, app, NULL, ao2_cleanup);
size_t size;
int res = 0;
+ size_t context_size = strlen("stasis-") + strlen(name) + 1;
+ char context_name[context_size];
ast_assert(name != NULL);
ast_assert(handler != NULL);
app->handler = handler;
app->data = ao2_bump(data);
+ /* Create a context, a match-all extension, and a 'h' extension for this application. Note that
+ * this should only be done if a context does not already exist. */
+ strcpy(context_name, "stasis-");
+ strcat(context_name, name);
+ if (!ast_context_find(context_name)) {
+ if (!ast_context_find_or_create(NULL, NULL, context_name, "res_stasis")) {
+ ast_log(LOG_WARNING, "Could not create context '%s' for Stasis application '%s'\n", context_name, name);
+ } else {
+ ast_add_extension(context_name, 0, "_.", 1, NULL, NULL, "Stasis", ast_strdup(name), ast_free_ptr, "res_stasis");
+ ast_add_extension(context_name, 0, "h", 1, NULL, NULL, "NoOp", NULL, NULL, "res_stasis");
+ }
+ } else {
+ ast_log(LOG_WARNING, "Not creating context '%s' for Stasis application '%s' because it already exists\n",
+ context_name, name);
+ }
+
ao2_ref(app, +1);
return app;
}