This commit was generated by cvs2svn to compensate for changes in r488,
authorcperkonig <cperkonig>
Wed, 11 Feb 2004 13:51:05 +0000 (13:51 +0000)
committercperkonig <cperkonig>
Wed, 11 Feb 2004 13:51:05 +0000 (13:51 +0000)
which included commits to RCS files with non-trunk default branches.

31 files changed:
net.sourceforge.phpeclipse.debug.core/.#.classpath [new file with mode: 0644]
net.sourceforge.phpeclipse.debug.core/.#.classpath.1.3 [new file with mode: 0644]
net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/debug/core/PHPDebugModel.class [new file with mode: 0644]
net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/.#PHPDBGInterface.java.1.3 [new file with mode: 0644]
net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/.#PHPDBGProxy.java.1.3 [new file with mode: 0644]
net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/Environment.class [new file with mode: 0644]
net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/PHPDBGBase.class [new file with mode: 0644]
net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/PHPDBGFrame.class [new file with mode: 0644]
net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/PHPDBGInterface.class [new file with mode: 0644]
net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/PHPDBGMod.class [new file with mode: 0644]
net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/PHPDBGPacket.class [new file with mode: 0644]
net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/PHPDBGProxy$PHPLoop.class [new file with mode: 0644]
net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/PHPDBGProxy.class [new file with mode: 0644]
net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/PHPDebugCorePlugin.class [new file with mode: 0644]
net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/SocketUtil.class [new file with mode: 0644]
net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/breakpoints/PHPBreakpoint.class [new file with mode: 0644]
net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/breakpoints/PHPLineBreakpoint$1.class [new file with mode: 0644]
net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/breakpoints/PHPLineBreakpoint.class [new file with mode: 0644]
net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/model/IPHPDebugTarget.class [new file with mode: 0644]
net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/model/PHPDebugTarget.class [new file with mode: 0644]
net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/model/PHPExpression.class [new file with mode: 0644]
net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/model/PHPStackFrame.class [new file with mode: 0644]
net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/model/PHPThread.class [new file with mode: 0644]
net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/model/PHPValue.class [new file with mode: 0644]
net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/model/PHPVariable.class [new file with mode: 0644]
net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/net_sourceforge_phpdt_internal_debug_core_Environment.c [new file with mode: 0644]
net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/net_sourceforge_phpdt_internal_debug_core_Environment.h [new file with mode: 0644]
net.sourceforge.phpeclipse.debug.core/core.jar [new file with mode: 0644]
net.sourceforge.phpeclipse.debug.core/src/net/sourceforge/phpdt/internal/debug/core/.#PHPDBGInterface.java.1.3 [new file with mode: 0644]
net.sourceforge.phpeclipse.debug.core/src/net/sourceforge/phpdt/internal/debug/core/.#PHPDBGProxy.java.1.3 [new file with mode: 0644]
net.sourceforge.phpeclipse.debug.core/temp.folder/core.jar.bin.log [new file with mode: 0644]

diff --git a/net.sourceforge.phpeclipse.debug.core/.#.classpath b/net.sourceforge.phpeclipse.debug.core/.#.classpath
new file mode 100644 (file)
index 0000000..7068fd9
--- /dev/null
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+    <classpathentry kind="src" path="src/"/>
+    <classpathentry kind="var"
+        path="ECLIPSE_HOME/plugins/org.eclipse.ui_2.1.1/ui.jar" sourcepath="ORG_ECLIPSE_PLATFORM_SOURCE_SRC/org.eclipse.ui_2.1.1/uisrc.zip"/>
+    <classpathentry kind="var"
+        path="ECLIPSE_HOME/plugins/org.eclipse.swt.win32_2.1.3/ws/win32/swt.jar" sourcepath="ORG_ECLIPSE_PLATFORM_WIN32_SOURCE_SRC/org.eclipse.swt.win32_2.1.3/ws/win32/swtsrc.zip"/>
+    <classpathentry kind="var"
+        path="ECLIPSE_HOME/plugins/org.eclipse.text_2.1.0/text.jar" sourcepath="ORG_ECLIPSE_PLATFORM_SOURCE_SRC/org.eclipse.text_2.1.0/textsrc.zip"/>
+    <classpathentry kind="var"
+        path="ECLIPSE_HOME/plugins/org.eclipse.jface_2.1.1/jface.jar" sourcepath="ORG_ECLIPSE_PLATFORM_SOURCE_SRC/org.eclipse.jface_2.1.1/jfacesrc.zip"/>
+    <classpathentry kind="var"
+        path="ECLIPSE_HOME/plugins/org.eclipse.jface.text_2.1.0/jfacetext.jar" sourcepath="ORG_ECLIPSE_PLATFORM_SOURCE_SRC/org.eclipse.jface.text_2.1.0/jfacetextsrc.zip"/>
+    <classpathentry kind="var"
+        path="ECLIPSE_HOME/plugins/org.eclipse.ui.views_2.1.0/views.jar" sourcepath="ORG_ECLIPSE_PLATFORM_SOURCE_SRC/org.eclipse.ui.views_2.1.0/viewssrc.zip"/>
+    <classpathentry kind="var"
+        path="ECLIPSE_HOME/plugins/org.eclipse.ui.workbench_2.1.1/workbench.jar" sourcepath="ORG_ECLIPSE_PLATFORM_SOURCE_SRC/org.eclipse.ui.workbench_2.1.1/workbenchsrc.zip"/>
+    <classpathentry kind="var"
+        path="ECLIPSE_HOME/plugins/org.eclipse.ui.win32_2.1.0/workbenchwin32.jar" sourcepath="ORG_ECLIPSE_PLATFORM_WIN32_SOURCE_SRC/org.eclipse.ui.win32_2.1.0/workbenchwin32src.zip"/>
+    <classpathentry kind="var"
+        path="ECLIPSE_HOME/plugins/org.eclipse.ui.workbench.texteditor_2.1.0/texteditor.jar" sourcepath="ORG_ECLIPSE_PLATFORM_SOURCE_SRC/org.eclipse.ui.workbench.texteditor_2.1.0/texteditorsrc.zip"/>
+    <classpathentry kind="var"
+        path="ECLIPSE_HOME/plugins/org.eclipse.ui.editors_2.1.0/editors.jar" sourcepath="ORG_ECLIPSE_PLATFORM_SOURCE_SRC/org.eclipse.ui.editors_2.1.0/editorssrc.zip"/>
+    <classpathentry kind="var"
+        path="ECLIPSE_HOME/plugins/org.eclipse.core.runtime_2.1.1/runtime.jar" sourcepath="ORG_ECLIPSE_PLATFORM_SOURCE_SRC/org.eclipse.core.runtime_2.1.1/runtimesrc.zip"/>
+    <classpathentry kind="var"
+        path="ECLIPSE_HOME/plugins/org.eclipse.core.resources_2.1.1/resources.jar" sourcepath="ORG_ECLIPSE_PLATFORM_SOURCE_SRC/org.eclipse.core.resources_2.1.1/resourcessrc.zip"/>
+    <classpathentry kind="var"
+        path="ECLIPSE_HOME/plugins/org.eclipse.debug.core_2.1.2/dtcore.jar" sourcepath="ORG_ECLIPSE_PLATFORM_SOURCE_SRC/org.eclipse.debug.core_2.1.2/dtcoresrc.zip"/>
+    <classpathentry kind="var"
+        path="ECLIPSE_HOME/plugins/org.eclipse.debug.ui_2.1.2.1/dtui.jar" sourcepath="ORG_ECLIPSE_PLATFORM_SOURCE_SRC/org.eclipse.debug.ui_2.1.2.1/dtuisrc.zip"/>
+    <classpathentry kind="var"
+        path="ECLIPSE_HOME/plugins/org.junit_3.8.1/junit.jar" sourcepath="ORG_ECLIPSE_JDT_SOURCE_SRC/org.junit_3.8.1/junitsrc.zip"/>
+    <classpathentry kind="src" path="/net.sourceforge.phpeclipse"/>
+    <classpathentry kind="var"
+        path="ECLIPSE_HOME/plugins/org.eclipse.core.boot_2.1.3/boot.jar" sourcepath="ORG_ECLIPSE_PLATFORM_SOURCE_SRC/org.eclipse.core.boot_2.1.3/bootsrc.zip"/>
+    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+    <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/net.sourceforge.phpeclipse.debug.core/.#.classpath.1.3 b/net.sourceforge.phpeclipse.debug.core/.#.classpath.1.3
new file mode 100644 (file)
index 0000000..c5cfc92
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+    <classpathentry kind="src" path="src/"/>
+    <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+    <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/debug/core/PHPDebugModel.class b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/debug/core/PHPDebugModel.class
new file mode 100644 (file)
index 0000000..4dd2c39
Binary files /dev/null and b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/debug/core/PHPDebugModel.class differ
diff --git a/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/.#PHPDBGInterface.java.1.3 b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/.#PHPDBGInterface.java.1.3
new file mode 100644 (file)
index 0000000..266460b
--- /dev/null
@@ -0,0 +1,800 @@
+/**********************************************************************
+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:
+       Vicente Fernando - www.alfersoft.com.ar - Initial implementation
+       Christian Perkonig - remote debug
+**********************************************************************/
+package net.sourceforge.phpdt.internal.debug.core;
+
+import java.io.IOException;
+import java.io.BufferedReader;
+import java.io.OutputStream;
+import java.util.Vector;
+import java.lang.System;
+import org.eclipse.debug.core.DebugException;
+import net.sourceforge.phpdt.internal.debug.core.model.PHPStackFrame;
+import net.sourceforge.phpdt.internal.debug.core.model.PHPVariable;
+import net.sourceforge.phpdt.internal.debug.core.model.PHPValue;
+import net.sourceforge.phpdt.internal.debug.core.PHPDBGMod;
+
+public class PHPDBGInterface {
+
+       // Public
+       public boolean sessionEnded= false;
+       public int sessType= -1;        
+       public int BPUnderHit= 0;
+       public String sessID= new String();
+       
+       // Private
+       private int[] LastBPRead= new int[10];
+       private Vector DBGBPList= new Vector();
+       private PHPStackFrame[] DBGStackList;
+       private PHPVariable[] DBGVariableList;
+       private Vector DBGMods= new Vector();
+       private Vector DBGVars= new Vector();
+       private BufferedReader in;
+       private OutputStream os;
+       private boolean shouldStop= false, isRef= false, hasChildren= false, isObject= false;
+       private String evalRet= new String("");
+       private String serGlobals= new String("");
+       private String typeRead= new String("");
+       private String className= new String("");
+       private int finalPos=0, refCounter=0, rawCounter=1000;
+       private PHPDBGProxy proxy= null;
+       private int lastCmd=-1;
+       private int sid=0;
+        
+       public PHPDBGInterface(BufferedReader in, OutputStream os, PHPDBGProxy proxy) {
+               DBGBPList.clear();
+               this.in= in;
+               this.os= os;
+               this.proxy= proxy;
+       }
+
+       public int addBreakpoint(String mod_name, int line) throws IOException {
+               return setBreakpoint(mod_name, "", line, PHPDBGBase.BPS_ENABLED + PHPDBGBase.BPS_UNRESOLVED, 0, 0, 0, 0, 0);
+       }
+
+       public void removeBreakpoint(String mod_name, int line, int bpNo) throws IOException {
+               setBreakpoint(mod_name, "", line, PHPDBGBase.BPS_DISABLED, 0, 0, 0, bpNo, 0);
+       }
+
+       public void requestDBGVersion() throws IOException {
+               PHPDBGPacket DBGPacket= new PHPDBGPacket(PHPDBGBase.DBGA_REQUEST);
+               PHPDBGFrame DBGFrame= new PHPDBGFrame(PHPDBGBase.FRAME_VER);
+               
+               DBGPacket.addFrame(DBGFrame);
+
+               if(proxy.getSocket().isClosed()) return;
+               DBGPacket.sendPacket(os);
+       }
+
+       public void getSourceTree() throws IOException {
+               PHPDBGPacket DBGPacket= new PHPDBGPacket(PHPDBGBase.DBGA_REQUEST);
+               PHPDBGFrame DBGFrame= new PHPDBGFrame(PHPDBGBase.FRAME_SRC_TREE);
+               
+               DBGPacket.addFrame(DBGFrame);
+               
+               if(proxy.getSocket().isClosed()) return;
+               DBGPacket.sendPacket(os);
+
+               // Wait response (1 second) and read response
+               waitResponse(1000);
+               flushAllPackets();
+       }
+
+       public void addDBGModName(String modName) throws IOException {
+               PHPDBGPacket DBGPacket= new PHPDBGPacket(PHPDBGBase.DBGA_REQUEST);
+               PHPDBGFrame DBGFrame= new PHPDBGFrame(PHPDBGBase.FRAME_RAWDATA);
+               
+               rawCounter++;
+               DBGFrame.addInt(rawCounter);                            // FRAME_RAWDATA ID
+               DBGFrame.addInt(modName.length() + 1);          // length of rawdata (+ null char)
+               DBGFrame.addString(modName);                            // file name
+               DBGFrame.addChar('\0');                                         // null char
+
+               DBGPacket.addFrame(DBGFrame);
+               
+               if(proxy.getSocket().isClosed()) return;
+               DBGPacket.sendPacket(os);
+       }
+
+       // Returns DBG Breakpoint ID
+       private int setBreakpoint(String mod_name, String condition, int line, int state, int istemp, int hitcount, int skiphits, int bpno, int isunderhit) throws IOException {
+               int modNo= 0;
+
+               PHPDBGPacket DBGPacket= new PHPDBGPacket(PHPDBGBase.DBGA_REQUEST);
+               PHPDBGFrame DBGFrame1= new PHPDBGFrame(PHPDBGBase.FRAME_BPS);
+               PHPDBGFrame DBGFrame2= new PHPDBGFrame(PHPDBGBase.FRAME_RAWDATA);
+
+               modNo= getModByName(mod_name);
+               
+               if(modNo >= 0) {
+                       DBGFrame1.addInt(modNo);        // mod number
+               } else {
+                       DBGFrame1.addInt(0);            // mod number (0 use file name)
+               }
+               
+               DBGFrame1.addInt(line);                 // line number
+               
+               if(modNo >= 0) {
+                       DBGFrame1.addInt(0);                    // use mod number
+               } else {
+                       rawCounter++;
+                       DBGFrame1.addInt(rawCounter);   // ID of FRAME_RAWDATA to send file name
+               }
+
+               DBGFrame1.addInt(state);                // state BPS_*
+               DBGFrame1.addInt(istemp);               // istemp
+               DBGFrame1.addInt(hitcount);             // hit count
+               DBGFrame1.addInt(skiphits);             // skip hits
+               DBGFrame1.addInt(0);                    // ID of condition
+               DBGFrame1.addInt(bpno);                 // breakpoint number
+               DBGFrame1.addInt(isunderhit);   // is under hit
+               
+               if(modNo < 0) {
+                       DBGFrame2.addInt(rawCounter);                           // FRAME_RAWDATA ID
+                       DBGFrame2.addInt(mod_name.length() + 1);        // length of rawdata (+ null char)
+                       DBGFrame2.addString(mod_name);                          // file name
+                       DBGFrame2.addChar('\0');                                        // null char
+                       // First add file name data
+                       DBGPacket.addFrame(DBGFrame2);
+               }
+
+               // Second add command data
+               DBGPacket.addFrame(DBGFrame1);
+
+               if(proxy.getSocket().isClosed()) return 0;
+               DBGPacket.sendPacket(os);
+
+               clearLastBP();
+
+               // Wait response (1 second) and read response
+               waitResponse(1000);
+               flushAllPackets();
+
+               return LastBPRead[8];
+       }
+
+       private void clearLastBP() {
+               int i;
+
+               for(i=0; i < LastBPRead.length; i++)
+                       LastBPRead[i]= 0;
+       }
+
+       private void copyToLastBP(int[] BPBody) {
+               int i;
+
+               for(i=0; i < LastBPRead.length; i++)
+                       LastBPRead[i]= BPBody[i];
+       }
+
+       public void continueExecution() throws IOException {
+               BPUnderHit= 0;
+               PHPDBGPacket DBGPacket= new PHPDBGPacket(PHPDBGBase.DBGA_CONTINUE);
+               if(proxy.getSocket().isClosed()) return;
+               DBGPacket.sendPacket(os);
+       }
+
+       private int getBPUnderHit() {
+               int i, BPUnder=0;
+               int[] dbg_bpl_body= new int[10];
+
+               // look for bp under hit
+               for(i=0; i < DBGBPList.size(); i++) {
+                       dbg_bpl_body= (int[]) DBGBPList.get(i);
+                       if(dbg_bpl_body[9] == 1) {
+                               BPUnder= dbg_bpl_body[8];
+                       }
+               }
+               return BPUnder;
+       }
+       
+       public int getLastCmd()
+       {
+               return lastCmd;
+       }
+       
+       public int getSID()
+       {
+         return sid;
+  }
+       
+       public void setLastCmd(int cmd)
+       {
+               lastCmd=cmd;
+       }
+
+       public void stepInto() throws IOException {
+               BPUnderHit= 0;
+               PHPDBGPacket DBGPacket= new PHPDBGPacket(PHPDBGBase.DBGA_STEPINTO);
+               if(proxy.getSocket().isClosed()) return;
+               DBGPacket.sendPacket(os);
+       }
+
+       public void stepOver() throws IOException {
+               BPUnderHit= 0;
+               PHPDBGPacket DBGPacket= new PHPDBGPacket(PHPDBGBase.DBGA_STEPOVER);
+               if(proxy.getSocket().isClosed()) return;
+               DBGPacket.sendPacket(os);
+       }
+
+       public void stepOut() throws IOException {
+               BPUnderHit= 0;
+               PHPDBGPacket DBGPacket= new PHPDBGPacket(PHPDBGBase.DBGA_STEPOUT);
+               if(proxy.getSocket().isClosed()) return;
+               DBGPacket.sendPacket(os);
+       }
+
+       public void stopExecution() throws IOException {
+               BPUnderHit= 0;
+               PHPDBGPacket DBGPacket= new PHPDBGPacket(PHPDBGBase.DBGA_STOP);
+               if(proxy.getSocket().isClosed()) return;
+               DBGPacket.sendPacket(os);
+       }
+
+       public PHPVariable[] getVariables(PHPStackFrame stack) throws IOException, DebugException  {
+               PHPDBGPacket DBGPacket= new PHPDBGPacket(PHPDBGBase.DBGA_REQUEST);
+               PHPDBGFrame DBGFrame1= new PHPDBGFrame(PHPDBGBase.FRAME_EVAL);
+               //PHPDBGFrame DBGFrame2= new PHPDBGFrame(PHPDBGBase.FRAME_RAWDATA);
+       
+               DBGFrame1.addInt(0);                                            // istr = raw data ID
+               DBGFrame1.addInt(1);                                            // scope_id = -1 means current location, 0 never used, +1 first depth
+
+               /*              
+               String evalBlock= new String("$GLOBALS");
+               DBGFrame2.addInt(1);                                            // FRAME_RAWDATA ID
+               DBGFrame2.addInt(evalBlock.length() + 1);       // length of rawdata (+ null char)
+               DBGFrame2.addString(evalBlock);                         // eval block
+               DBGFrame2.addChar('\0');                                        // null char
+               */
+               
+               // Add command data
+               DBGPacket.addFrame(DBGFrame1);
+               
+               if(proxy.getSocket().isClosed()) return null;
+               DBGPacket.sendPacket(os);
+
+               waitResponse(1000);
+               flushAllPackets();
+               
+               // Process serialized variables
+               DBGVariableList= procVars(stack);
+
+               return DBGVariableList;
+       }
+
+       public void evalBlock(String evalString) throws IOException, DebugException  {
+               PHPDBGPacket DBGPacket= new PHPDBGPacket(PHPDBGBase.DBGA_REQUEST);
+               PHPDBGFrame DBGFrame1= new PHPDBGFrame(PHPDBGBase.FRAME_EVAL);
+               PHPDBGFrame DBGFrame2= new PHPDBGFrame(PHPDBGBase.FRAME_RAWDATA);
+
+               rawCounter++;
+               DBGFrame1.addInt(rawCounter);                           // istr = raw data ID
+               DBGFrame1.addInt(1);                                            // scope_id = -1 means current location, 0 never used, +1 first depth
+
+               DBGFrame2.addInt(rawCounter);                           // FRAME_RAWDATA ID
+               DBGFrame2.addInt(evalString.length() + 1);      // length of rawdata (+ null char)
+               DBGFrame2.addString(evalString);                        // eval block
+               DBGFrame2.addChar('\0');                                        // null char
+
+               // Add raw data first
+               DBGPacket.addFrame(DBGFrame2);          
+               // Add command data
+               DBGPacket.addFrame(DBGFrame1);
+               
+               if(proxy.getSocket().isClosed()) return;
+               DBGPacket.sendPacket(os);
+
+               waitResponse(1000);
+               flushAllPackets();
+       }
+
+       public void flushAllPackets() throws IOException {
+               while(readResponse() != 0);
+       }
+
+       public String getModByNo(int modNo) {
+               int i;
+               PHPDBGMod dbg_mod;
+
+               // look for mod
+               for(i=0; i < DBGMods.size(); i++) {
+                       dbg_mod= (PHPDBGMod) DBGMods.get(i);
+                       if(dbg_mod.getNo() == modNo) {
+                               return dbg_mod.getName(); 
+                       }
+               }
+               return "";
+       }
+
+       private int getModByName(String modName) {
+               int i;
+               PHPDBGMod dbg_mod;
+
+               // look for mod
+               for(i=0; i < DBGMods.size(); i++) {
+                       dbg_mod= (PHPDBGMod) DBGMods.get(i);
+                       if(dbg_mod.getName().equalsIgnoreCase(modName)) {
+                               return dbg_mod.getNo(); 
+                       }
+               }
+               return -1;
+       }
+
+       private String getRawFrameData(char[] framesInfo, int frameNo) {
+               int nextFrame= 0;
+               int[] dbg_frame= new int[2];
+               
+               while(nextFrame < framesInfo.length) {
+                       dbg_frame[0] = PHPDBGBase.Char4ToInt(framesInfo, nextFrame);            // frame name
+                       dbg_frame[1] = PHPDBGBase.Char4ToInt(framesInfo, nextFrame + 4);        // frame size
+
+                       nextFrame += 8;
+                       if(dbg_frame[1] == 0) return "";
+
+                       switch(dbg_frame[0]) {
+                               case PHPDBGBase.FRAME_RAWDATA:
+                                       if(frameNo == PHPDBGBase.Char4ToInt(framesInfo, nextFrame)) {
+                                               int toRead= PHPDBGBase.Char4ToInt(framesInfo, nextFrame + 4);
+                                               return String.copyValueOf(framesInfo, nextFrame + 8, toRead);
+                                       }
+                                       break;
+                       }
+                       // go to next frame
+                       nextFrame += dbg_frame[1];
+               }
+               return "";
+       }
+
+       public PHPVariable[] getInstVars(PHPVariable phpVar) throws DebugException {
+               Vector vecVars= new Vector();
+               PHPVariable localPHPVar;
+               int i=0;
+               
+               // already unserialized
+               for(i=0; i < DBGVars.size(); i++) {
+                       localPHPVar= (PHPVariable)DBGVars.get(i);
+                       if(localPHPVar.getParent() == phpVar) {
+                               vecVars.add(localPHPVar);
+                       }
+               }
+               PHPVariable[] arrVars= new PHPVariable[vecVars.size()];
+               arrVars= (PHPVariable[]) vecVars.toArray(arrVars);
+
+               return arrVars;
+       }
+       
+       private PHPVariable[] procVars(PHPStackFrame stack) throws DebugException {
+               Vector vecVars= new Vector();
+               
+               // unserialize
+               finalPos= 0;
+               refCounter= 0;
+               doUnserialize(stack, vecVars, null);
+
+               DBGVars= vecVars;
+               
+               return(getInstVars(null));
+       }
+
+       private String readValue(String serialVars) throws DebugException {
+               int startPos=0, endPos=0, lenStr=0, i=0, elements=0;
+               String ret= new String("");
+
+               switch(serialVars.charAt(0)) {
+                       case 'a':       // associative array, a:elements:{[index][value]...}
+                               typeRead= "hash";
+                               startPos= 1;
+                               endPos= serialVars.indexOf(':', startPos + 1);
+                               if(endPos == -1) return "";
+                               finalPos += endPos + 2;
+                               ret= new String(serialVars.substring(startPos + 1, endPos));
+                               
+                               hasChildren= true;
+                               break;
+                       case 'O':       // object, O:name_len:"name":elements:{[attribute][value]...}
+                               typeRead= "object";
+                               
+                               startPos= 1;
+                               endPos= serialVars.indexOf(':', startPos + 1);
+                               if(endPos == -1) return "";
+                               
+                               // get object class
+                               lenStr= Integer.parseInt(serialVars.substring(startPos + 1, endPos));
+                               startPos= endPos + 2;
+                               endPos= lenStr + startPos;
+                               className= new String(serialVars.substring(startPos, endPos).toString());
+
+                               // get num of elements
+                               startPos= endPos + 1;
+                               endPos= serialVars.indexOf(':', startPos + 1);
+                               if(endPos == -1) return "";
+                               finalPos += endPos + 2;
+                               ret= new String(serialVars.substring(startPos + 1, endPos));
+
+                               isObject= true;
+                               hasChildren= true;                              
+                               break;
+                       case 's':       // string, s:length:"data";
+                               typeRead= "string";
+                               startPos= 1;
+                               endPos= serialVars.indexOf(':', startPos + 1);
+                               if(endPos == -1) return "";
+
+                               lenStr= Integer.parseInt(serialVars.substring(startPos + 1, endPos));
+                               startPos= endPos + 2;
+                               endPos= lenStr + startPos;
+                               ret= new String(serialVars.substring(startPos, endPos).toString());
+                               finalPos += endPos + 2; 
+                               break;
+                       case 'i':       // integer, i:123;
+                               typeRead= "integer";
+                               startPos= 1;
+                               endPos= serialVars.indexOf(';', startPos + 1);
+                               if(endPos == -1) return "";
+
+                               ret= new String(serialVars.substring(startPos + 1, endPos).toString());
+                               finalPos += endPos + 1;
+                               break;
+                       case 'd':       // double (float), d:1.23;
+                               typeRead= "double";
+                               startPos= 1;
+                               endPos= serialVars.indexOf(';', startPos + 1);
+                               if(endPos == -1) return "";
+       
+                               ret= new String(serialVars.substring(startPos + 1, endPos).toString());
+                               finalPos += endPos + 1;
+                               break;
+                       case 'N':       // NULL, N;
+                               typeRead= "null";
+                               ret= "nil";
+                               finalPos += 2;
+                               break;
+                       case 'b':       // bool, b:0 or 1
+                               typeRead= "boolean";
+                               ret= (serialVars.charAt(2) == '1')?"true":"false";
+                               finalPos += endPos + 4;
+                               break;
+                       case 'z':       // resource, z:typename_len:"typename":valres;
+                               typeRead= "resource";
+                               
+                               startPos= 1;
+                               endPos= serialVars.indexOf(':', startPos + 1);
+                               if(endPos == -1) return "";
+               
+                               // get resource type name
+                               lenStr= Integer.parseInt(serialVars.substring(startPos + 1, endPos));
+                               startPos= endPos + 2;
+                               endPos= lenStr + startPos;
+                               className= new String(serialVars.substring(startPos, endPos).toString());
+
+                               // get resource value
+                               startPos= endPos + 1;
+                               endPos= serialVars.indexOf(';', startPos + 1);
+                               if(endPos == -1) return "";
+                               ret= new String(serialVars.substring(startPos + 1, endPos));
+                               finalPos += endPos + 1;
+                               break;
+                       case 'r':
+                       case 'R':
+                               typeRead= "reference";
+                               startPos= 1;
+                               endPos= serialVars.indexOf(';', startPos + 1);
+                               if(endPos == -1) return "0";
+
+                               ret= new String(serialVars.substring(startPos + 1, endPos));
+                               finalPos += endPos + 1;
+                               isRef= true;
+                               break;
+                       case ';':
+                               typeRead= "unknown";
+                               finalPos+= 1;
+                               break;
+                       case '?':
+                               finalPos+= 1;
+                       default:
+                               finalPos+= 1;
+                               typeRead= "unknown";
+                               break;
+               }
+               return ret;
+       }
+
+       private void doUnserialize(PHPStackFrame stack, Vector vecVars, PHPVariable parent) throws DebugException {
+               int i, elements= 0;
+               PHPVariable newVar= null;
+               String value= new String("");
+               String name= new String("");
+               String tmp= new String("");
+               String[] tmpSplit;
+
+               if(finalPos > serGlobals.length() || serGlobals.equals("") || serGlobals.substring(finalPos).equals("")) return;
+
+               isRef= false;
+               hasChildren= false;
+               isObject= false;
+               name= readValue(serGlobals.substring(finalPos));
+               
+               if(hasChildren) {
+                       // main array
+                       if(refCounter == 0) {
+                               value= name;
+                               name= "";
+                       }
+               } else {
+                       hasChildren= false;
+                       isRef= false;
+                       value= readValue(serGlobals.substring(finalPos));
+                       // replaceAll doesn't work, why???
+                       tmpSplit= value.split("\\\\");
+                       value= "";
+                       for(i= 0; i < tmpSplit.length; i++) {
+                               value= value + tmpSplit[i];
+                               if(!tmpSplit[i].equals("")) {
+                                       if(i < (tmpSplit.length - 1)) {
+                                               value= value + "\\";
+                                       }
+                               }
+                       }
+               }
+               
+               if(!name.equals("")) {
+                       if(isRef) {
+                               PHPVariable varPHP;
+                               for(i=0; i < vecVars.size(); i++) {
+                                       varPHP= (PHPVariable) vecVars.get(i);
+                                       if(varPHP.getObjectId().equals(value)) {
+                                               newVar= new PHPVariable(stack, name, "local", true, (PHPValue)varPHP.getValue());
+                                               break;                                          
+                                       }
+                               }
+                               if(newVar == null) {
+                                       newVar= new PHPVariable(stack, name, "local", false, null);
+                               }
+                       } else {
+                               refCounter++;
+                               newVar= new PHPVariable(stack, name, "local", value, typeRead, hasChildren, Integer.toString(refCounter), className);
+                       }
+                       newVar.setParent(parent);
+                       vecVars.add(newVar);
+               }
+               if(hasChildren) {
+                       elements= Integer.parseInt(value);
+                       for(i=0; i < elements; i++)
+                               doUnserialize(stack, vecVars, newVar);
+
+                       // skip "}"
+                       finalPos += 1;
+               }
+       }
+
+       public int readResponse() throws IOException {
+               int bytesToRead=0, nextFrame=0, i=0, cmdReceived=0, stackIndex=0;
+               char[] dbg_header_struct_read= new char[16];
+               int[] dbg_header_struct= new int[4];
+               int[] dbg_bpl_tmp= new int[10];
+               int[] dbg_frame= new int[2];
+               int[] dbg_eval_tmp= new int[3];
+               int[] dbg_src_tree_tmp= new int[4];
+               Vector rawList= new Vector();
+               Vector stackList= new Vector();
+               PHPStackFrame[] newStackList;
+               
+               rawList.clear();
+               stackList.clear();
+               // Read from input
+               while(readInput(dbg_header_struct_read, 16) != 0) {
+                       dbg_header_struct[0] = PHPDBGBase.Char4ToInt(dbg_header_struct_read, 0);
+                       dbg_header_struct[1] = PHPDBGBase.Char4ToInt(dbg_header_struct_read, 4);
+                       dbg_header_struct[2] = PHPDBGBase.Char4ToInt(dbg_header_struct_read, 8);
+                       dbg_header_struct[3] = PHPDBGBase.Char4ToInt(dbg_header_struct_read, 12);
+                       
+                       // Check DBG sync bytes
+                       if(dbg_header_struct[0] != 0x5953) return 0;
+                       
+                       cmdReceived= dbg_header_struct[1];
+                       setLastCmd(cmdReceived);
+                       bytesToRead= dbg_header_struct[3];
+
+                       //System.out.println("Response Received: " + cmdReceived);
+                       char[] entirePack= new char[bytesToRead];
+
+                       if(bytesToRead > 0) {
+                               if(readInput(entirePack, bytesToRead) < bytesToRead) return 0;
+                       }
+                       
+                       // First process frames
+                       nextFrame= 0;
+                       while(nextFrame < bytesToRead) {
+                               dbg_frame[0] = PHPDBGBase.Char4ToInt(entirePack, nextFrame);            // frame name
+                               dbg_frame[1] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 4);        // frame size
+                               nextFrame += 8;
+                               if(dbg_frame[1] == 0) return 0;
+                               switch(dbg_frame[0]) {
+                                       case PHPDBGBase.FRAME_STACK:
+                                               int[] dbg_stack_new= new int[4];
+                                               dbg_stack_new[0] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 0);    // line no
+                                               dbg_stack_new[1] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 4);    // mod no
+                                               dbg_stack_new[2] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 8);    // scope id
+                                               dbg_stack_new[3] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 12);   // id of description string
+
+                                               stackIndex++;
+                                               if(dbg_stack_new[1] != 0) {                                             
+                                                       PHPStackFrame newStack= new PHPStackFrame(null, getModByNo(dbg_stack_new[1]), dbg_stack_new[0], stackIndex, getRawFrameData(entirePack, dbg_stack_new[3]), dbg_stack_new[1]);
+                                                       stackList.add(newStack);
+                                               }
+                                               break;
+                                       case PHPDBGBase.FRAME_SOURCE:
+                                               break;
+                                       case PHPDBGBase.FRAME_SRC_TREE:
+                                               dbg_src_tree_tmp[0] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 0);         // parent_mod_no
+                                               dbg_src_tree_tmp[1] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 4);         // parent_line_no               /* NOT USED */
+                                               dbg_src_tree_tmp[2] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 8);         // mod_no
+                                               dbg_src_tree_tmp[3] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 12);        // imod_name
+
+                                               if(getModByNo(dbg_src_tree_tmp[2]).equals("")) {
+                                                       String fileName= new String(getRawFrameData(entirePack, dbg_src_tree_tmp[3]));
+                                                       // Remove '\0' char
+                                                       if(fileName.length() > 0) fileName= fileName.substring(0, fileName.length() - 1);
+
+                                                       if(dbg_src_tree_tmp[2] != 0) {
+                                                               PHPDBGMod modNew= new PHPDBGMod(dbg_src_tree_tmp[2], fileName);
+                                                               DBGMods.add(modNew);
+                                                       }
+                                               }
+                                               break;
+                                       case PHPDBGBase.FRAME_RAWDATA:
+                                               break;
+                                       case PHPDBGBase.FRAME_ERROR:
+                                               break;
+                                       case PHPDBGBase.FRAME_EVAL:
+                                               String evalString= new String("");
+                                               dbg_eval_tmp[0] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 0); // istr
+                                               dbg_eval_tmp[1] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 4); // iresult
+                                               dbg_eval_tmp[2] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 8); // ierror
+
+                                               evalRet= getRawFrameData(entirePack, dbg_eval_tmp[1]);
+                                               evalString= getRawFrameData(entirePack, dbg_eval_tmp[0]);
+                                               serGlobals= evalRet;
+                                               break;
+                                       case PHPDBGBase.FRAME_BPS:
+                                               break;
+                                       case PHPDBGBase.FRAME_BPL:
+                                               int[] dbg_bpl_new= new int[10];
+                                               dbg_bpl_new[0] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 0);
+                                               dbg_bpl_new[1] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 4);
+                                               dbg_bpl_new[2] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 8);
+                                               dbg_bpl_new[3] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 12);
+                                               dbg_bpl_new[4] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 16);
+                                               dbg_bpl_new[5] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 20);
+                                               dbg_bpl_new[6] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 24);
+                                               dbg_bpl_new[7] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 28);
+                                               dbg_bpl_new[8] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 32);
+                                               dbg_bpl_new[9] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 36);
+       
+                                               // look if breakpoint already exists in vector
+                                               for(i=0; i < DBGBPList.size(); i++) {
+                                                       dbg_bpl_tmp= (int[]) DBGBPList.get(i);
+                                                       if(dbg_bpl_tmp[8] == dbg_bpl_new[8]) {
+                                                               DBGBPList.remove(i);
+                                                               break;
+                                                       }
+                                               }
+
+                                               // add breakpoint to vector
+                                               DBGBPList.add(dbg_bpl_new);
+                                               copyToLastBP(dbg_bpl_new);
+                                               
+                                               // mod no returned?
+                                               if(getModByNo(dbg_bpl_new[0]).equals("")) {
+                                                       String fileName= new String(getRawFrameData(entirePack, dbg_bpl_new[2]));
+                                                       // Remove '\0' char
+                                                       if(fileName.length() > 0) fileName= fileName.substring(0, fileName.length() - 1);
+                                                       if(dbg_bpl_new[0] != 0) {
+                                                               PHPDBGMod modNew= new PHPDBGMod(dbg_bpl_new[0], fileName);
+                                                               DBGMods.add(modNew);
+                                                       }
+                                               }                                                       
+                                               break;
+                                       case PHPDBGBase.FRAME_VER:
+                                               break;
+                                       case PHPDBGBase.FRAME_SID:
+                                         sid = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 0);
+                                               break;
+                                       case PHPDBGBase.FRAME_SRCLINESINFO:
+                                               break;
+                                       case PHPDBGBase.FRAME_SRCCTXINFO:
+                                               break;
+                                       case PHPDBGBase.FRAME_LOG:
+                                               break;
+                                       case PHPDBGBase.FRAME_PROF:
+                                               break;
+                                       case PHPDBGBase.FRAME_PROF_C:
+                                               break;
+                                       case PHPDBGBase.FRAME_SET_OPT:
+                                               break;
+                               }
+                               // go to next frame
+                               nextFrame += dbg_frame[1];
+                       }
+                       
+                       // Now process command
+                       switch(cmdReceived) {
+                               case PHPDBGBase.DBGC_REPLY:
+                                       break;
+                               case PHPDBGBase.DBGC_STARTUP:
+                                       break;
+                               case PHPDBGBase.DBGC_END:
+                                       sessionEnded= true;
+                                       break;
+                               case PHPDBGBase.DBGC_BREAKPOINT:
+                                       newStackList= new PHPStackFrame[stackList.size()];
+                                       newStackList= (PHPStackFrame[]) stackList.toArray(newStackList);
+                                       DBGStackList= newStackList;
+                                       BPUnderHit= getBPUnderHit();
+                                       break;
+                               case PHPDBGBase.DBGC_STEPINTO_DONE:
+                               case PHPDBGBase.DBGC_STEPOVER_DONE:
+                               case PHPDBGBase.DBGC_STEPOUT_DONE:
+                               case PHPDBGBase.DBGC_EMBEDDED_BREAK:
+                                       BPUnderHit= 1;
+                                       newStackList= new PHPStackFrame[stackList.size()];
+                                       newStackList= (PHPStackFrame[]) stackList.toArray(newStackList);
+                                       DBGStackList= newStackList;
+                                       break;
+                               case PHPDBGBase.DBGC_ERROR:
+                                       newStackList= new PHPStackFrame[stackList.size()];
+                                       newStackList= (PHPStackFrame[]) stackList.toArray(newStackList);
+                                       DBGStackList= newStackList;
+                                       break;
+                               case PHPDBGBase.DBGC_LOG:
+                                       break;
+                               case PHPDBGBase.DBGC_SID:
+                                       break;
+                               case PHPDBGBase.DBGC_PAUSE:
+                                       break;
+                       }
+               }
+
+               return cmdReceived;
+       }
+
+       public PHPStackFrame[] getStackList() {
+               return DBGStackList;
+       }
+
+       private int readInput(char[] buffer, int bytes) throws IOException {
+               int bytesRead= 0;
+
+               for(int i=0; i < bytes; i++) {
+                       if(in.ready()) {
+                               buffer[i]= (char) (in.read() & 0x00FF);
+                               bytesRead++;
+                       }
+                       else
+                               break;                          
+               }
+               return bytesRead;
+       }
+       
+       public void setShouldStop() {
+               this.shouldStop= true;
+       }
+
+       public boolean waitResponse(long milliseconds) throws IOException {
+               long timeout= System.currentTimeMillis() + milliseconds;
+               while(System.currentTimeMillis() < timeout) {
+                       if(in.ready() || shouldStop) {
+                               break;
+                       }
+               }
+               return in.ready();
+       }
+}
\ No newline at end of file
diff --git a/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/.#PHPDBGProxy.java.1.3 b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/.#PHPDBGProxy.java.1.3
new file mode 100644 (file)
index 0000000..dd3b8f6
--- /dev/null
@@ -0,0 +1,433 @@
+/**********************************************************************
+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.debug.core;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.net.Socket;
+import java.net.ServerSocket;
+import java.net.SocketTimeoutException;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.debug.core.DebugPlugin;
+import org.eclipse.debug.core.DebugException;
+import org.eclipse.debug.core.model.IBreakpoint;
+import net.sourceforge.phpdt.internal.debug.core.model.IPHPDebugTarget;
+import net.sourceforge.phpdt.internal.debug.core.model.PHPStackFrame;
+import net.sourceforge.phpdt.internal.debug.core.model.PHPThread;
+import net.sourceforge.phpdt.internal.debug.core.model.PHPVariable;
+import net.sourceforge.phpdt.internal.debug.core.breakpoints.PHPLineBreakpoint;
+
+public class PHPDBGProxy {
+
+       private ServerSocket server= null;
+       private Socket socket;
+       private BufferedReader reader= null;
+       private PHPDBGInterface DBGInt= null;
+       private IPHPDebugTarget debugTarget= null;
+       private PHPLoop phpLoop;
+       private PHPThread PHPMainThread;
+       private PHPDBGProxy thisProxy= null;
+       private int port;
+       private boolean remote;
+       private IPath remoteSourcePath;
+
+       public PHPDBGProxy() {
+               thisProxy= this;
+       }
+
+       public PHPDBGProxy(boolean remote,String remoteSourcePath) {
+               thisProxy= this;
+               this.remote=remote;
+               this.remoteSourcePath= new Path(remoteSourcePath);
+       }
+
+       public void start() {
+               createServerSocket();
+               this.startPHPLoop();
+       }
+
+       public void stop() {
+               phpLoop.setShouldStop();
+               if(DBGInt != null) DBGInt.setShouldStop();
+               phpLoop.notifyWait();
+       }
+
+       protected ServerSocket getServerSocket() throws IOException {
+               if (server == null) {
+                       createServerSocket();
+               }
+               return server;
+       }
+
+       protected void createServerSocket() {
+//             port = SocketUtil.findUnusedLocalPort("localhost", 10001, 10101);
+    port =     10001;
+               if (port == -1) {
+                       PHPDebugCorePlugin.log(5, "Cannot find free port!!!!");
+                       return;
+               }
+               try {
+                       if (server == null) {
+                               server = new ServerSocket(port);
+                               //System.out.println("ServerSocket on port: " + port);
+                       } 
+               } catch (IOException e) {
+                       // IO Error
+                       PHPDebugCorePlugin.log(e);
+                       stop();
+               }
+       }
+
+       public Socket getSocket() throws IOException {
+               return socket;
+       }
+
+       protected void setDBGInterface(PHPDBGInterface DBGInt) {
+               this.DBGInt= DBGInt;
+       }
+
+       public BufferedReader getReader() throws IOException {
+               if (reader == null) {                   
+                       reader = new BufferedReader(new InputStreamReader(this.getSocket().getInputStream(), "ISO8859_1"));
+               }
+               return reader;
+       }
+       
+       public BufferedReader getReader(Socket socket) throws IOException {
+               if (socket != null)
+                 return new BufferedReader(new InputStreamReader(socket.getInputStream(), "ISO8859_1"));
+               else
+                 return null;
+       }
+
+       public OutputStream getOutputStream() throws IOException {
+               return this.getSocket().getOutputStream();
+       }
+
+       protected void setBreakPoints() throws IOException, CoreException {
+               IBreakpoint[] breakpoints = DebugPlugin.getDefault().getBreakpointManager().getBreakpoints();
+               for (int i = 0; i < breakpoints.length; i++) {
+                       addBreakpoint(breakpoints[i]);
+               }
+       }
+
+       public void addBreakpoint(IBreakpoint breakpoint) {
+               if (DBGInt == null) return;
+               int bpNo= 0;
+               try {
+                       PHPLineBreakpoint phpLBP;
+                       if(breakpoint.getModelIdentifier() == PHPDebugCorePlugin.getDefault().getDescriptor().getUniqueIdentifier()) {
+                               IPath filename;
+                               phpLBP= (PHPLineBreakpoint)breakpoint;
+                               //                              bpNo= DBGInt.addBreakpoint(phpLBP.getMarker().getResource().getLocation().toOSString(), phpLBP.getLineNumber());
+                               if (remote)
+                                       filename=remoteSourcePath.append(phpLBP.getMarker().getResource().getProjectRelativePath());
+                               else
+                                       filename=phpLBP.getMarker().getResource().getLocation();
+                               bpNo= DBGInt.addBreakpoint(filename.toOSString(), phpLBP.getLineNumber());
+                               phpLBP.setDBGBpNo(bpNo);
+                       }
+               } catch (IOException e) {
+                       PHPDebugCorePlugin.log(e);
+                       stop();
+               } catch (CoreException e) {
+                       PHPDebugCorePlugin.log(e);
+                       stop();
+               }
+       }
+
+       public void removeBreakpoint(IBreakpoint breakpoint) {
+               if (DBGInt == null) return;
+               try {
+                       PHPLineBreakpoint phpLBP;
+                       if(breakpoint.getModelIdentifier() == PHPDebugCorePlugin.getDefault().getDescriptor().getUniqueIdentifier()) {
+                               phpLBP= (PHPLineBreakpoint)breakpoint;
+                               IPath filename;
+                               if (remote)
+                                       filename=remoteSourcePath.append(phpLBP.getMarker().getResource().getProjectRelativePath());
+                               else
+                                       filename=phpLBP.getMarker().getResource().getLocation();
+//                                     bpNo= DBGInt.addBreakpoint(filename.toOSString(), phpLBP.getLineNumber());                              
+                               DBGInt.removeBreakpoint(filename.toOSString(), phpLBP.getLineNumber(), phpLBP.getDBGBpNo());
+                       }
+               } catch (IOException e) {
+                       PHPDebugCorePlugin.log(e);
+                       stop();
+               } catch (CoreException e) {
+                       PHPDebugCorePlugin.log(e);
+                       stop();
+               }
+       }
+
+       public void startPHPLoop() {
+               phpLoop = new PHPLoop();
+               phpLoop.start();
+       }
+
+       public void resume(PHPThread thread) {
+               try {
+                       DBGInt.continueExecution();
+                       phpLoop.notifyWait();
+               } catch (IOException e) {
+                       PHPDebugCorePlugin.log(e);
+                       stop();
+               }
+       }
+
+       protected IPHPDebugTarget getDebugTarget() {
+               return debugTarget;
+       }
+
+       public void setDebugTarget(IPHPDebugTarget debugTarget) {
+               this.debugTarget = debugTarget;
+               debugTarget.setPHPDBGProxy(this);
+       }
+
+       public PHPVariable[] readVariables(PHPStackFrame frame) {
+               try {
+                       return DBGInt.getVariables(frame);
+               } catch (IOException ioex) {
+                       ioex.printStackTrace();
+                       throw new RuntimeException(ioex.getMessage());
+               } catch (DebugException ex) {
+                       ex.printStackTrace();
+                       throw new RuntimeException(ex.getMessage());
+               }
+       }
+
+       public PHPVariable[] readInstanceVariables(PHPVariable variable) {
+               try {
+                       return DBGInt.getInstVars(variable);
+               } catch (DebugException ex) {
+                       ex.printStackTrace();
+                       throw new RuntimeException(ex.getMessage());
+               }
+
+       }
+
+       public void readStepOverEnd(PHPStackFrame stackFrame) {
+               try {
+                       DBGInt.stepOver();
+                       phpLoop.notifyWait();
+               } catch (Exception e) {
+                       PHPDebugCorePlugin.log(e);
+               }
+       }
+
+       public void readStepReturnEnd(PHPStackFrame stackFrame) {
+               try {
+                       DBGInt.stepOut();
+                       phpLoop.notifyWait();
+               } catch (Exception e) {
+                       PHPDebugCorePlugin.log(e);
+               }
+       }
+
+       public void readStepIntoEnd(PHPStackFrame stackFrame) {
+               try {
+                       DBGInt.stepInto();
+                       phpLoop.notifyWait();
+               } catch (Exception e) {
+                       PHPDebugCorePlugin.log(e);
+               }
+       }
+
+/*
+       public PHPStackFrame[] readFrames(PHPThread thread) {
+               //try {
+                       //this.println("th " + thread.getId() + " ; f ");
+                       //return new FramesReader(getMultiReaderStrategy()).readFrames(thread);
+                       return null;
+               //} catch (IOException e) {
+               //      PHPDebugCorePlugin.log(e);
+               //      return null;
+               //}
+
+       }
+*/
+       
+       public void closeSocket() throws IOException {
+               if (socket != null) {
+                       socket.close();
+               }
+       }
+
+       public void closeServerSocket() throws IOException {
+               if (server != null) {
+                       server.close();
+               }
+       }
+
+       public int getPort() {
+               return port;
+       }
+
+       class PHPLoop extends Thread {
+               private boolean shouldStop;
+       
+               public PHPLoop() {
+                       shouldStop = false;
+                       this.setName("PHPDebuggerLoop");
+               }
+
+               public synchronized void setShouldStop() {
+                       shouldStop = true;
+               }
+
+               public synchronized void notifyWait() {
+                       notify();
+               }
+
+               public void run() {
+                       try {
+                               char[] buf= new char[16];
+                               int i, pos, timeout;
+                               long interval= 200; // 200ms
+                               String line;
+                               PHPStackFrame[] StackList;
+                               boolean endFile=false;
+                               boolean newconnect=false;
+                               Socket newSocket=null;
+                               PHPDBGInterface newDBGInt;
+                               int sid=-1;
+                               
+                               PHPMainThread = new PHPThread(getDebugTarget(), getPort());
+                               PHPMainThread.setName("Thread [main]");
+                               timeout = 0;
+                               while ((getDebugTarget() == null) && (timeout < 100)) {
+                                       sleep(100);
+                                       timeout++;
+                               }
+                               // Be sure debug target is set
+                               PHPMainThread.setDebugTarget(getDebugTarget());
+                               getDebugTarget().addThread(PHPMainThread);
+                               
+                               //System.out.println("Waiting for breakpoints.");       
+                               while (!shouldStop)     
+                               {       
+                                       newconnect=true;
+               try {
+                 newSocket = server.accept();
+                //System.out.println("Accepted! : " + socket.toString());
+               } catch (SocketTimeoutException e) {
+                                               // no one wants to connect
+                                               newconnect=false;
+                   } catch (IOException e) {
+               PHPDebugCorePlugin.log(e);
+             return;
+             }
+       
+                                       if (newconnect)
+                                       {
+                                               if (DBGInt==null)
+                                                       server.setSoTimeout(1);
+                                               newDBGInt= new PHPDBGInterface(getReader(newSocket), newSocket.getOutputStream(), thisProxy);
+                                               newDBGInt.waitResponse(1000);
+                 newDBGInt.flushAllPackets();
+                                               // Check version and session ID
+                 if ((DBGInt==null) || (DBGInt.getSID()==newDBGInt.getSID()))
+                 {
+                       DBGInt=newDBGInt;
+                                                       try     {
+                                                               closeSocket();
+                                                       }       catch (IOException e) {
+                                                               PHPDebugCorePlugin.log(e);
+                                                               shouldStop=true;
+                                                       }
+                       socket=newSocket;
+                                                       setBreakPoints();
+                                                       DBGInt.continueExecution();                     
+                 } else
+                 {
+                                                       newDBGInt.continueExecution();
+                       newSocket.close();
+                 }
+                                       }
+
+               if(DBGInt.waitResponse(interval))
+               {
+               
+               DBGInt.flushAllPackets();
+
+               if (DBGInt.BPUnderHit != 0) {
+                       StackList = DBGInt.getStackList();
+                       if (StackList.length > 0) {
+                       for (i = 0; i < StackList.length; i++) {
+                               StackList[i].setThread(PHPMainThread);
+                               if (DBGInt.getModByNo(StackList[i].getModNo()).equals("")) {
+                               DBGInt.getSourceTree();
+                               }
+                               StackList[i].setFile(
+                               DBGInt.getModByNo(StackList[i].getModNo()));
+                       }
+                       PHPMainThread.setStackFrames(StackList);
+                       }
+                       // Fire debug event
+                       PHPMainThread.suspend();
+
+                       synchronized (this) {
+                       wait();
+                       }
+               }
+               }
+          if (remote) {
+               if (PHPMainThread.isTerminated())
+               {
+                       shouldStop=true;
+                       break;
+               }
+          } else {
+               if (PHPMainThread.isTerminated() || getDebugTarget().getProcess().isTerminated())
+               {
+                                                       shouldStop=true;
+                                                       break;                   
+               }
+          }
+//             if (DBGInt.getLastCmd()==PHPDBGBase.DBGC_LOG)
+//                     endFile=true;
+//             }
+//             try
+//             {
+//                                             closeSocket();
+//             }
+//                                     catch (IOException e) {
+//                                             PHPDebugCorePlugin.log(e);
+//                                             shouldStop=true;
+//                                     }
+//             endFile=false;
+                               }
+       } 
+       catch (Exception ex) {
+       PHPDebugCorePlugin.log(ex);
+       System.out.println(ex);
+       } 
+       finally {
+               try {
+               getDebugTarget().terminate();
+               closeSocket();
+               closeServerSocket();
+               }
+               catch (IOException e) {
+               PHPDebugCorePlugin.log(e);
+               return;
+       }
+        //System.out.println("Socket loop finished.");
+       }
+               }
+       }       
+}
diff --git a/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/Environment.class b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/Environment.class
new file mode 100644 (file)
index 0000000..42a91e5
Binary files /dev/null and b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/Environment.class differ
diff --git a/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/PHPDBGBase.class b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/PHPDBGBase.class
new file mode 100644 (file)
index 0000000..079b40e
Binary files /dev/null and b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/PHPDBGBase.class differ
diff --git a/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/PHPDBGFrame.class b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/PHPDBGFrame.class
new file mode 100644 (file)
index 0000000..ff21eab
Binary files /dev/null and b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/PHPDBGFrame.class differ
diff --git a/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/PHPDBGInterface.class b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/PHPDBGInterface.class
new file mode 100644 (file)
index 0000000..f4adacd
Binary files /dev/null and b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/PHPDBGInterface.class differ
diff --git a/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/PHPDBGMod.class b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/PHPDBGMod.class
new file mode 100644 (file)
index 0000000..31b3947
Binary files /dev/null and b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/PHPDBGMod.class differ
diff --git a/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/PHPDBGPacket.class b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/PHPDBGPacket.class
new file mode 100644 (file)
index 0000000..9d28a36
Binary files /dev/null and b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/PHPDBGPacket.class differ
diff --git a/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/PHPDBGProxy$PHPLoop.class b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/PHPDBGProxy$PHPLoop.class
new file mode 100644 (file)
index 0000000..1e377ce
Binary files /dev/null and b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/PHPDBGProxy$PHPLoop.class differ
diff --git a/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/PHPDBGProxy.class b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/PHPDBGProxy.class
new file mode 100644 (file)
index 0000000..946edda
Binary files /dev/null and b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/PHPDBGProxy.class differ
diff --git a/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/PHPDebugCorePlugin.class b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/PHPDebugCorePlugin.class
new file mode 100644 (file)
index 0000000..bdc321e
Binary files /dev/null and b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/PHPDebugCorePlugin.class differ
diff --git a/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/SocketUtil.class b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/SocketUtil.class
new file mode 100644 (file)
index 0000000..b270c85
Binary files /dev/null and b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/SocketUtil.class differ
diff --git a/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/breakpoints/PHPBreakpoint.class b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/breakpoints/PHPBreakpoint.class
new file mode 100644 (file)
index 0000000..75326f9
Binary files /dev/null and b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/breakpoints/PHPBreakpoint.class differ
diff --git a/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/breakpoints/PHPLineBreakpoint$1.class b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/breakpoints/PHPLineBreakpoint$1.class
new file mode 100644 (file)
index 0000000..a712da1
Binary files /dev/null and b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/breakpoints/PHPLineBreakpoint$1.class differ
diff --git a/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/breakpoints/PHPLineBreakpoint.class b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/breakpoints/PHPLineBreakpoint.class
new file mode 100644 (file)
index 0000000..aed5cb9
Binary files /dev/null and b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/breakpoints/PHPLineBreakpoint.class differ
diff --git a/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/model/IPHPDebugTarget.class b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/model/IPHPDebugTarget.class
new file mode 100644 (file)
index 0000000..051a4c8
Binary files /dev/null and b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/model/IPHPDebugTarget.class differ
diff --git a/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/model/PHPDebugTarget.class b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/model/PHPDebugTarget.class
new file mode 100644 (file)
index 0000000..7311626
Binary files /dev/null and b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/model/PHPDebugTarget.class differ
diff --git a/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/model/PHPExpression.class b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/model/PHPExpression.class
new file mode 100644 (file)
index 0000000..06f00b6
Binary files /dev/null and b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/model/PHPExpression.class differ
diff --git a/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/model/PHPStackFrame.class b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/model/PHPStackFrame.class
new file mode 100644 (file)
index 0000000..79ae454
Binary files /dev/null and b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/model/PHPStackFrame.class differ
diff --git a/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/model/PHPThread.class b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/model/PHPThread.class
new file mode 100644 (file)
index 0000000..99e08ba
Binary files /dev/null and b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/model/PHPThread.class differ
diff --git a/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/model/PHPValue.class b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/model/PHPValue.class
new file mode 100644 (file)
index 0000000..a75e9f9
Binary files /dev/null and b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/model/PHPValue.class differ
diff --git a/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/model/PHPVariable.class b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/model/PHPVariable.class
new file mode 100644 (file)
index 0000000..496b8dd
Binary files /dev/null and b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/model/PHPVariable.class differ
diff --git a/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/net_sourceforge_phpdt_internal_debug_core_Environment.c b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/net_sourceforge_phpdt_internal_debug_core_Environment.c
new file mode 100644 (file)
index 0000000..e771f98
--- /dev/null
@@ -0,0 +1,76 @@
+#ifdef WIN32
+#  include "windows.h"
+#else
+#  include "string.h"
+#  include "stdlib.h"
+#endif
+#define BUFFER 512
+
+#include "net_sourceforge_phpdt_internal_debug_core_Environment.h"
+
+JNIEXPORT jstring JNICALL Java_net_sourceforge_phpdt_internal_debug_core_Environment_getenv
+  (JNIEnv *env, jclass c, jstring jname)
+{
+       // Retrieve the argument
+       char cname[BUFFER];
+       const char *str = (*env)->GetStringUTFChars(env, jname, (jboolean *)NULL);
+
+       strncpy(cname, str, BUFFER);
+       (*env)->ReleaseStringUTFChars(env, jname, str);
+
+       #ifdef WIN32
+               char cvalue[BUFFER];
+               int result = GetEnvironmentVariable(cname, cvalue, BUFFER);
+               if (result == 0)
+                       return 0;
+               else
+                       return (*env)->NewStringUTF(env, cvalue);
+       #else // UNIX
+               char *cvalue = getenv(cname);
+               if (cvalue == 0)
+                       return 0;
+               else
+                       return (*env)->NewStringUTF(env, cvalue);
+       #endif
+}
+
+JNIEXPORT jstring JNICALL Java_net_sourceforge_phpdt_internal_debug_core_Environment_setenv
+  (JNIEnv *env, jclass c, jstring jname, jstring jvalue)
+{
+       // Retrieve the arguments
+       char cname[BUFFER], cvalue[BUFFER];
+       const char *str = (*env)->GetStringUTFChars(env, jname, (jboolean *)NULL);
+
+       strncpy(cname, str, BUFFER);
+       (*env)->ReleaseStringUTFChars(env, jname, str);
+       str = (*env)->GetStringUTFChars(env, jvalue, (jboolean *)NULL);
+       strncpy(cvalue, str, BUFFER);
+       (*env)->ReleaseStringUTFChars(env, jvalue, str);
+
+       #ifdef WIN32
+               SetEnvironmentVariable(cname, cvalue);
+       #else // UNIX
+               char envbuf[BUFFER];
+               strncpy(envbuf, cname, BUFFER);
+               strncat(envbuf, "=", BUFFER-strlen(envbuf));
+               strncat(envbuf, cvalue, BUFFER-strlen(envbuf));
+               putenv(envbuf);
+       #endif
+       return 0;
+}
+
+#ifdef __LCC__
+
+/**
+ * Valentin Valchev (Bulgaria, www.prosyst.com)
+ * This is the standart implementation of Java 2 OnLoad and OnUnload native
+ * library calls. This template defines them empty functions
+ */
+JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved)   
+{ 
+       return JNI_VERSION_1_2; 
+}
+JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *vm, void *reserved) 
+{
+}
+#endif
diff --git a/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/net_sourceforge_phpdt_internal_debug_core_Environment.h b/net.sourceforge.phpeclipse.debug.core/bin/net/sourceforge/phpdt/internal/debug/core/net_sourceforge_phpdt_internal_debug_core_Environment.h
new file mode 100644 (file)
index 0000000..350cdfe
--- /dev/null
@@ -0,0 +1,29 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class net_sourceforge_phpdt_internal_debug_core_Environment */
+
+#ifndef _Included_net_sourceforge_phpdt_internal_debug_core_Environment
+#define _Included_net_sourceforge_phpdt_internal_debug_core_Environment
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     net_sourceforge_phpdt_internal_debug_core_Environment
+ * Method:    getenv
+ * Signature: (Ljava/lang/String;)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_net_sourceforge_phpdt_internal_debug_core_Environment_getenv
+  (JNIEnv *, jclass, jstring);
+
+/*
+ * Class:     net_sourceforge_phpdt_internal_debug_core_Environment
+ * Method:    setenv
+ * Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_net_sourceforge_phpdt_internal_debug_core_Environment_setenv
+  (JNIEnv *, jclass, jstring, jstring);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/net.sourceforge.phpeclipse.debug.core/core.jar b/net.sourceforge.phpeclipse.debug.core/core.jar
new file mode 100644 (file)
index 0000000..51f1eba
Binary files /dev/null and b/net.sourceforge.phpeclipse.debug.core/core.jar differ
diff --git a/net.sourceforge.phpeclipse.debug.core/src/net/sourceforge/phpdt/internal/debug/core/.#PHPDBGInterface.java.1.3 b/net.sourceforge.phpeclipse.debug.core/src/net/sourceforge/phpdt/internal/debug/core/.#PHPDBGInterface.java.1.3
new file mode 100644 (file)
index 0000000..266460b
--- /dev/null
@@ -0,0 +1,800 @@
+/**********************************************************************
+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:
+       Vicente Fernando - www.alfersoft.com.ar - Initial implementation
+       Christian Perkonig - remote debug
+**********************************************************************/
+package net.sourceforge.phpdt.internal.debug.core;
+
+import java.io.IOException;
+import java.io.BufferedReader;
+import java.io.OutputStream;
+import java.util.Vector;
+import java.lang.System;
+import org.eclipse.debug.core.DebugException;
+import net.sourceforge.phpdt.internal.debug.core.model.PHPStackFrame;
+import net.sourceforge.phpdt.internal.debug.core.model.PHPVariable;
+import net.sourceforge.phpdt.internal.debug.core.model.PHPValue;
+import net.sourceforge.phpdt.internal.debug.core.PHPDBGMod;
+
+public class PHPDBGInterface {
+
+       // Public
+       public boolean sessionEnded= false;
+       public int sessType= -1;        
+       public int BPUnderHit= 0;
+       public String sessID= new String();
+       
+       // Private
+       private int[] LastBPRead= new int[10];
+       private Vector DBGBPList= new Vector();
+       private PHPStackFrame[] DBGStackList;
+       private PHPVariable[] DBGVariableList;
+       private Vector DBGMods= new Vector();
+       private Vector DBGVars= new Vector();
+       private BufferedReader in;
+       private OutputStream os;
+       private boolean shouldStop= false, isRef= false, hasChildren= false, isObject= false;
+       private String evalRet= new String("");
+       private String serGlobals= new String("");
+       private String typeRead= new String("");
+       private String className= new String("");
+       private int finalPos=0, refCounter=0, rawCounter=1000;
+       private PHPDBGProxy proxy= null;
+       private int lastCmd=-1;
+       private int sid=0;
+        
+       public PHPDBGInterface(BufferedReader in, OutputStream os, PHPDBGProxy proxy) {
+               DBGBPList.clear();
+               this.in= in;
+               this.os= os;
+               this.proxy= proxy;
+       }
+
+       public int addBreakpoint(String mod_name, int line) throws IOException {
+               return setBreakpoint(mod_name, "", line, PHPDBGBase.BPS_ENABLED + PHPDBGBase.BPS_UNRESOLVED, 0, 0, 0, 0, 0);
+       }
+
+       public void removeBreakpoint(String mod_name, int line, int bpNo) throws IOException {
+               setBreakpoint(mod_name, "", line, PHPDBGBase.BPS_DISABLED, 0, 0, 0, bpNo, 0);
+       }
+
+       public void requestDBGVersion() throws IOException {
+               PHPDBGPacket DBGPacket= new PHPDBGPacket(PHPDBGBase.DBGA_REQUEST);
+               PHPDBGFrame DBGFrame= new PHPDBGFrame(PHPDBGBase.FRAME_VER);
+               
+               DBGPacket.addFrame(DBGFrame);
+
+               if(proxy.getSocket().isClosed()) return;
+               DBGPacket.sendPacket(os);
+       }
+
+       public void getSourceTree() throws IOException {
+               PHPDBGPacket DBGPacket= new PHPDBGPacket(PHPDBGBase.DBGA_REQUEST);
+               PHPDBGFrame DBGFrame= new PHPDBGFrame(PHPDBGBase.FRAME_SRC_TREE);
+               
+               DBGPacket.addFrame(DBGFrame);
+               
+               if(proxy.getSocket().isClosed()) return;
+               DBGPacket.sendPacket(os);
+
+               // Wait response (1 second) and read response
+               waitResponse(1000);
+               flushAllPackets();
+       }
+
+       public void addDBGModName(String modName) throws IOException {
+               PHPDBGPacket DBGPacket= new PHPDBGPacket(PHPDBGBase.DBGA_REQUEST);
+               PHPDBGFrame DBGFrame= new PHPDBGFrame(PHPDBGBase.FRAME_RAWDATA);
+               
+               rawCounter++;
+               DBGFrame.addInt(rawCounter);                            // FRAME_RAWDATA ID
+               DBGFrame.addInt(modName.length() + 1);          // length of rawdata (+ null char)
+               DBGFrame.addString(modName);                            // file name
+               DBGFrame.addChar('\0');                                         // null char
+
+               DBGPacket.addFrame(DBGFrame);
+               
+               if(proxy.getSocket().isClosed()) return;
+               DBGPacket.sendPacket(os);
+       }
+
+       // Returns DBG Breakpoint ID
+       private int setBreakpoint(String mod_name, String condition, int line, int state, int istemp, int hitcount, int skiphits, int bpno, int isunderhit) throws IOException {
+               int modNo= 0;
+
+               PHPDBGPacket DBGPacket= new PHPDBGPacket(PHPDBGBase.DBGA_REQUEST);
+               PHPDBGFrame DBGFrame1= new PHPDBGFrame(PHPDBGBase.FRAME_BPS);
+               PHPDBGFrame DBGFrame2= new PHPDBGFrame(PHPDBGBase.FRAME_RAWDATA);
+
+               modNo= getModByName(mod_name);
+               
+               if(modNo >= 0) {
+                       DBGFrame1.addInt(modNo);        // mod number
+               } else {
+                       DBGFrame1.addInt(0);            // mod number (0 use file name)
+               }
+               
+               DBGFrame1.addInt(line);                 // line number
+               
+               if(modNo >= 0) {
+                       DBGFrame1.addInt(0);                    // use mod number
+               } else {
+                       rawCounter++;
+                       DBGFrame1.addInt(rawCounter);   // ID of FRAME_RAWDATA to send file name
+               }
+
+               DBGFrame1.addInt(state);                // state BPS_*
+               DBGFrame1.addInt(istemp);               // istemp
+               DBGFrame1.addInt(hitcount);             // hit count
+               DBGFrame1.addInt(skiphits);             // skip hits
+               DBGFrame1.addInt(0);                    // ID of condition
+               DBGFrame1.addInt(bpno);                 // breakpoint number
+               DBGFrame1.addInt(isunderhit);   // is under hit
+               
+               if(modNo < 0) {
+                       DBGFrame2.addInt(rawCounter);                           // FRAME_RAWDATA ID
+                       DBGFrame2.addInt(mod_name.length() + 1);        // length of rawdata (+ null char)
+                       DBGFrame2.addString(mod_name);                          // file name
+                       DBGFrame2.addChar('\0');                                        // null char
+                       // First add file name data
+                       DBGPacket.addFrame(DBGFrame2);
+               }
+
+               // Second add command data
+               DBGPacket.addFrame(DBGFrame1);
+
+               if(proxy.getSocket().isClosed()) return 0;
+               DBGPacket.sendPacket(os);
+
+               clearLastBP();
+
+               // Wait response (1 second) and read response
+               waitResponse(1000);
+               flushAllPackets();
+
+               return LastBPRead[8];
+       }
+
+       private void clearLastBP() {
+               int i;
+
+               for(i=0; i < LastBPRead.length; i++)
+                       LastBPRead[i]= 0;
+       }
+
+       private void copyToLastBP(int[] BPBody) {
+               int i;
+
+               for(i=0; i < LastBPRead.length; i++)
+                       LastBPRead[i]= BPBody[i];
+       }
+
+       public void continueExecution() throws IOException {
+               BPUnderHit= 0;
+               PHPDBGPacket DBGPacket= new PHPDBGPacket(PHPDBGBase.DBGA_CONTINUE);
+               if(proxy.getSocket().isClosed()) return;
+               DBGPacket.sendPacket(os);
+       }
+
+       private int getBPUnderHit() {
+               int i, BPUnder=0;
+               int[] dbg_bpl_body= new int[10];
+
+               // look for bp under hit
+               for(i=0; i < DBGBPList.size(); i++) {
+                       dbg_bpl_body= (int[]) DBGBPList.get(i);
+                       if(dbg_bpl_body[9] == 1) {
+                               BPUnder= dbg_bpl_body[8];
+                       }
+               }
+               return BPUnder;
+       }
+       
+       public int getLastCmd()
+       {
+               return lastCmd;
+       }
+       
+       public int getSID()
+       {
+         return sid;
+  }
+       
+       public void setLastCmd(int cmd)
+       {
+               lastCmd=cmd;
+       }
+
+       public void stepInto() throws IOException {
+               BPUnderHit= 0;
+               PHPDBGPacket DBGPacket= new PHPDBGPacket(PHPDBGBase.DBGA_STEPINTO);
+               if(proxy.getSocket().isClosed()) return;
+               DBGPacket.sendPacket(os);
+       }
+
+       public void stepOver() throws IOException {
+               BPUnderHit= 0;
+               PHPDBGPacket DBGPacket= new PHPDBGPacket(PHPDBGBase.DBGA_STEPOVER);
+               if(proxy.getSocket().isClosed()) return;
+               DBGPacket.sendPacket(os);
+       }
+
+       public void stepOut() throws IOException {
+               BPUnderHit= 0;
+               PHPDBGPacket DBGPacket= new PHPDBGPacket(PHPDBGBase.DBGA_STEPOUT);
+               if(proxy.getSocket().isClosed()) return;
+               DBGPacket.sendPacket(os);
+       }
+
+       public void stopExecution() throws IOException {
+               BPUnderHit= 0;
+               PHPDBGPacket DBGPacket= new PHPDBGPacket(PHPDBGBase.DBGA_STOP);
+               if(proxy.getSocket().isClosed()) return;
+               DBGPacket.sendPacket(os);
+       }
+
+       public PHPVariable[] getVariables(PHPStackFrame stack) throws IOException, DebugException  {
+               PHPDBGPacket DBGPacket= new PHPDBGPacket(PHPDBGBase.DBGA_REQUEST);
+               PHPDBGFrame DBGFrame1= new PHPDBGFrame(PHPDBGBase.FRAME_EVAL);
+               //PHPDBGFrame DBGFrame2= new PHPDBGFrame(PHPDBGBase.FRAME_RAWDATA);
+       
+               DBGFrame1.addInt(0);                                            // istr = raw data ID
+               DBGFrame1.addInt(1);                                            // scope_id = -1 means current location, 0 never used, +1 first depth
+
+               /*              
+               String evalBlock= new String("$GLOBALS");
+               DBGFrame2.addInt(1);                                            // FRAME_RAWDATA ID
+               DBGFrame2.addInt(evalBlock.length() + 1);       // length of rawdata (+ null char)
+               DBGFrame2.addString(evalBlock);                         // eval block
+               DBGFrame2.addChar('\0');                                        // null char
+               */
+               
+               // Add command data
+               DBGPacket.addFrame(DBGFrame1);
+               
+               if(proxy.getSocket().isClosed()) return null;
+               DBGPacket.sendPacket(os);
+
+               waitResponse(1000);
+               flushAllPackets();
+               
+               // Process serialized variables
+               DBGVariableList= procVars(stack);
+
+               return DBGVariableList;
+       }
+
+       public void evalBlock(String evalString) throws IOException, DebugException  {
+               PHPDBGPacket DBGPacket= new PHPDBGPacket(PHPDBGBase.DBGA_REQUEST);
+               PHPDBGFrame DBGFrame1= new PHPDBGFrame(PHPDBGBase.FRAME_EVAL);
+               PHPDBGFrame DBGFrame2= new PHPDBGFrame(PHPDBGBase.FRAME_RAWDATA);
+
+               rawCounter++;
+               DBGFrame1.addInt(rawCounter);                           // istr = raw data ID
+               DBGFrame1.addInt(1);                                            // scope_id = -1 means current location, 0 never used, +1 first depth
+
+               DBGFrame2.addInt(rawCounter);                           // FRAME_RAWDATA ID
+               DBGFrame2.addInt(evalString.length() + 1);      // length of rawdata (+ null char)
+               DBGFrame2.addString(evalString);                        // eval block
+               DBGFrame2.addChar('\0');                                        // null char
+
+               // Add raw data first
+               DBGPacket.addFrame(DBGFrame2);          
+               // Add command data
+               DBGPacket.addFrame(DBGFrame1);
+               
+               if(proxy.getSocket().isClosed()) return;
+               DBGPacket.sendPacket(os);
+
+               waitResponse(1000);
+               flushAllPackets();
+       }
+
+       public void flushAllPackets() throws IOException {
+               while(readResponse() != 0);
+       }
+
+       public String getModByNo(int modNo) {
+               int i;
+               PHPDBGMod dbg_mod;
+
+               // look for mod
+               for(i=0; i < DBGMods.size(); i++) {
+                       dbg_mod= (PHPDBGMod) DBGMods.get(i);
+                       if(dbg_mod.getNo() == modNo) {
+                               return dbg_mod.getName(); 
+                       }
+               }
+               return "";
+       }
+
+       private int getModByName(String modName) {
+               int i;
+               PHPDBGMod dbg_mod;
+
+               // look for mod
+               for(i=0; i < DBGMods.size(); i++) {
+                       dbg_mod= (PHPDBGMod) DBGMods.get(i);
+                       if(dbg_mod.getName().equalsIgnoreCase(modName)) {
+                               return dbg_mod.getNo(); 
+                       }
+               }
+               return -1;
+       }
+
+       private String getRawFrameData(char[] framesInfo, int frameNo) {
+               int nextFrame= 0;
+               int[] dbg_frame= new int[2];
+               
+               while(nextFrame < framesInfo.length) {
+                       dbg_frame[0] = PHPDBGBase.Char4ToInt(framesInfo, nextFrame);            // frame name
+                       dbg_frame[1] = PHPDBGBase.Char4ToInt(framesInfo, nextFrame + 4);        // frame size
+
+                       nextFrame += 8;
+                       if(dbg_frame[1] == 0) return "";
+
+                       switch(dbg_frame[0]) {
+                               case PHPDBGBase.FRAME_RAWDATA:
+                                       if(frameNo == PHPDBGBase.Char4ToInt(framesInfo, nextFrame)) {
+                                               int toRead= PHPDBGBase.Char4ToInt(framesInfo, nextFrame + 4);
+                                               return String.copyValueOf(framesInfo, nextFrame + 8, toRead);
+                                       }
+                                       break;
+                       }
+                       // go to next frame
+                       nextFrame += dbg_frame[1];
+               }
+               return "";
+       }
+
+       public PHPVariable[] getInstVars(PHPVariable phpVar) throws DebugException {
+               Vector vecVars= new Vector();
+               PHPVariable localPHPVar;
+               int i=0;
+               
+               // already unserialized
+               for(i=0; i < DBGVars.size(); i++) {
+                       localPHPVar= (PHPVariable)DBGVars.get(i);
+                       if(localPHPVar.getParent() == phpVar) {
+                               vecVars.add(localPHPVar);
+                       }
+               }
+               PHPVariable[] arrVars= new PHPVariable[vecVars.size()];
+               arrVars= (PHPVariable[]) vecVars.toArray(arrVars);
+
+               return arrVars;
+       }
+       
+       private PHPVariable[] procVars(PHPStackFrame stack) throws DebugException {
+               Vector vecVars= new Vector();
+               
+               // unserialize
+               finalPos= 0;
+               refCounter= 0;
+               doUnserialize(stack, vecVars, null);
+
+               DBGVars= vecVars;
+               
+               return(getInstVars(null));
+       }
+
+       private String readValue(String serialVars) throws DebugException {
+               int startPos=0, endPos=0, lenStr=0, i=0, elements=0;
+               String ret= new String("");
+
+               switch(serialVars.charAt(0)) {
+                       case 'a':       // associative array, a:elements:{[index][value]...}
+                               typeRead= "hash";
+                               startPos= 1;
+                               endPos= serialVars.indexOf(':', startPos + 1);
+                               if(endPos == -1) return "";
+                               finalPos += endPos + 2;
+                               ret= new String(serialVars.substring(startPos + 1, endPos));
+                               
+                               hasChildren= true;
+                               break;
+                       case 'O':       // object, O:name_len:"name":elements:{[attribute][value]...}
+                               typeRead= "object";
+                               
+                               startPos= 1;
+                               endPos= serialVars.indexOf(':', startPos + 1);
+                               if(endPos == -1) return "";
+                               
+                               // get object class
+                               lenStr= Integer.parseInt(serialVars.substring(startPos + 1, endPos));
+                               startPos= endPos + 2;
+                               endPos= lenStr + startPos;
+                               className= new String(serialVars.substring(startPos, endPos).toString());
+
+                               // get num of elements
+                               startPos= endPos + 1;
+                               endPos= serialVars.indexOf(':', startPos + 1);
+                               if(endPos == -1) return "";
+                               finalPos += endPos + 2;
+                               ret= new String(serialVars.substring(startPos + 1, endPos));
+
+                               isObject= true;
+                               hasChildren= true;                              
+                               break;
+                       case 's':       // string, s:length:"data";
+                               typeRead= "string";
+                               startPos= 1;
+                               endPos= serialVars.indexOf(':', startPos + 1);
+                               if(endPos == -1) return "";
+
+                               lenStr= Integer.parseInt(serialVars.substring(startPos + 1, endPos));
+                               startPos= endPos + 2;
+                               endPos= lenStr + startPos;
+                               ret= new String(serialVars.substring(startPos, endPos).toString());
+                               finalPos += endPos + 2; 
+                               break;
+                       case 'i':       // integer, i:123;
+                               typeRead= "integer";
+                               startPos= 1;
+                               endPos= serialVars.indexOf(';', startPos + 1);
+                               if(endPos == -1) return "";
+
+                               ret= new String(serialVars.substring(startPos + 1, endPos).toString());
+                               finalPos += endPos + 1;
+                               break;
+                       case 'd':       // double (float), d:1.23;
+                               typeRead= "double";
+                               startPos= 1;
+                               endPos= serialVars.indexOf(';', startPos + 1);
+                               if(endPos == -1) return "";
+       
+                               ret= new String(serialVars.substring(startPos + 1, endPos).toString());
+                               finalPos += endPos + 1;
+                               break;
+                       case 'N':       // NULL, N;
+                               typeRead= "null";
+                               ret= "nil";
+                               finalPos += 2;
+                               break;
+                       case 'b':       // bool, b:0 or 1
+                               typeRead= "boolean";
+                               ret= (serialVars.charAt(2) == '1')?"true":"false";
+                               finalPos += endPos + 4;
+                               break;
+                       case 'z':       // resource, z:typename_len:"typename":valres;
+                               typeRead= "resource";
+                               
+                               startPos= 1;
+                               endPos= serialVars.indexOf(':', startPos + 1);
+                               if(endPos == -1) return "";
+               
+                               // get resource type name
+                               lenStr= Integer.parseInt(serialVars.substring(startPos + 1, endPos));
+                               startPos= endPos + 2;
+                               endPos= lenStr + startPos;
+                               className= new String(serialVars.substring(startPos, endPos).toString());
+
+                               // get resource value
+                               startPos= endPos + 1;
+                               endPos= serialVars.indexOf(';', startPos + 1);
+                               if(endPos == -1) return "";
+                               ret= new String(serialVars.substring(startPos + 1, endPos));
+                               finalPos += endPos + 1;
+                               break;
+                       case 'r':
+                       case 'R':
+                               typeRead= "reference";
+                               startPos= 1;
+                               endPos= serialVars.indexOf(';', startPos + 1);
+                               if(endPos == -1) return "0";
+
+                               ret= new String(serialVars.substring(startPos + 1, endPos));
+                               finalPos += endPos + 1;
+                               isRef= true;
+                               break;
+                       case ';':
+                               typeRead= "unknown";
+                               finalPos+= 1;
+                               break;
+                       case '?':
+                               finalPos+= 1;
+                       default:
+                               finalPos+= 1;
+                               typeRead= "unknown";
+                               break;
+               }
+               return ret;
+       }
+
+       private void doUnserialize(PHPStackFrame stack, Vector vecVars, PHPVariable parent) throws DebugException {
+               int i, elements= 0;
+               PHPVariable newVar= null;
+               String value= new String("");
+               String name= new String("");
+               String tmp= new String("");
+               String[] tmpSplit;
+
+               if(finalPos > serGlobals.length() || serGlobals.equals("") || serGlobals.substring(finalPos).equals("")) return;
+
+               isRef= false;
+               hasChildren= false;
+               isObject= false;
+               name= readValue(serGlobals.substring(finalPos));
+               
+               if(hasChildren) {
+                       // main array
+                       if(refCounter == 0) {
+                               value= name;
+                               name= "";
+                       }
+               } else {
+                       hasChildren= false;
+                       isRef= false;
+                       value= readValue(serGlobals.substring(finalPos));
+                       // replaceAll doesn't work, why???
+                       tmpSplit= value.split("\\\\");
+                       value= "";
+                       for(i= 0; i < tmpSplit.length; i++) {
+                               value= value + tmpSplit[i];
+                               if(!tmpSplit[i].equals("")) {
+                                       if(i < (tmpSplit.length - 1)) {
+                                               value= value + "\\";
+                                       }
+                               }
+                       }
+               }
+               
+               if(!name.equals("")) {
+                       if(isRef) {
+                               PHPVariable varPHP;
+                               for(i=0; i < vecVars.size(); i++) {
+                                       varPHP= (PHPVariable) vecVars.get(i);
+                                       if(varPHP.getObjectId().equals(value)) {
+                                               newVar= new PHPVariable(stack, name, "local", true, (PHPValue)varPHP.getValue());
+                                               break;                                          
+                                       }
+                               }
+                               if(newVar == null) {
+                                       newVar= new PHPVariable(stack, name, "local", false, null);
+                               }
+                       } else {
+                               refCounter++;
+                               newVar= new PHPVariable(stack, name, "local", value, typeRead, hasChildren, Integer.toString(refCounter), className);
+                       }
+                       newVar.setParent(parent);
+                       vecVars.add(newVar);
+               }
+               if(hasChildren) {
+                       elements= Integer.parseInt(value);
+                       for(i=0; i < elements; i++)
+                               doUnserialize(stack, vecVars, newVar);
+
+                       // skip "}"
+                       finalPos += 1;
+               }
+       }
+
+       public int readResponse() throws IOException {
+               int bytesToRead=0, nextFrame=0, i=0, cmdReceived=0, stackIndex=0;
+               char[] dbg_header_struct_read= new char[16];
+               int[] dbg_header_struct= new int[4];
+               int[] dbg_bpl_tmp= new int[10];
+               int[] dbg_frame= new int[2];
+               int[] dbg_eval_tmp= new int[3];
+               int[] dbg_src_tree_tmp= new int[4];
+               Vector rawList= new Vector();
+               Vector stackList= new Vector();
+               PHPStackFrame[] newStackList;
+               
+               rawList.clear();
+               stackList.clear();
+               // Read from input
+               while(readInput(dbg_header_struct_read, 16) != 0) {
+                       dbg_header_struct[0] = PHPDBGBase.Char4ToInt(dbg_header_struct_read, 0);
+                       dbg_header_struct[1] = PHPDBGBase.Char4ToInt(dbg_header_struct_read, 4);
+                       dbg_header_struct[2] = PHPDBGBase.Char4ToInt(dbg_header_struct_read, 8);
+                       dbg_header_struct[3] = PHPDBGBase.Char4ToInt(dbg_header_struct_read, 12);
+                       
+                       // Check DBG sync bytes
+                       if(dbg_header_struct[0] != 0x5953) return 0;
+                       
+                       cmdReceived= dbg_header_struct[1];
+                       setLastCmd(cmdReceived);
+                       bytesToRead= dbg_header_struct[3];
+
+                       //System.out.println("Response Received: " + cmdReceived);
+                       char[] entirePack= new char[bytesToRead];
+
+                       if(bytesToRead > 0) {
+                               if(readInput(entirePack, bytesToRead) < bytesToRead) return 0;
+                       }
+                       
+                       // First process frames
+                       nextFrame= 0;
+                       while(nextFrame < bytesToRead) {
+                               dbg_frame[0] = PHPDBGBase.Char4ToInt(entirePack, nextFrame);            // frame name
+                               dbg_frame[1] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 4);        // frame size
+                               nextFrame += 8;
+                               if(dbg_frame[1] == 0) return 0;
+                               switch(dbg_frame[0]) {
+                                       case PHPDBGBase.FRAME_STACK:
+                                               int[] dbg_stack_new= new int[4];
+                                               dbg_stack_new[0] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 0);    // line no
+                                               dbg_stack_new[1] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 4);    // mod no
+                                               dbg_stack_new[2] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 8);    // scope id
+                                               dbg_stack_new[3] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 12);   // id of description string
+
+                                               stackIndex++;
+                                               if(dbg_stack_new[1] != 0) {                                             
+                                                       PHPStackFrame newStack= new PHPStackFrame(null, getModByNo(dbg_stack_new[1]), dbg_stack_new[0], stackIndex, getRawFrameData(entirePack, dbg_stack_new[3]), dbg_stack_new[1]);
+                                                       stackList.add(newStack);
+                                               }
+                                               break;
+                                       case PHPDBGBase.FRAME_SOURCE:
+                                               break;
+                                       case PHPDBGBase.FRAME_SRC_TREE:
+                                               dbg_src_tree_tmp[0] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 0);         // parent_mod_no
+                                               dbg_src_tree_tmp[1] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 4);         // parent_line_no               /* NOT USED */
+                                               dbg_src_tree_tmp[2] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 8);         // mod_no
+                                               dbg_src_tree_tmp[3] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 12);        // imod_name
+
+                                               if(getModByNo(dbg_src_tree_tmp[2]).equals("")) {
+                                                       String fileName= new String(getRawFrameData(entirePack, dbg_src_tree_tmp[3]));
+                                                       // Remove '\0' char
+                                                       if(fileName.length() > 0) fileName= fileName.substring(0, fileName.length() - 1);
+
+                                                       if(dbg_src_tree_tmp[2] != 0) {
+                                                               PHPDBGMod modNew= new PHPDBGMod(dbg_src_tree_tmp[2], fileName);
+                                                               DBGMods.add(modNew);
+                                                       }
+                                               }
+                                               break;
+                                       case PHPDBGBase.FRAME_RAWDATA:
+                                               break;
+                                       case PHPDBGBase.FRAME_ERROR:
+                                               break;
+                                       case PHPDBGBase.FRAME_EVAL:
+                                               String evalString= new String("");
+                                               dbg_eval_tmp[0] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 0); // istr
+                                               dbg_eval_tmp[1] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 4); // iresult
+                                               dbg_eval_tmp[2] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 8); // ierror
+
+                                               evalRet= getRawFrameData(entirePack, dbg_eval_tmp[1]);
+                                               evalString= getRawFrameData(entirePack, dbg_eval_tmp[0]);
+                                               serGlobals= evalRet;
+                                               break;
+                                       case PHPDBGBase.FRAME_BPS:
+                                               break;
+                                       case PHPDBGBase.FRAME_BPL:
+                                               int[] dbg_bpl_new= new int[10];
+                                               dbg_bpl_new[0] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 0);
+                                               dbg_bpl_new[1] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 4);
+                                               dbg_bpl_new[2] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 8);
+                                               dbg_bpl_new[3] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 12);
+                                               dbg_bpl_new[4] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 16);
+                                               dbg_bpl_new[5] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 20);
+                                               dbg_bpl_new[6] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 24);
+                                               dbg_bpl_new[7] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 28);
+                                               dbg_bpl_new[8] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 32);
+                                               dbg_bpl_new[9] = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 36);
+       
+                                               // look if breakpoint already exists in vector
+                                               for(i=0; i < DBGBPList.size(); i++) {
+                                                       dbg_bpl_tmp= (int[]) DBGBPList.get(i);
+                                                       if(dbg_bpl_tmp[8] == dbg_bpl_new[8]) {
+                                                               DBGBPList.remove(i);
+                                                               break;
+                                                       }
+                                               }
+
+                                               // add breakpoint to vector
+                                               DBGBPList.add(dbg_bpl_new);
+                                               copyToLastBP(dbg_bpl_new);
+                                               
+                                               // mod no returned?
+                                               if(getModByNo(dbg_bpl_new[0]).equals("")) {
+                                                       String fileName= new String(getRawFrameData(entirePack, dbg_bpl_new[2]));
+                                                       // Remove '\0' char
+                                                       if(fileName.length() > 0) fileName= fileName.substring(0, fileName.length() - 1);
+                                                       if(dbg_bpl_new[0] != 0) {
+                                                               PHPDBGMod modNew= new PHPDBGMod(dbg_bpl_new[0], fileName);
+                                                               DBGMods.add(modNew);
+                                                       }
+                                               }                                                       
+                                               break;
+                                       case PHPDBGBase.FRAME_VER:
+                                               break;
+                                       case PHPDBGBase.FRAME_SID:
+                                         sid = PHPDBGBase.Char4ToInt(entirePack, nextFrame + 0);
+                                               break;
+                                       case PHPDBGBase.FRAME_SRCLINESINFO:
+                                               break;
+                                       case PHPDBGBase.FRAME_SRCCTXINFO:
+                                               break;
+                                       case PHPDBGBase.FRAME_LOG:
+                                               break;
+                                       case PHPDBGBase.FRAME_PROF:
+                                               break;
+                                       case PHPDBGBase.FRAME_PROF_C:
+                                               break;
+                                       case PHPDBGBase.FRAME_SET_OPT:
+                                               break;
+                               }
+                               // go to next frame
+                               nextFrame += dbg_frame[1];
+                       }
+                       
+                       // Now process command
+                       switch(cmdReceived) {
+                               case PHPDBGBase.DBGC_REPLY:
+                                       break;
+                               case PHPDBGBase.DBGC_STARTUP:
+                                       break;
+                               case PHPDBGBase.DBGC_END:
+                                       sessionEnded= true;
+                                       break;
+                               case PHPDBGBase.DBGC_BREAKPOINT:
+                                       newStackList= new PHPStackFrame[stackList.size()];
+                                       newStackList= (PHPStackFrame[]) stackList.toArray(newStackList);
+                                       DBGStackList= newStackList;
+                                       BPUnderHit= getBPUnderHit();
+                                       break;
+                               case PHPDBGBase.DBGC_STEPINTO_DONE:
+                               case PHPDBGBase.DBGC_STEPOVER_DONE:
+                               case PHPDBGBase.DBGC_STEPOUT_DONE:
+                               case PHPDBGBase.DBGC_EMBEDDED_BREAK:
+                                       BPUnderHit= 1;
+                                       newStackList= new PHPStackFrame[stackList.size()];
+                                       newStackList= (PHPStackFrame[]) stackList.toArray(newStackList);
+                                       DBGStackList= newStackList;
+                                       break;
+                               case PHPDBGBase.DBGC_ERROR:
+                                       newStackList= new PHPStackFrame[stackList.size()];
+                                       newStackList= (PHPStackFrame[]) stackList.toArray(newStackList);
+                                       DBGStackList= newStackList;
+                                       break;
+                               case PHPDBGBase.DBGC_LOG:
+                                       break;
+                               case PHPDBGBase.DBGC_SID:
+                                       break;
+                               case PHPDBGBase.DBGC_PAUSE:
+                                       break;
+                       }
+               }
+
+               return cmdReceived;
+       }
+
+       public PHPStackFrame[] getStackList() {
+               return DBGStackList;
+       }
+
+       private int readInput(char[] buffer, int bytes) throws IOException {
+               int bytesRead= 0;
+
+               for(int i=0; i < bytes; i++) {
+                       if(in.ready()) {
+                               buffer[i]= (char) (in.read() & 0x00FF);
+                               bytesRead++;
+                       }
+                       else
+                               break;                          
+               }
+               return bytesRead;
+       }
+       
+       public void setShouldStop() {
+               this.shouldStop= true;
+       }
+
+       public boolean waitResponse(long milliseconds) throws IOException {
+               long timeout= System.currentTimeMillis() + milliseconds;
+               while(System.currentTimeMillis() < timeout) {
+                       if(in.ready() || shouldStop) {
+                               break;
+                       }
+               }
+               return in.ready();
+       }
+}
\ No newline at end of file
diff --git a/net.sourceforge.phpeclipse.debug.core/src/net/sourceforge/phpdt/internal/debug/core/.#PHPDBGProxy.java.1.3 b/net.sourceforge.phpeclipse.debug.core/src/net/sourceforge/phpdt/internal/debug/core/.#PHPDBGProxy.java.1.3
new file mode 100644 (file)
index 0000000..dd3b8f6
--- /dev/null
@@ -0,0 +1,433 @@
+/**********************************************************************
+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.debug.core;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.net.Socket;
+import java.net.ServerSocket;
+import java.net.SocketTimeoutException;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.debug.core.DebugPlugin;
+import org.eclipse.debug.core.DebugException;
+import org.eclipse.debug.core.model.IBreakpoint;
+import net.sourceforge.phpdt.internal.debug.core.model.IPHPDebugTarget;
+import net.sourceforge.phpdt.internal.debug.core.model.PHPStackFrame;
+import net.sourceforge.phpdt.internal.debug.core.model.PHPThread;
+import net.sourceforge.phpdt.internal.debug.core.model.PHPVariable;
+import net.sourceforge.phpdt.internal.debug.core.breakpoints.PHPLineBreakpoint;
+
+public class PHPDBGProxy {
+
+       private ServerSocket server= null;
+       private Socket socket;
+       private BufferedReader reader= null;
+       private PHPDBGInterface DBGInt= null;
+       private IPHPDebugTarget debugTarget= null;
+       private PHPLoop phpLoop;
+       private PHPThread PHPMainThread;
+       private PHPDBGProxy thisProxy= null;
+       private int port;
+       private boolean remote;
+       private IPath remoteSourcePath;
+
+       public PHPDBGProxy() {
+               thisProxy= this;
+       }
+
+       public PHPDBGProxy(boolean remote,String remoteSourcePath) {
+               thisProxy= this;
+               this.remote=remote;
+               this.remoteSourcePath= new Path(remoteSourcePath);
+       }
+
+       public void start() {
+               createServerSocket();
+               this.startPHPLoop();
+       }
+
+       public void stop() {
+               phpLoop.setShouldStop();
+               if(DBGInt != null) DBGInt.setShouldStop();
+               phpLoop.notifyWait();
+       }
+
+       protected ServerSocket getServerSocket() throws IOException {
+               if (server == null) {
+                       createServerSocket();
+               }
+               return server;
+       }
+
+       protected void createServerSocket() {
+//             port = SocketUtil.findUnusedLocalPort("localhost", 10001, 10101);
+    port =     10001;
+               if (port == -1) {
+                       PHPDebugCorePlugin.log(5, "Cannot find free port!!!!");
+                       return;
+               }
+               try {
+                       if (server == null) {
+                               server = new ServerSocket(port);
+                               //System.out.println("ServerSocket on port: " + port);
+                       } 
+               } catch (IOException e) {
+                       // IO Error
+                       PHPDebugCorePlugin.log(e);
+                       stop();
+               }
+       }
+
+       public Socket getSocket() throws IOException {
+               return socket;
+       }
+
+       protected void setDBGInterface(PHPDBGInterface DBGInt) {
+               this.DBGInt= DBGInt;
+       }
+
+       public BufferedReader getReader() throws IOException {
+               if (reader == null) {                   
+                       reader = new BufferedReader(new InputStreamReader(this.getSocket().getInputStream(), "ISO8859_1"));
+               }
+               return reader;
+       }
+       
+       public BufferedReader getReader(Socket socket) throws IOException {
+               if (socket != null)
+                 return new BufferedReader(new InputStreamReader(socket.getInputStream(), "ISO8859_1"));
+               else
+                 return null;
+       }
+
+       public OutputStream getOutputStream() throws IOException {
+               return this.getSocket().getOutputStream();
+       }
+
+       protected void setBreakPoints() throws IOException, CoreException {
+               IBreakpoint[] breakpoints = DebugPlugin.getDefault().getBreakpointManager().getBreakpoints();
+               for (int i = 0; i < breakpoints.length; i++) {
+                       addBreakpoint(breakpoints[i]);
+               }
+       }
+
+       public void addBreakpoint(IBreakpoint breakpoint) {
+               if (DBGInt == null) return;
+               int bpNo= 0;
+               try {
+                       PHPLineBreakpoint phpLBP;
+                       if(breakpoint.getModelIdentifier() == PHPDebugCorePlugin.getDefault().getDescriptor().getUniqueIdentifier()) {
+                               IPath filename;
+                               phpLBP= (PHPLineBreakpoint)breakpoint;
+                               //                              bpNo= DBGInt.addBreakpoint(phpLBP.getMarker().getResource().getLocation().toOSString(), phpLBP.getLineNumber());
+                               if (remote)
+                                       filename=remoteSourcePath.append(phpLBP.getMarker().getResource().getProjectRelativePath());
+                               else
+                                       filename=phpLBP.getMarker().getResource().getLocation();
+                               bpNo= DBGInt.addBreakpoint(filename.toOSString(), phpLBP.getLineNumber());
+                               phpLBP.setDBGBpNo(bpNo);
+                       }
+               } catch (IOException e) {
+                       PHPDebugCorePlugin.log(e);
+                       stop();
+               } catch (CoreException e) {
+                       PHPDebugCorePlugin.log(e);
+                       stop();
+               }
+       }
+
+       public void removeBreakpoint(IBreakpoint breakpoint) {
+               if (DBGInt == null) return;
+               try {
+                       PHPLineBreakpoint phpLBP;
+                       if(breakpoint.getModelIdentifier() == PHPDebugCorePlugin.getDefault().getDescriptor().getUniqueIdentifier()) {
+                               phpLBP= (PHPLineBreakpoint)breakpoint;
+                               IPath filename;
+                               if (remote)
+                                       filename=remoteSourcePath.append(phpLBP.getMarker().getResource().getProjectRelativePath());
+                               else
+                                       filename=phpLBP.getMarker().getResource().getLocation();
+//                                     bpNo= DBGInt.addBreakpoint(filename.toOSString(), phpLBP.getLineNumber());                              
+                               DBGInt.removeBreakpoint(filename.toOSString(), phpLBP.getLineNumber(), phpLBP.getDBGBpNo());
+                       }
+               } catch (IOException e) {
+                       PHPDebugCorePlugin.log(e);
+                       stop();
+               } catch (CoreException e) {
+                       PHPDebugCorePlugin.log(e);
+                       stop();
+               }
+       }
+
+       public void startPHPLoop() {
+               phpLoop = new PHPLoop();
+               phpLoop.start();
+       }
+
+       public void resume(PHPThread thread) {
+               try {
+                       DBGInt.continueExecution();
+                       phpLoop.notifyWait();
+               } catch (IOException e) {
+                       PHPDebugCorePlugin.log(e);
+                       stop();
+               }
+       }
+
+       protected IPHPDebugTarget getDebugTarget() {
+               return debugTarget;
+       }
+
+       public void setDebugTarget(IPHPDebugTarget debugTarget) {
+               this.debugTarget = debugTarget;
+               debugTarget.setPHPDBGProxy(this);
+       }
+
+       public PHPVariable[] readVariables(PHPStackFrame frame) {
+               try {
+                       return DBGInt.getVariables(frame);
+               } catch (IOException ioex) {
+                       ioex.printStackTrace();
+                       throw new RuntimeException(ioex.getMessage());
+               } catch (DebugException ex) {
+                       ex.printStackTrace();
+                       throw new RuntimeException(ex.getMessage());
+               }
+       }
+
+       public PHPVariable[] readInstanceVariables(PHPVariable variable) {
+               try {
+                       return DBGInt.getInstVars(variable);
+               } catch (DebugException ex) {
+                       ex.printStackTrace();
+                       throw new RuntimeException(ex.getMessage());
+               }
+
+       }
+
+       public void readStepOverEnd(PHPStackFrame stackFrame) {
+               try {
+                       DBGInt.stepOver();
+                       phpLoop.notifyWait();
+               } catch (Exception e) {
+                       PHPDebugCorePlugin.log(e);
+               }
+       }
+
+       public void readStepReturnEnd(PHPStackFrame stackFrame) {
+               try {
+                       DBGInt.stepOut();
+                       phpLoop.notifyWait();
+               } catch (Exception e) {
+                       PHPDebugCorePlugin.log(e);
+               }
+       }
+
+       public void readStepIntoEnd(PHPStackFrame stackFrame) {
+               try {
+                       DBGInt.stepInto();
+                       phpLoop.notifyWait();
+               } catch (Exception e) {
+                       PHPDebugCorePlugin.log(e);
+               }
+       }
+
+/*
+       public PHPStackFrame[] readFrames(PHPThread thread) {
+               //try {
+                       //this.println("th " + thread.getId() + " ; f ");
+                       //return new FramesReader(getMultiReaderStrategy()).readFrames(thread);
+                       return null;
+               //} catch (IOException e) {
+               //      PHPDebugCorePlugin.log(e);
+               //      return null;
+               //}
+
+       }
+*/
+       
+       public void closeSocket() throws IOException {
+               if (socket != null) {
+                       socket.close();
+               }
+       }
+
+       public void closeServerSocket() throws IOException {
+               if (server != null) {
+                       server.close();
+               }
+       }
+
+       public int getPort() {
+               return port;
+       }
+
+       class PHPLoop extends Thread {
+               private boolean shouldStop;
+       
+               public PHPLoop() {
+                       shouldStop = false;
+                       this.setName("PHPDebuggerLoop");
+               }
+
+               public synchronized void setShouldStop() {
+                       shouldStop = true;
+               }
+
+               public synchronized void notifyWait() {
+                       notify();
+               }
+
+               public void run() {
+                       try {
+                               char[] buf= new char[16];
+                               int i, pos, timeout;
+                               long interval= 200; // 200ms
+                               String line;
+                               PHPStackFrame[] StackList;
+                               boolean endFile=false;
+                               boolean newconnect=false;
+                               Socket newSocket=null;
+                               PHPDBGInterface newDBGInt;
+                               int sid=-1;
+                               
+                               PHPMainThread = new PHPThread(getDebugTarget(), getPort());
+                               PHPMainThread.setName("Thread [main]");
+                               timeout = 0;
+                               while ((getDebugTarget() == null) && (timeout < 100)) {
+                                       sleep(100);
+                                       timeout++;
+                               }
+                               // Be sure debug target is set
+                               PHPMainThread.setDebugTarget(getDebugTarget());
+                               getDebugTarget().addThread(PHPMainThread);
+                               
+                               //System.out.println("Waiting for breakpoints.");       
+                               while (!shouldStop)     
+                               {       
+                                       newconnect=true;
+               try {
+                 newSocket = server.accept();
+                //System.out.println("Accepted! : " + socket.toString());
+               } catch (SocketTimeoutException e) {
+                                               // no one wants to connect
+                                               newconnect=false;
+                   } catch (IOException e) {
+               PHPDebugCorePlugin.log(e);
+             return;
+             }
+       
+                                       if (newconnect)
+                                       {
+                                               if (DBGInt==null)
+                                                       server.setSoTimeout(1);
+                                               newDBGInt= new PHPDBGInterface(getReader(newSocket), newSocket.getOutputStream(), thisProxy);
+                                               newDBGInt.waitResponse(1000);
+                 newDBGInt.flushAllPackets();
+                                               // Check version and session ID
+                 if ((DBGInt==null) || (DBGInt.getSID()==newDBGInt.getSID()))
+                 {
+                       DBGInt=newDBGInt;
+                                                       try     {
+                                                               closeSocket();
+                                                       }       catch (IOException e) {
+                                                               PHPDebugCorePlugin.log(e);
+                                                               shouldStop=true;
+                                                       }
+                       socket=newSocket;
+                                                       setBreakPoints();
+                                                       DBGInt.continueExecution();                     
+                 } else
+                 {
+                                                       newDBGInt.continueExecution();
+                       newSocket.close();
+                 }
+                                       }
+
+               if(DBGInt.waitResponse(interval))
+               {
+               
+               DBGInt.flushAllPackets();
+
+               if (DBGInt.BPUnderHit != 0) {
+                       StackList = DBGInt.getStackList();
+                       if (StackList.length > 0) {
+                       for (i = 0; i < StackList.length; i++) {
+                               StackList[i].setThread(PHPMainThread);
+                               if (DBGInt.getModByNo(StackList[i].getModNo()).equals("")) {
+                               DBGInt.getSourceTree();
+                               }
+                               StackList[i].setFile(
+                               DBGInt.getModByNo(StackList[i].getModNo()));
+                       }
+                       PHPMainThread.setStackFrames(StackList);
+                       }
+                       // Fire debug event
+                       PHPMainThread.suspend();
+
+                       synchronized (this) {
+                       wait();
+                       }
+               }
+               }
+          if (remote) {
+               if (PHPMainThread.isTerminated())
+               {
+                       shouldStop=true;
+                       break;
+               }
+          } else {
+               if (PHPMainThread.isTerminated() || getDebugTarget().getProcess().isTerminated())
+               {
+                                                       shouldStop=true;
+                                                       break;                   
+               }
+          }
+//             if (DBGInt.getLastCmd()==PHPDBGBase.DBGC_LOG)
+//                     endFile=true;
+//             }
+//             try
+//             {
+//                                             closeSocket();
+//             }
+//                                     catch (IOException e) {
+//                                             PHPDebugCorePlugin.log(e);
+//                                             shouldStop=true;
+//                                     }
+//             endFile=false;
+                               }
+       } 
+       catch (Exception ex) {
+       PHPDebugCorePlugin.log(ex);
+       System.out.println(ex);
+       } 
+       finally {
+               try {
+               getDebugTarget().terminate();
+               closeSocket();
+               closeServerSocket();
+               }
+               catch (IOException e) {
+               PHPDebugCorePlugin.log(e);
+               return;
+       }
+        //System.out.println("Socket loop finished.");
+       }
+               }
+       }       
+}
diff --git a/net.sourceforge.phpeclipse.debug.core/temp.folder/core.jar.bin.log b/net.sourceforge.phpeclipse.debug.core/temp.folder/core.jar.bin.log
new file mode 100644 (file)
index 0000000..761d107
--- /dev/null
@@ -0,0 +1,12 @@
+----------
+1. ERROR in D:\Development\eclipse\workspace\net.sourceforge.phpeclipse.debug.core\src\net\sourceforge\phpdt\internal\debug\core\PHPDebugCorePlugin.java (at line 3)
+       import net.sourceforge.phpeclipse.PHPeclipsePlugin;
+              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+The import net.sourceforge.phpeclipse cannot be resolved
+----------
+2. ERROR in D:\Development\eclipse\workspace\net.sourceforge.phpeclipse.debug.core\src\net\sourceforge\phpdt\internal\debug\core\PHPDebugCorePlugin.java (at line 38)
+       return PHPeclipsePlugin.getWorkspace();
+              ^^^^^^^^^^^^^^^^
+PHPeclipsePlugin cannot be resolved
+----------
+2 problems (2 errors)