Consider "from" when getting destination (bug #368)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@1623 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
parent
737799dcdf
commit
4cf424c578
|
@ -3543,6 +3543,7 @@ static int get_rdnis(struct sip_pvt *p, struct sip_request *oreq)
|
||||||
static int get_destination(struct sip_pvt *p, struct sip_request *oreq)
|
static int get_destination(struct sip_pvt *p, struct sip_request *oreq)
|
||||||
{
|
{
|
||||||
char tmp[256] = "", *c, *a;
|
char tmp[256] = "", *c, *a;
|
||||||
|
char tmpf[256]= "", *fr;
|
||||||
struct sip_request *req;
|
struct sip_request *req;
|
||||||
|
|
||||||
req = oreq;
|
req = oreq;
|
||||||
|
@ -3551,6 +3552,13 @@ static int get_destination(struct sip_pvt *p, struct sip_request *oreq)
|
||||||
if (req->rlPart2)
|
if (req->rlPart2)
|
||||||
strncpy(tmp, req->rlPart2, sizeof(tmp) - 1);
|
strncpy(tmp, req->rlPart2, sizeof(tmp) - 1);
|
||||||
c = ditch_braces(tmp);
|
c = ditch_braces(tmp);
|
||||||
|
|
||||||
|
strncpy(tmpf, get_header(oreq, "From"), sizeof(tmpf) - 1);
|
||||||
|
fr = ditch_braces(tmpf);
|
||||||
|
|
||||||
|
if (fr && !strlen(fr))
|
||||||
|
fr = NULL;
|
||||||
|
|
||||||
if (strncmp(c, "sip:", 4)) {
|
if (strncmp(c, "sip:", 4)) {
|
||||||
ast_log(LOG_WARNING, "Huh? Not a SIP header (%s)?\n", c);
|
ast_log(LOG_WARNING, "Huh? Not a SIP header (%s)?\n", c);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -3561,14 +3569,14 @@ static int get_destination(struct sip_pvt *p, struct sip_request *oreq)
|
||||||
}
|
}
|
||||||
if (sipdebug)
|
if (sipdebug)
|
||||||
ast_verbose("Looking for %s in %s\n", c, p->context);
|
ast_verbose("Looking for %s in %s\n", c, p->context);
|
||||||
if (ast_exists_extension(NULL, p->context, c, 1, NULL) ||
|
if (ast_exists_extension(NULL, p->context, c, 1, fr) ||
|
||||||
!strcmp(c, ast_pickup_ext())) {
|
!strcmp(c, ast_pickup_ext())) {
|
||||||
if (!oreq)
|
if (!oreq)
|
||||||
strncpy(p->exten, c, sizeof(p->exten) - 1);
|
strncpy(p->exten, c, sizeof(p->exten) - 1);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ast_canmatch_extension(NULL, p->context, c, 1, NULL) ||
|
if (ast_canmatch_extension(NULL, p->context, c, 1, fr) ||
|
||||||
!strncmp(c, ast_pickup_ext(),strlen(c))) {
|
!strncmp(c, ast_pickup_ext(),strlen(c))) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
Reference in New Issue