]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
ping handler returns proper boolean response
authorEvan Prodromou <evan@controlyourself.ca>
Thu, 19 Mar 2009 13:21:50 +0000 (09:21 -0400)
committerEvan Prodromou <evan@controlyourself.ca>
Thu, 19 Mar 2009 13:39:19 +0000 (09:39 -0400)
The ping queue handler wasn't returning a true value -- filling up the
queue with ping requests. It now returns a true value.

lib/ping.php
scripts/pingqueuehandler.php

index 32c0b9806a8e4306dcf218cd2f51cee9495b3ae2..2cbec2f212484b1f49f1b3991997c95bf61c99fa 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /*
  * Laconica - a distributed open-source microblogging tool
- * Copyright (C) 2008, Controlez-Vous, Inc.
+ * Copyright (C) 2009, Control Yourself, Inc.
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Affero General Public License as published by
 if (!defined('LACONICA')) { exit(1); }
 
 function ping_broadcast_notice($notice) {
+
        if (!$notice->is_local) {
-               return;
+               return true;
        }
-       
+
        # Array of servers, URL => type
        $notify = common_config('ping', 'notify');
        $profile = $notice->getProfile();
        $tags = ping_notice_tags($notice);
-       
+
        foreach ($notify as $notify_url => $type) {
                switch ($type) {
                 case 'xmlrpc':
                 case 'extended':
                        $req = xmlrpc_encode_request('weblogUpdates.ping',
                                                                                 array($profile->nickname, # site name
-                                                                                          common_local_url('showstream', 
+                                                                                          common_local_url('showstream',
                                                                                                                                array('nickname' => $profile->nickname)),
                                                                                           common_local_url('shownotice',
                                                                                                                                array('notice' => $notice->id)),
-                                                                                          common_local_url('userrss', 
+                                                                                          common_local_url('userrss',
                                                                                                                                array('nickname' => $profile->nickname)),
                                                                                           $tags));
-                       
-                       # We re-use this tool's fetcher, since it's pretty good
-       
-                       $fetcher = Auth_Yadis_Yadis::getHTTPFetcher();
 
-                       if (!$fetcher) {
-                               common_log(LOG_WARNING, 'Failed to initialize Yadis fetcher.', __FILE__);
-                               return false;
-                       }
-       
-                       $result = $fetcher->post($notify_url,
-                                                                        $req);
-                                                                                          
+            $context = stream_context_create(array('http' => array('method' => "POST",
+                                                                   'header' =>
+                                                                   "Content-Type: text/xml\r\n".
+                                                                   "User-Agent: Laconica/".LACONICA_VERSION."\r\n",
+                                                                   'content' => $request)));
+            $file = file_get_contents($notify_url, false, $context);
+            $response = xmlrpc_decode($file);
+            if (xmlrpc_is_fault($response)) {
+                common_log(LOG_WARNING,
+                           "XML-RPC error for ping ($notify_url, $notice->id) ".
+                           "$response[faultString] ($response[faultCode])");
+            } else {
+                common_log(LOG_INFO,
+                           "Ping success for $notify_url $notice->id");
+            }
+            break;
+
                 case 'get':
-                case 'post':                   
+                case 'post':
+            $args = array('name' => $profile->nickname,
+                          'url' => common_local_url('showstream',
+                                                    array('nickname' => $profile->nickname)),
+                          'changesURL' => common_local_url('userrss',
+                                                           array('nickname' => $profile->nickname)));
+
+            $fetcher = Auth_Yadis_Yadis::getHTTPFetcher();
+
+            if ($type === 'get') {
+                $result = $fetcher->get($notify_url . '?' . http_build_query($args),
+                                        array('User-Agent: Laconica/'.LACONICA_VERSION));
+            } else {
+                $result = $fetcher->post($notify_url,
+                                         http_build_query($args),
+                                         array('User-Agent: Laconica/'.LACONICA_VERSION));
+            }
+            if ($result->status != '200') {
+                common_log(LOG_WARNING,
+                           "Ping error for '$notify_url' ($notice->id): ".
+                           "$result->body");
+            } else {
+                common_log(LOG_INFO,
+                           "Ping success for '$notify_url' ($notice->id): ".
+                           "'$result->body'");
+            }
+            break;
+
                 default:
                        common_log(LOG_WARNING, 'Unknown notify type for ' . $notify_url . ': ' . $type);
-                                                                                  }
+        }
        }
+
+    return true;
 }
-               
+
 function ping_notice_tags($notice) {
        $tag = new Notice_tag();
        $tag->notice_id = $notice->id;
index 55a266e4a43a1a21c0f0b03c64198a9cc604accb..ada6ecdba2070f20ad9a865553fdca2543df15ec 100644 (file)
@@ -34,7 +34,7 @@ require_once(INSTALLDIR . '/lib/queuehandler.php');
 set_error_handler('common_error_handler');
 
 class PingQueueHandler extends QueueHandler {
-       
+
        function transport() {
                return 'ping';
        }
@@ -47,7 +47,7 @@ class PingQueueHandler extends QueueHandler {
        function handle_notice($notice) {
                return ping_broadcast_notice($notice);
        }
-       
+
        function finish() {
        }
 }