@@ -24,6 +24,42 @@ class Handler
2424 const AST_STATE_DIALING_OFFHOOK = 8 ;
2525 const AST_STATE_PRERING = 9 ;
2626
27+ const OPTION_QUEUE_DATA_QUALITY_CALL = 1 ;
28+ const OPTION_QUEUE_ALLOW_CALLEE_HANGUP = 2 ;
29+ const OPTION_QUEUE_ALLOW_CALLER_HANGUP = 4 ;
30+ const OPTION_QUEUE_NO_RETRIES_ON_TIMEOUT = 8 ;
31+ const OPTION_QUEUE_RING_INSTEAD_MOH = 16 ;
32+ const OPTION_QUEUE_STOP_MOH_ON_RINGING = 32 ;
33+ const OPTION_QUEUE_ALLOW_CALLEE_TRANFSER = 64 ;
34+ const OPTION_QUEUE_ALLOW_CALLER_TRANFSER = 128 ;
35+ const OPTION_QUEUE_ALLOW_CALLEE_MONITOR = 256 ;
36+ const OPTION_QUEUE_ALLOW_CALLER_MONITOR = 512 ;
37+ const OPTION_QUEUE_CONTINUE_ON_HANGUP = 1024 ;
38+ const OPTION_QUEUE_IGNORE_FORWARD_REQUESTS = 2048 ;
39+ const OPTION_QUEUE_ALLOW_CALLEE_PARKING = 4096 ;
40+ const OPTION_QUEUE_ALLOW_CALLER_PARKING = 8192 ;
41+ const OPTION_QUEUE_ALLOW_CALLEE_MIX_MONITOR = 16384 ;
42+ const OPTION_QUEUE_ALLOW_CALLER_MIX_MONITOR = 32768 ;
43+
44+ protected static $ optionQueueValues = [
45+ self ::OPTION_QUEUE_DATA_QUALITY_CALL => 'd ' ,
46+ self ::OPTION_QUEUE_ALLOW_CALLEE_HANGUP => 'h ' ,
47+ self ::OPTION_QUEUE_ALLOW_CALLER_HANGUP => 'H ' ,
48+ self ::OPTION_QUEUE_NO_RETRIES_ON_TIMEOUT => 'n ' ,
49+ self ::OPTION_QUEUE_RING_INSTEAD_MOH => 'r ' ,
50+ self ::OPTION_QUEUE_STOP_MOH_ON_RINGING => 'R ' ,
51+ self ::OPTION_QUEUE_ALLOW_CALLEE_TRANFSER => 't ' ,
52+ self ::OPTION_QUEUE_ALLOW_CALLER_TRANFSER => 'T ' ,
53+ self ::OPTION_QUEUE_ALLOW_CALLEE_MONITOR => 'w ' ,
54+ self ::OPTION_QUEUE_ALLOW_CALLER_MONITOR => 'W ' ,
55+ self ::OPTION_QUEUE_CONTINUE_ON_HANGUP => 'c ' ,
56+ self ::OPTION_QUEUE_IGNORE_FORWARD_REQUESTS => 'i ' ,
57+ self ::OPTION_QUEUE_ALLOW_CALLEE_PARKING => 'k ' ,
58+ self ::OPTION_QUEUE_ALLOW_CALLER_PARKING => 'K ' ,
59+ self ::OPTION_QUEUE_ALLOW_CALLEE_MIX_MONITOR => 'x ' ,
60+ self ::OPTION_QUEUE_ALLOW_CALLER_MIX_MONITOR => 'X ' ,
61+ ];
62+
2763 /**
2864 * @var Request
2965 */
@@ -63,6 +99,19 @@ public function __construct(array $config = [])
6399 $ this ->out = defined ('STDOUT ' ) ? STDOUT : fopen ('php://stdout ' , 'w ' );
64100 }
65101
102+ protected function buildOptions ($ optionSet , array $ options )
103+ {
104+ $ optionString = '' ;
105+ for ($ i = 0 ; $ i < 16 ; ++$ i ) {
106+ $ option = pow (2 , $ i );
107+ if ($ option & $ optionSet ) {
108+ $ optionString .= $ options [$ option ];
109+ }
110+ }
111+
112+ return $ optionString ;
113+ }
114+
66115 public function handleRequest ()
67116 {
68117 $ rawRequest = $ str = fgets ($ this ->in );
@@ -725,6 +774,21 @@ public function background($sound)
725774 return chr ($ result ['result ' ]);
726775 }
727776
777+ public function queue ($ queueName , $ options , $ url = null , $ announceoverride = null , $ timeout = null , $ agi = null , $ macro = null , $ gosub = null , $ rule = null , $ position = null )
778+ {
779+ return $ this ->exec ('queue ' , $ queueName
780+ . ', ' . $ this ->buildOptions ($ options , self ::$ optionQueueValues )
781+ . ', ' . $ url
782+ . ', ' . $ announceoverride
783+ . ', ' . $ timeout
784+ . ', ' . $ agi
785+ . ', ' . $ macro
786+ . ', ' . $ gosub
787+ . ', ' . $ rule
788+ . ', ' . $ position
789+ );
790+ }
791+
728792 /**
729793 * Set absolute maximum time of call.
730794 *
0 commit comments