diff options
author | dvossel <dvossel@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-06-05 21:37:01 +0000 |
---|---|---|
committer | dvossel <dvossel@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-06-05 21:37:01 +0000 |
commit | fc510203f9ffe21046d2d8c7a46623247d9b7341 (patch) | |
tree | a55096240f04e5fa9b7b2ea92c195ea1a4cf42eb /main/pbx.c | |
parent | 7b9fbbb29ef88842478a4638f601ed1e6bd52084 (diff) |
Merged revisions 199298 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk
................
r199298 | dvossel | 2009-06-05 16:21:22 -0500 (Fri, 05 Jun 2009) | 21 lines
Merged revisions 199297 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r199297 | dvossel | 2009-06-05 16:19:56 -0500 (Fri, 05 Jun 2009) | 14 lines
Fixes issue with hints giving unexpected results.
Hints with two or more devices that include ONHOLD gave unexpected results.
(closes issue #15057)
Reported by: p_lindheimer
Patches:
onhold_trunk.diff uploaded by dvossel (license 671)
pbx.c.1.4.patch uploaded by p (license 558)
devicestate.c.trunk.patch uploaded by p (license 671)
Tested by: p_lindheimer, dvossel
Review: https://reviewboard.asterisk.org/r/254/
........
................
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.0@199301 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main/pbx.c')
-rw-r--r-- | main/pbx.c | 31 |
1 files changed, 12 insertions, 19 deletions
diff --git a/main/pbx.c b/main/pbx.c index 5cfc90409..de5dff6cd 100644 --- a/main/pbx.c +++ b/main/pbx.c @@ -3177,8 +3177,8 @@ static int ast_extension_state2(struct ast_exten *e) { char hint[AST_MAX_EXTENSION]; char *cur, *rest; - int allunavailable = 1, allbusy = 1, allfree = 1, allonhold = 1; - int busy = 0, inuse = 0, ring = 0; + int allunavailable = 1, allbusy = 1, allfree = 1; + int busy = 0, inuse = 0, ring = 0, onhold = 0; if (!e) return -1; @@ -3192,67 +3192,60 @@ static int ast_extension_state2(struct ast_exten *e) case AST_DEVICE_NOT_INUSE: allunavailable = 0; allbusy = 0; - allonhold = 0; break; case AST_DEVICE_INUSE: inuse = 1; allunavailable = 0; allfree = 0; - allonhold = 0; break; case AST_DEVICE_RINGING: ring = 1; allunavailable = 0; allfree = 0; - allonhold = 0; break; case AST_DEVICE_RINGINUSE: inuse = 1; ring = 1; allunavailable = 0; allfree = 0; - allonhold = 0; break; case AST_DEVICE_ONHOLD: allunavailable = 0; allfree = 0; + onhold = 1; break; case AST_DEVICE_BUSY: allunavailable = 0; allfree = 0; - allonhold = 0; busy = 1; + inuse = 1; break; case AST_DEVICE_UNAVAILABLE: case AST_DEVICE_INVALID: allbusy = 0; allfree = 0; - allonhold = 0; break; default: allunavailable = 0; allbusy = 0; allfree = 0; - allonhold = 0; } } - if (!inuse && ring) - return AST_EXTENSION_RINGING; - if (inuse && ring) - return (AST_EXTENSION_INUSE | AST_EXTENSION_RINGING); - if (inuse) - return AST_EXTENSION_INUSE; if (allfree) return AST_EXTENSION_NOT_INUSE; - if (allonhold) - return AST_EXTENSION_ONHOLD; + if ((inuse || onhold) && ring) + return (AST_EXTENSION_INUSE | AST_EXTENSION_RINGING); if (allbusy) return AST_EXTENSION_BUSY; + if (inuse) + return AST_EXTENSION_INUSE; + if (ring) + return AST_EXTENSION_RINGING; + if (onhold) + return AST_EXTENSION_ONHOLD; if (allunavailable) return AST_EXTENSION_UNAVAILABLE; - if (busy) - return AST_EXTENSION_INUSE; return AST_EXTENSION_NOT_INUSE; } |