[asterisk-commits] dvossel: branch dvossel/stun_monitor r281725 - /team/dvossel/stun_monitor/cha...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Wed Aug 11 10:19:29 CDT 2010
Author: dvossel
Date: Wed Aug 11 10:19:25 2010
New Revision: 281725
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=281725
Log:
iax outbound registrations now renew on network change event
Modified:
team/dvossel/stun_monitor/channels/chan_iax2.c
team/dvossel/stun_monitor/channels/chan_sip.c
Modified: team/dvossel/stun_monitor/channels/chan_iax2.c
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/stun_monitor/channels/chan_iax2.c?view=diff&rev=281725&r1=281724&r2=281725
==============================================================================
--- team/dvossel/stun_monitor/channels/chan_iax2.c (original)
+++ team/dvossel/stun_monitor/channels/chan_iax2.c Wed Aug 11 10:19:25 2010
@@ -268,6 +268,8 @@
static char language[MAX_LANGUAGE] = "";
static char regcontext[AST_MAX_CONTEXT] = "";
+static struct ast_event_sub *network_change_event_subscription = NULL; /*!< subscription id for network change events */
+
static int maxauthreq = 3;
static int max_retries = 4;
static int ping_time = 21;
@@ -1201,6 +1203,7 @@
static struct callno_entry *get_unused_callno(int trunk, int validated);
static int replace_callno(const void *obj);
static void sched_delay_remove(struct sockaddr_in *sin, struct callno_entry *callno_entry);
+static void network_change_event_cb(const struct ast_event *, void *);
static const struct ast_channel_tech iax2_tech = {
.type = "IAX2",
@@ -1236,6 +1239,36 @@
* is time to send MWI, since it is only sent with a REGACK. */
}
+static inline void network_change_event_subscribe(void)
+{
+ if (!network_change_event_subscription) {
+ network_change_event_subscription = ast_event_subscribe(AST_EVENT_NETWORK_CHANGE,
+ network_change_event_cb,
+ "SIP Network Change ",
+ NULL);
+ }
+}
+
+static inline void network_change_event_unsubscribe(void)
+{
+ if (network_change_event_subscription) {
+ network_change_event_subscription = ast_event_unsubscribe(network_change_event_subscription);
+ }
+}
+
+static void network_change_event_cb(const struct ast_event *event, void *userdata)
+{
+ struct iax2_registry *reg;
+ if (option_debug) {
+ ast_log(LOG_DEBUG, "IAX, got a network change event, renewing all IAX registrations.\n");
+ }
+ AST_LIST_LOCK(®istrations);
+ AST_LIST_TRAVERSE(®istrations, reg, entry)
+ iax2_do_register(reg);
+ AST_LIST_UNLOCK(®istrations);
+}
+
+
/*! \brief Send manager event at call setup to link between Asterisk channel name
and IAX2 call identifiers */
static void iax2_ami_channelupdate(struct chan_iax2_pvt *pvt)
@@ -1245,7 +1278,6 @@
pvt->owner ? pvt->owner->name : "",
pvt->callno, pvt->peercallno, pvt->peer ? pvt->peer : "");
}
-
static struct ast_datastore_info iax2_variable_datastore_info = {
.type = "IAX2_VARIABLE",
@@ -13097,6 +13129,14 @@
if (add_calltoken_ignore(v->value)) {
ast_log(LOG_WARNING, "Invalid calltokenoptional address range - '%s' line %d\n", v->value, v->lineno);
}
+ } else if (!strcasecmp(v->name, "subscribe_network_change_event")) {
+ if (ast_true(v->value)) {
+ network_change_event_subscribe();
+ } else if (ast_false(v->value)) {
+ network_change_event_unsubscribe();
+ } else {
+ ast_log(LOG_WARNING, "subscribe_network_change_event value %s is not valid at line %d.\n", v->value, v->lineno);
+ }
} else if (!strcasecmp(v->name, "shrinkcallerid")) {
if (ast_true(v->value)) {
ast_set_flag64((&globalflags), IAX_SHRINKCALLERID);
@@ -14050,6 +14090,8 @@
struct ast_context *con;
int x;
+ network_change_event_unsubscribe();
+
ast_manager_unregister("IAXpeers");
ast_manager_unregister("IAXpeerlist");
ast_manager_unregister("IAXnetstats");
@@ -14530,6 +14572,8 @@
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();
+
return AST_MODULE_LOAD_SUCCESS;
}
Modified: team/dvossel/stun_monitor/channels/chan_sip.c
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/stun_monitor/channels/chan_sip.c?view=diff&rev=281725&r1=281724&r2=281725
==============================================================================
--- team/dvossel/stun_monitor/channels/chan_sip.c (original)
+++ team/dvossel/stun_monitor/channels/chan_sip.c Wed Aug 11 10:19:25 2010
@@ -762,7 +762,7 @@
static struct ast_flags global_flags[3] = {{0}}; /*!< global SIP_ flags */
static int global_t38_maxdatagram; /*!< global T.38 FaxMaxDatagram override */
-static struct ast_event_sub *network_change_event_subscription = NULL; /*!< subscription id for network change events */
+static struct ast_event_sub *network_change_event_subscription = NULL; /*!< subscription id for network change events */
static char used_context[AST_MAX_CONTEXT]; /*!< name of automatically created context for unloading */
@@ -28405,6 +28405,8 @@
struct ast_context *con;
struct ao2_iterator i;
+ network_change_event_unsubscribe();
+
ast_sched_dump(sched);
/* First, take us out of the channel type list */
@@ -28535,7 +28537,6 @@
ast_cc_agent_unregister(&sip_cc_agent_callbacks);
sip_reqresp_parser_exit();
- network_change_event_unsubscribe();
sip_unregister_tests();
return 0;
More information about the asterisk-commits
mailing list