Activate persistent subscriptions when they are recreated.
authorMark Michelson <mmichelson@digium.com>
Mon, 15 Dec 2014 15:48:47 +0000 (15:48 +0000)
committerMark Michelson <mmichelson@digium.com>
Mon, 15 Dec 2014 15:48:47 +0000 (15:48 +0000)
Prior to this change, recreating persistent subscriptions would
create the subscription but would not activate it. This led to subscriptions
being listed in the "NULL" state by diagnostics and not sending NOTIFYs
when expected.

Review: https://reviewboard.asterisk.org/r/4261
........

Merged revisions 429571 from http://svn.asterisk.org/svn/asterisk/branches/13

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

res/res_pjsip_pubsub.c

index 02deeb6..490f694 100644 (file)
@@ -1289,6 +1289,9 @@ static struct sip_subscription_tree *create_subscription_tree(const struct ast_s
        return sub_tree;
 }
 
+static int generate_initial_notify(struct ast_sip_subscription *sub);
+static int send_notify(struct sip_subscription_tree *sub_tree, unsigned int force_full_state);
+
 /*! \brief Callback function to perform the actual recreation of a subscription */
 static int subscription_persistence_recreate(void *obj, void *arg, int flags)
 {
@@ -1377,6 +1380,10 @@ static int subscription_persistence_recreate(void *obj, void *arg, int flags)
                }
                sub_tree->persistence = ao2_bump(persistence);
                subscription_persistence_update(sub_tree, &rdata);
+               if (generate_initial_notify(sub_tree->root)) {
+                       pjsip_evsub_terminate(sub_tree->evsub, PJ_TRUE);
+               }
+               send_notify(sub_tree, 1);
        } else {
                ast_sorcery_delete(ast_sip_get_sorcery(), persistence);
        }