diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-11-21 19:18:04 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-11-21 19:18:04 +0000 |
commit | 8ac6eb4e0b3f5e198d65637dbc08897722f7f37f (patch) | |
tree | e44f6de1bcef405f4403213e4f335bff324956d2 /channels | |
parent | 7e1e2a70eedffb582bfa2ab16dce3454632c6bf3 (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-x | channels/chan_sip.c | 55 |
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; } |