ChangeSet ID: 30473 CVSROOT: /opt/cvs-commit Module name: tools Changes by: jnewman@winehq.org 2006/12/11 09:48:40
Modified files: . : download.inc.php
Log message: Jonathan Ernst jonathan@ernstfamily.ch avoid infinite loop in Wine downloader scripts
Patch: http://cvs.winehq.org/patch.py?id=30473
Old revision New revision Changes Path 1.1 1.2 +24 -11 tools/download.inc.php
Index: tools/download.inc.php diff -u -p tools/download.inc.php:1.1 tools/download.inc.php:1.2 --- tools/download.inc.php:1.1 11 Dec 2006 15:48:40 -0000 +++ tools/download.inc.php 11 Dec 2006 15:48:40 -0000 @@ -31,17 +31,20 @@ $aList += array("http://switch.dl.source );
-function is_downloadable($sUrl){ +function is_downloadable($sUrl) +{ global $iFileSize; $parse = parse_url($sUrl); // open a socket connection - if($fp = @fsockopen($parse['host'], 80, $errno, $errstr, 10)){ + if($fp = @fsockopen($parse['host'], 80, $errno, $errstr, 10)) + { // set request $get = "HEAD ".$parse['path']." HTTP/1.1\r\n". "Host: ".$parse['host']."\r\n". "Connection: close\r\n\r\n"; fputs($fp, $get); - while(!feof($fp)){ + while(!feof($fp)) + { // get ONLY header informations $header .= fgets($fp, 128); } @@ -55,20 +58,30 @@ function is_downloadable($sUrl){ }
-if($_REQUEST['action']=="showlist") { +if($_REQUEST['action']=="showlist") +{ echo "<h2>List of mirrors available for file ".$sFileName." (".$iFileSize." bytes)</h2>"; - foreach($aList as $sLocation) { + foreach($aList as $sLocation) + { echo $sLocation.": "; - if(is_downloadable($sLocation.$sFileName)) { + if(is_downloadable($sLocation.$sFileName)) echo "<font color="green">online</font>"; - } else { + else echo "<font color="red">offline</font>"; - } echo "\n<br />"; + flush(); } -} else { - while(!is_downloadable($sUrl)) { - $iRand = rand(0, (sizeof($aList)-1)); +} else +{ + $iRand = rand(0, (sizeof($aList)-1)); + $sUrl = $aList[$iRand].$sFileName; + // we continue as long as we didn't find a working mirror and we didn't tried all the mirrors + while(!is_downloadable($sUrl) && sizeof($aAlreadyTried)<sizeof($aList)) + { + $aAlreadyTried[$iRand] = true; + // we loop until we take a random mirror that we didn't already tried ; of course if we have already tried all mirrors we stop + while($aAlreadyTried[$iRand] == true && sizeof($aAlreadyTried)<sizeof($aList)) + $iRand = rand(0, (sizeof($aList)-1)); $sUrl = $aList[$iRand].$sFileName; } header("Location: ".$sUrl);