aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfriendica <info@friendica.com>2014-03-29 21:53:50 -0700
committerfriendica <info@friendica.com>2014-03-29 21:53:50 -0700
commit1108eaaed0cf451668dcaf04bd532a3615724dbc (patch)
treeb84e577d0f5487d33f3a7066007aa3e7ecdffb21
parenta31d5c7cddf8674478b9537c206fba05adf30652 (diff)
downloadvolse-hubzilla-1108eaaed0cf451668dcaf04bd532a3615724dbc.tar.gz
volse-hubzilla-1108eaaed0cf451668dcaf04bd532a3615724dbc.tar.bz2
volse-hubzilla-1108eaaed0cf451668dcaf04bd532a3615724dbc.zip
source routing stuff
-rwxr-xr-xinclude/items.php34
-rw-r--r--include/zot.php3
2 files changed, 37 insertions, 0 deletions
diff --git a/include/items.php b/include/items.php
index dcf9f5bc2..71e89e1e2 100755
--- a/include/items.php
+++ b/include/items.php
@@ -81,6 +81,18 @@ function collect_recipients($item,&$private) {
$recipients = check_list_permissions($item['uid'],$recipients,'view_stream');
+ $routes = q("select * from route where iid = %d",
+ intval($item['id'])
+ );
+
+ if($routes) {
+ $route = explode(',',$routes[0]['route']);
+ if(count($route)) {
+ $route = array_unique($route);
+ $recipients = array_diff($recipients,$route);
+ }
+ }
+
// add ourself just in case we have nomadic clones that need to get a copy.
$recipients[] = $item['author_xchan'];
@@ -141,6 +153,28 @@ function can_comment_on_post($observer_xchan,$item) {
}
+function add_source_route($iid,$hash) {
+ if((! $iid) || (! $route))
+ return;
+ $r = q("select * from route where iid = %d limit 1",
+ intval($iid)
+ );
+ if($r && $r[0]['route']) {
+ q("update route set route = '%s' where iid = %d limit 1",
+ dbesc(',' . $hash),
+ intval($iid)
+ );
+ }
+ else {
+ q("insert into route ( iid, route ) values ( %d, '%s') ",
+ intval($iid),
+ dbesc($route)
+ );
+ }
+}
+
+
+
/**
* @function red_zrl_callback
* preg_match function when fixing 'naked' links in mod item.php
diff --git a/include/zot.php b/include/zot.php
index b23c18bdb..48240d5aa 100644
--- a/include/zot.php
+++ b/include/zot.php
@@ -1452,6 +1452,7 @@ function process_delivery($sender,$arr,$deliveries,$relay,$public = false) {
}
$xyz = event_store($ev);
+ add_source_route($xyz,$sender['hash']);
$result = array($d['hash'],'event processed',$channel['channel_name'] . ' <' . $channel['channel_address'] . '@' . get_app()->get_hostname() . '>');
continue;
@@ -1476,6 +1477,8 @@ function process_delivery($sender,$arr,$deliveries,$relay,$public = false) {
$arr['uid'] = $channel['channel_id'];
$item_result = item_store($arr);
$item_id = $item_result['item_id'];
+ add_source_route($item_id,$sender['hash']);
+
$result[] = array($d['hash'],(($item_id) ? 'posted' : 'storage failed:' . $item_result['message']),$channel['channel_name'] . ' <' . $channel['channel_address'] . '@' . get_app()->get_hostname() . '>');
}