/** * Collect authentication machanisms. * * @param XMLEvent $event * @return void */ public function collectMechanisms(XMLEvent $event) { if ($this->getConnection()->isReady() && false === $this->isAuthenticated()) { /* @var $element \DOMElement */ list($element) = $event->getParameters(); $this->blocking = true; if (false === $event->isStartTag()) { $this->mechanisms[] = strtolower($element->nodeValue); } } }
/** * Create exception from XMLEvent object. * * @param \Fabiang\Xmpp\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; }
/** * 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); } }