Esempio n. 1
0
 /**
  * Handle jid.
  *
  * @param XMLEvent $event
  * @return void
  */
 public function jid(XMLEvent $event)
 {
     /* @var $element \DOMDocument */
     $element = $event->getParameter(0);
     $jid = $element->nodeValue;
     $this->getOptions()->setJid($jid);
     $this->blocking = false;
 }
Esempio n. 2
0
 /**
  * Stream server.
  *
  * @param XMLEvent $event XMLEvent
  * @return void
  */
 public function streamServer(XMLEvent $event)
 {
     if (false === $event->isStartTag()) {
         $this->blocking = false;
         if ($this->getConnection()->isConnected()) {
             $this->getConnection()->disconnect();
         }
     }
 }
Esempio n. 3
0
 /**
  * Handle iq event.
  *
  * @param XMLEvent $event
  * @retrun void
  */
 public function iq(XMLEvent $event)
 {
     if ($event->isEndTag()) {
         /* @var $element \DOMElement */
         $element = $event->getParameter(0);
         if ($this->getId() === $element->getAttribute('id')) {
             $this->blocking = false;
         }
     }
 }
 /**
  * Handle session event.
  *
  * @param XMLEvent $event
  * @return void
  */
 protected function respondeToFeatures(XMLEvent $event, $data)
 {
     if ($event->isEndTag()) {
         /* @var $element \DOMElement */
         $element = $event->getParameter(0);
         // bind element occured in <features>
         if ('features' === $element->parentNode->localName) {
             $this->blocking = true;
             $this->getConnection()->send(sprintf($data, $this->getId()));
         }
     }
 }
Esempio n. 5
0
 /**
  * Start TLS response.
  *
  * @param XMLEvent $event XMLEvent object
  * @return void
  */
 public function proceed(XMLEvent $event)
 {
     if (false === $event->isStartTag()) {
         $this->blocking = false;
         $connection = $this->getConnection();
         if ($connection instanceof SocketConnectionInterface) {
             $connection->getSocket()->crypto(true, STREAM_CRYPTO_METHOD_SSLv23_CLIENT);
         }
         $connection->resetStreams();
         $connection->connect();
     }
 }
 /**
  * Create exception from XMLEvent object.
  *
  * @param \Xmppbot\Core\Event\XMLEvent $event XMLEvent object
  * @return static
  */
 public static function createFromEvent(XMLEvent $event)
 {
     /* @var $element \DOMElement */
     list($element) = $event->getParameters();
     /* @var $first \DOMElement */
     $first = $element->firstChild;
     if (null !== $first && XML_ELEMENT_NODE === $first->nodeType) {
         $message = 'Stream Error: "' . $first->localName . '"';
     } else {
         $message = 'Generic stream error';
     }
     $exception = new static($message);
     $exception->setContent($element->ownerDocument->saveXML($element));
     return $exception;
 }
Esempio n. 7
0
 /**
  * Result received.
  *
  * @param \Xmppbot\Core\Event\XMLEvent $event
  * @return void
  */
 public function result(XMLEvent $event)
 {
     if ($event->isEndTag()) {
         $users = array();
         /* @var $element \DOMElement */
         $element = $event->getParameter(0);
         $items = $element->getElementsByTagName('item');
         /* @var $item \DOMElement */
         foreach ($items as $item) {
             $user = clone $this->getUserObject();
             $user->setName($item->getAttribute('name'))->setJid($item->getAttribute('jid'))->setSubscription($item->getAttribute('subscription'));
             $groups = $item->getElementsByTagName('group');
             foreach ($groups as $group) {
                 $user->addGroup($group->nodeValue);
             }
             $users[] = $user;
         }
         $this->getOptions()->setUsers($users);
         $this->blocking = false;
     }
 }
Esempio n. 8
0
 /**
  * Authentication successful.
  *
  * @param XMLEvent $event
  */
 public function success(XMLEvent $event)
 {
     if (false === $event->isStartTag()) {
         $this->blocking = false;
         $connection = $this->getConnection();
         $connection->resetStreams();
         $connection->connect();
         $this->getOptions()->setAuthenticated(true);
     }
 }
Esempio n. 9
0
 /**
  * Throws an exception when stream error comes from input stream.
  *
  * @param \Xmppbot\Core\Event\XMLEvent $event
  * @throws StreamErrorException
  */
 public function error(XMLEvent $event)
 {
     if (false === $event->isStartTag()) {
         throw StreamErrorException::createFromEvent($event);
     }
 }
Esempio n. 10
0
 /**
  * Challenge string received.
  *
  * @param XMLEvent $event XML event
  * @return void
  */
 public function challenge(XMLEvent $event)
 {
     if ($event->isEndTag()) {
         list($element) = $event->getParameters();
         $challenge = XML::base64Decode($element->nodeValue);
         $values = $this->parseCallenge($challenge);
         if (isset($values['nonce'])) {
             $send = '<response xmlns="urn:ietf:params:xml:ns:xmpp-sasl">' . $this->response($values) . '</response>';
         } elseif (isset($values['rspauth'])) {
             $send = '<response xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/>';
         } else {
             throw new AuthenticationErrorException("Error when receiving challenge: \"{$challenge}\"");
         }
         $this->getConnection()->send($send);
     }
 }