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(); + } }