<?php  																														require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	$App 	= new App();	$Nav	= new Nav();	$Menu 	= new Menu();		include("_projectCommon.php");    # All on the same line to unclutter the user's desktop'
/*******************************************************************************
 * Copyright (c) 2010 Eclipse Foundation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Denis Roy (Eclipse Foundation) - initial API and implementation
 *******************************************************************************/


	header("Cache-control: no-cache");

	require_once "/home/data/httpd/eclipse-php-classes/system/dbconnection.class.php";
	require_once "/home/data/httpd/eclipse-php-classes/system/dbconnection_rw.class.php";
	
	$_type 	= $App->getHTTPParameter("type");
	$_debug	= $App->getHTTPParameter("debug");
	$_file 	= $App->getHTTPParameter("file");
	
	if($_debug == 1) {
		 error_reporting(E_ALL); 
 		ini_set("display_errors", true);
	}

	# make sure some incoming params are sane
	if($_type != "md5" && $_type != "sha1") {
		$_type 	= "sha1";
	}
	# strip potentially bad characters from file
	$_file = str_replace("\%", "", $_file);
	$_file = str_replace("../", "", $_file);
	$_file = str_replace("'", "", $_file);
	
	$filename_fileonly 	= substr($_file, strrpos($_file, "/") + 1);  # filename portion only


	# Connect to databases
	# dbc is a read-only database (good for slave servers)
	$dbc		= new DBConnection();
	$dbh 		= $dbc->connect();
	$app = new App();

	if($_file != "") {
		# locate file on download.eclipse.org to ensure it's valid
		$file_id 	= 0;
		$filetime 	= 0;
		$md5sum		= 0;
		$sha1sum	= 0;
		
	
		# q1: get file info from slave
		$sql = "SELECT IDX.file_id, IDX.timestamp_disk, IF(IDX.md5sum = '0', '', IDX.md5sum) AS md5sum, IF(IDX.sha1sum = '0', '', IDX.sha1sum) AS sha1sum FROM download_file_index AS IDX WHERE IDX.file_name = '$_file'";
		if($_debug == 1) {
				echo $sql . "<br />";
		}
		# Get the file_id from the slave, but if the file_id is 0, then re-check the master just in case
		$rs = mysql_query($sql, $dbh);

		if($myrow = mysql_fetch_assoc($rs)) {
			$file_id 	= $myrow['file_id'];
			$filetime 	= $myrow['timestamp_disk'];
			$md5sum		= $myrow['md5sum'];
			$sha1sum	= $myrow['sha1sum'];
		}
		
		if(($md5sum == "" || $sha1sum == "") && $file_id > 0) {
			# compute immediately
			$md5sum 	= md5_file($App->getDownloadBasePath() . $_file);
			$sha1sum 	= sha1_file($App->getDownloadBasePath() . $_file);
			
			if(!$md5sum || !$sha1sum) {
				$md5sum 	= md5_file("/home/data2/httpd/archive.eclipse.org" . $_file);
				$sha1sum 	= sha1_file("/home/data2/httpd/archive.eclipse.org" . $_file);
			}
			
			if($md5sum && $sha1sum) {
				$dbc_RW		= new DBConnectionRW();
				$dbh_RW 	= $dbc_RW->connect();
				
				$sql = "UPDATE download_file_index SET md5sum = '$md5sum', sha1sum = '$sha1sum' WHERE file_id = " . $file_id;
				mysql_query($sql, $dbh_RW);
				if($_debug == 1) {
						echo $sql . "<br />";
				}
			}
			else {
				echo "Unable to retrieve or compute sums for " . $_file;
			}
				
		}
		
		header("Content-type: text/plain");
		if($_type == "md5") {
			echo $md5sum . "  " . $filename_fileonly;
		}
		if($_type == "sha1") {
			echo $sha1sum . "  " . $filename_fileonly;
		}
	}


	$dbc->disconnect();  # disconnects all pending DB connections
	$rs 	= null;
	$dbh_RW	= null;
	$dbc_RW = null;
	$dbh	= null;
	$dbc 	= null;	
?>