Fix /stasis/res/app_replaced unit test.
authorDavid M. Lee <dlee@digium.com>
Fri, 26 Jul 2013 17:42:08 +0000 (17:42 +0000)
committerDavid M. Lee <dlee@digium.com>
Fri, 26 Jul 2013 17:42:08 +0000 (17:42 +0000)
A typo in recent changes caused the JSON ApplicationReplaced message to
fail to build, so the message wasn't being sent out the WebSocket.

Related, the replaced application would also unregister itself when it
disconnected, which would actually unregister the new application. This
was also fixed.

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@395527 65c4cc65-6c06-0410-ace0-fbb531ad65f3

res/stasis/app.c
res/stasis_http/resource_events.c

index dfb6df3..6f80ed6 100644 (file)
@@ -221,7 +221,7 @@ void app_update(struct app *app, stasis_app_cb handler, void *data)
 
                msg = ast_json_pack("{s: s, s: s}",
                        "type", "ApplicationReplaced",
-                       "application", app_name);
+                       "application", app->name);
                if (msg) {
                        app_send(app, msg);
                }
index 9e9bfab..d632339 100644 (file)
@@ -113,6 +113,19 @@ static void app_handler(void *data, const char *app_name,
 {
        struct event_session *session = data;
        int res;
+       const char *msg_type = S_OR(
+               ast_json_string_get(ast_json_object_get(message, "type")),
+               "");
+       const char *msg_application = S_OR(
+               ast_json_string_get(ast_json_object_get(message, "application")),
+               "");
+
+       /* Determine if we've been replaced */
+       if (strcmp(msg_type, "ApplicationReplaced") == 0 &&
+               strcmp(msg_application, app_name) == 0) {
+               ao2_find(session->websocket_apps, msg_application,
+                       OBJ_UNLINK | OBJ_NODATA);
+       }
 
        res = ast_json_object_set(message, "application",
                                  ast_json_string_create(app_name));