Skip to content

Commit

Permalink
Merge pull request PhantomVl#97 from steve-lad/Update-AMI-getRealTime…
Browse files Browse the repository at this point in the history
…Status

Update ami get real time status
  • Loading branch information
PhantomVl authored Feb 5, 2021
2 parents e31b4bf + c929649 commit c0cf0b1
Show file tree
Hide file tree
Showing 7 changed files with 85 additions and 64 deletions.
2 changes: 1 addition & 1 deletion Sccp_manager.inc/aminterface/Message.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

class AMIException extends \Exception
{

}

abstract class Message
Expand Down
41 changes: 24 additions & 17 deletions Sccp_manager.inc/aminterface/Response.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,6 @@ public function setActionId($actionId)
$this->setKey('ActionId', $actionId);
}


public function getVariable($_rawContent, $_fields = '')
{
$lines = explode(Message::EOL, $_rawContent);
Expand Down Expand Up @@ -119,53 +118,59 @@ public function __construct($rawContent)
class Command_Response extends Response
{
private $_temptable;

public function __construct($rawContent)
{
// print_r('<br>---- r --<br>');
// print_r($rawContent);
// print_r('<br>---- re --<br>');
$this->_temptable = array();
parent::__construct($rawContent);

$lines = explode(Message::EOL, $rawContent);
foreach ($lines as $line) {
$content = explode(':', $line);
if (is_array($content)) {
switch (strtolower($content[0])) {
case 'actionid':
$this->_temptable['ActionID'] = trim($content[1]);
break;
case 'response':
$this->_temptable['Response'] = trim($content[1]);
break;
case 'privilege':
$this->_temptable['Privilege'] = trim($content[1]);
break;
case 'output':
$_tmp_str = trim(substr($line, 7));
if (!empty($_tmp_str)) {
$this->_temptable['output'][]= trim(substr($line, 7));
}
// included for backward compatibility with earlier versions of chan_sccp_b. AMI api does not precede command output with Output
$this->_temptable['Output'] = explode(PHP_EOL,str_replace(PHP_EOL.'--END COMMAND--', '',trim($content[1])));
break;
default:
$this->_temptable[$content[0]][]= trim(substr($line, strlen($content[0])+1));
$this->_temptable['Output'] = explode(PHP_EOL,str_replace(PHP_EOL.'--END COMMAND--', '', trim($line)));
break;
}
}
}
/* Not required $_temptable cannot be empty as has at least an actionID - see also getResult
if (!empty($this->_temptable)) {
$this->setKey('output', 'array');
}
*/
$this->_completed = $this->isSuccess();
// return $this->isSuccess();
}
public function getResult()
{
/* Below test no longer valid as key no longer set
if (stristr($this->getKey('output'), 'array') !== false) {
$result = $this->_temptable;
} else {
$result = $this->getMessage();
}
return $result;
*/ return $this->_temptable;
}
}

class SCCPGeneric_Response extends Response
{

protected $_tables;
private $_temptable;

Expand Down Expand Up @@ -208,11 +213,13 @@ public function addEvent($event)
$this->_completed = true;
}
}

protected function ConvertTableData($_tablename, $_fkey, $_fields)
{
$_rawtable = $this->Table2Array($_tablename);
$result = array();
// Check that there is actually data to be converted
if (empty($_rawtable)) { return $result;}
foreach ($_rawtable as $_row) {
$all_key_ok = true;
if (is_array($_fkey)) {
Expand Down Expand Up @@ -278,8 +285,8 @@ protected function ConvertEventData($_fkey, $_fields)
}
return $result;
}


public function hasTable()
{
if (is_array($this->_tables)) {
Expand All @@ -291,7 +298,7 @@ public function getTableNames()
{
return (is_array($this->_tables)) ? array_keys($this->_tables) : null;
}

public function Table2Array($tablename = '')
{
$result =array();
Expand Down Expand Up @@ -324,7 +331,7 @@ public function Events2Array()
return false;
}
}

public function getTable($tablename)
{
if ($this->hasTable() && array_key_exists($tablename, $this->_tables)) {
Expand All @@ -349,7 +356,7 @@ public function __construct($rawContent)
// $this->getVariable($rawContent, $_fields);
$this->_completed = !$this->isList();
}

public function getResult()
{
if ($this->getKey('JSON') != null) {
Expand Down
39 changes: 24 additions & 15 deletions Sccp_manager.inc/aminterface/aminterface.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -54,15 +54,13 @@ public function __construct($parent_class = null)
$this->_socket = false;
$this->_connect_state = false;
$this->_error = array();
$this->_config = array('host' => 'localhost', 'user' => '', 'pass' => '', 'port' => '5038', 'tsoket' => 'tcp://', 'timeout' => 30, 'enabled' => false);


$this->_config = array('host' => 'localhost', 'user' => '', 'pass' => '', 'port' => '5038', 'tsoket' => 'tcp://', 'timeout' => 30, 'enabled' => true);
$this->_eventListeners = array();
// $this->_eventFactory = new EventFactoryImpl(\Logger::getLogger('EventFactory'));
// $this->_responseFactory = new ResponseFactoryImpl(\Logger::getLogger('ResponseFactory'));
$this->_incomingQueue = array();
$this->_lastActionId = false;

$fld_conf = array('user' => 'AMPMGRUSER', 'pass' => 'AMPMGRPASS');
if (isset($amp_conf['AMPMGRUSER'])) {
foreach ($fld_conf as $key => $value) {
Expand Down Expand Up @@ -259,16 +257,15 @@ public function process()
$response = $this->findResponse($event);
// print_r($response);
// print_r('<br>--- E2 Response Type 2 ----------<br>');

if ($response === false || $response->isComplete()) {
$this->dispatch($event); // не работает
} else {
$response->addEvent($event);
}
}
} else {
// broken ami.. sending a response with events without
// Event and ActionId
// broken ami most probably through changes in chan_sccp_b.
//sending a response with events without Event and ActionId
$this->_msgToDebug(1, 'resp broken ami');
$bMsg = 'Event: ResponseEvent' . "\r\n";
$bMsg .= 'ActionId: ' . $this->_lastActionId . "\r\n" . $aMsg;
Expand Down Expand Up @@ -409,7 +406,7 @@ protected function dispatch($message)
$listener = $data[0];
$predicate = $data[1];
print_r($data);

if (is_callable($predicate) && !call_user_func($predicate, $message)) {
continue;
}
Expand Down Expand Up @@ -543,17 +540,29 @@ function getSCCPVersion()

function getRealTimeStatus()
{
// Initialise array with default values to eliminate testing later
$result = array();
$cmd_res = array();
$cmd_res = ['sccp' => ['message' => 'default value', 'realm' => '', 'status' => 'ERROR']];
if ($this->_connect_state) {
$_action = new \FreePBX\modules\Sccp_manager\aminterface\CommandAction('realtime mysql status');
$_response = $this->send($_action);
$res = $_response->getResult();
if (!empty($res['output'])) {
$result = $res['output'];
} else {
$result = $_response->getMessage();
$result = $this->send($_action)->getResult();
}
if (is_array($result['Output'])) {
foreach ($result['Output'] as $aline) {
if (strlen($aline) > 3) {
$temp_strings = explode(' ', $aline);
$cmd_res_key = $temp_strings[0];
foreach ($temp_strings as $test_string) {
if (strpos($test_string, '@')) {
$this_realm = $test_string;
break;
}
}
$cmd_res[$cmd_res_key] = array('message' => $aline, 'realm' => $this_realm, 'status' => strpos($aline, 'connected') ? 'OK' : 'ERROR');
}
}
}
return $result;
return $cmd_res;
}
}
2 changes: 2 additions & 0 deletions Sccp_manager.inc/aminterface/oldinterface.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,8 @@ public function sccp_list_all_hints()
public function sccp_realtime_status()
{
$ast_res = array();
// Below added for compatibility with AMI result and modified server.info
$ast_res = ['sccp' => ['message' => 'default value', 'realm' => '', 'status' => 'ERROR']];
$ast_out = $this->sccp_core_commands(array('cmd' => 'get_realtime_status'));
$ast_out = preg_split("/[\n]/", $ast_out['data']);
if (strpos($ast_out[0], 'Privilege') !== false) {
Expand Down
24 changes: 12 additions & 12 deletions Sccp_manager.inc/extconfigs.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -45,19 +45,19 @@ public function getextConfig($id = '', $index = '')
$tmp_dt = new \DateTime(null, new \DateTimeZone($index));
$tmp_ofset = $tmp_dt->getOffset();
return $tmp_ofset / 60;

break;
case 'sccp_timezone': // Sccp manafer: 1400 (+ Id) :2007 (+ Id)
$result = array();

if (empty($index)) {
return array('offset' => '00', 'daylight' => '', 'cisco_code' => 'Greenwich');
}
if (array_key_exists($index, $this->cisco_timezone)) {
return $this->get_cisco_time_zone($index);
} else {
$timezone_abbreviations = \DateTimeZone::listAbbreviations();

$tz_tmp = array();
foreach ($timezone_abbreviations as $subArray) {
$tf_idt = array_search($index, array_column($subArray, 'timezone_id'));
Expand Down Expand Up @@ -109,7 +109,7 @@ public function getextConfig($id = '', $index = '')

private function get_cisco_time_zone($tzc)
{

if ((empty($tzc)) or (!array_key_exists($tzc, $this->cisco_timezone))) {
// return array('offset' => '00', 'daylight' => '', 'cisco_code' => 'Greenwich');
return array();
Expand Down Expand Up @@ -419,10 +419,10 @@ public function validate_RealTime($realm = '')
{
global $amp_conf;
$res = array();
if (empty($realm)) {
/* if (empty($realm)) {
$realm = 'sccp';
}
$cnf_int = \FreePBX::Config();
*/ $cnf_int = \FreePBX::Config();
$cnf_wr = \FreePBX::WriteConfig();
$cnf_read = \FreePBX::LoadConfig();

Expand Down Expand Up @@ -464,14 +464,14 @@ public function validate_RealTime($realm = '')
$res['extconfig'] = 'OK';

if (empty($res['sccpdevice'])) {
$res['extconfig'] = ' Options "Sccpdevice" not config ';
$res['extconfig'] = ' Option "Sccpdevice" is not configured ';
}
if (empty($res['sccpline'])) {
$res['extconfig'] = ' Options "Sccpline" not config ';
$res['extconfig'] = ' Option "Sccpline" is not configured ';
}

if (empty($res['extconfigfile'])) {
$res['extconfig'] = 'File extconfig.conf not exist';
$res['extconfig'] = 'File extconfig.conf does not exist';
}


Expand All @@ -483,10 +483,10 @@ public function validate_RealTime($realm = '')
if (file_exists($dir . '/res_mysql.conf')) {
$res_conf = $cnf_read->getConfig('res_mysql.conf');
if (empty($res_conf[$realm])) {
$res['mysqlconfig'] = 'Not Config in file: res_mysql.conf';
$res['mysqlconfig'] = 'Config not found in file: res_mysql.conf';
} else {
if ($res_conf[$realm]['dbsock'] != $def_bd_config['dbsock']) {
$res['mysqlconfig'] = 'Mysql Soket Error in file: res_mysql.conf';
$res['mysqlconfig'] = 'Mysql Socket Error in file: res_mysql.conf';
}
}
if (empty($res['mysqlconfig'])) {
Expand All @@ -500,7 +500,7 @@ public function validate_RealTime($realm = '')
$res['mysqlconfig'] = 'Not Config in file: res_config_mysql.conf';
} else {
if ($res_conf[$realm]['dbsock'] != $def_bd_config['dbsock']) {
$res['mysqlconfig'] = 'Mysql Soket Error in file: res_config_mysql.conf';
$res['mysqlconfig'] = 'Mysql Socket Error in file: res_config_mysql.conf';
}
}
if (empty($res['mysqlconfig'])) {
Expand Down
13 changes: 7 additions & 6 deletions Sccp_manager.inc/srvinterface.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -193,8 +193,8 @@ public function sccp_realtime_status() {
if (!$this->ami_mode) {
return $this->oldinterface->sccp_realtime_status();
} else {
$ast_out = $this->aminterface->getRealTimeStatus();
if (is_array($ast_out)) {
return $this->aminterface->getRealTimeStatus();
/* if (is_array($ast_out)) {
foreach ($ast_out as $aline) {
if (strlen($aline) > 3) {
$ast_key = strstr(trim($aline), ' ', true);
Expand All @@ -203,7 +203,7 @@ public function sccp_realtime_status() {
}
}
return $ast_res;
}
*/ }
}

public function get_compatible_sccp() {
Expand Down Expand Up @@ -236,11 +236,12 @@ public function getSCCPVersion() {

public function sccp_list_keysets() {

if ($this->ami_mode) {
/* if ($this->ami_mode) {
return $this->aminterface->sccp_list_keysets();
} else {
return $this->oldinterface->sccp_list_keysets();
}
*/ return $this->oldinterface->sccp_list_keysets();
// }

}

public function sccp_get_active_device() {
Expand Down
Loading

0 comments on commit c0cf0b1

Please sign in to comment.