diff --git a/CHANGES b/CHANGES index c439131f1a6bf86123ecbf660fa438c5b8d92cb1..9509c94c4bcd0a1ce19cb00d1292785591207edf 100755 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,5 @@ + -- Use Q.931 standard cause codes for asterisk cause codes + -- Bug fixes from the bug tracker Asterisk 1.0-RC2 -- Additional CDR backends -- Allow muted to reconnect diff --git a/channels/chan_zap.c b/channels/chan_zap.c index 8a3b453801bef1d6f56f38a8d2207db57c69084a..b06ec1d459ac666da76d65fff9c0e74ad31e567b 100755 --- a/channels/chan_zap.c +++ b/channels/chan_zap.c @@ -604,50 +604,6 @@ static int cidrings[NUM_CADENCE_MAX] = { #define CANBUSYDETECT(p) (ISTRUNK(p) || (p->sig & (SIG_EM | SIG_EM_E1 | SIG_SF)) /* || (p->sig & __ZT_SIG_FXO) */) #define CANPROGRESSDETECT(p) (ISTRUNK(p) || (p->sig & (SIG_EM | SIG_EM_E1 | SIG_SF)) /* || (p->sig & __ZT_SIG_FXO) */) -#ifdef ZAPATA_PRI -/* translate between PRI causes and asterisk's */ -static int hangup_pri2cause(int cause) -{ - switch(cause) { - case PRI_CAUSE_USER_BUSY: - return AST_CAUSE_BUSY; - case PRI_CAUSE_NORMAL_CLEARING: - return AST_CAUSE_NORMAL; - case PRI_CAUSE_NORMAL_CIRCUIT_CONGESTION: - case PRI_CAUSE_REQUESTED_CHAN_UNAVAIL: - return AST_CAUSE_CONGESTION; - case PRI_CAUSE_UNALLOCATED: - case PRI_CAUSE_NUMBER_CHANGED: - return AST_CAUSE_UNALLOCATED; - case PRI_CAUSE_NO_USER_RESPONSE: - case PRI_CAUSE_NO_ANSWER: - return AST_CAUSE_NOANSWER; - default: - return AST_CAUSE_FAILURE; - } - /* never reached */ - return 0; -} - -/* translate between ast cause and PRI */ -static int hangup_cause2pri(int cause) -{ - switch(cause) { - case AST_CAUSE_BUSY: - return PRI_CAUSE_USER_BUSY; - case AST_CAUSE_UNALLOCATED: - return PRI_CAUSE_UNALLOCATED; - case AST_CAUSE_CONGESTION: - return PRI_CAUSE_NORMAL_CIRCUIT_CONGESTION; - case AST_CAUSE_NORMAL: - default: - return PRI_CAUSE_NORMAL_CLEARING; - } - /* never reached */ - return 0; -} -#endif - static int zt_get_index(struct ast_channel *ast, struct zt_pvt *p, int nullok) { int res; @@ -2106,7 +2062,7 @@ static int zt_hangup(struct ast_channel *ast) p->bearer->call = NULL; } else { char *cause = pbx_builtin_getvar_helper(ast,"PRI_CAUSE"); - int icause = ast->hangupcause ? hangup_cause2pri(ast->hangupcause) : -1; + int icause = ast->hangupcause ? ast->hangupcause : -1; ast_log(LOG_DEBUG, "Not yet hungup... Calling hangup once with icause, and clearing call\n"); p->alreadyhungup = 1; if (p->bearer) @@ -7510,7 +7466,7 @@ static void *pri_dchannel(void *vpri) pri_hangup_all(pri->pvts[chanpos]->master); else if (pri->pvts[chanpos]->owner) { /* Queue a BUSY instead of a hangup if our cause is appropriate */ - pri->pvts[chanpos]->owner->hangupcause = hangup_pri2cause(e->hangup.cause); + pri->pvts[chanpos]->owner->hangupcause = e->hangup.cause; switch(e->hangup.cause) { case PRI_CAUSE_USER_BUSY: pri->pvts[chanpos]->subs[SUB_REAL].needbusy =1; @@ -7565,7 +7521,7 @@ static void *pri_dchannel(void *vpri) if (pri->pvts[chanpos]->master) pri_hangup_all(pri->pvts[chanpos]->master); else if (pri->pvts[chanpos]->owner) { - pri->pvts[chanpos]->owner->hangupcause = hangup_pri2cause(e->hangup.cause); + pri->pvts[chanpos]->owner->hangupcause = e->hangup.cause; switch(e->hangup.cause) { case PRI_CAUSE_USER_BUSY: pri->pvts[chanpos]->subs[SUB_REAL].needbusy =1; diff --git a/include/asterisk/causes.h b/include/asterisk/causes.h index c77905def7c500f22418c044719ef00e3ae66107..6a6c5dc8d6a59f4f7fb0ab765e989d2544fbedff 100755 --- a/include/asterisk/causes.h +++ b/include/asterisk/causes.h @@ -14,12 +14,58 @@ #ifndef _ASTERISK_CAUSES_H #define _ASTERISK_CAUSES_H -#define AST_CAUSE_NOTDEFINED 0 -#define AST_CAUSE_NORMAL 1 -#define AST_CAUSE_BUSY 2 -#define AST_CAUSE_FAILURE 3 -#define AST_CAUSE_CONGESTION 4 -#define AST_CAUSE_UNALLOCATED 5 -#define AST_CAUSE_NOANSWER 6 +/* Causes for disconnection (from Q.931) */ +#define AST_CAUSE_UNALLOCATED 1 +#define AST_CAUSE_NO_ROUTE_TRANSIT_NET 2 +#define AST_CAUSE_NO_ROUTE_DESTINATION 3 +#define AST_CAUSE_CHANNEL_UNACCEPTABLE 6 +#define AST_CAUSE_CALL_AWARDED_DELIVERED 7 +#define AST_CAUSE_NORMAL_CLEARING 16 +#define AST_CAUSE_USER_BUSY 17 +#define AST_CAUSE_NO_USER_RESPONSE 18 +#define AST_CAUSE_NO_ANSWER 19 +#define AST_CAUSE_CALL_REJECTED 21 +#define AST_CAUSE_NUMBER_CHANGED 22 +#define AST_CAUSE_DESTINATION_OUT_OF_ORDER 27 +#define AST_CAUSE_INVALID_NUMBER_FORMAT 28 +#define AST_CAUSE_FACILITY_REJECTED 29 +#define AST_CAUSE_RESPONSE_TO_STATUS_ENQUIRY 30 +#define AST_CAUSE_NORMAL_UNSPECIFIED 31 +#define AST_CAUSE_NORMAL_CIRCUIT_CONGESTION 34 +#define AST_CAUSE_NETWORK_OUT_OF_ORDER 38 +#define AST_CAUSE_NORMAL_TEMPORARY_FAILURE 41 +#define AST_CAUSE_SWITCH_CONGESTION 42 +#define AST_CAUSE_ACCESS_INFO_DISCARDED 43 +#define AST_CAUSE_REQUESTED_CHAN_UNAVAIL 44 +#define AST_CAUSE_PRE_EMPTED 45 +#define AST_CAUSE_FACILITY_NOT_SUBSCRIBED 50 +#define AST_CAUSE_OUTGOING_CALL_BARRED 52 +#define AST_CAUSE_INCOMING_CALL_BARRED 54 +#define AST_CAUSE_BEARERCAPABILITY_NOTAUTH 57 +#define AST_CAUSE_BEARERCAPABILITY_NOTAVAIL 58 +#define AST_CAUSE_BEARERCAPABILITY_NOTIMPL 65 +#define AST_CAUSE_CHAN_NOT_IMPLEMENTED 66 +#define AST_CAUSE_FACILITY_NOT_IMPLEMENTED 69 +#define AST_CAUSE_INVALID_CALL_REFERENCE 81 +#define AST_CAUSE_INCOMPATIBLE_DESTINATION 88 +#define AST_CAUSE_INVALID_MSG_UNSPECIFIED 95 +#define AST_CAUSE_MANDATORY_IE_MISSING 96 +#define AST_CAUSE_MESSAGE_TYPE_NONEXIST 97 +#define AST_CAUSE_WRONG_MESSAGE 98 +#define AST_CAUSE_IE_NONEXIST 99 +#define AST_CAUSE_INVALID_IE_CONTENTS 100 +#define AST_CAUSE_WRONG_CALL_STATE 101 +#define AST_CAUSE_RECOVERY_ON_TIMER_EXPIRE 102 +#define AST_CAUSE_MANDATORY_IE_LENGTH_ERROR 103 +#define AST_CAUSE_PROTOCOL_ERROR 111 +#define AST_CAUSE_INTERWORKING 127 + +/* Special Asterisk aliases */ +#define AST_CAUSE_BUSY AST_CAUSE_USER_BUSY +#define AST_CAUSE_FAILURE AST_CAUSE_NETWORK_OUT_OF_ORDER +#define AST_CAUSE_NORMAL AST_CAUSE_NORMAL_CLEARING +#define AST_CAUSE_NOANSWER AST_CAUSE_NO_ANSWER +#define AST_CAUSE_CONGESTION AST_CAUSE_NORMAL_CIRCUIT_CONGESTION +#define AST_CAUSE_NOTDEFINED 0 #endif