Index: channels/chan_sip.c =================================================================== --- channels/chan_sip.c (revision 295236) +++ channels/chan_sip.c (working copy) @@ -5631,8 +5631,10 @@ } /*! \brief Convert SIP hangup causes to Asterisk hangup causes */ -int hangup_sip2cause(int cause) +int hangup_sip2cause(int cause, char* text) { + char *ptr; + /* Possible values taken from causes.h */ switch(cause) { @@ -5662,8 +5664,10 @@ return AST_CAUSE_INTERWORKING; case 420: /* Bad extension */ return AST_CAUSE_NO_ROUTE_DESTINATION; - case 480: /* No answer */ - return AST_CAUSE_NO_ANSWER; + case 480: /* Temporarily unavailabe / Do not disturb */ + ptr=strcasestr(text, "do"); + if (ptr) if (strcasestr(text, "disturb")>ptr) return AST_CAUSE_CALL_REJECTED; + return AST_CAUSE_UNAVAILABLE; case 481: /* No answer */ return AST_CAUSE_INTERWORKING; case 482: /* Loop detected */ @@ -9847,7 +9851,7 @@ } else { int respcode; if (sscanf(msg, "%30d ", &respcode)) - hangupcause = hangup_sip2cause(respcode); + hangupcause = hangup_sip2cause(respcode, ""); } if (hangupcause) { @@ -19804,7 +19808,7 @@ } if (!owner->hangupcause) - owner->hangupcause = hangup_sip2cause(resp); + owner->hangupcause = hangup_sip2cause(resp,REQ_OFFSET_TO_STR(req,rlPart2)); } if (p->socket.type == SIP_TRANSPORT_UDP) { Index: channels/sip/include/sip_utils.h =================================================================== --- channels/sip/include/sip_utils.h (revision 295236) +++ channels/sip/include/sip_utils.h (working copy) @@ -44,7 +44,7 @@ /*! \brief Convert SIP hangup causes to Asterisk hangup causes */ -int hangup_sip2cause(int cause); +int hangup_sip2cause(int cause, char *text); /*! \brief Convert Asterisk hangup causes to SIP codes \verbatim Index: include/asterisk/causes.h =================================================================== --- include/asterisk/causes.h (revision 295236) +++ include/asterisk/causes.h (working copy) @@ -63,6 +63,7 @@ - AST_CAUSE_SWITCH_CONGESTION 42 - AST_CAUSE_ACCESS_INFO_DISCARDED 43 - AST_CAUSE_REQUESTED_CHAN_UNAVAIL 44 + - AST_CAUSE_UNAVAILABLE 48 - AST_CAUSE_FACILITY_NOT_SUBSCRIBED 50 - AST_CAUSE_OUTGOING_CALL_BARRED 52 - AST_CAUSE_INCOMING_CALL_BARRED 54 @@ -122,6 +123,7 @@ #define AST_CAUSE_SWITCH_CONGESTION 42 #define AST_CAUSE_ACCESS_INFO_DISCARDED 43 #define AST_CAUSE_REQUESTED_CHAN_UNAVAIL 44 +#define AST_CAUSE_UNAVAILABLE 48 #define AST_CAUSE_FACILITY_NOT_SUBSCRIBED 50 #define AST_CAUSE_OUTGOING_CALL_BARRED 52 #define AST_CAUSE_INCOMING_CALL_BARRED 54