diff options
author | Jonathan Rose <jrose@digium.com> | 2013-05-03 18:03:26 +0000 |
---|---|---|
committer | Jonathan Rose <jrose@digium.com> | 2013-05-03 18:03:26 +0000 |
commit | 1eac5a798899713501ae9f647ecd8b035f74eecd (patch) | |
tree | 34e40bff5805f7a117856f4078773aea16f2f8de /channels/chan_iax2.c | |
parent | e236c2ea36f9b9e84e40ebf9cf0baf8d0ce04322 (diff) |
Stasis: Convert network change events into network change stasis messages
(issue ASTERISK-21103)
Review: https://reviewboard.asterisk.org/r/2490/
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@387594 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels/chan_iax2.c')
-rw-r--r-- | channels/chan_iax2.c | 45 |
1 files changed, 25 insertions, 20 deletions
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index a4ea9b579..852e4598b 100644 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -283,9 +283,9 @@ static char default_parkinglot[AST_MAX_CONTEXT]; static char language[MAX_LANGUAGE] = ""; static char regcontext[AST_MAX_CONTEXT] = ""; -static struct ast_event_sub *network_change_event_subscription; /*!< subscription id for network change events */ +static struct stasis_subscription *network_change_sub; /*!< subscription id for network change events */ static struct stasis_subscription *acl_change_sub; /*!< subscription id for ACL change events */ -static int network_change_event_sched_id = -1; +static int network_change_sched_id = -1; static int maxauthreq = 3; static int max_retries = 4; @@ -1254,7 +1254,7 @@ static void build_rand_pad(unsigned char *buf, ssize_t len); static int get_unused_callno(enum callno_type type, int validated, callno_entry *entry); static int replace_callno(const void *obj); static void sched_delay_remove(struct sockaddr_in *sin, callno_entry entry); -static void network_change_event_cb(const struct ast_event *, void *); +static void network_change_stasis_cb(void *data, struct stasis_subscription *sub, struct stasis_topic *topic, struct stasis_message *message); static void acl_change_stasis_cb(void *data, struct stasis_subscription *sub, struct stasis_topic *topic, struct stasis_message *message); static struct ast_channel_tech iax2_tech = { @@ -1323,18 +1323,18 @@ static void mwi_event_cb(void *userdata, struct stasis_subscription *sub, struct * is time to send MWI, since it is only sent with a REGACK. */ } -static void network_change_event_subscribe(void) +static void network_change_stasis_subscribe(void) { - if (!network_change_event_subscription) { - network_change_event_subscription = ast_event_subscribe(AST_EVENT_NETWORK_CHANGE, - network_change_event_cb, "IAX2 Network Change", NULL, AST_EVENT_IE_END); + if (!network_change_sub) { + network_change_sub = stasis_subscribe(ast_system_topic(), + network_change_stasis_cb, NULL); } } -static void network_change_event_unsubscribe(void) +static void network_change_stasis_unsubscribe(void) { - if (network_change_event_subscription) { - network_change_event_subscription = ast_event_unsubscribe(network_change_event_subscription); + if (network_change_sub) { + network_change_sub = stasis_unsubscribe(network_change_sub); } } @@ -1353,10 +1353,10 @@ static void acl_change_stasis_unsubscribe(void) } } -static int network_change_event_sched_cb(const void *data) +static int network_change_sched_cb(const void *data) { struct iax2_registry *reg; - network_change_event_sched_id = -1; + network_change_sched_id = -1; AST_LIST_LOCK(®istrations); AST_LIST_TRAVERSE(®istrations, reg, entry) { iax2_do_register(reg); @@ -1366,13 +1366,18 @@ static int network_change_event_sched_cb(const void *data) return 0; } -static void network_change_event_cb(const struct ast_event *event, void *userdata) +static void network_change_stasis_cb(void *data, struct stasis_subscription *sub, + struct stasis_topic *topic, struct stasis_message *message) { - ast_debug(1, "IAX, got a network change event, renewing all IAX registrations.\n"); - if (network_change_event_sched_id == -1) { - network_change_event_sched_id = iax2_sched_add(sched, 1000, network_change_event_sched_cb, NULL); + /* This callback is only concerned with network change messages from the system topic. */ + if (stasis_message_type(message) != ast_network_change_type()) { + return; } + ast_verb(1, "IAX, got a network change message, renewing all IAX registrations.\n"); + if (network_change_sched_id == -1) { + network_change_sched_id = iax2_sched_add(sched, 1000, network_change_sched_cb, NULL); + } } static void acl_change_stasis_cb(void *data, struct stasis_subscription *sub, @@ -13442,9 +13447,9 @@ static int set_config(const char *config_file, int reload, int forced) } if (subscribe_network_change) { - network_change_event_subscribe(); + network_change_stasis_subscribe(); } else { - network_change_event_unsubscribe(); + network_change_stasis_unsubscribe(); } if (defaultsockfd < 0) { @@ -14287,7 +14292,7 @@ static int __unload_module(void) struct ast_context *con; int x; - network_change_event_unsubscribe(); + network_change_stasis_unsubscribe(); acl_change_stasis_unsubscribe(); ast_manager_unregister("IAXpeers"); @@ -14789,7 +14794,7 @@ static int load_module(void) ast_realtime_require_field("iaxpeers", "name", RQ_CHAR, 10, "ipaddr", RQ_CHAR, 15, "port", RQ_UINTEGER2, 5, "regseconds", RQ_UINTEGER2, 6, SENTINEL); - network_change_event_subscribe(); + network_change_stasis_subscribe(); return AST_MODULE_LOAD_SUCCESS; } |