summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Murphy <murf@digium.com>2007-05-18 22:33:51 +0000
committerSteve Murphy <murf@digium.com>2007-05-18 22:33:51 +0000
commit4572edae3128844ab90bff27906d58507e637aeb (patch)
tree1ceccf7d603467ba779e8786c15af7ce32b48fbc
parent6fbadb43251e90ac9bb31713311a925bcaacb36e (diff)
Merged revisions 65200 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4 ................ r65200 | murf | 2007-05-18 16:06:27 -0600 (Fri, 18 May 2007) | 9 lines Merged revisions 65172 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.2 ........ r65172 | murf | 2007-05-18 14:56:20 -0600 (Fri, 18 May 2007) | 1 line This update will fix the situation that occurs as described by 9717, where when several targets are specified for a dial, if any one them reports FAIL, the whole call gets FAIL, even though others were ringing OK. I rearranged the priorities, so that a new disposition, NULL, is at the lowest level, and the disposition get init'd to NULL. Then, next up is FAIL, and next up is BUSY, then NOANSWER, then ANSWERED. All the related set routines will only do so if the disposition value to be set to is greater than what's already there. This gives the intended effect. So, if all the targets are busy, you'd get BUSY for the call disposition. If all get BUSY, but one, and that one rings is not answered, you get NOANSWER. If by some freak of nature, the NULL value doesn't get overridden, then the disp2str routine will report NOANSWER as before. ........ ................ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@65202 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rw-r--r--apps/app_dial.c7
-rw-r--r--include/asterisk/cdr.h12
2 files changed, 17 insertions, 2 deletions
diff --git a/apps/app_dial.c b/apps/app_dial.c
index 89f0856dd..f8b5e0298 100644
--- a/apps/app_dial.c
+++ b/apps/app_dial.c
@@ -751,6 +751,7 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in,
/* Got hung up */
*to = -1;
strcpy(pa->status, "CANCEL");
+ ast_cdr_noanswer(in->cdr);
if (f)
ast_frfree(f);
return NULL;
@@ -764,6 +765,7 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in,
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "User hit %c to disconnect call.\n", f->subclass);
*to=0;
+ ast_cdr_noanswer(in->cdr);
*result = f->subclass;
strcpy(pa->status, "CANCEL");
ast_frfree(f);
@@ -777,6 +779,7 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in,
ast_verbose(VERBOSE_PREFIX_3 "User hit %c to disconnect call.\n", f->subclass);
*to=0;
strcpy(pa->status, "CANCEL");
+ ast_cdr_noanswer(in->cdr);
ast_frfree(f);
return NULL;
}
@@ -804,6 +807,10 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in,
}
if (!*to && (option_verbose > 2))
ast_verbose(VERBOSE_PREFIX_3 "Nobody picked up in %d ms\n", orig);
+ if (!*to || ast_check_hangup(in)) {
+ ast_cdr_noanswer(in->cdr);
+ }
+
}
return peer;
diff --git a/include/asterisk/cdr.h b/include/asterisk/cdr.h
index 7dd946abf..df4860882 100644
--- a/include/asterisk/cdr.h
+++ b/include/asterisk/cdr.h
@@ -30,9 +30,10 @@
#define AST_CDR_FLAG_CHILD (1 << 3)
#define AST_CDR_FLAG_POST_DISABLED (1 << 4)
-#define AST_CDR_NOANSWER (1 << 0)
+#define AST_CDR_NULL 0
+#define AST_CDR_FAILED (1 << 0)
#define AST_CDR_BUSY (1 << 1)
-#define AST_CDR_FAILED (1 << 2)
+#define AST_CDR_NOANSWER (1 << 2)
#define AST_CDR_ANSWERED (1 << 3)
/*! AMA Flags */
@@ -177,6 +178,13 @@ void ast_cdr_start(struct ast_cdr *cdr);
*/
void ast_cdr_answer(struct ast_cdr *cdr);
+/*! A call wasn't answered */
+/*!
+ * \param cdr the cdr you wish to associate with the call
+ * Marks the channel disposition as "NO ANSWER"
+ */
+extern void ast_cdr_noanswer(struct ast_cdr *cdr);
+
/*! Busy a call */
/*!
* \param cdr the cdr you wish to associate with the call