Source of file ComplexResponse.php

Size: 5,038 Bytes - Last Modified: 2019-04-25T22:07:38+00:00

/data/development/sccp/sources/PAMI/src/PAMI/Message/Response/ComplexResponse.php

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
<?php
/**
 * A generic SCCP response message from ami.
 *
 * PHP Version 5
 *
 * @category   Pami
 * @package    Message
 * @subpackage Response
 * @author     Diederik de Groot <ddegroot@talon.nl>
 * @license    http://marcelog.github.com/PAMI/ Apache License 2.0
 * @version    SVN: $Id$
 * @link       http://marcelog.github.com/PAMI/
 *
 * Copyright 2019 Diederik de Groot <ddegroot@talon.nl>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */
namespace PAMI\Message\Response;

use PAMI\Message\Response\Response;
use PAMI\Message\Event\EventMessage;
use PAMI\Exception\PAMIException;

/**
 * A generic SCCP response message from ami.
 *
 * PHP Version 5
 *
 * @category   Pami
 * @package    Message
 * @subpackage Response
 * @author     Marcelo Gornstein <marcelog@gmail.com>
 * @license    http://marcelog.github.com/PAMI/ Apache License 2.0
 * @link       http://marcelog.github.com/PAMI/
 */
class ComplexResponse extends Response
{
    /**
     * Child Tables
     * @var EventMessage[]
     */
    protected $tables;

    /**
     * Catch All incoming Events into current Table.
     * @var Array
     */
    private $temptable;

    /**
     * Adds an event to this response.
     *
     * If we encounter StartTable/EndTable Events we will move the events into the tables['TableName'] array
     *
     * @param EventMessage $event Child event to add.
     *
     * @return void
     */
    public function addEvent(EventMessage $event)
    {
        // not eventlist (start/complete)
        if (stristr($event->getEventList(), 'start') === false
            && stristr($event->getEventList(), 'complete') === false
            && stristr($event->getName(), 'complete') === false
        ) {
            $unknownevent = "PAMI\\Message\\Event\\UnknownEvent";
            if (!($event instanceof $unknownevent)) {
                // Handle TableStart/TableEnd Differently
                if (stristr($event->getName(), 'TableStart') != false) {
                    $this->temptable = array();
                    $this->temptable['Name'] = $event->getTableName();
                    $this->temptable['Entries'] = array();
                } elseif (stristr($event->getName(), 'TableEnd') != false) {
                    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 {
                    // add regular event
                    $this->events[] = $event;
                }
            } else {
                // add regular event
                $this->events[] = $event;
            }
        }
        // finish eventlist
        if (stristr($event->getEventList(), 'complete') != false
            || stristr($event->getName(), 'complete') != false
        ) {
            $this->completed = true;
        }
    }

    /**
     * Returns true if this Response Message contains an events tables (TableStart/TableEnd)
     *
     * @return boolean
     */
    public function hasTable()
    {
        if (is_array($this->tables)) {
            return true;
        }
        return false;
    }

    /**
     * Returns all eventtabless for this response.
     *
     * @return EventMessage[]
     */
    public function getTableNames()
    {
        return array_keys($this->tables);
    }


    /**
     * Returns all associated events for this response->tablename.
     *
     * @return EventMessage[]
     */
    public function getTable($tablename)
    {
        if ($this->hasTable() && array_key_exists($tablename, $this->tables)) {
            return $this->tables[$tablename];
        }
        throw new PAMIException("No such table.");
    }

    /**
     * Returns decoded version of the 'JSON' key if present.
     *
     * @return array
     */
    public function getJSON()
    {
        if (strlen($this->getKey('JSON')) > 0) {
            if (($json = json_decode($this->getKey('JSON'), true)) != false) {
                return $json;
            }
        }
        throw new PAMIException("No JSON Key found to return.");
    }

    /**
     * Constructor.
     *
     * @param string $rawContent Literal message as received from ami.
     *
     * @return void
     */
    public function __construct($rawContent)
    {
        parent::__construct($rawContent);
    }
}