diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 20e47a47b21c794c699fbd4256b7de7043526fd5..07b2330d6da9446bd2a3d8f7ac3463751ec92b8f 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -5698,6 +5698,16 @@ static int hangup_sip2cause(int cause) case 606: /* Not acceptable */ return AST_CAUSE_BEARERCAPABILITY_NOTAVAIL; default: + if (cause < 500 && cause >= 400) { + /* 4xx class error that is unknown - someting wrong with our request */ + return AST_CAUSE_INTERWORKING; + } else if (cause < 600 && cause >= 500) { + /* 5xx class error - problem in the remote end */ + return AST_CAUSE_CONGESTION; + } else if (cause < 700 && cause >= 600) { + /* 6xx - global errors in the 4xx class */ + return AST_CAUSE_INTERWORKING; + } return AST_CAUSE_NORMAL; } /* Never reached */