diff options
author | Mark Spencer <markster@digium.com> | 2004-08-27 03:16:16 +0000 |
---|---|---|
committer | Mark Spencer <markster@digium.com> | 2004-08-27 03:16:16 +0000 |
commit | cab4557006f857f0037d896fc9f7569d6884eaaa (patch) | |
tree | 35f3bd4ac6b339ec16b38996f332ae7b5aa37c3f | |
parent | f1be7d7ffc7a2565f7cc919ad23e7411bc5f768b (diff) |
When detecting a hairpin, redirect to the appropriate local extension (bug #1974)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3662 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rwxr-xr-x | apps/app_dial.c | 7 | ||||
-rwxr-xr-x | channels/chan_sip.c | 8 |
2 files changed, 12 insertions, 3 deletions
diff --git a/apps/app_dial.c b/apps/app_dial.c index b32ab2067..0bc754c3f 100755 --- a/apps/app_dial.c +++ b/apps/app_dial.c @@ -250,10 +250,11 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in, struct localu if (!o->chan->callerid) ast_log(LOG_WARNING, "Out of memory\n"); } else { - if (in->callerid) + if (in->callerid) { o->chan->callerid = strdup(in->callerid); - if (!o->chan->callerid) - ast_log(LOG_WARNING, "Out of memory\n"); + if (!o->chan->callerid) + ast_log(LOG_WARNING, "Out of memory\n"); + } strncpy(o->chan->accountcode, in->accountcode, sizeof(o->chan->accountcode) - 1); o->chan->cdrflags = in->cdrflags; } diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 4f807815a..7c235d537 100755 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -6719,6 +6719,14 @@ static void handle_response(struct sip_pvt *p, int resp, char *rest, struct sip_ update_user_counter(p, DEC_IN_USE); } break; + case 482: /* SIP is incapable of performing a hairpin call, which + is yet another failure of not having a layer 2 (again, YAY + IETF for thinking ahead). So we treat this as a call + forward and hope we end up at the right place... */ + ast_log(LOG_DEBUG, "Hairpin detected, setting up call forward for what it's worth\n"); + if (p->owner) + snprintf(p->owner->call_forward, sizeof(p->owner->call_forward), "Local/%s@%s", p->username, p->context); + /* Fall through */ case 486: /* Busy here */ case 600: /* Busy everywhere */ case 603: /* Decline */ |