summaryrefslogtreecommitdiff
path: root/addon/peerForwarding.php
blob: 71043781bfa674f4bb70d8117341715f5a57311b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
<?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;
    }

	###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) - $hostlength);
	
	###domain.org/peername/*
	###rewrite:
	###RewriteRule ^/(.*) /error.html [L]
	###RewriteRule ^/([^\/]*)/(.*) /index.php?name=$1&url=$2 [L]
	#$name=$_GET['name'];
	
	$seedfile = get($seedurl, $seedfile);
	$peers = decodeSeedList($seedfile);
	
	$peer = $peers[strtolower($name)];
	
	

	
	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>
<?
	}