summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xapps/app_dial.c7
-rwxr-xr-xchannels/chan_sip.c8
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 */