From a5125359d85afa056aee18a73692b6d1a587be47 Mon Sep 17 00:00:00 2001 From: Friendika Date: Tue, 6 Sep 2011 18:06:19 -0700 Subject: [PATCH] faster friend requests (DFRN) --- boot.php | 2 +- include/network.php | 19 +++++++++++++------ mod/dfrn_request.php | 9 +++++---- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/boot.php b/boot.php index b17d948601..9eabcd4efd 100644 --- a/boot.php +++ b/boot.php @@ -7,7 +7,7 @@ require_once('include/text.php'); require_once("include/pgettext.php"); -define ( 'FRIENDIKA_VERSION', '2.2.1094' ); +define ( 'FRIENDIKA_VERSION', '2.2.1095' ); define ( 'DFRN_PROTOCOL_VERSION', '2.21' ); define ( 'DB_UPDATE_VERSION', 1087 ); diff --git a/include/network.php b/include/network.php index 2832ae2d33..deb257ff3d 100644 --- a/include/network.php +++ b/include/network.php @@ -259,22 +259,29 @@ function convert_xml_element_to_array($xml_element, &$recursion_depth=0) { // or if the resultant personal XRD doesn't contain a supported // subscription/friend-request attribute. +// amended 7/9/2011 to return an hcard which could save potentially loading +// a lengthy content page to scrape dfrn attributes + if(! function_exists('webfinger_dfrn')) { -function webfinger_dfrn($s) { +function webfinger_dfrn($s,&$hcard) { if(! strstr($s,'@')) { return $s; } + $profile_link = ''; + $links = webfinger($s); logger('webfinger_dfrn: ' . $s . ':' . print_r($links,true), LOGGER_DATA); if(count($links)) { - foreach($links as $link) + foreach($links as $link) { if($link['@attributes']['rel'] === NAMESPACE_DFRN) - return $link['@attributes']['href']; - foreach($links as $link) + $profile_link = $link['@attributes']['href']; if($link['@attributes']['rel'] === NAMESPACE_OSTATUSSUB) - return 'stat:' . $link['@attributes']['template']; + $profile_link = 'stat:' . $link['@attributes']['template']; + if($link['@attributes']['rel'] === 'http://microformats.org/profile/hcard') + $hcard = $link['@attributes']['href']; + } } - return ''; + return $profile_link; }} // Given an email style address, perform webfinger lookup and diff --git a/mod/dfrn_request.php b/mod/dfrn_request.php index ce83001b48..5d789f480b 100644 --- a/mod/dfrn_request.php +++ b/mod/dfrn_request.php @@ -277,14 +277,15 @@ function dfrn_request_post(&$a) { // Canonicalise email-style profile locator - $url = webfinger_dfrn($url); + $hcard = ''; + $url = webfinger_dfrn($url,$hcard); if(substr($url,0,5) === 'stat:') { - $network = 'stat'; + $network = NETWORK_OSTATUS; $url = substr($url,5); } else { - $network = 'dfrn'; + $network = NETWORK_DFRN; } logger('dfrn_request: url: ' . $url); @@ -342,7 +343,7 @@ function dfrn_request_post(&$a) { require_once('Scrape.php'); - $parms = scrape_dfrn($url); + $parms = scrape_dfrn(($hcard) ? $hcard : $url); if(! count($parms)) { notice( t('Profile location is not valid or does not contain profile information.') . EOL );