mirror of
https://github.com/anticensority/runet-censorship-bypass.git
synced 2025-07-16 19:22:32 +03:00
added simple trie
This commit is contained in:
parent
ceb6474456
commit
2000a3020d
|
@ -44,4 +44,4 @@ blocked-ips-switch.js: 30 bytes, 1339607 ns, Missed: 84 bytes,
|
||||||
blocked-ips-binary.js: 31 bytes, 3552007 ns, Missed: 76 bytes, 603872 ns
|
blocked-ips-binary.js: 31 bytes, 3552007 ns, Missed: 76 bytes, 603872 ns
|
||||||
======================
|
======================
|
||||||
blocked-hosts-binary-trie.js: 364 bytes, 27134555ns, Missed: 218 bytes, 725467 ns
|
blocked-hosts-binary-trie.js: 364 bytes, 27134555ns, Missed: 218 bytes, 725467 ns
|
||||||
|
blocked-hosts-simple-trie.js: 364 bytes, 4085395 ns, Missed: 219 bytes, 649011 ns
|
|
@ -70,7 +70,7 @@ public class Program
|
||||||
var hostsFile = "./Inputs/"+prefix + ".txt";
|
var hostsFile = "./Inputs/"+prefix + ".txt";
|
||||||
var missedFile = "./Inputs/missed.txt";
|
var missedFile = "./Inputs/missed.txt";
|
||||||
|
|
||||||
var results = pacName+":\t"+RunTest(hostsFile, pacName) + ", Missed: "+RunTest(missedFile, pacName, true);
|
var results = pacName+": "+RunTest(hostsFile, pacName) + ", Missed: "+RunTest(missedFile, pacName, true);
|
||||||
Console.WriteLine(results);
|
Console.WriteLine(results);
|
||||||
resultsWriter.WriteLine(results);
|
resultsWriter.WriteLine(results);
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,11 +61,11 @@ var Antizapret = {
|
||||||
},
|
},
|
||||||
applyCsv: function(csv) {
|
applyCsv: function(csv) {
|
||||||
var pac = generatePac(csv);
|
var pac = generatePac(csv);
|
||||||
console.log(pac);
|
|
||||||
var config = {
|
var config = {
|
||||||
mode: "pac_script",
|
mode: 'pac_script',
|
||||||
pacScript: {
|
pacScript: {
|
||||||
data: pac
|
data: pac,
|
||||||
|
mandatory: true
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -319,7 +319,7 @@ function ifProxyByPlainSwitch(host) {
|
||||||
|
|
||||||
var doms = host.split('.');
|
var doms = host.split('.');
|
||||||
|
|
||||||
for( var endi = doms.length; endi >= 0; --endi )
|
for( var endi = doms.length-1; endi >= 0; --endi )
|
||||||
if (ifBlocked( doms.slice( endi ).join('.') ))
|
if (ifBlocked( doms.slice( endi ).join('.') ))
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
|
@ -328,4 +328,87 @@ function ifProxyByPlainSwitch(host) {
|
||||||
var cases = hosts.map( host => 'case "'+host+'":' ).join('\n') +'\nreturn true;';
|
var cases = hosts.map( host => 'case "'+host+'":' ).join('\n') +'\nreturn true;';
|
||||||
var tmp = ifProxyByPlainSwitch.toString().replace('//CASES', cases);
|
var tmp = ifProxyByPlainSwitch.toString().replace('//CASES', cases);
|
||||||
|
|
||||||
produceOutput('blocked-hosts-plain-switch', tmp, 'host' );
|
produceOutput( 'blocked-hosts-plain-switch', tmp, 'host' );
|
||||||
|
|
||||||
|
|
||||||
|
// SIMPLY TRIE
|
||||||
|
|
||||||
|
function populateSimpleTrie(trie, letters) {
|
||||||
|
|
||||||
|
if (!letters.length || !trie)
|
||||||
|
return trie;
|
||||||
|
|
||||||
|
var letter = letters.shift();
|
||||||
|
|
||||||
|
if (!letters.length) {
|
||||||
|
trie[letter] = ['', false];
|
||||||
|
return trie;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (trie[letter] === ['', false]) // Subdomain of a blocked domain.
|
||||||
|
return trie;
|
||||||
|
|
||||||
|
if (!trie[letter]) {
|
||||||
|
trie[letter] = [letters.join(''), false]
|
||||||
|
return trie;
|
||||||
|
}
|
||||||
|
|
||||||
|
var arr = trie[letter];
|
||||||
|
var link = arr[0].split('');
|
||||||
|
var linkTrie = arr[1];
|
||||||
|
|
||||||
|
function commonPrefix(wa, wb) {
|
||||||
|
var len = Math.min(wa.length, wb.length);
|
||||||
|
var i = -1;
|
||||||
|
while(++i < len)
|
||||||
|
if (wa[i] !== wb[i])
|
||||||
|
break;
|
||||||
|
return wa.slice(0, i)
|
||||||
|
}
|
||||||
|
|
||||||
|
var prefix = commonPrefix(link, letters);
|
||||||
|
|
||||||
|
var suffixLetters = letters.slice(prefix.length);
|
||||||
|
var suffixLink = link.slice(prefix.length);
|
||||||
|
|
||||||
|
var newTrie = {};
|
||||||
|
if (!suffixLink.length)
|
||||||
|
var newTrie = linkTrie;
|
||||||
|
if (!suffixLetters.length)
|
||||||
|
var newTrie = false;
|
||||||
|
|
||||||
|
if (newTrie) {
|
||||||
|
newTrie = populateSimpleTrie( newTrie, suffixLetters );
|
||||||
|
newTrie = populateSimpleTrie( newTrie, suffixLink );
|
||||||
|
}
|
||||||
|
trie[letter] = [prefix.join(''), newTrie];
|
||||||
|
|
||||||
|
return trie;
|
||||||
|
}
|
||||||
|
|
||||||
|
var simpleTrie = {};
|
||||||
|
for(var host of hosts)
|
||||||
|
populateSimpleTrie(simpleTrie, host.split('').reverse());
|
||||||
|
|
||||||
|
function ifProxyBySimpleTrie(host, simpleTrie) {
|
||||||
|
var letters = host.split('').reverse();
|
||||||
|
while(letters.length) {
|
||||||
|
var letter = letters.shift();
|
||||||
|
var arr = simpleTrie[letter];
|
||||||
|
var link = arr[0];
|
||||||
|
|
||||||
|
if (link.length > letters.length)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
for( var i=0; i < link.length; ++i )
|
||||||
|
if ( letters[i] !== link.charAt(i) )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
letters = letters.slice(link.length);
|
||||||
|
simpleTrie = arr[1];
|
||||||
|
if (!simpleTrie)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
produceOutput('blocked-hosts-simple-trie', ifProxyBySimpleTrie, 'host', simpleTrie);
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -9849,7 +9849,7 @@ return true;
|
||||||
|
|
||||||
var doms = host.split('.');
|
var doms = host.split('.');
|
||||||
|
|
||||||
for( var endi = doms.length; endi >= 0; --endi )
|
for( var endi = doms.length-1; endi >= 0; --endi )
|
||||||
if (ifBlocked( doms.slice( endi ).join('.') ))
|
if (ifBlocked( doms.slice( endi ).join('.') ))
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
|
|
38
generated-PACs/blocked-hosts-simple-trie.js
Executable file
38
generated-PACs/blocked-hosts-simple-trie.js
Executable file
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user