]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 190661-190662 via svnmerge from
authorRussell Bryant <russell@russellbryant.com>
Mon, 27 Apr 2009 19:08:12 +0000 (19:08 +0000)
committerRussell Bryant <russell@russellbryant.com>
Mon, 27 Apr 2009 19:08:12 +0000 (19:08 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r190661 | russell | 2009-04-27 14:00:54 -0500 (Mon, 27 Apr 2009) | 9 lines

Resolve a crash in res_smdi when used with chan_dahdi.

When chan_dahdi goes to get an SMDI message, it provides no search criteria.
It just grabs the next message that arrives.  This code was written with the
SMDI dialplan functions in mind, since that is now the preferred method of
using SMDI.  However, this broke support of it being used from chan_dahdi.

(closes AST-212)

........
r190662 | russell | 2009-04-27 14:03:59 -0500 (Mon, 27 Apr 2009) | 2 lines

Fix a typo from 190661.

........

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

res/res_smdi.c

index d3440f9d2142e526b5910f9f2c7979f1fa7a65a3..cb8cd612005b96c66b17a0e4b44235819c5c3caa 100644 (file)
@@ -378,7 +378,18 @@ static void *smdi_msg_find(struct ast_smdi_interface *iface,
 
        switch (type) {
        case SMDI_MD:
-               if (ast_test_flag(&options, OPT_SEARCH_TERMINAL)) {
+               if (ast_strlen_zero(search_key)) {
+                       struct ast_smdi_md_message *md_msg = NULL;
+
+                       /* No search key provided (the code from chan_dahdi does this).
+                        * Just pop the top message off of the queue. */
+
+                       ASTOBJ_CONTAINER_TRAVERSE(&iface->md_q, !md_msg, do {
+                               md_msg = ASTOBJ_REF(iterator);
+                       } while (0); );
+
+                       msg = md_msg;
+               } else if (ast_test_flag(&options, OPT_SEARCH_TERMINAL)) {
                        struct ast_smdi_md_message *md_msg = NULL;
 
                        /* Searching by the message desk terminal */
@@ -406,7 +417,20 @@ static void *smdi_msg_find(struct ast_smdi_interface *iface,
                }
                break;
        case SMDI_MWI:
-               msg = ASTOBJ_CONTAINER_FIND(&iface->mwi_q, search_key);
+               if (ast_strlen_zero(search_key)) {
+                       struct ast_smdi_mwi_message *mwi_msg = NULL;
+
+                       /* No search key provided (the code from chan_dahdi does this).
+                        * Just pop the top message off of the queue. */
+
+                       ASTOBJ_CONTAINER_TRAVERSE(&iface->mwi_q, !mwi_msg, do {
+                               mwi_msg = ASTOBJ_REF(iterator);
+                       } while (0); );
+
+                       msg = mwi_msg;
+               } else {
+                       msg = ASTOBJ_CONTAINER_FIND(&iface->mwi_q, search_key);
+               }
                break;
        }