summaryrefslogtreecommitdiff
path: root/channels
diff options
context:
space:
mode:
authorOlle Johansson <oej@edvina.net>2006-06-27 17:30:14 +0000
committerOlle Johansson <oej@edvina.net>2006-06-27 17:30:14 +0000
commit6895f108bde4b5debc6c935fc98e6af4e1a9e37c (patch)
treedc3cd7e1176cd3857ea04be3114e2073c5576fe7 /channels
parentb43f5638efb4d840173a69f350c728eaf4930ac1 (diff)
Inspired by issue 6742, but solved in a different way.
(Yes, I like the system name setting) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@36177 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels')
-rw-r--r--channels/chan_sip.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index c5f221111..1856c9af2 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -2175,12 +2175,20 @@ static int sip_sendtext(struct ast_channel *ast, const char *text)
return 0;
}
-/*! \brief Update peer object in realtime storage */
+/*! \brief Update peer object in realtime storage
+ If the Asterisk system name is set in asterisk.conf, we will use
+ that name and store that in the "regserver" field in the sippeers
+ table to facilitate multi-server setups.
+*/
static void realtime_update_peer(const char *peername, struct sockaddr_in *sin, const char *username, const char *fullcontact, int expirey)
{
char port[10];
char ipaddr[20];
char regseconds[20];
+
+ char *sysname = ast_config_AST_SYSTEM_NAME;
+ char *syslabel = NULL;
+
time_t nowtime = time(NULL) + expirey;
const char *fc = fullcontact ? "fullcontact" : NULL;
@@ -2188,9 +2196,14 @@ static void realtime_update_peer(const char *peername, struct sockaddr_in *sin,
ast_inet_ntoa(ipaddr, sizeof(ipaddr), sin->sin_addr);
snprintf(port, sizeof(port), "%d", ntohs(sin->sin_port));
+ if (ast_strlen_zero(sysname)) /* No system name, disable this */
+ sysname = NULL;
+ else
+ syslabel = "regserver";
+
ast_update_realtime("sippeers", "name", peername, "ipaddr", ipaddr,
"port", port, "regseconds", regseconds,
- "username", username, fc, fullcontact, NULL); /* note fc _can_ be NULL */
+ "username", username, fc, fullcontact, syslabel, sysname, NULL); /* note fc _can_ be NULL */
}
/*! \brief Automatically add peer extension to dial plan */
@@ -7141,7 +7154,7 @@ static void destroy_association(struct sip_peer *peer)
{
if (!ast_test_flag(&global_flags[1], SIP_PAGE2_IGNOREREGEXPIRE)) {
if (ast_test_flag(&peer->flags[1], SIP_PAGE2_RT_FROMCONTACT))
- ast_update_realtime("sippeers", "name", peer->name, "fullcontact", "", "ipaddr", "", "port", "", "regseconds", "0", "username", "", NULL);
+ ast_update_realtime("sippeers", "name", peer->name, "fullcontact", "", "ipaddr", "", "port", "", "regseconds", "0", "username", "", "regserver", "", NULL);
else
ast_db_del("SIP/Registry", peer->name);
}