diff options
author | friendica <info@friendica.com> | 2012-12-30 22:41:53 -0800 |
---|---|---|
committer | friendica <info@friendica.com> | 2012-12-30 22:41:53 -0800 |
commit | abc271a0e7b0b67d5920096aba25a2e0ae996148 (patch) | |
tree | 5898cba421fd5b9b3291870a73466113e3729d6f /include/onepoll.php | |
parent | 4e23e700f44642d2213108e94557e1f754db01dc (diff) | |
download | volse-hubzilla-abc271a0e7b0b67d5920096aba25a2e0ae996148.tar.gz volse-hubzilla-abc271a0e7b0b67d5920096aba25a2e0ae996148.tar.bz2 volse-hubzilla-abc271a0e7b0b67d5920096aba25a2e0ae996148.zip |
more progress on onepoll
Diffstat (limited to 'include/onepoll.php')
-rw-r--r-- | include/onepoll.php | 180 |
1 files changed, 19 insertions, 161 deletions
diff --git a/include/onepoll.php b/include/onepoll.php index 3dd800a04..d6d06eda1 100644 --- a/include/onepoll.php +++ b/include/onepoll.php @@ -30,15 +30,9 @@ function onepoll_run($argv, $argc){ $d = datetime_convert(); - -// FIXME -return; - - - - $contacts = q("SELECT abook.*, account.* - FROM abook LEFT JOIN account on abook_account = account_id - AND abook_id = %d + $contacts = q("SELECT abook.*, xchan.*, account.* + FROM abook LEFT JOIN account on abook_account = account_id left join xchan on xchan_hash = abook_hash + where abook_id = %d AND not ( abook_flags & %d ) AND not ( abook_flags & %d ) AND not ( abook_flags & %d ) AND not ( abook_flags & %d ) AND not ( abook_flags & %d ) AND ( account_flags & %d ) $abandon_sql ORDER BY RAND()", @@ -62,180 +56,43 @@ return; $t = $contact['abook_updated']; -// end of last edits - - - $importer_uid = $contact['uid']; + $importer_uid = $contact['abook_channel']; - $r = q("SELECT `contact`.*, `user`.`page-flags` FROM `contact` LEFT JOIN `user` on `contact`.`uid` = `user`.`uid` WHERE `user`.`uid` = %d AND `contact`.`self` = 1 LIMIT 1", + $r = q("SELECT * from channel left join xchan on channel_hash = xchan_hash where channel_id = %d limit 1", intval($importer_uid) ); - if(! count($r)) + if(! $r) return; $importer = $r[0]; - logger("onepoll: poll: ({$contact['id']}) IMPORTER: {$importer['name']}, CONTACT: {$contact['name']}"); + logger("onepoll: poll: ({$contact['id']}) IMPORTER: {$importer['xchan_name']}, CONTACT: {$contact['xchan_name']}"); $last_update = (($contact['last_update'] === '0000-00-00 00:00:00') - ? datetime_convert('UTC','UTC','now - 7 days', ATOM_TIME) - : datetime_convert('UTC','UTC',$contact['last_update'], ATOM_TIME) + ? datetime_convert('UTC','UTC','now - 7 days') + : datetime_convert('UTC','UTC',$contact['abook_updated']) ); - if($contact['network'] === NETWORK_DFRN) { - - $idtosend = $orig_id = (($contact['dfrn_id']) ? $contact['dfrn_id'] : $contact['issued_id']); - if(intval($contact['duplex']) && $contact['dfrn_id']) - $idtosend = '0:' . $orig_id; - if(intval($contact['duplex']) && $contact['issued_id']) - $idtosend = '1:' . $orig_id; - - // they have permission to write to us. We already filtered this in the contact query. - $perm = 'rw'; - - $url = $contact['poll'] . '?dfrn_id=' . $idtosend - . '&dfrn_version=' . DFRN_PROTOCOL_VERSION - . '&type=data&last_update=' . $last_update - . '&perm=' . $perm ; - - $handshake_xml = fetch_url($url); - $html_code = $a->get_curl_code(); - - logger('onepoll: handshake with url ' . $url . ' returns xml: ' . $handshake_xml, LOGGER_DATA); - - - if((! strlen($handshake_xml)) || ($html_code >= 400) || (! $html_code)) { - 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. + // update permissions - mark_for_death($contact); + $x = zot_refresh($contact,$importer); - // 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']) - ); - - return; - } - - if(! strstr($handshake_xml,'<?xml')) { - logger('poller: response from ' . $url . ' did not contain XML.'); - - mark_for_death($contact); - - $r = q("UPDATE `contact` SET `last_update` = '%s' WHERE `id` = %d LIMIT 1", - dbesc(datetime_convert()), - intval($contact['id']) - ); - return; - } - - - $res = parse_xml_string($handshake_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') { - 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))) - return; - - if(((float) $res->dfrn_version > 2.21) && ($contact['poco'] == '')) { - q("update contact set poco = '%s' where id = %d limit 1", - dbesc(str_replace('/channel/','/poco/', $contact['url'])), - intval($contact['id']) - ); - } - - $postvars = array(); - - $sent_dfrn_id = hex2bin((string) $res->dfrn_id); - $challenge = hex2bin((string) $res->challenge); - - $final_dfrn_id = ''; - - if(($contact['duplex']) && strlen($contact['prvkey'])) { - openssl_private_decrypt($sent_dfrn_id,$final_dfrn_id,$contact['prvkey']); - openssl_private_decrypt($challenge,$postvars['challenge'],$contact['prvkey']); - } - else { - openssl_public_decrypt($sent_dfrn_id,$final_dfrn_id,$contact['pubkey']); - openssl_public_decrypt($challenge,$postvars['challenge'],$contact['pubkey']); - } - - $final_dfrn_id = substr($final_dfrn_id, 0, strpos($final_dfrn_id, '.')); - - if(strpos($final_dfrn_id,':') == 1) - $final_dfrn_id = substr($final_dfrn_id,2); - - if($final_dfrn_id != $orig_id) { - logger('poller: ID did not decode: ' . $contact['id'] . ' orig: ' . $orig_id . ' final: ' . $final_dfrn_id); - // did not decode properly - cannot trust this site - return; - } - - $postvars['dfrn_id'] = $idtosend; - $postvars['dfrn_version'] = DFRN_PROTOCOL_VERSION; - $postvars['perm'] = 'rw'; - - $xml = post_url($contact['poll'],$postvars); + if(! $x) { + // mark for death } + else { - if($xml) { - logger('poller: received xml : ' . $xml, LOGGER_DATA); - if((! strstr($xml,'<?xml')) && (! strstr($xml,'<rss'))) { - logger('poller: post_handshake: response from ' . $url . ' did not contain XML.'); - $r = q("UPDATE `contact` SET `last_update` = '%s' WHERE `id` = %d LIMIT 1", - dbesc(datetime_convert()), - intval($contact['id']) - ); - return; - } - - - consume_feed($xml,$importer,$contact,$hub,1,1); - - - // do it twice. Ensures that children of parents which may be later in the stream aren't tossed - - consume_feed($xml,$importer,$contact,$hub,1,2); - + // if marked for death, reset } - $updated = datetime_convert(); - - $r = q("UPDATE `contact` SET `last_update` = '%s', `success_update` = '%s' WHERE `id` = %d LIMIT 1", - dbesc($updated), - dbesc($updated), - intval($contact['id']) - ); - + // fetch some items + // set last updated timestamp - // load current friends if possible. +/* if($contact['poco']) { $r = q("SELECT count(*) as total from glink where `cid` = %d and updated > UTC_TIMESTAMP() - INTERVAL 1 DAY", @@ -247,6 +104,7 @@ return; poco_load($contact['id'],$importer_uid,0,$contact['poco']); } } +*/ return; } |