Beispiel #1
0
 /**
  * Schedule delivery of a 'fat ping' to the subscriber's callback
  * endpoint. If queues are disabled, this will run immediately.
  *
  * @param string $atom well-formed Atom feed
  * @param int $retries optional count of retries if POST fails; defaults to hub_retries from config or 0 if unset
  */
 function distribute($atom, $retries = null)
 {
     if ($retries === null) {
         $retries = intval(common_config('ostatus', 'hub_retries'));
     }
     if (common_config('ostatus', 'local_push_bypass')) {
         // If target is a local site, bypass the web server and drop the
         // item directly into the target's input queue.
         $url = parse_url($this->callback);
         $wildcard = common_config('ostatus', 'local_wildcard');
         $site = Status_network::getFromHostname($url['host'], $wildcard);
         if ($site) {
             if ($this->secret) {
                 $hmac = 'sha1=' . hash_hmac('sha1', $atom, $this->secret);
             } else {
                 $hmac = '';
             }
             // Hack: at the moment we stick the subscription ID in the callback
             // URL so we don't have to look inside the Atom to route the subscription.
             // For now this means we need to extract that from the target URL
             // so we can include it in the data.
             $parts = explode('/', $url['path']);
             $subId = intval(array_pop($parts));
             $data = array('feedsub_id' => $subId, 'post' => $atom, 'hmac' => $hmac);
             common_log(LOG_DEBUG, "Cross-site PuSH bypass enqueueing straight to {$site->nickname} feed {$subId}");
             $qm = QueueManager::get();
             $qm->enqueue($data, 'pushin', $site->nickname);
             return;
         }
     }
     // We dare not clone() as when the clone is discarded it'll
     // destroy the result data for the parent query.
     // @fixme use clone() again when it's safe to copy an
     // individual item from a multi-item query again.
     $sub = HubSub::staticGet($this->topic, $this->callback);
     $data = array('sub' => $sub, 'atom' => $atom, 'retries' => $retries);
     common_log(LOG_INFO, "Queuing PuSH: {$this->topic} to {$this->callback}");
     $qm = QueueManager::get();
     $qm->enqueue($data, 'hubout');
 }