From 26d9554c054b064e3d59e631f9926bb54a2b36b1 Mon Sep 17 00:00:00 2001
From: steve-lad <72376554+steve-lad@users.noreply.github.com>
Date: Thu, 28 Jan 2021 11:54:27 +0100
Subject: [PATCH] Updated GenericResponse
Updated generic response handler for table case
---
.../aminterface/Response.class.php | 65 +++++++++++++------
Sccp_manager.inc/srvinterface.class.php | 6 +-
2 files changed, 48 insertions(+), 23 deletions(-)
diff --git a/Sccp_manager.inc/aminterface/Response.class.php b/Sccp_manager.inc/aminterface/Response.class.php
index 48582af..c7415fd 100644
--- a/Sccp_manager.inc/aminterface/Response.class.php
+++ b/Sccp_manager.inc/aminterface/Response.class.php
@@ -177,40 +177,65 @@ class SCCPGeneric_Response extends Response
public function addEvent($event)
{
// not eventlist (start/complete)
-// print_r('
---- addEvent --
');
-// print_r($event);
-// print_r('
---- Event List--
');
-// print_r($event->getEventList());
- if (stristr($event->getEventList(), 'start') === false && stristr($event->getEventList(), 'complete') === false && stristr($event->getName(), 'complete') === false
- ) {
- $unknownevent = "FreePBX\\modules\\Sccp_manager\\aminterface\\UnknownEvent";
- if (!($event instanceof $unknownevent)) {
- // Handle TableStart/TableEnd Differently
- if (stristr($event->getName(), 'TableStart') != false) {
+ // print_r('
---- addEvent --
');
+ // print_r($event);
+ // print_r('
---- Event List--
');
+ // print_r($event->getEventList());
+
+ // Nothing to do with this - we need a table start
+ if (stristr($event->getEventList(), 'start')) { return; }
+
+
+ // This is empty as soon as we have received a TableStart.
+ // The next message is the first of the data sets
+ // We use this variable in the switch to add set entries
+ if ( empty($thisSetEventEntryType)) {
+ if (strpos($event->getName(), 'Entry')) {
+ $thisSetEventEntryType = $event->getName();
+ } else {
+ $thisSetEventEntryType = 'undefinedAsThisIsNotASet';
+ }
+ }
+ $unknownevent = "FreePBX\\modules\\Sccp_manager\\aminterface\\UnknownEvent";
+ if (!($event instanceof $unknownevent)) {
+ switch ( $event->getName()) {
+ case $thisSetEventEntryType :
+ $this->_temptable['Entries'][] = $event;
+ break;
+ case 'TableStart':
+ //initialise
$this->_temptable = array();
$this->_temptable['Name'] = $event->getTableName();
$this->_temptable['Entries'] = array();
- } elseif (stristr($event->getName(), 'TableEnd') != false) {
+ $thisSetEventEntryType = '';
+ break;
+ case 'TableEnd':
+ //Close
if (!is_array($this->_tables)) {
$this->_tables = array();
}
$this->_tables[$event->getTableName()] = $this->_temptable;
unset($this->_temptable);
- } elseif (is_array($this->_temptable)) {
- $this->_temptable['Entries'][] = $event;
- } else {
+ $thisSetEventEntryType = '';
+
+ // Finished the table. Now check to see if everything was received
+ // If counts do not match return false and table will not be
+ //loaded
+ if ($event->getKey('TableEntries') != count($this->_tables[$event->getTableName()]['Entries'])) {
+ return $this->_completed = false;
+ }
+ break;
+ default:
// add regular event
$this->_events[] = $event;
}
} else {
- // add regular event
+ // add unknown event
$this->_events[] = $event;
}
- }
- // finish eventlist
- if (stristr($event->getEventList(), 'complete') != false || stristr($event->getName(), 'complete') != false
- ) {
- $this->_completed = true;
+ // Received a complete eventList outside of a table.
+ if (stristr($event->getEventList(), 'complete') || stristr($event->getName(), 'complete')) {
+ return $this->_completed = true;
}
}
diff --git a/Sccp_manager.inc/srvinterface.class.php b/Sccp_manager.inc/srvinterface.class.php
index f2e50cc..c411350 100644
--- a/Sccp_manager.inc/srvinterface.class.php
+++ b/Sccp_manager.inc/srvinterface.class.php
@@ -236,11 +236,11 @@ 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();
+ }
}