diff --git a/gb.instrument/conf/META-INF/MANIFEST.MF b/gb.instrument/conf/META-INF/MANIFEST.MF
deleted file mode 100644
index c8cb591..0000000
--- a/gb.instrument/conf/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,5 +0,0 @@
-Manifest-Version: 1.0
-Premain-Class: gb.instrument.agent.Agent
-Agent-Class: gb.instrument.agent.Agent
-Can-Redefine-Classes: true
-
diff --git a/org.intrace/.classpath b/org.intrace/.classpath
new file mode 100644
index 0000000..6934935
--- /dev/null
+++ b/org.intrace/.classpath
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/org.intrace/.project b/org.intrace/.project
new file mode 100644
index 0000000..08a22b2
--- /dev/null
+++ b/org.intrace/.project
@@ -0,0 +1,19 @@
+
+
+ org.intrace
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jem.workbench.JavaEMFNature
+ org.eclipse.jdt.core.javanature
+ org.eclipse.jem.beaninfo.BeanInfoNature
+
+
diff --git a/org.intrace/.settings/org.eclipse.jdt.core.prefs b/org.intrace/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..1b2e8b9
--- /dev/null
+++ b/org.intrace/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Thu Nov 05 12:58:44 GMT 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/org.intrace/bin/org/intrace/agent/Agent.class b/org.intrace/bin/org/intrace/agent/Agent.class
new file mode 100644
index 0000000..1e443b1
Binary files /dev/null and b/org.intrace/bin/org/intrace/agent/Agent.class differ
diff --git a/org.intrace/bin/org/intrace/agent/AgentConfigConstants.class b/org.intrace/bin/org/intrace/agent/AgentConfigConstants.class
new file mode 100644
index 0000000..25f4672
Binary files /dev/null and b/org.intrace/bin/org/intrace/agent/AgentConfigConstants.class differ
diff --git a/org.intrace/bin/org/intrace/agent/AgentHelper.class b/org.intrace/bin/org/intrace/agent/AgentHelper.class
new file mode 100644
index 0000000..8f96c25
Binary files /dev/null and b/org.intrace/bin/org/intrace/agent/AgentHelper.class differ
diff --git a/org.intrace/bin/org/intrace/agent/AgentSettings.class b/org.intrace/bin/org/intrace/agent/AgentSettings.class
new file mode 100644
index 0000000..2ef5c83
Binary files /dev/null and b/org.intrace/bin/org/intrace/agent/AgentSettings.class differ
diff --git a/org.intrace/bin/org/intrace/agent/ClassBranchLineAnalysis.class b/org.intrace/bin/org/intrace/agent/ClassBranchLineAnalysis.class
new file mode 100644
index 0000000..3b67a85
Binary files /dev/null and b/org.intrace/bin/org/intrace/agent/ClassBranchLineAnalysis.class differ
diff --git a/org.intrace/bin/org/intrace/agent/ClassTransformer.class b/org.intrace/bin/org/intrace/agent/ClassTransformer.class
new file mode 100644
index 0000000..eccf940
Binary files /dev/null and b/org.intrace/bin/org/intrace/agent/ClassTransformer.class differ
diff --git a/org.intrace/bin/org/intrace/agent/InstrumentedClassWriter.class b/org.intrace/bin/org/intrace/agent/InstrumentedClassWriter.class
new file mode 100644
index 0000000..a2d5b25
Binary files /dev/null and b/org.intrace/bin/org/intrace/agent/InstrumentedClassWriter.class differ
diff --git a/org.intrace/bin/org/intrace/agent/InstrumentedMethodWriter$TraceType.class b/org.intrace/bin/org/intrace/agent/InstrumentedMethodWriter$TraceType.class
new file mode 100644
index 0000000..7bb08e6
Binary files /dev/null and b/org.intrace/bin/org/intrace/agent/InstrumentedMethodWriter$TraceType.class differ
diff --git a/org.intrace/bin/org/intrace/agent/InstrumentedMethodWriter.class b/org.intrace/bin/org/intrace/agent/InstrumentedMethodWriter.class
new file mode 100644
index 0000000..c7c091c
Binary files /dev/null and b/org.intrace/bin/org/intrace/agent/InstrumentedMethodWriter.class differ
diff --git a/org.intrace/bin/org/intrace/agent/server/AgentServer.class b/org.intrace/bin/org/intrace/agent/server/AgentServer.class
new file mode 100644
index 0000000..13b24f6
Binary files /dev/null and b/org.intrace/bin/org/intrace/agent/server/AgentServer.class differ
diff --git a/org.intrace/bin/org/intrace/agent/server/AgentServerConnection.class b/org.intrace/bin/org/intrace/agent/server/AgentServerConnection.class
new file mode 100644
index 0000000..1d5f290
Binary files /dev/null and b/org.intrace/bin/org/intrace/agent/server/AgentServerConnection.class differ
diff --git a/org.intrace/bin/org/intrace/client/cui/AgentLoader.class b/org.intrace/bin/org/intrace/client/cui/AgentLoader.class
new file mode 100644
index 0000000..a191e03
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/cui/AgentLoader.class differ
diff --git a/org.intrace/bin/org/intrace/client/cui/TraceClient.class b/org.intrace/bin/org/intrace/client/cui/TraceClient.class
new file mode 100644
index 0000000..cc03d92
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/cui/TraceClient.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/ConnectionDetails$1.class b/org.intrace/bin/org/intrace/client/gui/ConnectionDetails$1.class
new file mode 100644
index 0000000..2c72340
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/ConnectionDetails$1.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/ConnectionDetails$2.class b/org.intrace/bin/org/intrace/client/gui/ConnectionDetails$2.class
new file mode 100644
index 0000000..dbe8e1d
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/ConnectionDetails$2.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/ConnectionDetails$3.class b/org.intrace/bin/org/intrace/client/gui/ConnectionDetails$3.class
new file mode 100644
index 0000000..ded5bb0
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/ConnectionDetails$3.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/ConnectionDetails$4.class b/org.intrace/bin/org/intrace/client/gui/ConnectionDetails$4.class
new file mode 100644
index 0000000..6f364c7
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/ConnectionDetails$4.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/ConnectionDetails$5$1$1.class b/org.intrace/bin/org/intrace/client/gui/ConnectionDetails$5$1$1.class
new file mode 100644
index 0000000..39c4bb1
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/ConnectionDetails$5$1$1.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/ConnectionDetails$5$1$2.class b/org.intrace/bin/org/intrace/client/gui/ConnectionDetails$5$1$2.class
new file mode 100644
index 0000000..e2c6760
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/ConnectionDetails$5$1$2.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/ConnectionDetails$5$1.class b/org.intrace/bin/org/intrace/client/gui/ConnectionDetails$5$1.class
new file mode 100644
index 0000000..464bacf
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/ConnectionDetails$5$1.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/ConnectionDetails$5.class b/org.intrace/bin/org/intrace/client/gui/ConnectionDetails$5.class
new file mode 100644
index 0000000..86cfd21
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/ConnectionDetails$5.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/ConnectionDetails.class b/org.intrace/bin/org/intrace/client/gui/ConnectionDetails.class
new file mode 100644
index 0000000..c2143cf
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/ConnectionDetails.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/ParsedSettingsData.class b/org.intrace/bin/org/intrace/client/gui/ParsedSettingsData.class
new file mode 100644
index 0000000..8cb21ef
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/ParsedSettingsData.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/RegexInput$1.class b/org.intrace/bin/org/intrace/client/gui/RegexInput$1.class
new file mode 100644
index 0000000..35d23e3
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/RegexInput$1.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/RegexInput$2.class b/org.intrace/bin/org/intrace/client/gui/RegexInput$2.class
new file mode 100644
index 0000000..3693622
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/RegexInput$2.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/RegexInput$3.class b/org.intrace/bin/org/intrace/client/gui/RegexInput$3.class
new file mode 100644
index 0000000..ca19d20
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/RegexInput$3.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/RegexInput.class b/org.intrace/bin/org/intrace/client/gui/RegexInput.class
new file mode 100644
index 0000000..22a8731
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/RegexInput.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/TraceClient.class b/org.intrace/bin/org/intrace/client/gui/TraceClient.class
new file mode 100644
index 0000000..f984324
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/TraceClient.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/TraceWindow$1.class b/org.intrace/bin/org/intrace/client/gui/TraceWindow$1.class
new file mode 100644
index 0000000..eac412e
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/TraceWindow$1.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/TraceWindow$10.class b/org.intrace/bin/org/intrace/client/gui/TraceWindow$10.class
new file mode 100644
index 0000000..4b3fd00
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/TraceWindow$10.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/TraceWindow$11.class b/org.intrace/bin/org/intrace/client/gui/TraceWindow$11.class
new file mode 100644
index 0000000..8ae1d31
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/TraceWindow$11.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/TraceWindow$12.class b/org.intrace/bin/org/intrace/client/gui/TraceWindow$12.class
new file mode 100644
index 0000000..74f397b
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/TraceWindow$12.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/TraceWindow$13.class b/org.intrace/bin/org/intrace/client/gui/TraceWindow$13.class
new file mode 100644
index 0000000..12fdb57
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/TraceWindow$13.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/TraceWindow$14$1$1.class b/org.intrace/bin/org/intrace/client/gui/TraceWindow$14$1$1.class
new file mode 100644
index 0000000..170ea47
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/TraceWindow$14$1$1.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/TraceWindow$14$1.class b/org.intrace/bin/org/intrace/client/gui/TraceWindow$14$1.class
new file mode 100644
index 0000000..b1bf7c5
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/TraceWindow$14$1.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/TraceWindow$14.class b/org.intrace/bin/org/intrace/client/gui/TraceWindow$14.class
new file mode 100644
index 0000000..83d0b17
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/TraceWindow$14.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/TraceWindow$15$1$1.class b/org.intrace/bin/org/intrace/client/gui/TraceWindow$15$1$1.class
new file mode 100644
index 0000000..04f9ce9
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/TraceWindow$15$1$1.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/TraceWindow$15$1.class b/org.intrace/bin/org/intrace/client/gui/TraceWindow$15$1.class
new file mode 100644
index 0000000..5e29b12
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/TraceWindow$15$1.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/TraceWindow$15.class b/org.intrace/bin/org/intrace/client/gui/TraceWindow$15.class
new file mode 100644
index 0000000..0a9f4f4
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/TraceWindow$15.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/TraceWindow$16.class b/org.intrace/bin/org/intrace/client/gui/TraceWindow$16.class
new file mode 100644
index 0000000..141bd2d
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/TraceWindow$16.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/TraceWindow$17$1.class b/org.intrace/bin/org/intrace/client/gui/TraceWindow$17$1.class
new file mode 100644
index 0000000..c7584f3
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/TraceWindow$17$1.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/TraceWindow$17.class b/org.intrace/bin/org/intrace/client/gui/TraceWindow$17.class
new file mode 100644
index 0000000..3fab679
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/TraceWindow$17.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/TraceWindow$18$1$1.class b/org.intrace/bin/org/intrace/client/gui/TraceWindow$18$1$1.class
new file mode 100644
index 0000000..8ef6505
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/TraceWindow$18$1$1.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/TraceWindow$18$1.class b/org.intrace/bin/org/intrace/client/gui/TraceWindow$18$1.class
new file mode 100644
index 0000000..2c8ace7
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/TraceWindow$18$1.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/TraceWindow$18.class b/org.intrace/bin/org/intrace/client/gui/TraceWindow$18.class
new file mode 100644
index 0000000..ebb056f
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/TraceWindow$18.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/TraceWindow$2.class b/org.intrace/bin/org/intrace/client/gui/TraceWindow$2.class
new file mode 100644
index 0000000..79aaf9a
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/TraceWindow$2.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/TraceWindow$3.class b/org.intrace/bin/org/intrace/client/gui/TraceWindow$3.class
new file mode 100644
index 0000000..663dfde
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/TraceWindow$3.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/TraceWindow$4.class b/org.intrace/bin/org/intrace/client/gui/TraceWindow$4.class
new file mode 100644
index 0000000..e5266f8
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/TraceWindow$4.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/TraceWindow$5.class b/org.intrace/bin/org/intrace/client/gui/TraceWindow$5.class
new file mode 100644
index 0000000..688612d
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/TraceWindow$5.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/TraceWindow$6.class b/org.intrace/bin/org/intrace/client/gui/TraceWindow$6.class
new file mode 100644
index 0000000..d4b88f5
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/TraceWindow$6.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/TraceWindow$7.class b/org.intrace/bin/org/intrace/client/gui/TraceWindow$7.class
new file mode 100644
index 0000000..6f455f9
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/TraceWindow$7.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/TraceWindow$8.class b/org.intrace/bin/org/intrace/client/gui/TraceWindow$8.class
new file mode 100644
index 0000000..e0e74c6
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/TraceWindow$8.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/TraceWindow$9.class b/org.intrace/bin/org/intrace/client/gui/TraceWindow$9.class
new file mode 100644
index 0000000..99e014d
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/TraceWindow$9.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/TraceWindow$NetworkTraceThread$1.class b/org.intrace/bin/org/intrace/client/gui/TraceWindow$NetworkTraceThread$1.class
new file mode 100644
index 0000000..bd9f1fc
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/TraceWindow$NetworkTraceThread$1.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/TraceWindow$NetworkTraceThread.class b/org.intrace/bin/org/intrace/client/gui/TraceWindow$NetworkTraceThread.class
new file mode 100644
index 0000000..e90f494
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/TraceWindow$NetworkTraceThread.class differ
diff --git a/org.intrace/bin/org/intrace/client/gui/TraceWindow.class b/org.intrace/bin/org/intrace/client/gui/TraceWindow.class
new file mode 100644
index 0000000..585f5ba
Binary files /dev/null and b/org.intrace/bin/org/intrace/client/gui/TraceWindow.class differ
diff --git a/org.intrace/bin/org/intrace/output/IOutput.class b/org.intrace/bin/org/intrace/output/IOutput.class
new file mode 100644
index 0000000..da41dc4
Binary files /dev/null and b/org.intrace/bin/org/intrace/output/IOutput.class differ
diff --git a/org.intrace/bin/org/intrace/output/trace/NetworkTraceThread.class b/org.intrace/bin/org/intrace/output/trace/NetworkTraceThread.class
new file mode 100644
index 0000000..423d95c
Binary files /dev/null and b/org.intrace/bin/org/intrace/output/trace/NetworkTraceThread.class differ
diff --git a/org.intrace/bin/org/intrace/output/trace/TraceConfigConstants.class b/org.intrace/bin/org/intrace/output/trace/TraceConfigConstants.class
new file mode 100644
index 0000000..feacc2a
Binary files /dev/null and b/org.intrace/bin/org/intrace/output/trace/TraceConfigConstants.class differ
diff --git a/org.intrace/bin/org/intrace/output/trace/TraceOutput.class b/org.intrace/bin/org/intrace/output/trace/TraceOutput.class
new file mode 100644
index 0000000..c99d703
Binary files /dev/null and b/org.intrace/bin/org/intrace/output/trace/TraceOutput.class differ
diff --git a/org.intrace/bin/org/intrace/output/trace/TraceSettings.class b/org.intrace/bin/org/intrace/output/trace/TraceSettings.class
new file mode 100644
index 0000000..8688341
Binary files /dev/null and b/org.intrace/bin/org/intrace/output/trace/TraceSettings.class differ
diff --git a/org.intrace/build.xml b/org.intrace/build.xml
new file mode 100644
index 0000000..ce4e6ed
--- /dev/null
+++ b/org.intrace/build.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/org.intrace/conf/META-INF/MANIFEST.MF b/org.intrace/conf/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..afdb785
--- /dev/null
+++ b/org.intrace/conf/META-INF/MANIFEST.MF
@@ -0,0 +1,5 @@
+Manifest-Version: 1.0
+Premain-Class: org.intrace.agent.Agent
+Agent-Class: org.intrace.agent.Agent
+Can-Redefine-Classes: true
+
diff --git a/org.intrace/lib/asm-2.2.3.jar b/org.intrace/lib/asm-2.2.3.jar
new file mode 100644
index 0000000..2c47471
Binary files /dev/null and b/org.intrace/lib/asm-2.2.3.jar differ
diff --git a/org.intrace/lib/asm-commons-2.2.3.jar b/org.intrace/lib/asm-commons-2.2.3.jar
new file mode 100644
index 0000000..fac3140
Binary files /dev/null and b/org.intrace/lib/asm-commons-2.2.3.jar differ
diff --git a/org.intrace/lib/org.eclipse.swt.win32.win32.x86_3.5.2.v3557f.jar b/org.intrace/lib/org.eclipse.swt.win32.win32.x86_3.5.2.v3557f.jar
new file mode 100644
index 0000000..9b10b0d
Binary files /dev/null and b/org.intrace/lib/org.eclipse.swt.win32.win32.x86_3.5.2.v3557f.jar differ
diff --git a/org.intrace/src/org/intrace/agent/Agent.java b/org.intrace/src/org/intrace/agent/Agent.java
new file mode 100644
index 0000000..c2f0874
--- /dev/null
+++ b/org.intrace/src/org/intrace/agent/Agent.java
@@ -0,0 +1,58 @@
+package org.intrace.agent;
+
+
+import java.io.IOException;
+import java.lang.instrument.Instrumentation;
+
+import org.intrace.agent.server.AgentServer;
+
+/**
+ * Trace Agent: Installs a Class Transformer to add trace lines.
+ */
+public class Agent
+{
+ /**
+ * Agent called on JVM init.
+ * @param agentArgs
+ * @param inst
+ * @throws IOException
+ */
+ public static void premain(String agentArgs, Instrumentation inst) throws IOException
+ {
+ initialize(agentArgs, inst);
+ }
+
+ /**
+ * Agent called after JVM init.
+ * @param agentArgs
+ * @param inst
+ * @throws IOException
+ */
+ public static void agentmain(String agentArgs, Instrumentation inst) throws IOException
+ {
+ initialize(agentArgs, inst);
+ }
+
+ /**
+ * Common init function.
+ * @param agentArgs
+ * @param inst
+ * @throws IOException
+ */
+ private static void initialize(String agentArgs, Instrumentation inst) throws IOException
+ {
+ System.out.println("Loaded Tracing Agent.");
+
+ AgentSettings args = new AgentSettings(agentArgs);
+ AgentHelper.getActiveOutputHandler().getResponse(agentArgs);
+
+ ClassTransformer t = new ClassTransformer(inst, args);
+ inst.addTransformer(t, true);
+ t.traceLoadedClasses();
+
+ Thread traceServer = new Thread(new AgentServer(t));
+ traceServer.setName("TraceServer");
+ traceServer.setDaemon(true);
+ traceServer.start();
+ }
+}
diff --git a/org.intrace/src/org/intrace/agent/AgentConfigConstants.java b/org.intrace/src/org/intrace/agent/AgentConfigConstants.java
new file mode 100644
index 0000000..4e9bcbd
--- /dev/null
+++ b/org.intrace/src/org/intrace/agent/AgentConfigConstants.java
@@ -0,0 +1,10 @@
+package org.intrace.agent;
+
+public class AgentConfigConstants
+{
+ public static final String CLASS_REGEX = "AGENT_CLASS_REGEX";
+ public static final String TRACING_ENABLED = "AGENT_TRACING_ENABLED";
+ public static final String SAVE_TRACED_CLASSFILES = "AGENT_SAVE_TRACED_CLASSFILES";
+ public static final String VERBOSE_MODE = "AGENT_VERBOSE_MODE";
+ public static final String ALLOW_JARS_TO_BE_TRACED = "AGENT_LLOW_JARS_TO_BE_TRACED";
+}
diff --git a/org.intrace/src/org/intrace/agent/AgentHelper.java b/org.intrace/src/org/intrace/agent/AgentHelper.java
new file mode 100644
index 0000000..3e69aa7
--- /dev/null
+++ b/org.intrace/src/org/intrace/agent/AgentHelper.java
@@ -0,0 +1,123 @@
+package org.intrace.agent;
+
+import org.intrace.output.IOutput;
+import org.intrace.output.trace.TraceOutput;
+
+
+/**
+ * Static implementation of the TraceWriter interface
+ */
+public class AgentHelper
+{
+ private static IOutput outputHandler = new TraceOutput();
+
+ public static IOutput getActiveOutputHandler()
+ {
+ return outputHandler;
+ }
+
+ public static void enter(String className, String methodName)
+ {
+ outputHandler.enter(className, methodName);
+ }
+
+ public static void arg(String className, String methodName, byte byteArg)
+ {
+ outputHandler.arg(className, methodName, byteArg);
+ }
+
+ public static void arg(String className, String methodName, byte[] byteArrayArg)
+ {
+ outputHandler.arg(className, methodName, byteArrayArg);
+ }
+
+ public static void arg(String className, String methodName, short shortArg)
+ {
+ outputHandler.arg(className, methodName, shortArg);
+ }
+
+ public static void arg(String className, String methodName, short[] shortArrayArg)
+ {
+ outputHandler.arg(className, methodName, shortArrayArg);
+ }
+
+ public static void arg(String className, String methodName, int intArg)
+ {
+ outputHandler.arg(className, methodName, intArg);
+ }
+
+ public static void arg(String className, String methodName, int[] intArrayArg)
+ {
+ outputHandler.arg(className, methodName, intArrayArg);
+ }
+
+ public static void arg(String className, String methodName, long longArg)
+ {
+ outputHandler.arg(className, methodName, longArg);
+ }
+
+ public static void arg(String className, String methodName, long[] longArrayArg)
+ {
+ outputHandler.arg(className, methodName, longArrayArg);
+ }
+
+ public static void arg(String className, String methodName, float floatArg)
+ {
+ outputHandler.arg(className, methodName, floatArg);
+ }
+
+ public static void arg(String className, String methodName, float[] floatArrayArg)
+ {
+ outputHandler.arg(className, methodName, floatArrayArg);
+ }
+
+ public static void arg(String className, String methodName, double doubleArg)
+ {
+ outputHandler.arg(className, methodName, doubleArg);
+ }
+
+ public static void arg(String className, String methodName, double[] doubleArrayArg)
+ {
+ outputHandler.arg(className, methodName, doubleArrayArg);
+ }
+
+ public static void arg(String className, String methodName, boolean boolArg)
+ {
+ outputHandler.arg(className, methodName, boolArg);
+ }
+
+ public static void arg(String className, String methodName, boolean[] boolArrayArg)
+ {
+ outputHandler.arg(className, methodName, boolArrayArg);
+ }
+
+ public static void arg(String className, String methodName, char charArg)
+ {
+ outputHandler.arg(className, methodName, charArg);
+ }
+
+ public static void arg(String className, String methodName, char[] charArrayArg)
+ {
+ outputHandler.arg(className, methodName, charArrayArg);
+ }
+
+ public static void arg(String className, String methodName, Object objArg)
+ {
+ outputHandler.arg(className, methodName, objArg);
+ }
+
+ public static void arg(String className, String methodName, Object[] objArrayArg)
+ {
+ outputHandler.arg(className, methodName, objArrayArg);
+ }
+
+ public static void branch(String className, String methodName, int lineNo)
+ {
+ outputHandler.branch(className, methodName, lineNo);
+ }
+
+ public static void exit(String className, String methodName, int lineNo)
+ {
+ outputHandler.exit(className, methodName, lineNo);
+ }
+}
diff --git a/org.intrace/src/org/intrace/agent/AgentSettings.java b/org.intrace/src/org/intrace/agent/AgentSettings.java
new file mode 100644
index 0000000..d8495e0
--- /dev/null
+++ b/org.intrace/src/org/intrace/agent/AgentSettings.java
@@ -0,0 +1,132 @@
+package org.intrace.agent;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Pattern;
+
+/**
+ * Args Format:
+ * "[arg1[arg2[arg3"
+ *
+ * where argx is of the form
+ * value-parameter
+ */
+public class AgentSettings
+{
+ private Pattern classRegex = Pattern.compile("");
+ private boolean tracingEnabled = false;
+ private boolean saveTracedClassfiles = false;
+ private boolean verboseMode = false;
+ private boolean allowJarsToBeTraced = false;
+
+ public AgentSettings(String args)
+ {
+ parseArg(args);
+ }
+
+ public AgentSettings(AgentSettings oldInstance)
+ {
+ classRegex = oldInstance.getClassRegex();
+ tracingEnabled = oldInstance.isTracingEnabled();
+ saveTracedClassfiles = oldInstance.saveTracedClassfiles();
+ verboseMode = oldInstance.isVerboseMode();
+ allowJarsToBeTraced = oldInstance.allowJarsToBeTraced();
+ }
+
+ public void parseArgs(String args)
+ {
+ String[] seperateArgs = args.split("\\[");
+ for (int ii = 0; ii < seperateArgs.length; ii++)
+ {
+ parseArg(seperateArgs[ii].toLowerCase());
+ }
+ }
+
+ private void parseArg(String arg)
+ {
+ if (arg.equals("verbose-true"))
+ {
+ verboseMode = true;
+ }
+ else if (arg.equals("verbose-false"))
+ {
+ verboseMode = false;
+ }
+ else if (arg.equals("instru-true"))
+ {
+ tracingEnabled = true;
+ }
+ else if (arg.equals("instru-false"))
+ {
+ tracingEnabled = false;
+ }
+ else if (arg.equals("saveinstru-true"))
+ {
+ saveTracedClassfiles = true;
+ }
+ else if (arg.equals("saveinstru-false"))
+ {
+ saveTracedClassfiles = false;
+ }
+ else if (arg.equals("instrujars-true"))
+ {
+ allowJarsToBeTraced = true;
+ }
+ else if (arg.equals("instrujars-false"))
+ {
+ allowJarsToBeTraced = false;
+ }
+ else if (arg.startsWith("regex-"))
+ {
+ String classRegexStr = arg.replace("regex-", "");
+ classRegex = Pattern.compile(classRegexStr);
+ }
+ }
+
+ public Pattern getClassRegex()
+ {
+ return classRegex;
+ }
+
+ public boolean isTracingEnabled()
+ {
+ return tracingEnabled;
+ }
+
+ public boolean saveTracedClassfiles()
+ {
+ return saveTracedClassfiles;
+ }
+
+ public boolean isVerboseMode()
+ {
+ return verboseMode;
+ }
+
+ public boolean allowJarsToBeTraced()
+ {
+ return allowJarsToBeTraced;
+ }
+
+ @Override
+ public String toString()
+ {
+ String currentSettings = "";
+ currentSettings += "Class Regex : " + classRegex + "\n";
+ currentSettings += "Tracing Enabled : " + tracingEnabled + "\n";
+ currentSettings += "Save Traced Class Files : " + saveTracedClassfiles + "\n";
+ currentSettings += "Trace Classes in JAR Files : " + allowJarsToBeTraced + "\n";
+ return currentSettings;
+ }
+
+ public Map getSettingsMap()
+ {
+ Map settingsMap = new HashMap();
+ settingsMap.put(AgentConfigConstants.TRACING_ENABLED, Boolean.toString(tracingEnabled));
+ settingsMap.put(AgentConfigConstants.CLASS_REGEX, classRegex.pattern());
+ settingsMap.put(AgentConfigConstants.ALLOW_JARS_TO_BE_TRACED, Boolean.toString(allowJarsToBeTraced));
+ settingsMap.put(AgentConfigConstants.VERBOSE_MODE, Boolean.toString(verboseMode));
+ settingsMap.put(AgentConfigConstants.SAVE_TRACED_CLASSFILES, Boolean.toString(saveTracedClassfiles));
+ return settingsMap;
+ }
+}
diff --git a/org.intrace/src/org/intrace/agent/ClassBranchLineAnalysis.java b/org.intrace/src/org/intrace/agent/ClassBranchLineAnalysis.java
new file mode 100644
index 0000000..2d9e3ea
--- /dev/null
+++ b/org.intrace/src/org/intrace/agent/ClassBranchLineAnalysis.java
@@ -0,0 +1,79 @@
+package org.intrace.agent;
+
+import static org.objectweb.asm.Opcodes.GOTO;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.objectweb.asm.Label;
+import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.commons.EmptyVisitor;
+
+/**
+ * First pass analysis phase
+ */
+public class ClassBranchLineAnalysis extends EmptyVisitor
+{
+ private Map> methodBranchTraceLines = new HashMap>();
+ private Set branchTraceLines = new HashSet();
+ private Map