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