Update AMI Response

Bring branch up to level of previous Pull which can now be deleted
This commit is contained in:
steve-lad 2021-01-28 11:18:48 +01:00 committed by Diederik de Groot
parent 6ccc9bbccb
commit 929f8036b1
No known key found for this signature in database
GPG key ID: AFA728250A1BECD6
6 changed files with 57 additions and 33 deletions

View file

@ -130,39 +130,47 @@ class Command_Response extends Response
$content = explode(':', $line); $content = explode(':', $line);
if (is_array($content)) { if (is_array($content)) {
switch (strtolower($content[0])) { 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': case 'output':
$_tmp_str = trim(substr($line, 7)); // included for backward compatibility with earlier versions of chan_sccp_b. AMI api does not precede command output with Output
if (!empty($_tmp_str)) { $this->_temptable['Output'] = explode(PHP_EOL,str_replace(PHP_EOL.'--END COMMAND--', '',trim($content[1])));
$this->_temptable['output'][]= trim(substr($line, 7));
}
break; break;
default: 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; break;
} }
} }
} }
/* Not required $_temptable cannot be empty as has at least an actionID - see also getResult
if (!empty($this->_temptable)) { if (!empty($this->_temptable)) {
$this->setKey('output', 'array'); $this->setKey('output', 'array');
} }
*/
$this->_completed = $this->isSuccess(); $this->_completed = $this->isSuccess();
// return $this->isSuccess(); // return $this->isSuccess();
} }
public function getResult() public function getResult()
{ {
/* Below test no longer valid as key no longer set
if (stristr($this->getKey('output'), 'array') !== false) { if (stristr($this->getKey('output'), 'array') !== false) {
$result = $this->_temptable; $result = $this->_temptable;
} else { } else {
$result = $this->getMessage(); $result = $this->getMessage();
} }
return $result; */ return $this->_temptable;
} }
} }
class SCCPGeneric_Response extends Response class SCCPGeneric_Response extends Response
{ {
protected $_tables; protected $_tables;
private $_temptable; private $_temptable;
@ -210,6 +218,8 @@ class SCCPGeneric_Response extends Response
{ {
$_rawtable = $this->Table2Array($_tablename); $_rawtable = $this->Table2Array($_tablename);
$result = array(); $result = array();
// Check that there is actually data to be converted
if (empty($_rawtable)) { return $result;}
foreach ($_rawtable as $_row) { foreach ($_rawtable as $_row) {
$all_key_ok = true; $all_key_ok = true;
if (is_array($_fkey)) { if (is_array($_fkey)) {

View file

@ -54,15 +54,13 @@ class aminterface
$this->_socket = false; $this->_socket = false;
$this->_connect_state = false; $this->_connect_state = false;
$this->_error = array(); $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->_eventListeners = array();
// $this->_eventFactory = new EventFactoryImpl(\Logger::getLogger('EventFactory')); // $this->_eventFactory = new EventFactoryImpl(\Logger::getLogger('EventFactory'));
// $this->_responseFactory = new ResponseFactoryImpl(\Logger::getLogger('ResponseFactory')); // $this->_responseFactory = new ResponseFactoryImpl(\Logger::getLogger('ResponseFactory'));
$this->_incomingQueue = array(); $this->_incomingQueue = array();
$this->_lastActionId = false; $this->_lastActionId = false;
$fld_conf = array('user' => 'AMPMGRUSER', 'pass' => 'AMPMGRPASS'); $fld_conf = array('user' => 'AMPMGRUSER', 'pass' => 'AMPMGRPASS');
if (isset($amp_conf['AMPMGRUSER'])) { if (isset($amp_conf['AMPMGRUSER'])) {
foreach ($fld_conf as $key => $value) { foreach ($fld_conf as $key => $value) {
@ -259,7 +257,6 @@ class aminterface
$response = $this->findResponse($event); $response = $this->findResponse($event);
// print_r($response); // print_r($response);
// print_r('<br>--- E2 Response Type 2 ----------<br>'); // print_r('<br>--- E2 Response Type 2 ----------<br>');
if ($response === false || $response->isComplete()) { if ($response === false || $response->isComplete()) {
$this->dispatch($event); // не работает $this->dispatch($event); // не работает
} else { } else {
@ -267,8 +264,8 @@ class aminterface
} }
} }
} else { } else {
// broken ami.. sending a response with events without // broken ami most probably through changes in chan_sccp_b.
// Event and ActionId //sending a response with events without Event and ActionId
$this->_msgToDebug(1, 'resp broken ami'); $this->_msgToDebug(1, 'resp broken ami');
$bMsg = 'Event: ResponseEvent' . "\r\n"; $bMsg = 'Event: ResponseEvent' . "\r\n";
$bMsg .= 'ActionId: ' . $this->_lastActionId . "\r\n" . $aMsg; $bMsg .= 'ActionId: ' . $this->_lastActionId . "\r\n" . $aMsg;
@ -543,17 +540,29 @@ class aminterface
function getRealTimeStatus() function getRealTimeStatus()
{ {
// Initialise array with default values to eliminate testing later
$result = array(); $result = array();
$cmd_res = array();
$cmd_res = ['sccp' => ['message' => 'default value', 'realm' => '', 'status' => 'ERROR']];
if ($this->_connect_state) { if ($this->_connect_state) {
$_action = new \FreePBX\modules\Sccp_manager\aminterface\CommandAction('realtime mysql status'); $_action = new \FreePBX\modules\Sccp_manager\aminterface\CommandAction('realtime mysql status');
$_response = $this->send($_action); $result = $this->send($_action)->getResult();
$res = $_response->getResult(); }
if (!empty($res['output'])) { if (is_array($result['Output'])) {
$result = $res['output']; foreach ($result['Output'] as $aline) {
} else { if (strlen($aline) > 3) {
$result = $_response->getMessage(); $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;
} }
} }

View file

@ -180,6 +180,8 @@ class oldinterface
public function sccp_realtime_status() public function sccp_realtime_status()
{ {
$ast_res = array(); $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 = $this->sccp_core_commands(array('cmd' => 'get_realtime_status'));
$ast_out = preg_split("/[\n]/", $ast_out['data']); $ast_out = preg_split("/[\n]/", $ast_out['data']);
if (strpos($ast_out[0], 'Privilege') !== false) { if (strpos($ast_out[0], 'Privilege') !== false) {

View file

@ -418,10 +418,10 @@ class extconfigs
{ {
global $amp_conf; global $amp_conf;
$res = array(); $res = array();
if (empty($realm)) { /* if (empty($realm)) {
$realm = 'sccp'; $realm = 'sccp';
} }
$cnf_int = \FreePBX::Config(); */ $cnf_int = \FreePBX::Config();
$cnf_wr = \FreePBX::WriteConfig(); $cnf_wr = \FreePBX::WriteConfig();
$cnf_read = \FreePBX::LoadConfig(); $cnf_read = \FreePBX::LoadConfig();

View file

@ -193,8 +193,8 @@ class srvinterface {
if (!$this->ami_mode) { if (!$this->ami_mode) {
return $this->oldinterface->sccp_realtime_status(); return $this->oldinterface->sccp_realtime_status();
} else { } else {
$ast_out = $this->aminterface->getRealTimeStatus(); return $this->aminterface->getRealTimeStatus();
if (is_array($ast_out)) { /* if (is_array($ast_out)) {
foreach ($ast_out as $aline) { foreach ($ast_out as $aline) {
if (strlen($aline) > 3) { if (strlen($aline) > 3) {
$ast_key = strstr(trim($aline), ' ', true); $ast_key = strstr(trim($aline), ' ', true);
@ -203,7 +203,7 @@ class srvinterface {
} }
} }
return $ast_res; return $ast_res;
} */ }
} }
public function get_compatible_sccp() { public function get_compatible_sccp() {
@ -236,11 +236,12 @@ class srvinterface {
public function sccp_list_keysets() { public function sccp_list_keysets() {
if ($this->ami_mode) { /* if ($this->ami_mode) {
return $this->aminterface->sccp_list_keysets(); return $this->aminterface->sccp_list_keysets();
} else { } else {
return $this->oldinterface->sccp_list_keysets(); */ return $this->oldinterface->sccp_list_keysets();
} // }
} }
public function sccp_get_active_device() { public function sccp_get_active_device() {

View file

@ -12,7 +12,7 @@ $driver = $this->FreePBX->Core->getAllDriversInfo();
$core = $this->srvinterface->getSCCPVersion(); $core = $this->srvinterface->getSCCPVersion();
$ast_realtime = $this->srvinterface->sccp_realtime_status(); $ast_realtime = $this->srvinterface->sccp_realtime_status();
$ast_realm = (empty($ast_realtime['sccp']) ? '' : 'sccp'); //$ast_realm = (empty($ast_realtime['sccp']) ? '' : 'sccp');
// if there are multiple connections, this will only return the first. // if there are multiple connections, this will only return the first.
foreach ($ast_realtime as $key => $value) { foreach ($ast_realtime as $key => $value) {
@ -70,13 +70,15 @@ if (empty($ast_realtime)) {
if ($key == $ast_realm) { if ($key == $ast_realm) {
if ($value['status'] == 'OK') { if ($value['status'] == 'OK') {
$rt_sccp = 'TEST OK'; $rt_sccp = 'TEST OK';
$rt_info .= 'SCCP Connections found'; $rt_info .= '<div> Using SCCP connection found to database: '.$value['realm'] . ' with connector: ['. $key .']</div>';
} else { } else {
$rt_sccp = 'SCCP ERROR'; $rt_sccp = 'SCCP ERROR';
$rt_info .= '<div class="alert signature alert-danger"> Error : ' . $value['message'] . '</div>'; $rt_info .= '<div class="alert signature alert-danger"> Error : ' . $value['message'] . '</div>';
} }
} elseif ($value['status'] == 'ERROR') { } elseif ($value['status'] == 'ERROR') {
$rt_info .= '<div> Found error in realtime sectoin [' . $key . '] : ' . $value['message'] . '</div>'; $rt_info .= '<div> No connector found for [' . $key . '] : ' . $value['message'] . '</div>';
} elseif ($value['status'] == 'OK') {
$rt_info .= '<div> Alternative connector found to database '.$value['realm'] . ' with connector: ['. $key . '] </div>';
} }
} }
$info['RealTime'] = array('Version' => $rt_sccp, 'about' => $rt_info); $info['RealTime'] = array('Version' => $rt_sccp, 'about' => $rt_info);