1) ; if (($errstr = SaveConfig($configFileName, $tmpcfg)) || ($errstr = (@include $configFileName) ? '' : "Can not include $configFileName")) { echo $errstr ; exit ; } } if (isset($hCfg) && !isset($cfgPars)) $cfgPars = $hCfg ; # compatibility with the version 1.00 $cfgPars['InstallDir'] = $installDir ; # Get the urls $cfgPars = $cfgPars + Urls(); $cfgPars['ProgNameHtml'] = 'asRep MySQL Version '. MYVERSION .' Administration' ; # Get the cgi inputs $cgiPars = getInputs(); # Check for the admin name if (!strlen($cfgPars['AdminName']) || !strlen($cfgPars['AdminPassEnc'])) { if (isset($cgiPars['state']) && $cgiPars['state'] == 'adminname') { $errstr = SaveAdminName($configFileName, $cfgPars, $cgiPars) ; $errstr ? DispAdminName($cfgPars, $errstr) : header("Location: $cfgPars[Url]") ; }else { DispAdminName($cfgPars, '') ; } exit ; } # verify the user if(!VerifyUserLogin($cfgPars, $cgiPars)) exit() ; # Test mysql connection $dbh = DBConnect($cfgPars['DbHost'], $cfgPars['DbPort'], $cfgPars['DbUser'], $cfgPars['DbPass'], true) ; if (!$dbh || !DBSelect($dbh, $cfgPars['DbName'], true)) { if (isset($cgiPars['state']) && $cgiPars['state'] == 'dbsettings') { $errstr = SaveDBSettings($configFileName, $cfgPars, $cgiPars) ; strlen($errstr) ? DispDBSettings($cfgPars, $errstr) : header("Location: $cfgPars[Url]") ; }else { DispDBSettings($cfgPars, mysql_error()) ; } exit ; } # Create tables if (empty($cgiPars['VersionUpgrade'])){ list ($tables) = DBQueryInArrays($dbh, "SHOW TABLES"); $tfields = TableFields() ; while (list($k,$v) = each($cfgPars['Tbl'])) { $isin = in_array($v, $tables) ; if (!$isin) { $isin = in_array(strtolower($v), $tables) ; if (!$isin) DBQuery($dbh, "CREATE TABLE $v ($tfields[$k])") ; } } } # Version upgrade if ($cfgPars['Version'] < MYVERSION) { if ($cfgPars['Version'] == '1.25'){ $errstr = version125Upgrade($dbh, $configFileName, $cfgPars, $cgiPars) ; }elseif ($cfgPars['Version'] == '1.30'){ $errstr = version130Upgrade($dbh, $configFileName, $cfgPars, $cgiPars) ; }else{ $errstr = "This version of asRep (v." . MYVERSION . ") is not compatible with your version (v." . $cfgPars['Version'] . ")" . "

Still you can make a fresh installation by deleting the 'settings.php' file from the install directory.". " However this will forget your current tracking data since it will open new database tables." . "

To upgrade your data tables also, you need a previous version of asRep." . " For this, please contact us via" . " this form.". " Do not forget to mention your registration key, your current version number and your script type (PHP or Perl)" ; } if (strlen($errstr)) { echo ($errstr) ; }else{ $url = SelfUrl($cfgPars, $cgiPars) ; header("Location: $url") ; } exit ; } # do tasks $errorstr = '' ; if(!isset($cgiPars['state'])) $cgiPars['state']='' ; if (empty($cgiPars['state']) || $cgiPars['state'] == 'login') DispSetup($cfgPars, $cgiPars, $errorstr) ; if ($cgiPars['state'] == 'dbBackup') $errorstr = DbBackup($dbh, $cfgPars, $cgiPars) ; if ($cgiPars['state'] == 'dbRestore') $errorstr = DbRestore($dbh, $cfgPars, $cgiPars) ; if ($cgiPars['state'] == 'dbRepair') $errorstr = DbRepair($dbh, $cfgPars, $cgiPars) ; if ($cgiPars['state'] == 'dbOptimize') $errorstr = DbOptimize($dbh, $cfgPars, $cgiPars) ; if ($cgiPars['state'] == 'timezone') $errorstr = SaveTimeZone($configFileName, $cfgPars, $cgiPars) ; if ($cgiPars['state'] == 'email') $errorstr = SaveEmail($configFileName, $cfgPars, $cgiPars) ; if ($cgiPars['state'] == 'ipcc' && $cgiPars['update']) $errorstr = GetIpCc($dbh, $cfgPars, $cgiPars) ; if ($cgiPars['state'] == 'mapip2cc') $errorstr = MapIp2Cc($dbh, $cfgPars, $cgiPars) ; if ($cgiPars['state'] == 'cnotify') $errorstr = SaveClickNotify($configFileName, $cfgPars, $cgiPars) ; if ($cgiPars['state'] == 'blockIPrange') $errorstr = SaveBlockedIPs($configFileName, $cfgPars, $cgiPars) ; if ($cgiPars['state'] == 'regkey') $errorstr = SaveRegKey($configFileName, $cfgPars, $cgiPars) ; if ($cgiPars['state'] == 'dbmaintenance' || $cgiPars['state'] == 'dbBackup' || $cgiPars['state'] == 'dbRestore' || $cgiPars['state'] == 'dbRepair' || $cgiPars['state'] == 'dbOptimize') DispDbMaintenance($dbh, $cfgPars, $cgiPars, $errorstr) ; if ($cgiPars['state'] == 'vtimezone' || $cgiPars['state'] == 'timezone') DispTimeZone($cfgPars, $cgiPars, $errorstr) ; if ($cgiPars['state'] == 'vemail' || $cgiPars['state'] == 'email') DispEmail($cfgPars, $cgiPars, $errorstr) ; if ($cgiPars['state'] == 'vipcc' || $cgiPars['state'] == 'ipcc' || $cgiPars['state'] == 'mapip2cc') DispIp2Country($cfgPars, $cgiPars, $errorstr) ; if ($cgiPars['state'] == 'vcnotify' || $cgiPars['state'] == 'cnotify') DispClickNotify($cfgPars, $cgiPars, $errorstr) ; if ($cgiPars['state'] == 'vtrackcode' || $cgiPars['state'] == 'trackcode') DispTrackCode($cfgPars, $cgiPars, $errorstr) ; if ($cgiPars['state'] == 'vblocktracking' || $cgiPars['state'] == 'blockIPrange' || $cgiPars['state'] == 'blocksetcookie' || $cgiPars['state'] == 'blockdelcookie') DispBlockTracking($cfgPars, $cgiPars, $errorstr) ; if ($cgiPars['state'] == 'vupdate' || $cgiPars['state'] == 'regkey') DispUpdate($cfgPars, $cgiPars, $errorstr) ; if ($cgiPars['state'] == 'update') DispDownloadUpdates($cfgPars, $cgiPars) ; if ($cgiPars['state'] == 'fview') DispFileView($cfgPars, $cgiPars); if ($cgiPars['state'] == 'factivate') DispFileAct($cfgPars, $cgiPars) ; if ($cgiPars['state'] == 'vlogout') Logout($cfgPars); mysql_close($dbh) ; ###################################################### function SelfUrl(&$cfg, &$pars){ $url = $cfg['Url'] ; $sep = '?' ; foreach ($pars as $k => $v){ $url .= $sep . $k . '=' . urlencode($v) ; $sep = '&' ; } return $url ; } #--------- Escape the string for single quotation mark -------------- function Esc ($str){ return addcslashes($str, '\'\\') ; } ###################################################### #--------- Table fields -------------- function TableFields() { return array( 'Logs' => ' vTime INT UNSIGNED NOT NULL' . ', Id TINYINT UNSIGNED NOT NULL' . ', cTime TINYINT UNSIGNED NOT NULL' . ', auInfo1 TINYINT UNSIGNED NOT NULL' . ', auInfo2 TINYINT UNSIGNED NOT NULL' . ', Ip INT UNSIGNED NOT NULL' . ', cCode CHAR(2) BINARY NOT NULL' . ', piId INT UNSIGNED NOT NULL' . ', rpagId INT UNSIGNED NOT NULL' . ', adId INT UNSIGNED NOT NULL' . ', PRIMARY KEY (vTime, Id)' , 'PageInfo' => 'Id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY' . ', pagId INT UNSIGNED NOT NULL' . ', domId SMALLINT UNSIGNED NOT NULL' . ', asId0 MEDIUMINT UNSIGNED NOT NULL DEFAULT 0' . ', asId1 MEDIUMINT UNSIGNED NOT NULL DEFAULT 0' . ', asId2 MEDIUMINT UNSIGNED NOT NULL DEFAULT 0' . ', asId3 MEDIUMINT UNSIGNED NOT NULL DEFAULT 0' . # for Ad Link ', wsChId0 SMALLINT UNSIGNED NOT NULL DEFAULT 0' . ', wsChId1 SMALLINT UNSIGNED NOT NULL DEFAULT 0' . ', INDEX (pagId)' , 'Domains' => 'Id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY' . ', FP SMALLINT UNSIGNED NOT NULL' . ', Value VARCHAR(255) NOT NULL' . ', INDEX (FP)' , 'Pages' => 'Id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY' . ', FP SMALLINT UNSIGNED NOT NULL' . ', Value BLOB NOT NULL' . ', INDEX (FP)' , 'Dirs' => ' pagId INT UNSIGNED NOT NULL' . ', offset TINYINT UNSIGNED NOT NULL' . ', leaf CHAR(0)' . ', INDEX (pagId)' , 'AdSense' => 'Id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY' . ', FP SMALLINT UNSIGNED NOT NULL' . ', chId SMALLINT UNSIGNED NOT NULL' . ', format CHAR(16) NOT NULL' . ', fb CHAR(1) NOT NULL' . ', color_bg CHAR(6) NOT NULL' . ', color_text CHAR(6) NOT NULL' . ', color_link CHAR(6) NOT NULL' . ', color_url CHAR(6) NOT NULL' . ', color_border CHAR(6) NOT NULL' . ', color_line CHAR(6) NOT NULL' . ', INDEX (FP)' , 'Channels' => 'Id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY' . ', ws CHAR(0) DEFAULT NULL' . ', channel CHAR(12) NOT NULL' . ', name CHAR(32) NOT NULL' . ', INDEX (channel)', 'rDomains' => 'Id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY' . ', FP SMALLINT UNSIGNED NOT NULL' . ', Value VARCHAR(255) NOT NULL' . ', INDEX (FP)' , 'rPages' => 'Id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY' . ', rdomId MEDIUMINT UNSIGNED NOT NULL' . ', FP SMALLINT UNSIGNED NOT NULL' . ', Value BLOB NOT NULL' . ', INDEX (FP)' , 'AdUrls' => 'Id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY' . ', FP SMALLINT UNSIGNED NOT NULL' . ', Value VARCHAR(255) NOT NULL' . ', INDEX (FP)' , 'IpRangeNames' => 'Code CHAR(2) BINARY NOT NULL PRIMARY KEY' . ', Name VARCHAR(64) NOT NULL' , 'IpRanges' => 'Type TINYINT UNSIGNED NOT NULL' . ', Code CHAR(2) BINARY NOT NULL' . ', IpSeg SMALLINT UNSIGNED NOT NULL' . ', StartIp INT UNSIGNED NOT NULL' . ', EndIp INT UNSIGNED NOT NULL' . ', INDEX (IpSeg)' , ) ; } #--------- version upgrade tasks -------------- function vuRedir(&$cfg, &$pars) { if (empty($pars['VersionUpgrade'])) { $pars['VersionUpgrade'] = 0; if ($filedesc = @fopen(FullPath("vustep.txt", $cfg['InstallDir']), 'rb')) { $pars['VersionUpgrade'] = 0+fread($filedesc,1024) ; fclose($filedesc) ; } $pars['VersionUpgrade']++ ; $url = SelfUrl($cfg, $pars) ; echo "" . "asRep is going to start a database upgrade procedure (from v.".$cfg['Version']." to v.".MYVERSION.").
" . "This may take several minutes.
" . "

Please do NOT interrupt the upgrade process since it may cause loss of data." . "

If this task fails (displays an error), " . "please note the URL in the browser's address bar and contact www.asrep.com for assistance." . "

Click here once to start the database upgrade.
" . "" ; }elseif ($pars['VersionUpgrade'] == 'end') { $fname = FullPath("vustep.txt", $cfg['InstallDir']) ; if (file_exists($fname)) unlink($fname) ; }else{ if ($filedesc = @fopen(FullPath("vustep.txt", $cfg['InstallDir']), 'wb')) { fwrite($filedesc, $pars['VersionUpgrade']) ; fclose($filedesc) ; } $pars['VersionUpgrade']++; $url = SelfUrl($cfg, $pars) ; echo "" . "". "" . "asRep database upgrade is in progress.
" . "Finished task# " . ($pars['VersionUpgrade']-1) . ".
" . "Requesting task# " . $pars['VersionUpgrade'] . ".
" . "

Some tasks may take long time to complete. Please do not interrupt the upgrade process since it may cause loss of data." . "

If this task fails (displays an error), " . "please note the URL in the browser's address bar and contact www.asrep.com for assistance." . "" ; } } #--------- version upgrade tasks -------------- function version125Upgrade($dbh, $fname, $ocfg, &$pars) { eval(getConfigStr($ocfg)) ; $ncfg = $cfgPars ; $tfields = TableFields() ; if (empty($pars['VersionUpgrade'])) { vuRedir($ocfg, $pars) ; exit(); } if ($pars['VersionUpgrade'] == 1){ # change name of the db tables. DBQuery($dbh, "REPAIR TABLE" . " {$ocfg['Tbl']['Logs']}" . ", {$ocfg['Tbl']['PageInfo']}" . ", {$ocfg['Tbl']['Domains']}" . ", {$ocfg['Tbl']['Pages']}" . ", {$ocfg['Tbl']['Dirs']}" . ", {$ocfg['Tbl']['rDomains']}" . ", {$ocfg['Tbl']['rPages']}" . ", {$ocfg['Tbl']['AdUrls']}" . ", {$ocfg['Tbl']['AdSense']}" . ", {$ocfg['Tbl']['ChannelDef']}" . ", {$ocfg['Tbl']['IpRangeNames']}" . ", {$ocfg['Tbl']['IpRanges']}" ) ; DBQuery($dbh, "RENAME TABLE" . " {$ocfg['Tbl']['Logs']} TO {$ncfg['Tbl']['Logs']}" . ", {$ocfg['Tbl']['PageInfo']} TO {$ncfg['Tbl']['PageInfo']}" . ", {$ocfg['Tbl']['Domains']} TO {$ncfg['Tbl']['Domains']}" . ", {$ocfg['Tbl']['Pages']} TO {$ncfg['Tbl']['Pages']}" . ", {$ocfg['Tbl']['Dirs']} TO {$ncfg['Tbl']['Dirs']}" . ", {$ocfg['Tbl']['rDomains']} TO {$ncfg['Tbl']['rDomains']}" . ", {$ocfg['Tbl']['rPages']} TO {$ncfg['Tbl']['rPages']}" . ", {$ocfg['Tbl']['AdUrls']} TO {$ncfg['Tbl']['AdUrls']}" . ", {$ocfg['Tbl']['AdSense']} TO {$ncfg['Tbl']['AdSense']}" . ", {$ocfg['Tbl']['ChannelDef']} TO {$ncfg['Tbl']['Channels']}" . ", {$ocfg['Tbl']['IpRangeNames']} TO {$ncfg['Tbl']['IpRangeNames']}" # ", {$ocfg['Tbl']['IpRanges']} TO {$ncfg['Tbl']['IpRanges']}" ) ; DBQuery($dbh, "DROP TABLE {$ocfg['Tbl']['Logs']}", true) ; DBQuery($dbh, "DROP TABLE {$ocfg['Tbl']['PageInfo']}", true) ; DBQuery($dbh, "DROP TABLE {$ocfg['Tbl']['Domains']}", true) ; DBQuery($dbh, "DROP TABLE {$ocfg['Tbl']['Pages']}", true) ; DBQuery($dbh, "DROP TABLE {$ocfg['Tbl']['Dirs']}", true) ; DBQuery($dbh, "DROP TABLE {$ocfg['Tbl']['rDomains']}", true) ; DBQuery($dbh, "DROP TABLE {$ocfg['Tbl']['rPages']}", true) ; DBQuery($dbh, "DROP TABLE {$ocfg['Tbl']['AdUrls']}", true) ; DBQuery($dbh, "DROP TABLE {$ocfg['Tbl']['AdSense']}", true) ; DBQuery($dbh, "DROP TABLE {$ocfg['Tbl']['ChannelDef']}", true) ; DBQuery($dbh, "DROP TABLE {$ocfg['Tbl']['IpRangeNames']}", true) ; # DBQuery($dbh, "DROP TABLE {$ocfg['Tbl']['IpRanges']}", true) ; vuRedir($ocfg, $pars) ; exit(); } if ($pars['VersionUpgrade'] == 2){ # Change The Channels table DBQuery($dbh, "ALTER TABLE {$ncfg['Tbl']['Channels']} DROP PRIMARY KEY") ; DBQuery($dbh, "ALTER TABLE {$ncfg['Tbl']['Channels']} ADD Id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY") ; DBQuery($dbh, "ALTER TABLE {$ncfg['Tbl']['Channels']} ADD ws CHAR(0) DEFAULT NULL") ; DBQuery($dbh, "ALTER TABLE {$ncfg['Tbl']['Channels']} ADD INDEX (channel)") ; vuRedir($ocfg, $pars) ; exit(); } if ($pars['VersionUpgrade'] == 3){ # Insert the channels into Channels table from AdSense table $sth = DBQuery($dbh, "SELECT ast.channel" . " FROM {$ncfg['Tbl']['AdSense']} AS ast LEFT JOIN {$ncfg['Tbl']['Channels']} AS cdt ON ast.channel=cdt.channel" . " WHERE ISNULL(cdt.channel)>0" . " GROUP BY ast.channel") ; while($rec_r = mysql_fetch_row($sth)) { DBQuery($dbh, "INSERT INTO {$ncfg['Tbl']['Channels']} (Id,ws,channel,name) VALUES(NULL,NULL,". DBQuote($rec_r[0]).",'')") ; } mysql_free_result($sth); vuRedir($ocfg, $pars) ; exit(); } if ($pars['VersionUpgrade'] == 4){ # Insert the Id's of the channels into AdSense table DBQuery($dbh, "ALTER TABLE {$ncfg['Tbl']['AdSense']} ADD chId SMALLINT UNSIGNED NOT NULL") ; $sth = DBQuery($dbh, "SELECT Id,channel FROM {$ncfg['Tbl']['Channels']}") ; while($rec_r = mysql_fetch_row($sth)) { DBQuery($dbh, "UPDATE {$ncfg['Tbl']['AdSense']} SET chId=".DBQuote($rec_r[0])." WHERE channel=". DBQuote($rec_r[1])) ; } mysql_free_result($sth); DBQuery($dbh, "ALTER TABLE {$ncfg['Tbl']['AdSense']} DROP INDEX channel") ; DBQuery($dbh, "ALTER TABLE {$ncfg['Tbl']['AdSense']} DROP channel") ; DBQuery($dbh, "ALTER TABLE {$ncfg['Tbl']['AdSense']} DROP hl") ; DBQuery($dbh, "ALTER TABLE {$ncfg['Tbl']['AdSense']} ADD color_line CHAR(6) NOT NULL") ; vuRedir($ocfg, $pars) ; exit(); } if ($pars['VersionUpgrade'] == 5){ # update the FP field $sth = DBQuery($dbh, "SELECT Id,chId,format,fb,color_bg,color_text,color_link,color_url,color_border,color_line". " FROM {$ncfg['Tbl']['AdSense']}") ; while($rec_r = mysql_fetch_row($sth)) { $fp = FingerPrint($rec_r[1].$rec_r[2].$rec_r[3].$rec_r[4].$rec_r[5].$rec_r[6].$rec_r[7].$rec_r[8].$rec_r[9], 2); DBQuery($dbh, "UPDATE {$ncfg['Tbl']['AdSense']} SET FP=$fp WHERE Id=$rec_r[0]") ; } mysql_free_result($sth); vuRedir($ocfg, $pars) ; exit(); } if ($pars['VersionUpgrade'] == 6){ # Add websearch channels to PageInfo DBQuery($dbh, "ALTER TABLE {$ncfg['Tbl']['PageInfo']} CHANGE asId0 asId0 MEDIUMINT UNSIGNED NOT NULL DEFAULT 0") ; DBQuery($dbh, "ALTER TABLE {$ncfg['Tbl']['PageInfo']} CHANGE asId1 asId1 MEDIUMINT UNSIGNED NOT NULL DEFAULT 0") ; DBQuery($dbh, "ALTER TABLE {$ncfg['Tbl']['PageInfo']} CHANGE asId2 asId2 MEDIUMINT UNSIGNED NOT NULL DEFAULT 0") ; DBQuery($dbh, "ALTER TABLE {$ncfg['Tbl']['PageInfo']} ADD wsChId0 SMALLINT UNSIGNED NOT NULL DEFAULT 0") ; DBQuery($dbh, "ALTER TABLE {$ncfg['Tbl']['PageInfo']} ADD wsChId1 SMALLINT UNSIGNED NOT NULL DEFAULT 0") ; vuRedir($ocfg, $pars) ; exit(); } if ($pars['VersionUpgrade'] == 7){ # remove '-' from AdUrls table and set adId in Logs table to 0 for non-clicked records DBQuery($dbh, "UPDATE {$ncfg['Tbl']['Logs']} SET adId=0 WHERE cTime=0") ; vuRedir($ocfg, $pars) ; exit(); } if ($pars['VersionUpgrade'] == 8){ # Insert an Ip Segment into IpRange table DBQuery($dbh, "CREATE TABLE {$ncfg['Tbl']['IpRanges']} ({$tfields['IpRanges']})") ; $sth = DBQuery($dbh, "SELECT Type, Code, StartIp, EndIp FROM {$ocfg['Tbl']['IpRanges']}") ; while($rec_r = mysql_fetch_row($sth)) { $sseg = (int)($rec_r[2] / 65536) ; $eseg = (int)($rec_r[3] / 65536) ; while($sseg <= $eseg) { DBQuery($dbh, "INSERT INTO {$ncfg['Tbl']['IpRanges']} (Type,Code,IpSeg,StartIp,EndIp)". " VALUES($rec_r[0],". DBQuote($rec_r[1]).",$sseg, $rec_r[2], $rec_r[3])") ; $sseg ++ ; } } mysql_free_result($sth); DBQuery($dbh, "DROP TABLE {$ocfg['Tbl']['IpRanges']}", true) ; vuRedir($ocfg, $pars) ; exit(); } if ($pars['VersionUpgrade'] == 9){ # v.1.30 # add a new field for AdLinks into PageInfo table DBQuery($dbh, "ALTER TABLE {$ncfg['Tbl']['PageInfo']} ADD asId3 MEDIUMINT UNSIGNED NOT NULL DEFAULT 0") ; vuRedir($ocfg, $pars) ; exit(); } $errstr = SaveConfig($fname, $ocfg) ; $pars['VersionUpgrade'] = 'end' ; vuRedir($ocfg, $pars) ; return $errstr ; } #--------- version upgrade tasks -------------- function version130Upgrade($dbh, $fname, $ocfg, &$pars) { eval(getConfigStr($ocfg)) ; $ncfg = $cfgPars ; $tfields = TableFields() ; if (empty($pars['VersionUpgrade'])) { vuRedir($ocfg, $pars) ; exit(); } if ($pars['VersionUpgrade'] == 1){ DBQuery($dbh, "REPAIR TABLE" . " {$ocfg['Tbl']['Logs']}" . ", {$ocfg['Tbl']['PageInfo']}" . ", {$ocfg['Tbl']['Domains']}" . ", {$ocfg['Tbl']['Pages']}" . ", {$ocfg['Tbl']['Dirs']}" . ", {$ocfg['Tbl']['rDomains']}" . ", {$ocfg['Tbl']['rPages']}" . ", {$ocfg['Tbl']['AdUrls']}" . ", {$ocfg['Tbl']['AdSense']}" . ", {$ocfg['Tbl']['Channels']}" . ", {$ocfg['Tbl']['IpRangeNames']}" . ", {$ocfg['Tbl']['IpRanges']}" ) ; # change name of the db tables. DBQuery($dbh, "RENAME TABLE" . " {$ocfg['Tbl']['Logs']} TO {$ncfg['Tbl']['Logs']}" . ", {$ocfg['Tbl']['PageInfo']} TO {$ncfg['Tbl']['PageInfo']}" . ", {$ocfg['Tbl']['Domains']} TO {$ncfg['Tbl']['Domains']}" . ", {$ocfg['Tbl']['Pages']} TO {$ncfg['Tbl']['Pages']}" . ", {$ocfg['Tbl']['Dirs']} TO {$ncfg['Tbl']['Dirs']}" . ", {$ocfg['Tbl']['rDomains']} TO {$ncfg['Tbl']['rDomains']}" . ", {$ocfg['Tbl']['rPages']} TO {$ncfg['Tbl']['rPages']}" . ", {$ocfg['Tbl']['AdUrls']} TO {$ncfg['Tbl']['AdUrls']}" . ", {$ocfg['Tbl']['AdSense']} TO {$ncfg['Tbl']['AdSense']}" . ", {$ocfg['Tbl']['Channels']} TO {$ncfg['Tbl']['Channels']}" . ", {$ocfg['Tbl']['IpRangeNames']} TO {$ncfg['Tbl']['IpRangeNames']}" . ", {$ocfg['Tbl']['IpRanges']} TO {$ncfg['Tbl']['IpRanges']}" ) ; DBQuery($dbh, "DROP TABLE {$ocfg['Tbl']['Logs']}", true) ; DBQuery($dbh, "DROP TABLE {$ocfg['Tbl']['PageInfo']}", true) ; DBQuery($dbh, "DROP TABLE {$ocfg['Tbl']['Domains']}", true) ; DBQuery($dbh, "DROP TABLE {$ocfg['Tbl']['Pages']}", true) ; DBQuery($dbh, "DROP TABLE {$ocfg['Tbl']['Dirs']}", true) ; DBQuery($dbh, "DROP TABLE {$ocfg['Tbl']['rDomains']}", true) ; DBQuery($dbh, "DROP TABLE {$ocfg['Tbl']['rPages']}", true) ; DBQuery($dbh, "DROP TABLE {$ocfg['Tbl']['AdUrls']}", true) ; DBQuery($dbh, "DROP TABLE {$ocfg['Tbl']['AdSense']}", true) ; DBQuery($dbh, "DROP TABLE {$ocfg['Tbl']['ChannelDef']}", true) ; DBQuery($dbh, "DROP TABLE {$ocfg['Tbl']['IpRangeNames']}", true) ; DBQuery($dbh, "DROP TABLE {$ocfg['Tbl']['IpRanges']}", true) ; vuRedir($ocfg, $pars) ; exit(); } if ($pars['VersionUpgrade'] == 2){ # add a new field for AdLinks into PageInfo table DBQuery($dbh, "ALTER TABLE {$ncfg['Tbl']['PageInfo']} ADD asId3 MEDIUMINT UNSIGNED NOT NULL DEFAULT 0") ; vuRedir($ocfg, $pars) ; exit(); } if ($pars['VersionUpgrade'] == 3){ # do we need to shrink Channels table? $sth = DBQuery($dbh, "SELECT COUNT(DISTINCT ISNULL(ws)>0, channel) FROM {$ncfg['Tbl']['Channels']}") ; list($dcc) = mysql_fetch_row($sth) ; mysql_free_result($sth); $sth = DBQuery($dbh, "SELECT COUNT(*) FROM {$ncfg['Tbl']['Channels']}") ; list($cc) = mysql_fetch_row($sth) ; mysql_free_result($sth); if ($cc>$dcc) { # Oops! DBQuery($dbh, "CREATE TABLE {$ncfg['Tbl']['Channels']}tmp ({$tfields['Channels']})") ; DBQuery($dbh, "INSERT INTO {$ncfg['Tbl']['Channels']}tmp (Id,ws,channel,name)" . " SELECT NULL,ws,channel,'' FROM {$ncfg['Tbl']['Channels']}". " GROUP BY IFNULL(ws,1),channel") ; DBQuery($dbh, "REPAIR TABLE {$ncfg['Tbl']['Channels']}, {$ncfg['Tbl']['Channels']}tmp" ) ; DBQuery($dbh, "RENAME TABLE {$ncfg['Tbl']['Channels']} TO orichannels" . ", {$ncfg['Tbl']['Channels']}tmp TO {$ncfg['Tbl']['Channels']}" ) ; $sth = DBQuery($dbh, "SELECT cht.Id, ocht.Id, ISNULL(cht.ws)>0" . " FROM {$ncfg['Tbl']['Channels']} AS cht, orichannels AS ocht". " WHERE cht.channel=ocht.channel AND IFNULL(cht.ws,1)=IFNULL(ocht.ws,1)") ; while($rec = mysql_fetch_row($sth)) { if ($rec[2]) { DBQuery($dbh, "UPDATE {$ncfg['Tbl']['AdSense']} SET chId=$rec[0] WHERE chId=$rec[1]") ; }else{ DBQuery($dbh, "UPDATE {$ncfg['Tbl']['PageInfo']} SET wsChId0=$rec[0] WHERE wsChId0=$rec[1]") ; DBQuery($dbh, "UPDATE {$ncfg['Tbl']['PageInfo']} SET wsChId1=$rec[0] WHERE wsChId1=$rec[1]") ; } } mysql_free_result($sth); DBQuery($dbh, "DROP TABLE orichannels", true) ; vuRedir($ocfg, $pars) ; exit(); } } if ($pars['VersionUpgrade'] == 4){ # shrink AdSense table DBQuery($dbh, "CREATE TABLE {$ncfg['Tbl']['AdSense']}tmp ({$tfields['AdSense']})") ; DBQuery($dbh, "INSERT INTO {$ncfg['Tbl']['AdSense']}tmp (Id,FP,chId,format,fb,color_bg,color_text,color_link,color_url,color_border,color_line)" . " SELECT NULL,FP,chId,format,fb,color_bg,color_text,color_link,color_url,color_border,color_line" . " FROM {$ncfg['Tbl']['AdSense']}". " GROUP BY chId,format,fb,color_bg,color_text,color_link,color_url,color_border,color_line") ; $sth = DBQuery($dbh, " SELECT Id, CONCAT(chId,format,fb,color_bg,color_text,color_link,color_url,color_border,color_line)" . " FROM {$ncfg['Tbl']['AdSense']}tmp") ; while($rec = mysql_fetch_row($sth)) { $fp = FingerPrint($rec[1], 2) ; DBQuery($dbh, "UPDATE {$ncfg['Tbl']['AdSense']}tmp SET FP=$fp WHERE Id=$rec[0]") ; } mysql_free_result($sth); DBQuery($dbh, "REPAIR TABLE {$ncfg['Tbl']['AdSense']}, {$ncfg['Tbl']['AdSense']}tmp" ) ; DBQuery($dbh, "RENAME TABLE {$ncfg['Tbl']['AdSense']} TO oriadsense" . ", {$ncfg['Tbl']['AdSense']}tmp TO {$ncfg['Tbl']['AdSense']}" ) ; $sth = DBQuery($dbh, "SELECT ast.Id, oast.Id" . " FROM {$ncfg['Tbl']['AdSense']} AS ast, oriadsense AS oast". " WHERE ast.chId=oast.chId AND ast.format=oast.format AND ast.fb=oast.fb AND ast.color_bg=oast.color_bg" . " AND ast.color_text=oast.color_text AND ast.color_link=oast.color_link AND ast.color_url=oast.color_url" . " AND ast.color_border=oast.color_border AND ast.color_line=oast.color_line" ) ; while($rec = mysql_fetch_row($sth)) { DBQuery($dbh, "UPDATE {$ncfg['Tbl']['PageInfo']} SET asId0=$rec[0] WHERE asId0=$rec[1]") ; DBQuery($dbh, "UPDATE {$ncfg['Tbl']['PageInfo']} SET asId1=$rec[0] WHERE asId1=$rec[1]") ; DBQuery($dbh, "UPDATE {$ncfg['Tbl']['PageInfo']} SET asId2=$rec[0] WHERE asId2=$rec[1]") ; } mysql_free_result($sth); DBQuery($dbh, "DROP TABLE oriadsense", true) ; vuRedir($ocfg, $pars) ; exit(); } if ($pars['VersionUpgrade'] == 5){ # shrink PageInfo table DBQuery($dbh, "CREATE TABLE {$ncfg['Tbl']['PageInfo']}tmp ({$tfields['PageInfo']})") ; DBQuery($dbh, "INSERT INTO {$ncfg['Tbl']['PageInfo']}tmp (Id,pagId,domId,asId0,asId1,asId2,asId3,wsChId0,wsChId1)" . " SELECT NULL,pagId,domId,asId0,asId1,asId2,asId3,wsChId0,wsChId1" . " FROM {$ncfg['Tbl']['PageInfo']}". " GROUP BY pagId,domId,asId0,asId1,asId2,asId3,wsChId0,wsChId1") ; DBQuery($dbh, "REPAIR TABLE {$ncfg['Tbl']['PageInfo']}, {$ncfg['Tbl']['PageInfo']}tmp" ) ; DBQuery($dbh, "RENAME TABLE {$ncfg['Tbl']['PageInfo']} TO oripageinfo" . ", {$ncfg['Tbl']['PageInfo']}tmp TO {$ncfg['Tbl']['PageInfo']}" ) ; $sth = DBQuery($dbh, "SELECT pit.Id, opit.Id" . " FROM {$ncfg['Tbl']['PageInfo']} AS pit, oripageinfo AS opit". " WHERE pit.pagId=opit.pagId AND pit.domId=opit.domId AND pit.asId0=opit.asId0 AND pit.asId1=opit.asId1" . " AND pit.asId2=opit.asId2 AND pit.asId3=opit.asId3 AND pit.wsChId0=opit.wsChId0 AND pit.wsChId1=opit.wsChId1" ) ; while($rec = mysql_fetch_row($sth)) { DBQuery($dbh, "UPDATE {$ncfg['Tbl']['Logs']} SET piId=$rec[0] WHERE piId=$rec[1]") ; } mysql_free_result($sth); DBQuery($dbh, "DROP TABLE oripageinfo", true) ; vuRedir($ocfg, $pars) ; exit(); } $errstr = SaveConfig($fname, $ocfg) ; $pars['VersionUpgrade'] = 'end' ; vuRedir($ocfg, $pars) ; return $errstr ; } #--------- get Configuration Data -------------- function getConfigStr (&$cfg){ ob_start() ; ?> # Please make all changes to configuration variables via admin program. $cfgPars = array( 'Version' => '', 'rKey' => '', 'DbHost' => '', 'DbPort' => '', 'DbUser' => '', 'DbPass' => '', 'DbName' => '', 'AdminName' => '', 'AdminPassEnc' => '', 'UTZone' => , 'UTName' => '', 'EMailTo' => '', 'EMailFrom' => '', 'crImg' => , 'crPop' => , 'crCookie' => , 'crCookieDur' => , 'Tbl' => array( 'Logs' => 'asrep140Logs', 'PageInfo'=> 'asrep140PageInfo', 'Domains' => 'asrep140Domains', 'Pages' => 'asrep140Pages', 'Dirs' => 'asrep140Dirs', 'rDomains' => 'asrep140rDomains', 'rPages' => 'asrep140rPages', 'AdUrls' => 'asrep140AdUrls', 'AdSense' => 'asrep140AdSense', 'Channels' => 'asrep140Channels', 'IpRangeNames' => 'asrep140IpRangeNames', 'IpRanges' => 'asrep140IpRanges', ), 'blockedIps' => array( array(,), ), ) ; " ; if ($filedesc = @fopen($fname, 'wb')) { fwrite($filedesc, $configstr) ; fclose($filedesc) ; if ($filedesc = @fopen($fname, 'rb')) { $readstr = '' ; while(strlen($line = fread($filedesc,1024))) $readstr .= $line ; fclose($filedesc) ; if ($configstr != $readstr) { return "Can not read just created configuration file $fname" ; } }else{ return "Can not open the just created configuration file $fname" ; } }else{ return "Can not create configuration file $fname" ; } return '' ; } #--------- Save Admin name password -------------- function SaveAdminName ($fname, &$cfg, &$pars){ $cfg['AdminName'] = $pars['name'] ; $cfg['AdminPass'] = $pars['pass'] ; $cfg['AdminPassEnc'] = EncryptPassword($pars['pass']) ; return SaveConfig($fname, $cfg) ; } #------------------------------------ function SaveDBSettings ($fname, &$cfg, &$pars){ $cfg['DbHost'] = $pars['host'] ; $cfg['DbPort'] = $pars['port'] ; $cfg['DbUser'] = $pars['user'] ; $cfg['DbPass'] = $pars['pass'] ; $cfg['DbName'] = $pars['name'] ; return SaveConfig($fname, $cfg) ; } #------------------------------------ function SaveTimeZone ($fname, &$cfg, &$pars){ $cfg['UTZone'] = $pars['UTZone'] * 60*60 ; $cfg['UTName'] = $pars['UTName'] ; return SaveConfig($fname, $cfg) ; } #------------------------------------ function SaveEmail ($fname, &$cfg, &$pars){ $cfg['EMailTo'] = $pars['EMailTo'] ; $cfg['EMailFrom'] = $pars['EMailFrom'] ; $errstr = SaveConfig($fname, $cfg) ; if (!$errstr && isset($pars['EMailTest'])) { if (IsValidEMail($pars['EMailTo'])) { $from = empty($cfg['EMailFrom']) ? 'asrep@asrep.com':$cfg['EMailFrom'] ; $msg = 'If you read this message, then the e-mail interface is working properly.' ; @SendEMail($pars['EMailTo'], $from, 'asRep e-mail Interface Test Message', 0, $msg) ? ($errstr = 'Test message has been sent to '.$pars['EMailTo'].'') : ($errstr = 'function mail did not accept the message for delivery') ; }else { $errstr = 'You must enter a valid e-mail address to send the test message' ; } } return $errstr ; } #------------------------------------ function GetIpCc ($dbh, &$cfg, &$pars){ if (!empty($pars['forceAll'])) { $updates = array() ; WriteRirUpdates($updates, $cfg['InstallDir']) ; } $errstr = UpdateIpCc($dbh, $cfg, $pars) ; return $errstr ? $errstr : "Ip-to-Country database updated" ; } #------------------------------------ function SaveClickNotify ($fname, &$cfg, &$pars){ @$cfg['crImg'] = $pars['crImg'] ; @$cfg['crPop'] = $pars['crPop'] ; @$cfg['crCookie'] = $pars['crCookie'] ; @$cfg['crCookieDur'] = 0+$pars['crCookieDur'] ; return SaveConfig($fname, $cfg) ; } #------------------------------------ function SaveBlockedIPs ($fname, &$cfg, &$pars){ $cfg['blockedIps'] = array() ; $i=0 ; while (isset($pars["blockedIpsStart$i"]) && isset($pars["blockedIpsCount$i"])){ if (strlen($pars["blockedIpsStart$i"]) && strpos($pars["blockedIpsStart$i"],'.')!==false && $pars["blockedIpsCount$i"]>0) { $cfg['blockedIps'][] = array(0+IPstr2num($pars["blockedIpsStart$i"]), 0+$pars["blockedIpsCount$i"]) ; } $i++ ; } return SaveConfig($fname, $cfg) ; } #------------------------------------ function SaveRegKey ($fname, &$cfg, &$pars){ $cfg['rKey'] = $pars['rKey'] ; return SaveConfig($fname, $cfg) ; } #------------------------------------ function VerifyUserLogin (&$cfg, &$pars){ if (isset($pars['state']) && $pars['state'] == 'login') { if (EncryptPassword($pars['pass'], $cfg['AdminPassEnc']) == $cfg['AdminPassEnc'] && $pars['name'] == $cfg['AdminName']) {# True login setcookie ('UserNameEnc', EncryptPassword($cfg['AdminName']), 0, $cfg['PathUrl']) ; return 1 ; }else { DispLogin($cfg, $pars['name'], "Invalid name or password. Please try again.") ; } }else { $une = isset($_COOKIE['UserNameEnc']) ? $_COOKIE['UserNameEnc'] : '' ; if (EncryptPassword($cfg['AdminName'], $une) == $une) { # Yes you are still login return 1 ; }else { DispLogin($cfg, '', "Please enter your user name and password.") ; } } return 0 ; } #------------------------------------ function Logout(&$cfg) { setcookie ('UserNameEnc', 0, 0, $cfg['PathUrl']) ; DispLogin($cfg, '', "Please enter your user name and password.") ; } #--------- Display User settings -------------- function DispAdminName (&$cfg, $msg){ ?> asRep Admin: User Name and Pass

User Name and Password

Please assign a name and password for the user.

Name of the User:
Password of the User:

Please enter a name and password that you can remember later. Both admin and report scripts will ask for the name and password.

If you can not remember your admin name or password, you can reset it by editing the file settings.php in the installation directory. You must assign an empty string to AdminName. Then admin program will display this screen again.


You can re-start the setup process, by deleting the file settings.php in the installation directory. asRep Admin: Login
Login
User Name:
Password:

Login information is stored in a session cookie in your browser. Please enable cookies.

asRep Admin: Database Settings

Database Connectivity Settings

Status: '.$msg : '')?>

Please enter the info about the MySql database to be used.

MySQL Server (Host) Name: Enter the name or IP of the database host server. Leave blank for the default server name, 'localhost'.
MySQL Server Port: Enter the port number of the database server. Leave blank for the default server port, '3306'.
MySQL Database Name: Enter the name of the MySQL database where the tables will reside. You must create this database by using the database administration program provided by your hosting provider such as via your hosting control panel. Consult to your hosting provider if you do not know how to do it.
MySQL Database User Name: Enter the name of the user having access right to the database server.
MySQL Database User Password: Enter the password of the user accessing the database server

If you see this screen repeatedly, this means that the script can not connect to the database. Please enter correct settings.


You can re-start the setup process, by deleting the file settings.php in the installation directory. Database  |  IP to Country  |  Time Zone  |  E-Mail  |  Click Reporting  |  Tracking Code  |  Block Tracking  |  Updates  |  Reports  |  Exit END_OF_MENU; } #--------- Display Setup Screen -------------- function DispSetup (&$cfg, &$pars, $msg){ ?> asRep Admin: Other Settings
Status: '.$msg : '')?>

Select the option from the menu.

















You can re-start the setup process, by deleting the file settings.php in the installation directory. \n" ; } if ($sth2) mysql_free_result($sth2); } mysql_free_result($sth); return $str ; } #--------- Optimize Database Tables -------------- function DbOptimize($dbh, &$cfg, &$pars){ $str = "" ; $sth = DBQuery($dbh, "SHOW TABLE STATUS") ; while($rec = mysql_fetch_assoc($sth)) { $sth2 = DBQuery($dbh, "OPTIMIZE TABLE {$rec['Name']}", true) ; while($sth2 && ($rec = mysql_fetch_row($sth2))) { $str .= implode(' : ', $rec) . "
\n" ; } if ($sth2) mysql_free_result($sth2); } mysql_free_result($sth); return $str ; } #--------- Display DB Maintenance Screen -------------- function DispDbMaintenance($dbh, &$cfg, &$pars, $msg){ ?> asRep Admin: Database Maintenance Settings
Status: '.$msg : '')?>

Database Maintenance

List of tables in the database
TableNumber of RowsAvg. Row SizeData SizeIndex Size

Make a backup of the database in the script directory.
> Create compressed backups to save disk space. (You must have Zlib compression library enabled in your PHP configuration as described here)
This operation takes time! Please click to the button only once.

Restore database from a backup:

This operation takes time! Please click to the button only once.
Any database backup was not found.
Optimize the tables in the database: This feature will execute "OPTIMIZE TABLE xxx" on the tables to gain free space etc.
This operation takes time! Please click to the button only once.

Repair the tables in the database: It will execute "REPAIR TABLE xxx" on the tables to attempt to fix corrupted tables. Use this feature only if you encounter table errors.
This operation takes time! Please click to the button only once.


You can re-start the setup process, by deleting the file settings.php in the installation directory. asRep Admin: Time Zone Settings
Status: '.$msg : '')?>

Time Zone Settings

Specify the time zone you prefer the reports should use. The specified time zone is only used when displaying (retrieving) time values to (from) the user. The actual times are always stored in the database as universal GMT time.

Date/Time in GMT:
Date/Time in user time zone:
Time Zone in hours: This value is the time difference between your local time and the Greenwich Mean Time (GMT or UTC). The software saves and uses all time values in terms of GMT. This setting will be used to convert the saved time values into your preferred time zone (and vice versa) while displaying time values. Some sample values are:
Sydney-Australia...+10, Tokyo-Japan...+9, Hong Kong...+8, Moskow-Russia...+3, Istanbul-Turkey...+2, Paris-France...+1, London-England...0, Buenos Aires-Argentina...-3, Atlantic Time-Canada...-4, Eastern Time-US...-5, Central Time-US...-6, Mountain Time-US...-7, Pacific Time-US...-8
Time Zone Name: Please enter a descriptive name for the time zone you entered. This value is displayed on some reports and on admin panel.



You can re-start the setup process, by deleting the file settings.php in the installation directory. asRep Admin: E-Mail Settings
Status: '.$msg : '')?>

E-Mail Settings

Set the e-mail interface available on your system. The scipt will use these settings to send report e-mails

To e-mail address: Enter the e-mail address that will receive the report or test e-mails sent by the script.
From e-mail address: Enter the e-mail address that will appear on the From field of the emails sent by the script.
This script uses PHP mail function to send e-mails. If it is not configured properly on your system, plase see your PHP documentation or ask to your hosting provider to configure mail properly.



You can re-start the setup process, by deleting the file settings.php in the installation directory. asRep Admin: IP to Country Database Download
Status: '.$msg : '')?>

IP to Country Management

Download IP to Country mapping database. This database is used in reports to identify the country of visitors from IP address.

No database download has been done yet

$val) { if ($key != 'country' && $val[0]+0 > 0) { ?>
Downloaded ItemLast updateNumber of Lines
Country List
Region Countries
> Force download of all data


This operation may take time! Please click to the button only once.

Map the IPs to Countries in report database. IP-to-Country mapping is done while saving the records. If you have records saved before downloading the IP-to-Country database, or you simply want to refresh the IP-to-Country associations, you can remap the IPs in the database.

Map only the IPs that are not already assigned a country.
Map all IPs again.


This operation may take time! Please click to the button only once.



You can re-start the setup process, by deleting the file settings.php in the installation directory. asRep Admin: Click/Search Reporting Settings
Status: '.$msg : '')?>

Click/Search Reporting

Please specify how the clicks and searches will be reported. You can specify multiple methods in order to increase the chance the click/search is reported. Since every click/search is given a unique id, multiple reporting of the same click/search is recorded only once. If you un-check all methods, then there will be no click/search tracking. Impression tracking is not affected from these settings.

> Report clicks/searches via an invisible IMG tag element just before loading the new page.

This method is transparent to the visitor. After a click/search is detected, the image is activated to notify the server about the click/search.

> Report clicks/searches via a hidden pop-under window. The window closes itself automatically.

This method opens a pop-under window to notify the server about the click/search. The pop-under window is closed automatically once the click/search is reported. The window is invisible on some browsers like Internet Explorer. Only an icon in the task bar is displayed.

> Report clicks/searches via cookies. Store the cookies for days.

The click/search information is stored in a cookie on the visitor's browser. Next time the visitor comes to your site, the previous click/search info is reported.





You can re-start the setup process, by deleting the file settings.php in the installation directory. asRep Admin: Tracking Code
Status: '.$msg : '')?>

AdSense Tracking Code

Copy and paste the following tracking code to your web pages.




You can re-start the setup process, by deleting the file settings.php in the installation directory. asRep Admin: Tracking Exceptions
Status: '.$msg : '')?>

Block Tracking

Some webmasters request that asRep should not track the impressions, clicks and searches during certain cases. For example, a webmaster visiting his/her site a lot may want that the tracking be blocked for his/her activity on the site, since the extra impressions he/she creates mess up the results in asRep reports by increasing the views and decreasing the CTR.

Block tracking via a cookie

By setting a cookie in your browser, you can block tracking of impressions, clicks and searches from this browser.

A cookie is set in this browser to block tracking. Any activity on your web sites with this browser will not be tracked by asRep.

Erase the cookie to allow tracking from this browser.

No cookie is currently set in this browser to block tracking. All activity with this browser will be tracked by asRep.

Set a cookie to block tracking from this browser.

Block tracking via IP list

By entering a list of IP address ranges, you can block tracking of impressions, clicks and searches from these IPs.

Blocked IP Ranges
Starting IPNumber of IPs
 

Example-1: to ban IP 165.146.254.233, enter 165.146.254.233 into Starting IP and 1 into Number of IPs.
Example-2: to ban all IPs in the range (165.146.254.0, 165.146.254.255) inclusive, enter 165.146.254.0 into Starting IP and 256 into Number of IPs.

To remove an IP range from the list, either delete the Starting IP box or enter 0 (zero) into the corresponding Number of IPs box.



You can re-start the setup process, by deleting the file settings.php in the installation directory. asRep Admin: Upgrading
Status: '.$msg : '')?>

Registration Key

Obtain your registration key and enter it here

Available Updates

ERROR: Can not verify the integrity of data from asRep update server!

$v) { if (!(isset($su_r[$f]) && ($u_r[$f]['date'] <= $su_r[$f]['date']))) { if (!$anyupdate) { ?>
File NameDescription

When you download the files, they will be saved in the installation directory with a new_ prefix added to the file names.
No file or code will be executed without your control.

No new update is available




You can re-start the setup process, by deleting the file settings.php in the installation directory. $u_r[$f]['desc'], 'date'=>$u_r[$f]['date']) ; $du[$f] = array('desc'=>$u_r[$f]['desc'], 'date'=>$u_r[$f]['date'], 'tf'=>"new_$f") ; } } } WriteUpdates($su_r, $cfg['InstallDir']) ; ?> asRep Admin: Upgrading

Downloaded Updates

No update has been done

has been downloaded as

You must click to the Activate the Downloaded Files button in order to make the new files active. After the activation, the old script files are still available with a .back appended to the file name.
You can inspect the file contents before activating them.

If you like, you can rename the downloaded files by yourself via your shell access client or FTP client.


You can re-start the setup process, by deleting the file settings.php in the installation directory. asRep Admin: Content of <?php echo $pars['file']?>


asRep Admin: file activation

Activated Downloads

The file was renamed as and the old was renamed as .

The file was not found.

Return to the Updates page

vicki bondage vicki bondage does virgin fest performances virgin fest performances there sex monique alexander sex monique alexander imagine breast massage enhancemen breast massage enhancemen soldier kids nude photography kids nude photography fair teen girl fart teen girl fart arrange teen cunt panties cum teen cunt panties cum neighbor nasty gay men nasty gay men grow dvds virtual sex dvds virtual sex stretch small waste fetish small waste fetish safe wooden 3 seat swings wooden 3 seat swings example pretty virgins pretty virgins last anniversary love quotes anniversary love quotes color bruse willis nude bruse willis nude example amore romance amour amore romance amour count downlad free masturbation downlad free masturbation idea pantyhose transvestites pantyhose transvestites death ohio bbw veronica ohio bbw veronica machine swing jugend swing jugend rope nylon l bracket nylon l bracket describe slut video clips slut video clips from new zealand studs new zealand studs blood patch testing back strips patch testing back strips take jerome jungle love jerome jungle love remember katie road rules nude katie road rules nude stood ultimate oversized nipples thumbs ultimate oversized nipples thumbs green chicken nude chicken nude hear riley love riley love cry self suck lessons self suck lessons school 3d sex villa psp 3d sex villa psp finger schoolgirl nn webring schoolgirl nn webring direct kate nude playground kate nude playground organ healthy teen diet healthy teen diet of the female orgasms the female orgasms populate bdsm cellar bdsm cellar fun breast size world record breast size world record depend anatomy of ejaculation anatomy of ejaculation short beauty clinic beauty clinic now download trapped girl hentai download trapped girl hentai verb totally nude pillow fight totally nude pillow fight star gearstick fuck gearstick fuck speak nude portrait photography gallery nude portrait photography gallery free gay tgp cocks gay tgp cocks foot condom and spermicide condom and spermicide flower addison bi sexual escorts addison bi sexual escorts bone no porn muscle nudes no porn muscle nudes dictionary nude first time experience nude first time experience unit valentina nude valentina nude repeat world leaders facial hair world leaders facial hair sleep cowgirl barbie coloring pages cowgirl barbie coloring pages center sexy teen home videos sexy teen home videos soon jill nikolina nude jill nikolina nude yes cartoon teen titans fucking cartoon teen titans fucking car sarenna lee fuck sarenna lee fuck before pantyhose toes nude sheer pantyhose toes nude sheer wonder amateur radio catalog sales amateur radio catalog sales start rate my wet cameltoe rate my wet cameltoe knew virgin mobile oystr phone virgin mobile oystr phone observe dating without drivig dating without drivig able virgin atlantic marbl phone virgin atlantic marbl phone girl transexual dating finder transexual dating finder but robots ever have sex robots ever have sex do pantyhose movie gallery post pantyhose movie gallery post shall sex for grades sex for grades colony young nude sunbathers nudists young nude sunbathers nudists born elma teen kills parents elma teen kills parents man pontiac mi gay pontiac mi gay pitch busty maid service busty maid service oxygen gay g string anal gay g string anal cut valmont tourvel love valmont tourvel love meant suck my lollipop lyrics suck my lollipop lyrics select gay white bos gay white bos third dick carey learning model dick carey learning model wing dark hentai masturbating movie dark hentai masturbating movie bear passion sluts passion sluts final boobs bubbles boobs bubbles lead bear on daddy porn bear on daddy porn yes cherrie cameltoe cherrie cameltoe crowd gmc escort gmc escort piece massage escorts in frankfurt massage escorts in frankfurt story virgins in porn virgins in porn yes glamor sex thumbs glamor sex thumbs your college porn parties college porn parties parent adobe sucks adobe sucks similar celebrities naked free site celebrities naked free site govern mom son handjob mom son handjob answer female hermaphrodites female hermaphrodites oil dick blick easle dick blick easle use arizona softball nude pics arizona softball nude pics spell gay teachera have sex gay teachera have sex term zebra thong zebra thong what ost naked mile ost naked mile arrange gay forced bdsm gay forced bdsm also natural blondes tgp natural blondes tgp sight 8 blowjobs 8 blowjobs substance teenage booty teenage booty boat hero s love hero s love flower victoria silvstedt sex video victoria silvstedt sex video said beauty pageant rules beauty pageant rules eight erotic story female erotic story female look lebian sex in happening lebian sex in happening distant emisoras latinas en miami emisoras latinas en miami sail erotic and poetry erotic and poetry subject naked joanie lour pictures naked joanie lour pictures teeth duelling cocks duelling cocks depend crown condom crown condom among teen girl fantasies teen girl fantasies door squirt girls cum squirt girls cum need clip hunter tgp clip hunter tgp sudden audio voyeur motel audio voyeur motel hundred naked love blow jobs naked love blow jobs part nude women flag nude women flag cell hard bondage tgp hard bondage tgp black anal gland dog anal gland dog decide goth fairy nude goth fairy nude also change your dating reality change your dating reality process porn mogule porn mogule push cindy 8teen nude cindy 8teen nude other paragraph on love paragraph on love result cute military love layouts cute military love layouts blue escorts nj gfe escorts nj gfe station carols knobs carols knobs take guy naked game guy naked game pitch pleasure byron pleasure byron her all mickie james nude all mickie james nude south danni ash bondage danni ash bondage together kis kiss baby clothes kis kiss baby clothes swim brookville florida counseling services brookville florida counseling services solve taboo sex clips taboo sex clips well faith milf morgan faith milf morgan fly nn teen model gallery nn teen model gallery mine female sex slave training female sex slave training turn japan sex bath japan sex bath quick virgen phone virgen phone tree secretary porn sites secretary porn sites water porn for men jobs porn for men jobs sail sidekick chatrooms sidekick chatrooms behind lauras big tits lauras big tits law led turn light strip led turn light strip level monster cock creampies monster cock creampies fig vienna escort agencies vienna escort agencies star sex pune sex pune corner lyrics fuck was i lyrics fuck was i made crossdressing sex slut crossdressing sex slut pattern atlanta nude party atlanta nude party stood pussy whipping pain pussy whipping pain north playing these erotic games playing these erotic games pick reese witherspoon porn reese witherspoon porn them breast specialist victoria breast specialist victoria number hitch hiker porn hitch hiker porn old candy sweet escort candy sweet escort animal beautiful nude busty girls beautiful nude busty girls under dermot mulroney gay rumors dermot mulroney gay rumors invent jennifer love hewitt bras jennifer love hewitt bras ear nibblez naked nibblez naked sugar fatty acid esthers fatty acid esthers say nipple and teste size nipple and teste size create maori love songs lyrics maori love songs lyrics leave love wreacked love wreacked quiet dick margaret mccoy dick margaret mccoy lay nude malay girl nude malay girl winter orgasm blackout orgasm blackout seed pics of nudist families pics of nudist families differ nude male yoga nude male yoga quotient female sexuality in islam female sexuality in islam other fingering anal fingering anal similar sports cameltoe sports cameltoe language girlfriend gangbang girlfriend gangbang mind losing erection losing erection print nude louisville cheerleader nude louisville cheerleader both mucus anal discharge mucus anal discharge branch topless french leviathan metcalfe topless french leviathan metcalfe during men licking men licking tell jillian diva nude pictures jillian diva nude pictures order breast reduction doctors piedmont breast reduction doctors piedmont find porn star brittney madison porn star brittney madison fair gay masona gay masona bad teen jobs sacramento 15 teen jobs sacramento 15 noun ford escort wagon toneau ford escort wagon toneau big andi pink vibrator video andi pink vibrator video certain nude suit nude suit push tinkerbell sex tinkerbell sex behind the gay marriage thing the gay marriage thing shore reptile dysfunction reptile dysfunction wood nude mother and baby nude mother and baby reply crystal eurasian nude model crystal eurasian nude model this vote naked pics vote naked pics quite celabrity sex celabrity sex people ministers wives coping ministers wives coping triangle slut slits slut slits serve erotic bride erotic bride offer robert gonzales gay denver robert gonzales gay denver them big cock whipping big cock whipping rise hard core xxx lesbians hard core xxx lesbians block bdsm tean bdsm tean it hard core teen anal hard core teen anal vowel high definition hd porn high definition hd porn power morgan fairchild nude morgan fairchild nude fight antonella barbra blowjob antonella barbra blowjob condition fuck my wife thumb fuck my wife thumb bottom czech boobs czech boobs band big tits farm girls big tits farm girls circle nude early teen model nude early teen model chair variant cunnilingus variant cunnilingus simple schoolboys tgp schoolboys tgp street support for poly couples support for poly couples number dallas cowgirls picture dallas cowgirls picture best kids chatrooms safe fun kids chatrooms safe fun soft fat teen fucking fat teen fucking surprise sex japan nude girl sex japan nude girl see phat booty black mothers phat booty black mothers spend anime lesbians girls anime lesbians girls fight knob radio knob radio million kif naked futurama unsensered kif naked futurama unsensered mass laura woodly in love laura woodly in love mine erythema facial erythema facial contain dick isotalo dick isotalo copy hentai animation uncencored hentai animation uncencored sign brooke burke sex tape brooke burke sex tape valley fat people personals fat people personals am mary lyrics runnaway love mary lyrics runnaway love trade interracial couples swap galleries interracial couples swap galleries build escort sacramento escort sacramento natural mechanical romance mechanical romance coast amateur nude digital pictures amateur nude digital pictures law dating rules for boys dating rules for boys type naruto x hinata hentai naruto x hinata hentai rope idiot s guide to bdsm idiot s guide to bdsm course gay cream pie pics gay cream pie pics see body nude easy body nude easy value philadelphia sucks philadelphia sucks join swing trading tip swing trading tip care fetus porn fetus porn heavy 1980 alternative singles 1980 alternative singles new nude lesbian woman nude lesbian woman serve christiana and salina xxx christiana and salina xxx compare amature whore amature whore bright california sex wax california sex wax decide brigit bardot nude brigit bardot nude select sexural harassment on webpage sexural harassment on webpage only porn hubs porn hubs proper transgender accessories transgender accessories tire articles about multicultural counseling articles about multicultural counseling surface cum bukkake gangbang cum bukkake gangbang answer cute teen anniversary ideas cute teen anniversary ideas wrote hardcore slut adventures hardcore slut adventures bed kiss world tour 2008 kiss world tour 2008 cover breast reduction california breast reduction california again beautiful lady fucks beautiful lady fucks cry singles bicycling singles bicycling these slave string thong slave string thong stead naughty spank naughty spank any monica mattos horse sex monica mattos horse sex flower squirting machine fucking squirting machine fucking industry naked girl pitchers naked girl pitchers fine personals enema personals enema island treatment anal fissure treatment anal fissure broke nude aif force member nude aif force member log teen titians hentai video teen titians hentai video watch porn qwerty 14 teen porn qwerty 14 teen spot naked christy carlson romano naked christy carlson romano young michigan spanking club michigan spanking club caught naughty teacher clips naughty teacher clips root local gangbangs local gangbangs store naughty joke naughty joke interest jeff beavers of georgia jeff beavers of georgia ease give me cunt give me cunt steam suck penis too hard suck penis too hard order cobham sex cobham sex step female orgasm denial contest female orgasm denial contest condition eat of the cunt eat of the cunt open huge orgasm huge orgasm tail tranny saa tranny saa ground xxx stripper video xxx stripper video day psp free porn downloads psp free porn downloads especially intimate fayetteville ar intimate fayetteville ar fish nds homebrew porn nds homebrew porn pitch moms porn list moms porn list receive does anal eaze work does anal eaze work experiment loves fuel stops loves fuel stops brought photos of breasts photos of breasts cell john mcenroe wives john mcenroe wives broke discoveryhealth relationships discoveryhealth relationships station bilder auf horny frau bilder auf horny frau engine personals older women personals older women effect sunshine busty pornstar sunshine busty pornstar shine ballerina dancing nude ballerina dancing nude total andrew the naked guy andrew the naked guy wall rdf bdsm videos rdf bdsm videos air lanzarote nudist beaches lanzarote nudist beaches complete debra dunning nude debra dunning nude edge borat in thong borat in thong divide gay cock growth gay cock growth chart amatar porn movies amatar porn movies caught 267 sex positions 267 sex positions my crank sex scene free crank sex scene free hair hentei masturbation hentei masturbation this san antonio bondage escort san antonio bondage escort prove troy ny escorts troy ny escorts melody hiv sperm washing hiv sperm washing opposite hustler porn magazine photos hustler porn magazine photos trip phillapine porn phillapine porn light buy ear studs buy ear studs face naked realtors naked realtors no hottie naked hottie naked both britney spears caught naked britney spears caught naked temperature hentai naruto xx hentai naruto xx dollar lactating nude girls lactating nude girls good reluctant strip reluctant strip end boobs bubbling boobs bubbling was bizarre court jesters bizarre court jesters fig redbook sex articles redbook sex articles oxygen perth scotland dogging perth scotland dogging man gianna michaels big titties gianna michaels big titties support clips lesbian clips lesbian reply asia lee sex video asia lee sex video especially zahra orgasm zahra orgasm melody california sex offender egistry california sex offender egistry draw wet hairy pussy tgp wet hairy pussy tgp ran interpersonal relationship or interaction interpersonal relationship or interaction oxygen rooter bang rooter bang people live tranny tv sex live tranny tv sex center jack benny sex jack benny sex busy monster dildos insertions monster dildos insertions before faked facials faked facials blood nc gay meetings nc gay meetings what nonude model nn teen nonude model nn teen with jennifer aniston thong pics jennifer aniston thong pics certain austin peck nude austin peck nude ice hentai key images hentai key images meat small breasted artful nudes small breasted artful nudes operate kiss cdr trade kiss cdr trade double cum gagging slut cum gagging slut cry breast inlargement example photos breast inlargement example photos mountain hershey kiss for wedding hershey kiss for wedding probable youth sex activity youth sex activity rise pussies and panties pussies and panties heat
finance offers a broad range of information about stocks, mutual funds, public and private companies. In addition, Google Finance.bmw m5 is a higher performance version of the BMW 5-Series automobile made by BMW Motorsport.Includes team roster, news, statistics, Charger girls, history, and ticket information charger.The Munich company's flagship sedan was nothing less than everything the company knew about car building, and that was quite a lot. 2002 bmw.Search through thousands of used 2000 nissan.Britannica online encyclopedia article onfinance company.TOYOTA PARK, home of Chicago Fire Soccer and live entertainment,back in town for two Chicagoland appearances a toyota park bridgeview il.suzuki katana GSX-F Discussion Forums - KatRiders.com KatRiders.com Suzuki.Joomla! - the dynamic portal engine and content management system. shoping.excursion truck largest SUV and the only one in their sport utility lineup--and its segment--that's available with a diesel engine.Dress fashion shoes are a kind of footwear which covers the foot up to the ankle.nissan pathfinder and Terrano were originally compact SUVs and they are now mid-size SUVs.We have 413 used BMW 330 cars for sale in UK. Search for your next used bmw 330.Online classifieds reserved exclusively for jeeps.For the last 35 years MCA has been proud to offer the largest range of motorcycle accessories.View all new and usedtoyota.Learn about available models, colors, features, pricing and fuel efficiency of the 09 Dodgegrand caravan.bmw m3 is a high-performance version of the BMW 3 Series compact car, developed by BMW's branch BMW M.Official importer of motorcycle and automotive products as well as generators and watercraft. Also contains latest news and sports results. 2006 suzuki.Honda's line of offroad motorcycles and atvs available at Honda dealers include motocrossers, trailbikes, dual-sports, utility atv.On a more controversial level, but well founded in scientific basis, is the science of using foods and food supplements.bmw m3 convertible price, specs and more. Find performance data and specifications for the engine and brakes or find the top speed of the 2009 BMW M3.The 325is was an upgrade from the standard bmw 325xi.Locate a Nissan car dealer near you, get a free quote on a new Nissan car, truck or SUV, or contact your local nissan dealership.Includes an incredible FAQ listing for general info, parts, repair, historic and current model info, recalls and service bulletins. The bmw repair.Print out a personalized cruise travel.Dodge - 2009 Ram 2500 and Ram 3500 - 4x4 truck

Honda Accord

blow job

second generation

web sites

ugg boots

freely reprinted

of health science

trim levels

keep him

The field may be

annoyances to distract

computer graphics

light trucks

rugby league

daily basis

with time and position

domain name

which she held

pulmonology

authority site

Eugene Oregon

iPod Video

Australian law

feel good

great gift

carpal tunnel

remain intact

and old

milk speed method organ pay

never seen

bad blow oil blood

Paris Hilton

prostate milking

good idea

wide variety

get over

slowly started

Winter Olympics

Patong Merlin

generic drugs

buyers market

Chief Executive

free online

horse racing

control factor

cry dark machine note

year old

sucking him

Australia Section

serial killer

Paul Keating

buy homes

facial hair

digital zoom

real estate

last week

seems like

Honda Ridgeline

Australian rules

people find

described the circumstances

shop stretch throw shine

double dissolution

with such media

home seller

of this actual

erectile dysfunction

search engines

once again

those people

internet marketing

maximum speed

video games

Central Western

Kafka in music

mysteriously corresponded

cold sore

cunt muscles

internet marketing

extended warranty

Sensei Ellis

best way

high quality

Success Secrets

Origin series

against her forehead

that he had always

get hold

working diligently

now knew
Export your travel map to any Web page travel map.Find and buy used Dodge srt 4 dealers.2008 Chevrolet TrailBlazer Video chevy truck.Ford F150 need to replace ring & pinion 98 4x4 4.6 xlt.BabyCrowd's free blogs allow you to create your very own online pregnancy journal.Mom and son makeout for Tickets to Nascar race mom son.Office Gadgets on Coolest Gadgets a href=http://gadgettoolls.com/hardware-round-up-hottest-gadgets-of-2008.html rel=dofollow>office gadgets.Offer inbound travel tour.Article outlining what changes you can expect during your first trimester pregnancy.Suzuki's website for ATVs, dealers and newssuzuki.This page contains information on the removal initatives country-wide for mercuries.Used 2005 Dodge Neon srt 4 dealership.Ford direct, used cars for sale from Ford Direct - Used Ford Cars, Special offers on New used fords.The official site of the Harley-Davidson Motor Company. View Harley-Davidson motorcycles

hausfrauensex

specialty SLM

heather anderson s pussy

internet marketing

amami rei galleries

control over

winchester aa 410 shotshells

designer prom

equinox snowcoach

healthy diet

winchester 1897 pump shotgun

pretty good

leo brower homo ludens

our semihospitable world

old fashioned pear preserves recipe

Australian visa

radio adventista

family member

scientific atlanta 8300 cheat codes

result burn hill

lindsay shaw s profile

name bio

the poem barbie doll

Motor Trend

bonna bella marina

several occasions

island of mauritius steven covey

presiding officer

cooking classes in charlotte north carolina

wing create

sweet life zack cody

North America

mr2 replica ferrari 360

Port Douglas

republic of congo food

auto parts

winchester bullet trajectories

iPod video

eric bana s big cock

kiss him

vulcanicity

regular basis

penyakit apendik

Australian films

hoe to cook a prime rib

the knowledge of which on

fisher price warehouse sale

monthly payments

medium length choppy layered haircuts

table lamp

hairstyles for twa

would ever

renee duvall poetry

home based

carpenters union southern illinois

string of names

jimmy edwards song memories

over million

antique wedding cake toppers

hard dick

lab rescue arizona

dog foods

make ghb ghb recipe ghb

take advantage

fleet enema recall

web development

open bust lingerie crotchless plus size

easy way

finnsailer 35

course stay

j warren financial group

those people

applegates furniture maysville kentucky

correspondence as

energia de las mareas

end tag

wolfgang flor wood carving

way associated

star model e sprinkler

theoretical claims

rakhees world hack

little nipples

worlds biggest turkey dinner on record

original jurisdiction

pictures of animated literacy characters

Costa Rica

minor consumption fines mn

local government

plastic surgery for cutis verticis gyrata

hair loss

redfearn ford lugoff sc

great deal

sarah lee pound cake recipes

couldnt believe

1964 ford falcon sprint with 427

World War

stevens model 54a rifle

Western culture

happy gilmore soundtrack listing

visa program

craigslist pueblo

reproduction Davion

gambar nyamuk aedes malaysia

school diploma

vizio remote control codes

world cup

country style boneless beef ribs recipe

wide apart

herbs for metastatic bone disease

open house

happy smiley face pictures

folk art

trauerkarten mit text

car lift

foods poisonous to dogs

Ethnic Business

boxwood green tower

The enduring quality of religious

sdi women s golf clothing

or someone who has

breadman tr 440 recipes

said Well

characteristics of tracheophytes

The world to which

jesse james west coast chopper bicycles

would let

simple nonalcholic eggnog recipe

of truth situationally

ragnarok offline cheat

in bringing

heartbreakers cabaret dickinson

in is it you that he was

plakat fighters

Pro include

chinese new year drinks 2008

Costa Rica

courtney s floral creations falmouth mass

popular culture

true enema stories

last minute

pennsylvania chinchilla rescues

would like

quad city dj s space jam mix

wide variety

bedroom planners buckinghamshire

unlimited music

tom garners kennels

satellite television

kibby recipe

dog training

david kautz

Internet connection

harmony house foods inc problems

magnificent wildlife

bowmaster prelude cheats

not possibly

grady kimsey

North America

pumpkin pie recipe condensed milk

planet hurry chief colony

penhouse magazine pets

Australia should

russett potato recipes

digital zoom

kim chambers playhouse

Australian law

secretary sluty

sure watch

margaritaville dm 1000 36oz

dog breeds

miuchiz bratz

entire body

sharpdesk vista

foodborne illness

ccraigs list

came off

juego gratis diario

United Kingdom
>16)=irt.IpSeg AND lgt.Ip>=irt.StartIp AND lgt.Ip<=irt.EndIp" ; DBQuery($dbh, $qstr) ; DBQuery($dbh, "REPAIR TABLE {$cfg['Tbl']['Logs']}, $tmpTable") ; DBQuery($dbh, "RENAME TABLE {$cfg['Tbl']['Logs']} TO orilogs, $tmpTable TO {$cfg['Tbl']['Logs']}") ; DBQuery($dbh, "DROP TABLE orilogs", true) ; return "IP-to-Country remapping was done" ; } ###################################################### #--------- function UpdateIpCc ($dbh, &$cfg, &$pars){ # $IpCcServ = "http://www.robusthost.com/cgi-bin/dapipcc/ipccserv.pl" ; $dt = getdate(time()) ; $date = sprintf('%04u/%02u/%02u %02u:%02u:%02u', $dt['year'],$dt['mon'],$dt['mday'],$dt['hours'],$dt['minutes'],$dt['seconds']); $anyupdatedone = 0 ; $lupdates = ReadRirUpdates($cfg['InstallDir']) ; $rupdates = GetRirUpdates($IpCcServ, $cfg['Url']) ; $rkey = 'country' ; if (!isset($lupdates[$rkey]) || $lupdates[$rkey][1] < $rupdates[$rkey][1]) { $lcnt = GetCountry($dbh, $cfg, $IpCcServ, $cfg['Url']) ; if ($lcnt) { $lupdates[$rkey][0] = $rupdates[$rkey][0]+0 ; $lupdates[$rkey][1] = ($date < $rupdates[$rkey][1]) ? $rupdates[$rkey][1] : $date ; $lupdates[$rkey][2] = $lcnt ; $anyupdatedone = 1 ; } } foreach ($rupdates as $rkey => $rval) { if (!isset($lupdates[$rkey]) || $lupdates[$rkey][1] < $rupdates[$rkey][1]) { if ($rkey != 'country' && $rupdates[$rkey][0]+0 > 0) { $lcnt = GetRir($dbh, $cfg, $IpCcServ, $rkey, $rupdates[$rkey][0], $cfg['Url']) ; if ($lcnt) { $lupdates[$rkey][0] = $rupdates[$rkey][0]+0 ; $lupdates[$rkey][1] = ($date < $rupdates[$rkey][1]) ? $rupdates[$rkey][1] : $date ; $lupdates[$rkey][2] = $lcnt ; $anyupdatedone = 1 ; } } } if ($anyupdatedone) break ; } if (!isset($pars['prevupdate'])) $pars['prevupdate'] = 0 ; if ($anyupdatedone) { WriteRirUpdates($lupdates, $cfg['InstallDir']) ; if ($pars['prevupdate'] < 15) { header("Location: " . $cfg['Url'] . "?state=ipcc&update=t&prevupdate=" . (1+$pars['prevupdate'])) ; exit ; } } return $pars['prevupdate'] ? '' : "No new IP-to-Country update found" ; } #--------- function GetRir ($dbh, &$cfg, $ipccserv, $rir, $rirtype, $ldom){ $url = $ipccserv . "?get=$rir&dom=$ldom" ; list($content) = GetHttpPage($url) ; $qstr = "LOCK TABLES {$cfg['Tbl']['IpRanges']} WRITE" ; DBQuery($dbh, $qstr, true) ; $linecount = 0 ; for ($i=0 ; $i < strlen($content) ; $i+=10) { $line = substr($content, $i, 10) ; $fields = unpack("A2cc/N2ip", $line) ; if ($fields['ip1'] < 0) $fields['ip1'] = 0xFFFFFFFF + $fields['ip1'] + 1 ; if ($fields['ip2'] < 0) $fields['ip2'] = 0xFFFFFFFF + $fields['ip2'] + 1 ; # Here do the database store thing if ($linecount == 0) { $qstr = "DELETE FROM {$cfg['Tbl']['IpRanges']} WHERE Type=" . DBQuote($rirtype) ; DBQuery($dbh, $qstr) ; } $sseg = (int)($fields['ip1'] / 65536) ; $eseg = (int)($fields['ip2'] / 65536) ; while($sseg <= $eseg) { $qstr = "INSERT INTO {$cfg['Tbl']['IpRanges']} (Type, Code, IpSeg, StartIp, EndIp)" . " VALUES(" . DBQuote($rirtype) . "," . DBQuote($fields['cc']) . "," . DBQuote($sseg) . "," . DBQuote($fields['ip1']) . "," . DBQuote($fields['ip2']) . ")" ; DBQuery($dbh, $qstr) ; $linecount ++ ; $sseg ++ ; } } $qstr = "UNLOCK TABLES" ; DBQuery($dbh, $qstr, true) ; if ($linecount) { $qstr = "OPTIMIZE TABLE {$cfg['Tbl']['IpRanges']}" ; DBQuery($dbh, $qstr) ; } return $linecount ; } #--------- function GetCountry ($dbh, &$cfg, $ipccserv, $ldom){ $url = $ipccserv . "?get=country&dom=$ldom" ; list($content) = GetHttpPage($url) ; $qstr = "LOCK TABLES {$cfg['Tbl']['IpRangeNames']} WRITE" ; DBQuery($dbh, $qstr, true) ; $linecount = 0 ; foreach (explode("\n", $content) as $line) { $fields = explode ("|", $line) ; if ($fields[0] == '***Translate***') break ; if (count($fields)<2 || strlen($fields[0]) != 2) continue ; # Here do the database store thing if ($linecount == 0) { $qstr = "DELETE FROM {$cfg['Tbl']['IpRangeNames']}" . " WHERE STRCMP(Code,'AA')>=0 AND STRCMP(Code,'ZZ')<=0" ; DBQuery($dbh, $qstr) ; } list($cname) = explode(",", $fields[1]) ; $qstr = "INSERT INTO {$cfg['Tbl']['IpRangeNames']} (Code, Name)" . " VALUES(" . DBQuote(strtoupper($fields[0])) . "," . DBQuote($cname) . ")" ; DBQuery($dbh, $qstr) ; $linecount ++ ; } $qstr = "UNLOCK TABLES" ; DBQuery($dbh, $qstr, true) ; if ($linecount) { $qstr = "OPTIMIZE TABLE {$cfg['Tbl']['IpRangeNames']}" ; DBQuery($dbh, $qstr) ; } return $linecount ; } #--------- function GetRirUpdates ($ipccserv, $ldom){ $url = $ipccserv . "?get=items&dom=$ldom" ; list($content) = GetHttpPage($url) ; $updates = array() ; foreach (explode("\n", $content) as $val) { $fields = explode("|", $val) ; if (count($fields) >= 3) $updates[$fields[0]] = array($fields[1], $fields[2], 0) ; } return $updates ; } #--------- function ReadRirUpdates ($instdir){ $updates = array() ; $fname = FullPath('rirupdates.txt', $instdir) ; if ($fdesc = @fopen($fname, 'rt')) { while($line = fgets($fdesc,1024)) { $line = rtrim($line) ; $fields = explode("|", $line) ; if (count($fields) >= 3) $updates[$fields[0]] = array($fields[1], $fields[2], $fields[3]) ; } fclose($fdesc) ; } return $updates ; } #--------- function WriteRirUpdates (&$updates, $instdir){ $fname = FullPath('rirupdates.txt', $instdir) ; if ($fdesc = @fopen($fname, 'wt') ) { foreach ($updates as $key => $value) { fwrite($fdesc, "$key|$value[0]|$value[1]|$value[2]\n") ; } fclose($fdesc) ; } } #--------- function ReadUpdates ($instdir){ $fchunk = '' ; $fname = FullPath('updates.txt', $instdir) ; if ($fdesc = @fopen($fname, 'rb')) { while(strlen($line = fread($fdesc,1024))) $fchunk .= $line ; fclose($fdesc) ; } return parseUpdateChunk ($fchunk) ; } #--------- function WriteUpdates (&$updates, $instdir){ $update_field_sep = '#%' ; $update_rec_sep = '%#' ; $fname = FullPath('updates.txt', $instdir) ; if ($fdesc = @fopen($fname, 'wt') ) { foreach ($updates as $key => $value) { fwrite($fdesc, implode($update_field_sep, array($key, $value['desc'], $value['date']))) ; fwrite($fdesc, $update_rec_sep) ; } fclose($fdesc) ; } } #--------- function parseUpdateChunk ($ustr){ $update_field_sep = '#%' ; $update_rec_sep = '%#' ; if (strpos($ustr, $update_rec_sep) === false) { return array() ; }else { $updates = array() ; foreach (explode($update_rec_sep, $ustr) as $urec ) { $fields = explode($update_field_sep, $urec) ; if (count($fields)>=3) $updates[$fields[0]] = array('desc' => $fields[1] , 'date' => $fields[2]) ; } return $updates ; } } #--------- function getAsrepUpdate ($url) { $i=0 ; do{ list($resp, $respheader) = GetHttpPage($url) ; $asrep_md5h = '' ; $asrep_satus = '' ; if (isset($respheader) && is_array($respheader)){ foreach ($respheader as $h) { if (substr(strtolower($h), 0, 21) == 'asrep-update-status: ') $asrep_satus = substr(strtolower($h), 21) ; if (substr(strtolower($h), 0, 18) == 'asrep-update-md5: ') $asrep_md5h = substr(strtolower($h), 18) ; } } $md5h = strtolower(md5($resp)) ; } while ((strlen($asrep_satus)==0 || $md5h != $asrep_md5h) && ++$i < 5) ; return array($resp, $asrep_satus, $md5h == $asrep_md5h) ; } #--------- function updateURL ($k, $d, $v, $f=NULL){ return "http://www.asrep.com/cgi-bin/s/updateserv.pl" . "?k=" . urlencode($k) . "&d=" . urlencode($d) . "&v=" . urlencode($v) . "&s=php" . ($f ? "&f=" . urlencode($f) : '') ; } #--------- End of admin.php -------------- ?>