mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-12 15:45:18 +00:00
Merge "MWI: Update modules that subscribe to MWI to use new API calls"
This commit is contained in:
@@ -90,7 +90,7 @@ static struct ast_sip_subscription_handler mwi_handler = {
|
||||
*/
|
||||
struct mwi_stasis_subscription {
|
||||
/*! The MWI stasis subscription */
|
||||
struct stasis_subscription *stasis_sub;
|
||||
struct ast_mwi_subscriber *mwi_subscriber;
|
||||
/*! The mailbox corresponding with the MWI subscription. Used as a hash key */
|
||||
char mailbox[1];
|
||||
};
|
||||
@@ -243,7 +243,6 @@ static void mwi_stasis_cb(void *userdata, struct stasis_subscription *sub,
|
||||
static struct mwi_stasis_subscription *mwi_stasis_subscription_alloc(const char *mailbox, struct mwi_subscription *mwi_sub)
|
||||
{
|
||||
struct mwi_stasis_subscription *mwi_stasis_sub;
|
||||
struct stasis_topic *topic;
|
||||
|
||||
if (!mwi_sub) {
|
||||
return NULL;
|
||||
@@ -254,26 +253,22 @@ static struct mwi_stasis_subscription *mwi_stasis_subscription_alloc(const char
|
||||
return NULL;
|
||||
}
|
||||
|
||||
topic = ast_mwi_topic(mailbox);
|
||||
|
||||
/* Safe strcpy */
|
||||
strcpy(mwi_stasis_sub->mailbox, mailbox);
|
||||
|
||||
ast_debug(3, "Creating stasis MWI subscription to mailbox %s for endpoint %s. Topic: '%s':%p %d\n",
|
||||
mailbox, mwi_sub->id, stasis_topic_name(topic), topic, (int)ao2_ref(topic, 0));
|
||||
ao2_ref(mwi_sub, +1);
|
||||
mwi_stasis_sub->stasis_sub = stasis_subscribe_pool(topic, mwi_stasis_cb, mwi_sub);
|
||||
ao2_ref(topic, -1);
|
||||
|
||||
if (!mwi_stasis_sub->stasis_sub) {
|
||||
mwi_stasis_sub->mwi_subscriber = ast_mwi_subscribe_pool(mailbox, mwi_stasis_cb, mwi_sub);
|
||||
if (!mwi_stasis_sub->mwi_subscriber) {
|
||||
/* Failed to subscribe. */
|
||||
ao2_ref(mwi_stasis_sub, -1);
|
||||
ao2_ref(mwi_sub, -1);
|
||||
mwi_stasis_sub = NULL;
|
||||
return NULL;
|
||||
}
|
||||
stasis_subscription_accept_message_type(mwi_stasis_sub->stasis_sub, ast_mwi_state_type());
|
||||
stasis_subscription_accept_message_type(mwi_stasis_sub->stasis_sub, stasis_subscription_change_type());
|
||||
stasis_subscription_set_filter(mwi_stasis_sub->stasis_sub, STASIS_SUBSCRIPTION_FILTER_SELECTIVE);
|
||||
|
||||
stasis_subscription_accept_message_type(
|
||||
ast_mwi_subscriber_subscription(mwi_stasis_sub->mwi_subscriber),
|
||||
stasis_subscription_change_type());
|
||||
|
||||
return mwi_stasis_sub;
|
||||
}
|
||||
|
||||
@@ -433,21 +428,19 @@ static int mwi_sub_cmp(void *obj, void *arg, int flags)
|
||||
|
||||
static int get_message_count(void *obj, void *arg, int flags)
|
||||
{
|
||||
struct stasis_message *msg;
|
||||
struct mwi_stasis_subscription *mwi_stasis = obj;
|
||||
struct ast_sip_message_accumulator *counter = arg;
|
||||
struct ast_mwi_state *mwi_state;
|
||||
|
||||
msg = stasis_cache_get(ast_mwi_state_cache(), ast_mwi_state_type(), mwi_stasis->mailbox);
|
||||
if (!msg) {
|
||||
mwi_state = ast_mwi_subscriber_data(mwi_stasis->mwi_subscriber);
|
||||
if (!mwi_state) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
mwi_state = stasis_message_data(msg);
|
||||
counter->old_msgs += mwi_state->old_msgs;
|
||||
counter->new_msgs += mwi_state->new_msgs;
|
||||
|
||||
ao2_ref(msg, -1);
|
||||
ao2_ref(mwi_state, -1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -683,10 +676,11 @@ static void send_mwi_notify(struct mwi_subscription *sub)
|
||||
static int unsubscribe_stasis(void *obj, void *arg, int flags)
|
||||
{
|
||||
struct mwi_stasis_subscription *mwi_stasis = obj;
|
||||
if (mwi_stasis->stasis_sub) {
|
||||
if (mwi_stasis->mwi_subscriber) {
|
||||
ast_debug(3, "Removing stasis subscription to mailbox %s\n", mwi_stasis->mailbox);
|
||||
mwi_stasis->stasis_sub = stasis_unsubscribe_and_join(mwi_stasis->stasis_sub);
|
||||
mwi_stasis->mwi_subscriber = ast_mwi_unsubscribe_and_join(mwi_stasis->mwi_subscriber);
|
||||
}
|
||||
|
||||
return CMP_MATCH;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user