addXPathHandler() public method

Add XPath Handler
public addXPathHandler ( string $xpath, Closure $cb, null $obj = null )
$xpath string
$cb Closure
$obj null
Beispiel #1
0
 /**
  * @TODO DESCR
  */
 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 (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;
             call_user_func($this->onConnected, $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);
         }
     });
 }