mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-06 12:36:58 +00:00
don't queue a congestion frame on a channel that will be immediately hung up anyway
clean up/organize code block git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@8654 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -6940,29 +6940,23 @@ retryowner:
|
|||||||
iax2_destroy_nolock(fr.callno);
|
iax2_destroy_nolock(fr.callno);
|
||||||
break;
|
break;
|
||||||
case IAX_COMMAND_REJECT:
|
case IAX_COMMAND_REJECT:
|
||||||
memset(&f, 0, sizeof(f));
|
|
||||||
f.frametype = AST_FRAME_CONTROL;
|
|
||||||
f.subclass = AST_CONTROL_CONGESTION;
|
|
||||||
|
|
||||||
/* Set hangup cause according to remote */
|
/* Set hangup cause according to remote */
|
||||||
if (ies.causecode && iaxs[fr.callno]->owner)
|
if (ies.causecode && iaxs[fr.callno]->owner)
|
||||||
iaxs[fr.callno]->owner->hangupcause = ies.causecode;
|
iaxs[fr.callno]->owner->hangupcause = ies.causecode;
|
||||||
|
|
||||||
iax2_queue_frame(fr.callno, &f);
|
if (!ast_test_flag(iaxs[fr.callno], IAX_PROVISION)) {
|
||||||
if (ast_test_flag(iaxs[fr.callno], IAX_PROVISION)) {
|
if (iaxs[fr.callno]->owner && authdebug)
|
||||||
/* Send ack immediately, before we destroy */
|
ast_log(LOG_WARNING, "Call rejected by %s: %s\n",
|
||||||
send_command_immediate(iaxs[fr.callno], AST_FRAME_IAX, IAX_COMMAND_ACK, fr.ts, NULL, 0,fr.iseqno);
|
ast_inet_ntoa(iabuf, sizeof(iabuf), iaxs[fr.callno]->addr.sin_addr),
|
||||||
iax2_destroy_nolock(fr.callno);
|
ies.cause ? ies.cause : "<Unknown>");
|
||||||
break;
|
ast_log(LOG_DEBUG, "Immediately destroying %d, having received reject\n",
|
||||||
|
fr.callno);
|
||||||
}
|
}
|
||||||
if (iaxs[fr.callno]->owner) {
|
|
||||||
if (authdebug)
|
|
||||||
ast_log(LOG_WARNING, "Call rejected by %s: %s\n", ast_inet_ntoa(iabuf, sizeof(iabuf), iaxs[fr.callno]->addr.sin_addr), ies.cause ? ies.cause : "<Unknown>");
|
|
||||||
}
|
|
||||||
ast_log(LOG_DEBUG, "Immediately destroying %d, having received reject\n", fr.callno);
|
|
||||||
/* Send ack immediately, before we destroy */
|
/* Send ack immediately, before we destroy */
|
||||||
send_command_immediate(iaxs[fr.callno], AST_FRAME_IAX, IAX_COMMAND_ACK, fr.ts, NULL, 0,fr.iseqno);
|
send_command_immediate(iaxs[fr.callno], AST_FRAME_IAX, IAX_COMMAND_ACK,
|
||||||
iaxs[fr.callno]->error = EPERM;
|
fr.ts, NULL, 0, fr.iseqno);
|
||||||
|
if (!ast_test_flag(iaxs[fr.callno], IAX_PROVISION))
|
||||||
|
iaxs[fr.callno]->error = EPERM;
|
||||||
iax2_destroy_nolock(fr.callno);
|
iax2_destroy_nolock(fr.callno);
|
||||||
break;
|
break;
|
||||||
case IAX_COMMAND_TRANSFER:
|
case IAX_COMMAND_TRANSFER:
|
||||||
|
Reference in New Issue
Block a user