]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 373237,373245 via svnmerge from
authorAutomerge script <automerge@asterisk.org>
Thu, 20 Sep 2012 19:27:45 +0000 (19:27 +0000)
committerAutomerge script <automerge@asterisk.org>
Thu, 20 Sep 2012 19:27:45 +0000 (19:27 +0000)
file:///srv/subversion/repos/asterisk/branches/10

................
  r373237 | mjordan | 2012-09-20 13:42:51 -0500 (Thu, 20 Sep 2012) | 18 lines

  When processing RFC 2833 DTMF, accomodate increasing timestamps in End events

  While endpoints should not be changing the source timestamp between DTMF event
  packets, the fact is there exists those endpoints that do exactly that.  To
  work around this, we absorb timestamps within the expected re-transmit period.
  Note that this period only affects End of Event packets, so it should not
  prevent the detection of new DTMF digits that happen to arrive right on top
  of each other.

  (closes issue ASTERISK-20424)
  Reported by: Vladimir Mikhelson
  Tested by: mjordan, Vladimir Mikhelson

  Review: https://reviewboard.asterisk.org/r/2124
  ........

  Merged revisions 373236 from http://svn.asterisk.org/svn/asterisk/branches/1.8
................
  r373245 | file | 2012-09-20 14:14:31 -0500 (Thu, 20 Sep 2012) | 15 lines

  Fix incorrect MeetME conference bridge reference count decrementing and sometimes premature destruction.

  When using the 'e' or 'E' option to MeetMe the configured conference bridges are loaded and examined to see
  if any are empty. If no conference bridges are empty the caller is prompted to enter the number of one.
  This operation left around a pointer to the last created conference bridge still containing participants.
  When the caller that was not able to find any empty conference bridge hung up this pointer was disposed of
  and the reference count of the conference bridge decremented. If there was only a single participant in the
  conference bridge it was ultimately destroyed prematurely.

  (closes issue AST-994)
  Reported by: John Bigelow
  ........

  Merged revisions 373242 from http://svn.asterisk.org/svn/asterisk/branches/1.8
................

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

apps/app_meetme.c
res/res_rtp_asterisk.c

index 8e0bab089a256d1255a63074abaae16cef86c1f6..f734b3e0d84e3ea25b397a7fa1f31fefce4023c6 100644 (file)
@@ -4329,6 +4329,7 @@ static int conf_exec(struct ast_channel *chan, const char *data)
                                                                        }
                                                                }
                                                                AST_LIST_UNLOCK(&confs);
+                                                               cnf = NULL;
                                                                if (!found) {
                                                                        /* At this point, we have a confno_tmp (static conference) that is empty */
                                                                        if ((empty_no_pin && ast_strlen_zero(stringp)) || (!empty_no_pin)) {
index 123e652521af5e8bffab40cdce41d8160ef64ff9..53216a21bb4efed8c015f226eabdce0af9c56dff 100644 (file)
@@ -1589,8 +1589,9 @@ static void process_dtmf_rfc2833(struct ast_rtp_instance *instance, unsigned cha
                new_duration = (new_duration & ~0xFFFF) | samples;
 
                if (event_end & 0x80) {
-                       /* End event */
-                       if ((rtp->last_seqno != seqno) && (timestamp > rtp->last_end_timestamp)) {
+                       /* End event.  Absorb re-transmits, and account for some endpoints
+                        * that erroneously increment the timestamp during re-transmissions */
+                       if ((seqno != rtp->last_seqno) && (timestamp > rtp->last_end_timestamp + 320)) {
                                rtp->last_end_timestamp = timestamp;
                                rtp->dtmf_duration = new_duration;
                                rtp->resp = resp;
@@ -1600,7 +1601,7 @@ static void process_dtmf_rfc2833(struct ast_rtp_instance *instance, unsigned cha
                                rtp->dtmf_duration = rtp->dtmf_timeout = 0;
                                AST_LIST_INSERT_TAIL(frames, f, frame_list);
                        } else if (rtpdebug) {
-                               ast_debug(1, "Dropping duplicate or out of order DTMF END frame (seqno: %d, ts %d, digit %c)\n",
+                               ast_debug(1, "Dropping re-transmitted, duplicate, or out of order DTMF END frame (seqno: %d, ts %d, digit %c)\n",
                                        seqno, timestamp, resp);
                        }
                } else {