mirror of
https://github.com/anticensority/runet-censorship-bypass.git
synced 2025-04-15 23:02:02 +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-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 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);
|
||||
resultsWriter.WriteLine(results);
|
||||
}
|
||||
|
|
|
@ -61,11 +61,11 @@ var Antizapret = {
|
|||
},
|
||||
applyCsv: function(csv) {
|
||||
var pac = generatePac(csv);
|
||||
console.log(pac);
|
||||
var config = {
|
||||
mode: "pac_script",
|
||||
mode: 'pac_script',
|
||||
pacScript: {
|
||||
data: pac
|
||||
data: pac,
|
||||
mandatory: true
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -319,7 +319,7 @@ function ifProxyByPlainSwitch(host) {
|
|||
|
||||
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('.') ))
|
||||
return true;
|
||||
return false;
|
||||
|
@ -328,4 +328,87 @@ function ifProxyByPlainSwitch(host) {
|
|||
var cases = hosts.map( host => 'case "'+host+'":' ).join('\n') +'\nreturn true;';
|
||||
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('.');
|
||||
|
||||
for( var endi = doms.length; endi >= 0; --endi )
|
||||
for( var endi = doms.length-1; endi >= 0; --endi )
|
||||
if (ifBlocked( doms.slice( endi ).join('.') ))
|
||||
return true;
|
||||
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