Merge branch 'master' of https://github.com/fusionpbx/fusionpbx
This commit is contained in:
commit
1f0664be66
|
|
@ -86,7 +86,7 @@ if (strlen($id) > 0) {
|
|||
|
||||
//clear the cache
|
||||
$cache = new cache;
|
||||
$cache->delete("memcache delete dialplan:".$_SESSION["context"]);
|
||||
$cache->delete("dialplan:".$_SESSION["context"]);
|
||||
|
||||
//synchronize configuration
|
||||
save_dialplan_xml();
|
||||
|
|
|
|||
|
|
@ -329,7 +329,7 @@ if (count($_POST)>0 && strlen($_POST["persistformvar"]) == 0) {
|
|||
|
||||
//clear the cache
|
||||
$cache = new cache;
|
||||
$cache->delete("memcache delete dialplan:".$_SESSION["context"]);
|
||||
$cache->delete("dialplan:".$_SESSION["context"]);
|
||||
|
||||
//set the update message
|
||||
$_SESSION["message"] = $text['message-update'];
|
||||
|
|
|
|||
|
|
@ -337,7 +337,7 @@ if (count($_POST) > 0 && strlen($_POST["persistformvar"]) == 0) {
|
|||
|
||||
//clear the cache
|
||||
$cache = new cache;
|
||||
$cache->delete("memcache delete dialplan:".$call_flow_context);
|
||||
$cache->delete("dialplan:".$call_flow_context);
|
||||
|
||||
//set the message
|
||||
if ($action == "add") {
|
||||
|
|
|
|||
|
|
@ -379,7 +379,10 @@ if (count($_POST)>0 && strlen($_POST["persistformvar"]) == 0) {
|
|||
|
||||
//clear the cache
|
||||
$cache = new cache;
|
||||
$cache->delete("memcache delete directory:".$extension."@".$_SESSION['domain_name']);
|
||||
$cache->delete("directory:".$extension."@".$_SESSION['domain_name']);
|
||||
if(strlen($number_alias) > 0){
|
||||
$cache->delete("directory:".$number_alias."@".$_SESSION['domain_name']);
|
||||
}
|
||||
|
||||
//redirect the user
|
||||
$_SESSION["message"] = $text['confirm-update'];
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ include "root.php";
|
|||
public $domain_name;
|
||||
public $extension_uuid;
|
||||
private $extension;
|
||||
private $number_alias;
|
||||
public $forward_all_destination;
|
||||
public $forward_all_enabled;
|
||||
private $dial_string;
|
||||
|
|
@ -58,6 +59,7 @@ include "root.php";
|
|||
if (count($result) > 0) {
|
||||
foreach ($result as &$row) {
|
||||
$this->extension = $row["extension"];
|
||||
$this->number_alias = $row["number_alias"];
|
||||
$this->accountcode = $row["accountcode"];
|
||||
$this->toll_allow = $row["toll_allow"];
|
||||
$this->outbound_caller_id_name = $row["outbound_caller_id_name"];
|
||||
|
|
@ -155,10 +157,10 @@ include "root.php";
|
|||
unset($sql);
|
||||
|
||||
//delete extension from memcache
|
||||
$fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']);
|
||||
if ($fp) {
|
||||
$switch_cmd = "memcache delete directory:".$this->extension."@".$this->domain_name;
|
||||
$switch_result = event_socket_request($fp, 'api '.$switch_cmd);
|
||||
$cache = new cache;
|
||||
$cache->delete("directory:".$this->extension."@".$this->domain_name);
|
||||
if(strlen($this->number_alias) > 0){
|
||||
$cache->delete("directory:".$this->number_alias."@".$this->domain_name);
|
||||
}
|
||||
|
||||
} //function
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@
|
|||
<action application="set" data="record_session=true" inline="true"/>
|
||||
</condition>
|
||||
<condition field="${record_session}" expression="^true$">
|
||||
<action application="set" data="api_on_answer=uuid_record ${uuid} start ${recordings_dir}/${domain_name}/archive/${strftime(%Y)}/${strftime(%b)}/${strftime(%d)}/${uuid}.${record_ext}"/>
|
||||
<action application="export" data="nolocal:api_on_answer=uuid_record ${uuid} start ${recordings_dir}/${domain_name}/archive/${strftime(%Y)}/${strftime(%b)}/${strftime(%d)}/${uuid}.${record_ext}"/>
|
||||
</condition>
|
||||
</extension>
|
||||
</context>
|
||||
|
|
|
|||
|
|
@ -93,16 +93,25 @@ if ($_GET['a'] == "download") {
|
|||
}
|
||||
|
||||
//get the gateways
|
||||
$sql = "select g.domain_uuid, g.gateway, g.gateway_uuid, d.domain_name from v_gateways as g, v_domains as d ";
|
||||
$sql .= "where d.domain_uuid = g.domain_uuid ";
|
||||
$sql = "select g.domain_uuid, g.gateway, g.gateway_uuid, d.domain_name ";
|
||||
$sql .= "from v_gateways as g left outer join v_domains as d on d.domain_uuid = g.domain_uuid";
|
||||
$prep_statement = $db->prepare(check_sql($sql));
|
||||
$prep_statement->execute();
|
||||
$gateways = $prep_statement->fetchAll(PDO::FETCH_NAMED);
|
||||
unset ($prep_statement, $sql);
|
||||
|
||||
if ($fp) {
|
||||
$hostname = trim(event_socket_request($fp, 'api switchname'));
|
||||
}
|
||||
|
||||
//get the sip profiles
|
||||
$sql = "select sip_profile_name from v_sip_profiles ";
|
||||
$sql .= "where sip_profile_enabled = 'true' ";
|
||||
if ($hostname) {
|
||||
$sql .= "and (sip_profile_hostname = '" . check_str($hostname) . "' ";
|
||||
$sql .= "or sip_profile_hostname = '' ";
|
||||
$sql .= "or sip_profile_hostname is null ) ";
|
||||
}
|
||||
$sql .= "order by sip_profile_name asc ";
|
||||
$prep_statement = $db->prepare(check_sql($sql));
|
||||
$prep_statement->execute();
|
||||
|
|
|
|||
|
|
@ -0,0 +1,196 @@
|
|||
<?php
|
||||
|
||||
class Buffer {
|
||||
private $content;
|
||||
private $eol;
|
||||
|
||||
public function __construct() {
|
||||
$this->content = '';
|
||||
$this->eol = "\n";
|
||||
}
|
||||
|
||||
public function append($str) {
|
||||
$this->content .= $str;
|
||||
}
|
||||
|
||||
public function read_line() {
|
||||
$ar = explode($this->eol, $this->content, 2);
|
||||
if (count($ar) != 2) {
|
||||
return false;
|
||||
}
|
||||
$this->content = $ar[1];
|
||||
return $ar[0];
|
||||
}
|
||||
|
||||
public function read_n($n) {
|
||||
if (strlen($this->content) < $n) {
|
||||
return false;
|
||||
}
|
||||
$s = substr($this->content, 0, $n);
|
||||
$this->content = substr($this->content, $n);
|
||||
return $s;
|
||||
}
|
||||
|
||||
public function read_all($n) {
|
||||
$tmp = $this->content;
|
||||
$this->content = '';
|
||||
return $tmp;
|
||||
}
|
||||
}
|
||||
|
||||
//$b = new Buffer;
|
||||
//$b->append("hello\nworld\n");
|
||||
//print($b->read_line());
|
||||
//print($b->read_line());
|
||||
|
||||
class EventSocket {
|
||||
private $buffer;
|
||||
private $fp;
|
||||
|
||||
public function __construct($fp = false) {
|
||||
$this->buffer = new Buffer;
|
||||
$this->fp = $fp;
|
||||
}
|
||||
|
||||
public function __destructor() {
|
||||
$this->close();
|
||||
}
|
||||
|
||||
public function read_event() {
|
||||
if (!$this->fp) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$b = $this->buffer;
|
||||
$content_length = 0;
|
||||
$content = Array();
|
||||
|
||||
while (true) {
|
||||
while(($line = $b->read_line()) !== false ) {
|
||||
if ($line == '') {
|
||||
break 2;
|
||||
}
|
||||
$kv = explode(':', $line, 2);
|
||||
$content[trim($kv[0])] = trim($kv[1]);
|
||||
}
|
||||
usleep(100);
|
||||
|
||||
if (feof($this->fp)) {
|
||||
break;
|
||||
}
|
||||
|
||||
$buffer = fgets($this->fp, 1024);
|
||||
$b->append($buffer);
|
||||
}
|
||||
|
||||
if (array_key_exists('Content-Length', $content)) {
|
||||
$str = $b->read_n($content['Content-Length']);
|
||||
if ($str === false) {
|
||||
while (!feof($this->fp)) {
|
||||
$buffer = fgets($this->fp, 1024);
|
||||
$b->append($buffer);
|
||||
$str = $b->read_n($content['Content-Length']);
|
||||
if ($str !== false) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($str !== false) {
|
||||
$content['$'] = $str;
|
||||
}
|
||||
}
|
||||
|
||||
return $content;
|
||||
}
|
||||
|
||||
public function connect($host, $port, $password) {
|
||||
$fp = fsockopen($host, $port, $errno, $errdesc, 3);
|
||||
|
||||
if (!$fp) {
|
||||
return false;
|
||||
}
|
||||
|
||||
socket_set_blocking($fp, false);
|
||||
$this->fp = $fp;
|
||||
|
||||
// Wait auth request and send response
|
||||
while (!feof($fp)) {
|
||||
$event = $this->read_event();
|
||||
if(@$event['Content-Type'] == 'auth/request'){
|
||||
fputs($fp, "auth $password\n\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Wait auth response
|
||||
while (!feof($fp)) {
|
||||
$event = $this->read_event();
|
||||
if (@$event['Content-Type'] == 'command/reply') {
|
||||
if (@$event['Reply-Text'] == '+OK accepted') {
|
||||
return $fp;
|
||||
}
|
||||
$this->fp = false;
|
||||
fclose($fp);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function request($cmd) {
|
||||
if (!$this->fp) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$cmd_array = explode("\n", $cmd);
|
||||
foreach ($cmd_array as &$value) {
|
||||
fputs($this->fp, $value."\n");
|
||||
}
|
||||
fputs($this->fp, "\n"); //second line feed to end the headers
|
||||
|
||||
$event = $this->read_event();
|
||||
|
||||
if (array_key_exists('$', $event)) {
|
||||
return $event['$'];
|
||||
}
|
||||
return $event;
|
||||
}
|
||||
|
||||
public function reset_fp($fp = false){
|
||||
$tmp = $this->fp;
|
||||
$this->fp = $fp;
|
||||
return $tmp;
|
||||
}
|
||||
|
||||
public function close() {
|
||||
if ($this->fp) {
|
||||
fclose($fp);
|
||||
$this->fp = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
function event_socket_create($host, $port, $password) {
|
||||
$esl = new EventSocket;
|
||||
if ($esl->connect($host, $port, $password)) {
|
||||
return $esl->reset_fp();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function event_socket_request($fp, $cmd) {
|
||||
$esl = new EventSocket($fp);
|
||||
$result = $esl->request($cmd);
|
||||
$esl->reset_fp();
|
||||
return $result;
|
||||
}
|
||||
*/
|
||||
|
||||
// $esl = new EventSocket;
|
||||
// $esl->connect('127.0.0.1', 8021, 'ClueCon');
|
||||
// print($esl->request('api sofia status'));
|
||||
|
||||
// $fp = event_socket_create('127.0.0.1', 8021, 'ClueCon');
|
||||
// print(event_socket_request($fp, 'api sofia status'));
|
||||
|
|
@ -110,76 +110,22 @@ function load_extensions() {
|
|||
load_extensions();
|
||||
|
||||
function event_socket_create($host, $port, $password) {
|
||||
$fp = fsockopen($host, $port, $errno, $errdesc, 3);
|
||||
socket_set_blocking($fp,false);
|
||||
|
||||
if (!$fp) {
|
||||
//error "invalid handle<br />\n";
|
||||
//echo "error number: ".$errno."<br />\n";
|
||||
//echo "error description: ".$errdesc."<br />\n";
|
||||
$esl = new EventSocket;
|
||||
if ($esl->connect($host, $port, $password)) {
|
||||
return $esl->reset_fp();
|
||||
}
|
||||
else {
|
||||
//connected to the socket return the handle
|
||||
while (!feof($fp)) {
|
||||
$buffer = fgets($fp, 1024);
|
||||
usleep(100); //allow time for reponse
|
||||
if (trim($buffer) == "Content-Type: auth/request") {
|
||||
fputs($fp, "auth $password\n\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
return $fp;
|
||||
}
|
||||
} //end function
|
||||
return false;
|
||||
}
|
||||
|
||||
function event_socket_request($fp, $cmd) {
|
||||
if ($fp) {
|
||||
$cmd_array = explode("\n",$cmd);
|
||||
foreach ($cmd_array as &$value) {
|
||||
fputs($fp, $value."\n");
|
||||
}
|
||||
fputs($fp, "\n"); //second line feed to end the headers
|
||||
|
||||
$response = '';
|
||||
$i = 0;
|
||||
$content_length = 0;
|
||||
while (!feof($fp)) {
|
||||
$buffer = fgets($fp, 4096);
|
||||
if ($content_length > 0) {
|
||||
$response .= $buffer;
|
||||
}
|
||||
|
||||
if ($content_length == 0) { //if the content has length don't process again
|
||||
if (strlen(trim($buffer)) > 0) { //run only if buffer has content
|
||||
$array = explode(":", trim($buffer));
|
||||
if ($array[0] == "Content-Length") {
|
||||
$content_length = trim($array[1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($content_length > 0) { //is content_length set
|
||||
//stop reading if all content has been read.
|
||||
if (strlen($response) >= $content_length) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
else {
|
||||
//prevent an endless loop
|
||||
if ($i > 300000) { break; }
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
|
||||
return $response;
|
||||
}
|
||||
else {
|
||||
echo "no handle";
|
||||
}
|
||||
$esl = new EventSocket($fp);
|
||||
$result = $esl->request($cmd);
|
||||
$esl->reset_fp();
|
||||
return $result;
|
||||
}
|
||||
|
||||
function event_socket_request_cmd($cmd) {
|
||||
global $db, $domain_uuid, $host;
|
||||
global $db;
|
||||
|
||||
if (file_exists($_SERVER['DOCUMENT_ROOT'].PROJECT_PATH."/app/settings/app_config.php")) {
|
||||
$sql = "select * from v_settings ";
|
||||
|
|
@ -195,9 +141,13 @@ function event_socket_request_cmd($cmd) {
|
|||
unset ($prep_statement);
|
||||
}
|
||||
|
||||
$fp = event_socket_create($event_socket_ip_address, $event_socket_port, $event_socket_password);
|
||||
$response = event_socket_request($fp, $cmd);
|
||||
fclose($fp);
|
||||
$esl = new EventSocket;
|
||||
if (!$esl->connect($event_socket_ip_address, $event_socket_port, $event_socket_password)) {
|
||||
return false;
|
||||
}
|
||||
$response = $esl->request($cmd);
|
||||
$esl->close();
|
||||
return $response;
|
||||
}
|
||||
|
||||
function byte_convert($bytes, $decimals = 2) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue