faster friend requests (DFRN)

This commit is contained in:
Friendika 2011-09-06 18:06:19 -07:00
parent 18315a1377
commit a5125359d8
3 changed files with 19 additions and 11 deletions

View file

@ -7,7 +7,7 @@ require_once('include/text.php');
require_once("include/pgettext.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 ( 'DFRN_PROTOCOL_VERSION', '2.21' );
define ( 'DB_UPDATE_VERSION', 1087 ); define ( 'DB_UPDATE_VERSION', 1087 );

View file

@ -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 // or if the resultant personal XRD doesn't contain a supported
// subscription/friend-request attribute. // 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')) { if(! function_exists('webfinger_dfrn')) {
function webfinger_dfrn($s) { function webfinger_dfrn($s,&$hcard) {
if(! strstr($s,'@')) { if(! strstr($s,'@')) {
return $s; return $s;
} }
$profile_link = '';
$links = webfinger($s); $links = webfinger($s);
logger('webfinger_dfrn: ' . $s . ':' . print_r($links,true), LOGGER_DATA); logger('webfinger_dfrn: ' . $s . ':' . print_r($links,true), LOGGER_DATA);
if(count($links)) { if(count($links)) {
foreach($links as $link) foreach($links as $link) {
if($link['@attributes']['rel'] === NAMESPACE_DFRN) if($link['@attributes']['rel'] === NAMESPACE_DFRN)
return $link['@attributes']['href']; $profile_link = $link['@attributes']['href'];
foreach($links as $link)
if($link['@attributes']['rel'] === NAMESPACE_OSTATUSSUB) 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 // Given an email style address, perform webfinger lookup and

View file

@ -277,14 +277,15 @@ function dfrn_request_post(&$a) {
// Canonicalise email-style profile locator // Canonicalise email-style profile locator
$url = webfinger_dfrn($url); $hcard = '';
$url = webfinger_dfrn($url,$hcard);
if(substr($url,0,5) === 'stat:') { if(substr($url,0,5) === 'stat:') {
$network = 'stat'; $network = NETWORK_OSTATUS;
$url = substr($url,5); $url = substr($url,5);
} }
else { else {
$network = 'dfrn'; $network = NETWORK_DFRN;
} }
logger('dfrn_request: url: ' . $url); logger('dfrn_request: url: ' . $url);
@ -342,7 +343,7 @@ function dfrn_request_post(&$a) {
require_once('Scrape.php'); require_once('Scrape.php');
$parms = scrape_dfrn($url); $parms = scrape_dfrn(($hcard) ? $hcard : $url);
if(! count($parms)) { if(! count($parms)) {
notice( t('Profile location is not valid or does not contain profile information.') . EOL ); notice( t('Profile location is not valid or does not contain profile information.') . EOL );