]> git.mxchange.org Git - friendica.git/blobdiff - include/poller.php
rino recipient patch
[friendica.git] / include / poller.php
index b88b131e23a2f05da69eaeeb198bb19d8772db9f..d97584ff900c8ec45881913d69aae23374bc0a0d 100644 (file)
        require_once('datetime.php');
        require_once('simplepie/simplepie.inc');
        require_once('include/items.php');
-
        require_once('include/Contact.php');
 
-       $debugging = get_config('system','debugging');
-
        $a->set_baseurl(get_config('system','url'));
 
+       logger('poller: start');
+
+       // run queue delivery process in the background
+
+       $php_path = ((x($a->config,'php_path') && strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
+       proc_close(proc_open("\"$php_path\" \"include/queue.php\" &", array(), $foo));
+
+
+       $force = false;
+       if(($argc > 1) && ($argv[1] == 'force'))
+               $force = true;
+
+       // 'stat' clause is a temporary measure until we have federation subscriptions working both directions
        $contacts = q("SELECT * FROM `contact` 
                WHERE ( ( `network` = 'dfrn' AND ( `dfrn-id` != '' OR (`issued-id` != '' AND `duplex` = 1)))
                OR ( `network` = 'stat' AND `poll` != '' ) ) 
@@ -67,7 +77,7 @@
                                                $update = true;
                                        break;
                        }
-                       if(! $update)
+                       if((! $update) && (! $force))
                                continue;
                }
 
@@ -81,8 +91,7 @@
 
                $importer = $r[0];
 
-               if($debugging)
-                       echo "IMPORTER: {$importer['name']}\n";
+               logger("poller: poll: IMPORTER: {$importer['name']}, CONTACT: {$contact['name']}");
 
                $last_update = (($contact['last-update'] === '0000-00-00 00:00:00') 
                        ? datetime_convert('UTC','UTC','now - 30 days', ATOM_TIME)
        
                        $xml = fetch_url($url);
 
-                       if($debugging) {
-                               echo "URL: " . $url . "\n";
-                               echo "XML: " . $xml . "\n";
-                       }
+                       logger('poller: handshake with url ' . $url . ' returns xml: ' . $xml, LOGGER_DATA);
 
                        if(! $xml) {
+                               logger("poller: $url appears to be dead - marking for death ");
                                // dead connection - might be a transient event, or this might
                                // mean the software was uninstalled or the domain expired. 
                                // Will keep trying for one month.
                                mark_for_death($contact);
+
+                               // set the last-update so we don't keep polling
+
+                               $r = q("UPDATE `contact` SET `last-update` = '%s' WHERE `id` = %d LIMIT 1",
+                                       dbesc(datetime_convert()),
+                                       intval($contact['id'])
+                               );
+
                                continue;
                        }
 
                        $res = simplexml_load_string($xml);
 
                        if(intval($res->status) == 1) {
+                               logger("poller: $url replied status 1 - marking for death ");
+
                                // we may not be friends anymore. Will keep trying for one month.
+                               // set the last-update so we don't keep polling
+
+                               $r = q("UPDATE `contact` SET `last-update` = '%s' WHERE `id` = %d LIMIT 1",
+                                       dbesc(datetime_convert()),
+                                       intval($contact['id'])
+                               );
+
                                mark_for_death($contact);
                        }
                        else {
-                               if($contact['term-date'] != '0000-00-00 00:00:00')
+                               if($contact['term-date'] != '0000-00-00 00:00:00') {
+                                       logger("poller: $url back from the dead - removing mark for death");
                                        unmark_for_death($contact);
+                               }
                        }
 
                        if((intval($res->status) != 0) || (! strlen($res->challenge)) || (! strlen($res->dfrn_id)))
                        $xml = fetch_url($contact['poll']);
                }
 
-               if($debugging) {
-                       echo "XML response:" . $xml . "\n";
-                       echo "Length:" . strlen($xml) . "\n";
-               }
+               logger('poller: received xml : ' . $xml, LOGGER_DATA);
 
                if(! strlen($xml))
                        continue;
 
                consume_feed($xml,$importer,$contact,$hub);
-               
-               if((strlen($hub)) && ($contact['rel'] == REL_BUD) && ($contact['priority'] == 0)) {
+
+               // do it twice. Ensures that children of parents which may be later in the stream aren't tossed
+
+               consume_feed($xml,$importer,$contact,$hub);
+
+
+               if((strlen($hub)) && (($contact['rel'] == REL_BUD) || (($contact['network'] === 'stat') && (! $contact['readonly'])))) {
+                       logger('poller: subscribing to hub(s) : ' . $hub . ' contact name : ' . $contact['name'] . ' local user : ' . $importer['name']);
                        $hubs = explode(',', $hub);
                        if(count($hubs)) {
                                foreach($hubs as $h) {