PHPDaemon\Clients\XMPP\Connection::createXMLStream PHP Method

createXMLStream() public method

public createXMLStream ( )
    public function createXMLStream()
    {
        $this->xml = new XMLStream();
        $this->xml->setDefaultNS('jabber:client');
        $this->xml->addXPathHandler('{http://etherx.jabber.org/streams}features', function ($xml) {
            /** @var XMLStream $xml */
            if ($xml->hasSub('starttls') and $this->use_encryption) {
                $this->sendXML("<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'><required /></starttls>");
            } elseif ($xml->hasSub('bind') and $this->authorized) {
                $id = $this->getId();
                $this->iqSet('<bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><resource>' . $this->path . '</resource></bind>', function ($xml) {
                    if ($xml->attrs['type'] === 'result') {
                        $this->fulljid = $xml->sub('bind')->sub('jid')->data;
                        $jidarray = explode('/', $this->fulljid);
                        $this->jid = $jidarray[0];
                    }
                    $this->iqSet('<session xmlns="urn:ietf:params:xml:ns:xmpp-session" />', function ($xml) {
                        $this->roster = new XMPPRoster($this);
                        if ($this->onConnected) {
                            $this->connected = true;
                            $this->onConnected->executeAll($this);
                            $this->onConnected = null;
                        }
                        $this->event('connected');
                    });
                });
            } else {
                if (mb_orig_strlen($this->password)) {
                    $this->sendXML("<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='PLAIN'>" . base64_encode("" . $this->user . "" . $this->password) . "</auth>");
                } else {
                    $this->sendXML("<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='ANONYMOUS'/>");
                }
            }
        });
        $this->xml->addXPathHandler('{urn:ietf:params:xml:ns:xmpp-sasl}success', function ($xml) {
            $this->authorized = true;
            $this->xml->finish();
            $this->createXMLStream();
            $this->startXMLStream();
        });
        $this->xml->addXPathHandler('{urn:ietf:params:xml:ns:xmpp-sasl}failure', function ($xml) {
            if ($this->onConnected) {
                $this->connected = false;
                $func = $this->onConnected;
                $func($this);
                $this->onConnected = null;
            }
            $this->finish();
        });
        $this->xml->addXPathHandler('{urn:ietf:params:xml:ns:xmpp-tls}proceed', function ($xml) {
            Daemon::log("XMPPClient: TLS not supported.");
        });
        $this->xml->addXPathHandler('{jabber:client}message', function ($xml) {
            if (isset($xml->attrs['type'])) {
                $payload['type'] = $xml->attrs['type'];
            } else {
                $payload['type'] = 'chat';
            }
            $payload['xml'] = $xml;
            $payload['from'] = $xml->attrs['from'];
            if ($xml->hasSub('body')) {
                $payload['body'] = $xml->sub('body')->data;
                $this->event('message', $payload);
            }
        });
    }