From 1108eaaed0cf451668dcaf04bd532a3615724dbc Mon Sep 17 00:00:00 2001 From: friendica Date: Sat, 29 Mar 2014 21:53:50 -0700 Subject: source routing stuff --- include/items.php | 34 ++++++++++++++++++++++++++++++++++ include/zot.php | 3 +++ 2 files changed, 37 insertions(+) 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() . '>'); } -- cgit v1.2.3