]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 235660 via svnmerge from
authorJeff Peeler <jpeeler@digium.com>
Fri, 18 Dec 2009 23:03:09 +0000 (23:03 +0000)
committerJeff Peeler <jpeeler@digium.com>
Fri, 18 Dec 2009 23:03:09 +0000 (23:03 +0000)
https://origsvn.digium.com/svn/asterisk/trunk

................
  r235660 | jpeeler | 2009-12-18 16:51:37 -0600 (Fri, 18 Dec 2009) | 55 lines

  Merged revisions 235635 via svnmerge from
  https://origsvn.digium.com/svn/asterisk/branches/1.4

  ........
    r235635 | jpeeler | 2009-12-18 16:29:51 -0600 (Fri, 18 Dec 2009) | 48 lines

    Correct CDR dispositions for BUSY/FAILED

    This patch is simple in that it reorders the disposition defines so that the fix
    for issue 12946 works properly (the default CDR disposition was changed to
    AST_CDR_NOANSWER). Also, the AST_CDR_FLAG_ORIGINATED flag was set in ast_call to
    ensure all CDR records are written.

    The side effects of CDR changes are scary, so I'm documenting the test cases
    performed to attempt to catch any regressions. The following tests were all
    performed using 1.4 rev 195881 vs head (235571) + patch:

    A calls B
    C calls B (busy)
    Hangup C
    Hangup A

    (Both SIP and features)
    A calls B
    A blind transfers to C
    Hangup C

    (Both SIP and features)
    A calls B
    A attended transfers to C
    Hangup C

    A calls B
    A attended transfers to C (SIP)
    C blind transfers to A (features)
    Hangup A

    All of the test scenario CDRs matched.

    The following tests were performed just with the patch to ensure proper operation
    (with unanswered=yes):

    exten =>s,1,Answer
    exten =>s,n,ResetCDR(w)
    exten =>s,n,ResetCDR(w)

    exten =>s,1,ResetCDR(w)
    exten =>s,n,ResetCDR(w)

    (closes issue #16180)
    Reported by: aatef
    Patches:
          bug16180.patch uploaded by jpeeler (license 325)
  ........
................

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.6.1@235663 65c4cc65-6c06-0410-ace0-fbb531ad65f3

include/asterisk/cdr.h
main/channel.c

index 6d633b990787a1bbd013872ece683cbaa84f5bbb..8aaed10b590afd8def198e2cce675358bd343894 100644 (file)
 #define AST_CDR_FLAG_DONT_TOUCH     (1 << 9)
 #define AST_CDR_FLAG_POST_ENABLE    (1 << 10)
 #define AST_CDR_FLAG_DIALED         (1 << 11)
+#define AST_CDR_FLAG_ORIGINATED                (1 << 12)
 /*@} */
-#define AST_CDR_FLAG_ORIGINATED                (1 << 11)
 
 /*! \name CDR Flags - Disposition */
 /*@{ */
-#define AST_CDR_NULL                0
-#define AST_CDR_FAILED                         (1 << 0)
-#define AST_CDR_BUSY                           (1 << 1)
-#define AST_CDR_NOANSWER                       (1 << 2)
+#define AST_CDR_NOANSWER                       0
+#define AST_CDR_NULL                (1 << 0)
+#define AST_CDR_FAILED                         (1 << 1)
+#define AST_CDR_BUSY                           (1 << 2)
 #define AST_CDR_ANSWERED                       (1 << 3)
 /*@} */
 
index af8ad7b3fdc43e633b747d8840d85bc22852768e..33b1dcd30aa80fb5c5decf51260694ef891e4796 100644 (file)
@@ -3988,8 +3988,10 @@ int ast_call(struct ast_channel *chan, char *addr, int timeout)
        /* Stop if we're a zombie or need a soft hangup */
        ast_channel_lock(chan);
        if (!ast_test_flag(chan, AST_FLAG_ZOMBIE) && !ast_check_hangup(chan)) {
-               if (chan->cdr)
+               if (chan->cdr) {
                        ast_set_flag(chan->cdr, AST_CDR_FLAG_DIALED);
+                       ast_set_flag(chan->cdr, AST_CDR_FLAG_ORIGINATED);
+               }
                if (chan->tech->call)
                        res = chan->tech->call(chan, addr, timeout);
                ast_set_flag(chan, AST_FLAG_OUTGOING);