diff options
author | David M. Lee <dlee@digium.com> | 2013-03-15 17:35:16 +0000 |
---|---|---|
committer | David M. Lee <dlee@digium.com> | 2013-03-15 17:35:16 +0000 |
commit | 49e3489cac88927c87ce2b9c3e69a51aacf0bdc5 (patch) | |
tree | 501c46235f3b993322cb174f01d7190fc3b2fbd9 /main/stasis.c | |
parent | 641fc7ea54618828843e742f17c4d3415c1c5e26 (diff) |
A simplistic router for stasis_message's.
Often times, when subscribing to a topic, one wants to handle
different message types differently. While one could cascade if/else
statements through the subscription handler, it is much cleaner to
specify a different callback for each message type. The
stasis_message_router is here to help!
A stasis_message_router is constructed for a particular stasis_topic,
which is subscribes to. Call stasis_message_router_unsubscribe() to
cancel that subscription.
Once constructed, routes can be added using
stasis_message_router_add() (or stasis_message_router_set_default()
for any messages not handled by other routes). There may be only one
route per stasis_message_type. The route's callback is invoked just as
if it were a callback for a subscription; but it only gets called for
messages of the specified type.
(issue ASTERISK-20887)
Review: https://reviewboard.asterisk.org/r/2390/
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@383242 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main/stasis.c')
-rw-r--r-- | main/stasis.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/main/stasis.c b/main/stasis.c index 7f18bf5e1..a4d44b819 100644 --- a/main/stasis.c +++ b/main/stasis.c @@ -46,7 +46,7 @@ static struct ast_threadpool *pool; static struct stasis_message_type *__subscription_change_message_type; -/*! \private */ +/*! \internal */ struct stasis_topic { char *name; /*! Variable length array of the subscribers (raw pointer to avoid cyclic references) */ @@ -86,7 +86,7 @@ struct stasis_topic *stasis_topic_create(const char *name) } topic->num_subscribers_max = INITIAL_SUBSCRIBERS_MAX; - topic->subscribers = ast_calloc(topic->num_subscribers_max, sizeof(topic->subscribers)); + topic->subscribers = ast_calloc(topic->num_subscribers_max, sizeof(*topic->subscribers)); if (!topic->subscribers) { return NULL; } @@ -100,7 +100,7 @@ const char *stasis_topic_name(const struct stasis_topic *topic) return topic->name; } -/*! \private */ +/*! \internal */ struct stasis_subscription { /*! Unique ID for this subscription */ char *uniqueid; @@ -264,7 +264,7 @@ static int topic_add_subscription(struct stasis_topic *topic, struct stasis_subs } /*! - * \private + * \internal * \brief Information needed to dispatch a message to a subscription */ struct dispatch { |