Changeset 6833
- Timestamp:
- 09/22/08 10:10:27 (2 months ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
freepbx/branches/ari_changes/amp_conf/htdocs/recordings/includes/callme.php
r6421 r6833 9 9 10 10 /* 11 * 12 * Include admin/functions.inc.php for our call to parse_amportal_conf() 13 * Include admin/common/php-asmanager.php to use the AGI_AsteriskManager class for accessing the AMI 14 * 15 */ 16 require_once('../admin/functions.inc.php'); 17 require_once('../admin/common/php-asmanager.php'); 18 19 $amp_conf = parse_amportal_conf("/etc/amportal.conf"); 20 $asm = new AGI_AsteriskManager(); 21 // attempt to connect to asterisk manager proxy 22 if (!isset($amp_conf["ASTMANAGERPROXYPORT"]) || !$res = $asm->connect("127.0.0.1:".$amp_conf["ASTMANAGERPROXYPORT"], $amp_conf["AMPMGRUSER"] , $amp_conf["AMPMGRPASS"], 'off')) 23 { 24 // attempt to connect directly to asterisk, if no proxy or if proxy failed 25 if (!$res = $asm->connect("127.0.0.1:".$amp_conf["ASTMANAGERPORT"], $amp_conf["AMPMGRUSER"] , $amp_conf["AMPMGRPASS"], 'off')) 26 { 27 // couldn't connect at all 28 unset( $asm ); 29 $_SESSION['ari_error'] = 30 _("ARI does not appear to have access to the Asterisk Manager.") . " ($errno)<br>" . 31 _("Check the ARI 'main.conf.php' configuration file to set the Asterisk Manager Account.") . "<br>" . 32 _("Check /etc/asterisk/manager.conf for a proper Asterisk Manager Account") . "<br>" . 33 _("make sure [general] enabled = yes and a 'permit=' line for localhost or the webserver."); 34 } 35 } 36 37 function callme_close() 38 { 39 global $asm; 40 if (is_object($asm)) 41 { 42 $asm->logoff(); 43 $asm->disconnect(); 44 } 45 unset($asm); 46 } 47 /* 11 48 * Call Me functions 12 49 */ 13 /* Return the call me number stored in the database. */50 /* Return the call me number stored in the database. */ 14 51 function callme_getnum($exten) 15 52 { 16 global $asterisk_manager_interface; 53 global $asm; 54 $cmd = "database get AMPUSER $exten/callmenum"; 55 $callme_num = ''; 56 $results = $asm->Command($cmd); 17 57 18 $action = "Action: Command\r\nCommand: database get AMPUSER $exten/callmenum\r\n\r\n"; 19 $callme_num = $asterisk_manager_interface->Command($action); 58 if (is_array($results)) 59 { 60 foreach ($results as $results_elem) 61 { 62 if (preg_match('/Value: [^\s]*/', $results_elem, $matches) != 0) 63 { 64 $parts = split(' ', trim($matches[0])); 65 $callme_num = $parts[1]; 66 } 67 68 } 69 } 70 20 71 return $callme_num; 21 72 } … … 24 75 function callme_setnum($exten, $callme_num) 25 76 { 26 global $as terisk_manager_interface;77 global $asm; 27 78 28 $ action = "Action: Command\r\nCommand: database put AMPUSER $exten/callmenum $callme_num\r\n\r\n";29 $as terisk_manager_interface->Command($action);79 $cmd = "database put AMPUSER $exten/callmenum $callme_num"; 80 $asm->Command($cmd); 30 81 return; 31 }32 33 /* Send an action directly to the ami. No return value.*/34 function callme_sendcmd($action)35 {36 global $asterisk_manager_interface;37 $socket = $asterisk_manager_interface->socket;38 39 fwrite($socket, $action);40 fflush($socket);41 return;42 82 } 43 83 … … 46 86 function callme_startcall($to, $from, $new_path) 47 87 { 48 $action = "Action: Originate\r\n"; 49 $action .= "Channel: Local/$to@from-internal/n\r\n"; 50 $action .= "Context: custom-callme\r\n"; 51 $action .= "Exten: s\r\n"; 52 $action .= "Priority: 1\r\n"; 53 $action .= "CallerID: VMAIL/$from\r\n"; 54 $action .= "Variable: MSG=$new_path\r\n"; 55 $action .= "Variable: MBOX=$from\r\n\r\n"; 56 57 $status = callme_originate($action); 58 return $status; 88 global $asm; 89 $channel = "Local/$to@from-internal/n"; 90 $context = "custom-callme"; 91 $extension = "s"; 92 $priority = "1"; 93 $callerid = "VMAIL/$from"; 94 $variable = "MSG=$new_path|MBOX=$from"; 95 /* Arguments to Originate: channel, extension, context, priority, timeout, callerid, variable, account, application, data */ 96 $status = $asm->Originate($channel, $extension, $context, $priority, NULL, $callerid, $variable, NULL, NULL, NULL); 97 if (is_array($status)) 98 { 99 foreach ($status as $status_elem) 100 { 101 if (preg_match('/Originate successfully queued/', $status_elem, $matches) != 0) 102 { 103 return CALLME_SUCCESS; 104 } 105 } 106 } 107 return CALLME_FAILURE; 59 108 } 60 109 61 /* Turns event monitoring off for our ami instance, thereby */62 /* facilitating retrieval of responses to actions sent to */63 /* the ami (with events off, we can safely expect to only */64 /* see results from our actions over the ami and no more). */65 /* Called by callme_originate(). Assumed to have been */66 /* called BEFORE callme_hangup() is called (see callme_hangup). */67 110 function callme_eventsoff() 68 111 { 69 global $asterisk_manager_interface; 70 $socket = $asterisk_manager_interface->socket; 71 $action = "Action: Events\r\n"; 72 $action .= "Eventmask: off\r\n\r\n"; 73 74 callme_sendcmd($action); 75 76 /* Take the action's response out of the socket's buffer; do nothing with the response. */ 77 while (($buffer=fgets($socket)) && (!preg_match('/Response: Events Off/', $buffer))); 112 global $asm; 113 $asm->Events("off"); 78 114 return; 79 }80 81 /* Helper function called by callme_startcall(). Sends the ORIGINATE action */82 /* passed to it (this *must* be an Originate action) to the ami via */83 /* callme_sendcmd(). Retrieves the Originate response and parses that */84 /* response in order to determine state of call (success/failure/error). */85 /* Returns state of call. */86 function callme_originate($action)87 {88 global $asterisk_manager_interface;89 $socket = $asterisk_manager_interface->socket;90 91 $error_pat = '/Response: Error[\s]*/';92 $success_pat = '/Response: Success[\s]*/';93 $r = "";94 $buffer = "";95 callme_eventsoff();96 callme_sendcmd($action);97 98 /* Continue polling for a result from the action until we get it. */99 /* (For example, it may take a long time to get a result back */100 /* from the Originate action in the case where the phone rings */101 /* until the call times out.) Pull the entire Originate response */102 /* from the socket's buffer. */103 while (!preg_match('/Message: Originate[a-zA-Z\s]*/', $buffer))104 {105 $buffer = fgets($socket);106 $r .= $buffer;107 }108 109 if (preg_match($error_pat, $r))110 {111 return CALLME_FAILURE;112 } else if (preg_match($success_pat, $r))113 {114 return CALLME_SUCCESS;115 } else116 {117 return CALLME_ERROR;118 }119 120 }121 122 /* Logs us off the ami. */123 function callme_logoff()124 {125 $action = "Action: Logoff\r\n\r\n";126 callme_sendcmd($action);127 return;128 115 } 129 116 … … 140 127 function callme_hangup($exten) 141 128 { 142 global $asterisk_manager_interface; 143 $socket = $asterisk_manager_interface->socket; 144 $action = "Action: Command\r\nCommand: local show channels\r\n\r\n"; 145 $chan_pat = '/[\s]*Local\/' . trim($exten) . '@from\-internal\-[a-zA-Z0-9]*,(1|2)[\s]*/'; 146 $matches[0] = ""; 147 $response = ""; 148 /* Events must be off for callme_sendcmd() to work, but */ 149 /* callme_eventsoff() is called in callme_startcall(), and */ 150 /* callme_hangup() should not be called unless */ 151 /* callme_startcall() was called first! */ 152 callme_sendcmd($action); 153 154 /* Read in entire response belonging to our ami command action. */ 155 while (($buffer=fgets($socket)) && (!preg_match('/\-\-END COMMAND\-\-/', $buffer))) 156 $response .= $buffer; 129 global $asm; 130 $cmd = "local show channels"; 131 $chan_pat = '/[\s]*Local\/' . trim($exten) . '@from\-internal\-[a-zA-Z0-9]*,(1|2)[\s]*/'; 132 $matches[0] = ""; 133 $response = ""; 134 $channel = ""; 135 $local_channels = $asm->Command($cmd); 157 136 158 137 /* Look for our local channel. */ 159 preg_match($chan_pat, $response, $matches); 138 if (is_array($local_channels)) 139 { 140 foreach ($local_channels as $local_channels_elem) 141 { 142 preg_match($chan_pat, $local_channels_elem, $matches); 143 if ($matches[0] != "") 144 { 145 $channel = $matches[0]; 146 break; 147 } 148 } 149 } else 150 { 151 $channel = ""; 152 } 160 153 161 154 /* If the channel was still up, hang it up. */ 162 if ($ matches[0]!= "")155 if ($channel != "") 163 156 { 164 $action = "Action: Hangup\r\nChannel: " . trim($matches[0]) . "\r\n\r\n"; 165 callme_sendcmd($action); 166 } 167 157 $asm->Hangup(trim($channel)); 158 } 168 159 return; 169 170 160 } 171 161 ?> freepbx/branches/ari_changes/amp_conf/htdocs/recordings/misc/callme_page.php
r6650 r6833 10 10 include_once("./includes/common.php"); 11 11 12 function cmpage_ami_open() {13 global $asterisk_manager_interface;14 global $ASTERISKMGR_DBHOST;15 global $STANDALONE;16 global $AMP_FUNCTIONS_FILES;17 global $AMPORTAL_CONF_FILE;18 global $amp_conf_defaults;19 $asterisk_manager_interface = new AsteriskManagerInterface();20 /* get login credentials */21 if ($STANDALONE['use']) {22 $mgrhost = $ASTERISKMGR_DBHOST;23 $mgruser = $STANDALONE['asterisk_mgruser'];24 $mgrpass = $STANDALONE['asterisk_mgrpass'];25 } else {26 $include = 0;27 $files = split(';',$AMP_FUNCTIONS_FILES);28 foreach ($files as $file) {29 if (is_file($file)) {30 include_once($file);31 $include = 1;32 }33 }34 35 if ($include) {36 $amp_conf = parse_amportal_conf($AMPORTAL_CONF_FILE);37 $mgrhost = $ASTERISKMGR_DBHOST;38 $mgruser = $amp_conf['AMPMGRUSER'];39 $mgrpass = $amp_conf['AMPMGRPASS'];40 unset($amp_conf);41 }42 }43 44 $success = $asterisk_manager_interface->Connect($mgrhost,$mgruser,$mgrpass);45 if (!$success) {46 $_SESSION['ari_error'] =47 _("ARI does not appear to have access to the Asterisk Manager.") . " ($errno)<br>" .48 _("Check the ARI 'main.conf.php' configuration file to set the Asterisk Manager Account.") . "<br>" .49 _("Check /etc/asterisk/manager.conf for a proper Asterisk Manager Account") . "<br>" .50 _("make sure [general] enabled = yes and a 'permit=' line for localhost or the webserver.");51 return FALSE; /* exit */52 }53 }54 55 function cmpage_ami_close() {56 57 global $asterisk_manager_interface;58 $action = "Action: Logoff\r\n\r\n";59 //$asterisk_manager_interface->Command($action);60 callme_sendcmd($action);61 $asterisk_manager_interface->Disconnect();62 unset($asterisk_manager_interface);63 }64 12 ?> 65 13 … … 73 21 74 22 <?php 75 global $ARI_CRYPT_PASSWORD; 76 $crypt = new Crypt(); 77 $path = $crypt->decrypt($_REQUEST['recording'],$ARI_CRYPT_PASSWORD); 78 $to = $crypt->decrypt($_REQUEST['callmenum'],$ARI_CRYPT_PASSWORD); 79 $pageaction = $_REQUEST['action']; 80 $msgFrom = $crypt->decrypt($_REQUEST['msgFrom'],$ARI_CRYPT_PASSWORD); 81 $new_path = substr($path, 0, -4); /* Without the sound file extension. */ 23 $path = $_SESSION['ari_user']['recfiles'][$_REQUEST['recindex']]; 24 $pageaction = $_REQUEST['action']; 25 $to = $_REQUEST['callmenum']; 26 $msgFrom = $_REQUEST['msgFrom']; 27 $new_path = substr($path, 0, -4); /* Without the sound file extension. */ 82 28 $matches[0] = ''; /* init the $matches array. */ 83 29 /* Either start or end the call me call */ … … 86 32 case "c": 87 33 /* Call me. */ 88 cmpage_ami_open();89 34 $call_status = callme_startcall($to, $msgFrom, $new_path); 90 35 echo("<table class='voicemail' style='width: 100%; height: 100%; margin: 0 0 0 0; border: 0px; padding: 0px'><tr><td valign='middle' style='border: 0px'>"); … … 92 37 if (callme_succeeded($call_status)) 93 38 { 94 echo("<a href='callme_page.php?action=h&callmenum=" . urlencode($crypt->encrypt($to, $ARI_CRYPT_PASSWORD)). "'>Click here to hang up.</a>");39 echo("<a href='callme_page.php?action=h&callmenum=" . $to . "'>Click here to hang up.</a>"); 95 40 } 96 41 echo("</td></tr></table>"); 97 42 echo("<script language='javascript'>parent.document.getElementById('callme_status').innerHTML = '" . _("$call_status") . "';</script>"); 98 cmpage_ami_close();99 43 echo("<script language='javascript'>parent.document.getElementById('pb_load_inprogress').value='false';</script>"); 100 44 echo("<script language='javascript'>parent.document.getElementById('callme_status').parentNode.style.backgroundColor = 'white';</script>"); … … 102 46 case "h": 103 47 /* Hang up. */ 104 cmpage_ami_open();105 48 /* Find the channel and hang it up if it still exists. */ 106 49 callme_hangup($to); 107 cmpage_ami_close();108 50 echo("<script language='javascript'>parent.document.getElementById('callme_status').innerHTML = '" . _("The call was terminated.") . "';</script>"); 109 51 break;
