From: Mark Spencer Date: Fri, 25 Jun 2004 18:23:06 +0000 (+0000) Subject: Handle URL encoded stuff in pedantic checking X-Git-Tag: 1.0.0-rc1~155 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fe4b2401bdcfaf351a4028cbfee0f2f37c0a23ea;p=thirdparty%2Fasterisk.git Handle URL encoded stuff in pedantic checking git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3303 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/channels/chan_sip.c b/channels/chan_sip.c index cf7462a825..d66ffd1d78 100755 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -866,6 +866,30 @@ static int send_request(struct sip_pvt *p, struct sip_request *req, int reliable return res; } +static void url_decode(char *s) +{ + char *o = s; + unsigned int tmp; + while(*s) { + switch(*s) { + case '%': + if (strlen(s) > 2) { + if (sscanf(s + 1, "%2x", &tmp) == 1) { + *o = tmp; + s += 2; /* Will be incremented once more when we break out */ + break; + } + } + /* Fall through if something wasn't right with the formatting */ + default: + *o = *s; + } + s++; + o++; + } + *o = '\0'; +} + /*--- ditch_braces: Pick out text in braces from character string ---*/ static char *ditch_braces(char *tmp) { @@ -1600,8 +1624,8 @@ static int hangup_sip2cause(int cause) switch(cause) { case 404: /* Not found */ return AST_CAUSE_UNALLOCATED; - case 483: /* Too many hops */ - return AST_CAUSE_FAILURE; + case 483: /* Too many hops */ + return AST_CAUSE_FAILURE; case 486: return AST_CAUSE_BUSY; default: @@ -4656,6 +4680,8 @@ static int get_destination(struct sip_pvt *p, struct sip_request *oreq) } else strncpy(p->fromdomain, fr, sizeof(p->fromdomain) - 1); } + if (pedanticsipchecking) + url_decode(c); if (sip_debug_test_pvt(p)) ast_verbose("Looking for %s in %s\n", c, p->context); if (ast_exists_extension(NULL, p->context, c, 1, fr) ||