summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xchannels/chan_zap.c6
-rwxr-xr-xinclude/asterisk/causes.h3
-rwxr-xr-xpbx.c3
3 files changed, 11 insertions, 1 deletions
diff --git a/channels/chan_zap.c b/channels/chan_zap.c
index 2391734eb..77f1fc06d 100755
--- a/channels/chan_zap.c
+++ b/channels/chan_zap.c
@@ -514,6 +514,12 @@ static int hangup_pri2cause(int cause)
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;
default:
return AST_CAUSE_FAILURE;
}
diff --git a/include/asterisk/causes.h b/include/asterisk/causes.h
index 851362882..e70069069 100755
--- a/include/asterisk/causes.h
+++ b/include/asterisk/causes.h
@@ -16,5 +16,6 @@
#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
diff --git a/pbx.c b/pbx.c
index 98e1ade6a..cda3dd035 100755
--- a/pbx.c
+++ b/pbx.c
@@ -862,6 +862,9 @@ static void pbx_substitute_variables_temp(struct ast_channel *c,const char *var,
} else if (c && !strcmp(var, "UNIQUEID")) {
snprintf(workspace, workspacelen -1, "%s", c->uniqueid);
*ret = workspace;
+ } else if (c && !strcmp(var, "HANGUPCAUSE")) {
+ snprintf(workspace, workspacelen -1, "%i", c->hangupcause);
+ *ret = workspace;
} else {
if (c) {
AST_LIST_TRAVERSE(headp,variables,entries) {