function HyperCacheScanDBFile($dbfile, $ID) { $TT = time(); $unix = new unix(); $Cache = unserialize(@file_get_contents("/usr/share/squid3/lastScan.array")); if (isset($Cache[$ID][$dbfile])) { $filemm = filemtime($dbfile); if ($filemm == $Cache[$ID][$dbfile]) { if ($GLOBALS["HYPER_CACHE_VERBOSE"]) { echo "HyperCacheScanDBFile {$filemm} == {$Cache[$ID][$dbfile]} [" . __LINE__ . "]\n"; } return; } } $filesize = FormatBytes(@filesize($dbfile) / 1024); if ($GLOBALS["HYPER_CACHE_VERBOSE"]) { echo "HyperCacheScanDBFile ---> {$dbfile} [" . __LINE__ . "]\n"; } $db_con = dba_open($dbfile, "r", "db4"); if (!$db_con) { events("{failed}: DB open" . basename($dbfile), $ID, 0, __LINE__); return false; } $HyperCacheRules = HyperCacheRulesLoad(); if (!isset($HyperCacheRules[$ID])) { if ($GLOBALS["HYPER_CACHE_VERBOSE"]) { events("No rule for ID {$ID}!", 0, 2, __LINE__); } return; } $FileTypesArray = unserialize($HyperCacheRules[$ID]["FileTypes"]); if (count($FileTypesArray) == 0) { events("No Files type defined, aborting", $ID, 0, __LINE__); return; } $urikey = dba_firstkey($db_con); $ARRAY_SAVE = array(); $c = 0; while ($urikey != false) { $FileType = dba_fetch($urikey, $db_con); $GLOBALS["MAINDB"][$urikey] = $FileType; $urikey = dba_nextkey($db_con); } @dba_close($db_con); $GLOBAL["BLACKLISTED"] = array(); if (!class_exists("HyperCache")) { include_once dirname(__FILE__) . "/ressources/class.HyperCache.inc"; } $HyPerCacheClass = new HyperCache(); if (!function_exists("HyperCacheRulesBlacklist")) { include_once dirname(__FILE__) . "/ressources/class.hyperCache-central.inc"; } while (list($urikey, $FileType) = each($GLOBALS["MAINDB"])) { if (HyperCacheRulesBlacklist($urikey)) { if ($GLOBALS["HYPER_CACHE_VERBOSE"]) { echo "HyperCacheScanDBFile:: {$urikey} Blacklisted"; } $GLOBAL["BLACKLISTED"][$urikey] = true; continue; } $SCANNED_URL = ifTracker($urikey); $H = parse_url($SCANNED_URL); $path = $H["path"]; $filename = basename($path); $extention = $unix->file_extension($filename); $GetMimeFromExtension = GetMimeFromExtension($extention); if ($GetMimeFromExtension != null) { if ($FileType != $GetMimeFromExtension) { $FileType = $GetMimeFromExtension; $ARRAY_SAVE[$urikey] = $FileType; } } else { if ($GLOBALS["HYPER_CACHE_VERBOSE"]) { echo "HyperCacheScanDBFile:: {$SCANNED_URL} {$filename}/{$FileType} - {$extention} no MIME ??\n"; } } if ($FileType == "NONE") { $FileType = HyperCacheGetMimeType($urikey, $ID); if ($FileType == null) { $GLOBAL["BLACKLISTED"][$urikey] = true; continue; } $ARRAY_SAVE[$urikey] = $FileType; } if (!isset($FileTypesArray[$FileType])) { if (!$HyPerCacheClass->ChecksOtherRules($urikey, $FileType, $ID)) { $GLOBAL["BLACKLISTED"][$urikey] = true; if ($GLOBALS["HYPER_CACHE_VERBOSE"]) { events("{$urikey} {$FileType} No match...", $ID, 3, __LINE__); } continue; } } $TargetFile = HyperCacheScanBuildLocalPath($urikey, $ID); $FullTargetFile = $GLOBALS["HyperCacheStoragePath"] . "/" . $TargetFile; if (is_file($FullTargetFile)) { continue; } events("Downloading {$urikey} [{$FileType}]", $ID, 2, __LINE__); HyperCacheScanDownload($urikey, $TargetFile, $ID, $FileType); } if (count($GLOBAL["BLACKLISTED"]) > 0) { HyperCacheScanDBFile_removebulk($dbfile, $GLOBAL["BLACKLISTED"]); } HyperCacheScanDBFile_setbulk($dbfile, $ARRAY_SAVE); $filemm = filemtime($dbfile); $Cache[$ID][$dbfile] = $filemm; @file_put_contents("/usr/share/squid3/lastScan.array", serialize($Cache)); }
function HyperCacheRules($PROTO, $ToUfdb, $URI, $IP, $userid, $DEBUGHOSTNAME) { if ($GLOBALS["SquidEnforceRules"] == 0) { return; } if (preg_match("#([0-9\\.]+)\\/(.*)#", $IP, $re)) { $IP = $re[1]; $USER = $re[2]; } if ($IP == "127.0.0.1") { return; } if ($PROTO != "GET") { if ($GLOBALS["HyperCacheDebug"]) { events("HyperCacheRules:{$PROTO}/{$IP} <> GET ABORT"); } return false; } if ($GLOBALS["SquidEnforceRules"] == 0) { if ($GLOBALS["HyperCacheDebug"]) { events("HyperCacheRules:{$IP} Not enabled <> GET ABORT"); } return; } if (HyperCacheRulesBlacklist($DEBUGHOSTNAME)) { return; } $URI = HyperCacheCleanUri($URI); if ($GLOBALS["HyperCacheOK"][md5($URI)]) { Output_results($GLOBALS["HyperCacheOK"][md5($URI)], __FUNCTION__, __LINE__); if ($GLOBALS["HyperCacheDebug"]) { events("HyperCacheRules:`{$URI}` -> REDIRECT MEM"); } return true; } include_once dirname(__FILE__) . "/ressources/class.HyperCache.inc"; include_once dirname(__FILE__) . "/ressources/class.hyperCache-central.inc"; $HyperCache = new HyperCache(); if ($HyperCache->HyperCacheRulesMatchPattern($GLOBALS["HyperCacheListenAddr"], $URI)) { return false; } if (HyperCacheRuleMirror($URI)) { return true; } if (HyperCacheWhiteUri($URI)) { return false; } $ID = $HyperCache->HyperCacheRulesMatches($URI); if ($ID == 0) { if ($GLOBALS["HyperCacheDebug"]) { events("HyperCacheRules: ID == {$ID} FALSE [" . __LINE__ . "]"); } return false; } if (HyperCacheRulesSave($URI, $ID)) { return true; } if ($GLOBALS["HyperCacheDebug"]) { events("HyperCacheRules:`{$URI}` no match"); } }
function HyperCacheRules($PROTO,$ToUfdb,$URI,$IP,$userid,$DEBUGHOSTNAME){ if(preg_match("#([0-9\.]+)\/(.*)#", $IP,$re)){ $IP=$re[1]; $USER=$re[2]; } if($IP=="127.0.0.1"){return;} if($PROTO<>"GET"){ if($GLOBALS["HyperCacheDebug"]){events("HyperCacheRules:$PROTO/$IP <> GET ABORT");} return false; } if($GLOBALS["SquidEnforceRules"]==0){ if($GLOBALS["HyperCacheDebug"]){events("HyperCacheRules:$IP Not enabled <> GET ABORT");} return; } if(HyperCacheRulesBlacklist($DEBUGHOSTNAME)){return;} $URI=HyperCacheCleanUri($URI); if($GLOBALS["HyperCacheOK"][md5($URI)]){ Output_results($GLOBALS["HyperCacheOK"][md5($URI)]); if($GLOBALS["HyperCacheDebug"]){events("HyperCacheRules:`$URI` -> REDIRECT MEM");} return true; } $HyperCache=new HyperCache(); if($HyperCache->HyperCacheRulesMatchPattern($GLOBALS["HyperCacheListenAddr"], $URI)){return false;} if(HyperCacheRuleMirror($URI)){return true;} if(HyperCacheWhiteUri($URI)){return false;} $ID=$HyperCache->HyperCacheRulesMatches($URI); if($ID==0){return false;} if(HyperCacheRulesSave($URI,$ID)){return true;} if($GLOBALS["HyperCacheDebug"]){events("HyperCacheRules:`$URI` no match");} }