this may actually fix the deliver loop when deleting existing items. It's hackish but I don't see any other way out.

This commit is contained in:
friendica 2015-02-25 16:51:39 -08:00
parent b32841e2dd
commit b9e485be54
2 changed files with 23 additions and 1 deletions

View File

@ -4799,3 +4799,18 @@ function set_linkified_perms($linkified, &$str_contact_allow, &$str_group_allow,
}
}
}
/*
* We can't trust ITEM_ORIGIN to tell us if this is a local comment
* which needs to be relayed, because it was misconfigured at one point for several
* months and set for some remote items (in alternate delivery chains). This could
* cause looping, so use this hackish but accurate method.
*/
function comment_local_origin($item) {
if(stripos($item['mid'],get_app()->get_hostname()) && ($item['parent'] != $item['id']))
return true;
return false;
}

View File

@ -371,7 +371,14 @@ function notifier_run($argv, $argc){
// To clarify, a site accepting a new comment is responsible for sending it to the owner for relay.
// Relaying should never be initiated on a post that arrived from elsewhere.
$relay_to_owner = (((! $top_level_post) && ($target_item['item_flags'] & ITEM_ORIGIN)) ? true : false);
// We should normally be able to rely on ITEM_ORIGIN, but start_delivery_chain() incorrectly set this
// flag on comments for an extended period. So we'll also call comment_local_origin() which looks at
// the hostname in the message_id and provides a second (fallback) opinion.
$relay_to_owner = (((! $top_level_post) && ($target_item['item_flags'] & ITEM_ORIGIN) && comment_local_origin())
? true
: false
);
$uplink = false;