summaryrefslogtreecommitdiff
path: root/addon/peerForwarding.php
diff options
context:
space:
mode:
authorkarlchenofhell <karlchenofhell@6c8d7289-2bf4-0310-a012-ef5d649a1542>2007-02-25 15:18:22 +0000
committerkarlchenofhell <karlchenofhell@6c8d7289-2bf4-0310-a012-ef5d649a1542>2007-02-25 15:18:22 +0000
commit1d31ebbeec74b7b928ea1c49157448ecf857a074 (patch)
tree2f752085a35c804c4d27eadd2af2a0f61f2e7058 /addon/peerForwarding.php
parent9cbf94222f04ae8abf3f8748ad0dcfee6459ae21 (diff)
- added experimental PHP script which redirects from a vhost to a peer, using a public seed-file
git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@3395 6c8d7289-2bf4-0310-a012-ef5d649a1542
Diffstat (limited to 'addon/peerForwarding.php')
-rw-r--r--addon/peerForwarding.php146
1 files changed, 146 insertions, 0 deletions
diff --git a/addon/peerForwarding.php b/addon/peerForwarding.php
new file mode 100644
index 000000000..1b64aba41
--- /dev/null
+++ b/addon/peerForwarding.php
@@ -0,0 +1,146 @@
+<?php
+
+ /* by Allo, KarlchenOfHell */
+
+ $page = 'error.html';
+ $peername = 'Error';
+ $seedurl = 'http://www.anomic.de/yacy/seed.txt'; // remote seed-file
+ $seedfile = 'seed.txt'; // local cache file, needs write access
+ $hostlength = 24; // EDIT THIS! length of the hostname + 1 (strlen(".peer.karlchenofhell.org"))
+
+ function get($url, $filename) {
+ if(!file_exists($filename) || (time()-filectime($filename)) > 600){
+ $content=file_get_contents($url);
+ $file=fopen($filename, 'w');
+ fwrite($file, $content);
+ fclose($file);
+ }else{
+ $content=file_get_contents($filename);
+ }
+ return $content;
+ }
+
+ class peer {
+
+ var $seed;
+
+ function peer($seed) {
+ switch (substr($seed, 0, 1)) {
+ case 'p': $plainlist = substr($seed, 2); break; // plain text
+ case 'b': $plainlist = base64_decode(substr($seed, 2)); break; // base64-encoded
+ default: $plainlist = substr($seed, 2); break;
+ }
+ $plainlist = substr($plainlist, 1, -1); // kill '{' on beginning and '}' at the end
+ $list = explode(',', $plainlist);
+ $r = array();
+ foreach ($list as $value) {
+ $equal = strpos($value, '=');
+ $r[substr($value, 0, $equal)] = substr($value, $equal + 1);
+ }
+ $this->seed = $r;
+ }
+
+ function getHash() { return $this->seed['Hash']; }
+ function getIPType() { return $this->seed['IPType']; }
+ function getTags() { return $this->seed['Tags']; }
+ function getPort() { return $this->seed['Port']; }
+ function getIP() { return $this->seed['IP']; }
+ function getRI() { return $this->seed['rI']; }
+ function getUptime() { return $this->seed['Uptime']; }
+ function getVersion() { return $this->seed['Version']; }
+ function getUTC() { return $this->seed['UTC']; }
+ function getPeerType() { return $this->seed['PeerType']; }
+ function getSI() { return $this->seed['sI']; }
+ function getLastSeen() { return $this->seed['LastSeen']; }
+ function getName() { return $this->seed['Name']; }
+ function getCCount() { return $this->seed['CCount']; }
+ function getSCount() { return $this->seed['SCount']; }
+ function getNews() { return $this->seed['news']; }
+ function getUSpeed() { return $this->seed['USpeed']; }
+ function getCRTCount() { return $this->seed['CRTCnt']; }
+ function getCRWCount() { return $this->seed['CRWCnt']; }
+ function getBirthDate() { return $this->seed['BDate']; }
+ function getLinks() { return $this->seed['LCount']; }
+ function getRU() { return $this->seed['rU']; }
+ function getWords() { return $this->seed['ICount']; }
+ function getSU() { return $this->seed['sU']; }
+ function getISpeed() { return $this->seed['ISpeed']; }
+ function getNCount() { return $this->seed['NCount']; }
+ function getFlags() { return $this->seed['Flags']; }
+ }
+
+ function decodeSeedList($list) {
+ $seeds = explode("\n", $list);
+ $r = array();
+ foreach ($seeds as $seed) {
+ $peer = new peer($seed);
+ $r[strtolower($peer->getName())] = $peer;
+ }
+ return $r;
+ }
+
+ $name = $_SERVER['SERVER_NAME'];
+ $name = substr($name, 0, strlen($name) - $hostlength);
+
+ $seedfile = get($seedurl, $seedfile);
+ $peers = decodeSeedList($seedfile);
+
+ $peer = $peers[strtolower($name)];
+
+ #peername.yacypeer.dyndns.org
+ #rewrite:
+ #RewriteCond %{REQUEST_URI} /error.html
+ #RewriteRule ^/(.*) /error.html [L]
+ #RewriteRule ^/(.*) /index.php?url=$1 [L]
+
+ #$name=$_SERVER['SERVER_NAME'];
+ #$name=substr($name, 0, strlen($name)-(strlen($basehost)+1)); //+1 because we filter .$basehost
+
+ #domain.org/peername/*
+ #rewrite:
+ #RewriteRule ^/(.*) /error.html [L]
+ #RewriteRule ^/([^\/]*)/(.*) /index.php?name=$1&url=$2 [L]
+
+ if (strlen($name) == 0 || $peer == null) {
+ // peer-list
+?>
+<html>
+ <head>
+ <title>Active YaCy-Peers</title>
+ </head>
+ <body>
+ <table border="2" cellpadding="2" cellspacing="0">
+ <tr>
+ <th>Name</th>
+ <th>Uptime</th>
+ </tr><?
+ foreach ($peers as $peer) {
+ echo '
+ <tr>
+ <td><a href="http://'. $peer->getIP() .':'. $peer->getPort() .'">'. $peer->getName() .'</a></td>
+ <td>'. $peer->getUptime() .'</td>
+ </tr>';
+ }?>
+ </table>
+ </body>
+</html>
+<?
+ } else {
+
+ if ($peer) {
+ $peername=$peer->getName();
+ $page='http://'. $peer->getIP() .':'.$peer->getPort() .'/';
+ }
+
+?>
+<html>
+ <head>
+ <title><? echo $peername; ?></title>
+ </head>
+ <frameset rows="*">
+ <frame src="<? echo $page/*.$_GET['url']*/; ?>" />
+ </frameset>
+</html>
+<?
+ }
+?> \ No newline at end of file