diff -ruN asterisk-1.2.31.1-ori/channels/chan_sip.c asterisk-1.2.31.1/channels/chan_sip.c
--- asterisk-1.2.31.1-ori/channels/chan_sip.c 2008-06-03 21:30:02.000000000 +0200
+++ asterisk-1.2.31.1/channels/chan_sip.c 2009-03-03 16:13:39.000000000 +0100
@@ -359,6 +359,8 @@
static int pedanticsipchecking = 0; /*!< Extra checking ? Default off */
+static int urlencodesip = 0; /*!< URL encode ? Default off */
+
static int autocreatepeer = 0; /*!< Auto creation of peers at registration? Default off. */
static int relaxdtmf = 0;
@@ -5022,7 +5024,7 @@
else /* Save for any further attempts */
ast_copy_string(p->fromname, n, sizeof(p->fromname));
- if (pedanticsipchecking) {
+ if ( (pedanticsipchecking) || (urlencodesip) ) {
ast_uri_encode(n, tmp, sizeof(tmp), 0);
n = tmp;
ast_uri_encode(l, tmp2, sizeof(tmp2), 0);
@@ -5043,7 +5045,7 @@
ast_build_string(&invite, &invite_max, "sip:");
if (!ast_strlen_zero(p->username)) {
n = p->username;
- if (pedanticsipchecking) {
+ if ( (pedanticsipchecking) || (urlencodesip) ) {
ast_uri_encode(n, tmp, sizeof(tmp), 0);
n = tmp;
}
@@ -6635,7 +6637,7 @@
*t = '\0';
ast_copy_string(tmp, get_header(req, "To"), sizeof(tmp));
- if (pedanticsipchecking)
+ if ( (pedanticsipchecking) || (urlencodesip) )
ast_uri_decode(tmp);
c = get_in_brackets(tmp);
@@ -6831,13 +6833,13 @@
return -1;
}
from += 4;
- if (pedanticsipchecking) {
+ if ( (pedanticsipchecking) || (urlencodesip) ) {
ast_uri_decode(from);
}
} else
from = NULL;
- if (pedanticsipchecking) {
+ if ( (pedanticsipchecking) || (urlencodesip) ) {
ast_uri_decode(uri);
}
@@ -6963,7 +6965,7 @@
ast_log(LOG_WARNING, "No Referrred-By Header That's not illegal\n");
return -1;
} else {
- if (pedanticsipchecking) {
+ if ( (pedanticsipchecking) || (urlencodesip) ) {
ast_uri_decode(h_referred_by);
}
referred_by = get_in_brackets(h_referred_by);
@@ -7265,7 +7267,7 @@
*t = '\0';
ast_copy_string(from, get_header(req, "From"), sizeof(from));
- if (pedanticsipchecking)
+ if ( (pedanticsipchecking) || (urlencodesip) )
ast_uri_decode(from);
memset(calleridname,0,sizeof(calleridname));
@@ -8508,6 +8510,7 @@
ast_cli(fd, " MWI NOTIFY mime type: %s\n", default_notifymime);
ast_cli(fd, " DNS SRV lookup: %s\n", srvlookup ? "Yes" : "No");
ast_cli(fd, " Pedantic SIP support: %s\n", pedanticsipchecking ? "Yes" : "No");
+ ast_cli(fd, " URL encode SIP: %s\n", urlencodesip ? "Yes" : "No");
ast_cli(fd, " Reg. max duration: %d secs\n", max_expiry);
ast_cli(fd, " Reg. default duration: %d secs\n", default_expiry);
ast_cli(fd, " Outbound reg. timeout: %d secs\n", global_reg_timeout);
@@ -12821,6 +12824,7 @@
global_rtpkeepalive = 0;
global_rtautoclear = 120;
pedanticsipchecking = 0;
+ urlencodesip = 0;
global_reg_timeout = DEFAULT_REGISTRATION_TIMEOUT;
global_regattempts_max = 0;
ast_clear_flag(&global_flags, AST_FLAGS_ALL);
@@ -12930,6 +12934,8 @@
srvlookup = ast_true(v->value);
} else if (!strcasecmp(v->name, "pedantic")) {
pedanticsipchecking = ast_true(v->value);
+ } else if (!strcasecmp(v->name, "urlencode")) {
+ urlencodesip = ast_true(v->value);
} else if (!strcasecmp(v->name, "maxexpirey") || !strcasecmp(v->name, "maxexpiry")) {
max_expiry = atoi(v->value);
if (max_expiry < 1)