diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index 38fb9983b6c319c344551b5bd1cd9765959f92c8..378550a9933484e958fa0f6611455633bfb6c203 100644 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -8688,6 +8688,13 @@ retryowner: iaxs[fr->callno]->videoformat = f.subclass & ~0x1; } } + if (f.frametype == AST_FRAME_CONTROL && iaxs[fr->callno]->owner) { + if (f.subclass == AST_CONTROL_BUSY) { + iaxs[fr->callno]->owner->hangupcause = AST_CAUSE_BUSY; + } else if (f.subclass == AST_CONTROL_CONGESTION) { + iaxs[fr->callno]->owner->hangupcause = AST_CAUSE_CONGESTION; + } + } if (f.frametype == AST_FRAME_IAX) { AST_SCHED_DEL(sched, iaxs[fr->callno]->initid); /* Handle the IAX pseudo frame itself */ diff --git a/main/cdr.c b/main/cdr.c index e4d5f759dc04be700bcd5d8aae393524e1cc8146..f48ddf38d198dd9d7315d7a6988a325cbbf240cb 100644 --- a/main/cdr.c +++ b/main/cdr.c @@ -754,6 +754,9 @@ int ast_cdr_disposition(struct ast_cdr *cdr, int cause) case AST_CAUSE_BUSY: ast_cdr_busy(cdr); break; + case AST_CAUSE_NO_ANSWER: + ast_cdr_noanswer(cdr); + break; case AST_CAUSE_NORMAL: break; default: