/********************************************************************** Copyright (c) 2000, 2002 IBM Corp. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Common Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/cpl-v10.html Contributors: IBM Corporation - Initial implementation Vicente Fernando - www.alfersoft.com.ar Christian Perkonig - remote Debug **********************************************************************/ package net.sourceforge.phpdt.internal.launching; import java.util.Iterator; import org.eclipse.core.resources.IProject; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.model.IProcess; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import net.sourceforge.phpdt.internal.debug.core.model.PHPDebugTarget; import net.sourceforge.phpdt.internal.debug.core.Environment; import net.sourceforge.phpdt.internal.debug.core.PHPDBGProxy; import net.sourceforge.phpeclipse.resourcesview.PHPProject; public class DebuggerRunner extends InterpreterRunner { public IProcess run(InterpreterRunnerConfiguration configuration, ILaunch launch) { String[] env; String name, value; PHPDBGProxy newPHPDBGProxy= new PHPDBGProxy(configuration.useRemoteDebugger(), configuration.getRemoteSourcePath()); int pos; IProcess process =null; PHPDebugTarget debugTarget = new PHPDebugTarget(launch, process); newPHPDBGProxy.setDebugTarget(debugTarget); newPHPDBGProxy.start(); if (configuration.useRemoteDebugger()) { // listener for remote debuger is started } else { env= setEnvironmentVariables(newPHPDBGProxy.getPort(), configuration.getAbsoluteFileName(), configuration.getInterpreter().getCommand()); for(int i= 0; i < env.length; i++) { pos= env[i].indexOf("="); if(pos > -1) { name= env[i].substring(0, pos); value= env[i].substring(pos + 1); } else { name= env[i]; value= ""; } Environment.setenv(name, value); } // now enviroment settings is made with Environment class // because if new parameters are passed by array, doesn't inherit system vars process = super.run(configuration, launch, null); debugTarget.setProcess(process); } launch.addDebugTarget(debugTarget); return process; } protected String[] setEnvironmentVariables(int listenPort, String AbsoluteFileName, String interpreter) { IPath FilePath= new Path(AbsoluteFileName); String OSFilePath= FilePath.toOSString(); String DBGSessID; String env[]= new String[18]; DBGSessID = "DBGSESSID=0753972710000018@clienthost:" + listenPort; env[0]= "HTTP_COOKIE=" + DBGSessID; env[1]= "REDIRECT_QUERY_STRING="; env[2]= "REDIRECT_STATUS=200"; env[3]= "REDIRECT_URL=" + OSFilePath; env[4]= "SERVER_SOFTWARE=DBG / 2.1"; env[5]= "SERVER_NAME=localhost"; env[6]= "SERVER_ADDR=127.0.0.1"; env[7]= "SERVER_PORT=80"; env[8]= "REMOTE_ADDR=127.0.0.1"; env[9]= "SCRIPT_FILENAME=" + interpreter; env[10]= "GATEWAY_INTERFACE=CGI / 1.1"; env[11]= "SERVER_PROTOCOL=HTTP / 1.1"; env[12]= "REQUEST_METHOD=GET"; env[13]= "QUERY_STRING="; env[14]= "REQUEST_URI=" + OSFilePath; env[15]= "PATH_INFO=" + OSFilePath; env[16]= "PATH_TRANSLATED=" + OSFilePath; env[17]= "SystemRoot=" + Environment.getenv("SystemRoot"); return env; } protected String getDebugCommandLineArgument() { return ""; } protected String renderLoadPath(InterpreterRunnerConfiguration configuration) { StringBuffer loadPath = new StringBuffer(); PHPProject project = configuration.getProject(); addToLoadPath(loadPath, project.getProject()); Iterator referencedProjects = project.getReferencedProjects().iterator(); while (referencedProjects.hasNext()) addToLoadPath(loadPath, (IProject) referencedProjects.next()); return loadPath.toString(); } }