aboutsummaryrefslogtreecommitdiffstats
path: root/channels
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2004-11-21 19:18:04 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2004-11-21 19:18:04 +0000
commit8ac6eb4e0b3f5e198d65637dbc08897722f7f37f (patch)
treee44f6de1bcef405f4403213e4f335bff324956d2 /channels
parent7e1e2a70eedffb582bfa2ab16dce3454632c6bf3 (diff)
Fix variable reset in SIP (bug #2916)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@4303 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels')
-rwxr-xr-xchannels/chan_sip.c55
1 files changed, 42 insertions, 13 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index ef2c9d944..dbcd5e4e5 100755
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -124,15 +124,18 @@ static char *config = "sip.conf";
static char default_useragent[AST_MAX_EXTENSION] = DEFAULT_USERAGENT;
-static char default_context[AST_MAX_EXTENSION] = "default";
+#define DEFAULT_CONTEXT "default"
+static char default_context[AST_MAX_EXTENSION] = DEFAULT_CONTEXT;
static char default_language[MAX_LANGUAGE] = "";
-static char default_callerid[AST_MAX_EXTENSION] = "asterisk";
+#define DEFAULT_CALLERID "asterisk"
+static char default_callerid[AST_MAX_EXTENSION] = DEFAULT_CALLERID;
static char default_fromdomain[AST_MAX_EXTENSION] = "";
-static char notifymime[AST_MAX_EXTENSION] = "application/simple-message-summary";
+#define DEFAULT_NOTIFYMIME "application/simple-message-summary"
+static char default_notifymime[AST_MAX_EXTENSION] = DEFAULT_NOTIFYMIME;
static int srvlookup = 0; /* SRV Lookup on or off. Default is off, RFC behavior is on */
@@ -199,7 +202,8 @@ static char global_realm[AST_MAX_EXTENSION] = "asterisk"; /* Default realm */
static char regcontext[AST_MAX_EXTENSION] = ""; /* Context for auto-extensions */
/* Expire slowly */
-static int expiry = 900;
+#define DEFAULT_EXPIRY 900
+static int expiry = DEFAULT_EXPIRY;
static struct sched_context *sched;
static struct io_context *io;
@@ -3901,7 +3905,7 @@ static int transmit_notify_with_mwi(struct sip_pvt *p, int newmsgs, int oldmsgs)
char clen[20];
initreqprep(&req, p, "NOTIFY", NULL);
add_header(&req, "Event", "message-summary");
- add_header(&req, "Content-Type", notifymime);
+ add_header(&req, "Content-Type", default_notifymime);
snprintf(tmp, sizeof(tmp), "Messages-Waiting: %s\r\n", newmsgs ? "yes" : "no");
snprintf(tmp2, sizeof(tmp2), "Voice-Message: %d/%d\r\n", newmsgs, oldmsgs);
@@ -8573,6 +8577,11 @@ static struct sip_peer *build_peer(const char *name, struct ast_variable *v, int
}
/*--- reload_config: Re-read SIP.conf config file ---*/
+/* This function reloads all config data, except for
+ active peers (with registrations). They will only
+ change configuration data at restart, not at reload.
+ SIP debug and recordhistory state will not change
+ */
static int reload_config(void)
{
struct ast_config *cfg;
@@ -8587,8 +8596,6 @@ static int reload_config(void)
int oldport = ntohs(bindaddr.sin_port);
char iabuf[INET_ADDRSTRLEN];
- global_dtmfmode = SIP_DTMF_RFC2833;
- global_promiscredir = 0;
if (gethostname(ourhost, sizeof(ourhost))) {
ast_log(LOG_WARNING, "Unable to get hostname, SIP disabled\n");
@@ -8602,28 +8609,47 @@ static int reload_config(void)
return 0;
}
- global_nat = SIP_NAT_RFC3581;
sip_prefs_free();
+ /* Reset IP addresses */
memset(&bindaddr, 0, sizeof(bindaddr));
memset(&localaddr, 0, sizeof(localaddr));
memset(&externip, 0, sizeof(externip));
- /* Initialize some reasonable defaults */
- strncpy(default_context, "default", sizeof(default_context) - 1);
+ /* Initialize some reasonable defaults at SIP reload */
+ global_nat = SIP_NAT_RFC3581;
+ strncpy(default_context, DEFAULT_CONTEXT, sizeof(default_context) - 1);
default_language[0] = '\0';
default_fromdomain[0] = '\0';
strncpy(default_useragent, DEFAULT_USERAGENT, sizeof(default_useragent) - 1);
- strncpy(global_realm, "asterisk", sizeof(global_realm) - 1);
+ strncpy(default_notifymime, DEFAULT_NOTIFYMIME, sizeof(default_notifymime) - 1);
global_realm[sizeof(global_realm)-1] = '\0';
+ strncpy(global_musicclass, "default", sizeof(global_musicclass) - 1);
+ strncpy(default_callerid, DEFAULT_CALLERID, sizeof(default_callerid) - 1);
global_canreinvite = REINVITE_INVITE;
videosupport = 0;
relaxdtmf = 0;
ourport = DEFAULT_SIP_PORT;
global_rtptimeout = 0;
global_rtpholdtimeout = 0;
- pedanticsipchecking=0;
+ pedanticsipchecking = 0;
+ global_dtmfmode = SIP_DTMF_RFC2833;
+ global_promiscredir = 0;
+ global_trustrpid = 0;
+ global_progressinband = 0;
+ global_mwitime = DEFAULT_MWITIME;
+ srvlookup = 0;
+ autocreatepeer = 0;
+ regcontext[0] = '\0';
+ tos = 0;
+ expiry = DEFAULT_EXPIRY;
+
+#ifdef OSP_SUPPORT
+ global_ospauth = 0; /* OSP = Open Settlement Protocol */
+#endif
+
+ /* Read the [general] config section of sip.conf (or from realtime config) */
v = ast_variable_browse(cfg, "general");
while(v) {
/* Create the interface list */
@@ -8669,7 +8695,7 @@ static int reload_config(void)
} else if (!strcasecmp(v->name, "videosupport")) {
videosupport = ast_true(v->value);
} else if (!strcasecmp(v->name, "notifymimetype")) {
- strncpy(notifymime, v->value, sizeof(notifymime) - 1);
+ strncpy(default_notifymime, v->value, sizeof(default_notifymime) - 1);
} else if (!strcasecmp(v->name, "musicclass")) {
strncpy(global_musicclass, v->value, sizeof(global_musicclass) - 1);
} else if (!strcasecmp(v->name, "language")) {
@@ -8796,6 +8822,7 @@ static int reload_config(void)
v = v->next;
}
+ /* Load peers, users and friends */
cat = ast_category_browse(cfg, NULL);
while(cat) {
if (strcasecmp(cat, "general")) {
@@ -8827,6 +8854,7 @@ static int reload_config(void)
cat = ast_category_browse(cfg, cat);
}
+ /* Find our IP address */
if (ntohl(bindaddr.sin_addr.s_addr)) {
memcpy(&__ourip, &bindaddr.sin_addr, sizeof(__ourip));
} else {
@@ -8878,6 +8906,7 @@ static int reload_config(void)
}
ast_mutex_unlock(&netlock);
+ /* Release configuration from memory */
ast_destroy(cfg);
return 0;
}